@cdktn/provider-project 0.9.6 → 0.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +2 -2
- package/lib/index.js +14 -2
- package/package.json +1 -1
package/.jsii
CHANGED
package/lib/index.js
CHANGED
|
@@ -79,7 +79,7 @@ const githubActionPinnedVersions = {
|
|
|
79
79
|
"pnpm/action-setup": "fc06bc1257f339d1d5d8b3a19a8cae5388b55320", // v5
|
|
80
80
|
};
|
|
81
81
|
class CdktnProviderProject extends projen_1.cdk.JsiiProject {
|
|
82
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdktn/provider-project.CdktnProviderProject", version: "0.9.
|
|
82
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdktn/provider-project.CdktnProviderProject", version: "0.9.8" };
|
|
83
83
|
constructor(options) {
|
|
84
84
|
const cdktnVersion = options.cdktnVersion ?? options.cdktfVersion;
|
|
85
85
|
assert(cdktnVersion, "Either cdktnVersion or cdktfVersion must be provided");
|
|
@@ -558,6 +558,18 @@ class CdktnProviderProject extends projen_1.cdk.JsiiProject {
|
|
|
558
558
|
// throws "neither BUMP_TYPE nor SUGGESTED_BUMP is set", so all three are
|
|
559
559
|
// needed. Mirrors projen's own bump task (lib/version.js:128-144).
|
|
560
560
|
{ builtin: "release/resolve-latest-tag", outputEnv: "LATEST_TAG" },
|
|
561
|
+
// suggest-version-bump counts releasable commits *only* from
|
|
562
|
+
// $RELEASABLE_COMMITS. Without this spawn the count is 0, the suggested
|
|
563
|
+
// bump is "none", and apply-version-bump rewrites dist/releasetag.txt
|
|
564
|
+
// with the *previous* tag - which makes the release workflow think the
|
|
565
|
+
// version is already tagged and skip every publish job.
|
|
566
|
+
{
|
|
567
|
+
spawn: "bump:releasable-commits",
|
|
568
|
+
outputEnv: "RELEASABLE_COMMITS",
|
|
569
|
+
// On a first release the resolved tag is synthetic and does not exist,
|
|
570
|
+
// so there is nothing to diff against.
|
|
571
|
+
condition: 'git rev-parse --verify --quiet "refs/tags/$LATEST_TAG"',
|
|
572
|
+
},
|
|
561
573
|
{
|
|
562
574
|
builtin: "release/suggest-version-bump",
|
|
563
575
|
outputEnv: "SUGGESTED_BUMP",
|
|
@@ -698,4 +710,4 @@ function prettyAssertEqual(subject, expected, message) {
|
|
|
698
710
|
throw new Error(`${message ?? "Assertion failed"}: expected ${JSON.stringify(expected)} but got ${JSON.stringify(subject)}`);
|
|
699
711
|
}
|
|
700
712
|
}
|
|
701
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBEQUEwRDtBQUMxRCxpQ0FBa0M7QUFDbEMsNkNBQXlDO0FBQ3pDLG1DQUFxRTtBQUVyRSxzREFJK0I7QUFDL0IscURBQWdEO0FBQ2hELGlEQUE2QztBQUM3QywrRUFBeUU7QUFDekUsMkNBQXdDO0FBQ3hDLGlEQUE2QztBQUM3QywyREFBdUQ7QUFDdkQsNkRBQXlEO0FBQ3pELDZDQUEwQztBQUMxQyw2REFBeUQ7QUFDekQsbURBQStDO0FBQy9DLG1EQUErQztBQUMvQywrQ0FBMkM7QUFFM0MseURBQXFEO0FBQ3JELHFFQUEwRTtBQUMxRSw2REFBbUU7QUFDbkUsb0RBQWtFO0FBRWxFLG1IQUFtSDtBQUNuSCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUU1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLDJCQUEyQixHQUFHO0lBQ2xDLHlCQUF5QjtJQUN6QixPQUFPO0lBQ1AsV0FBVztDQUNaLENBQUM7QUE0RkYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxZQUFvQixFQUFVLEVBQUU7SUFDcEQsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxHQUFHLFlBQVksV0FBVztRQUM1QixDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxrQkFBa0IsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQ3pFLDJCQUEyQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDbEYsdUJBQXVCLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUM5RSxzQkFBc0IsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQzdFLGtC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LEtBQUssQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FDSixJQUFJLEVBQUUsR0FBRyxFQUNULHlIQUF5SCxDQUMxSCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsZUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztZQUN0RCxXQUFXLEVBQUUsZUFBZTtZQUM1QixnQkFBZ0IsRUFBRSx3QkFBd0I7WUFDMUMsS0FBSyxFQUFFLGdDQUFnQztZQUN2QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDdkMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLGVBQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtTQUNoRSxDQUFDLENBQUM7UUFFSCw0RUFBNEU7UUFDNUUsc0VBQXNFO1FBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsc0VBQXNFO1FBQ3RFLG9FQUFvRTtRQUNwRSx5RUFBeUU7UUFDekUsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLGtCQUFrQixjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEUsQ0FBQztDQUNGO0FBRUQsU0FBUyxpQkFBaUIsQ0FBSSxPQUFVLEVBQUUsUUFBVyxFQUFFLE9BQWdCO0lBQ3JFLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxPQUFPLElBQUksa0JBQWtCLGNBQWMsSUFBSSxDQUFDLFNBQVMsQ0FDMUQsUUFBUSxDQUNULFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUN2QyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5pbXBvcnQgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmltcG9ydCB7IHBhc2NhbENhc2UgfSBmcm9tIFwiY2hhbmdlLWNhc2VcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgVGV4dEZpbGUsIGNkaywgZ2l0aHViLCBKc29uUGF0Y2ggfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBKb2JTdGVwIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHtcbiAgTm9kZVBhY2thZ2VNYW5hZ2VyLFxuICBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYU5vZGVMaW5rZXIsXG4gIFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZSxcbn0gZnJvbSBcInByb2plbi9saWIvamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgQWxlcnRPcGVuUHJzIH0gZnJvbSBcIi4vYWxlcnQtb3Blbi1wcnNcIjtcbmltcG9ydCB7IEF1dG9BcHByb3ZlIH0gZnJvbSBcIi4vYXV0by1hcHByb3ZlXCI7XG5pbXBvcnQgeyBBdXRvQ2xvc2VDb21tdW5pdHlJc3N1ZXMgfSBmcm9tIFwiLi9hdXRvLWNsb3NlLWNvbW11bml0eS1pc3N1ZXNcIjtcbmltcG9ydCB7IEF1dG9tZXJnZSB9IGZyb20gXCIuL2F1dG9tZXJnZVwiO1xuaW1wb3J0IHsgQ2RrdGZDb25maWcgfSBmcm9tIFwiLi9jZGt0Zi1jb25maWdcIjtcbmltcG9ydCB7IENvcHlyaWdodEhlYWRlcnMgfSBmcm9tIFwiLi9jb3B5cmlnaHQtaGVhZGVyc1wiO1xuaW1wb3J0IHsgQ3VzdG9taXplZExpY2Vuc2UgfSBmcm9tIFwiLi9jdXN0b21pemVkLWxpY2Vuc2VcIjtcbmltcG9ydCB7IERlcGVuZGFib3QgfSBmcm9tIFwiLi9kZXBlbmRhYm90XCI7XG5pbXBvcnQgeyBEZXByZWNhdGVQYWNrYWdlcyB9IGZyb20gXCIuL2RlcHJlY2F0ZS1wYWNrYWdlc1wiO1xuaW1wb3J0IHsgRm9yY2VSZWxlYXNlIH0gZnJvbSBcIi4vZm9yY2UtcmVsZWFzZVwiO1xuaW1wb3J0IHsgR2l0aHViSXNzdWVzIH0gZnJvbSBcIi4vZ2l0aHViLWlzc3Vlc1wiO1xuaW1wb3J0IHsgTG9ja0lzc3VlcyB9IGZyb20gXCIuL2xvY2staXNzdWVzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSW5mbyB9IGZyb20gXCIuL3BhY2thZ2UtaW5mb1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJVcGdyYWRlIH0gZnJvbSBcIi4vcHJvdmlkZXItdXBncmFkZVwiO1xuaW1wb3J0IHsgQ2hlY2tGb3JVcGdyYWRlc1NjcmlwdEZpbGUgfSBmcm9tIFwiLi9zY3JpcHRzL2NoZWNrLWZvci11cGdyYWRlc1wiO1xuaW1wb3J0IHsgU2hvdWxkUmVsZWFzZVNjcmlwdEZpbGUgfSBmcm9tIFwiLi9zY3JpcHRzL3Nob3VsZC1yZWxlYXNlXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUNyb24sIFNjaGVkdWxlIH0gZnJvbSBcIi4vdXRpbC9yYW5kb20tY3JvblwiO1xuXG4vLyBlbnN1cmUgbmV3IHByb2plY3RzIHN0YXJ0IHdpdGggMS4wLjAgc28gdGhhdCBldmVyeSBmb2xsb3dpbmcgYnJlYWtpbmcgY2hhbmdlIGxlYWRzIHRvIGFuIGluY3JlYXNlZCBtYWpvciB2ZXJzaW9uXG5jb25zdCBNSU5fTUFKT1JfVkVSU0lPTiA9IDE7XG5cbi8qKlxuICogRmlyc3QtcGFydHkgcGFja2FnZXMgdGhhdCBhcmUgZXhlbXB0IGZyb20gdGhlIGRlcGVuZGVuY3ktdXBncmFkZSBjb29sZG93bi5cbiAqXG4gKiBUaGUgYGNvb2xkb3duOiA0YCBiZWxvdyByZWFjaGVzIHRoZSBnZW5lcmF0ZWQgdXBncmFkZSB0YXNrIGFzXG4gKiBgcG5wbSB1cGRhdGUgLS1jb25maWcubWluaW11bS1yZWxlYXNlLWFnZT01NzYwYCwgd2hpY2ggZ2F0ZXMgKmV2ZXJ5KiBwYWNrYWdlXG4gKiAtLSBpbmNsdWRpbmcgdGhlIG9uZXMgd2UgcHVibGlzaCBvdXJzZWx2ZXMuIFRoYXQgaXMgYmFja3dhcmRzIGZvciB0aG9zZTogYVxuICogZml4IHJlbGVhc2VkIGhlcmUgY2Fubm90IHJlYWNoIHRoZSBmbGVldCBmb3IgZm91ciBkYXlzLCB3aGljaCBpcyBleGFjdGx5IHRoZVxuICogd2luZG93IGluIHdoaWNoIHdlIG5lZWQgaXQgdG8gbW92ZS4gVGhlIGNvb2xkb3duIGV4aXN0cyB0byBnaXZlIGEgY29tcHJvbWlzZWRcbiAqIHRoaXJkLXBhcnR5IHJlbGVhc2UgdGltZSB0byBiZSBmbGFnZ2VkOyBmb3IgcGFja2FnZXMgcHVibGlzaGVkIGZyb20gcmVwb3Mgd2VcbiAqIG93biwgd2l0aCB0cnVzdGVkIHB1Ymxpc2hpbmcgYW5kIGFuIGF1ZGl0IGdhdGUgb24gdGhlaXIgb3duIHJlbGVhc2VzLCBpdCBidXlzXG4gKiBub3RoaW5nIHRoYXQgd2UgZG8gbm90IGFscmVhZHkgY29udHJvbC5cbiAqXG4gKiBgY2RrdG5gIGFuZCBgY2RrdG4tY2xpYCBhcmUgaGVyZSBmb3IgdGhlIHNhbWUgcmVhc29uOiBhIHByb3ZpZGVyIHJlcG8gaGFzIHRvXG4gKiBiZSBhYmxlIHRvIHJlYnVpbGQgYWdhaW5zdCBhIGZyZXNobHkgcmVsZWFzZWQgQ0RLVE4sIGVzcGVjaWFsbHkgYWZ0ZXIgYSBtYWpvclxuICogb25lLiBUaGV5IGFyZSBhbHNvIHZlcnNpb24tcGlubmVkIHRvZ2V0aGVyIGJ5IGBDZGt0ZkNvbmZpZ2AsIHNvIGV4Y2x1ZGluZyBvbmVcbiAqIHdpdGhvdXQgdGhlIG90aGVyIHdvdWxkIG9ubHkgaGFsZi1hcHBseS5cbiAqXG4gKiBwbnBtIGhvbm91cnMgdGhpcyBmcm9tIGBwbnBtLXdvcmtzcGFjZS55YW1sYCBldmVuIHRob3VnaCBgbWluaW11bVJlbGVhc2VBZ2VgXG4gKiBpdHNlbGYgYXJyaXZlcyBvbiB0aGUgY29tbWFuZCBsaW5lOyBpdCBtYXRjaGVzIG9uIHBhY2thZ2UgbmFtZSBhbmQgYXBwbGllcyB0b1xuICogZXZlcnkgdmVyc2lvbiBvZiB0aGF0IHBhY2thZ2UuIEV2ZXJ5dGhpbmcgbm90IGxpc3RlZCBoZXJlIHN0YXlzIGdhdGVkLlxuICovXG5jb25zdCBNSU5JTVVNX1JFTEVBU0VfQUdFX0VYQ0xVREUgPSBbXG4gIFwiQGNka3RuL3Byb3ZpZGVyLXByb2plY3RcIixcbiAgXCJjZGt0blwiLFxuICBcImNka3RuLWNsaVwiLFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBDZGt0blByb3ZpZGVyUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBjZGsuSnNpaVByb2plY3RPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlQ3VzdG9tR2l0aHViUnVubmVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFY4IGhlYXAgY2VpbGluZyBpbiBNaUIsIHdyaXR0ZW4gYXMgYC0tbWF4LW9sZC1zcGFjZS1zaXplYCBpbnRvIHRoZSBnbG9iYWxcbiAgICogYE5PREVfT1BUSU9OU2AgaW4gYC5wcm9qZW4vdGFza3MuanNvbmAuXG4gICAqXG4gICAqIE11c3QgYmUgYSBwb3NpdGl2ZSBzYWZlIGludGVnZXIuIE5vZGUgcmVmdXNlcyB0byBzdGFydCBvbiBhIG1hbGZvcm1lZFxuICAgKiB2YWx1ZSAoYC0tbWF4LW9sZC1zcGFjZS1zaXplPTEuNWAgYW5kIGA9TmFOYCBhcmUgYm90aCByZWplY3RlZCBiZWZvcmUgYW55XG4gICAqIHNjcmlwdCBydW5zKSwgYW5kIGAwYCByZXN0b3JlcyBWOCdzIG93biBkZWZhdWx0IHJhdGhlciB0aGFuIGFwcGx5aW5nIGFcbiAgICogY2VpbGluZyAtLSBzbyBhbiBpbnZhbGlkIHZhbHVlIGhlcmUgd291bGQgYnJlYWsgZXZlcnkgdGFzayBpbiB0aGVcbiAgICogZ2VuZXJhdGVkIHJlcG8sIGZhciBmcm9tIHRoaXMgY2FsbCBzaXRlLiBJdCBpcyB2YWxpZGF0ZWQgYXQgc3ludGggdGltZS5cbiAgICpcbiAgICogTGVhdmUgdW5zZXQgdG8gdGFrZSB0aGUgZGVmYXVsdCBmb3IgdGhlIHJ1bm5lciBjbGFzczpcbiAgICogYERFRkFVTFRfSEVBUF9NQl9DVVNUT01fUlVOTkVSYCAoMjA0ODAsIG9uIDMyR0IgY3VzdG9tIHJ1bm5lcnMpIG9yXG4gICAqIGBERUZBVUxUX0hFQVBfTUJfSE9TVEVEX1JVTk5FUmAgKDY2NTYsIG9uIDdHQiBHaXRIdWItaG9zdGVkIHJ1bm5lcnMpLlxuICAgKlxuICAgKiBTZXQgaXQgb25seSBmb3IgYSBwcm92aWRlciB0aGF0IHN0aWxsIE9PTXMgb24gdGhhdCBkZWZhdWx0LlxuICAgKiBgLS1tYXgtb2xkLXNwYWNlLXNpemVgIGlzIGEgKmNlaWxpbmcqLCBub3QgYSByZXNlcnZhdGlvbjogbG93ZXJpbmcgaXRcbiAgICogY2Fubm90IHNsb3cgZG93biBwcm92aWRlcnMgdGhhdCBuZXZlciBhcHByb2FjaCBpdCwgaXQgb25seSBtYWtlcyBWOFxuICAgKiBjb2xsZWN0IGhhcmRlciBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIGtlcm5lbCBPT00ta2lsbCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBERUZBVUxUX0hFQVBfTUJfQ1VTVE9NX1JVTk5FUiBpZiBgdXNlQ3VzdG9tR2l0aHViUnVubmVyYCxcbiAgICogb3RoZXJ3aXNlIERFRkFVTFRfSEVBUF9NQl9IT1NURURfUlVOTkVSXG4gICAqL1xuICByZWFkb25seSBub2RlSGVhcFNpemVNYj86IG51bWJlcjtcbiAgcmVhZG9ubHkgdGVycmFmb3JtUHJvdmlkZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgY2RrdG5WZXJzaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGNka3RuVmVyc2lvbmAgaW5zdGVhZC4gVGhpcyBhbGlhcyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICovXG4gIHJlYWRvbmx5IGNka3RmVmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgY29uc3RydWN0c1ZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgZm9yY2VNYWpvclZlcnNpb24/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcImNka3RuXCJcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiY2RrdG4taW9cIlxuICAgKiBwcmV2aW91c2x5IHdhcyBcImNka3RmXCIuIFVzZWQgZm9yIEdpdEh1YiBvcmcgbmFtZSBhbmQgcGFja2FnZSBzY29waW5nXG4gICAqL1xuICByZWFkb25seSBnaXRodWJOYW1lc3BhY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcIklvLkNka3RuXCJcbiAgICovXG4gIHJlYWRvbmx5IG51Z2V0T3JnPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJjZGt0blwiXG4gICAqL1xuICByZWFkb25seSBtYXZlbk9yZz86IHN0cmluZztcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiaW8uJHttYXZlbk9yZ31cIlxuICAgKi9cbiAgcmVhZG9ubHkgbWF2ZW5Hcm91cElkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHllYXIgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSByZXBvc2l0b3J5LCBmb3IgY29weXJpZ2h0IHB1cnBvc2VzLlxuICAgKiBXaWxsIGZhbGwgYmFjayB0byB0aGUgY3VycmVudCB5ZWFyIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBjcmVhdGlvblllYXI/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHByZWJ1aWx0IHByb3ZpZGVyIGlzIGRlcHJlY2F0ZWQuXG4gICAqIElmIHRydWUsIG5vIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHB1Ymxpc2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzRGVwcmVjYXRlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBkYXRlIHdoZW4gdGhlIHByb2plY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCwgdG8gYmUgdXNlZCBpbiB0aGUgUkVBRE1FIHRleHQuXG4gICAqIElmIG5vIGRhdGUgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGRhdGUgb2YgdGhlIGJ1aWxkIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcmVjYXRpb25EYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJIYXNoaUNvcnAsIEluYy5cIlxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2UgdHJ1c3RlZCBwdWJsaXNoaW5nIGZvciBwdWJsaXNoaW5nIHRvIHB5cGkub3JnXG4gICAqIE5lZWRzIHRvIGJlIHByZS1jb25maWd1cmVkIG9uIFB5UEkgdG8gd29yay5cbiAgICpcbiAgICogVGhlIGByZWxlYXNlX3B5cGlgIGpvYiBrZWVwcyB3aGF0ZXZlciBydW5uZXIgdGhlIHByb2plY3QgaXMgY29uZmlndXJlZCBmb3IuXG4gICAqIFB5UEksIHVubGlrZSBucG0sIGRvZXMgbm90IHJlc3RyaWN0IHRydXN0ZWQgcHVibGlzaGluZyB0byBHaXRIdWItaG9zdGVkXG4gICAqIHJ1bm5lcnMgLS0gdHJ1c3QgaXMgYm91bmQgdG8gdGhlIHdvcmtmbG93IHJlZiwgYW5kIHRoZSBPSURDIHRva2VuIGlzIG1pbnRlZFxuICAgKiBmcm9tIEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwsIHdoaWNoIGlzIGF2YWlsYWJsZSBvbiBhbnkgcnVubmVyIHdpdGhcbiAgICogYGlkLXRva2VuOiB3cml0ZWAuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLnB5cGkub3JnL3RydXN0ZWQtcHVibGlzaGVycy9cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHlwaVRydXN0ZWRQdWJsaXNoaW5nPzogYm9vbGVhbjtcbn1cblxuY29uc3QgZ2V0TWF2ZW5OYW1lID0gKHByb3ZpZGVyTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIFtcIm51bGxcIiwgXCJyYW5kb21cIl0uaW5jbHVkZXMocHJvdmlkZXJOYW1lKVxuICAgID8gYCR7cHJvdmlkZXJOYW1lfV9wcm92aWRlcmBcbiAgICA6IHByb3ZpZGVyTmFtZS5yZXBsYWNlKC8tL2dpLCBcIl9cIik7XG59O1xuXG5jb25zdCBnaXRodWJBY3Rpb25QaW5uZWRWZXJzaW9ucyA9IHtcbiAgXCJhY3Rpb25zL2NoZWNrb3V0XCI6IFwiZGUwZmFjMmU0NTAwZGFiZTAwMDllNjcyMTRmZjVmNTQ0N2NlODNkZFwiLCAvLyB2Ni4wLjJcbiAgXCJhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0XCI6IFwiM2U1ZjQ1YjJjZmI5MTcyMDU0YjQwODdhNDBlOGUwYjVhNTQ2MWU3Y1wiLCAvLyB2OC4wLjFcbiAgXCJhY3Rpb25zL2dpdGh1Yi1zY3JpcHRcIjogXCJlZDU5NzQxMWQ4ZjkyNDA3M2Y5OGRmYzVjNjVhMjNhMjMyNWYzNGNkXCIsIC8vIHY4LjAuMFxuICBcImFjdGlvbnMvc2V0dXAtZG90bmV0XCI6IFwiYzJmYTA5ZjRiZGU1ZWJiOWQxNzc3Y2YyODI2MmEzZWIzZGIzY2VkN1wiLCAvLyB2NS4yLjBcbiAgXCJhY3Rpb25zL3NldHVwLWdvXCI6IFwiNGEzNjAxMTIxZGQwMWQxNjI2YTFlMjNlMzcyMTFlMzI1NGMxYzA2Y1wiLCAvLyB2Ni40LjBcbiAgXCJhY3Rpb25zL3NldHVwLWphdmFcIjogXCJiZTY2NmMyZmNkMjdlYzgwOTcwM2RlYzUwZTUwOGMyZmRjN2Y2NjU0XCIsIC8vIHY1LjIuMFxuICBcImFjdGlvbnMvc2V0dXAtbm9kZVwiOiBcIjQ4YjU1YTAxMWJkYTlmNWQ2YWViNGMyZDljNzM2MmU4ZGFlNDA0MWVcIiwgLy8gdjYuNC4wXG4gIFwiYWN0aW9ucy9zZXR1cC1weXRob25cIjogXCJhMzA5ZmY4YjQyNmI1OGVjMGUyYTQ1ZjBmODY5ZDQ2ODg5ZDAyNDA1XCIsIC8vIHY2LjIuMFxuICBcImFjdGlvbnMvc3RhbGVcIjogXCJiNWQ0MWQ0ZTFkNWRjZWVhMTBlNzEwNDc4NmI3MzYyNGMxOGExOTBmXCIsIC8vIHYxMC4yLjBcbiAgXCJhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdFwiOiBcIjA0M2ZiNDZkMWE5M2M3N2FhZTY1NmU3YzFjNjRhODc1ZDFmYzZhMGFcIiwgLy8gdjcuMC4xXG4gIFwiYW1hbm5uL2FjdGlvbi1zZW1hbnRpYy1wdWxsLXJlcXVlc3RcIjpcbiAgICBcIjQ4ZjI1NjI4NGJkNDZjZGFhYjEwNDhjMzcyMTM2MGU4MDgzMzVkNTBcIiwgLy8gdjYuMS4xXG4gIFwiZGVzc2FudC9sb2NrLXRocmVhZHNcIjogXCI3MjY2YTdjZTVjMWRmMDFiMWM2ZGI4NWJmOGNkODZjNzM3ZGFkYmU3XCIsIC8vIHY2LjAuMFxuICBcImhhc2hpY29ycC9zZXR1cC1jb3B5d3JpdGVcIjogXCIzMjYzOGRhMmQ0ZTgxZDU2YTA3NjRhYTE1NDc4ODJmYzRkMjA5NjM2XCIsIC8vIHYxLjEuM1xuICBcImhhc2hpY29ycC9zZXR1cC10ZXJyYWZvcm1cIjogXCI1ZThkYmYzYzZkOWRlYWY0MTkzY2E3YThmYjIzZjJhYzgzYmI2Yzg1XCIsIC8vIHY0LjAuMFxuICBcImltam9obmJvL2lzc3VlLWJvdFwiOiBcIjMxODhjNmNlMDYyNDkyMDY3MDlkM2IxZjI3NGQwZDRjNWE1MjE2MDFcIiwgLy8gdjMuNC41XG4gIFwicGV0ZXItZXZhbnMvY3JlYXRlLXB1bGwtcmVxdWVzdFwiOiBcIjVmNjk3OGZhZjA4OWQ0ZDIwYjAwYzc3NjY5ODlkMDc2YmIyZmM3ZjFcIiwgLy8gdjguMS4xXG4gIFwic2xhY2thcGkvc2xhY2stZ2l0aHViLWFjdGlvblwiOiBcIjQ1YTg4Yjk1ODFiZmFiMjU2NmRjODgxZTJjZDY2ZDMzNGU2MjFlMmNcIiwgLy8gdjMuMC4zXG4gIFwiYWN0aW9ucy9jcmVhdGUtZ2l0aHViLWFwcC10b2tlblwiOiBcIjI5ODI0ZTY5ZjU0NjEyMTMzZTc2ZjdlYWFjNzI2ZWVmNmM4NzViYWZcIiwgLy8gdjIuMi4xXG4gIC8vIHByb2plbiBlbWl0cyB0aGlzIHVucGlubmVkIGFzIGBwbnBtL2FjdGlvbi1zZXR1cEB2NWAgb25jZSBwYWNrYWdlTWFuYWdlciBpcyBwbnBtXG4gIFwicG5wbS9hY3Rpb24tc2V0dXBcIjogXCJmYzA2YmMxMjU3ZjMzOWQxZDVkOGIzYTE5YThjYWU1Mzg4YjU1MzIwXCIsIC8vIHY1XG59O1xuXG5leHBvcnQgY2xhc3MgQ2RrdG5Qcm92aWRlclByb2plY3QgZXh0ZW5kcyBjZGsuSnNpaVByb2plY3Qge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDZGt0blByb3ZpZGVyUHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCBjZGt0blZlcnNpb24gPSBvcHRpb25zLmNka3RuVmVyc2lvbiA/PyBvcHRpb25zLmNka3RmVmVyc2lvbjtcbiAgICBhc3NlcnQoXG4gICAgICBjZGt0blZlcnNpb24sXG4gICAgICBcIkVpdGhlciBjZGt0blZlcnNpb24gb3IgY2RrdGZWZXJzaW9uIG11c3QgYmUgcHJvdmlkZWRcIlxuICAgICk7XG5cbiAgICBjb25zdCB7XG4gICAgICB0ZXJyYWZvcm1Qcm92aWRlcixcbiAgICAgIHdvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICBjb25zdHJ1Y3RzVmVyc2lvbixcbiAgICAgIG1pbk5vZGVWZXJzaW9uLFxuICAgICAganNpaVZlcnNpb24sXG4gICAgICB0eXBlc2NyaXB0VmVyc2lvbixcbiAgICAgIGlzRGVwcmVjYXRlZCxcbiAgICAgIGRlcHJlY2F0aW9uRGF0ZSxcbiAgICAgIC8vIFRPRE86IENvbmZpcm0gZGVmYXVsdCBBdXRob3IgTmFtZVxuICAgICAgYXV0aG9yTmFtZSA9IFwiQ0RLIFRlcnJhaW4gTWFpbnRhaW5lcnNcIixcbiAgICAgIGF1dGhvckFkZHJlc3MgPSBcImh0dHBzOi8vY2RrdG4uaW9cIixcbiAgICAgIG5hbWVzcGFjZSA9IFwiY2RrdG5cIixcbiAgICAgIGdpdGh1Yk5hbWVzcGFjZSA9IFwiY2RrdG4taW9cIixcbiAgICAgIG51Z2V0T3JnID0gXCJJby5DZGt0blwiLFxuICAgICAgbWF2ZW5PcmcgPSBcImNka3RuXCIsXG4gICAgICBucG1UcnVzdGVkUHVibGlzaGluZyxcbiAgICAgIHB5cGlUcnVzdGVkUHVibGlzaGluZyxcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IFtmcXByb3ZpZGVyTmFtZSwgcHJvdmlkZXJWZXJzaW9uXSA9IHRlcnJhZm9ybVByb3ZpZGVyLnNwbGl0KFwiQFwiKTtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBmcXByb3ZpZGVyTmFtZS5zcGxpdChcIi9cIikucG9wKCk7XG4gICAgYXNzZXJ0KHByb3ZpZGVyTmFtZSwgYCR7dGVycmFmb3JtUHJvdmlkZXJ9IGRvZXNuJ3Qgc2VlbSB0byBiZSB2YWxpZGApO1xuICAgIGFzc2VydChcbiAgICAgICFwcm92aWRlck5hbWUuZW5kc1dpdGgoXCItZ29cIiksXG4gICAgICBcInByb3ZpZGVyTmFtZSBtYXkgbm90IGVuZCB3aXRoICctZ28nIGFzIHRoaXMgY2FuIGNvbmZsaWN0IHdpdGggcmVwb3MgZm9yIGdvIHBhY2thZ2VzXCJcbiAgICApO1xuXG4gICAgY29uc3QgbnVnZXROYW1lID0gYCR7bnVnZXRPcmd9LlByb3ZpZGVycy4ke3Bhc2NhbENhc2UocHJvdmlkZXJOYW1lKX1gO1xuICAgIGNvbnN0IG1hdmVuR3JvdXBJZCA9IG9wdGlvbnMubWF2ZW5Hcm91cElkID8/IGBpby4ke21hdmVuT3JnfWA7XG4gICAgY29uc3QgbWF2ZW5OYW1lID0gYCR7bWF2ZW5Hcm91cElkfS5wcm92aWRlcnMuJHtnZXRNYXZlbk5hbWUocHJvdmlkZXJOYW1lKX1gO1xuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBgJHtnaXRodWJOYW1lc3BhY2V9LyR7bmFtZXNwYWNlfS1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKFxuICAgICAgLy0vZyxcbiAgICAgIFwiXCJcbiAgICApfWA7XG4gICAgY29uc3QgcmVwb3NpdG9yeVVybCA9IGBnaXRodWIuY29tLyR7cmVwb3NpdG9yeX1gO1xuXG4gICAgY29uc3QgcGFja2FnZUluZm86IFBhY2thZ2VJbmZvID0ge1xuICAgICAgbnBtOiB7XG4gICAgICAgIG5hbWU6IGBAJHtuYW1lc3BhY2V9L3Byb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWAsXG4gICAgICB9LFxuICAgICAgcHl0aG9uOiB7XG4gICAgICAgIC8vIGRpc3ROYW1lOiBgJHtnaXRodWJOYW1lc3BhY2V9LSR7bmFtZXNwYWNlfS1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKFxuICAgICAgICBkaXN0TmFtZTogYCR7bmFtZXNwYWNlfS1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKC8tL2dpLCBcIl9cIil9YCxcbiAgICAgICAgLy8gbW9kdWxlOiBgJHtnaXRodWJOYW1lc3BhY2V9XyR7bmFtZXNwYWNlfV9wcm92aWRlcl8ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKFxuICAgICAgICBtb2R1bGU6IGAke25hbWVzcGFjZX1fcHJvdmlkZXJfJHtwcm92aWRlck5hbWUucmVwbGFjZSgvLS9naSwgXCJfXCIpfWAsXG4gICAgICAgIHRydXN0ZWRQdWJsaXNoaW5nOiBweXBpVHJ1c3RlZFB1Ymxpc2hpbmcgPz8gZmFsc2UsXG4gICAgICB9LFxuICAgICAgcHVibGlzaFRvTnVnZXQ6IHtcbiAgICAgICAgZG90TmV0TmFtZXNwYWNlOiBudWdldE5hbWUsXG4gICAgICAgIHBhY2thZ2VJZDogbnVnZXROYW1lLFxuICAgICAgfSxcbiAgICAgIHB1Ymxpc2hUb01hdmVuOiB7XG4gICAgICAgIGphdmFQYWNrYWdlOiBtYXZlbk5hbWUsXG4gICAgICAgIG1hdmVuR3JvdXBJZDogbWF2ZW5Hcm91cElkLFxuICAgICAgICBtYXZlbkFydGlmYWN0SWQ6IGAke25hbWVzcGFjZX0tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YCxcbiAgICAgIH0sXG4gICAgICBwdWJsaXNoVG9Hbzoge1xuICAgICAgICBtb2R1bGVOYW1lOiBgJHtyZXBvc2l0b3J5VXJsfS1nb2AsXG4gICAgICAgIGdpdFVzZXJFbWFpbDogXCJnaXRodWItdGVhbS1jZGstdGVycmFpbkBjZGt0bi5pb1wiLFxuICAgICAgICBnaXRVc2VyTmFtZTogXCJ0ZWFtLWNkay10ZXJyYWluXCIsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBwcm92aWRlck5hbWUucmVwbGFjZSgvLS9nLCBcIlwiKSxcbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gdXNlIHRoZSBjb3B5d3JpdGUgYWN0aW9uLCB3ZSBuZWVkIHRvIHJlYnVpbGQgdGhlIGZ1bGwgcHJlLXB1Ymxpc2ggc3RlcHMgd29ya2Zsb3cgdW5mb3J0dW5hdGVseVxuICAgICAgICAvLyBJZiBzb21lb25lIGtub3dzIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIG11dGF0aW9uIHdpdGggbWluaW1hbCBjdXN0b20gY29kZSwgcGxlYXNlIGRvIHNvXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwczogW1xuICAgICAgICAgIC8vIE5PVEU6IHRoZSBcIlNldHVwIHBucG1cIiBzdGVwIHRoaXMgam9iIG5lZWRzIGlzIGluc2VydGVkIGJ5XG4gICAgICAgICAgLy8gR29QdWJsaXNoSm9iUGF0Y2ggYXQgc3ludGggdGltZSwgbm90IGhlcmUgLS0gaXQgaGFzIHRvIHJlYWRcbiAgICAgICAgICAvLyBgdGhpcy5wYWNrYWdlLnBucG1WZXJzaW9uYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgeWV0IGF0IHN1cGVyKCkuXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDaGVja291dFwiLFxuICAgICAgICAgICAgdXNlczogXCJhY3Rpb25zL2NoZWNrb3V0XCIsXG4gICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgIHBhdGg6IFwiLnJlcG9cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkluc3RhbGwgRGVwZW5kZW5jaWVzXCIsXG4gICAgICAgICAgICBydW46IFwiY2QgLnJlcG8gJiYgcG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkV4dHJhY3QgYnVpbGQgYXJ0aWZhY3RcIixcbiAgICAgICAgICAgIHJ1bjogXCJ0YXIgLS1zdHJpcC1jb21wb25lbnRzPTEgLXh6dmYgZGlzdC9qcy8qLnRneiAtQyAucmVwb1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJNb3ZlIGJ1aWxkIGFydGlmYWN0IG91dCBvZiB0aGUgd2F5XCIsXG4gICAgICAgICAgICBydW46IFwibXYgZGlzdCBkaXN0Lm9sZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDcmVhdGUgZ28gYXJ0aWZhY3RcIixcbiAgICAgICAgICAgIHJ1bjogXCJjZCAucmVwbyAmJiBucHggcHJvamVuIHBhY2thZ2U6Z29cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiU2V0dXAgQ29weXdyaXRlIHRvb2xcIixcbiAgICAgICAgICAgIHVzZXM6IFwiaGFzaGljb3JwL3NldHVwLWNvcHl3cml0ZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDb3B5IGNvcHl3cml0ZSBoY2wgZmlsZVwiLFxuICAgICAgICAgICAgcnVuOiBcImNwIC5yZXBvLy5jb3B5d3JpdGUuaGNsIC5yZXBvL2Rpc3QvZ28vLmNvcHl3cml0ZS5oY2xcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQWRkIGhlYWRlcnMgdXNpbmcgQ29weXdyaXRlIHRvb2xcIixcbiAgICAgICAgICAgIHJ1bjogXCJjZCAucmVwby9kaXN0L2dvICYmIGNvcHl3cml0ZSBoZWFkZXJzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlJlbW92ZSBjb3B5d3JpdGUgaGNsIGZpbGVcIixcbiAgICAgICAgICAgIHJ1bjogXCJybSAtZiAucmVwby9kaXN0L2dvLy5jb3B5d3JpdGUuaGNsXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlJlbW92ZSBzb21lIHRleHQgZnJvbSB0aGUgUkVBRE1FIHRoYXQgZG9lc24ndCBhcHBseSB0byBHb1wiLFxuICAgICAgICAgICAgcnVuOiBbXG4gICAgICAgICAgICAgIFwic2VkIC1pICdzLyMgQ0RLVE4gcHJlYnVpbHQgYmluZGluZ3MgZm9yLyMgQ0RLVE4gR28gYmluZGluZ3MgZm9yLycgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZFwiLFxuICAgICAgICAgICAgICAvLyBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTUxMTk0OVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcbiAgICAgICAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgICAgICAgIGBzZWQgLWkgLWUgJy8jIyAke2lzRGVwcmVjYXRlZCA/IFwiRGVwcmVjYXRlZFwiIDogXCJBdmFpbGFibGVcIn0gUGFja2FnZXMvLC8jIyMgR28vIWInIC1lICcvIyMjIEdvLyFkO3A7IHMvIyMjIEdvLyMjIEdvIFBhY2thZ2UvJyAtZSAnZCcgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZGAsXG4gICAgICAgICAgICAgIC8vIHNlZCAtZSBpcyBibGFjayBtYWdpYyBhbmQgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgc3RyaW5nIHJlcGxhY2UgZG9lc24ndCB3b3JrIHNvIGxldCdzIHRyeSBpdCBhZ2FpbjpcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXG4gICAgICAgICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAgICAgICBgc2VkIC1pICdzLyMjIyBHby8jIyAke2lzRGVwcmVjYXRlZCA/IFwiRGVwcmVjYXRlZFwiIDogXCJHb1wifSBQYWNrYWdlLycgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZGAsXG4gICAgICAgICAgICAgIC8vIEp1c3Qgc3RyYWlnaHQgdXAgZGVsZXRlIHRoZXNlIGZ1bGwgbGluZXMgYW5kIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB0aGVtOlxuICAgICAgICAgICAgICBcInNlZCAtaSAtZSAnL0FQSS50eXBlc2NyaXB0Lm1kLywvWW91IGNhbiBhbHNvIHZpc2l0IGEgaG9zdGVkIHZlcnNpb24vIWInIC1lICdkJyAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kXCIsXG4gICAgICAgICAgICAgIGBzZWQgLWkgJ3N8RmluZCBhdXRvLWdlbmVyYXRlZCBkb2NzIGZvciB0aGlzIHByb3ZpZGVyIGhlcmU6fEZpbmQgYXV0by1nZW5lcmF0ZWQgZG9jcyBmb3IgdGhpcyBwcm92aWRlciBbaGVyZV0oaHR0cHM6Ly8ke3JlcG9zaXRvcnlVcmx9L2Jsb2IvbWFpbi9kb2NzL0FQSS5nby5tZCkufCcgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZGAsXG4gICAgICAgICAgICAgIC8vIEp1c3Qgc3RyYWlnaHQgdXAgZGVsZXRlIHRoZXNlIGZ1bGwgbGluZXMgYW5kIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB0aGVtOlxuICAgICAgICAgICAgICBcInNlZCAtaSAtZSAnLyMjIyBQcm92aWRlciBWZXJzaW9uLywvVGhlIHByb3ZpZGVyIHZlcnNpb24gY2FuIGJlIGFkanVzdGVkLyFiJyAtZSAnZCcgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZFwiLFxuICAgICAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDb3B5IHRoZSBSRUFETUUgZmlsZSB0byB0aGUgcGFyZW50IGRpcmVjdG9yeVwiLFxuICAgICAgICAgICAgcnVuOiBcImNwIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWQgLnJlcG8vZGlzdC9nby9SRUFETUUubWRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ29sbGVjdCBnbyBBcnRpZmFjdFwiLFxuICAgICAgICAgICAgcnVuOiBcIm12IC5yZXBvL2Rpc3QgZGlzdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB3b3JrZmxvd1J1bnNPbiA9IG9wdGlvbnMudXNlQ3VzdG9tR2l0aHViUnVubmVyXG4gICAgICA/IFtcImRlcG90LXVidW50dS0yNC4wNC04XCJdIC8vIDggY29yZSwgMzIgR0JcbiAgICAgIDogW1widWJ1bnR1LWxhdGVzdFwiXTsgLy8gNyBHQlxuXG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGF1dGhvckFkZHJlc3MsXG4gICAgICBhdXRob3JOYW1lLFxuICAgICAgbWluTm9kZVZlcnNpb24sXG4gICAgICB3b3JrZmxvd0NvbnRhaW5lckltYWdlLFxuICAgICAgd29ya2Zsb3dSdW5zT24sXG4gICAgICBsaWNlbnNlZDogZmFsc2UsIC8vIHdlIGRvIHN1cHBseSBvdXIgb3duIGxpY2Vuc2UgZmlsZSB3aXRoIGEgY3VzdG9tIGhlYWRlclxuICAgICAgcmVsZWFzZVRvTnBtOiB0cnVlLFxuICAgICAgbnBtVHJ1c3RlZFB1Ymxpc2hpbmc6IG5wbVRydXN0ZWRQdWJsaXNoaW5nID8/IGZhbHNlLFxuICAgICAgbmFtZTogcGFja2FnZUluZm8ubnBtLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFByZWJ1aWx0ICR7cHJvdmlkZXJOYW1lfSBQcm92aWRlciBmb3IgQ0RLIFRlcnJhaW4gKGNka3RuKWAsXG4gICAgICBrZXl3b3JkczogW1xuICAgICAgICBcImNka3RuXCIsXG4gICAgICAgIFwiY2RrLXRlcnJhaW5cIixcbiAgICAgICAgXCJjZGt0ZlwiLFxuICAgICAgICBcInRlcnJhZm9ybVwiLFxuICAgICAgICBcIm9wZW50b2Z1XCIsXG4gICAgICAgIFwiY2RrXCIsXG4gICAgICAgIFwicHJvdmlkZXJcIixcbiAgICAgICAgcHJvdmlkZXJOYW1lLFxuICAgICAgXSxcbiAgICAgIHNhbXBsZUNvZGU6IGZhbHNlLFxuICAgICAgamVzdDogZmFsc2UsXG4gICAgICBhdXRob3JPcmdhbml6YXRpb246IHRydWUsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogXCJtYWluXCIsXG4gICAgICByZXBvc2l0b3J5OiBgaHR0cHM6Ly9naXRodWIuY29tLyR7cmVwb3NpdG9yeX0uZ2l0YCxcbiAgICAgIGVzbGludDogZmFsc2UsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE0sXG4gICAgICAvLyBQcm92aWRlciByZXBvcyBydW4ganNpaS1wYWNtYWsgb3ZlciBidW5kbGVkIGRlcHMgZXhhY3RseSBhcyB0aGlzIHByb2plY3RcbiAgICAgIC8vIGRvZXMsIHNvIHRoZXkgbmVlZCB0aGUgaG9pc3RlZCBsaW5rZXIgdG9vIC0tIHNlZSB0aGUgbm90ZSBpbiAucHJvamVucmMudHMuXG4gICAgICAvLyBJdCBtdXN0IGJlIGluIHBucG0td29ya3NwYWNlLnlhbWwsIG5vdCAubnBtcmMsIG9yIHBucG0gMTEgaWdub3JlcyBpdC5cbiAgICAgIHBucG1PcHRpb25zOiB7XG4gICAgICAgIHdvcmtzcGFjZVlhbWxPcHRpb25zOiB7XG4gICAgICAgICAgbm9kZUxpbmtlcjogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFOb2RlTGlua2VyLkhPSVNURUQsXG4gICAgICAgICAgYXVkaXRDb25maWc6IHtcbiAgICAgICAgICAgIC8vIFNhbWUgZmxhdC1yYW5nZSBhcnRpZmFjdCB0aGlzIHByb2plY3QgaWdub3JlcyBmb3IgaXRzZWxmOlxuICAgICAgICAgICAgLy8gR0hTQS1taDk5LXY5OW0tNGd2ZyBkZWNsYXJlcyBhZmZlY3RlZCBcIjw9NS4wLjdcIiwgd2hpY2ggbmFpdmVseSBtYXRjaGVzXG4gICAgICAgICAgICAvLyB0aGUgMS54IGxpbmUuIFByb3ZpZGVyIHJlcG9zIHJlYWNoIGJyYWNlLWV4cGFuc2lvbkAxIHZpYVxuICAgICAgICAgICAgLy8gY2RrdG4tY2xpID4gQGNka3RuL2hjbDJjZGsgPiBnbG9iID4gbWluaW1hdGNoQDMsIGFuZCB0aGVyZSBpcyBubyBmaXhlZFxuICAgICAgICAgICAgLy8gMS54IHRvIG1vdmUgdG8gLS0gZm9yY2luZyA1LjAuOCB3b3VsZCBicmVhayBtaW5pbWF0Y2hAMywgd2hpY2ggcmVxdWlyZXNcbiAgICAgICAgICAgIC8vIF4xLjEuNy4gRGV2IHRvb2xpbmcgb25seTsgbmV2ZXIgc2hpcHBlZC5cbiAgICAgICAgICAgIGlnbm9yZUdoc2FzOiBbXCJHSFNBLW1oOTktdjk5bS00Z3ZnXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gTGV0IGZpcnN0LXBhcnR5IHJlbGVhc2VzIHNraXAgdGhlIGBjb29sZG93bmAgYmVsb3cgLS0gc2VlIHRoZSBub3RlIG9uXG4gICAgICAgICAgLy8gdGhlIGNvbnN0YW50LiBUaGlyZC1wYXJ0eSBkZXBzIGFyZSB1bmFmZmVjdGVkLlxuICAgICAgICAgIG1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZTogTUlOSU1VTV9SRUxFQVNFX0FHRV9FWENMVURFLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRlcHNVcGdyYWRlOiAhaXNEZXByZWNhdGVkLFxuICAgICAgZGVwc1VwZ3JhZGVPcHRpb25zOiB7XG4gICAgICAgIC8vIFNraXAgdmVyc2lvbnMgcHVibGlzaGVkIGluIHRoZSBsYXN0IDQgZGF5cywgc28gYSBjb21wcm9taXNlZCByZWxlYXNlIGhhc1xuICAgICAgICAvLyB0aW1lIHRvIGJlIGZsYWdnZWQgYmVmb3JlIGFuIGF1dG8tbWVyZ2luZyB1cGdyYWRlIFBSIHB1bGxzIGl0IGluLiBXYWl2ZWRcbiAgICAgICAgLy8gZm9yIHRoZSBwYWNrYWdlcyBpbiBNSU5JTVVNX1JFTEVBU0VfQUdFX0VYQ0xVREUuXG4gICAgICAgIGNvb2xkb3duOiA0LFxuICAgICAgICB3b3JrZmxvd09wdGlvbnM6IHtcbiAgICAgICAgICBsYWJlbHM6IFtcImF1dG9tZXJnZVwiLCBcImF1dG8tYXBwcm92ZVwiLCBcImRlcGVuZGVuY2llc1wiXSxcbiAgICAgICAgICBzY2hlZHVsZTogVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlLldFRUtMWSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdWRpdERlcHM6ICFpc0RlcHJlY2F0ZWQsXG4gICAgICBhdWRpdERlcHNPcHRpb25zOiB7XG4gICAgICAgIGxldmVsOiBcImhpZ2hcIixcbiAgICAgICAgcnVuT246IFwiYnVpbGRcIixcbiAgICAgIH0sXG4gICAgICBwdWJsaXNoVG9QeXBpOiBwYWNrYWdlSW5mby5weXRob24sXG4gICAgICBwdWJsaXNoVG9OdWdldDogcGFja2FnZUluZm8ucHVibGlzaFRvTnVnZXQsXG4gICAgICBwdWJsaXNoVG9NYXZlbjogcGFja2FnZUluZm8ucHVibGlzaFRvTWF2ZW4sXG4gICAgICBwdWJsaXNoVG9HbzogcGFja2FnZUluZm8ucHVibGlzaFRvR28sXG4gICAgICByZWxlYXNlRmFpbHVyZUlzc3VlOiB0cnVlLFxuICAgICAgcGVlckRlcGVuZGVuY3lPcHRpb25zOiB7XG4gICAgICAgIHBpbm5lZERldkRlcGVuZGVuY3k6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHdvcmtmbG93R2l0SWRlbnRpdHk6IHtcbiAgICAgICAgbmFtZTogXCJ0ZWFtLWNkay10ZXJyYWluXCIsXG4gICAgICAgIGVtYWlsOiBcImdpdGh1Yi10ZWFtLWNkay10ZXJyYWluQGNka3RuLmlvXCIsXG4gICAgICB9LFxuICAgICAgbWluTWFqb3JWZXJzaW9uOiBNSU5fTUFKT1JfVkVSU0lPTixcbiAgICAgIHN0YWxlOiB0cnVlLFxuICAgICAgc3RhbGVPcHRpb25zOiB7XG4gICAgICAgIGlzc3Vlczoge1xuICAgICAgICAgIHN0YWxlTGFiZWw6IFwic3RhbGVcIixcbiAgICAgICAgICBkYXlzQmVmb3JlU3RhbGU6IDQ1LFxuICAgICAgICAgIHN0YWxlTWVzc2FnZTpcbiAgICAgICAgICAgIFwiNDUgZGF5cyBoYXZlIHBhc3NlZCBzaW5jZSB0aGlzIGlzc3VlIHdhcyBvcGVuZWQsIGFuZCBJIGFzc3VtZSBvdGhlciBwdWJsaXNoZXMgaGF2ZSBzdWNjZWVkZWQgaW4gdGhlIG1lYW50aW1lLiBcIiArXG4gICAgICAgICAgICBcIklmIG5vIG9uZSByZW1vdmVzIHRoZSBgc3RhbGVgIGxhYmVsIG9yIGNvbW1lbnRzLCBJJ20gZ29pbmcgdG8gYXV0by1jbG9zZSB0aGlzIGlzc3VlIGluIDE0IGRheXMuXCIsXG4gICAgICAgICAgZGF5c0JlZm9yZUNsb3NlOiAxNCxcbiAgICAgICAgICBjbG9zZU1lc3NhZ2U6XG4gICAgICAgICAgICBcIjIgbW9udGhzIGhhdmUgcGFzc2VkLCBzbyBJJ20gY2xvc2luZyB0aGlzIGlzc3VlIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBvdGhlciBwdWJsaXNoZXMgaGF2ZSBzdWNjZWVkZWQgaW4gdGhlIG1lYW50aW1lLlwiLFxuICAgICAgICB9LFxuICAgICAgICBwdWxsUmVxdWVzdDoge1xuICAgICAgICAgIHN0YWxlTGFiZWw6IFwic3RhbGVcIixcbiAgICAgICAgICBkYXlzQmVmb3JlU3RhbGU6IDEsXG4gICAgICAgICAgc3RhbGVNZXNzYWdlOiBgQ2xvc2luZyB0aGlzIFBSLCBpZiBpdCBoYXMgbm90IG1lcmdlZCB0aGVyZSBpcyBtb3N0IGxpa2VseSBhIENJIG9yIENES1ROIGlzc3VlIHByZXZlbnRpbmcgaXQgZnJvbSBtZXJnaW5nLiBJZiB0aGlzIGhhcyBiZWVuIGEgbWFudWFsIFBSLCBwbGVhc2UgcmVvcGVuIGl0IGFuZCBhZGQgdGhlIFxcYG5vLWF1dG8tY2xvc2VcXGAgbGFiZWwgdG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nIGFnYWluLmAsXG4gICAgICAgICAgZGF5c0JlZm9yZUNsb3NlOiAwLFxuICAgICAgICAgIGV4ZW1wdExhYmVsczogW1wibm8tYXV0by1jbG9zZVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwdWxsUmVxdWVzdFRlbXBsYXRlOiBmYWxzZSxcbiAgICAgIGRvY2dlbjogZmFsc2UsXG4gICAgICBnaXRodWJPcHRpb25zOiB7XG4gICAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcCgpLFxuICAgICAgICAvLyBwcm9qZW4gPj0wLjEwMCBtb3ZlZCB0aGUgYG1lcmdpZnlgIHByb2plY3Qgb3B0aW9uIHVuZGVyIGdpdGh1Yk9wdGlvbnNcbiAgICAgICAgbWVyZ2lmeTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGREZXZEZXBzKFxuICAgICAgXCJkb3QtcHJvcEBeNS4yLjBcIixcbiAgICAgIC8vIF4xLjEuMCBjb3VsZCBuZXZlciBsZWF2ZSB0aGUgMS54IGxpbmUsIHdoaWNoIGRyYWdzIGluIGFuIG9sZFxuICAgICAgLy8gQGFjdGlvbnMvaHR0cC1jbGllbnQgYW5kIHdpdGggaXQgdW5kaWNpIDw2LjI0LjAgLS0gdGhyZWUgaGlnaCBhZHZpc29yaWVzXG4gICAgICAvLyAoR0hTQS12cm02LTh2cHYtcXY4cSwgR0hTQS12OXA5LWhmajItaGN3OCwgYW5kIHRoZSA8Ni4yNy4wIGZyYWdtZW50LWNvdW50XG4gICAgICAvLyBEb1MpLiAzLnggZGVwZW5kcyBvbiBAYWN0aW9ucy9odHRwLWNsaWVudCBeNCAtPiB1bmRpY2kgXjYuMjMuMCwgcmVzb2x2aW5nXG4gICAgICAvLyB0byA2LjI4LjAuIE5PVEU6IDMueCBpcyBFU00tb25seSwgc28gY2hlY2stZm9yLXVwZ3JhZGVzLmpzIGxvYWRzIGl0IHdpdGggYVxuICAgICAgLy8gZHluYW1pYyBpbXBvcnQgcmF0aGVyIHRoYW4gYHJlcXVpcmVgLlxuICAgICAgXCJAYWN0aW9ucy9jb3JlQF4zLjAuMFwiLFxuICAgICAgXCJAYWN0aW9uLXZhbGlkYXRvci9jb3JlXCIsXG4gICAgICBcIkBhY3Rpb24tdmFsaWRhdG9yL2NsaVwiXG4gICAgKTtcblxuICAgIC8vIERlZmF1bHQgbWVtb3J5IGlzIDdHQjogaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy91c2luZy1naXRodWItaG9zdGVkLXJ1bm5lcnMvYWJvdXQtZ2l0aHViLWhvc3RlZC1ydW5uZXJzI3N1cHBvcnRlZC1ydW5uZXJzLWFuZC1oYXJkd2FyZS1yZXNvdXJjZXNcbiAgICAvLyBDdXN0b20gUnVubmVycyB3ZSB1c2UgaGF2ZSAzMkdCIG9mIG1lbW9yeS5cbiAgICAvL1xuICAgIC8vIFRoZSBjdXN0b20tcnVubmVyIGNlaWxpbmcgaGFzIHRvIHNpdCBiZWxvdyB0aGUgbWVtb3J5IGEgam9iIGNhbiBBQ1RVQUxMWVxuICAgIC8vIGdldCwgb3IgVjggbmV2ZXIgZmVlbHMgcHJlc3N1cmUgdG8gY29sbGVjdCBhbmQgdGhlIGtlcm5lbCBPT00ta2lsbHMgdGhlXG4gICAgLy8gcHJvY2VzcyBmaXJzdC4gVGhlIHNpZ25hdHVyZSBpcyBkaXN0aW5jdGl2ZTogdGhlIHN0ZXAgc2l0cyBpbl9wcm9ncmVzcyB3aXRoXG4gICAgLy8gYSBudWxsIGNvbXBsZXRlZEF0IChraWxsZWQgcHJvY2Vzcywgbm90IGEgbm9uLXplcm8gZXhpdCkgYW5kIHRoZSBqb2IgYnVybnNcbiAgICAvLyB+MTItMTNtIGluc3RlYWQgb2YgdGhlIH40bSBhIGhlYWx0aHkgcnVuIHRha2VzLiBTZWUgIzM0LlxuICAgIC8vXG4gICAgLy8gXCJCZWxvdyBhdmFpbGFibGUgUkFNXCIgaXMgbm90IHRoZSBzYW1lIGFzIFwiYmVsb3cgdGhlIGFkdmVydGlzZWQgUkFNXCIsIHdoaWNoXG4gICAgLy8gaXMgd2hhdCB0aGUgZmlyc3QgdHdvIGF0dGVtcHRzIGF0IHRoaXMgbnVtYmVyIGdvdCB3cm9uZy4gZGVwb3QtdWJ1bnR1LTI0LjA0LThcbiAgICAvLyBhZHZlcnRpc2VzIDMyR0IsIGJ1dCBEZXBvdCByZXNlcnZlcyA4R0Igb2YgaXQgZm9yIHRoZSBpbi1tZW1vcnkgZGlza1xuICAgIC8vIGFjY2VsZXJhdG9yIChcImEgcG9ydGlvbiBvZiB0aGUgbWVtb3J5IG9uIHRoZSBydW5uZXIgaG9zdCBmb3IgYSBkaXNrXG4gICAgLy8gYWNjZWxlcmF0b3IsIGJhY2tlZCBieSBhIFJBTSBkaXNrXCIpLCBsZWF2aW5nIH4yNEdCIHVzYWJsZSAtLSBhbmQgdGhlXG4gICAgLy8gd29ya3NwYWNlIGxpdmVzIG9uIHRoYXQgUkFNIGRpc2ssIHNvIHRoZSBnZW5lcmF0ZWQgYmluZGluZ3Mgc3F1ZWV6ZSB0aGUgc2FtZVxuICAgIC8vIHBvb2wgcGFjbWFrIGlzIGdyb3dpbmcgaW50by4gMzE3NDQgKH45NyUgb2YgMzJHQikgYW5kIHRoZW4gMjg2NzIgKH45MCUpIGJvdGhcbiAgICAvLyBzYXQgQUJPVkUgdGhhdCByZWFsIGNlaWxpbmcsIHNvIGxvd2VyaW5nIGl0IHRoZSBmaXJzdCB0aW1lIGNoYW5nZWQgbm90aGluZzpcbiAgICAvLyBjZGt0bi1wcm92aWRlci1kYXRhZG9nIGRpZWQgYXQgMTJtMjFzIG9uIDMxNzQ0IGFuZCBhZ2FpbiBhdCAxMm0yM3MvMTJtNDBzIG9uXG4gICAgLy8gMjg2NzIsIHNhbWUgc2lsZW50IGtpbGwuXG4gICAgLy9cbiAgICAvLyBFbXBpcmljYWxseTogZGF0YWRvZydzIHBhY2thZ2U6Z28sIHdoaWNoIGhhZCBuZXZlciBvbmNlIGNvbXBsZXRlZCwgZmluaXNoZWRcbiAgICAvLyBpdHMgYENyZWF0ZSBnbyBhcnRpZmFjdGAgc3RlcCBpbiAzbTAxcyBhdCAxNjM4NCAocnVuIDMwODI0Nzg3MjkxKS4gMjA0ODBcbiAgICAvLyBrZWVwcyB+NEdCIGJlbG93IHRoZSB+MjRHQiB1c2FibGUgbGluZSB3aGlsZSBnaXZpbmcgcGFjbWFrIG1vcmUgcm9vbSB0aGFuIHRoZVxuICAgIC8vIHZlcmlmaWVkLWdvb2QgdmFsdWUuIFRoaXMgaXMgYSBjZWlsaW5nLCBub3QgYSByZXNlcnZhdGlvbiAtLSBwcm92aWRlcnMgdGhhdFxuICAgIC8vIG5ldmVyIGFwcHJvYWNoIGl0IGFyZSB1bmFmZmVjdGVkLCBzbyBpdCBjb3N0cyBub3RoaW5nIHRvIGxlYXZlIGhlYWRyb29tIGhlcmUuXG4gICAgY29uc3QgREVGQVVMVF9IRUFQX01CX0NVU1RPTV9SVU5ORVIgPSAyMDQ4MDtcbiAgICBjb25zdCBERUZBVUxUX0hFQVBfTUJfSE9TVEVEX1JVTk5FUiA9IDY2NTY7IC8vIDYuNUdCIG9mIDdHQlxuXG4gICAgLy8gYG5vZGVIZWFwU2l6ZU1iYCBpcyBwdWJsaWMgQVBJIGFuZCwgdmlhIGpzaWksIHJlYWNoYWJsZSBmcm9tIFB5dGhvbiwgR28sXG4gICAgLy8gSmF2YSBhbmQgLk5FVCB3aGVyZSBgbnVtYmVyYCBpcyBldmVuIGxvb3NlciB0aGFuIFR5cGVTY3JpcHQncy4gTm9kZVxuICAgIC8vIHJlZnVzZXMgdG8gc3RhcnQgb24gYSBtYWxmb3JtZWQgY2VpbGluZyAtLSBgLS1tYXgtb2xkLXNwYWNlLXNpemU9MS41YFxuICAgIC8vIGFuZCBgPU5hTmAgYXJlIGJvdGggcmVqZWN0ZWQgYmVmb3JlIGFueSBzY3JpcHQgcnVucyAtLSBhbmQgYDBgIHNpbGVudGx5XG4gICAgLy8gcmVzdG9yZXMgVjgncyBkZWZhdWx0IGluc3RlYWQgb2YgYXBwbHlpbmcgYSBsaW1pdC4gSW50ZXJwb2xhdGluZyBhblxuICAgIC8vIHVuY2hlY2tlZCB2YWx1ZSB3b3VsZCB0aGVyZWZvcmUgYnJlYWsgZXZlcnkgdGFzayBpbiB0aGUgZ2VuZXJhdGVkIHJlcG8sXG4gICAgLy8gc3VyZmFjaW5nIGFzIGFuIGluc2NydXRhYmxlIHN0YXJ0dXAgZmFpbHVyZSBpbiBDSSByYXRoZXIgdGhhbiBoZXJlLlxuICAgIGFzc2VydChcbiAgICAgIG9wdGlvbnMubm9kZUhlYXBTaXplTWIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAoTnVtYmVyLmlzU2FmZUludGVnZXIob3B0aW9ucy5ub2RlSGVhcFNpemVNYikgJiZcbiAgICAgICAgICBvcHRpb25zLm5vZGVIZWFwU2l6ZU1iID4gMCksXG4gICAgICBgbm9kZUhlYXBTaXplTWIgbXVzdCBiZSBhIHBvc2l0aXZlIHNhZmUgaW50ZWdlciAoTWlCKSwgZ290ICR7b3B0aW9ucy5ub2RlSGVhcFNpemVNYn1gXG4gICAgKTtcblxuICAgIGNvbnN0IG1heE9sZFNwYWNlU2l6ZSA9IFN0cmluZyhcbiAgICAgIG9wdGlvbnMubm9kZUhlYXBTaXplTWIgPz9cbiAgICAgICAgKG9wdGlvbnMudXNlQ3VzdG9tR2l0aHViUnVubmVyXG4gICAgICAgICAgPyBERUZBVUxUX0hFQVBfTUJfQ1VTVE9NX1JVTk5FUlxuICAgICAgICAgIDogREVGQVVMVF9IRUFQX01CX0hPU1RFRF9SVU5ORVIpXG4gICAgKTtcblxuICAgIC8vIEdvbGFuZyBuZWVkcyBtb3JlIG1lbW9yeSB0byBidWlsZFxuICAgIHRoaXMudGFza3MuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIk5PREVfT1BUSU9OU1wiLFxuICAgICAgYC0tbWF4LW9sZC1zcGFjZS1zaXplPSR7bWF4T2xkU3BhY2VTaXplfWBcbiAgICApO1xuXG4gICAgdGhpcy50YXNrcy5hZGRFbnZpcm9ubWVudChcIkNIRUNLUE9JTlRfRElTQUJMRVwiLCBcIjFcIik7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRhc2sgPSB0aGlzLmFkZFRhc2soXCJ2YWxpZGF0ZS13b3JrZmxvd3NcIiwge1xuICAgICAgZXhlYzogYGZpbmQgLi8uZ2l0aHViL3dvcmtmbG93cyAtdHlwZSBmIC1uYW1lIFwiKi55bWxcIiAtcHJpbnQwIHwgeGFyZ3MgLTAgLW4gMSBucHggYWN0aW9uLXZhbGlkYXRvcmAsXG4gICAgfSk7XG4gICAgdmFsaWRhdGVUYXNrLmRlc2NyaXB0aW9uID1cbiAgICAgIFwiTGludCB0aGUgWUFNTCBmaWxlcyBnZW5lcmF0ZWQgYnkgUHJvamVuIHRvIGRlZmluZSBHaXRIdWIgQWN0aW9ucyBhbmQgV29ya2Zsb3dzLCBjaGVja2luZyB0aGVtIGFnYWluc3QgcHVibGlzaGVkIEpTT04gc2NoZW1hc1wiO1xuICAgIHRoaXMucG9zdENvbXBpbGVUYXNrLnNwYXduKHZhbGlkYXRlVGFzayk7XG5cbiAgICB0aGlzLnBhY2thZ2UuYWRkUGFja2FnZVJlc29sdXRpb25zKFwiQHR5cGVzL3lhcmdzQDE3LjAuMTNcIik7XG5cbiAgICBjb25zdCBzZXRTYWZlRGlyZWN0b3J5ID0ge1xuICAgICAgbmFtZTogXCJTZXQgZ2l0IGNvbmZpZyBzYWZlLmRpcmVjdG9yeVwiLFxuICAgICAgcnVuOiBcImdpdCBjb25maWcgLS1nbG9iYWwgLS1hZGQgc2FmZS5kaXJlY3RvcnkgJChwd2QpXCIsXG4gICAgfTtcblxuICAgICgodGhpcy5idWlsZFdvcmtmbG93IGFzIGFueSkucHJlQnVpbGRTdGVwcyBhcyBKb2JTdGVwW10pLnB1c2goXG4gICAgICBzZXRTYWZlRGlyZWN0b3J5XG4gICAgKTtcbiAgICAodGhpcy5yZWxlYXNlIGFzIGFueSkuZGVmYXVsdEJyYW5jaC53b3JrZmxvdy5qb2JzLnJlbGVhc2Uuc3RlcHMuc3BsaWNlKFxuICAgICAgMSxcbiAgICAgIDAsXG4gICAgICBzZXRTYWZlRGlyZWN0b3J5XG4gICAgKTtcblxuICAgIC8vIGFsd2F5cyBwdWJsaXNoIGEgbmV3IEdpdEh1YiByZWxlYXNlLCBldmVuIHdoZW4gcHVibGlzaGluZyB0byBhIHBhcnRpY3VsYXIgcGFja2FnZSBtYW5hZ2VyIGZhaWxzXG4gICAgY29uc3QgcmVsZWFzZVdvcmtmbG93ID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZShcbiAgICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvcmVsZWFzZS55bWxcIlxuICAgICk7XG4gICAgcmVsZWFzZVdvcmtmbG93Py5hZGRPdmVycmlkZShcImpvYnMucmVsZWFzZV9naXRodWIubmVlZHNcIiwgXCJyZWxlYXNlXCIpO1xuXG4gICAgLy8gVHJ1c3RlZCBwdWJsaXNoaW5nIHJlcXVpcmVzIG5wbSA+PTExLjUuMSB3aGljaCBzaGlwcyB3aXRoIE5vZGUgMjRcbiAgICBpZiAobnBtVHJ1c3RlZFB1Ymxpc2hpbmcpIHtcbiAgICAgIHRoaXMuZ2l0aHViXG4gICAgICAgID8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKVxuICAgICAgICA/LmZpbGU/LnBhdGNoKFxuICAgICAgICAgIEpzb25QYXRjaC5yZXBsYWNlKFxuICAgICAgICAgICAgXCIvam9icy9yZWxlYXNlX25wbS9zdGVwcy8wL3dpdGgvbm9kZS12ZXJzaW9uXCIsXG4gICAgICAgICAgICBcIjI0LnhcIlxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgLy8gTlBNIE9JREMgZG9lc24ndCBzdXBwb3J0IHNlbGYtaG9zdGVkIHJ1bm5lcnMgeWV0XG4gICAgICB0aGlzLmdpdGh1YlxuICAgICAgICA/LnRyeUZpbmRXb3JrZmxvdyhcInJlbGVhc2VcIilcbiAgICAgICAgPy5maWxlPy5wYXRjaChcbiAgICAgICAgICBKc29uUGF0Y2gucmVwbGFjZShcIi9qb2JzL3JlbGVhc2VfbnBtL3J1bnMtb25cIiwgXCJ1YnVudHUtbGF0ZXN0XCIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTk9URTogcmVsZWFzZV9weXBpIGRlbGliZXJhdGVseSBzdGF5cyBvbiB3aGF0ZXZlciBydW5uZXIgdGhlIHByb2plY3QgaXNcbiAgICAvLyBjb25maWd1cmVkIGZvci4gVW5saWtlIG5wbSwgUHlQSSBwbGFjZXMgbm8gcmVzdHJpY3Rpb24gb24gdGhlIHJ1bm5lclxuICAgIC8vIGVudmlyb25tZW50OiBwdWJsaWItcHlwaSBtaW50cyBpdHMgdG9rZW4gd2l0aCBgcHl0aG9uMyAtbSBpZCBweXBpYCBhZ2FpbnN0XG4gICAgLy8gQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1VSTCwgd2hpY2ggR2l0SHViIGluamVjdHMgb24gYW55IHJ1bm5lciBnaXZlblxuICAgIC8vIGBpZC10b2tlbjogd3JpdGVgLCBhbmQgUHlQSSdzIHRydXN0IGlzIGJvdW5kIHRvIHRoZSB3b3JrZmxvdyByZWYsIG5vdCB0aGVcbiAgICAvLyBydW5uZXIuIEZvcmNpbmcgdGhpcyBqb2Igb250byBhIGhvc3RlZCBydW5uZXIgd291bGQgYWxzbyBzdHJhbmQgaXQgd2l0aCB0aGVcbiAgICAvLyAyMEdCIE5PREVfT1BUSU9OUyBoZWFwIGNlaWxpbmcgdGhhdCB1c2VDdXN0b21HaXRodWJSdW5uZXIgd3JpdGVzIGludG9cbiAgICAvLyAucHJvamVuL3Rhc2tzLmpzb24sIG9uIGEgYm94IHdpdGggZmFyIGxlc3MgUkFNIHRoYW4gdGhhdCAtLSBhbmQgdW5saWtlXG4gICAgLy8gcGFja2FnZTpqcywgcGFja2FnZTpweXRob24gaXMgYSByZWFsIGpzaWktcGFjbWFrIHRyYW5zcGlsZS5cblxuICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBmYWlsIGlmIHRoZSByZWxlYXNlIGZpbGUgaXMgbm90IHByZXNlbnRcbiAgICBjb25zdCBjaGVja0V4aXN0aW5nVGFnU3RlcCA9IChcbiAgICAgIHRoaXMucmVsZWFzZSBhcyBhbnlcbiAgICApLmRlZmF1bHRCcmFuY2gud29ya2Zsb3cuam9icy5yZWxlYXNlLnN0ZXBzLmZpbmQoXG4gICAgICAoczogb2JqZWN0KSA9PiBcImlkXCIgaW4gcyAmJiBzLmlkID09PSBcImNoZWNrX3RhZ19leGlzdHNcIlxuICAgICk7XG4gICAgY29uc3Qgb2xkRXhpc3RpbmdUYWdSdW46IHN0cmluZyA9IGNoZWNrRXhpc3RpbmdUYWdTdGVwLnJ1bjtcbiAgICBwcmV0dHlBc3NlcnRFcXVhbChcbiAgICAgIG9sZEV4aXN0aW5nVGFnUnVuLnNwbGl0KFwiXFxuXCIpWzBdLFxuICAgICAgXCJUQUc9JChjYXQgZGlzdC9yZWxlYXNldGFnLnR4dClcIixcbiAgICAgIFwicmVsZWFzZSBzdGVwIGNoYW5nZWQsIHBsZWFzZSBjaGVjayBpZiB0aGUgd29ya2Fyb3VuZCBzdGlsbCB3b3JrcyFcIlxuICAgICk7XG4gICAgY2hlY2tFeGlzdGluZ1RhZ1N0ZXAucnVuID0gYGlmIFsgISAtZiBkaXN0L3JlbGVhc2V0YWcudHh0IF07IHRoZW4gKGVjaG8gXCJleGlzdHM9dHJ1ZVwiID4+ICRHSVRIVUJfT1VUUFVUKSAmJiBleGl0IDA7IGZpXFxuJHtvbGRFeGlzdGluZ1RhZ1J1bn1gO1xuXG4gICAgaWYgKCFpc0RlcHJlY2F0ZWQpIHtcbiAgICAgIGNvbnN0IHsgdXBncmFkZSwgcHIgfSA9ICh0aGlzLnVwZ3JhZGVXb3JrZmxvdyBhcyBhbnkpLndvcmtmbG93c1swXS5qb2JzO1xuICAgICAgdXBncmFkZS5zdGVwcy5zcGxpY2UoMSwgMCwgc2V0U2FmZURpcmVjdG9yeSk7XG4gICAgICBwci5zdGVwcy5zcGxpY2UoMSwgMCwgc2V0U2FmZURpcmVjdG9yeSk7XG4gICAgfVxuXG4gICAgLy8gcmVsZWFzZTogR28g4oCUIGNvbXBsZXRlIHRoZSBoYW5kLWJ1aWx0IEdvIHB1Ymxpc2ggam9iLiBEZXByZWNhdGVkIHByb2plY3RzXG4gICAgLy8gc3RpbGwgcHVibGlzaCBHbywgc28gdGhleSBzdGlsbCBuZWVkIHRoZSBwbnBtIHNldHVwOyBvbmx5IHRoZSBBcHAgdG9rZW4gaXNcbiAgICAvLyBjb25kaXRpb25hbCwgc2luY2UgdGhleSBkbyBub3QgcHVzaCBuZXcgbW9kdWxlIHZlcnNpb25zLlxuICAgIG5ldyBHb1B1Ymxpc2hKb2JQYXRjaCh0aGlzLCB7XG4gICAgICBhcHBUb2tlblJlcG9zaXRvcnk6IGlzRGVwcmVjYXRlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHBhY2thZ2VJbmZvLnB1Ymxpc2hUb0dvPy5tb2R1bGVOYW1lPy5zcGxpdChcIi9cIikucG9wKCkgPz8gXCJcIixcbiAgICB9KTtcblxuICAgIC8vIEZpeCBtYXZlbiBpc3N1ZSAoaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvcHVibGliL3B1bGwvNzc3KVxuICAgIC8vXG4gICAgLy8gVGhlIHB1Ymxpc2ggam9icyBkb24ndCBleGlzdCB1bnRpbCBSZWxlYXNlIHN5bnRoZXNpemVzLCBhbmQgdGhlIHN0ZXAncyBpbmRleFxuICAgIC8vIHdpdGhpbiByZWxlYXNlX21hdmVuIHNoaWZ0cyB3aGVuZXZlciB0aGUgam9iIGdhaW5zIGEgc3RlcCAtLSBzd2l0Y2hpbmcgdGhlXG4gICAgLy8gcGFja2FnZSBtYW5hZ2VyIHRvIHBucG0gaW5zZXJ0cyBhIFwiU2V0dXAgcG5wbVwiIHN0ZXAsIHdoaWNoIHNpbGVudGx5IG1vdmVkIHRoZVxuICAgIC8vIG9sZCBoYXJkY29kZWQgL3N0ZXBzLzEwLyBvbnRvIGEgc3RlcCB3aXRoIG5vIGVudiBhdCBhbGwuIFJlc29sdmUgdGhlIHN0ZXAgYnlcbiAgICAvLyB3aGF0IGl0IHJ1bnMsIGluIHByZVN5bnRoZXNpemUsIHNvIG5laXRoZXIgcHJvYmxlbSBjYW4gcmVjdXIuXG4gICAgbmV3IE1hdmVuT3B0c1BhdGNoKHRoaXMpO1xuXG4gICAgdGhpcy5waW5HaXRodWJBY3Rpb25WZXJzaW9ucyhnaXRodWJBY3Rpb25QaW5uZWRWZXJzaW9ucyk7XG5cbiAgICBuZXcgQ2RrdGZDb25maWcodGhpcywge1xuICAgICAgdGVycmFmb3JtUHJvdmlkZXIsXG4gICAgICBwcm92aWRlck5hbWUsXG4gICAgICBmcXByb3ZpZGVyTmFtZSxcbiAgICAgIHByb3ZpZGVyVmVyc2lvbixcbiAgICAgIGNka3RuVmVyc2lvbixcbiAgICAgIGNvbnN0cnVjdHNWZXJzaW9uLFxuICAgICAganNpaVZlcnNpb24sXG4gICAgICB0eXBlc2NyaXB0VmVyc2lvbixcbiAgICAgIHBhY2thZ2VJbmZvLFxuICAgICAgZ2l0aHViTmFtZXNwYWNlLFxuICAgICAgZGVwcmVjYXRpb25EYXRlLFxuICAgICAgaXNEZXByZWNhdGVkOiAhIWlzRGVwcmVjYXRlZCxcbiAgICB9KTtcbiAgICBuZXcgQ3VzdG9taXplZExpY2Vuc2UodGhpcywgb3B0aW9ucy5jcmVhdGlvblllYXIsIG9wdGlvbnMubGljZW5zZWUpO1xuICAgIG5ldyBHaXRodWJJc3N1ZXModGhpcywgeyBwcm92aWRlck5hbWUgfSk7XG4gICAgbmV3IEF1dG9BcHByb3ZlKHRoaXMpO1xuICAgIG5ldyBBdXRvQ2xvc2VDb21tdW5pdHlJc3N1ZXModGhpcywgeyBwcm92aWRlck5hbWUgfSk7XG4gICAgbmV3IEF1dG9tZXJnZSh0aGlzKTtcbiAgICBuZXcgTG9ja0lzc3Vlcyh0aGlzKTtcblxuICAgIGlmICghaXNEZXByZWNhdGVkKSB7XG4gICAgICBjb25zdCB1cGdyYWRlU2NyaXB0ID0gbmV3IENoZWNrRm9yVXBncmFkZXNTY3JpcHRGaWxlKHRoaXMsIHtcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uLFxuICAgICAgICBmcXByb3ZpZGVyTmFtZSxcbiAgICAgIH0pO1xuICAgICAgbmV3IFByb3ZpZGVyVXBncmFkZSh0aGlzLCB7XG4gICAgICAgIGNoZWNrRm9yVXBncmFkZXNTY3JpcHRQYXRoOiB1cGdyYWRlU2NyaXB0LnBhdGgsXG4gICAgICAgIHdvcmtmbG93UnVuc09uLFxuICAgICAgICBub2RlSGVhcFNpemU6IG1heE9sZFNwYWNlU2l6ZSxcbiAgICAgIH0pO1xuICAgICAgbmV3IEFsZXJ0T3BlblBycyh0aGlzLCB7XG4gICAgICAgIHNsYWNrV2ViaG9va1VybDogXCIke3sgc2VjcmV0cy5BTEVSVF9QUlNfU0xBQ0tfV0VCSE9PS19VUkwgfX1cIixcbiAgICAgICAgcmVwb3NpdG9yeSxcbiAgICAgIH0pO1xuICAgICAgbmV3IERlcGVuZGFib3QodGhpcyk7XG4gICAgfVxuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsIFwiLmdpdGh1Yi9DT0RFT1dORVJTXCIsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIFwiIyBUaGVzZSBvd25lcnMgd2lsbCBiZSB0aGUgZGVmYXVsdCBvd25lcnMgZm9yIGV2ZXJ5dGhpbmcgaW4gXCIsXG4gICAgICAgIFwiIyB0aGUgcmVwby4gVW5sZXNzIGEgbGF0ZXIgbWF0Y2ggdGFrZXMgcHJlY2VkZW5jZSwgXCIsXG4gICAgICAgIFwiIyB0aGV5IHdpbGwgYmUgcmVxdWVzdGVkIGZvciByZXZpZXcgd2hlbiBzb21lb25lIG9wZW5zIGEgXCIsXG4gICAgICAgIFwiIyBwdWxsIHJlcXVlc3QuXCIsXG4gICAgICAgIFwiKiAgICAgICBAY2RrdG4taW8vdGVhbS1jZGstdGVycmFpblwiLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGlmICghaXNEZXByZWNhdGVkKSB7XG4gICAgICBuZXcgU2hvdWxkUmVsZWFzZVNjcmlwdEZpbGUodGhpcywge30pO1xuXG4gICAgICBjb25zdCByZWxlYXNlVGFzayA9IHRoaXMudGFza3MudHJ5RmluZChcInJlbGVhc2VcIikhO1xuICAgICAgdGhpcy5yZW1vdmVUYXNrKFwicmVsZWFzZVwiKTtcbiAgICAgIHRoaXMuYWRkVGFzayhcInJlbGVhc2VcIiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogcmVsZWFzZVRhc2suZGVzY3JpcHRpb24sXG4gICAgICAgIHN0ZXBzOiByZWxlYXNlVGFzay5zdGVwcyxcbiAgICAgICAgZW52OiAocmVsZWFzZVRhc2sgYXMgYW55KS5fZW52LFxuICAgICAgICBjb25kaXRpb246IFwibm9kZSAuL3NjcmlwdHMvc2hvdWxkLXJlbGVhc2UuanNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRUYXNrKFwidW5jb25kaXRpb25hbC1yZWxlYXNlXCIsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHJlbGVhc2VUYXNrLmRlc2NyaXB0aW9uLFxuICAgICAgICBzdGVwczogcmVsZWFzZVRhc2suc3RlcHMsXG4gICAgICAgIGVudjogKHJlbGVhc2VUYXNrIGFzIGFueSkuX2VudixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZWxlYXNlSm9iU3RlcHM6IGFueVtdID0gKFxuICAgICAgICB0aGlzLmdpdGh1Yj8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKSBhcyBhbnlcbiAgICAgICkuam9icy5yZWxlYXNlLnN0ZXBzO1xuICAgICAgY29uc3QgZ2l0UmVtb3RlSm9iID0gcmVsZWFzZUpvYlN0ZXBzLmZpbmQoKGl0KSA9PiBpdC5pZCA9PT0gXCJnaXRfcmVtb3RlXCIpO1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBnaXRSZW1vdGVKb2IsXG4gICAgICAgIFwiZ2l0X3JlbW90ZSBzdGVwIG5vdCBmb3VuZCBpbiByZWxlYXNlIHdvcmtmbG93LCBwbGVhc2UgY2hlY2sgaWYgdGhlIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICAgICk7XG4gICAgICAvLyBXZSB3cmFwIHdoYXRldmVyIHByb2plbiBnZW5lcmF0ZWQgaW4gYSBzaG91bGQtcmVsZWFzZSBndWFyZCByYXRoZXIgdGhhblxuICAgICAgLy8gcmV3cml0aW5nIGl0LCBzbyBhc3NlcnQgb25seSB0aGUgdHdvIHByb3BlcnRpZXMgdGhlIHdyYXBwaW5nIGFjdHVhbGx5XG4gICAgICAvLyBkZXBlbmRzIG9uLiBQaW5uaW5nIHRvIHByb2plbidzIGV4YWN0IHdvcmRpbmcgYnJva2UgdGhlIHdob2xlIGZsZWV0XG4gICAgICAvLyBvbmNlIGFscmVhZHk6IHByb2plbiAwLjEwMSBjaGFuZ2VkIGAke3sgZ2l0aHViLnJlZiB9fWAgdG8gYFwiJEdJVEhVQl9SRUZcImBcbiAgICAgIC8vIGFuZCBldmVyeSBwcm92aWRlciByZXBvJ3MgdXBncmFkZS1tYWluIHN0YXJ0ZWQgZmFpbGluZyBhdCBzeW50aC5cbiAgICAgIGFzc2VydChcbiAgICAgICAgdHlwZW9mIGdpdFJlbW90ZUpvYi5ydW4gPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBnaXRSZW1vdGVKb2IucnVuLmluY2x1ZGVzKFwiZ2l0IGxzLXJlbW90ZVwiKSAmJlxuICAgICAgICAgIGdpdFJlbW90ZUpvYi5ydW4uaW5jbHVkZXMoXCJsYXRlc3RfY29tbWl0PVwiKSxcbiAgICAgICAgYGdpdF9yZW1vdGUgc3RlcCBubyBsb25nZXIgc2V0cyBsYXRlc3RfY29tbWl0IGZyb20gZ2l0IGxzLXJlbW90ZSwgcGxlYXNlIGNoZWNrIGlmIHRoZSB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzISBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgZ2l0UmVtb3RlSm9iLnJ1blxuICAgICAgICApfWBcbiAgICAgICk7XG4gICAgICAvLyBGb2xkICpldmVyeSogbGluZTogcHJvamVuIGVtaXRzIHR3byB0b2RheSwgYnV0IFN0cmluZyNyZXBsYWNlIHdpdGggYVxuICAgICAgLy8gc3RyaW5nIHBhdHRlcm4gb25seSBmb2xkcyB0aGUgZmlyc3QgaWYgdGhhdCBldmVyIGdyb3dzLlxuICAgICAgY29uc3QgcHJldmlvdXNDb21tYW5kID0gZ2l0UmVtb3RlSm9iLnJ1bi5zcGxpdChcIlxcblwiKS5qb2luKFwiICYmIFwiKTtcblxuICAgICAgY29uc3QgY2FuY2VsQ29tbWFuZCA9XG4gICAgICAgICdlY2hvIFwibGF0ZXN0X2NvbW1pdD1yZWxlYXNlX2NhbmNlbGxlZFwiID4+ICRHSVRIVUJfT1VUUFVUJzsgLy8gdGhpcyBjYW5jZWxzIHRoZSByZWxlYXNlIHZpYSBhIG5vbi1tYXRjaGluZyBTSEE7XG4gICAgICBnaXRSZW1vdGVKb2IucnVuID0gYG5vZGUgLi9zY3JpcHRzL3Nob3VsZC1yZWxlYXNlLmpzICYmICgke3ByZXZpb3VzQ29tbWFuZH0pIHx8ICR7Y2FuY2VsQ29tbWFuZH1gO1xuICAgICAgZ2l0UmVtb3RlSm9iLm5hbWUgKz1cbiAgICAgICAgXCIgb3IgY2FuY2VsIHZpYSBmYWtpbmcgYSBTSEEgaWYgcmVsZWFzZSB3YXMgY2FuY2VsbGVkXCI7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhbGVXb3JrZmxvdyA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoXCIuZ2l0aHViL3dvcmtmbG93cy9zdGFsZS55bWxcIik7XG4gICAgc3RhbGVXb3JrZmxvdz8uYWRkT3ZlcnJpZGUoXCJvbi5zY2hlZHVsZVwiLCBbXG4gICAgICB7XG4gICAgICAgIGNyb246IGdlbmVyYXRlUmFuZG9tQ3Jvbih7IHByb2plY3Q6IHRoaXMsIG1heEhvdXI6IDQsIGhvdXJPZmZzZXQ6IDEgfSksXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgdXBncmFkZVdvcmtmbG93ID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZShcbiAgICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvdXBncmFkZS1tYWluLnltbFwiXG4gICAgKTtcbiAgICB1cGdyYWRlV29ya2Zsb3c/LmFkZE92ZXJyaWRlKFwib24uc2NoZWR1bGVcIiwgW1xuICAgICAge1xuICAgICAgICBjcm9uOiBnZW5lcmF0ZVJhbmRvbUNyb24oe1xuICAgICAgICAgIHByb2plY3Q6IHRoaXMsXG4gICAgICAgICAgbWF4SG91cjogMCxcbiAgICAgICAgICBob3VyT2Zmc2V0OiAxLFxuICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5XZWVrbHksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIC8vIFN1Ym1vZHVsZSBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb25cbiAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKFwiQVBJLm1kXCIpOyAvLyBpZ25vcmUgdGhlIG9sZCBmaWxlLCB3ZSBub3cgZ2VuZXJhdGUgaXQgaW4gdGhlIGRvY3MgZm9sZGVyXG4gICAgdGhpcy5hZGREZXZEZXBzKFwianNpaS1kb2NnZW5AXjEwLjIuM1wiKTtcbiAgICBpZiAoanNpaVZlcnNpb24pIHtcbiAgICAgIC8vIE5PVEU6IHRoZSBiZWxvdyBpcyBtYWtpbmcgYSBicm9hZCBhc3N1bXB0aW9uIHRoYXQgeW91J3JlIHBhc3NpbmcgYSByYW5nZSBsaWtlIFwifjUuMy4wXCIgdG8ganNpaVZlcnNpb25cbiAgICAgIC8vIElmIHlvdSB1c2UgdGhhdCBmaWVsZCB0byBwYXNzIGEgdmVyeSBzcGVjaWZpYyB2ZXJzaW9uIChlLmcuIFwiNS4zLjExXCIpIHRoZW4gdGhpcyBtaWdodCBicmVha1xuICAgICAgdGhpcy5hZGREZXZEZXBzKGBqc2lpLXJvc2V0dGFAJHtqc2lpVmVyc2lvbn1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGREZXZEZXBzKGBqc2lpLXJvc2V0dGFgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NnZW4gPSB0aGlzLmFkZFRhc2soXCJkb2NnZW5cIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiR2VuZXJhdGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHByb2plY3RcIixcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBleGVjOiBbXG4gICAgICAgICAgICBcInJtIC1yZiBkb2NzXCIsXG4gICAgICAgICAgICBcInJtIC1mIEFQSS5tZFwiLFxuICAgICAgICAgICAgXCJta2RpciBkb2NzXCIsXG4gICAgICAgICAgICBcImpzaWktZG9jZ2VuIC0tc3BsaXQtYnktc3VibW9kdWxlIC1sIHR5cGVzY3JpcHQgLWwgcHl0aG9uIC1sIGphdmEgLWwgY3NoYXJwIC1sIGdvXCIsXG4gICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBuaWNlIHdheSB0byB0ZWxsIGpzaWktZG9jZ2VuIHRvIGdlbmVyYXRlIGRvY3MgaW50byBhIGZvbGRlciBzbyBJIHdlbnQgdGhpcyByb3V0ZVxuICAgICAgICAgICAgXCJtdiAqLioubWQgZG9jc1wiLFxuICAgICAgICAgICAgLy8gU29tZSBwYXJ0IG9mIHRoZSBkb2N1bWVudGF0aW9uIGFyZSB0b28gbG9uZywgd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGVtIHRvIH4xME1CXG4gICAgICAgICAgICBcImNkIGRvY3NcIixcbiAgICAgICAgICAgIFwibHMgLi8gfCB4YXJncyBzZWQgLWkgJzE1MDAwMCwkIGQnICQxXCIsXG4gICAgICAgICAgXS5qb2luKFwiICYmIFwiKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgdGhpcy5wb3N0Q29tcGlsZVRhc2suc3Bhd24oZG9jZ2VuKTtcbiAgICB0aGlzLmdpdGlnbm9yZS5pbmNsdWRlKGAvZG9jcy8qLm1kYCk7XG4gICAgdGhpcy5hbm5vdGF0ZUdlbmVyYXRlZChgL2RvY3MvKi5tZGApO1xuXG4gICAgLy8gU2V0dGluZyB0aGUgdmVyc2lvbiBpbiBwYWNrYWdlLmpzb24gc28gdGhlIGdvbGFuZyBkb2NzIGhhdmUgdGhlIGNvcnJlY3QgdmVyc2lvblxuICAgIGNvbnN0IHVuY29uZGl0aW9uYWxCdW1wID0gdGhpcy5hZGRUYXNrKFwidW5jb25kaXRpb25hbC1idW1wXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNldCB0aGUgdmVyc2lvbiBpbiBwYWNrYWdlLmpzb24gdG8gdGhlIGN1cnJlbnQgdmVyc2lvblwiLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQ2xlYXIgdGhlIGNoYW5nZWxvZyBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IHB1Ymxpc2hlZCB0d2ljZVwiLFxuICAgICAgICAgIGV4ZWM6IFwicm0gLWYgJENIQU5HRUxPR1wiLFxuICAgICAgICB9LFxuICAgICAgICAvLyBwcm9qZW4gMC4xMDEgcmVtb3ZlZCB0aGUgY29tYmluZWQgYHJlbGVhc2UvYnVtcC12ZXJzaW9uYCBidWlsdGluIGFuZCBzcGxpdFxuICAgICAgICAvLyBpdCBpbnRvIHJlc29sdmUtbGF0ZXN0LXRhZyAtPiBzdWdnZXN0LXZlcnNpb24tYnVtcCAtPiBhcHBseS12ZXJzaW9uLWJ1bXAsXG4gICAgICAgIC8vIGhhbmRpbmcgcmVzdWx0cyBmb3J3YXJkIHZpYSBzdGVwIGBvdXRwdXRFbnZgIGNhcHR1cmVzLiBhcHBseSBvbiBpdHMgb3duXG4gICAgICAgIC8vIHRocm93cyBcIm5laXRoZXIgQlVNUF9UWVBFIG5vciBTVUdHRVNURURfQlVNUCBpcyBzZXRcIiwgc28gYWxsIHRocmVlIGFyZVxuICAgICAgICAvLyBuZWVkZWQuIE1pcnJvcnMgcHJvamVuJ3Mgb3duIGJ1bXAgdGFzayAobGliL3ZlcnNpb24uanM6MTI4LTE0NCkuXG4gICAgICAgIHsgYnVpbHRpbjogXCJyZWxlYXNlL3Jlc29sdmUtbGF0ZXN0LXRhZ1wiLCBvdXRwdXRFbnY6IFwiTEFURVNUX1RBR1wiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBidWlsdGluOiBcInJlbGVhc2Uvc3VnZ2VzdC12ZXJzaW9uLWJ1bXBcIixcbiAgICAgICAgICBvdXRwdXRFbnY6IFwiU1VHR0VTVEVEX0JVTVBcIixcbiAgICAgICAgfSxcbiAgICAgICAgeyBidWlsdGluOiBcInJlbGVhc2UvYXBwbHktdmVyc2lvbi1idW1wXCIgfSxcbiAgICAgIF0sXG4gICAgICBlbnY6IHtcbiAgICAgICAgT1VURklMRTogXCJwYWNrYWdlLmpzb25cIixcbiAgICAgICAgQ0hBTkdFTE9HOiBcImRpc3QvY2hhbmdlbG9nLm1kXCIsXG4gICAgICAgIEJVTVBGSUxFOiBcImRpc3QvdmVyc2lvbi50eHRcIixcbiAgICAgICAgUkVMRUFTRVRBRzogXCJkaXN0L3JlbGVhc2V0YWcudHh0XCIsXG4gICAgICAgIFJFTEVBU0VfVEFHX1BSRUZJWDogXCJcIixcbiAgICAgICAgTUlOX01BSk9SOiBTdHJpbmcoTUlOX01BSk9SX1ZFUlNJT04pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnByZUNvbXBpbGVUYXNrLnNwYXduKHVuY29uZGl0aW9uYWxCdW1wKTtcbiAgICAvLyBUbyBidW1wIGNvcnJlY3RseSB3ZSBuZWVkIHRvIGhhdmUgdGhlIGNvbXBsZXRlbHkgY2xvbmVkIHJlcG9cbiAgICAodGhpcy5idWlsZFdvcmtmbG93IGFzIGFueSkud29ya2Zsb3cuZmlsZS5hZGRPdmVycmlkZShcbiAgICAgIFwiam9icy5idWlsZC5zdGVwcy4wLndpdGguZmV0Y2gtZGVwdGhcIixcbiAgICAgIDBcbiAgICApO1xuICAgIC8vIFVuZG8gdGhlIGNoYW5nZXMgYWZ0ZXIgY29tcGlsYXRpb25cbiAgICB0aGlzLmJ1aWxkV29ya2Zsb3c/LmFkZFBvc3RCdWlsZFN0ZXBzKHtcbiAgICAgIG5hbWU6IFwiUmV2ZXJ0IHBhY2thZ2UuanNvbiB2ZXJzaW9uIGJ1bXBcIixcbiAgICAgIHJ1bjogXCJnaXQgY2hlY2tvdXQgcGFja2FnZS5qc29uXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgQ29weXJpZ2h0SGVhZGVycyh0aGlzKTtcbiAgICBuZXcgRGVwcmVjYXRlUGFja2FnZXModGhpcywge1xuICAgICAgcHJvdmlkZXJOYW1lLFxuICAgICAgcGFja2FnZUluZm8sXG4gICAgICBpc0RlcHJlY2F0ZWQ6ICEhaXNEZXByZWNhdGVkLFxuICAgIH0pO1xuICAgIGlmICghaXNEZXByZWNhdGVkKSB7XG4gICAgICAvLyBGb2xkcyB0aGUgbWFudWFsIGZvcmNlLXJlbGVhc2UgYmVoYXZpb3VyIGludG8gcmVsZWFzZS55bWwgYmVoaW5kIGFcbiAgICAgIC8vIHdvcmtmbG93X2Rpc3BhdGNoIHRyaWdnZXIsIHNvIG5wbS9QeVBJIE9JREMgdHJ1c3RzIGEgc2luZ2xlIHdvcmtmbG93LlxuICAgICAgbmV3IEZvcmNlUmVsZWFzZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBpbkdpdGh1YkFjdGlvblZlcnNpb25zKHBpbm5lZFZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgLy8gVXNlIHBpbm5lZCB2ZXJzaW9ucyBvZiBnaXRodWIgYWN0aW9uc1xuICAgIE9iamVjdC5lbnRyaWVzKHBpbm5lZFZlcnNpb25zKS5mb3JFYWNoKChbbmFtZSwgc2hhXSkgPT4ge1xuICAgICAgdGhpcy5naXRodWI/LmFjdGlvbnMuc2V0KG5hbWUsIGAke25hbWV9QCR7c2hhfWApO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogU2V0cyBNQVZFTl9PUFRTIG9uIHRoZSBtYXZlbiBwdWJsaXNoIHN0ZXAgYW5kIGRyb3BzIHRoZSB1bnVzZWRcbiAqIE1BVkVOX1NUQUdJTkdfUFJPRklMRV9JRCwgcmVzb2x2aW5nIHRoZSBzdGVwIGJ5IHRoZSBjb21tYW5kIGl0IHJ1bnMuXG4gKlxuICogUnVucyBpbiBwcmVTeW50aGVzaXplIGJlY2F1c2UgdGhlIHB1Ymxpc2ggam9icyBhcmUgYWRkZWQgYnkgUmVsZWFzZSBkdXJpbmdcbiAqIHN5bnRoZXNpcywgc28gdGhlIGpvYiBkb2VzIG5vdCBleGlzdCB5ZXQgYXQgY29uc3RydWN0aW9uIHRpbWUuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9wdWJsaWIvcHVsbC83NzdcbiAqL1xuY2xhc3MgTWF2ZW5PcHRzUGF0Y2ggZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCB3b3JrZmxvdyA9IGdpdGh1Yi5HaXRIdWIub2YodGhpcy5wcm9qZWN0KT8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKTtcbiAgICBjb25zdCBzdGVwczogSm9iU3RlcFtdIHwgdW5kZWZpbmVkID0gKHdvcmtmbG93IGFzIGFueSk/LmpvYnM/LnJlbGVhc2VfbWF2ZW5cbiAgICAgID8uc3RlcHM7XG4gICAgYXNzZXJ0KFxuICAgICAgc3RlcHMsXG4gICAgICBcInJlbGVhc2VfbWF2ZW4gam9iIG5vdCBmb3VuZCwgcGxlYXNlIGNoZWNrIGlmIHRoZSBNQVZFTl9PUFRTIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICApO1xuICAgIGNvbnN0IHN0ZXAgPSBzdGVwcy5maW5kKChzKSA9PiBzLnJ1bj8uaW5jbHVkZXMoXCJwdWJsaWItbWF2ZW5cIikpO1xuICAgIGFzc2VydChcbiAgICAgIHN0ZXA/LmVudixcbiAgICAgIFwibm8gcHVibGliLW1hdmVuIHN0ZXAgd2l0aCBhbiBlbnYgYmxvY2sgaW4gcmVsZWFzZV9tYXZlbiwgcGxlYXNlIGNoZWNrIGlmIHRoZSBNQVZFTl9PUFRTIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICApO1xuICAgIC8vIE11dGF0ZSB0aGUgc3RlcCBkaXJlY3RseSByYXRoZXIgdGhhbiBKc29uUGF0Y2gtaW5nIHRoZSByZW5kZXJlZCBmaWxlOiB0aGVcbiAgICAvLyBwdWJsaXNoZXIgcHJlcGVuZHMgdG9vbC1zZXR1cCBzdGVwcyBhdCByZW5kZXIgdGltZSwgc28gaW4tbWVtb3J5IGluZGljZXMgZG9cbiAgICAvLyBub3QgbWF0Y2ggcmVuZGVyZWQgb25lcywgYW5kIGEgSlNPTiBQb2ludGVyIHdvdWxkIGhhdmUgdG8gZW5jb2RlIHRoYXQgb2Zmc2V0LlxuICAgIC8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MDE1Mzk2Mi9uZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbi1tYXZlbi1kZXBsb3ktZmFpbGVkLWFuLWFwaS1pbmNvbXBhdGliaWxpdHktd2FzLWVuY29cbiAgICBzdGVwLmVudi5NQVZFTl9PUFRTID1cbiAgICAgIFwiLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudXRpbD1BTEwtVU5OQU1FRCAtLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nLnJlZmxlY3Q9QUxMLVVOTkFNRUQgLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudGV4dD1BTEwtVU5OQU1FRCAtLWFkZC1vcGVucz1qYXZhLmRlc2t0b3AvamF2YS5hd3QuZm9udD1BTEwtVU5OQU1FRFwiO1xuICAgIC8vIFRoaXMgaXMgbm8gbG9uZ2VyIHVzZWQuXG4gICAgZGVsZXRlIHN0ZXAuZW52Lk1BVkVOX1NUQUdJTkdfUFJPRklMRV9JRDtcbiAgfVxufVxuXG4vKipcbiAqIEZpeGVzIHVwIHRoZSBoYW5kLWJ1aWx0IEdvIHB1Ymxpc2ggam9iLCB3aGljaCBgcHVibGlzaFRvR28ucHJlUHVibGlzaFN0ZXBzYFxuICogaGFzIHRvIGRlY2xhcmUgYmVmb3JlIGBzdXBlcigpYCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBidWlsZCBjb21wbGV0ZWx5OlxuICpcbiAqIC0gaW5zZXJ0cyB0aGUgXCJTZXR1cCBwbnBtXCIgc3RlcCB0aGF0IHByb2plbiBpbmplY3RzIGludG8gdGhlIHdvcmtmbG93cyBpdFxuICogICBnZW5lcmF0ZXMgaXRzZWxmIGJ1dCBub3QgaW50byBoYW5kLWJ1aWx0IG9uZXMsIGF0IHRoZSBwcm9qZWN0J3Mgb3duIHBucG1cbiAqICAgdmVyc2lvbiByYXRoZXIgdGhhbiBhIGNvcHkgb2YgaXQuIEFwcGxpZXMgdG8gZGVwcmVjYXRlZCBwcm9qZWN0cyB0b286IHRoZXlcbiAqICAgc3RpbGwgcnVuIHRoaXMgam9iLCBzbyB0aGV5IHN0aWxsIG5lZWQgcG5wbSBvbiBQQVRIO1xuICogLSBwdXNoZXMgdGhlIG1vZHVsZSB3aXRoIGEgR2l0SHViIEFwcCBpbnN0YWxsYXRpb24gdG9rZW4gaW5zdGVhZCBvZiB0aGVcbiAqICAgZGVmYXVsdCBgR09fR0lUSFVCX1RPS0VOYCBzZWNyZXQsIHdoZW4gYGFwcFRva2VuUmVwb3NpdG9yeWAgaXMgZ2l2ZW4uXG4gKlxuICogUnVucyBpbiBwcmVTeW50aGVzaXplIGZvciB0d28gcmVhc29uczogdGhlIHB1Ymxpc2ggam9icyBhcmUgYWRkZWQgYnkgUmVsZWFzZVxuICogZHVyaW5nIHN5bnRoZXNpcywgc28gdGhlIGpvYiBkb2VzIG5vdCBleGlzdCBhdCBjb25zdHJ1Y3Rpb24gdGltZSwgYW5kXG4gKiBgdGhpcy5wYWNrYWdlLnBucG1WZXJzaW9uYCBpcyBvbmx5IHJlYWRhYmxlIGFmdGVyIGBzdXBlcigpYC5cbiAqXG4gKiBCb3RoIHN0ZXBzIGFyZSBzcGxpY2VkIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgc3RlcCB0aGF0IG5lZWRzIHRoZW0sXG4gKiByZXNvbHZlZCBieSB3aGF0IHRoYXQgc3RlcCBydW5zLiBOZXZlciBieSBpbmRleDogcmVsZWFzZV9nb2xhbmcncyBpbmRpY2VzXG4gKiBzaGlmdCB3aGVuZXZlciB0aGUgam9iIGdhaW5zIGEgc3RlcCAtLSBhZGRpbmcgXCJTZXR1cCBwbnBtXCIgaXMgZXhhY3RseSB3aGF0XG4gKiBtb3ZlZCB0aGUgb2xkIGhhcmRjb2RlZCAvc3RlcHMvMTcvZW52IG9udG8gYSBzdGVwIHdpdGggbm8gZW52IGF0IGFsbC5cbiAqL1xuY2xhc3MgR29QdWJsaXNoSm9iUGF0Y2ggZXh0ZW5kcyBDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcFRva2VuUmVwb3NpdG9yeT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vZGVQcm9qZWN0OiBjZGsuSnNpaVByb2plY3QsXG4gICAgb3B0aW9uczogeyBhcHBUb2tlblJlcG9zaXRvcnk/OiBzdHJpbmcgfVxuICApIHtcbiAgICBzdXBlcihub2RlUHJvamVjdCk7XG4gICAgdGhpcy5hcHBUb2tlblJlcG9zaXRvcnkgPSBvcHRpb25zLmFwcFRva2VuUmVwb3NpdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gZ2l0aHViLkdpdEh1Yi5vZih0aGlzLnByb2plY3QpPy50cnlGaW5kV29ya2Zsb3coXCJyZWxlYXNlXCIpO1xuICAgIGNvbnN0IHN0ZXBzOiBKb2JTdGVwW10gfCB1bmRlZmluZWQgPSAod29ya2Zsb3cgYXMgYW55KT8uam9icz8ucmVsZWFzZV9nb2xhbmdcbiAgICAgID8uc3RlcHM7XG4gICAgYXNzZXJ0KFxuICAgICAgc3RlcHMsXG4gICAgICBcInJlbGVhc2VfZ29sYW5nIGpvYiBub3QgZm91bmQsIHBsZWFzZSBjaGVjayBpZiB0aGUgR28gcHVibGlzaCB3b3JrYXJvdW5kcyBzdGlsbCB3b3JrIVwiXG4gICAgKTtcblxuICAgIC8vIFdpdGhvdXQgcG5wbSBvbiBQQVRIIHRoZSBpbnN0YWxsIGJlbG93IGV4aXRzIDEyNy4gQmVmb3JlIHRoZSBwbnBtXG4gICAgLy8gbWlncmF0aW9uIHJlYWNoZWQgdGhpcyBqb2IgaXQgcmFuIGB5YXJuIGluc3RhbGxgLCB3aGljaCBmYWlsZWQgb3V0cmlnaHRcbiAgICAvLyBhZ2FpbnN0IGEgcGFja2FnZS5qc29uIGRlY2xhcmluZyBgcGFja2FnZU1hbmFnZXI6IFwicG5wbUAuLi5cImAuXG4gICAgY29uc3QgaW5zdGFsbEluZGV4ID0gc3RlcHMuZmluZEluZGV4KChzKSA9PlxuICAgICAgcy5ydW4/LmluY2x1ZGVzKFwicG5wbSBpbnN0YWxsXCIpXG4gICAgKTtcbiAgICBhc3NlcnQoXG4gICAgICBpbnN0YWxsSW5kZXggPj0gMCxcbiAgICAgIFwibm8gcG5wbSBpbnN0YWxsIHN0ZXAgaW4gcmVsZWFzZV9nb2xhbmcsIHBsZWFzZSBjaGVjayBpZiB0aGUgU2V0dXAgcG5wbSB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgKTtcbiAgICBzdGVwcy5zcGxpY2UoaW5zdGFsbEluZGV4LCAwLCB7XG4gICAgICBuYW1lOiBcIlNldHVwIHBucG1cIixcbiAgICAgIHVzZXM6IFwicG5wbS9hY3Rpb24tc2V0dXBcIixcbiAgICAgIHdpdGg6IHsgdmVyc2lvbjogdGhpcy5ub2RlUHJvamVjdC5wYWNrYWdlLnBucG1WZXJzaW9uIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuYXBwVG9rZW5SZXBvc2l0b3J5KSByZXR1cm47XG5cbiAgICBjb25zdCBpbmRleCA9IHN0ZXBzLmZpbmRJbmRleCgocykgPT4gcy5ydW4/LmluY2x1ZGVzKFwicHVibGliLWdvbGFuZ1wiKSk7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2luZGV4XTtcbiAgICBhc3NlcnQoXG4gICAgICBzdGVwPy5lbnYsXG4gICAgICBcIm5vIHB1YmxpYi1nb2xhbmcgc3RlcCB3aXRoIGFuIGVudiBibG9jayBpbiByZWxlYXNlX2dvbGFuZywgcGxlYXNlIGNoZWNrIGlmIHRoZSBHbyBwdWJsaXNoIHRva2VuIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICApO1xuXG4gICAgY29uc3QgZ29QdWJsaXNoVG9rZW4gPSBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcCh7XG4gICAgICBhcHBJZFNlY3JldDogXCJQUk9KRU5fQVBQX0lEXCIsXG4gICAgICBwcml2YXRlS2V5U2VjcmV0OiBcIlBST0pFTl9BUFBfUFJJVkFURV9LRVlcIixcbiAgICAgIG93bmVyOiBcIiR7eyBnaXRodWIucmVwb3NpdG9yeV9vd25lciB9fVwiLFxuICAgICAgcmVwb3NpdG9yaWVzOiBbdGhpcy5hcHBUb2tlblJlcG9zaXRvcnldLFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuQXBwUGVybWlzc2lvbi5XUklURSB9LFxuICAgIH0pO1xuXG4gICAgLy8gTXV0YXRlIHRoZSBzdGVwcyBkaXJlY3RseSByYXRoZXIgdGhhbiBKc29uUGF0Y2gtaW5nIHRoZSByZW5kZXJlZCBmaWxlLCBzb1xuICAgIC8vIHRoZSB0b2tlbi1taW50aW5nIHN0ZXAgc3RheXMgYW5jaG9yZWQgdG8gdGhlIHB1Ymxpc2ggc3RlcCBpdCBmZWVkcy5cbiAgICBzdGVwcy5zcGxpY2UoaW5kZXgsIDAsIGdvUHVibGlzaFRva2VuLnNldHVwU3RlcHNbMF0pO1xuICAgIC8vIEdpdEh1YiBBcHAgaW5zdGFsbGF0aW9uIHRva2VucyAoZ2hzXyopIHJlcXVpcmUgdGhlIGB4LWFjY2Vzcy10b2tlbmBcbiAgICAvLyB1c2VybmFtZSB3aGVuIHVzZWQgaW4gSFRUUFMgZ2l0IFVSTHMuIHB1YmxpYiByZW5kZXJzIHRoaXMgZW52IHZhclxuICAgIC8vIHZlcmJhdGltIGludG8gYGh0dHBzOi8vJHtHSVRIVUJfVE9LRU59QGdpdGh1Yi5jb20vLi4uYCwgc28gd2l0aG91dCB0aGVcbiAgICAvLyBwcmVmaXggdGhlIHB1c2ggNDAxcyBhbmQgZmFsbHMgYmFjayB0byBhIFRUWSBwYXNzd29yZCBwcm9tcHQuXG4gICAgc3RlcC5lbnYuR0lUSFVCX1RPS0VOID0gYHgtYWNjZXNzLXRva2VuOiR7Z29QdWJsaXNoVG9rZW4udG9rZW5SZWZ9YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmV0dHlBc3NlcnRFcXVhbDxUPihzdWJqZWN0OiBULCBleHBlY3RlZDogVCwgbWVzc2FnZT86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoc3ViamVjdCAhPT0gZXhwZWN0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHttZXNzYWdlID8/IFwiQXNzZXJ0aW9uIGZhaWxlZFwifTogZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICl9IGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShzdWJqZWN0KX1gXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
713
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBEQUEwRDtBQUMxRCxpQ0FBa0M7QUFDbEMsNkNBQXlDO0FBQ3pDLG1DQUFxRTtBQUVyRSxzREFJK0I7QUFDL0IscURBQWdEO0FBQ2hELGlEQUE2QztBQUM3QywrRUFBeUU7QUFDekUsMkNBQXdDO0FBQ3hDLGlEQUE2QztBQUM3QywyREFBdUQ7QUFDdkQsNkRBQXlEO0FBQ3pELDZDQUEwQztBQUMxQyw2REFBeUQ7QUFDekQsbURBQStDO0FBQy9DLG1EQUErQztBQUMvQywrQ0FBMkM7QUFFM0MseURBQXFEO0FBQ3JELHFFQUEwRTtBQUMxRSw2REFBbUU7QUFDbkUsb0RBQWtFO0FBRWxFLG1IQUFtSDtBQUNuSCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUU1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLDJCQUEyQixHQUFHO0lBQ2xDLHlCQUF5QjtJQUN6QixPQUFPO0lBQ1AsV0FBVztDQUNaLENBQUM7QUE0RkYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxZQUFvQixFQUFVLEVBQUU7SUFDcEQsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxHQUFHLFlBQVksV0FBVztRQUM1QixDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxrQkFBa0IsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQ3pFLDJCQUEyQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDbEYsdUJBQXVCLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUM5RSxzQkFBc0IsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQzdFLGtC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UyxDQUMxRCxRQUFRLENBQ1QsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQ3ZDLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbmltcG9ydCBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xuaW1wb3J0IHsgcGFzY2FsQ2FzZSB9IGZyb20gXCJjaGFuZ2UtY2FzZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBUZXh0RmlsZSwgY2RrLCBnaXRodWIsIEpzb25QYXRjaCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IEpvYlN0ZXAgfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQge1xuICBOb2RlUGFja2FnZU1hbmFnZXIsXG4gIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hTm9kZUxpbmtlcixcbiAgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlLFxufSBmcm9tIFwicHJvamVuL2xpYi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBBbGVydE9wZW5QcnMgfSBmcm9tIFwiLi9hbGVydC1vcGVuLXByc1wiO1xuaW1wb3J0IHsgQXV0b0FwcHJvdmUgfSBmcm9tIFwiLi9hdXRvLWFwcHJvdmVcIjtcbmltcG9ydCB7IEF1dG9DbG9zZUNvbW11bml0eUlzc3VlcyB9IGZyb20gXCIuL2F1dG8tY2xvc2UtY29tbXVuaXR5LWlzc3Vlc1wiO1xuaW1wb3J0IHsgQXV0b21lcmdlIH0gZnJvbSBcIi4vYXV0b21lcmdlXCI7XG5pbXBvcnQgeyBDZGt0ZkNvbmZpZyB9IGZyb20gXCIuL2Nka3RmLWNvbmZpZ1wiO1xuaW1wb3J0IHsgQ29weXJpZ2h0SGVhZGVycyB9IGZyb20gXCIuL2NvcHlyaWdodC1oZWFkZXJzXCI7XG5pbXBvcnQgeyBDdXN0b21pemVkTGljZW5zZSB9IGZyb20gXCIuL2N1c3RvbWl6ZWQtbGljZW5zZVwiO1xuaW1wb3J0IHsgRGVwZW5kYWJvdCB9IGZyb20gXCIuL2RlcGVuZGFib3RcIjtcbmltcG9ydCB7IERlcHJlY2F0ZVBhY2thZ2VzIH0gZnJvbSBcIi4vZGVwcmVjYXRlLXBhY2thZ2VzXCI7XG5pbXBvcnQgeyBGb3JjZVJlbGVhc2UgfSBmcm9tIFwiLi9mb3JjZS1yZWxlYXNlXCI7XG5pbXBvcnQgeyBHaXRodWJJc3N1ZXMgfSBmcm9tIFwiLi9naXRodWItaXNzdWVzXCI7XG5pbXBvcnQgeyBMb2NrSXNzdWVzIH0gZnJvbSBcIi4vbG9jay1pc3N1ZXNcIjtcbmltcG9ydCB7IFBhY2thZ2VJbmZvIH0gZnJvbSBcIi4vcGFja2FnZS1pbmZvXCI7XG5pbXBvcnQgeyBQcm92aWRlclVwZ3JhZGUgfSBmcm9tIFwiLi9wcm92aWRlci11cGdyYWRlXCI7XG5pbXBvcnQgeyBDaGVja0ZvclVwZ3JhZGVzU2NyaXB0RmlsZSB9IGZyb20gXCIuL3NjcmlwdHMvY2hlY2stZm9yLXVwZ3JhZGVzXCI7XG5pbXBvcnQgeyBTaG91bGRSZWxlYXNlU2NyaXB0RmlsZSB9IGZyb20gXCIuL3NjcmlwdHMvc2hvdWxkLXJlbGVhc2VcIjtcbmltcG9ydCB7IGdlbmVyYXRlUmFuZG9tQ3JvbiwgU2NoZWR1bGUgfSBmcm9tIFwiLi91dGlsL3JhbmRvbS1jcm9uXCI7XG5cbi8vIGVuc3VyZSBuZXcgcHJvamVjdHMgc3RhcnQgd2l0aCAxLjAuMCBzbyB0aGF0IGV2ZXJ5IGZvbGxvd2luZyBicmVha2luZyBjaGFuZ2UgbGVhZHMgdG8gYW4gaW5jcmVhc2VkIG1ham9yIHZlcnNpb25cbmNvbnN0IE1JTl9NQUpPUl9WRVJTSU9OID0gMTtcblxuLyoqXG4gKiBGaXJzdC1wYXJ0eSBwYWNrYWdlcyB0aGF0IGFyZSBleGVtcHQgZnJvbSB0aGUgZGVwZW5kZW5jeS11cGdyYWRlIGNvb2xkb3duLlxuICpcbiAqIFRoZSBgY29vbGRvd246IDRgIGJlbG93IHJlYWNoZXMgdGhlIGdlbmVyYXRlZCB1cGdyYWRlIHRhc2sgYXNcbiAqIGBwbnBtIHVwZGF0ZSAtLWNvbmZpZy5taW5pbXVtLXJlbGVhc2UtYWdlPTU3NjBgLCB3aGljaCBnYXRlcyAqZXZlcnkqIHBhY2thZ2VcbiAqIC0tIGluY2x1ZGluZyB0aGUgb25lcyB3ZSBwdWJsaXNoIG91cnNlbHZlcy4gVGhhdCBpcyBiYWNrd2FyZHMgZm9yIHRob3NlOiBhXG4gKiBmaXggcmVsZWFzZWQgaGVyZSBjYW5ub3QgcmVhY2ggdGhlIGZsZWV0IGZvciBmb3VyIGRheXMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlXG4gKiB3aW5kb3cgaW4gd2hpY2ggd2UgbmVlZCBpdCB0byBtb3ZlLiBUaGUgY29vbGRvd24gZXhpc3RzIHRvIGdpdmUgYSBjb21wcm9taXNlZFxuICogdGhpcmQtcGFydHkgcmVsZWFzZSB0aW1lIHRvIGJlIGZsYWdnZWQ7IGZvciBwYWNrYWdlcyBwdWJsaXNoZWQgZnJvbSByZXBvcyB3ZVxuICogb3duLCB3aXRoIHRydXN0ZWQgcHVibGlzaGluZyBhbmQgYW4gYXVkaXQgZ2F0ZSBvbiB0aGVpciBvd24gcmVsZWFzZXMsIGl0IGJ1eXNcbiAqIG5vdGhpbmcgdGhhdCB3ZSBkbyBub3QgYWxyZWFkeSBjb250cm9sLlxuICpcbiAqIGBjZGt0bmAgYW5kIGBjZGt0bi1jbGlgIGFyZSBoZXJlIGZvciB0aGUgc2FtZSByZWFzb246IGEgcHJvdmlkZXIgcmVwbyBoYXMgdG9cbiAqIGJlIGFibGUgdG8gcmVidWlsZCBhZ2FpbnN0IGEgZnJlc2hseSByZWxlYXNlZCBDREtUTiwgZXNwZWNpYWxseSBhZnRlciBhIG1ham9yXG4gKiBvbmUuIFRoZXkgYXJlIGFsc28gdmVyc2lvbi1waW5uZWQgdG9nZXRoZXIgYnkgYENka3RmQ29uZmlnYCwgc28gZXhjbHVkaW5nIG9uZVxuICogd2l0aG91dCB0aGUgb3RoZXIgd291bGQgb25seSBoYWxmLWFwcGx5LlxuICpcbiAqIHBucG0gaG9ub3VycyB0aGlzIGZyb20gYHBucG0td29ya3NwYWNlLnlhbWxgIGV2ZW4gdGhvdWdoIGBtaW5pbXVtUmVsZWFzZUFnZWBcbiAqIGl0c2VsZiBhcnJpdmVzIG9uIHRoZSBjb21tYW5kIGxpbmU7IGl0IG1hdGNoZXMgb24gcGFja2FnZSBuYW1lIGFuZCBhcHBsaWVzIHRvXG4gKiBldmVyeSB2ZXJzaW9uIG9mIHRoYXQgcGFja2FnZS4gRXZlcnl0aGluZyBub3QgbGlzdGVkIGhlcmUgc3RheXMgZ2F0ZWQuXG4gKi9cbmNvbnN0IE1JTklNVU1fUkVMRUFTRV9BR0VfRVhDTFVERSA9IFtcbiAgXCJAY2RrdG4vcHJvdmlkZXItcHJvamVjdFwiLFxuICBcImNka3RuXCIsXG4gIFwiY2RrdG4tY2xpXCIsXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIENka3RuUHJvdmlkZXJQcm9qZWN0T3B0aW9ucyBleHRlbmRzIGNkay5Kc2lpUHJvamVjdE9wdGlvbnMge1xuICByZWFkb25seSB1c2VDdXN0b21HaXRodWJSdW5uZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogVjggaGVhcCBjZWlsaW5nIGluIE1pQiwgd3JpdHRlbiBhcyBgLS1tYXgtb2xkLXNwYWNlLXNpemVgIGludG8gdGhlIGdsb2JhbFxuICAgKiBgTk9ERV9PUFRJT05TYCBpbiBgLnByb2plbi90YXNrcy5qc29uYC5cbiAgICpcbiAgICogTXVzdCBiZSBhIHBvc2l0aXZlIHNhZmUgaW50ZWdlci4gTm9kZSByZWZ1c2VzIHRvIHN0YXJ0IG9uIGEgbWFsZm9ybWVkXG4gICAqIHZhbHVlIChgLS1tYXgtb2xkLXNwYWNlLXNpemU9MS41YCBhbmQgYD1OYU5gIGFyZSBib3RoIHJlamVjdGVkIGJlZm9yZSBhbnlcbiAgICogc2NyaXB0IHJ1bnMpLCBhbmQgYDBgIHJlc3RvcmVzIFY4J3Mgb3duIGRlZmF1bHQgcmF0aGVyIHRoYW4gYXBwbHlpbmcgYVxuICAgKiBjZWlsaW5nIC0tIHNvIGFuIGludmFsaWQgdmFsdWUgaGVyZSB3b3VsZCBicmVhayBldmVyeSB0YXNrIGluIHRoZVxuICAgKiBnZW5lcmF0ZWQgcmVwbywgZmFyIGZyb20gdGhpcyBjYWxsIHNpdGUuIEl0IGlzIHZhbGlkYXRlZCBhdCBzeW50aCB0aW1lLlxuICAgKlxuICAgKiBMZWF2ZSB1bnNldCB0byB0YWtlIHRoZSBkZWZhdWx0IGZvciB0aGUgcnVubmVyIGNsYXNzOlxuICAgKiBgREVGQVVMVF9IRUFQX01CX0NVU1RPTV9SVU5ORVJgICgyMDQ4MCwgb24gMzJHQiBjdXN0b20gcnVubmVycykgb3JcbiAgICogYERFRkFVTFRfSEVBUF9NQl9IT1NURURfUlVOTkVSYCAoNjY1Niwgb24gN0dCIEdpdEh1Yi1ob3N0ZWQgcnVubmVycykuXG4gICAqXG4gICAqIFNldCBpdCBvbmx5IGZvciBhIHByb3ZpZGVyIHRoYXQgc3RpbGwgT09NcyBvbiB0aGF0IGRlZmF1bHQuXG4gICAqIGAtLW1heC1vbGQtc3BhY2Utc2l6ZWAgaXMgYSAqY2VpbGluZyosIG5vdCBhIHJlc2VydmF0aW9uOiBsb3dlcmluZyBpdFxuICAgKiBjYW5ub3Qgc2xvdyBkb3duIHByb3ZpZGVycyB0aGF0IG5ldmVyIGFwcHJvYWNoIGl0LCBpdCBvbmx5IG1ha2VzIFY4XG4gICAqIGNvbGxlY3QgaGFyZGVyIGluc3RlYWQgb2YgbGV0dGluZyB0aGUga2VybmVsIE9PTS1raWxsIHRoZSBwcm9jZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERFRkFVTFRfSEVBUF9NQl9DVVNUT01fUlVOTkVSIGlmIGB1c2VDdXN0b21HaXRodWJSdW5uZXJgLFxuICAgKiBvdGhlcndpc2UgREVGQVVMVF9IRUFQX01CX0hPU1RFRF9SVU5ORVJcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVIZWFwU2l6ZU1iPzogbnVtYmVyO1xuICByZWFkb25seSB0ZXJyYWZvcm1Qcm92aWRlcjogc3RyaW5nO1xuICByZWFkb25seSBjZGt0blZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgY2RrdG5WZXJzaW9uYCBpbnN0ZWFkLiBUaGlzIGFsaWFzIGlzIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrdGZWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSBjb25zdHJ1Y3RzVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBmb3JjZU1ham9yVmVyc2lvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiY2RrdG5cIlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJjZGt0bi1pb1wiXG4gICAqIHByZXZpb3VzbHkgd2FzIFwiY2RrdGZcIi4gVXNlZCBmb3IgR2l0SHViIG9yZyBuYW1lIGFuZCBwYWNrYWdlIHNjb3BpbmdcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1Yk5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiSW8uQ2RrdG5cIlxuICAgKi9cbiAgcmVhZG9ubHkgbnVnZXRPcmc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcImNka3RuXCJcbiAgICovXG4gIHJlYWRvbmx5IG1hdmVuT3JnPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJpby4ke21hdmVuT3JnfVwiXG4gICAqL1xuICByZWFkb25seSBtYXZlbkdyb3VwSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgeWVhciBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHJlcG9zaXRvcnksIGZvciBjb3B5cmlnaHQgcHVycG9zZXMuXG4gICAqIFdpbGwgZmFsbCBiYWNrIHRvIHRoZSBjdXJyZW50IHllYXIgaWYgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0aW9uWWVhcj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcHJlYnVpbHQgcHJvdmlkZXIgaXMgZGVwcmVjYXRlZC5cbiAgICogSWYgdHJ1ZSwgbm8gbmV3IHZlcnNpb25zIHdpbGwgYmUgcHVibGlzaGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNEZXByZWNhdGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGRhdGUgd2hlbiB0aGUgcHJvamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBkZXByZWNhdGVkLCB0byBiZSB1c2VkIGluIHRoZSBSRUFETUUgdGV4dC5cbiAgICogSWYgbm8gZGF0ZSBpcyBwcm92aWRlZCwgdGhlbiB0aGUgZGF0ZSBvZiB0aGUgYnVpbGQgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBkZXByZWNhdGlvbkRhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcIkhhc2hpQ29ycCwgSW5jLlwiXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFVzZSB0cnVzdGVkIHB1Ymxpc2hpbmcgZm9yIHB1Ymxpc2hpbmcgdG8gcHlwaS5vcmdcbiAgICogTmVlZHMgdG8gYmUgcHJlLWNvbmZpZ3VyZWQgb24gUHlQSSB0byB3b3JrLlxuICAgKlxuICAgKiBUaGUgYHJlbGVhc2VfcHlwaWAgam9iIGtlZXBzIHdoYXRldmVyIHJ1bm5lciB0aGUgcHJvamVjdCBpcyBjb25maWd1cmVkIGZvci5cbiAgICogUHlQSSwgdW5saWtlIG5wbSwgZG9lcyBub3QgcmVzdHJpY3QgdHJ1c3RlZCBwdWJsaXNoaW5nIHRvIEdpdEh1Yi1ob3N0ZWRcbiAgICogcnVubmVycyAtLSB0cnVzdCBpcyBib3VuZCB0byB0aGUgd29ya2Zsb3cgcmVmLCBhbmQgdGhlIE9JREMgdG9rZW4gaXMgbWludGVkXG4gICAqIGZyb20gQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1VSTCwgd2hpY2ggaXMgYXZhaWxhYmxlIG9uIGFueSBydW5uZXIgd2l0aFxuICAgKiBgaWQtdG9rZW46IHdyaXRlYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MucHlwaS5vcmcvdHJ1c3RlZC1wdWJsaXNoZXJzL1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBweXBpVHJ1c3RlZFB1Ymxpc2hpbmc/OiBib29sZWFuO1xufVxuXG5jb25zdCBnZXRNYXZlbk5hbWUgPSAocHJvdmlkZXJOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gW1wibnVsbFwiLCBcInJhbmRvbVwiXS5pbmNsdWRlcyhwcm92aWRlck5hbWUpXG4gICAgPyBgJHtwcm92aWRlck5hbWV9X3Byb3ZpZGVyYFxuICAgIDogcHJvdmlkZXJOYW1lLnJlcGxhY2UoLy0vZ2ksIFwiX1wiKTtcbn07XG5cbmNvbnN0IGdpdGh1YkFjdGlvblBpbm5lZFZlcnNpb25zID0ge1xuICBcImFjdGlvbnMvY2hlY2tvdXRcIjogXCJkZTBmYWMyZTQ1MDBkYWJlMDAwOWU2NzIxNGZmNWY1NDQ3Y2U4M2RkXCIsIC8vIHY2LjAuMlxuICBcImFjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RcIjogXCIzZTVmNDViMmNmYjkxNzIwNTRiNDA4N2E0MGU4ZTBiNWE1NDYxZTdjXCIsIC8vIHY4LjAuMVxuICBcImFjdGlvbnMvZ2l0aHViLXNjcmlwdFwiOiBcImVkNTk3NDExZDhmOTI0MDczZjk4ZGZjNWM2NWEyM2EyMzI1ZjM0Y2RcIiwgLy8gdjguMC4wXG4gIFwiYWN0aW9ucy9zZXR1cC1kb3RuZXRcIjogXCJjMmZhMDlmNGJkZTVlYmI5ZDE3NzdjZjI4MjYyYTNlYjNkYjNjZWQ3XCIsIC8vIHY1LjIuMFxuICBcImFjdGlvbnMvc2V0dXAtZ29cIjogXCI0YTM2MDExMjFkZDAxZDE2MjZhMWUyM2UzNzIxMWUzMjU0YzFjMDZjXCIsIC8vIHY2LjQuMFxuICBcImFjdGlvbnMvc2V0dXAtamF2YVwiOiBcImJlNjY2YzJmY2QyN2VjODA5NzAzZGVjNTBlNTA4YzJmZGM3ZjY2NTRcIiwgLy8gdjUuMi4wXG4gIFwiYWN0aW9ucy9zZXR1cC1ub2RlXCI6IFwiNDhiNTVhMDExYmRhOWY1ZDZhZWI0YzJkOWM3MzYyZThkYWU0MDQxZVwiLCAvLyB2Ni40LjBcbiAgXCJhY3Rpb25zL3NldHVwLXB5dGhvblwiOiBcImEzMDlmZjhiNDI2YjU4ZWMwZTJhNDVmMGY4NjlkNDY4ODlkMDI0MDVcIiwgLy8gdjYuMi4wXG4gIFwiYWN0aW9ucy9zdGFsZVwiOiBcImI1ZDQxZDRlMWQ1ZGNlZWExMGU3MTA0Nzg2YjczNjI0YzE4YTE5MGZcIiwgLy8gdjEwLjIuMFxuICBcImFjdGlvbnMvdXBsb2FkLWFydGlmYWN0XCI6IFwiMDQzZmI0NmQxYTkzYzc3YWFlNjU2ZTdjMWM2NGE4NzVkMWZjNmEwYVwiLCAvLyB2Ny4wLjFcbiAgXCJhbWFubm4vYWN0aW9uLXNlbWFudGljLXB1bGwtcmVxdWVzdFwiOlxuICAgIFwiNDhmMjU2Mjg0YmQ0NmNkYWFiMTA0OGMzNzIxMzYwZTgwODMzNWQ1MFwiLCAvLyB2Ni4xLjFcbiAgXCJkZXNzYW50L2xvY2stdGhyZWFkc1wiOiBcIjcyNjZhN2NlNWMxZGYwMWIxYzZkYjg1YmY4Y2Q4NmM3MzdkYWRiZTdcIiwgLy8gdjYuMC4wXG4gIFwiaGFzaGljb3JwL3NldHVwLWNvcHl3cml0ZVwiOiBcIjMyNjM4ZGEyZDRlODFkNTZhMDc2NGFhMTU0Nzg4MmZjNGQyMDk2MzZcIiwgLy8gdjEuMS4zXG4gIFwiaGFzaGljb3JwL3NldHVwLXRlcnJhZm9ybVwiOiBcIjVlOGRiZjNjNmQ5ZGVhZjQxOTNjYTdhOGZiMjNmMmFjODNiYjZjODVcIiwgLy8gdjQuMC4wXG4gIFwiaW1qb2huYm8vaXNzdWUtYm90XCI6IFwiMzE4OGM2Y2UwNjI0OTIwNjcwOWQzYjFmMjc0ZDBkNGM1YTUyMTYwMVwiLCAvLyB2My40LjVcbiAgXCJwZXRlci1ldmFucy9jcmVhdGUtcHVsbC1yZXF1ZXN0XCI6IFwiNWY2OTc4ZmFmMDg5ZDRkMjBiMDBjNzc2Njk4OWQwNzZiYjJmYzdmMVwiLCAvLyB2OC4xLjFcbiAgXCJzbGFja2FwaS9zbGFjay1naXRodWItYWN0aW9uXCI6IFwiNDVhODhiOTU4MWJmYWIyNTY2ZGM4ODFlMmNkNjZkMzM0ZTYyMWUyY1wiLCAvLyB2My4wLjNcbiAgXCJhY3Rpb25zL2NyZWF0ZS1naXRodWItYXBwLXRva2VuXCI6IFwiMjk4MjRlNjlmNTQ2MTIxMzNlNzZmN2VhYWM3MjZlZWY2Yzg3NWJhZlwiLCAvLyB2Mi4yLjFcbiAgLy8gcHJvamVuIGVtaXRzIHRoaXMgdW5waW5uZWQgYXMgYHBucG0vYWN0aW9uLXNldHVwQHY1YCBvbmNlIHBhY2thZ2VNYW5hZ2VyIGlzIHBucG1cbiAgXCJwbnBtL2FjdGlvbi1zZXR1cFwiOiBcImZjMDZiYzEyNTdmMzM5ZDFkNWQ4YjNhMTlhOGNhZTUzODhiNTUzMjBcIiwgLy8gdjVcbn07XG5cbmV4cG9ydCBjbGFzcyBDZGt0blByb3ZpZGVyUHJvamVjdCBleHRlbmRzIGNkay5Kc2lpUHJvamVjdCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENka3RuUHJvdmlkZXJQcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IGNka3RuVmVyc2lvbiA9IG9wdGlvbnMuY2RrdG5WZXJzaW9uID8/IG9wdGlvbnMuY2RrdGZWZXJzaW9uO1xuICAgIGFzc2VydChcbiAgICAgIGNka3RuVmVyc2lvbixcbiAgICAgIFwiRWl0aGVyIGNka3RuVmVyc2lvbiBvciBjZGt0ZlZlcnNpb24gbXVzdCBiZSBwcm92aWRlZFwiXG4gICAgKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHRlcnJhZm9ybVByb3ZpZGVyLFxuICAgICAgd29ya2Zsb3dDb250YWluZXJJbWFnZSxcbiAgICAgIGNvbnN0cnVjdHNWZXJzaW9uLFxuICAgICAgbWluTm9kZVZlcnNpb24sXG4gICAgICBqc2lpVmVyc2lvbixcbiAgICAgIHR5cGVzY3JpcHRWZXJzaW9uLFxuICAgICAgaXNEZXByZWNhdGVkLFxuICAgICAgZGVwcmVjYXRpb25EYXRlLFxuICAgICAgLy8gVE9ETzogQ29uZmlybSBkZWZhdWx0IEF1dGhvciBOYW1lXG4gICAgICBhdXRob3JOYW1lID0gXCJDREsgVGVycmFpbiBNYWludGFpbmVyc1wiLFxuICAgICAgYXV0aG9yQWRkcmVzcyA9IFwiaHR0cHM6Ly9jZGt0bi5pb1wiLFxuICAgICAgbmFtZXNwYWNlID0gXCJjZGt0blwiLFxuICAgICAgZ2l0aHViTmFtZXNwYWNlID0gXCJjZGt0bi1pb1wiLFxuICAgICAgbnVnZXRPcmcgPSBcIklvLkNka3RuXCIsXG4gICAgICBtYXZlbk9yZyA9IFwiY2RrdG5cIixcbiAgICAgIG5wbVRydXN0ZWRQdWJsaXNoaW5nLFxuICAgICAgcHlwaVRydXN0ZWRQdWJsaXNoaW5nLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgW2ZxcHJvdmlkZXJOYW1lLCBwcm92aWRlclZlcnNpb25dID0gdGVycmFmb3JtUHJvdmlkZXIuc3BsaXQoXCJAXCIpO1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IGZxcHJvdmlkZXJOYW1lLnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgICBhc3NlcnQocHJvdmlkZXJOYW1lLCBgJHt0ZXJyYWZvcm1Qcm92aWRlcn0gZG9lc24ndCBzZWVtIHRvIGJlIHZhbGlkYCk7XG4gICAgYXNzZXJ0KFxuICAgICAgIXByb3ZpZGVyTmFtZS5lbmRzV2l0aChcIi1nb1wiKSxcbiAgICAgIFwicHJvdmlkZXJOYW1lIG1heSBub3QgZW5kIHdpdGggJy1nbycgYXMgdGhpcyBjYW4gY29uZmxpY3Qgd2l0aCByZXBvcyBmb3IgZ28gcGFja2FnZXNcIlxuICAgICk7XG5cbiAgICBjb25zdCBudWdldE5hbWUgPSBgJHtudWdldE9yZ30uUHJvdmlkZXJzLiR7cGFzY2FsQ2FzZShwcm92aWRlck5hbWUpfWA7XG4gICAgY29uc3QgbWF2ZW5Hcm91cElkID0gb3B0aW9ucy5tYXZlbkdyb3VwSWQgPz8gYGlvLiR7bWF2ZW5Pcmd9YDtcbiAgICBjb25zdCBtYXZlbk5hbWUgPSBgJHttYXZlbkdyb3VwSWR9LnByb3ZpZGVycy4ke2dldE1hdmVuTmFtZShwcm92aWRlck5hbWUpfWA7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IGAke2dpdGh1Yk5hbWVzcGFjZX0vJHtuYW1lc3BhY2V9LXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lLnJlcGxhY2UoXG4gICAgICAvLS9nLFxuICAgICAgXCJcIlxuICAgICl9YDtcbiAgICBjb25zdCByZXBvc2l0b3J5VXJsID0gYGdpdGh1Yi5jb20vJHtyZXBvc2l0b3J5fWA7XG5cbiAgICBjb25zdCBwYWNrYWdlSW5mbzogUGFja2FnZUluZm8gPSB7XG4gICAgICBucG06IHtcbiAgICAgICAgbmFtZTogYEAke25hbWVzcGFjZX0vcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YCxcbiAgICAgIH0sXG4gICAgICBweXRob246IHtcbiAgICAgICAgLy8gZGlzdE5hbWU6IGAke2dpdGh1Yk5hbWVzcGFjZX0tJHtuYW1lc3BhY2V9LXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lLnJlcGxhY2UoXG4gICAgICAgIGRpc3ROYW1lOiBgJHtuYW1lc3BhY2V9LXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lLnJlcGxhY2UoLy0vZ2ksIFwiX1wiKX1gLFxuICAgICAgICAvLyBtb2R1bGU6IGAke2dpdGh1Yk5hbWVzcGFjZX1fJHtuYW1lc3BhY2V9X3Byb3ZpZGVyXyR7cHJvdmlkZXJOYW1lLnJlcGxhY2UoXG4gICAgICAgIG1vZHVsZTogYCR7bmFtZXNwYWNlfV9wcm92aWRlcl8ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKC8tL2dpLCBcIl9cIil9YCxcbiAgICAgICAgdHJ1c3RlZFB1Ymxpc2hpbmc6IHB5cGlUcnVzdGVkUHVibGlzaGluZyA/PyBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBwdWJsaXNoVG9OdWdldDoge1xuICAgICAgICBkb3ROZXROYW1lc3BhY2U6IG51Z2V0TmFtZSxcbiAgICAgICAgcGFja2FnZUlkOiBudWdldE5hbWUsXG4gICAgICB9LFxuICAgICAgcHVibGlzaFRvTWF2ZW46IHtcbiAgICAgICAgamF2YVBhY2thZ2U6IG1hdmVuTmFtZSxcbiAgICAgICAgbWF2ZW5Hcm91cElkOiBtYXZlbkdyb3VwSWQsXG4gICAgICAgIG1hdmVuQXJ0aWZhY3RJZDogYCR7bmFtZXNwYWNlfS1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gLFxuICAgICAgfSxcbiAgICAgIHB1Ymxpc2hUb0dvOiB7XG4gICAgICAgIG1vZHVsZU5hbWU6IGAke3JlcG9zaXRvcnlVcmx9LWdvYCxcbiAgICAgICAgZ2l0VXNlckVtYWlsOiBcImdpdGh1Yi10ZWFtLWNkay10ZXJyYWluQGNka3RuLmlvXCIsXG4gICAgICAgIGdpdFVzZXJOYW1lOiBcInRlYW0tY2RrLXRlcnJhaW5cIixcbiAgICAgICAgcGFja2FnZU5hbWU6IHByb3ZpZGVyTmFtZS5yZXBsYWNlKC8tL2csIFwiXCIpLFxuICAgICAgICAvLyBJbiBvcmRlciB0byB1c2UgdGhlIGNvcHl3cml0ZSBhY3Rpb24sIHdlIG5lZWQgdG8gcmVidWlsZCB0aGUgZnVsbCBwcmUtcHVibGlzaCBzdGVwcyB3b3JrZmxvdyB1bmZvcnR1bmF0ZWx5XG4gICAgICAgIC8vIElmIHNvbWVvbmUga25vd3MgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgbXV0YXRpb24gd2l0aCBtaW5pbWFsIGN1c3RvbSBjb2RlLCBwbGVhc2UgZG8gc29cbiAgICAgICAgcHJlUHVibGlzaFN0ZXBzOiBbXG4gICAgICAgICAgLy8gTk9URTogdGhlIFwiU2V0dXAgcG5wbVwiIHN0ZXAgdGhpcyBqb2IgbmVlZHMgaXMgaW5zZXJ0ZWQgYnlcbiAgICAgICAgICAvLyBHb1B1Ymxpc2hKb2JQYXRjaCBhdCBzeW50aCB0aW1lLCBub3QgaGVyZSAtLSBpdCBoYXMgdG8gcmVhZFxuICAgICAgICAgIC8vIGB0aGlzLnBhY2thZ2UucG5wbVZlcnNpb25gLCB3aGljaCBkb2VzIG5vdCBleGlzdCB5ZXQgYXQgc3VwZXIoKS5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNoZWNrb3V0XCIsXG4gICAgICAgICAgICB1c2VzOiBcImFjdGlvbnMvY2hlY2tvdXRcIixcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgcGF0aDogXCIucmVwb1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiSW5zdGFsbCBEZXBlbmRlbmNpZXNcIixcbiAgICAgICAgICAgIHJ1bjogXCJjZCAucmVwbyAmJiBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGVcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiRXh0cmFjdCBidWlsZCBhcnRpZmFjdFwiLFxuICAgICAgICAgICAgcnVuOiBcInRhciAtLXN0cmlwLWNvbXBvbmVudHM9MSAteHp2ZiBkaXN0L2pzLyoudGd6IC1DIC5yZXBvXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIk1vdmUgYnVpbGQgYXJ0aWZhY3Qgb3V0IG9mIHRoZSB3YXlcIixcbiAgICAgICAgICAgIHJ1bjogXCJtdiBkaXN0IGRpc3Qub2xkXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNyZWF0ZSBnbyBhcnRpZmFjdFwiLFxuICAgICAgICAgICAgcnVuOiBcImNkIC5yZXBvICYmIG5weCBwcm9qZW4gcGFja2FnZTpnb1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJTZXR1cCBDb3B5d3JpdGUgdG9vbFwiLFxuICAgICAgICAgICAgdXNlczogXCJoYXNoaWNvcnAvc2V0dXAtY29weXdyaXRlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNvcHkgY29weXdyaXRlIGhjbCBmaWxlXCIsXG4gICAgICAgICAgICBydW46IFwiY3AgLnJlcG8vLmNvcHl3cml0ZS5oY2wgLnJlcG8vZGlzdC9nby8uY29weXdyaXRlLmhjbFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJBZGQgaGVhZGVycyB1c2luZyBDb3B5d3JpdGUgdG9vbFwiLFxuICAgICAgICAgICAgcnVuOiBcImNkIC5yZXBvL2Rpc3QvZ28gJiYgY29weXdyaXRlIGhlYWRlcnNcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiUmVtb3ZlIGNvcHl3cml0ZSBoY2wgZmlsZVwiLFxuICAgICAgICAgICAgcnVuOiBcInJtIC1mIC5yZXBvL2Rpc3QvZ28vLmNvcHl3cml0ZS5oY2xcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiUmVtb3ZlIHNvbWUgdGV4dCBmcm9tIHRoZSBSRUFETUUgdGhhdCBkb2Vzbid0IGFwcGx5IHRvIEdvXCIsXG4gICAgICAgICAgICBydW46IFtcbiAgICAgICAgICAgICAgXCJzZWQgLWkgJ3MvIyBDREtUTiBwcmVidWlsdCBiaW5kaW5ncyBmb3IvIyBDREtUTiBHbyBiaW5kaW5ncyBmb3IvJyAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kXCIsXG4gICAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5NTExOTQ5XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgICAgYHNlZCAtaSAtZSAnLyMjICR7aXNEZXByZWNhdGVkID8gXCJEZXByZWNhdGVkXCIgOiBcIkF2YWlsYWJsZVwifSBQYWNrYWdlcy8sLyMjIyBHby8hYicgLWUgJy8jIyMgR28vIWQ7cDsgcy8jIyMgR28vIyMgR28gUGFja2FnZS8nIC1lICdkJyAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kYCxcbiAgICAgICAgICAgICAgLy8gc2VkIC1lIGlzIGJsYWNrIG1hZ2ljIGFuZCBmb3Igd2hhdGV2ZXIgcmVhc29uIHRoZSBzdHJpbmcgcmVwbGFjZSBkb2Vzbid0IHdvcmsgc28gbGV0J3MgdHJ5IGl0IGFnYWluOlxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcbiAgICAgICAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgICAgICAgIGBzZWQgLWkgJ3MvIyMjIEdvLyMjICR7aXNEZXByZWNhdGVkID8gXCJEZXByZWNhdGVkXCIgOiBcIkdvXCJ9IFBhY2thZ2UvJyAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kYCxcbiAgICAgICAgICAgICAgLy8gSnVzdCBzdHJhaWdodCB1cCBkZWxldGUgdGhlc2UgZnVsbCBsaW5lcyBhbmQgZXZlcnl0aGluZyBpbiBiZXR3ZWVuIHRoZW06XG4gICAgICAgICAgICAgIFwic2VkIC1pIC1lICcvQVBJLnR5cGVzY3JpcHQubWQvLC9Zb3UgY2FuIGFsc28gdmlzaXQgYSBob3N0ZWQgdmVyc2lvbi8hYicgLWUgJ2QnIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRcIixcbiAgICAgICAgICAgICAgYHNlZCAtaSAnc3xGaW5kIGF1dG8tZ2VuZXJhdGVkIGRvY3MgZm9yIHRoaXMgcHJvdmlkZXIgaGVyZTp8RmluZCBhdXRvLWdlbmVyYXRlZCBkb2NzIGZvciB0aGlzIHByb3ZpZGVyIFtoZXJlXShodHRwczovLyR7cmVwb3NpdG9yeVVybH0vYmxvYi9tYWluL2RvY3MvQVBJLmdvLm1kKS58JyAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kYCxcbiAgICAgICAgICAgICAgLy8gSnVzdCBzdHJhaWdodCB1cCBkZWxldGUgdGhlc2UgZnVsbCBsaW5lcyBhbmQgZXZlcnl0aGluZyBpbiBiZXR3ZWVuIHRoZW06XG4gICAgICAgICAgICAgIFwic2VkIC1pIC1lICcvIyMjIFByb3ZpZGVyIFZlcnNpb24vLC9UaGUgcHJvdmlkZXIgdmVyc2lvbiBjYW4gYmUgYWRqdXN0ZWQvIWInIC1lICdkJyAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kXCIsXG4gICAgICAgICAgICBdLmpvaW4oXCJcXG5cIiksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNvcHkgdGhlIFJFQURNRSBmaWxlIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5XCIsXG4gICAgICAgICAgICBydW46IFwiY3AgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZCAucmVwby9kaXN0L2dvL1JFQURNRS5tZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDb2xsZWN0IGdvIEFydGlmYWN0XCIsXG4gICAgICAgICAgICBydW46IFwibXYgLnJlcG8vZGlzdCBkaXN0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHdvcmtmbG93UnVuc09uID0gb3B0aW9ucy51c2VDdXN0b21HaXRodWJSdW5uZXJcbiAgICAgID8gW1wiZGVwb3QtdWJ1bnR1LTI0LjA0LThcIl0gLy8gOCBjb3JlLCAzMiBHQlxuICAgICAgOiBbXCJ1YnVudHUtbGF0ZXN0XCJdOyAvLyA3IEdCXG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYXV0aG9yQWRkcmVzcyxcbiAgICAgIGF1dGhvck5hbWUsXG4gICAgICBtaW5Ob2RlVmVyc2lvbixcbiAgICAgIHdvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICB3b3JrZmxvd1J1bnNPbixcbiAgICAgIGxpY2Vuc2VkOiBmYWxzZSwgLy8gd2UgZG8gc3VwcGx5IG91ciBvd24gbGljZW5zZSBmaWxlIHdpdGggYSBjdXN0b20gaGVhZGVyXG4gICAgICByZWxlYXNlVG9OcG06IHRydWUsXG4gICAgICBucG1UcnVzdGVkUHVibGlzaGluZzogbnBtVHJ1c3RlZFB1Ymxpc2hpbmcgPz8gZmFsc2UsXG4gICAgICBuYW1lOiBwYWNrYWdlSW5mby5ucG0ubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUHJlYnVpbHQgJHtwcm92aWRlck5hbWV9IFByb3ZpZGVyIGZvciBDREsgVGVycmFpbiAoY2RrdG4pYCxcbiAgICAgIGtleXdvcmRzOiBbXG4gICAgICAgIFwiY2RrdG5cIixcbiAgICAgICAgXCJjZGstdGVycmFpblwiLFxuICAgICAgICBcImNka3RmXCIsXG4gICAgICAgIFwidGVycmFmb3JtXCIsXG4gICAgICAgIFwib3BlbnRvZnVcIixcbiAgICAgICAgXCJjZGtcIixcbiAgICAgICAgXCJwcm92aWRlclwiLFxuICAgICAgICBwcm92aWRlck5hbWUsXG4gICAgICBdLFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICBqZXN0OiBmYWxzZSxcbiAgICAgIGF1dGhvck9yZ2FuaXphdGlvbjogdHJ1ZSxcbiAgICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiBcIm1haW5cIixcbiAgICAgIHJlcG9zaXRvcnk6IGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvc2l0b3J5fS5naXRgLFxuICAgICAgZXNsaW50OiBmYWxzZSxcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSxcbiAgICAgIC8vIFByb3ZpZGVyIHJlcG9zIHJ1biBqc2lpLXBhY21hayBvdmVyIGJ1bmRsZWQgZGVwcyBleGFjdGx5IGFzIHRoaXMgcHJvamVjdFxuICAgICAgLy8gZG9lcywgc28gdGhleSBuZWVkIHRoZSBob2lzdGVkIGxpbmtlciB0b28gLS0gc2VlIHRoZSBub3RlIGluIC5wcm9qZW5yYy50cy5cbiAgICAgIC8vIEl0IG11c3QgYmUgaW4gcG5wbS13b3Jrc3BhY2UueWFtbCwgbm90IC5ucG1yYywgb3IgcG5wbSAxMSBpZ25vcmVzIGl0LlxuICAgICAgcG5wbU9wdGlvbnM6IHtcbiAgICAgICAgd29ya3NwYWNlWWFtbE9wdGlvbnM6IHtcbiAgICAgICAgICBub2RlTGlua2VyOiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYU5vZGVMaW5rZXIuSE9JU1RFRCxcbiAgICAgICAgICBhdWRpdENvbmZpZzoge1xuICAgICAgICAgICAgLy8gU2FtZSBmbGF0LXJhbmdlIGFydGlmYWN0IHRoaXMgcHJvamVjdCBpZ25vcmVzIGZvciBpdHNlbGY6XG4gICAgICAgICAgICAvLyBHSFNBLW1oOTktdjk5bS00Z3ZnIGRlY2xhcmVzIGFmZmVjdGVkIFwiPD01LjAuN1wiLCB3aGljaCBuYWl2ZWx5IG1hdGNoZXNcbiAgICAgICAgICAgIC8vIHRoZSAxLnggbGluZS4gUHJvdmlkZXIgcmVwb3MgcmVhY2ggYnJhY2UtZXhwYW5zaW9uQDEgdmlhXG4gICAgICAgICAgICAvLyBjZGt0bi1jbGkgPiBAY2RrdG4vaGNsMmNkayA+IGdsb2IgPiBtaW5pbWF0Y2hAMywgYW5kIHRoZXJlIGlzIG5vIGZpeGVkXG4gICAgICAgICAgICAvLyAxLnggdG8gbW92ZSB0byAtLSBmb3JjaW5nIDUuMC44IHdvdWxkIGJyZWFrIG1pbmltYXRjaEAzLCB3aGljaCByZXF1aXJlc1xuICAgICAgICAgICAgLy8gXjEuMS43LiBEZXYgdG9vbGluZyBvbmx5OyBuZXZlciBzaGlwcGVkLlxuICAgICAgICAgICAgaWdub3JlR2hzYXM6IFtcIkdIU0EtbWg5OS12OTltLTRndmdcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBMZXQgZmlyc3QtcGFydHkgcmVsZWFzZXMgc2tpcCB0aGUgYGNvb2xkb3duYCBiZWxvdyAtLSBzZWUgdGhlIG5vdGUgb25cbiAgICAgICAgICAvLyB0aGUgY29uc3RhbnQuIFRoaXJkLXBhcnR5IGRlcHMgYXJlIHVuYWZmZWN0ZWQuXG4gICAgICAgICAgbWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlOiBNSU5JTVVNX1JFTEVBU0VfQUdFX0VYQ0xVREUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGVwc1VwZ3JhZGU6ICFpc0RlcHJlY2F0ZWQsXG4gICAgICBkZXBzVXBncmFkZU9wdGlvbnM6IHtcbiAgICAgICAgLy8gU2tpcCB2ZXJzaW9ucyBwdWJsaXNoZWQgaW4gdGhlIGxhc3QgNCBkYXlzLCBzbyBhIGNvbXByb21pc2VkIHJlbGVhc2UgaGFzXG4gICAgICAgIC8vIHRpbWUgdG8gYmUgZmxhZ2dlZCBiZWZvcmUgYW4gYXV0by1tZXJnaW5nIHVwZ3JhZGUgUFIgcHVsbHMgaXQgaW4uIFdhaXZlZFxuICAgICAgICAvLyBmb3IgdGhlIHBhY2thZ2VzIGluIE1JTklNVU1fUkVMRUFTRV9BR0VfRVhDTFVERS5cbiAgICAgICAgY29vbGRvd246IDQsXG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIGxhYmVsczogW1wiYXV0b21lcmdlXCIsIFwiYXV0by1hcHByb3ZlXCIsIFwiZGVwZW5kZW5jaWVzXCJdLFxuICAgICAgICAgIHNjaGVkdWxlOiBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUuV0VFS0xZLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF1ZGl0RGVwczogIWlzRGVwcmVjYXRlZCxcbiAgICAgIGF1ZGl0RGVwc09wdGlvbnM6IHtcbiAgICAgICAgbGV2ZWw6IFwiaGlnaFwiLFxuICAgICAgICBydW5PbjogXCJidWlsZFwiLFxuICAgICAgfSxcbiAgICAgIHB1Ymxpc2hUb1B5cGk6IHBhY2thZ2VJbmZvLnB5dGhvbixcbiAgICAgIHB1Ymxpc2hUb051Z2V0OiBwYWNrYWdlSW5mby5wdWJsaXNoVG9OdWdldCxcbiAgICAgIHB1Ymxpc2hUb01hdmVuOiBwYWNrYWdlSW5mby5wdWJsaXNoVG9NYXZlbixcbiAgICAgIHB1Ymxpc2hUb0dvOiBwYWNrYWdlSW5mby5wdWJsaXNoVG9HbyxcbiAgICAgIHJlbGVhc2VGYWlsdXJlSXNzdWU6IHRydWUsXG4gICAgICBwZWVyRGVwZW5kZW5jeU9wdGlvbnM6IHtcbiAgICAgICAgcGlubmVkRGV2RGVwZW5kZW5jeTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgd29ya2Zsb3dHaXRJZGVudGl0eToge1xuICAgICAgICBuYW1lOiBcInRlYW0tY2RrLXRlcnJhaW5cIixcbiAgICAgICAgZW1haWw6IFwiZ2l0aHViLXRlYW0tY2RrLXRlcnJhaW5AY2RrdG4uaW9cIixcbiAgICAgIH0sXG4gICAgICBtaW5NYWpvclZlcnNpb246IE1JTl9NQUpPUl9WRVJTSU9OLFxuICAgICAgc3RhbGU6IHRydWUsXG4gICAgICBzdGFsZU9wdGlvbnM6IHtcbiAgICAgICAgaXNzdWVzOiB7XG4gICAgICAgICAgc3RhbGVMYWJlbDogXCJzdGFsZVwiLFxuICAgICAgICAgIGRheXNCZWZvcmVTdGFsZTogNDUsXG4gICAgICAgICAgc3RhbGVNZXNzYWdlOlxuICAgICAgICAgICAgXCI0NSBkYXlzIGhhdmUgcGFzc2VkIHNpbmNlIHRoaXMgaXNzdWUgd2FzIG9wZW5lZCwgYW5kIEkgYXNzdW1lIG90aGVyIHB1Ymxpc2hlcyBoYXZlIHN1Y2NlZWRlZCBpbiB0aGUgbWVhbnRpbWUuIFwiICtcbiAgICAgICAgICAgIFwiSWYgbm8gb25lIHJlbW92ZXMgdGhlIGBzdGFsZWAgbGFiZWwgb3IgY29tbWVudHMsIEknbSBnb2luZyB0byBhdXRvLWNsb3NlIHRoaXMgaXNzdWUgaW4gMTQgZGF5cy5cIixcbiAgICAgICAgICBkYXlzQmVmb3JlQ2xvc2U6IDE0LFxuICAgICAgICAgIGNsb3NlTWVzc2FnZTpcbiAgICAgICAgICAgIFwiMiBtb250aHMgaGF2ZSBwYXNzZWQsIHNvIEknbSBjbG9zaW5nIHRoaXMgaXNzdWUgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IG90aGVyIHB1Ymxpc2hlcyBoYXZlIHN1Y2NlZWRlZCBpbiB0aGUgbWVhbnRpbWUuXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHB1bGxSZXF1ZXN0OiB7XG4gICAgICAgICAgc3RhbGVMYWJlbDogXCJzdGFsZVwiLFxuICAgICAgICAgIGRheXNCZWZvcmVTdGFsZTogMSxcbiAgICAgICAgICBzdGFsZU1lc3NhZ2U6IGBDbG9zaW5nIHRoaXMgUFIsIGlmIGl0IGhhcyBub3QgbWVyZ2VkIHRoZXJlIGlzIG1vc3QgbGlrZWx5IGEgQ0kgb3IgQ0RLVE4gaXNzdWUgcHJldmVudGluZyBpdCBmcm9tIG1lcmdpbmcuIElmIHRoaXMgaGFzIGJlZW4gYSBtYW51YWwgUFIsIHBsZWFzZSByZW9wZW4gaXQgYW5kIGFkZCB0aGUgXFxgbm8tYXV0by1jbG9zZVxcYCBsYWJlbCB0byBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYWdhaW4uYCxcbiAgICAgICAgICBkYXlzQmVmb3JlQ2xvc2U6IDAsXG4gICAgICAgICAgZXhlbXB0TGFiZWxzOiBbXCJuby1hdXRvLWNsb3NlXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGU6IGZhbHNlLFxuICAgICAgZG9jZ2VuOiBmYWxzZSxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tQXBwKCksXG4gICAgICAgIC8vIHByb2plbiA+PTAuMTAwIG1vdmVkIHRoZSBgbWVyZ2lmeWAgcHJvamVjdCBvcHRpb24gdW5kZXIgZ2l0aHViT3B0aW9uc1xuICAgICAgICBtZXJnaWZ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERldkRlcHMoXG4gICAgICBcImRvdC1wcm9wQF41LjIuMFwiLFxuICAgICAgLy8gXjEuMS4wIGNvdWxkIG5ldmVyIGxlYXZlIHRoZSAxLnggbGluZSwgd2hpY2ggZHJhZ3MgaW4gYW4gb2xkXG4gICAgICAvLyBAYWN0aW9ucy9odHRwLWNsaWVudCBhbmQgd2l0aCBpdCB1bmRpY2kgPDYuMjQuMCAtLSB0aHJlZSBoaWdoIGFkdmlzb3JpZXNcbiAgICAgIC8vIChHSFNBLXZybTYtOHZwdi1xdjhxLCBHSFNBLXY5cDktaGZqMi1oY3c4LCBhbmQgdGhlIDw2LjI3LjAgZnJhZ21lbnQtY291bnRcbiAgICAgIC8vIERvUykuIDMueCBkZXBlbmRzIG9uIEBhY3Rpb25zL2h0dHAtY2xpZW50IF40IC0+IHVuZGljaSBeNi4yMy4wLCByZXNvbHZpbmdcbiAgICAgIC8vIHRvIDYuMjguMC4gTk9URTogMy54IGlzIEVTTS1vbmx5LCBzbyBjaGVjay1mb3ItdXBncmFkZXMuanMgbG9hZHMgaXQgd2l0aCBhXG4gICAgICAvLyBkeW5hbWljIGltcG9ydCByYXRoZXIgdGhhbiBgcmVxdWlyZWAuXG4gICAgICBcIkBhY3Rpb25zL2NvcmVAXjMuMC4wXCIsXG4gICAgICBcIkBhY3Rpb24tdmFsaWRhdG9yL2NvcmVcIixcbiAgICAgIFwiQGFjdGlvbi12YWxpZGF0b3IvY2xpXCJcbiAgICApO1xuXG4gICAgLy8gRGVmYXVsdCBtZW1vcnkgaXMgN0dCOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3VzaW5nLWdpdGh1Yi1ob3N0ZWQtcnVubmVycy9hYm91dC1naXRodWItaG9zdGVkLXJ1bm5lcnMjc3VwcG9ydGVkLXJ1bm5lcnMtYW5kLWhhcmR3YXJlLXJlc291cmNlc1xuICAgIC8vIEN1c3RvbSBSdW5uZXJzIHdlIHVzZSBoYXZlIDMyR0Igb2YgbWVtb3J5LlxuICAgIC8vXG4gICAgLy8gVGhlIGN1c3RvbS1ydW5uZXIgY2VpbGluZyBoYXMgdG8gc2l0IGJlbG93IHRoZSBtZW1vcnkgYSBqb2IgY2FuIEFDVFVBTExZXG4gICAgLy8gZ2V0LCBvciBWOCBuZXZlciBmZWVscyBwcmVzc3VyZSB0byBjb2xsZWN0IGFuZCB0aGUga2VybmVsIE9PTS1raWxscyB0aGVcbiAgICAvLyBwcm9jZXNzIGZpcnN0LiBUaGUgc2lnbmF0dXJlIGlzIGRpc3RpbmN0aXZlOiB0aGUgc3RlcCBzaXRzIGluX3Byb2dyZXNzIHdpdGhcbiAgICAvLyBhIG51bGwgY29tcGxldGVkQXQgKGtpbGxlZCBwcm9jZXNzLCBub3QgYSBub24temVybyBleGl0KSBhbmQgdGhlIGpvYiBidXJuc1xuICAgIC8vIH4xMi0xM20gaW5zdGVhZCBvZiB0aGUgfjRtIGEgaGVhbHRoeSBydW4gdGFrZXMuIFNlZSAjMzQuXG4gICAgLy9cbiAgICAvLyBcIkJlbG93IGF2YWlsYWJsZSBSQU1cIiBpcyBub3QgdGhlIHNhbWUgYXMgXCJiZWxvdyB0aGUgYWR2ZXJ0aXNlZCBSQU1cIiwgd2hpY2hcbiAgICAvLyBpcyB3aGF0IHRoZSBmaXJzdCB0d28gYXR0ZW1wdHMgYXQgdGhpcyBudW1iZXIgZ290IHdyb25nLiBkZXBvdC11YnVudHUtMjQuMDQtOFxuICAgIC8vIGFkdmVydGlzZXMgMzJHQiwgYnV0IERlcG90IHJlc2VydmVzIDhHQiBvZiBpdCBmb3IgdGhlIGluLW1lbW9yeSBkaXNrXG4gICAgLy8gYWNjZWxlcmF0b3IgKFwiYSBwb3J0aW9uIG9mIHRoZSBtZW1vcnkgb24gdGhlIHJ1bm5lciBob3N0IGZvciBhIGRpc2tcbiAgICAvLyBhY2NlbGVyYXRvciwgYmFja2VkIGJ5IGEgUkFNIGRpc2tcIiksIGxlYXZpbmcgfjI0R0IgdXNhYmxlIC0tIGFuZCB0aGVcbiAgICAvLyB3b3Jrc3BhY2UgbGl2ZXMgb24gdGhhdCBSQU0gZGlzaywgc28gdGhlIGdlbmVyYXRlZCBiaW5kaW5ncyBzcXVlZXplIHRoZSBzYW1lXG4gICAgLy8gcG9vbCBwYWNtYWsgaXMgZ3Jvd2luZyBpbnRvLiAzMTc0NCAofjk3JSBvZiAzMkdCKSBhbmQgdGhlbiAyODY3MiAofjkwJSkgYm90aFxuICAgIC8vIHNhdCBBQk9WRSB0aGF0IHJlYWwgY2VpbGluZywgc28gbG93ZXJpbmcgaXQgdGhlIGZpcnN0IHRpbWUgY2hhbmdlZCBub3RoaW5nOlxuICAgIC8vIGNka3RuLXByb3ZpZGVyLWRhdGFkb2cgZGllZCBhdCAxMm0yMXMgb24gMzE3NDQgYW5kIGFnYWluIGF0IDEybTIzcy8xMm00MHMgb25cbiAgICAvLyAyODY3Miwgc2FtZSBzaWxlbnQga2lsbC5cbiAgICAvL1xuICAgIC8vIEVtcGlyaWNhbGx5OiBkYXRhZG9nJ3MgcGFja2FnZTpnbywgd2hpY2ggaGFkIG5ldmVyIG9uY2UgY29tcGxldGVkLCBmaW5pc2hlZFxuICAgIC8vIGl0cyBgQ3JlYXRlIGdvIGFydGlmYWN0YCBzdGVwIGluIDNtMDFzIGF0IDE2Mzg0IChydW4gMzA4MjQ3ODcyOTEpLiAyMDQ4MFxuICAgIC8vIGtlZXBzIH40R0IgYmVsb3cgdGhlIH4yNEdCIHVzYWJsZSBsaW5lIHdoaWxlIGdpdmluZyBwYWNtYWsgbW9yZSByb29tIHRoYW4gdGhlXG4gICAgLy8gdmVyaWZpZWQtZ29vZCB2YWx1ZS4gVGhpcyBpcyBhIGNlaWxpbmcsIG5vdCBhIHJlc2VydmF0aW9uIC0tIHByb3ZpZGVycyB0aGF0XG4gICAgLy8gbmV2ZXIgYXBwcm9hY2ggaXQgYXJlIHVuYWZmZWN0ZWQsIHNvIGl0IGNvc3RzIG5vdGhpbmcgdG8gbGVhdmUgaGVhZHJvb20gaGVyZS5cbiAgICBjb25zdCBERUZBVUxUX0hFQVBfTUJfQ1VTVE9NX1JVTk5FUiA9IDIwNDgwO1xuICAgIGNvbnN0IERFRkFVTFRfSEVBUF9NQl9IT1NURURfUlVOTkVSID0gNjY1NjsgLy8gNi41R0Igb2YgN0dCXG5cbiAgICAvLyBgbm9kZUhlYXBTaXplTWJgIGlzIHB1YmxpYyBBUEkgYW5kLCB2aWEganNpaSwgcmVhY2hhYmxlIGZyb20gUHl0aG9uLCBHbyxcbiAgICAvLyBKYXZhIGFuZCAuTkVUIHdoZXJlIGBudW1iZXJgIGlzIGV2ZW4gbG9vc2VyIHRoYW4gVHlwZVNjcmlwdCdzLiBOb2RlXG4gICAgLy8gcmVmdXNlcyB0byBzdGFydCBvbiBhIG1hbGZvcm1lZCBjZWlsaW5nIC0tIGAtLW1heC1vbGQtc3BhY2Utc2l6ZT0xLjVgXG4gICAgLy8gYW5kIGA9TmFOYCBhcmUgYm90aCByZWplY3RlZCBiZWZvcmUgYW55IHNjcmlwdCBydW5zIC0tIGFuZCBgMGAgc2lsZW50bHlcbiAgICAvLyByZXN0b3JlcyBWOCdzIGRlZmF1bHQgaW5zdGVhZCBvZiBhcHBseWluZyBhIGxpbWl0LiBJbnRlcnBvbGF0aW5nIGFuXG4gICAgLy8gdW5jaGVja2VkIHZhbHVlIHdvdWxkIHRoZXJlZm9yZSBicmVhayBldmVyeSB0YXNrIGluIHRoZSBnZW5lcmF0ZWQgcmVwbyxcbiAgICAvLyBzdXJmYWNpbmcgYXMgYW4gaW5zY3J1dGFibGUgc3RhcnR1cCBmYWlsdXJlIGluIENJIHJhdGhlciB0aGFuIGhlcmUuXG4gICAgYXNzZXJ0KFxuICAgICAgb3B0aW9ucy5ub2RlSGVhcFNpemVNYiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIChOdW1iZXIuaXNTYWZlSW50ZWdlcihvcHRpb25zLm5vZGVIZWFwU2l6ZU1iKSAmJlxuICAgICAgICAgIG9wdGlvbnMubm9kZUhlYXBTaXplTWIgPiAwKSxcbiAgICAgIGBub2RlSGVhcFNpemVNYiBtdXN0IGJlIGEgcG9zaXRpdmUgc2FmZSBpbnRlZ2VyIChNaUIpLCBnb3QgJHtvcHRpb25zLm5vZGVIZWFwU2l6ZU1ifWBcbiAgICApO1xuXG4gICAgY29uc3QgbWF4T2xkU3BhY2VTaXplID0gU3RyaW5nKFxuICAgICAgb3B0aW9ucy5ub2RlSGVhcFNpemVNYiA/P1xuICAgICAgICAob3B0aW9ucy51c2VDdXN0b21HaXRodWJSdW5uZXJcbiAgICAgICAgICA/IERFRkFVTFRfSEVBUF9NQl9DVVNUT01fUlVOTkVSXG4gICAgICAgICAgOiBERUZBVUxUX0hFQVBfTUJfSE9TVEVEX1JVTk5FUilcbiAgICApO1xuXG4gICAgLy8gR29sYW5nIG5lZWRzIG1vcmUgbWVtb3J5IHRvIGJ1aWxkXG4gICAgdGhpcy50YXNrcy5hZGRFbnZpcm9ubWVudChcbiAgICAgIFwiTk9ERV9PUFRJT05TXCIsXG4gICAgICBgLS1tYXgtb2xkLXNwYWNlLXNpemU9JHttYXhPbGRTcGFjZVNpemV9YFxuICAgICk7XG5cbiAgICB0aGlzLnRhc2tzLmFkZEVudmlyb25tZW50KFwiQ0hFQ0tQT0lOVF9ESVNBQkxFXCIsIFwiMVwiKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlVGFzayA9IHRoaXMuYWRkVGFzayhcInZhbGlkYXRlLXdvcmtmbG93c1wiLCB7XG4gICAgICBleGVjOiBgZmluZCAuLy5naXRodWIvd29ya2Zsb3dzIC10eXBlIGYgLW5hbWUgXCIqLnltbFwiIC1wcmludDAgfCB4YXJncyAtMCAtbiAxIG5weCBhY3Rpb24tdmFsaWRhdG9yYCxcbiAgICB9KTtcbiAgICB2YWxpZGF0ZVRhc2suZGVzY3JpcHRpb24gPVxuICAgICAgXCJMaW50IHRoZSBZQU1MIGZpbGVzIGdlbmVyYXRlZCBieSBQcm9qZW4gdG8gZGVmaW5lIEdpdEh1YiBBY3Rpb25zIGFuZCBXb3JrZmxvd3MsIGNoZWNraW5nIHRoZW0gYWdhaW5zdCBwdWJsaXNoZWQgSlNPTiBzY2hlbWFzXCI7XG4gICAgdGhpcy5wb3N0Q29tcGlsZVRhc2suc3Bhd24odmFsaWRhdGVUYXNrKTtcblxuICAgIHRoaXMucGFja2FnZS5hZGRQYWNrYWdlUmVzb2x1dGlvbnMoXCJAdHlwZXMveWFyZ3NAMTcuMC4xM1wiKTtcblxuICAgIGNvbnN0IHNldFNhZmVEaXJlY3RvcnkgPSB7XG4gICAgICBuYW1lOiBcIlNldCBnaXQgY29uZmlnIHNhZmUuZGlyZWN0b3J5XCIsXG4gICAgICBydW46IFwiZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWFkZCBzYWZlLmRpcmVjdG9yeSAkKHB3ZClcIixcbiAgICB9O1xuXG4gICAgKCh0aGlzLmJ1aWxkV29ya2Zsb3cgYXMgYW55KS5wcmVCdWlsZFN0ZXBzIGFzIEpvYlN0ZXBbXSkucHVzaChcbiAgICAgIHNldFNhZmVEaXJlY3RvcnlcbiAgICApO1xuICAgICh0aGlzLnJlbGVhc2UgYXMgYW55KS5kZWZhdWx0QnJhbmNoLndvcmtmbG93LmpvYnMucmVsZWFzZS5zdGVwcy5zcGxpY2UoXG4gICAgICAxLFxuICAgICAgMCxcbiAgICAgIHNldFNhZmVEaXJlY3RvcnlcbiAgICApO1xuXG4gICAgLy8gYWx3YXlzIHB1Ymxpc2ggYSBuZXcgR2l0SHViIHJlbGVhc2UsIGV2ZW4gd2hlbiBwdWJsaXNoaW5nIHRvIGEgcGFydGljdWxhciBwYWNrYWdlIG1hbmFnZXIgZmFpbHNcbiAgICBjb25zdCByZWxlYXNlV29ya2Zsb3cgPSB0aGlzLnRyeUZpbmRPYmplY3RGaWxlKFxuICAgICAgXCIuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLnltbFwiXG4gICAgKTtcbiAgICByZWxlYXNlV29ya2Zsb3c/LmFkZE92ZXJyaWRlKFwiam9icy5yZWxlYXNlX2dpdGh1Yi5uZWVkc1wiLCBcInJlbGVhc2VcIik7XG5cbiAgICAvLyBUcnVzdGVkIHB1Ymxpc2hpbmcgcmVxdWlyZXMgbnBtID49MTEuNS4xIHdoaWNoIHNoaXBzIHdpdGggTm9kZSAyNFxuICAgIGlmIChucG1UcnVzdGVkUHVibGlzaGluZykge1xuICAgICAgdGhpcy5naXRodWJcbiAgICAgICAgPy50cnlGaW5kV29ya2Zsb3coXCJyZWxlYXNlXCIpXG4gICAgICAgID8uZmlsZT8ucGF0Y2goXG4gICAgICAgICAgSnNvblBhdGNoLnJlcGxhY2UoXG4gICAgICAgICAgICBcIi9qb2JzL3JlbGVhc2VfbnBtL3N0ZXBzLzAvd2l0aC9ub2RlLXZlcnNpb25cIixcbiAgICAgICAgICAgIFwiMjQueFwiXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAvLyBOUE0gT0lEQyBkb2Vzbid0IHN1cHBvcnQgc2VsZi1ob3N0ZWQgcnVubmVycyB5ZXRcbiAgICAgIHRoaXMuZ2l0aHViXG4gICAgICAgID8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKVxuICAgICAgICA/LmZpbGU/LnBhdGNoKFxuICAgICAgICAgIEpzb25QYXRjaC5yZXBsYWNlKFwiL2pvYnMvcmVsZWFzZV9ucG0vcnVucy1vblwiLCBcInVidW50dS1sYXRlc3RcIilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiByZWxlYXNlX3B5cGkgZGVsaWJlcmF0ZWx5IHN0YXlzIG9uIHdoYXRldmVyIHJ1bm5lciB0aGUgcHJvamVjdCBpc1xuICAgIC8vIGNvbmZpZ3VyZWQgZm9yLiBVbmxpa2UgbnBtLCBQeVBJIHBsYWNlcyBubyByZXN0cmljdGlvbiBvbiB0aGUgcnVubmVyXG4gICAgLy8gZW52aXJvbm1lbnQ6IHB1YmxpYi1weXBpIG1pbnRzIGl0cyB0b2tlbiB3aXRoIGBweXRob24zIC1tIGlkIHB5cGlgIGFnYWluc3RcbiAgICAvLyBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMLCB3aGljaCBHaXRIdWIgaW5qZWN0cyBvbiBhbnkgcnVubmVyIGdpdmVuXG4gICAgLy8gYGlkLXRva2VuOiB3cml0ZWAsIGFuZCBQeVBJJ3MgdHJ1c3QgaXMgYm91bmQgdG8gdGhlIHdvcmtmbG93IHJlZiwgbm90IHRoZVxuICAgIC8vIHJ1bm5lci4gRm9yY2luZyB0aGlzIGpvYiBvbnRvIGEgaG9zdGVkIHJ1bm5lciB3b3VsZCBhbHNvIHN0cmFuZCBpdCB3aXRoIHRoZVxuICAgIC8vIDIwR0IgTk9ERV9PUFRJT05TIGhlYXAgY2VpbGluZyB0aGF0IHVzZUN1c3RvbUdpdGh1YlJ1bm5lciB3cml0ZXMgaW50b1xuICAgIC8vIC5wcm9qZW4vdGFza3MuanNvbiwgb24gYSBib3ggd2l0aCBmYXIgbGVzcyBSQU0gdGhhbiB0aGF0IC0tIGFuZCB1bmxpa2VcbiAgICAvLyBwYWNrYWdlOmpzLCBwYWNrYWdlOnB5dGhvbiBpcyBhIHJlYWwganNpaS1wYWNtYWsgdHJhbnNwaWxlLlxuXG4gICAgLy8gZW5zdXJlIHdlIGRvbid0IGZhaWwgaWYgdGhlIHJlbGVhc2UgZmlsZSBpcyBub3QgcHJlc2VudFxuICAgIGNvbnN0IGNoZWNrRXhpc3RpbmdUYWdTdGVwID0gKFxuICAgICAgdGhpcy5yZWxlYXNlIGFzIGFueVxuICAgICkuZGVmYXVsdEJyYW5jaC53b3JrZmxvdy5qb2JzLnJlbGVhc2Uuc3RlcHMuZmluZChcbiAgICAgIChzOiBvYmplY3QpID0+IFwiaWRcIiBpbiBzICYmIHMuaWQgPT09IFwiY2hlY2tfdGFnX2V4aXN0c1wiXG4gICAgKTtcbiAgICBjb25zdCBvbGRFeGlzdGluZ1RhZ1J1bjogc3RyaW5nID0gY2hlY2tFeGlzdGluZ1RhZ1N0ZXAucnVuO1xuICAgIHByZXR0eUFzc2VydEVxdWFsKFxuICAgICAgb2xkRXhpc3RpbmdUYWdSdW4uc3BsaXQoXCJcXG5cIilbMF0sXG4gICAgICBcIlRBRz0kKGNhdCBkaXN0L3JlbGVhc2V0YWcudHh0KVwiLFxuICAgICAgXCJyZWxlYXNlIHN0ZXAgY2hhbmdlZCwgcGxlYXNlIGNoZWNrIGlmIHRoZSB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgKTtcbiAgICBjaGVja0V4aXN0aW5nVGFnU3RlcC5ydW4gPSBgaWYgWyAhIC1mIGRpc3QvcmVsZWFzZXRhZy50eHQgXTsgdGhlbiAoZWNobyBcImV4aXN0cz10cnVlXCIgPj4gJEdJVEhVQl9PVVRQVVQpICYmIGV4aXQgMDsgZmlcXG4ke29sZEV4aXN0aW5nVGFnUnVufWA7XG5cbiAgICBpZiAoIWlzRGVwcmVjYXRlZCkge1xuICAgICAgY29uc3QgeyB1cGdyYWRlLCBwciB9ID0gKHRoaXMudXBncmFkZVdvcmtmbG93IGFzIGFueSkud29ya2Zsb3dzWzBdLmpvYnM7XG4gICAgICB1cGdyYWRlLnN0ZXBzLnNwbGljZSgxLCAwLCBzZXRTYWZlRGlyZWN0b3J5KTtcbiAgICAgIHByLnN0ZXBzLnNwbGljZSgxLCAwLCBzZXRTYWZlRGlyZWN0b3J5KTtcbiAgICB9XG5cbiAgICAvLyByZWxlYXNlOiBHbyDigJQgY29tcGxldGUgdGhlIGhhbmQtYnVpbHQgR28gcHVibGlzaCBqb2IuIERlcHJlY2F0ZWQgcHJvamVjdHNcbiAgICAvLyBzdGlsbCBwdWJsaXNoIEdvLCBzbyB0aGV5IHN0aWxsIG5lZWQgdGhlIHBucG0gc2V0dXA7IG9ubHkgdGhlIEFwcCB0b2tlbiBpc1xuICAgIC8vIGNvbmRpdGlvbmFsLCBzaW5jZSB0aGV5IGRvIG5vdCBwdXNoIG5ldyBtb2R1bGUgdmVyc2lvbnMuXG4gICAgbmV3IEdvUHVibGlzaEpvYlBhdGNoKHRoaXMsIHtcbiAgICAgIGFwcFRva2VuUmVwb3NpdG9yeTogaXNEZXByZWNhdGVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogcGFja2FnZUluZm8ucHVibGlzaFRvR28/Lm1vZHVsZU5hbWU/LnNwbGl0KFwiL1wiKS5wb3AoKSA/PyBcIlwiLFxuICAgIH0pO1xuXG4gICAgLy8gRml4IG1hdmVuIGlzc3VlIChodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9wdWJsaWIvcHVsbC83NzcpXG4gICAgLy9cbiAgICAvLyBUaGUgcHVibGlzaCBqb2JzIGRvbid0IGV4aXN0IHVudGlsIFJlbGVhc2Ugc3ludGhlc2l6ZXMsIGFuZCB0aGUgc3RlcCdzIGluZGV4XG4gICAgLy8gd2l0aGluIHJlbGVhc2VfbWF2ZW4gc2hpZnRzIHdoZW5ldmVyIHRoZSBqb2IgZ2FpbnMgYSBzdGVwIC0tIHN3aXRjaGluZyB0aGVcbiAgICAvLyBwYWNrYWdlIG1hbmFnZXIgdG8gcG5wbSBpbnNlcnRzIGEgXCJTZXR1cCBwbnBtXCIgc3RlcCwgd2hpY2ggc2lsZW50bHkgbW92ZWQgdGhlXG4gICAgLy8gb2xkIGhhcmRjb2RlZCAvc3RlcHMvMTAvIG9udG8gYSBzdGVwIHdpdGggbm8gZW52IGF0IGFsbC4gUmVzb2x2ZSB0aGUgc3RlcCBieVxuICAgIC8vIHdoYXQgaXQgcnVucywgaW4gcHJlU3ludGhlc2l6ZSwgc28gbmVpdGhlciBwcm9ibGVtIGNhbiByZWN1ci5cbiAgICBuZXcgTWF2ZW5PcHRzUGF0Y2godGhpcyk7XG5cbiAgICB0aGlzLnBpbkdpdGh1YkFjdGlvblZlcnNpb25zKGdpdGh1YkFjdGlvblBpbm5lZFZlcnNpb25zKTtcblxuICAgIG5ldyBDZGt0ZkNvbmZpZyh0aGlzLCB7XG4gICAgICB0ZXJyYWZvcm1Qcm92aWRlcixcbiAgICAgIHByb3ZpZGVyTmFtZSxcbiAgICAgIGZxcHJvdmlkZXJOYW1lLFxuICAgICAgcHJvdmlkZXJWZXJzaW9uLFxuICAgICAgY2RrdG5WZXJzaW9uLFxuICAgICAgY29uc3RydWN0c1ZlcnNpb24sXG4gICAgICBqc2lpVmVyc2lvbixcbiAgICAgIHR5cGVzY3JpcHRWZXJzaW9uLFxuICAgICAgcGFja2FnZUluZm8sXG4gICAgICBnaXRodWJOYW1lc3BhY2UsXG4gICAgICBkZXByZWNhdGlvbkRhdGUsXG4gICAgICBpc0RlcHJlY2F0ZWQ6ICEhaXNEZXByZWNhdGVkLFxuICAgIH0pO1xuICAgIG5ldyBDdXN0b21pemVkTGljZW5zZSh0aGlzLCBvcHRpb25zLmNyZWF0aW9uWWVhciwgb3B0aW9ucy5saWNlbnNlZSk7XG4gICAgbmV3IEdpdGh1Yklzc3Vlcyh0aGlzLCB7IHByb3ZpZGVyTmFtZSB9KTtcbiAgICBuZXcgQXV0b0FwcHJvdmUodGhpcyk7XG4gICAgbmV3IEF1dG9DbG9zZUNvbW11bml0eUlzc3Vlcyh0aGlzLCB7IHByb3ZpZGVyTmFtZSB9KTtcbiAgICBuZXcgQXV0b21lcmdlKHRoaXMpO1xuICAgIG5ldyBMb2NrSXNzdWVzKHRoaXMpO1xuXG4gICAgaWYgKCFpc0RlcHJlY2F0ZWQpIHtcbiAgICAgIGNvbnN0IHVwZ3JhZGVTY3JpcHQgPSBuZXcgQ2hlY2tGb3JVcGdyYWRlc1NjcmlwdEZpbGUodGhpcywge1xuICAgICAgICBwcm92aWRlclZlcnNpb24sXG4gICAgICAgIGZxcHJvdmlkZXJOYW1lLFxuICAgICAgfSk7XG4gICAgICBuZXcgUHJvdmlkZXJVcGdyYWRlKHRoaXMsIHtcbiAgICAgICAgY2hlY2tGb3JVcGdyYWRlc1NjcmlwdFBhdGg6IHVwZ3JhZGVTY3JpcHQucGF0aCxcbiAgICAgICAgd29ya2Zsb3dSdW5zT24sXG4gICAgICAgIG5vZGVIZWFwU2l6ZTogbWF4T2xkU3BhY2VTaXplLFxuICAgICAgfSk7XG4gICAgICBuZXcgQWxlcnRPcGVuUHJzKHRoaXMsIHtcbiAgICAgICAgc2xhY2tXZWJob29rVXJsOiBcIiR7eyBzZWNyZXRzLkFMRVJUX1BSU19TTEFDS19XRUJIT09LX1VSTCB9fVwiLFxuICAgICAgICByZXBvc2l0b3J5LFxuICAgICAgfSk7XG4gICAgICBuZXcgRGVwZW5kYWJvdCh0aGlzKTtcbiAgICB9XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgXCIuZ2l0aHViL0NPREVPV05FUlNcIiwge1xuICAgICAgbGluZXM6IFtcbiAgICAgICAgXCIjIFRoZXNlIG93bmVycyB3aWxsIGJlIHRoZSBkZWZhdWx0IG93bmVycyBmb3IgZXZlcnl0aGluZyBpbiBcIixcbiAgICAgICAgXCIjIHRoZSByZXBvLiBVbmxlc3MgYSBsYXRlciBtYXRjaCB0YWtlcyBwcmVjZWRlbmNlLCBcIixcbiAgICAgICAgXCIjIHRoZXkgd2lsbCBiZSByZXF1ZXN0ZWQgZm9yIHJldmlldyB3aGVuIHNvbWVvbmUgb3BlbnMgYSBcIixcbiAgICAgICAgXCIjIHB1bGwgcmVxdWVzdC5cIixcbiAgICAgICAgXCIqICAgICAgIEBjZGt0bi1pby90ZWFtLWNkay10ZXJyYWluXCIsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgaWYgKCFpc0RlcHJlY2F0ZWQpIHtcbiAgICAgIG5ldyBTaG91bGRSZWxlYXNlU2NyaXB0RmlsZSh0aGlzLCB7fSk7XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VUYXNrID0gdGhpcy50YXNrcy50cnlGaW5kKFwicmVsZWFzZVwiKSE7XG4gICAgICB0aGlzLnJlbW92ZVRhc2soXCJyZWxlYXNlXCIpO1xuICAgICAgdGhpcy5hZGRUYXNrKFwicmVsZWFzZVwiLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiByZWxlYXNlVGFzay5kZXNjcmlwdGlvbixcbiAgICAgICAgc3RlcHM6IHJlbGVhc2VUYXNrLnN0ZXBzLFxuICAgICAgICBlbnY6IChyZWxlYXNlVGFzayBhcyBhbnkpLl9lbnYsXG4gICAgICAgIGNvbmRpdGlvbjogXCJub2RlIC4vc2NyaXB0cy9zaG91bGQtcmVsZWFzZS5qc1wiLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZFRhc2soXCJ1bmNvbmRpdGlvbmFsLXJlbGVhc2VcIiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogcmVsZWFzZVRhc2suZGVzY3JpcHRpb24sXG4gICAgICAgIHN0ZXBzOiByZWxlYXNlVGFzay5zdGVwcyxcbiAgICAgICAgZW52OiAocmVsZWFzZVRhc2sgYXMgYW55KS5fZW52LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VKb2JTdGVwczogYW55W10gPSAoXG4gICAgICAgIHRoaXMuZ2l0aHViPy50cnlGaW5kV29ya2Zsb3coXCJyZWxlYXNlXCIpIGFzIGFueVxuICAgICAgKS5qb2JzLnJlbGVhc2Uuc3RlcHM7XG4gICAgICBjb25zdCBnaXRSZW1vdGVKb2IgPSByZWxlYXNlSm9iU3RlcHMuZmluZCgoaXQpID0+IGl0LmlkID09PSBcImdpdF9yZW1vdGVcIik7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIGdpdFJlbW90ZUpvYixcbiAgICAgICAgXCJnaXRfcmVtb3RlIHN0ZXAgbm90IGZvdW5kIGluIHJlbGVhc2Ugd29ya2Zsb3csIHBsZWFzZSBjaGVjayBpZiB0aGUgd29ya2Fyb3VuZCBzdGlsbCB3b3JrcyFcIlxuICAgICAgKTtcbiAgICAgIC8vIFdlIHdyYXAgd2hhdGV2ZXIgcHJvamVuIGdlbmVyYXRlZCBpbiBhIHNob3VsZC1yZWxlYXNlIGd1YXJkIHJhdGhlciB0aGFuXG4gICAgICAvLyByZXdyaXRpbmcgaXQsIHNvIGFzc2VydCBvbmx5IHRoZSB0d28gcHJvcGVydGllcyB0aGUgd3JhcHBpbmcgYWN0dWFsbHlcbiAgICAgIC8vIGRlcGVuZHMgb24uIFBpbm5pbmcgdG8gcHJvamVuJ3MgZXhhY3Qgd29yZGluZyBicm9rZSB0aGUgd2hvbGUgZmxlZXRcbiAgICAgIC8vIG9uY2UgYWxyZWFkeTogcHJvamVuIDAuMTAxIGNoYW5nZWQgYCR7eyBnaXRodWIucmVmIH19YCB0byBgXCIkR0lUSFVCX1JFRlwiYFxuICAgICAgLy8gYW5kIGV2ZXJ5IHByb3ZpZGVyIHJlcG8ncyB1cGdyYWRlLW1haW4gc3RhcnRlZCBmYWlsaW5nIGF0IHN5bnRoLlxuICAgICAgYXNzZXJ0KFxuICAgICAgICB0eXBlb2YgZ2l0UmVtb3RlSm9iLnJ1biA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgIGdpdFJlbW90ZUpvYi5ydW4uaW5jbHVkZXMoXCJnaXQgbHMtcmVtb3RlXCIpICYmXG4gICAgICAgICAgZ2l0UmVtb3RlSm9iLnJ1bi5pbmNsdWRlcyhcImxhdGVzdF9jb21taXQ9XCIpLFxuICAgICAgICBgZ2l0X3JlbW90ZSBzdGVwIG5vIGxvbmdlciBzZXRzIGxhdGVzdF9jb21taXQgZnJvbSBnaXQgbHMtcmVtb3RlLCBwbGVhc2UgY2hlY2sgaWYgdGhlIHdvcmthcm91bmQgc3RpbGwgd29ya3MhIEdvdDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBnaXRSZW1vdGVKb2IucnVuXG4gICAgICAgICl9YFxuICAgICAgKTtcbiAgICAgIC8vIEZvbGQgKmV2ZXJ5KiBsaW5lOiBwcm9qZW4gZW1pdHMgdHdvIHRvZGF5LCBidXQgU3RyaW5nI3JlcGxhY2Ugd2l0aCBhXG4gICAgICAvLyBzdHJpbmcgcGF0dGVybiBvbmx5IGZvbGRzIHRoZSBmaXJzdCBpZiB0aGF0IGV2ZXIgZ3Jvd3MuXG4gICAgICBjb25zdCBwcmV2aW91c0NvbW1hbmQgPSBnaXRSZW1vdGVKb2IucnVuLnNwbGl0KFwiXFxuXCIpLmpvaW4oXCIgJiYgXCIpO1xuXG4gICAgICBjb25zdCBjYW5jZWxDb21tYW5kID1cbiAgICAgICAgJ2VjaG8gXCJsYXRlc3RfY29tbWl0PXJlbGVhc2VfY2FuY2VsbGVkXCIgPj4gJEdJVEhVQl9PVVRQVVQnOyAvLyB0aGlzIGNhbmNlbHMgdGhlIHJlbGVhc2UgdmlhIGEgbm9uLW1hdGNoaW5nIFNIQTtcbiAgICAgIGdpdFJlbW90ZUpvYi5ydW4gPSBgbm9kZSAuL3NjcmlwdHMvc2hvdWxkLXJlbGVhc2UuanMgJiYgKCR7cHJldmlvdXNDb21tYW5kfSkgfHwgJHtjYW5jZWxDb21tYW5kfWA7XG4gICAgICBnaXRSZW1vdGVKb2IubmFtZSArPVxuICAgICAgICBcIiBvciBjYW5jZWwgdmlhIGZha2luZyBhIFNIQSBpZiByZWxlYXNlIHdhcyBjYW5jZWxsZWRcIjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFsZVdvcmtmbG93ID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZShcIi5naXRodWIvd29ya2Zsb3dzL3N0YWxlLnltbFwiKTtcbiAgICBzdGFsZVdvcmtmbG93Py5hZGRPdmVycmlkZShcIm9uLnNjaGVkdWxlXCIsIFtcbiAgICAgIHtcbiAgICAgICAgY3JvbjogZ2VuZXJhdGVSYW5kb21Dcm9uKHsgcHJvamVjdDogdGhpcywgbWF4SG91cjogNCwgaG91ck9mZnNldDogMSB9KSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBjb25zdCB1cGdyYWRlV29ya2Zsb3cgPSB0aGlzLnRyeUZpbmRPYmplY3RGaWxlKFxuICAgICAgXCIuZ2l0aHViL3dvcmtmbG93cy91cGdyYWRlLW1haW4ueW1sXCJcbiAgICApO1xuICAgIHVwZ3JhZGVXb3JrZmxvdz8uYWRkT3ZlcnJpZGUoXCJvbi5zY2hlZHVsZVwiLCBbXG4gICAgICB7XG4gICAgICAgIGNyb246IGdlbmVyYXRlUmFuZG9tQ3Jvbih7XG4gICAgICAgICAgcHJvamVjdDogdGhpcyxcbiAgICAgICAgICBtYXhIb3VyOiAwLFxuICAgICAgICAgIGhvdXJPZmZzZXQ6IDEsXG4gICAgICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLldlZWtseSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgLy8gU3VibW9kdWxlIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvblxuICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoXCJBUEkubWRcIik7IC8vIGlnbm9yZSB0aGUgb2xkIGZpbGUsIHdlIG5vdyBnZW5lcmF0ZSBpdCBpbiB0aGUgZG9jcyBmb2xkZXJcbiAgICB0aGlzLmFkZERldkRlcHMoXCJqc2lpLWRvY2dlbkBeMTAuMi4zXCIpO1xuICAgIGlmIChqc2lpVmVyc2lvbikge1xuICAgICAgLy8gTk9URTogdGhlIGJlbG93IGlzIG1ha2luZyBhIGJyb2FkIGFzc3VtcHRpb24gdGhhdCB5b3UncmUgcGFzc2luZyBhIHJhbmdlIGxpa2UgXCJ+NS4zLjBcIiB0byBqc2lpVmVyc2lvblxuICAgICAgLy8gSWYgeW91IHVzZSB0aGF0IGZpZWxkIHRvIHBhc3MgYSB2ZXJ5IHNwZWNpZmljIHZlcnNpb24gKGUuZy4gXCI1LjMuMTFcIikgdGhlbiB0aGlzIG1pZ2h0IGJyZWFrXG4gICAgICB0aGlzLmFkZERldkRlcHMoYGpzaWktcm9zZXR0YUAke2pzaWlWZXJzaW9ufWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZERldkRlcHMoYGpzaWktcm9zZXR0YWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRvY2dlbiA9IHRoaXMuYWRkVGFzayhcImRvY2dlblwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJHZW5lcmF0ZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgcHJvamVjdFwiLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6IFtcbiAgICAgICAgICAgIFwicm0gLXJmIGRvY3NcIixcbiAgICAgICAgICAgIFwicm0gLWYgQVBJLm1kXCIsXG4gICAgICAgICAgICBcIm1rZGlyIGRvY3NcIixcbiAgICAgICAgICAgIFwianNpaS1kb2NnZW4gLS1zcGxpdC1ieS1zdWJtb2R1bGUgLWwgdHlwZXNjcmlwdCAtbCBweXRob24gLWwgamF2YSAtbCBjc2hhcnAgLWwgZ29cIixcbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5pY2Ugd2F5IHRvIHRlbGwganNpaS1kb2NnZW4gdG8gZ2VuZXJhdGUgZG9jcyBpbnRvIGEgZm9sZGVyIHNvIEkgd2VudCB0aGlzIHJvdXRlXG4gICAgICAgICAgICBcIm12ICouKi5tZCBkb2NzXCIsXG4gICAgICAgICAgICAvLyBTb21lIHBhcnQgb2YgdGhlIGRvY3VtZW50YXRpb24gYXJlIHRvbyBsb25nLCB3ZSBuZWVkIHRvIHRydW5jYXRlIHRoZW0gdG8gfjEwTUJcbiAgICAgICAgICAgIFwiY2QgZG9jc1wiLFxuICAgICAgICAgICAgXCJscyAuLyB8IHhhcmdzIHNlZCAtaSAnMTUwMDAwLCQgZCcgJDFcIixcbiAgICAgICAgICBdLmpvaW4oXCIgJiYgXCIpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB0aGlzLnBvc3RDb21waWxlVGFzay5zcGF3bihkb2NnZW4pO1xuICAgIHRoaXMuZ2l0aWdub3JlLmluY2x1ZGUoYC9kb2NzLyoubWRgKTtcbiAgICB0aGlzLmFubm90YXRlR2VuZXJhdGVkKGAvZG9jcy8qLm1kYCk7XG5cbiAgICAvLyBTZXR0aW5nIHRoZSB2ZXJzaW9uIGluIHBhY2thZ2UuanNvbiBzbyB0aGUgZ29sYW5nIGRvY3MgaGF2ZSB0aGUgY29ycmVjdCB2ZXJzaW9uXG4gICAgY29uc3QgdW5jb25kaXRpb25hbEJ1bXAgPSB0aGlzLmFkZFRhc2soXCJ1bmNvbmRpdGlvbmFsLWJ1bXBcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiU2V0IHRoZSB2ZXJzaW9uIGluIHBhY2thZ2UuanNvbiB0byB0aGUgY3VycmVudCB2ZXJzaW9uXCIsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJDbGVhciB0aGUgY2hhbmdlbG9nIHNvIHRoYXQgaXQgZG9lc24ndCBnZXQgcHVibGlzaGVkIHR3aWNlXCIsXG4gICAgICAgICAgZXhlYzogXCJybSAtZiAkQ0hBTkdFTE9HXCIsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHByb2plbiAwLjEwMSByZW1vdmVkIHRoZSBjb21iaW5lZCBgcmVsZWFzZS9idW1wLXZlcnNpb25gIGJ1aWx0aW4gYW5kIHNwbGl0XG4gICAgICAgIC8vIGl0IGludG8gcmVzb2x2ZS1sYXRlc3QtdGFnIC0+IHN1Z2dlc3QtdmVyc2lvbi1idW1wIC0+IGFwcGx5LXZlcnNpb24tYnVtcCxcbiAgICAgICAgLy8gaGFuZGluZyByZXN1bHRzIGZvcndhcmQgdmlhIHN0ZXAgYG91dHB1dEVudmAgY2FwdHVyZXMuIGFwcGx5IG9uIGl0cyBvd25cbiAgICAgICAgLy8gdGhyb3dzIFwibmVpdGhlciBCVU1QX1RZUEUgbm9yIFNVR0dFU1RFRF9CVU1QIGlzIHNldFwiLCBzbyBhbGwgdGhyZWUgYXJlXG4gICAgICAgIC8vIG5lZWRlZC4gTWlycm9ycyBwcm9qZW4ncyBvd24gYnVtcCB0YXNrIChsaWIvdmVyc2lvbi5qczoxMjgtMTQ0KS5cbiAgICAgICAgeyBidWlsdGluOiBcInJlbGVhc2UvcmVzb2x2ZS1sYXRlc3QtdGFnXCIsIG91dHB1dEVudjogXCJMQVRFU1RfVEFHXCIgfSxcbiAgICAgICAgLy8gc3VnZ2VzdC12ZXJzaW9uLWJ1bXAgY291bnRzIHJlbGVhc2FibGUgY29tbWl0cyAqb25seSogZnJvbVxuICAgICAgICAvLyAkUkVMRUFTQUJMRV9DT01NSVRTLiBXaXRob3V0IHRoaXMgc3Bhd24gdGhlIGNvdW50IGlzIDAsIHRoZSBzdWdnZXN0ZWRcbiAgICAgICAgLy8gYnVtcCBpcyBcIm5vbmVcIiwgYW5kIGFwcGx5LXZlcnNpb24tYnVtcCByZXdyaXRlcyBkaXN0L3JlbGVhc2V0YWcudHh0XG4gICAgICAgIC8vIHdpdGggdGhlICpwcmV2aW91cyogdGFnIC0gd2hpY2ggbWFrZXMgdGhlIHJlbGVhc2Ugd29ya2Zsb3cgdGhpbmsgdGhlXG4gICAgICAgIC8vIHZlcnNpb24gaXMgYWxyZWFkeSB0YWdnZWQgYW5kIHNraXAgZXZlcnkgcHVibGlzaCBqb2IuXG4gICAgICAgIHtcbiAgICAgICAgICBzcGF3bjogXCJidW1wOnJlbGVhc2FibGUtY29tbWl0c1wiLFxuICAgICAgICAgIG91dHB1dEVudjogXCJSRUxFQVNBQkxFX0NPTU1JVFNcIixcbiAgICAgICAgICAvLyBPbiBhIGZpcnN0IHJlbGVhc2UgdGhlIHJlc29sdmVkIHRhZyBpcyBzeW50aGV0aWMgYW5kIGRvZXMgbm90IGV4aXN0LFxuICAgICAgICAgIC8vIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlmZiBhZ2FpbnN0LlxuICAgICAgICAgIGNvbmRpdGlvbjogJ2dpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCBcInJlZnMvdGFncy8kTEFURVNUX1RBR1wiJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJ1aWx0aW46IFwicmVsZWFzZS9zdWdnZXN0LXZlcnNpb24tYnVtcFwiLFxuICAgICAgICAgIG91dHB1dEVudjogXCJTVUdHRVNURURfQlVNUFwiLFxuICAgICAgICB9LFxuICAgICAgICB7IGJ1aWx0aW46IFwicmVsZWFzZS9hcHBseS12ZXJzaW9uLWJ1bXBcIiB9LFxuICAgICAgXSxcbiAgICAgIGVudjoge1xuICAgICAgICBPVVRGSUxFOiBcInBhY2thZ2UuanNvblwiLFxuICAgICAgICBDSEFOR0VMT0c6IFwiZGlzdC9jaGFuZ2Vsb2cubWRcIixcbiAgICAgICAgQlVNUEZJTEU6IFwiZGlzdC92ZXJzaW9uLnR4dFwiLFxuICAgICAgICBSRUxFQVNFVEFHOiBcImRpc3QvcmVsZWFzZXRhZy50eHRcIixcbiAgICAgICAgUkVMRUFTRV9UQUdfUFJFRklYOiBcIlwiLFxuICAgICAgICBNSU5fTUFKT1I6IFN0cmluZyhNSU5fTUFKT1JfVkVSU0lPTiksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucHJlQ29tcGlsZVRhc2suc3Bhd24odW5jb25kaXRpb25hbEJ1bXApO1xuICAgIC8vIFRvIGJ1bXAgY29ycmVjdGx5IHdlIG5lZWQgdG8gaGF2ZSB0aGUgY29tcGxldGVseSBjbG9uZWQgcmVwb1xuICAgICh0aGlzLmJ1aWxkV29ya2Zsb3cgYXMgYW55KS53b3JrZmxvdy5maWxlLmFkZE92ZXJyaWRlKFxuICAgICAgXCJqb2JzLmJ1aWxkLnN0ZXBzLjAud2l0aC5mZXRjaC1kZXB0aFwiLFxuICAgICAgMFxuICAgICk7XG4gICAgLy8gVW5kbyB0aGUgY2hhbmdlcyBhZnRlciBjb21waWxhdGlvblxuICAgIHRoaXMuYnVpbGRXb3JrZmxvdz8uYWRkUG9zdEJ1aWxkU3RlcHMoe1xuICAgICAgbmFtZTogXCJSZXZlcnQgcGFja2FnZS5qc29uIHZlcnNpb24gYnVtcFwiLFxuICAgICAgcnVuOiBcImdpdCBjaGVja291dCBwYWNrYWdlLmpzb25cIixcbiAgICB9KTtcblxuICAgIG5ldyBDb3B5cmlnaHRIZWFkZXJzKHRoaXMpO1xuICAgIG5ldyBEZXByZWNhdGVQYWNrYWdlcyh0aGlzLCB7XG4gICAgICBwcm92aWRlck5hbWUsXG4gICAgICBwYWNrYWdlSW5mbyxcbiAgICAgIGlzRGVwcmVjYXRlZDogISFpc0RlcHJlY2F0ZWQsXG4gICAgfSk7XG4gICAgaWYgKCFpc0RlcHJlY2F0ZWQpIHtcbiAgICAgIC8vIEZvbGRzIHRoZSBtYW51YWwgZm9yY2UtcmVsZWFzZSBiZWhhdmlvdXIgaW50byByZWxlYXNlLnltbCBiZWhpbmQgYVxuICAgICAgLy8gd29ya2Zsb3dfZGlzcGF0Y2ggdHJpZ2dlciwgc28gbnBtL1B5UEkgT0lEQyB0cnVzdHMgYSBzaW5nbGUgd29ya2Zsb3cuXG4gICAgICBuZXcgRm9yY2VSZWxlYXNlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGluR2l0aHViQWN0aW9uVmVyc2lvbnMocGlubmVkVmVyc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgICAvLyBVc2UgcGlubmVkIHZlcnNpb25zIG9mIGdpdGh1YiBhY3Rpb25zXG4gICAgT2JqZWN0LmVudHJpZXMocGlubmVkVmVyc2lvbnMpLmZvckVhY2goKFtuYW1lLCBzaGFdKSA9PiB7XG4gICAgICB0aGlzLmdpdGh1Yj8uYWN0aW9ucy5zZXQobmFtZSwgYCR7bmFtZX1AJHtzaGF9YCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXRzIE1BVkVOX09QVFMgb24gdGhlIG1hdmVuIHB1Ymxpc2ggc3RlcCBhbmQgZHJvcHMgdGhlIHVudXNlZFxuICogTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lELCByZXNvbHZpbmcgdGhlIHN0ZXAgYnkgdGhlIGNvbW1hbmQgaXQgcnVucy5cbiAqXG4gKiBSdW5zIGluIHByZVN5bnRoZXNpemUgYmVjYXVzZSB0aGUgcHVibGlzaCBqb2JzIGFyZSBhZGRlZCBieSBSZWxlYXNlIGR1cmluZ1xuICogc3ludGhlc2lzLCBzbyB0aGUgam9iIGRvZXMgbm90IGV4aXN0IHlldCBhdCBjb25zdHJ1Y3Rpb24gdGltZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGtsYWJzL3B1YmxpYi9wdWxsLzc3N1xuICovXG5jbGFzcyBNYXZlbk9wdHNQYXRjaCBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gZ2l0aHViLkdpdEh1Yi5vZih0aGlzLnByb2plY3QpPy50cnlGaW5kV29ya2Zsb3coXCJyZWxlYXNlXCIpO1xuICAgIGNvbnN0IHN0ZXBzOiBKb2JTdGVwW10gfCB1bmRlZmluZWQgPSAod29ya2Zsb3cgYXMgYW55KT8uam9icz8ucmVsZWFzZV9tYXZlblxuICAgICAgPy5zdGVwcztcbiAgICBhc3NlcnQoXG4gICAgICBzdGVwcyxcbiAgICAgIFwicmVsZWFzZV9tYXZlbiBqb2Igbm90IGZvdW5kLCBwbGVhc2UgY2hlY2sgaWYgdGhlIE1BVkVOX09QVFMgd29ya2Fyb3VuZCBzdGlsbCB3b3JrcyFcIlxuICAgICk7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzLmZpbmQoKHMpID0+IHMucnVuPy5pbmNsdWRlcyhcInB1YmxpYi1tYXZlblwiKSk7XG4gICAgYXNzZXJ0KFxuICAgICAgc3RlcD8uZW52LFxuICAgICAgXCJubyBwdWJsaWItbWF2ZW4gc3RlcCB3aXRoIGFuIGVudiBibG9jayBpbiByZWxlYXNlX21hdmVuLCBwbGVhc2UgY2hlY2sgaWYgdGhlIE1BVkVOX09QVFMgd29ya2Fyb3VuZCBzdGlsbCB3b3JrcyFcIlxuICAgICk7XG4gICAgLy8gTXV0YXRlIHRoZSBzdGVwIGRpcmVjdGx5IHJhdGhlciB0aGFuIEpzb25QYXRjaC1pbmcgdGhlIHJlbmRlcmVkIGZpbGU6IHRoZVxuICAgIC8vIHB1Ymxpc2hlciBwcmVwZW5kcyB0b29sLXNldHVwIHN0ZXBzIGF0IHJlbmRlciB0aW1lLCBzbyBpbi1tZW1vcnkgaW5kaWNlcyBkb1xuICAgIC8vIG5vdCBtYXRjaCByZW5kZXJlZCBvbmVzLCBhbmQgYSBKU09OIFBvaW50ZXIgd291bGQgaGF2ZSB0byBlbmNvZGUgdGhhdCBvZmZzZXQuXG4gICAgLy8gU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzcwMTUzOTYyL25leHVzLXN0YWdpbmctbWF2ZW4tcGx1Z2luLW1hdmVuLWRlcGxveS1mYWlsZWQtYW4tYXBpLWluY29tcGF0aWJpbGl0eS13YXMtZW5jb1xuICAgIHN0ZXAuZW52Lk1BVkVOX09QVFMgPVxuICAgICAgXCItLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS51dGlsPUFMTC1VTk5BTUVEIC0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLmxhbmcucmVmbGVjdD1BTEwtVU5OQU1FRCAtLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS50ZXh0PUFMTC1VTk5BTUVEIC0tYWRkLW9wZW5zPWphdmEuZGVza3RvcC9qYXZhLmF3dC5mb250PUFMTC1VTk5BTUVEXCI7XG4gICAgLy8gVGhpcyBpcyBubyBsb25nZXIgdXNlZC5cbiAgICBkZWxldGUgc3RlcC5lbnYuTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEO1xuICB9XG59XG5cbi8qKlxuICogRml4ZXMgdXAgdGhlIGhhbmQtYnVpbHQgR28gcHVibGlzaCBqb2IsIHdoaWNoIGBwdWJsaXNoVG9Hby5wcmVQdWJsaXNoU3RlcHNgXG4gKiBoYXMgdG8gZGVjbGFyZSBiZWZvcmUgYHN1cGVyKClgIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJ1aWxkIGNvbXBsZXRlbHk6XG4gKlxuICogLSBpbnNlcnRzIHRoZSBcIlNldHVwIHBucG1cIiBzdGVwIHRoYXQgcHJvamVuIGluamVjdHMgaW50byB0aGUgd29ya2Zsb3dzIGl0XG4gKiAgIGdlbmVyYXRlcyBpdHNlbGYgYnV0IG5vdCBpbnRvIGhhbmQtYnVpbHQgb25lcywgYXQgdGhlIHByb2plY3QncyBvd24gcG5wbVxuICogICB2ZXJzaW9uIHJhdGhlciB0aGFuIGEgY29weSBvZiBpdC4gQXBwbGllcyB0byBkZXByZWNhdGVkIHByb2plY3RzIHRvbzogdGhleVxuICogICBzdGlsbCBydW4gdGhpcyBqb2IsIHNvIHRoZXkgc3RpbGwgbmVlZCBwbnBtIG9uIFBBVEg7XG4gKiAtIHB1c2hlcyB0aGUgbW9kdWxlIHdpdGggYSBHaXRIdWIgQXBwIGluc3RhbGxhdGlvbiB0b2tlbiBpbnN0ZWFkIG9mIHRoZVxuICogICBkZWZhdWx0IGBHT19HSVRIVUJfVE9LRU5gIHNlY3JldCwgd2hlbiBgYXBwVG9rZW5SZXBvc2l0b3J5YCBpcyBnaXZlbi5cbiAqXG4gKiBSdW5zIGluIHByZVN5bnRoZXNpemUgZm9yIHR3byByZWFzb25zOiB0aGUgcHVibGlzaCBqb2JzIGFyZSBhZGRlZCBieSBSZWxlYXNlXG4gKiBkdXJpbmcgc3ludGhlc2lzLCBzbyB0aGUgam9iIGRvZXMgbm90IGV4aXN0IGF0IGNvbnN0cnVjdGlvbiB0aW1lLCBhbmRcbiAqIGB0aGlzLnBhY2thZ2UucG5wbVZlcnNpb25gIGlzIG9ubHkgcmVhZGFibGUgYWZ0ZXIgYHN1cGVyKClgLlxuICpcbiAqIEJvdGggc3RlcHMgYXJlIHNwbGljZWQgaW4gaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBzdGVwIHRoYXQgbmVlZHMgdGhlbSxcbiAqIHJlc29sdmVkIGJ5IHdoYXQgdGhhdCBzdGVwIHJ1bnMuIE5ldmVyIGJ5IGluZGV4OiByZWxlYXNlX2dvbGFuZydzIGluZGljZXNcbiAqIHNoaWZ0IHdoZW5ldmVyIHRoZSBqb2IgZ2FpbnMgYSBzdGVwIC0tIGFkZGluZyBcIlNldHVwIHBucG1cIiBpcyBleGFjdGx5IHdoYXRcbiAqIG1vdmVkIHRoZSBvbGQgaGFyZGNvZGVkIC9zdGVwcy8xNy9lbnYgb250byBhIHN0ZXAgd2l0aCBubyBlbnYgYXQgYWxsLlxuICovXG5jbGFzcyBHb1B1Ymxpc2hKb2JQYXRjaCBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwVG9rZW5SZXBvc2l0b3J5Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm9kZVByb2plY3Q6IGNkay5Kc2lpUHJvamVjdCxcbiAgICBvcHRpb25zOiB7IGFwcFRva2VuUmVwb3NpdG9yeT86IHN0cmluZyB9XG4gICkge1xuICAgIHN1cGVyKG5vZGVQcm9qZWN0KTtcbiAgICB0aGlzLmFwcFRva2VuUmVwb3NpdG9yeSA9IG9wdGlvbnMuYXBwVG9rZW5SZXBvc2l0b3J5O1xuICB9XG5cbiAgcHVibGljIHByZVN5bnRoZXNpemUoKSB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSBnaXRodWIuR2l0SHViLm9mKHRoaXMucHJvamVjdCk/LnRyeUZpbmRXb3JrZmxvdyhcInJlbGVhc2VcIik7XG4gICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSB8IHVuZGVmaW5lZCA9ICh3b3JrZmxvdyBhcyBhbnkpPy5qb2JzPy5yZWxlYXNlX2dvbGFuZ1xuICAgICAgPy5zdGVwcztcbiAgICBhc3NlcnQoXG4gICAgICBzdGVwcyxcbiAgICAgIFwicmVsZWFzZV9nb2xhbmcgam9iIG5vdCBmb3VuZCwgcGxlYXNlIGNoZWNrIGlmIHRoZSBHbyBwdWJsaXNoIHdvcmthcm91bmRzIHN0aWxsIHdvcmshXCJcbiAgICApO1xuXG4gICAgLy8gV2l0aG91dCBwbnBtIG9uIFBBVEggdGhlIGluc3RhbGwgYmVsb3cgZXhpdHMgMTI3LiBCZWZvcmUgdGhlIHBucG1cbiAgICAvLyBtaWdyYXRpb24gcmVhY2hlZCB0aGlzIGpvYiBpdCByYW4gYHlhcm4gaW5zdGFsbGAsIHdoaWNoIGZhaWxlZCBvdXRyaWdodFxuICAgIC8vIGFnYWluc3QgYSBwYWNrYWdlLmpzb24gZGVjbGFyaW5nIGBwYWNrYWdlTWFuYWdlcjogXCJwbnBtQC4uLlwiYC5cbiAgICBjb25zdCBpbnN0YWxsSW5kZXggPSBzdGVwcy5maW5kSW5kZXgoKHMpID0+XG4gICAgICBzLnJ1bj8uaW5jbHVkZXMoXCJwbnBtIGluc3RhbGxcIilcbiAgICApO1xuICAgIGFzc2VydChcbiAgICAgIGluc3RhbGxJbmRleCA+PSAwLFxuICAgICAgXCJubyBwbnBtIGluc3RhbGwgc3RlcCBpbiByZWxlYXNlX2dvbGFuZywgcGxlYXNlIGNoZWNrIGlmIHRoZSBTZXR1cCBwbnBtIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICApO1xuICAgIHN0ZXBzLnNwbGljZShpbnN0YWxsSW5kZXgsIDAsIHtcbiAgICAgIG5hbWU6IFwiU2V0dXAgcG5wbVwiLFxuICAgICAgdXNlczogXCJwbnBtL2FjdGlvbi1zZXR1cFwiLFxuICAgICAgd2l0aDogeyB2ZXJzaW9uOiB0aGlzLm5vZGVQcm9qZWN0LnBhY2thZ2UucG5wbVZlcnNpb24gfSxcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5hcHBUb2tlblJlcG9zaXRvcnkpIHJldHVybjtcblxuICAgIGNvbnN0IGluZGV4ID0gc3RlcHMuZmluZEluZGV4KChzKSA9PiBzLnJ1bj8uaW5jbHVkZXMoXCJwdWJsaWItZ29sYW5nXCIpKTtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaW5kZXhdO1xuICAgIGFzc2VydChcbiAgICAgIHN0ZXA/LmVudixcbiAgICAgIFwibm8gcHVibGliLWdvbGFuZyBzdGVwIHdpdGggYW4gZW52IGJsb2NrIGluIHJlbGVhc2VfZ29sYW5nLCBwbGVhc2UgY2hlY2sgaWYgdGhlIEdvIHB1Ymxpc2ggdG9rZW4gd29ya2Fyb3VuZCBzdGlsbCB3b3JrcyFcIlxuICAgICk7XG5cbiAgICBjb25zdCBnb1B1Ymxpc2hUb2tlbiA9IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tQXBwKHtcbiAgICAgIGFwcElkU2VjcmV0OiBcIlBST0pFTl9BUFBfSURcIixcbiAgICAgIHByaXZhdGVLZXlTZWNyZXQ6IFwiUFJPSkVOX0FQUF9QUklWQVRFX0tFWVwiLFxuICAgICAgb3duZXI6IFwiJHt7IGdpdGh1Yi5yZXBvc2l0b3J5X293bmVyIH19XCIsXG4gICAgICByZXBvc2l0b3JpZXM6IFt0aGlzLmFwcFRva2VuUmVwb3NpdG9yeV0sXG4gICAgICBwZXJtaXNzaW9uczogeyBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5BcHBQZXJtaXNzaW9uLldSSVRFIH0sXG4gICAgfSk7XG5cbiAgICAvLyBNdXRhdGUgdGhlIHN0ZXBzIGRpcmVjdGx5IHJhdGhlciB0aGFuIEpzb25QYXRjaC1pbmcgdGhlIHJlbmRlcmVkIGZpbGUsIHNvXG4gICAgLy8gdGhlIHRva2VuLW1pbnRpbmcgc3RlcCBzdGF5cyBhbmNob3JlZCB0byB0aGUgcHVibGlzaCBzdGVwIGl0IGZlZWRzLlxuICAgIHN0ZXBzLnNwbGljZShpbmRleCwgMCwgZ29QdWJsaXNoVG9rZW4uc2V0dXBTdGVwc1swXSk7XG4gICAgLy8gR2l0SHViIEFwcCBpbnN0YWxsYXRpb24gdG9rZW5zIChnaHNfKikgcmVxdWlyZSB0aGUgYHgtYWNjZXNzLXRva2VuYFxuICAgIC8vIHVzZXJuYW1lIHdoZW4gdXNlZCBpbiBIVFRQUyBnaXQgVVJMcy4gcHVibGliIHJlbmRlcnMgdGhpcyBlbnYgdmFyXG4gICAgLy8gdmVyYmF0aW0gaW50byBgaHR0cHM6Ly8ke0dJVEhVQl9UT0tFTn1AZ2l0aHViLmNvbS8uLi5gLCBzbyB3aXRob3V0IHRoZVxuICAgIC8vIHByZWZpeCB0aGUgcHVzaCA0MDFzIGFuZCBmYWxscyBiYWNrIHRvIGEgVFRZIHBhc3N3b3JkIHByb21wdC5cbiAgICBzdGVwLmVudi5HSVRIVUJfVE9LRU4gPSBgeC1hY2Nlc3MtdG9rZW46JHtnb1B1Ymxpc2hUb2tlbi50b2tlblJlZn1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXR0eUFzc2VydEVxdWFsPFQ+KHN1YmplY3Q6IFQsIGV4cGVjdGVkOiBULCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChzdWJqZWN0ICE9PSBleHBlY3RlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke21lc3NhZ2UgPz8gXCJBc3NlcnRpb24gZmFpbGVkXCJ9OiBleHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKX0gYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KHN1YmplY3QpfWBcbiAgICApO1xuICB9XG59XG4iXX0=
|