@cdktn/hcl2cdk 0.23.0-pre.41 → 0.23.0-pre.44

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.
@@ -583,7 +583,7 @@ EOF`;
583
583
  test("convert using operations while containing substring", async () => {
584
584
  const expression =
585
585
  // prettier-ignore
586
- '"${length(var.image_id) > 4 && substr(var.image_id, 0, 4) == \"ami-\"}"';
586
+ '"${length(var.image_id) > 4 && substr(var.image_id, 0, 4) == "ami-"}"';
587
587
  const scope = getScope({});
588
588
  const result = await (0, expressions_1.convertTerraformExpressionToTs)(scope, expression, getType);
589
589
  expect((0, testHelpers_1.astToCode)(result)).toMatchInlineSnapshot(`"Token.asString(Op.and(Op.gt(Fn.lengthOf(imageId.value), 4), Op.eq(Fn.substr(imageId.stringValue, 0, 4), "ami-")))"`);
@@ -690,4 +690,4 @@ EOF`;
690
690
  expect((0, testHelpers_1.astToCode)(result)).toMatchInlineSnapshot(`"["$\${path:name.givenName}"]"`);
691
691
  });
692
692
  });
693
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvblRvVHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vZXhwcmVzc2lvblRvVHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOztBQUVILGdEQUFnRTtBQUdoRSwrQ0FBa0Q7QUFFbEQsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixjQUFjLEVBQUUsS0FBSztJQUNyQixnQkFBZ0IsRUFBRTtRQUNoQixxQ0FBcUMsRUFBRTtZQUNyQyxRQUFRLEVBQUUsRUFBRTtZQUNaLGdCQUFnQixFQUFFO2dCQUNoQixhQUFhLEVBQUU7b0JBQ2IsS0FBSyxFQUFFO3dCQUNMLFVBQVUsRUFBRTs0QkFDVixHQUFHLEVBQUU7Z0NBQ0gsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztnQ0FDdkIsZ0JBQWdCLEVBQUUsT0FBTzs2QkFDMUI7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELG1CQUFtQixFQUFFO2dCQUNuQixzQkFBc0IsRUFBRTtvQkFDdEIsT0FBTyxFQUFFLENBQUM7b0JBQ1YsS0FBSyxFQUFFO3dCQUNMLFVBQVUsRUFBRTs0QkFDVixzQkFBc0IsRUFBRTtnQ0FDdEIsSUFBSSxFQUFFLE1BQU07Z0NBQ1osZ0JBQWdCLEVBQUUsT0FBTztnQ0FDekIsUUFBUSxFQUFFLElBQUk7NkJBQ2Y7NEJBQ0QsYUFBYSxFQUFFO2dDQUNiLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7Z0NBQ3ZCLGdCQUFnQixFQUFFLE9BQU87Z0NBQ3pCLFFBQVEsRUFBRSxJQUFJOzZCQUNmOzRCQUNELGdCQUFnQixFQUFFO2dDQUNoQixJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2dDQUN2QixnQkFBZ0IsRUFBRSxPQUFPO2dDQUN6QixRQUFRLEVBQUUsSUFBSTs2QkFDZjs0QkFDRCxXQUFXLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLENBQUMsS0FB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YykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyB9IGZyb20gXCIuLi9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VTY29wZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgQXR0cmlidXRlVHlwZSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgYXN0VG9Db2RlIGFzIGNvZGUgfSBmcm9tIFwiLi90ZXN0SGVscGVyc1wiO1xuXG5jb25zdCBhd3NQcm92aWRlclNjaGVtYSA9IHtcbiAgZm9ybWF0X3ZlcnNpb246IFwiMS4wXCIsXG4gIHByb3ZpZGVyX3NjaGVtYXM6IHtcbiAgICBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvYXdzXCI6IHtcbiAgICAgIHByb3ZpZGVyOiB7fSxcbiAgICAgIHJlc291cmNlX3NjaGVtYXM6IHtcbiAgICAgICAgYXdzX3MzX2J1Y2tldDoge1xuICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIGZvbzoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFtcIm1hcFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGF0YV9zb3VyY2Vfc2NoZW1hczoge1xuICAgICAgICBhd3NfYXZhaWxhYmlsaXR5X3pvbmVzOiB7XG4gICAgICAgICAgdmVyc2lvbjogMCxcbiAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBhbGxfYXZhaWxhYmlsaXR5X3pvbmVzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJib29sXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fa2luZDogXCJwbGFpblwiLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBleGNsdWRlX25hbWVzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogW1wic2V0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhjbHVkZV96b25lX2lkczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFtcInNldFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdyb3VwX25hbWVzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogW1wic2V0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbmFtZXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgem9uZV9pZHM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGVzdGluZ19tYXA6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBbXCJtYXBcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fa2luZDogXCJwbGFpblwiLFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2NrX3R5cGVzOiB7XG4gICAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIG5lc3RpbmdfbW9kZTogXCJzZXRcIixcbiAgICAgICAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcInNldFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fa2luZDogXCJwbGFpblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRpbWVvdXRzOiB7XG4gICAgICAgICAgICAgICAgbmVzdGluZ19tb2RlOiBcInNpbmdsZVwiLFxuICAgICAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn07XG5cbmNvbnN0IGV4dGVybmFsUHJvdmlkZXJTY2hlbWEgPSB7XG4gIGZvcm1hdF92ZXJzaW9uOiBcIjEuMFwiLFxuICBwcm92aWRlcl9zY2hlbWFzOiB7XG4gICAgXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2V4dGVybmFsXCI6IHtcbiAgICAgIHByb3ZpZGVyOiB7fSxcbiAgICAgIHJlc291cmNlX3NjaGVtYXM6IHt9LFxuICAgICAgZGF0YV9zb3VyY2Vfc2NoZW1hczoge1xuICAgICAgICBleHRlcm5hbDoge1xuICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgYmxvY2s6IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgXCJUaGUgaWQgb2YgdGhlIGRhdGEgc291cmNlLiBUaGlzIHdpbGwgYWx3YXlzIGJlIHNldCB0byBgLWBcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByb2dyYW06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgXCJBIGxpc3Qgb2Ygc3RyaW5ncywgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyB0aGUgcHJvZ3JhbSB0byBydW4gYW5kIHdob3NlIHN1YnNlcXVlbnQgZWxlbWVudHMgYXJlIG9wdGlvbmFsIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gdGhlIHByb2dyYW0uIFRlcnJhZm9ybSBkb2VzIG5vdCBleGVjdXRlIHRoZSBwcm9ncmFtIHRocm91Z2ggYSBzaGVsbCwgc28gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBlc2NhcGUgc2hlbGwgbWV0YWNoYXJhY3RlcnMgbm9yIGFkZCBxdW90ZXMgYXJvdW5kIGFyZ3VtZW50cyBjb250YWluaW5nIHNwYWNlcy5cIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogW1wibWFwXCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgXCJBIG1hcCBvZiBzdHJpbmcgdmFsdWVzIHRvIHBhc3MgdG8gdGhlIGV4dGVybmFsIHByb2dyYW0gYXMgdGhlIHF1ZXJ5IGFyZ3VtZW50cy4gSWYgbm90IHN1cHBsaWVkLCB0aGUgcHJvZ3JhbSB3aWxsIHJlY2VpdmUgYW4gZW1wdHkgb2JqZWN0IGFzIGl0cyBpbnB1dC5cIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFtcIm1hcFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgIFwiQSBtYXAgb2Ygc3RyaW5nIHZhbHVlcyByZXR1cm5lZCBmcm9tIHRoZSBleHRlcm5hbCBwcm9ncmFtLlwiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd29ya2luZ19kaXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgXCJXb3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgcHJvZ3JhbS4gSWYgbm90IHN1cHBsaWVkLCB0aGUgcHJvZ3JhbSB3aWxsIHJ1biBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fa2luZDogXCJwbGFpblwiLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAnVGhlIGBleHRlcm5hbGAgZGF0YSBzb3VyY2UgYWxsb3dzIGFuIGV4dGVybmFsIHByb2dyYW0gaW1wbGVtZW50aW5nIGEgc3BlY2lmaWMgcHJvdG9jb2wgKGRlZmluZWQgYmVsb3cpIHRvIGFjdCBhcyBhIGRhdGEgc291cmNlLCBleHBvc2luZyBhcmJpdHJhcnkgZGF0YSBmb3IgdXNlIGVsc2V3aGVyZSBpbiB0aGUgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24uXFxuXFxuKipXYXJuaW5nKiogVGhpcyBtZWNoYW5pc20gaXMgcHJvdmlkZWQgYXMgYW4gXCJlc2NhcGUgaGF0Y2hcIiBmb3IgZXhjZXB0aW9uYWwgc2l0dWF0aW9ucyB3aGVyZSBhIGZpcnN0LWNsYXNzIFRlcnJhZm9ybSBwcm92aWRlciBpcyBub3QgbW9yZSBhcHByb3ByaWF0ZS4gSXRzIGNhcGFiaWxpdGllcyBhcmUgbGltaXRlZCBpbiBjb21wYXJpc29uIHRvIGEgdHJ1ZSBkYXRhIHNvdXJjZSwgYW5kIGltcGxlbWVudGluZyBhIGRhdGEgc291cmNlIHZpYSBhbiBleHRlcm5hbCBwcm9ncmFtIGlzIGxpa2VseSB0byBodXJ0IHRoZSBwb3J0YWJpbGl0eSBvZiB5b3VyIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uIGJ5IGNyZWF0aW5nIGRlcGVuZGVuY2llcyBvbiBleHRlcm5hbCBwcm9ncmFtcyBhbmQgbGlicmFyaWVzIHRoYXQgbWF5IG5vdCBiZSBhdmFpbGFibGUgKG9yIG1heSBuZWVkIHRvIGJlIHVzZWQgZGlmZmVyZW50bHkpIG9uIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy5cXG5cXG4qKldhcm5pbmcqKiBUZXJyYWZvcm0gRW50ZXJwcmlzZSBkb2VzIG5vdCBndWFyYW50ZWUgYXZhaWxhYmlsaXR5IG9mIGFueSBwYXJ0aWN1bGFyIGxhbmd1YWdlIHJ1bnRpbWVzIG9yIGV4dGVybmFsIHByb2dyYW1zIGJleW9uZCBzdGFuZGFyZCBzaGVsbCB1dGlsaXRpZXMsIHNvIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBkYXRhIHNvdXJjZSB3aXRoaW4gY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYXBwbGllZCB3aXRoaW4gVGVycmFmb3JtIEVudGVycHJpc2UuJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxudHlwZSBHZXRTY29wZVBhcmFtcyA9IHtcbiAgcHJvdmlkZXI/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICByZXNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgZGF0YT86IHN0cmluZ1tdO1xuICB2YXJpYWJsZXM/OiBzdHJpbmdbXTtcbiAgbG9jYWxzPzogc3RyaW5nW107XG4gIGZvckVhY2hJdGVyYXRvck5hbWU/OiBzdHJpbmc7XG4gIHdpdGhpbk92ZXJyaWRlRXhwcmVzc2lvbj86IGJvb2xlYW47XG4gIHNjb3BlZFZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5mdW5jdGlvbiBnZXRTY29wZSh7XG4gIHByb3ZpZGVyLFxuICByZXNvdXJjZXMsXG4gIGRhdGEsXG4gIHZhcmlhYmxlcyxcbiAgbG9jYWxzLFxuICBmb3JFYWNoSXRlcmF0b3JOYW1lLFxuICBzY29wZWRWYXJpYWJsZXMsXG4gIHdpdGhpbk92ZXJyaWRlRXhwcmVzc2lvbiA9IGZhbHNlLFxufTogR2V0U2NvcGVQYXJhbXMgPSB7fSk6IFJlc291cmNlU2NvcGUge1xuICBjb25zdCBzY29wZVZhcmlhYmxlczogUmVzb3VyY2VTY29wZVtcInZhcmlhYmxlc1wiXSA9IHt9O1xuXG4gIHJlc291cmNlcz8uZm9yRWFjaCgodmFyTmFtZSkgPT4ge1xuICAgIGxldCBbcmVzb3VyY2VUeXBlLCByZXNvdXJjZU5hbWVdID0gdmFyTmFtZS5zcGxpdChcIi5cIik7XG4gICAgaWYgKCFyZXNvdXJjZU5hbWUpIHtcbiAgICAgIHJlc291cmNlTmFtZSA9IHZhck5hbWU7XG4gICAgICByZXNvdXJjZVR5cGUgPSBcImF3c19zM19idWNrZXRcIjtcbiAgICB9XG5cbiAgICBzY29wZVZhcmlhYmxlc1t2YXJOYW1lXSA9IHtcbiAgICAgIHJlc291cmNlOiByZXNvdXJjZVR5cGUsXG4gICAgICB2YXJpYWJsZU5hbWU6IHJlc291cmNlTmFtZSxcbiAgICB9O1xuICB9KTtcblxuICBkYXRhPy5mb3JFYWNoKCh2YXJOYW1lKSA9PiB7XG4gICAgc2NvcGVWYXJpYWJsZXNbdmFyTmFtZV0gPSB7XG4gICAgICByZXNvdXJjZTogXCJkYXRhLmF3c19zM19idWNrZXRcIixcbiAgICAgIHZhcmlhYmxlTmFtZTogdmFyTmFtZSxcbiAgICB9O1xuICB9KTtcblxuICB2YXJpYWJsZXM/LmZvckVhY2goKHZhck5hbWUpID0+IHtcbiAgICBzY29wZVZhcmlhYmxlc1t2YXJOYW1lXSA9IHtcbiAgICAgIHJlc291cmNlOiBcInZhclwiLFxuICAgICAgdmFyaWFibGVOYW1lOiB2YXJOYW1lLFxuICAgIH07XG4gIH0pO1xuXG4gIGxvY2Fscz8uZm9yRWFjaCgodmFyTmFtZSkgPT4ge1xuICAgIHNjb3BlVmFyaWFibGVzW3Zhck5hbWVdID0ge1xuICAgICAgcmVzb3VyY2U6IFwibG9jYWxcIixcbiAgICAgIHZhcmlhYmxlTmFtZTogdmFyTmFtZSxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBzY29wZSA9IHtcbiAgICBwcm92aWRlclNjaGVtYTogcHJvdmlkZXIgPz8ge30sXG4gICAgcHJvdmlkZXJHZW5lcmF0b3I6IHt9LFxuICAgIGNvbnN0cnVjdHM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgIHZhcmlhYmxlczogc2NvcGVWYXJpYWJsZXMsXG4gICAgaGFzVG9rZW5CYXNlZFR5cGVDb2VyY2lvbjogdHJ1ZSxcbiAgICBzY29wZWRWYXJpYWJsZXM6IHNjb3BlZFZhcmlhYmxlcyB8fCB7fSxcbiAgICBmb3JFYWNoSXRlcmF0b3JOYW1lLFxuICAgIHdpdGhpbk92ZXJyaWRlRXhwcmVzc2lvbixcbiAgICBub2RlSWRzOiBbXSxcbiAgICBpbXBvcnRhYmxlczogW10sXG4gICAgdG9wTGV2ZWxDb25maWc6IHt9LFxuICB9O1xuXG4gIHJldHVybiBzY29wZTtcbn1cblxuY29uc3QgZ2V0VHlwZSA9ICgpOiBBdHRyaWJ1dGVUeXBlID0+IFwic3RyaW5nXCI7XG5cbmRlc2NyaWJlKFwiZXhwcmVzc2lvblRvVHNcIiwgKCkgPT4ge1xuICB0ZXN0KFwiY29udmVydHMgYSBzaW1wbGUgc3RyaW5nIHRvIGEgc3RyaW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gXCJoZWxsb1wiO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcIlwiaGVsbG9cIlwiYCk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyBhIHNpbXBsZSBleHByZXNzaW9uIHdpdGggYSB0ZW1wbGF0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFwiJHsyMn1cIjtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXCJUb2tlbi5hc1N0cmluZygyMilcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydHMgYSB2YXJpYWJsZSByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIiR7dmFyLmZvb31cIjtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXCJmb28uc3RyaW5nVmFsdWVcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIHZhcmlhYmxlIHJlZmVyZW5jZSB3aXRoIHNuYWtlIGNhc2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIiR7dmFyLmZvb19iYXJ9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHZhcmlhYmxlczogW1wiZm9vX2JhclwiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoZm9vQmFyLnZhbHVlKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIGZ1bmN0aW9uIGNhbGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXFwke3JlcGxhY2UoXCJoZWxsb1wiLCBcImxcIiwgXCJ3XCIpfWA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5yZXBsYWNlKFwiaGVsbG9cIiwgXCJsXCIsIFwid1wiKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGV4cHJlc3Npb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXFwke3JlcGxhY2UoXCJoZWxsby1cXCR7MjIrMjJ9XCIsIFwiNDRcIiwgXCJ3b3JsZFwiKX1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ucmVwbGFjZShcImhlbGxvLVwiICsgVG9rZW4uYXNTdHJpbmcoT3AuYWRkKDIyLCAyMikpLCBcIjQ0XCIsIFwid29ybGRcIikpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBvZiBpdGVyYXRvciBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnJHtcImR5bmFtaWMtaW5ncmVzcy0ke2luZ3Jlc3Mua2V5fVwifSc7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICBzY29wZWRWYXJpYWJsZXM6IHtcbiAgICAgICAgaW5ncmVzczogXCJkeW5hbWljX2l0ZXJhdG9yMFwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJkeW5hbWljLWluZ3Jlc3MtXFwke1wiICsgVG9rZW4uYXNTdHJpbmcoZHluYW1pY19pdGVyYXRvcjAua2V5KSArIFwifVwiXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGEgdmFyaWFibGUgcmVmZXJlbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFxcJHt2YXIuZm9vX2Jhcn1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcImZvb19iYXJcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIC8vIFRPRE86IFRoaXMgc2VlbXMgYnJva2VuXG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoZm9vQmFyLnZhbHVlKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIHJlc291cmNlIHJlZmVyZW5jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcInNpbXBsZS1cXCR7YXdzX3MzX2J1Y2tldC5mb28uaWR9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZm9vXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoYFwiXCJzaW1wbGUtXFwke1wiICsgZm9vLmlkICsgXCJ9XCJcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIHJlc291cmNlIHJlZmVyZW5jZSB3aXRoIG5lc3RlZCBwcm9wZXJ0aWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwic2ltcGxlLVxcJHthd3NfczNfYnVja2V0LmZvby5wcm9wLnRlc3R9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZm9vXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcInNpbXBsZS1cXCR7XCIgKyBmb28ucHJvcC50ZXN0ICsgXCJ9XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYSBsb2NhbCByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJzaW1wbGUtXFwke2xvY2FsLmZvb31cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IGxvY2FsczogW1wiZm9vXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoYFwiXCJzaW1wbGUtXFwke1wiICsgZm9vICsgXCJ9XCJcImApO1xuICB9KTtcblxuICB0ZXN0KFwicGxhaW4gcmVzb3VyY2UgcmVmZXJlbmNlcyBpbiBhcml0aG1ldGljc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9XG4gICAgICBcIiR7YXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LmNvdW50ICsgYXdzX3MzX2J1Y2tldC5vdGhlcmJ1Y2tldC5jb3VudCB9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldFwiLCBcImF3c19zM19idWNrZXQub3RoZXJidWNrZXRcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKE9wLmFkZChleGFtcGxlYnVja2V0LmNvdW50LCBvdGhlcmJ1Y2tldC5jb3VudCkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJ1c2UgZnFuIGZvciBzcGxhdCByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXFwke2F3c19zM19idWNrZXQuZm9vLiouaWR9YDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgcmVzb3VyY2VzOiBbXCJhd3NfczNfYnVja2V0LmZvb1wiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKGZvbywgW1wiKlwiLCBcImlkXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcInVzZSBmcW4gaWYgcHJvcGVydHkgaXMgcHJlc2VudCBvbiBudW1lcmljIGFjY2VzcyB1c2luZyBkb3Qgbm90YXRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgXCIke2F3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldC5uZXR3b3JrX2ludGVyZmFjZS4wLmFjY2Vzc19jb25maWcuMC5hc3NpZ25lZF9uYXRfaXB9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldC5uZXR3b3JrSW50ZXJmYWNlLCBbXCIwXCIsIFwiYWNjZXNzX2NvbmZpZ1wiLCBcIjBcIiwgXCJhc3NpZ25lZF9uYXRfaXBcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwidXNlIGZxbiBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIG51bWVyaWMgYWNjZXNzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgIFwiJHthd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXQubmV0d29ya19pbnRlcmZhY2VbMF0uYWNjZXNzX2NvbmZpZ1swXS5hc3NpZ25lZF9uYXRfaXB9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldC5uZXR3b3JrSW50ZXJmYWNlLCBbXCIwXCIsIFwiYWNjZXNzX2NvbmZpZ1wiLCBcIjBcIiwgXCJhc3NpZ25lZF9uYXRfaXBcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwidXNlIG5vIGZxbiBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIG51bWVyaWMgYWNjZXNzIHVzaW5nIFtdXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgIFwiJHthd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXQubmV0d29ya19pbnRlcmZhY2VbMF0uYWNjZXNzX2NvbmZpZ1swXS5hc3NpZ25lZF9uYXRfaXB9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldC5uZXR3b3JrSW50ZXJmYWNlLCBbXCIwXCIsIFwiYWNjZXNzX2NvbmZpZ1wiLCBcIjBcIiwgXCJhc3NpZ25lZF9uYXRfaXBcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiZGV0ZWN0cyBzcGxhdCByZWZlcmVuY2Ugd2l0aGluIGZ1bmN0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gXCIke3Rvc2V0KGF3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldC4qKX1cIjtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgcmVzb3VyY2VzOiBbXCJhd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXRcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLnRvc2V0KEZuLmxvb2t1cE5lc3RlZChleGFtcGxlYnVja2V0LCBbXCIqXCJdKSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGNvbmRpdGlvbmFsXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgIFwiJHthd3Nfa21zX2tleS5rZXkuZGVsZXRpb25fd2luZG93X2luX2RheXMgPiAzID8gYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LmlkIDogW119XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX2ttc19rZXkua2V5XCIsIFwiZXhhbXBsZWJ1Y2tldFwiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoY29uZGl0aW9uYWwoT3AuZ3Qoa2V5LmRlbGV0aW9uV2luZG93SW5EYXlzLCAzKSwgZXhhbXBsZWJ1Y2tldC5pZCwgW10pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydHMgYSBmdW5jdGlvbiB3aXRoIHJlZmVyZW5jZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIiR7ZWxlbWVudChhd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXQsIDApLmlkfVwiO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldFwiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKEZuLmVsZW1lbnQoZXhhbXBsZWJ1Y2tldCwgMCksIFtcImlkXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIGEgZnVuY3Rpb24gd2l0aCBzcGxhdCByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIiR7ZWxlbWVudChhd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXQuKi5pZCwgMCl9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5lbGVtZW50KEZuLmxvb2t1cE5lc3RlZChleGFtcGxlYnVja2V0LCBbXCIqXCIsIFwiaWRcIl0pLCAwKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgZm9yIGxvb3BzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgIFwiJHt7IGZvciBuYW1lLCB1c2VyIGluIHZhci51c2VycyA6IHVzZXIucm9sZSA9PiBuYW1lLi4ufX1cIjtcblxuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJcXCR7eyBmb3IgbmFtZSwgdXNlciBpbiBcXCR7XCIgKyB1c2Vycy52YWx1ZSArIFwifSA6IHVzZXIucm9sZSA9PiBuYW1lLi4ufX1cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiZm9yIGV4cHJlc3Npb25zXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gXCJ7Zm9yIHMgaW4gdmFyLmxpc3QgOiBzID0+IHVwcGVyKHMpfVwiO1xuXG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcIlxcJHt7IGZvciBzIGluIFxcJHtcIiArIGxpc3QudmFsdWUgKyBcIn0gOiBzID0+IHVwcGVyKHMpfX1cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiZm9yIGxpc3QgZXhwcmVzc2lvbiBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIltmb3IgcyBpbiB2YXIubGlzdCA6IHVwcGVyKHMpXVwiO1xuXG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcIlxcJHtbIGZvciBzIGluIFxcJHtcIiArIGxpc3QudmFsdWUgKyBcIn0gOiB1cHBlcihzKV19XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImZvciBsaXN0IHdpdGggY29uZGl0aW9uYWxcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnW2ZvciBzIGluIHZhci5saXN0IDogdXBwZXIocykgaWYgcyAhPSBcIlwiXSc7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcIlxcJHtbIGZvciBzIGluIFxcJHtcIiArIGxpc3QudmFsdWUgKyBcIn0gOiB1cHBlcihzKSBpZiBzICE9IFxcXFxcIlxcXFxcIl19XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgcHJvcGVydHkgYWNjZXNzIHJlc291cmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFwiJHthd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXRbMF0uaWR9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldCwgW1wiMFwiLCBcImlkXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgdW5hcnkgb3BlcmF0b3JzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFxcJHshdmFyLmVuYWJsZWR9YDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgdmFyaWFibGVzOiBbXCJlbmFibGVkXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgICgpID0+IFwiYm9vbFwiLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNCb29sZWFuKE9wLm5vdChlbmFibGVkLnZhbHVlKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgZnVuY3Rpb24gd2l0aCBhcnJheXMgYW5kIGNvbW1lbnRzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFxcJHtjb21wYWN0KFtcbiAgICAgICAgICAgICMgVGhlIGV4YW1wbGUgXCJidWNrZXRcIlxuICAgICAgICAgICAgYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LFxuICAgICAgICBcbiAgICAgICAgICAgICMgVGhlIFwiTGVhcm5cIiBzaW5nbGUgcGFnZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyBub3QgY29uZmlndXJlZCBpbiBhbGwgZW52aXJvbm1lbnRzLlxuICAgICAgICAgICAgdmFyLmlucHV0LFxuICAgICAgICAgIF0pfWA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldFwiXSxcbiAgICAgIHZhcmlhYmxlczogW1wiaW5wdXRcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIC8vIFRPRE86IFNlZSBpZiB3ZSBoYXZlIGEgd2F5IHRvIHByZXNlcnZlIGNvbW1lbnRzXG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4uY29tcGFjdChUb2tlbi5hc0xpc3QoW2V4YW1wbGVidWNrZXQsIGlucHV0LnZhbHVlXSkpKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCByZWZlcmVuY2VzIGZvciBzYW1lIHJlZmVyZW5jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcXCR7dmFyLmlucHV0ID09IFwidGVzdFwiID8gXCJhenVyZS1hZC1pbnRcIiA6IFwiYXp1cmUtYWQtXFwke3Zhci5pbnB1dH1cIn1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcImlucHV0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhjb25kaXRpb25hbChPcC5lcShpbnB1dC52YWx1ZSwgXCJ0ZXN0XCIpLCBcImF6dXJlLWFkLWludFwiLCBcImF6dXJlLWFkLVxcJHtcIiArIGlucHV0LnZhbHVlICsgXCJ9XCIpKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwibmVzdGVkIHZhcmlhYmxlIGFjY2Vzc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcXCR7ZWxlbWVudCh2YXIudGVzdDJbXCJ2YWwxXCJdLCAwKX1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcInRlc3QyXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5lbGVtZW50KEZuLmxvb2t1cE5lc3RlZCh0ZXN0Mi52YWx1ZSwgW1wiXFxcXFwidmFsMVxcXFxcIlwiXSksIDApKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29tcGxpY2F0ZWQgbmVzdGVkIGxvY2FsIHZhbHVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gXCIke2ZsYXR0ZW4odmFyLnZuZXRzWypdLnN1Ym5ldHNbKl0ubmFtZSl9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHZhcmlhYmxlczogW1widm5ldHNcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmZsYXR0ZW4oRm4ubG9va3VwTmVzdGVkKHZuZXRzLnZhbHVlLCBbXCIqXCIsIFwic3VibmV0c1wiLCBcIipcIiwgXCJuYW1lXCJdKSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIFRPSU1QUk9WRTogSSBkb24ndCB0aGluayB3ZSBjYW4gaGFuZGxlIHRoaXMgY2FzZSB5ZXQsIHNpbmNlIHRoZSB2YXJpYWJsZVxuICAvLyBuZWVkcyB0byBiZSB3cmFwcGVkIGluIGFuIGl0ZXJhdG9yLiBJJ20gbGVhdmluZyB0aGlzIGluLCBidXQgaXQncyBicm9rZW5cbiAgdGVzdChcImNvbXBsaWNhdGVkIG5lc3RlZCB2YXJpYWJsZSBhY2Nlc3Mgd2l0aCBtYXBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgeyBcbiAgICBmb3Igdm5ldCBpbiB2YXIudm5ldHNbKl06XG4gICAgKHZuZXQudm5ldF9uYW1lKSA9PiB2bmV0LnN1Ym5ldHNbKl0ubmFtZVxuICB9YDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgdmFyaWFibGVzOiBbXCJ2bmV0c1wiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJcXCR7eyBmb3Igdm5ldCBpbiBcXCR7XCIgKyBGbi5sb29rdXBOZXN0ZWQodm5ldHMudmFsdWUsIFtcIipcIl0pICsgXCJ9IDogKHZuZXQudm5ldF9uYW1lKSA9PiB2bmV0LnN1Ym5ldHNbKl0ubmFtZX19XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbXBsaWNhdGVkIG5lc3RlZCB2YXJpYWJsZSBhY2Nlc3Mgd2l0aCBsaXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFxcJHtmbGF0dGVuKFtcbiAgICBmb3IgaywgdiBpbiB2YXIucm91dGUgOiBbXG4gICAgICBmb3IgbiwgcyBpbiB2IDogW1xuICAgICAgICB7XG4gICAgICAgICAga2V5ID0gayxcbiAgICAgICAgICBuYW1lID0gbixcbiAgICAgICAgICBzdmNfdXJsID0gc1xuICAgICAgICB9XG4gICAgICBdXG4gICAgXVxuICBdKX1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcInJvdXRlXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5mbGF0dGVuKFwiXFwke1sgZm9yIGssIHYgaW4gXFwke1wiICsgcm91dGUudmFsdWUgKyBcIn0gOiBbXFxcXG4gICAgICBmb3IgbiwgcyBpbiB2IDogW1xcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAga2V5ID0gayxcXFxcbiAgICAgICAgICBuYW1lID0gbixcXFxcbiAgICAgICAgICBzdmNfdXJsID0gc1xcXFxuICAgICAgICB9XFxcXG4gICAgICBdXFxcXG4gICAgXV19XCIpKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwic2ltcGxlIGxvY2FsIHZhcmlhYmxlIGFjY2Vzc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFwiJHshbG9jYWwuZW5hYmxlZH1cIjtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgbG9jYWxzOiBbXCJlbmFibGVkXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhPcC5ub3QoZW5hYmxlZCkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJtdWx0aSBsb2NhbCBhY2Nlc3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgJ1wiJHtsb2NhbC5zZXJ2aWNlX25hbWV9LCR7bG9jYWwub3duZXJ9LCR7bG9jYWwuaXNfaXRfZ3JlYXR9LCR7bG9jYWwuaG93X21hbnl9XCInO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgbG9jYWxzOiBbXCJzZXJ2aWNlX25hbWVcIiwgXCJvd25lclwiLCBcImlzX2l0X2dyZWF0XCIsIFwiaG93X21hbnlcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlwiXFwke1wiICsgc2VydmljZU5hbWUgKyBcIn0sXFwke1wiICsgb3duZXIgKyBcIn0sXFwke1wiICsgaXNJdEdyZWF0ICsgXCJ9LFxcJHtcIiArIGhvd01hbnkgKyBcIn1cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiYmluYXJ5IG9wZXJhdGlvbnMgd2l0aGluIGxpdGVyYWxzIGFuZCB2YXJpYWJsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnXCIke3Zhci50ZXN0fSArIDFcIic7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHZhcmlhYmxlczogW1widGVzdFwiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJcXCR7XCIgKyB0ZXN0LnZhbHVlICsgXCJ9ICsgMVwiXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJsb2NhbCB2YXJpYWJsZSBhY2Nlc3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnXCIke2xvY2FsLmVuYWJsZWR9XCInO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyBsb2NhbHM6IFtcImVuYWJsZWRcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXCJlbmFibGVkXCJgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIHRyYXZlcnNhbHMgdGhhdCBjYW5ub3QgYmUgcmVmZXJlbmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFwiJHtzZWxmLnBhdGh9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhUZXJyYWZvcm1TZWxmLmdldEFueShcInBhdGhcIikpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyBqb2luIGZ1bmN0aW9uIHdpdGggdmFyaWFibGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gJyR7am9pbihcIi1cIiwgW3Zhci50YWdzLmFwcCwgdmFyLnRhZ3MuZW52XSl9JztcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgdmFyaWFibGVzOiBbXCJ0YWdzXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5qb2luKFwiLVwiLCBUb2tlbi5hc0xpc3QoW0ZuLmxvb2t1cE5lc3RlZCh0YWdzLnZhbHVlLCBbXCJhcHBcIl0pLCBGbi5sb29rdXBOZXN0ZWQodGFncy52YWx1ZSwgW1wiZW52XCJdKV0pKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIGpvaW4gZnVuY3Rpb24gd2l0aCBtYW55IGFyZ3VtZW50cyB2YXJpYWJsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgJyR7am9pbihcIi1cIiwgdmFyLnRhZ3MuYXBwLCB2YXIudGFncy5lbnYsIHZhci50YWdzLm90aGVyKX0nO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcInRhZ3NcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmpvaW4oXCItXCIsIFRva2VuLmFzTGlzdChGbi5jb25jYXQoW0ZuLmxvb2t1cE5lc3RlZCh0YWdzLnZhbHVlLCBbXCJhcHBcIl0pLCBGbi5sb29rdXBOZXN0ZWQodGFncy52YWx1ZSwgW1wiZW52XCJdKSwgRm4ubG9va3VwTmVzdGVkKHRhZ3MudmFsdWUsIFtcIm90aGVyXCJdKV0pKSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJkb2Vzbid0IHdyYXAgYW55IGV4dHJhIHRlbXBsYXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcImFwcC1cXCR7dGVycmFmb3JtLndvcmtzcGFjZX1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcImFwcC1cXCR7dGVycmFmb3JtLndvcmtzcGFjZX1cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydHMgYSBmb3IgZXhwcmVzc2lvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBbZm9yIHJlY29yZCBpbiBhd3Nfcm91dGU1M19yZWNvcmQuZXhhbXBsZSA6IHJlY29yZC5mcWRuXWA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcIlxcJHtbIGZvciByZWNvcmQgaW4gXFwke1wiICsgZXhhbXBsZS5mcW4gKyBcIn0gOiByZWNvcmQuZnFkbl19XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIGEgZGF0YSBzb3VyY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZGF0YS5hd3Nfcm91dGU1M196b25lLmV4YW1wbGUuem9uZV9pZH1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhleGFtcGxlLnpvbmVJZClcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYW4gZWFjaCBleHByZXNzaW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2VhY2gudmFsdWUubmFtZX1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IGZvckVhY2hJdGVyYXRvck5hbWU6IFwibXlJdGVyYXRvclwiIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQobXlJdGVyYXRvci52YWx1ZSwgW1wibmFtZVwiXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyBhIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24gY29udGFpbmluZyBhIHJlc291cmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2VsZW1lbnQoYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LCAwKS5pZH1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoRm4uZWxlbWVudChleGFtcGxlYnVja2V0LCAwKSwgW1wiaWRcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIGZ1bmN0aW9uIHdpdGggcmVmZXJlbmNlcyB3aXRoIHNwbGF0c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcIlxcJHtjb25jYXQodmFyLnByaXZhdGVfc3VibmV0cy4qLmlkLCB2YXIucHVibGljX3N1Ym5ldHMuKi5pZCl9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgdmFyaWFibGVzOiBbXCJwcml2YXRlX3N1Ym5ldHNcIiwgXCJwdWJsaWNfc3VibmV0c1wiXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4uY29uY2F0KFtGbi5sb29rdXBOZXN0ZWQocHJpdmF0ZVN1Ym5ldHMudmFsdWUsIFtcIipcIiwgXCJpZFwiXSksIEZuLmxvb2t1cE5lc3RlZChwdWJsaWNTdWJuZXRzLnZhbHVlLCBbXCIqXCIsIFwiaWRcIl0pXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGEgaXRlcmF0b3IgdmFyaWFibGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZWFjaC5rZXl9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgdmFyaWFibGVzOiBbXCJwcml2YXRlX3N1Ym5ldHNcIiwgXCJwdWJsaWNfc3VibmV0c1wiXSxcbiAgICAgIGZvckVhY2hJdGVyYXRvck5hbWU6IFwibXlJdGVyYXRvclwiLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhteUl0ZXJhdG9yLmtleSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYSBzZWxmIHJlZmVyZW5jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcIlxcJHtzZWxmLnN1Ym5ldC5pZH1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICB2YXJpYWJsZXM6IFtcInByaXZhdGVfc3VibmV0c1wiLCBcInB1YmxpY19zdWJuZXRzXCJdLFxuICAgICAgZm9yRWFjaEl0ZXJhdG9yTmFtZTogXCJteUl0ZXJhdG9yXCIsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKFRlcnJhZm9ybVNlbGYuZ2V0QW55KFwic3VibmV0LmlkXCIpKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBoZXJlZG9jc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGA8PEVPRlxuW3tcbiAgICBcIkNvbmRpdGlvblwiOiB7XG4gICAgICAgIFwiS2V5UHJlZml4RXF1YWxzXCI6IFwiZG9jcy9cIlxuICAgIH0sXG4gICAgXCJSZWRpcmVjdFwiOiB7XG4gICAgICAgIFwiUmVwbGFjZUtleVByZWZpeFdpdGhcIjogXCJkb2N1bWVudHMvXCJcbiAgICB9XG59XVxuRU9GXG5gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJbe1xcXFxuICAgIFxcXFxcIkNvbmRpdGlvblxcXFxcIjoge1xcXFxuICAgICAgICBcXFxcXCJLZXlQcmVmaXhFcXVhbHNcXFxcXCI6IFxcXFxcImRvY3MvXFxcXFwiXFxcXG4gICAgfSxcXFxcbiAgICBcXFxcXCJSZWRpcmVjdFxcXFxcIjoge1xcXFxuICAgICAgICBcXFxcXCJSZXBsYWNlS2V5UHJlZml4V2l0aFxcXFxcIjogXFxcXFwiZG9jdW1lbnRzL1xcXFxcIlxcXFxuICAgIH1cXFxcbn1dXFxcXG5cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBoZXJlZG9jcyB3aXRob3V0IGEgdHJhaWxpbmcgbmV3bGluZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGA8PEVPRlxuaGVsbG8gd29ybGRcbkVPRmA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoYFwiXCJoZWxsbyB3b3JsZFxcXFxuXCJcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBpbmRlbnRlZCBoZXJlZG9jc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGA8PC1FT0ZcbiAgICAgICAgICAgICAgaGVsbG8gd29ybGRcbiAgICAgICAgICBFT0ZgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcIlwiaGVsbG8gd29ybGRcXFxcblwiXCJgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgb3ZlcnJpZGUgZXhwcmVzc2lvbnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnXCIke3JlcXVpcmVkX3Jlc291cmNlX2FjY2Vzcy52YWx1ZVtcInJlc291cmNlX2FjY2Vzc1wiXX1cIic7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICB3aXRoaW5PdmVycmlkZUV4cHJlc3Npb246IHRydWUsXG4gICAgICBzY29wZWRWYXJpYWJsZXM6IHtcbiAgICAgICAgcmVxdWlyZWRfcmVzb3VyY2VfYWNjZXNzOiBcImR5bmFtaWMtYmxvY2tcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlwiXFwke3JlcXVpcmVkX3Jlc291cmNlX2FjY2Vzcy52YWx1ZVtcXFxcXCJyZXNvdXJjZV9hY2Nlc3NcXFxcXCJdfVwiXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IHVzaW5nIG9wZXJhdGlvbnMgd2hpbGUgY29udGFpbmluZyBzdWJzdHJpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAnXCIke2xlbmd0aCh2YXIuaW1hZ2VfaWQpID4gNCAmJiBzdWJzdHIodmFyLmltYWdlX2lkLCAwLCA0KSA9PSBcXFwiYW1pLVxcXCJ9XCInO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe30pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhPcC5hbmQoT3AuZ3QoRm4ubGVuZ3RoT2YoaW1hZ2VJZC52YWx1ZSksIDQpLCBPcC5lcShGbi5zdWJzdHIoaW1hZ2VJZC5zdHJpbmdWYWx1ZSwgMCwgNCksIFwiYW1pLVwiKSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGEgZGF0YSBzb3VyY2Ugd2l0aCBudW1lcmljIGFjY2Vzc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcIlxcJHtkYXRhLmF3c19hdmFpbGFiaWxpdHlfem9uZXMuY2hhbmdlbWVfYXpfbGlzdF9lYnNfc25hcHNob3QubmFtZXNbMF19XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgcHJvdmlkZXI6IGF3c1Byb3ZpZGVyU2NoZW1hLFxuICAgICAgZGF0YTogW1wiYXdzX3N1Ym5ldF9pZHNcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmxvb2t1cE5lc3RlZChjaGFuZ2VtZUF6TGlzdEVic1NuYXBzaG90Lm5hbWVzLCBbXCIwXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYSByZWZlcmVuY2UgdG8gYSBtYXAgYWNjZXNzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2RhdGEuYXdzX2F2YWlsYWJpbGl0eV96b25lcy5jaGFuZ2VtZV9hel9saXN0X2Vic19zbmFwc2hvdC50ZXN0aW5nX21hcC5mb299XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgcHJvdmlkZXI6IGF3c1Byb3ZpZGVyU2NoZW1hLFxuICAgICAgZGF0YTogW1wiYXdzX3N1Ym5ldF9pZHNcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmxvb2t1cE5lc3RlZChjaGFuZ2VtZUF6TGlzdEVic1NuYXBzaG90LCBbXCJ0ZXN0aW5nX21hcFwiLCBcImZvb1wiXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGF0dHJpYnV0ZSB1cCB0byBhIG1hcCBhbmQgbm90IHdpdGhpbiBhdHRyaWJ1dGUgcmVmZXJlbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2RhdGEuYXdzX2F2YWlsYWJpbGl0eV96b25lcy5jaGFuZ2VtZV9hel9saXN0X2Vic19zbmFwc2hvdC50ZXN0aW5nX21hcH1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICBwcm92aWRlcjogYXdzUHJvdmlkZXJTY2hlbWEsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICAoKSA9PiBbXCJtYXBcIiwgXCJzdHJpbmdcIl0sXG4gICAgKTtcblxuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nTWFwKGNoYW5nZW1lQXpMaXN0RWJzU25hcHNob3QudGVzdGluZ01hcClcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImRvbid0IGNvbnZlcnQgZXh0ZXJuYWwgdW5rbm93biBmaWVsZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZGF0YS5leHRlcm5hbC5jaGFuZ2VtZV9leHRlcm5hbF90aHVtYnByaW50X2RhdGEucmVzdWx0LnRodW1icHJpbnR9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgcHJvdmlkZXI6IGV4dGVybmFsUHJvdmlkZXJTY2hlbWEsXG4gICAgICBkYXRhOiBbXCJhd3Nfc3VibmV0X2lkc1wiXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgICgpID0+IFtcIm1hcFwiLCBcInN0cmluZ1wiXSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nTWFwKEZuLmxvb2t1cE5lc3RlZChjaGFuZ2VtZUV4dGVybmFsVGh1bWJwcmludERhdGEsIFtcInJlc3VsdFwiLCBcInRodW1icHJpbnRcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCByZXNvdXJjZSByZWZlcmVuY2Ugd2l0aCBtYXAgYXR0cmlidXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2F3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldC5mb28uYmFyfVwiYDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHtcbiAgICAgIHByb3ZpZGVyOiBhd3NQcm92aWRlclNjaGVtYSxcbiAgICAgIHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldFwiXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICAoKSA9PiBcInN0cmluZ1wiLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKGV4YW1wbGVidWNrZXQsIFtcImZvb1wiLCBcImJhclwiXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGNvbXBsZXggdmFyaWFibGUgcmVmZXJlbmNlIGluIHRlbXBsYXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke3Zhci5kZWZhdWx0X3RhZ3MucHJvamVjdH0tY2xpZW50LXRnXCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgcHJvdmlkZXI6IGF3c1Byb3ZpZGVyU2NoZW1hLFxuICAgICAgcmVzb3VyY2VzOiBbXCJhd3NfczNfYnVja2V0XCJdLFxuICAgICAgdmFyaWFibGVzOiBbXCJkZWZhdWx0X3RhZ3NcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgKCkgPT4gXCJzdHJpbmdcIixcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmxvb2t1cE5lc3RlZChkZWZhdWx0VGFncy52YWx1ZSwgW1wicHJvamVjdFwiXSkpICsgXCItY2xpZW50LXRnXCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYm9vbGVhbiB2YWx1ZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZmFsc2V9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgcHJvdmlkZXI6IGF3c1Byb3ZpZGVyU2NoZW1hLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgICgpID0+IFwiYm9vbFwiLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcImZhbHNlXCJgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYSBkYXRhIHNvdXJjZSB3aXRoIGNvdW50XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2RhdGEuYXdzX2F2YWlsYWJpbGl0eV96b25lcy5hdmFpbGFibGUubmFtZXNbY291bnQuaW5kZXhdfVwiYDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHtcbiAgICAgIHByb3ZpZGVyOiBhd3NQcm92aWRlclNjaGVtYSxcbiAgICAgIGRhdGE6IFtcImF3c19hdmFpbGFiaWxpdHlfem9uZXNcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmxvb2t1cE5lc3RlZChhdmFpbGFibGUubmFtZXMsIFtcIlxcJHtjb3VudC5pbmRleH1cIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiYWNjZXB0IGVzY2FwZWQgcXVvdGVzIHdpdGhpbiBzdHJpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7anNvbmVuY29kZSh7XG4gICAgICAgICAgXCJTdGF0ZW1lbnRcIiA9IFt7XG4gICAgICAgICAgICBcIkFjdGlvblwiID0gXCJzMzoqXCIsXG4gICAgICAgICAgICBcIkVmZmVjdFwiID0gXCJBbGxvd1wiLFxuICAgICAgICAgIH1dLFxuICAgICAgICB9KX1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoYFxuICAgICAgXCJUb2tlbi5hc1N0cmluZyhGbi5qc29uZW5jb2RlKHtcbiAgICAgICAgXCJTdGF0ZW1lbnRcIjogW3tcbiAgICAgICAgICBcIkFjdGlvblwiOiBcInMzOipcIixcbiAgICAgICAgICBcIkVmZmVjdFwiOiBcIkFsbG93XCJcbiAgICAgICAgfV1cbiAgICAgIH0pKVwiXG4gICAgYCk7XG4gIH0pO1xuXG4gIHRlc3QoXCJzdXBwb3J0IHZhcmlhZGljIHBhcmFtZXRlcnMgaW4gYW55IHBvc2l0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2NpZHJzdWJuZXRzKFwiZmQwMDpmZDEyOjM0NTY6Nzg5MDo6LzU2XCIsIDE2LCAxNiwgMTYsIDMyKX1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcblxuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmNpZHJzdWJuZXRzKFwiZmQwMDpmZDEyOjM0NTY6Nzg5MDo6LzU2XCIsIFsxNiwgMTYsIDE2LCAzMl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydHMgdGVtcGxhdGUgZXhwcmVzc2lvbiB3aXRoIGVzY2FwZWQgJHt9IGV4cHJlc3Npb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnW1wiJCR7cGF0aDpuYW1lLmdpdmVuTmFtZX1cIl0nOyAvLyBmcm9tIGF3c19zc29hZG1pbl9pbnN0YW5jZV9hY2Nlc3NfY29udHJvbF9hdHRyaWJ1dGVzIGV4YW1wbGVcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiW1wiJFxcJHtwYXRoOm5hbWUuZ2l2ZW5OYW1lfVwiXVwiYCxcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
693
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvblRvVHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vZXhwcmVzc2lvblRvVHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOztBQUVILGdEQUFnRTtBQUdoRSwrQ0FBa0Q7QUFFbEQsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixjQUFjLEVBQUUsS0FBSztJQUNyQixnQkFBZ0IsRUFBRTtRQUNoQixxQ0FBcUMsRUFBRTtZQUNyQyxRQUFRLEVBQUUsRUFBRTtZQUNaLGdCQUFnQixFQUFFO2dCQUNoQixhQUFhLEVBQUU7b0JBQ2IsS0FBSyxFQUFFO3dCQUNMLFVBQVUsRUFBRTs0QkFDVixHQUFHLEVBQUU7Z0NBQ0gsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztnQ0FDdkIsZ0JBQWdCLEVBQUUsT0FBTzs2QkFDMUI7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELG1CQUFtQixFQUFFO2dCQUNuQixzQkFBc0IsRUFBRTtvQkFDdEIsT0FBTyxFQUFFLENBQUM7b0JBQ1YsS0FBSyxFQUFFO3dCQUNMLFVBQVUsRUFBRTs0QkFDVixzQkFBc0IsRUFBRTtnQ0FDdEIsSUFBSSxFQUFFLE1BQU07Z0NBQ1osZ0JBQWdCLEVBQUUsT0FBTztnQ0FDekIsUUFBUSxFQUFFLElBQUk7NkJBQ2Y7NEJBQ0QsYUFBYSxFQUFFO2dDQUNiLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7Z0NBQ3ZCLGdCQUFnQixFQUFFLE9BQU87Z0NBQ3pCLFFBQVEsRUFBRSxJQUFJOzZCQUNmOzRCQUNELGdCQUFnQixFQUFFO2dDQUNoQixJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2dDQUN2QixnQkFBZ0IsRUFBRSxPQUFPO2dDQUN6QixRQUFRLEVBQUUsSUFBSTs2QkFDZjs0QkFDRCxXQUFXLEVBQUU7Z0NBQ1gsSUFBSSxFQUFFLENBQUMsS0FB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YykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyB9IGZyb20gXCIuLi9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VTY29wZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgQXR0cmlidXRlVHlwZSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgYXN0VG9Db2RlIGFzIGNvZGUgfSBmcm9tIFwiLi90ZXN0SGVscGVyc1wiO1xuXG5jb25zdCBhd3NQcm92aWRlclNjaGVtYSA9IHtcbiAgZm9ybWF0X3ZlcnNpb246IFwiMS4wXCIsXG4gIHByb3ZpZGVyX3NjaGVtYXM6IHtcbiAgICBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvYXdzXCI6IHtcbiAgICAgIHByb3ZpZGVyOiB7fSxcbiAgICAgIHJlc291cmNlX3NjaGVtYXM6IHtcbiAgICAgICAgYXdzX3MzX2J1Y2tldDoge1xuICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIGZvbzoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFtcIm1hcFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGF0YV9zb3VyY2Vfc2NoZW1hczoge1xuICAgICAgICBhd3NfYXZhaWxhYmlsaXR5X3pvbmVzOiB7XG4gICAgICAgICAgdmVyc2lvbjogMCxcbiAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBhbGxfYXZhaWxhYmlsaXR5X3pvbmVzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJib29sXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fa2luZDogXCJwbGFpblwiLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBleGNsdWRlX25hbWVzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogW1wic2V0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhjbHVkZV96b25lX2lkczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFtcInNldFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdyb3VwX25hbWVzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogW1wic2V0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbmFtZXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgem9uZV9pZHM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGVzdGluZ19tYXA6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBbXCJtYXBcIiwgXCJzdHJpbmdcIl0sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fa2luZDogXCJwbGFpblwiLFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJsb2NrX3R5cGVzOiB7XG4gICAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIG5lc3RpbmdfbW9kZTogXCJzZXRcIixcbiAgICAgICAgICAgICAgICBibG9jazoge1xuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFtcInNldFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fa2luZDogXCJwbGFpblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRpbWVvdXRzOiB7XG4gICAgICAgICAgICAgICAgbmVzdGluZ19tb2RlOiBcInNpbmdsZVwiLFxuICAgICAgICAgICAgICAgIGJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn07XG5cbmNvbnN0IGV4dGVybmFsUHJvdmlkZXJTY2hlbWEgPSB7XG4gIGZvcm1hdF92ZXJzaW9uOiBcIjEuMFwiLFxuICBwcm92aWRlcl9zY2hlbWFzOiB7XG4gICAgXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2V4dGVybmFsXCI6IHtcbiAgICAgIHByb3ZpZGVyOiB7fSxcbiAgICAgIHJlc291cmNlX3NjaGVtYXM6IHt9LFxuICAgICAgZGF0YV9zb3VyY2Vfc2NoZW1hczoge1xuICAgICAgICBleHRlcm5hbDoge1xuICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgYmxvY2s6IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgXCJUaGUgaWQgb2YgdGhlIGRhdGEgc291cmNlLiBUaGlzIHdpbGwgYWx3YXlzIGJlIHNldCB0byBgLWBcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByb2dyYW06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBbXCJsaXN0XCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgXCJBIGxpc3Qgb2Ygc3RyaW5ncywgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyB0aGUgcHJvZ3JhbSB0byBydW4gYW5kIHdob3NlIHN1YnNlcXVlbnQgZWxlbWVudHMgYXJlIG9wdGlvbmFsIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gdGhlIHByb2dyYW0uIFRlcnJhZm9ybSBkb2VzIG5vdCBleGVjdXRlIHRoZSBwcm9ncmFtIHRocm91Z2ggYSBzaGVsbCwgc28gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBlc2NhcGUgc2hlbGwgbWV0YWNoYXJhY3RlcnMgbm9yIGFkZCBxdW90ZXMgYXJvdW5kIGFyZ3VtZW50cyBjb250YWluaW5nIHNwYWNlcy5cIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogW1wibWFwXCIsIFwic3RyaW5nXCJdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgXCJBIG1hcCBvZiBzdHJpbmcgdmFsdWVzIHRvIHBhc3MgdG8gdGhlIGV4dGVybmFsIHByb2dyYW0gYXMgdGhlIHF1ZXJ5IGFyZ3VtZW50cy4gSWYgbm90IHN1cHBsaWVkLCB0aGUgcHJvZ3JhbSB3aWxsIHJlY2VpdmUgYW4gZW1wdHkgb2JqZWN0IGFzIGl0cyBpbnB1dC5cIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbl9raW5kOiBcInBsYWluXCIsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFtcIm1hcFwiLCBcInN0cmluZ1wiXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgIFwiQSBtYXAgb2Ygc3RyaW5nIHZhbHVlcyByZXR1cm5lZCBmcm9tIHRoZSBleHRlcm5hbCBwcm9ncmFtLlwiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd29ya2luZ19kaXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgXCJXb3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgcHJvZ3JhbS4gSWYgbm90IHN1cHBsaWVkLCB0aGUgcHJvZ3JhbSB3aWxsIHJ1biBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25fa2luZDogXCJwbGFpblwiLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAnVGhlIGBleHRlcm5hbGAgZGF0YSBzb3VyY2UgYWxsb3dzIGFuIGV4dGVybmFsIHByb2dyYW0gaW1wbGVtZW50aW5nIGEgc3BlY2lmaWMgcHJvdG9jb2wgKGRlZmluZWQgYmVsb3cpIHRvIGFjdCBhcyBhIGRhdGEgc291cmNlLCBleHBvc2luZyBhcmJpdHJhcnkgZGF0YSBmb3IgdXNlIGVsc2V3aGVyZSBpbiB0aGUgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24uXFxuXFxuKipXYXJuaW5nKiogVGhpcyBtZWNoYW5pc20gaXMgcHJvdmlkZWQgYXMgYW4gXCJlc2NhcGUgaGF0Y2hcIiBmb3IgZXhjZXB0aW9uYWwgc2l0dWF0aW9ucyB3aGVyZSBhIGZpcnN0LWNsYXNzIFRlcnJhZm9ybSBwcm92aWRlciBpcyBub3QgbW9yZSBhcHByb3ByaWF0ZS4gSXRzIGNhcGFiaWxpdGllcyBhcmUgbGltaXRlZCBpbiBjb21wYXJpc29uIHRvIGEgdHJ1ZSBkYXRhIHNvdXJjZSwgYW5kIGltcGxlbWVudGluZyBhIGRhdGEgc291cmNlIHZpYSBhbiBleHRlcm5hbCBwcm9ncmFtIGlzIGxpa2VseSB0byBodXJ0IHRoZSBwb3J0YWJpbGl0eSBvZiB5b3VyIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uIGJ5IGNyZWF0aW5nIGRlcGVuZGVuY2llcyBvbiBleHRlcm5hbCBwcm9ncmFtcyBhbmQgbGlicmFyaWVzIHRoYXQgbWF5IG5vdCBiZSBhdmFpbGFibGUgKG9yIG1heSBuZWVkIHRvIGJlIHVzZWQgZGlmZmVyZW50bHkpIG9uIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy5cXG5cXG4qKldhcm5pbmcqKiBUZXJyYWZvcm0gRW50ZXJwcmlzZSBkb2VzIG5vdCBndWFyYW50ZWUgYXZhaWxhYmlsaXR5IG9mIGFueSBwYXJ0aWN1bGFyIGxhbmd1YWdlIHJ1bnRpbWVzIG9yIGV4dGVybmFsIHByb2dyYW1zIGJleW9uZCBzdGFuZGFyZCBzaGVsbCB1dGlsaXRpZXMsIHNvIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBkYXRhIHNvdXJjZSB3aXRoaW4gY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYXBwbGllZCB3aXRoaW4gVGVycmFmb3JtIEVudGVycHJpc2UuJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uX2tpbmQ6IFwicGxhaW5cIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufTtcblxudHlwZSBHZXRTY29wZVBhcmFtcyA9IHtcbiAgcHJvdmlkZXI/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICByZXNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgZGF0YT86IHN0cmluZ1tdO1xuICB2YXJpYWJsZXM/OiBzdHJpbmdbXTtcbiAgbG9jYWxzPzogc3RyaW5nW107XG4gIGZvckVhY2hJdGVyYXRvck5hbWU/OiBzdHJpbmc7XG4gIHdpdGhpbk92ZXJyaWRlRXhwcmVzc2lvbj86IGJvb2xlYW47XG4gIHNjb3BlZFZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5mdW5jdGlvbiBnZXRTY29wZSh7XG4gIHByb3ZpZGVyLFxuICByZXNvdXJjZXMsXG4gIGRhdGEsXG4gIHZhcmlhYmxlcyxcbiAgbG9jYWxzLFxuICBmb3JFYWNoSXRlcmF0b3JOYW1lLFxuICBzY29wZWRWYXJpYWJsZXMsXG4gIHdpdGhpbk92ZXJyaWRlRXhwcmVzc2lvbiA9IGZhbHNlLFxufTogR2V0U2NvcGVQYXJhbXMgPSB7fSk6IFJlc291cmNlU2NvcGUge1xuICBjb25zdCBzY29wZVZhcmlhYmxlczogUmVzb3VyY2VTY29wZVtcInZhcmlhYmxlc1wiXSA9IHt9O1xuXG4gIHJlc291cmNlcz8uZm9yRWFjaCgodmFyTmFtZSkgPT4ge1xuICAgIGxldCBbcmVzb3VyY2VUeXBlLCByZXNvdXJjZU5hbWVdID0gdmFyTmFtZS5zcGxpdChcIi5cIik7XG4gICAgaWYgKCFyZXNvdXJjZU5hbWUpIHtcbiAgICAgIHJlc291cmNlTmFtZSA9IHZhck5hbWU7XG4gICAgICByZXNvdXJjZVR5cGUgPSBcImF3c19zM19idWNrZXRcIjtcbiAgICB9XG5cbiAgICBzY29wZVZhcmlhYmxlc1t2YXJOYW1lXSA9IHtcbiAgICAgIHJlc291cmNlOiByZXNvdXJjZVR5cGUsXG4gICAgICB2YXJpYWJsZU5hbWU6IHJlc291cmNlTmFtZSxcbiAgICB9O1xuICB9KTtcblxuICBkYXRhPy5mb3JFYWNoKCh2YXJOYW1lKSA9PiB7XG4gICAgc2NvcGVWYXJpYWJsZXNbdmFyTmFtZV0gPSB7XG4gICAgICByZXNvdXJjZTogXCJkYXRhLmF3c19zM19idWNrZXRcIixcbiAgICAgIHZhcmlhYmxlTmFtZTogdmFyTmFtZSxcbiAgICB9O1xuICB9KTtcblxuICB2YXJpYWJsZXM/LmZvckVhY2goKHZhck5hbWUpID0+IHtcbiAgICBzY29wZVZhcmlhYmxlc1t2YXJOYW1lXSA9IHtcbiAgICAgIHJlc291cmNlOiBcInZhclwiLFxuICAgICAgdmFyaWFibGVOYW1lOiB2YXJOYW1lLFxuICAgIH07XG4gIH0pO1xuXG4gIGxvY2Fscz8uZm9yRWFjaCgodmFyTmFtZSkgPT4ge1xuICAgIHNjb3BlVmFyaWFibGVzW3Zhck5hbWVdID0ge1xuICAgICAgcmVzb3VyY2U6IFwibG9jYWxcIixcbiAgICAgIHZhcmlhYmxlTmFtZTogdmFyTmFtZSxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBzY29wZSA9IHtcbiAgICBwcm92aWRlclNjaGVtYTogcHJvdmlkZXIgPz8ge30sXG4gICAgcHJvdmlkZXJHZW5lcmF0b3I6IHt9LFxuICAgIGNvbnN0cnVjdHM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgIHZhcmlhYmxlczogc2NvcGVWYXJpYWJsZXMsXG4gICAgaGFzVG9rZW5CYXNlZFR5cGVDb2VyY2lvbjogdHJ1ZSxcbiAgICBzY29wZWRWYXJpYWJsZXM6IHNjb3BlZFZhcmlhYmxlcyB8fCB7fSxcbiAgICBmb3JFYWNoSXRlcmF0b3JOYW1lLFxuICAgIHdpdGhpbk92ZXJyaWRlRXhwcmVzc2lvbixcbiAgICBub2RlSWRzOiBbXSxcbiAgICBpbXBvcnRhYmxlczogW10sXG4gICAgdG9wTGV2ZWxDb25maWc6IHt9LFxuICB9O1xuXG4gIHJldHVybiBzY29wZTtcbn1cblxuY29uc3QgZ2V0VHlwZSA9ICgpOiBBdHRyaWJ1dGVUeXBlID0+IFwic3RyaW5nXCI7XG5cbmRlc2NyaWJlKFwiZXhwcmVzc2lvblRvVHNcIiwgKCkgPT4ge1xuICB0ZXN0KFwiY29udmVydHMgYSBzaW1wbGUgc3RyaW5nIHRvIGEgc3RyaW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gXCJoZWxsb1wiO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcIlwiaGVsbG9cIlwiYCk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyBhIHNpbXBsZSBleHByZXNzaW9uIHdpdGggYSB0ZW1wbGF0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFwiJHsyMn1cIjtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXCJUb2tlbi5hc1N0cmluZygyMilcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydHMgYSB2YXJpYWJsZSByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIiR7dmFyLmZvb31cIjtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXCJmb28uc3RyaW5nVmFsdWVcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIHZhcmlhYmxlIHJlZmVyZW5jZSB3aXRoIHNuYWtlIGNhc2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIiR7dmFyLmZvb19iYXJ9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHZhcmlhYmxlczogW1wiZm9vX2JhclwiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoZm9vQmFyLnZhbHVlKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIGZ1bmN0aW9uIGNhbGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXFwke3JlcGxhY2UoXCJoZWxsb1wiLCBcImxcIiwgXCJ3XCIpfWA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5yZXBsYWNlKFwiaGVsbG9cIiwgXCJsXCIsIFwid1wiKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGFuIGV4cHJlc3Npb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXFwke3JlcGxhY2UoXCJoZWxsby1cXCR7MjIrMjJ9XCIsIFwiNDRcIiwgXCJ3b3JsZFwiKX1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ucmVwbGFjZShcImhlbGxvLVwiICsgVG9rZW4uYXNTdHJpbmcoT3AuYWRkKDIyLCAyMikpLCBcIjQ0XCIsIFwid29ybGRcIikpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBvZiBpdGVyYXRvciBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnJHtcImR5bmFtaWMtaW5ncmVzcy0ke2luZ3Jlc3Mua2V5fVwifSc7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICBzY29wZWRWYXJpYWJsZXM6IHtcbiAgICAgICAgaW5ncmVzczogXCJkeW5hbWljX2l0ZXJhdG9yMFwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJkeW5hbWljLWluZ3Jlc3MtXFwke1wiICsgVG9rZW4uYXNTdHJpbmcoZHluYW1pY19pdGVyYXRvcjAua2V5KSArIFwifVwiXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGEgdmFyaWFibGUgcmVmZXJlbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFxcJHt2YXIuZm9vX2Jhcn1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcImZvb19iYXJcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIC8vIFRPRE86IFRoaXMgc2VlbXMgYnJva2VuXG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoZm9vQmFyLnZhbHVlKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIHJlc291cmNlIHJlZmVyZW5jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcInNpbXBsZS1cXCR7YXdzX3MzX2J1Y2tldC5mb28uaWR9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZm9vXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoYFwiXCJzaW1wbGUtXFwke1wiICsgZm9vLmlkICsgXCJ9XCJcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIHJlc291cmNlIHJlZmVyZW5jZSB3aXRoIG5lc3RlZCBwcm9wZXJ0aWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwic2ltcGxlLVxcJHthd3NfczNfYnVja2V0LmZvby5wcm9wLnRlc3R9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZm9vXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcInNpbXBsZS1cXCR7XCIgKyBmb28ucHJvcC50ZXN0ICsgXCJ9XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYSBsb2NhbCByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJzaW1wbGUtXFwke2xvY2FsLmZvb31cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IGxvY2FsczogW1wiZm9vXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoYFwiXCJzaW1wbGUtXFwke1wiICsgZm9vICsgXCJ9XCJcImApO1xuICB9KTtcblxuICB0ZXN0KFwicGxhaW4gcmVzb3VyY2UgcmVmZXJlbmNlcyBpbiBhcml0aG1ldGljc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9XG4gICAgICBcIiR7YXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LmNvdW50ICsgYXdzX3MzX2J1Y2tldC5vdGhlcmJ1Y2tldC5jb3VudCB9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldFwiLCBcImF3c19zM19idWNrZXQub3RoZXJidWNrZXRcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKE9wLmFkZChleGFtcGxlYnVja2V0LmNvdW50LCBvdGhlcmJ1Y2tldC5jb3VudCkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJ1c2UgZnFuIGZvciBzcGxhdCByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXFwke2F3c19zM19idWNrZXQuZm9vLiouaWR9YDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgcmVzb3VyY2VzOiBbXCJhd3NfczNfYnVja2V0LmZvb1wiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKGZvbywgW1wiKlwiLCBcImlkXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcInVzZSBmcW4gaWYgcHJvcGVydHkgaXMgcHJlc2VudCBvbiBudW1lcmljIGFjY2VzcyB1c2luZyBkb3Qgbm90YXRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgXCIke2F3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldC5uZXR3b3JrX2ludGVyZmFjZS4wLmFjY2Vzc19jb25maWcuMC5hc3NpZ25lZF9uYXRfaXB9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldC5uZXR3b3JrSW50ZXJmYWNlLCBbXCIwXCIsIFwiYWNjZXNzX2NvbmZpZ1wiLCBcIjBcIiwgXCJhc3NpZ25lZF9uYXRfaXBcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwidXNlIGZxbiBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIG51bWVyaWMgYWNjZXNzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgIFwiJHthd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXQubmV0d29ya19pbnRlcmZhY2VbMF0uYWNjZXNzX2NvbmZpZ1swXS5hc3NpZ25lZF9uYXRfaXB9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldC5uZXR3b3JrSW50ZXJmYWNlLCBbXCIwXCIsIFwiYWNjZXNzX2NvbmZpZ1wiLCBcIjBcIiwgXCJhc3NpZ25lZF9uYXRfaXBcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwidXNlIG5vIGZxbiBpZiBwcm9wZXJ0eSBpcyBwcmVzZW50IG9uIG51bWVyaWMgYWNjZXNzIHVzaW5nIFtdXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgIFwiJHthd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXQubmV0d29ya19pbnRlcmZhY2VbMF0uYWNjZXNzX2NvbmZpZ1swXS5hc3NpZ25lZF9uYXRfaXB9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldC5uZXR3b3JrSW50ZXJmYWNlLCBbXCIwXCIsIFwiYWNjZXNzX2NvbmZpZ1wiLCBcIjBcIiwgXCJhc3NpZ25lZF9uYXRfaXBcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiZGV0ZWN0cyBzcGxhdCByZWZlcmVuY2Ugd2l0aGluIGZ1bmN0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gXCIke3Rvc2V0KGF3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldC4qKX1cIjtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgcmVzb3VyY2VzOiBbXCJhd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXRcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLnRvc2V0KEZuLmxvb2t1cE5lc3RlZChleGFtcGxlYnVja2V0LCBbXCIqXCJdKSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGNvbmRpdGlvbmFsXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgIFwiJHthd3Nfa21zX2tleS5rZXkuZGVsZXRpb25fd2luZG93X2luX2RheXMgPiAzID8gYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LmlkIDogW119XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX2ttc19rZXkua2V5XCIsIFwiZXhhbXBsZWJ1Y2tldFwiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoY29uZGl0aW9uYWwoT3AuZ3Qoa2V5LmRlbGV0aW9uV2luZG93SW5EYXlzLCAzKSwgZXhhbXBsZWJ1Y2tldC5pZCwgW10pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydHMgYSBmdW5jdGlvbiB3aXRoIHJlZmVyZW5jZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIiR7ZWxlbWVudChhd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXQsIDApLmlkfVwiO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldFwiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKEZuLmVsZW1lbnQoZXhhbXBsZWJ1Y2tldCwgMCksIFtcImlkXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIGEgZnVuY3Rpb24gd2l0aCBzcGxhdCByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIiR7ZWxlbWVudChhd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXQuKi5pZCwgMCl9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5lbGVtZW50KEZuLmxvb2t1cE5lc3RlZChleGFtcGxlYnVja2V0LCBbXCIqXCIsIFwiaWRcIl0pLCAwKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgZm9yIGxvb3BzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgIFwiJHt7IGZvciBuYW1lLCB1c2VyIGluIHZhci51c2VycyA6IHVzZXIucm9sZSA9PiBuYW1lLi4ufX1cIjtcblxuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJcXCR7eyBmb3IgbmFtZSwgdXNlciBpbiBcXCR7XCIgKyB1c2Vycy52YWx1ZSArIFwifSA6IHVzZXIucm9sZSA9PiBuYW1lLi4ufX1cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiZm9yIGV4cHJlc3Npb25zXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gXCJ7Zm9yIHMgaW4gdmFyLmxpc3QgOiBzID0+IHVwcGVyKHMpfVwiO1xuXG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcIlxcJHt7IGZvciBzIGluIFxcJHtcIiArIGxpc3QudmFsdWUgKyBcIn0gOiBzID0+IHVwcGVyKHMpfX1cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiZm9yIGxpc3QgZXhwcmVzc2lvbiBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBcIltmb3IgcyBpbiB2YXIubGlzdCA6IHVwcGVyKHMpXVwiO1xuXG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcIlxcJHtbIGZvciBzIGluIFxcJHtcIiArIGxpc3QudmFsdWUgKyBcIn0gOiB1cHBlcihzKV19XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImZvciBsaXN0IHdpdGggY29uZGl0aW9uYWxcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnW2ZvciBzIGluIHZhci5saXN0IDogdXBwZXIocykgaWYgcyAhPSBcIlwiXSc7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcIlxcJHtbIGZvciBzIGluIFxcJHtcIiArIGxpc3QudmFsdWUgKyBcIn0gOiB1cHBlcihzKSBpZiBzICE9IFxcXFxcIlxcXFxcIl19XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgcHJvcGVydHkgYWNjZXNzIHJlc291cmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFwiJHthd3NfczNfYnVja2V0LmV4YW1wbGVidWNrZXRbMF0uaWR9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHJlc291cmNlczogW1wiYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldCwgW1wiMFwiLCBcImlkXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgdW5hcnkgb3BlcmF0b3JzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFxcJHshdmFyLmVuYWJsZWR9YDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgdmFyaWFibGVzOiBbXCJlbmFibGVkXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgICgpID0+IFwiYm9vbFwiLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNCb29sZWFuKE9wLm5vdChlbmFibGVkLnZhbHVlKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgZnVuY3Rpb24gd2l0aCBhcnJheXMgYW5kIGNvbW1lbnRzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFxcJHtjb21wYWN0KFtcbiAgICAgICAgICAgICMgVGhlIGV4YW1wbGUgXCJidWNrZXRcIlxuICAgICAgICAgICAgYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LFxuICAgICAgICBcbiAgICAgICAgICAgICMgVGhlIFwiTGVhcm5cIiBzaW5nbGUgcGFnZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyBub3QgY29uZmlndXJlZCBpbiBhbGwgZW52aXJvbm1lbnRzLlxuICAgICAgICAgICAgdmFyLmlucHV0LFxuICAgICAgICAgIF0pfWA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXQuZXhhbXBsZWJ1Y2tldFwiXSxcbiAgICAgIHZhcmlhYmxlczogW1wiaW5wdXRcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIC8vIFRPRE86IFNlZSBpZiB3ZSBoYXZlIGEgd2F5IHRvIHByZXNlcnZlIGNvbW1lbnRzXG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4uY29tcGFjdChUb2tlbi5hc0xpc3QoW2V4YW1wbGVidWNrZXQsIGlucHV0LnZhbHVlXSkpKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCByZWZlcmVuY2VzIGZvciBzYW1lIHJlZmVyZW5jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcXCR7dmFyLmlucHV0ID09IFwidGVzdFwiID8gXCJhenVyZS1hZC1pbnRcIiA6IFwiYXp1cmUtYWQtXFwke3Zhci5pbnB1dH1cIn1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcImlucHV0XCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhjb25kaXRpb25hbChPcC5lcShpbnB1dC52YWx1ZSwgXCJ0ZXN0XCIpLCBcImF6dXJlLWFkLWludFwiLCBcImF6dXJlLWFkLVxcJHtcIiArIGlucHV0LnZhbHVlICsgXCJ9XCIpKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwibmVzdGVkIHZhcmlhYmxlIGFjY2Vzc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcXCR7ZWxlbWVudCh2YXIudGVzdDJbXCJ2YWwxXCJdLCAwKX1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcInRlc3QyXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5lbGVtZW50KEZuLmxvb2t1cE5lc3RlZCh0ZXN0Mi52YWx1ZSwgW1wiXFxcXFwidmFsMVxcXFxcIlwiXSksIDApKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29tcGxpY2F0ZWQgbmVzdGVkIGxvY2FsIHZhbHVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gXCIke2ZsYXR0ZW4odmFyLnZuZXRzWypdLnN1Ym5ldHNbKl0ubmFtZSl9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHZhcmlhYmxlczogW1widm5ldHNcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmZsYXR0ZW4oRm4ubG9va3VwTmVzdGVkKHZuZXRzLnZhbHVlLCBbXCIqXCIsIFwic3VibmV0c1wiLCBcIipcIiwgXCJuYW1lXCJdKSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIFRPSU1QUk9WRTogSSBkb24ndCB0aGluayB3ZSBjYW4gaGFuZGxlIHRoaXMgY2FzZSB5ZXQsIHNpbmNlIHRoZSB2YXJpYWJsZVxuICAvLyBuZWVkcyB0byBiZSB3cmFwcGVkIGluIGFuIGl0ZXJhdG9yLiBJJ20gbGVhdmluZyB0aGlzIGluLCBidXQgaXQncyBicm9rZW5cbiAgdGVzdChcImNvbXBsaWNhdGVkIG5lc3RlZCB2YXJpYWJsZSBhY2Nlc3Mgd2l0aCBtYXBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgeyBcbiAgICBmb3Igdm5ldCBpbiB2YXIudm5ldHNbKl06XG4gICAgKHZuZXQudm5ldF9uYW1lKSA9PiB2bmV0LnN1Ym5ldHNbKl0ubmFtZVxuICB9YDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgdmFyaWFibGVzOiBbXCJ2bmV0c1wiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJcXCR7eyBmb3Igdm5ldCBpbiBcXCR7XCIgKyBGbi5sb29rdXBOZXN0ZWQodm5ldHMudmFsdWUsIFtcIipcIl0pICsgXCJ9IDogKHZuZXQudm5ldF9uYW1lKSA9PiB2bmV0LnN1Ym5ldHNbKl0ubmFtZX19XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbXBsaWNhdGVkIG5lc3RlZCB2YXJpYWJsZSBhY2Nlc3Mgd2l0aCBsaXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFxcJHtmbGF0dGVuKFtcbiAgICBmb3IgaywgdiBpbiB2YXIucm91dGUgOiBbXG4gICAgICBmb3IgbiwgcyBpbiB2IDogW1xuICAgICAgICB7XG4gICAgICAgICAga2V5ID0gayxcbiAgICAgICAgICBuYW1lID0gbixcbiAgICAgICAgICBzdmNfdXJsID0gc1xuICAgICAgICB9XG4gICAgICBdXG4gICAgXVxuICBdKX1gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcInJvdXRlXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5mbGF0dGVuKFwiXFwke1sgZm9yIGssIHYgaW4gXFwke1wiICsgcm91dGUudmFsdWUgKyBcIn0gOiBbXFxcXG4gICAgICBmb3IgbiwgcyBpbiB2IDogW1xcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAga2V5ID0gayxcXFxcbiAgICAgICAgICBuYW1lID0gbixcXFxcbiAgICAgICAgICBzdmNfdXJsID0gc1xcXFxuICAgICAgICB9XFxcXG4gICAgICBdXFxcXG4gICAgXV19XCIpKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwic2ltcGxlIGxvY2FsIHZhcmlhYmxlIGFjY2Vzc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFwiJHshbG9jYWwuZW5hYmxlZH1cIjtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgbG9jYWxzOiBbXCJlbmFibGVkXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhPcC5ub3QoZW5hYmxlZCkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJtdWx0aSBsb2NhbCBhY2Nlc3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgJ1wiJHtsb2NhbC5zZXJ2aWNlX25hbWV9LCR7bG9jYWwub3duZXJ9LCR7bG9jYWwuaXNfaXRfZ3JlYXR9LCR7bG9jYWwuaG93X21hbnl9XCInO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgbG9jYWxzOiBbXCJzZXJ2aWNlX25hbWVcIiwgXCJvd25lclwiLCBcImlzX2l0X2dyZWF0XCIsIFwiaG93X21hbnlcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlwiXFwke1wiICsgc2VydmljZU5hbWUgKyBcIn0sXFwke1wiICsgb3duZXIgKyBcIn0sXFwke1wiICsgaXNJdEdyZWF0ICsgXCJ9LFxcJHtcIiArIGhvd01hbnkgKyBcIn1cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiYmluYXJ5IG9wZXJhdGlvbnMgd2l0aGluIGxpdGVyYWxzIGFuZCB2YXJpYWJsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnXCIke3Zhci50ZXN0fSArIDFcIic7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IHZhcmlhYmxlczogW1widGVzdFwiXSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJcXCR7XCIgKyB0ZXN0LnZhbHVlICsgXCJ9ICsgMVwiXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJsb2NhbCB2YXJpYWJsZSBhY2Nlc3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnXCIke2xvY2FsLmVuYWJsZWR9XCInO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyBsb2NhbHM6IFtcImVuYWJsZWRcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXCJlbmFibGVkXCJgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIHRyYXZlcnNhbHMgdGhhdCBjYW5ub3QgYmUgcmVmZXJlbmNlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFwiJHtzZWxmLnBhdGh9XCI7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhUZXJyYWZvcm1TZWxmLmdldEFueShcInBhdGhcIikpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyBqb2luIGZ1bmN0aW9uIHdpdGggdmFyaWFibGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gJyR7am9pbihcIi1cIiwgW3Zhci50YWdzLmFwcCwgdmFyLnRhZ3MuZW52XSl9JztcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHsgdmFyaWFibGVzOiBbXCJ0YWdzXCJdIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5qb2luKFwiLVwiLCBUb2tlbi5hc0xpc3QoW0ZuLmxvb2t1cE5lc3RlZCh0YWdzLnZhbHVlLCBbXCJhcHBcIl0pLCBGbi5sb29rdXBOZXN0ZWQodGFncy52YWx1ZSwgW1wiZW52XCJdKV0pKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIGpvaW4gZnVuY3Rpb24gd2l0aCBtYW55IGFyZ3VtZW50cyB2YXJpYWJsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgJyR7am9pbihcIi1cIiwgdmFyLnRhZ3MuYXBwLCB2YXIudGFncy5lbnYsIHZhci50YWdzLm90aGVyKX0nO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoeyB2YXJpYWJsZXM6IFtcInRhZ3NcIl0gfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKEZuLmpvaW4oXCItXCIsIFRva2VuLmFzTGlzdChGbi5jb25jYXQoW0ZuLmxvb2t1cE5lc3RlZCh0YWdzLnZhbHVlLCBbXCJhcHBcIl0pLCBGbi5sb29rdXBOZXN0ZWQodGFncy52YWx1ZSwgW1wiZW52XCJdKSwgRm4ubG9va3VwTmVzdGVkKHRhZ3MudmFsdWUsIFtcIm90aGVyXCJdKV0pKSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJkb2Vzbid0IHdyYXAgYW55IGV4dHJhIHRlbXBsYXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcImFwcC1cXCR7dGVycmFmb3JtLndvcmtzcGFjZX1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcImFwcC1cXCR7dGVycmFmb3JtLndvcmtzcGFjZX1cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydHMgYSBmb3IgZXhwcmVzc2lvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBbZm9yIHJlY29yZCBpbiBhd3Nfcm91dGU1M19yZWNvcmQuZXhhbXBsZSA6IHJlY29yZC5mcWRuXWA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJcIlxcJHtbIGZvciByZWNvcmQgaW4gXFwke1wiICsgZXhhbXBsZS5mcW4gKyBcIn0gOiByZWNvcmQuZnFkbl19XCJcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnRzIGEgZGF0YSBzb3VyY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZGF0YS5hd3Nfcm91dGU1M196b25lLmV4YW1wbGUuem9uZV9pZH1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhleGFtcGxlLnpvbmVJZClcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYW4gZWFjaCBleHByZXNzaW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2VhY2gudmFsdWUubmFtZX1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7IGZvckVhY2hJdGVyYXRvck5hbWU6IFwibXlJdGVyYXRvclwiIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQobXlJdGVyYXRvci52YWx1ZSwgW1wibmFtZVwiXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyBhIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24gY29udGFpbmluZyBhIHJlc291cmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2VsZW1lbnQoYXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LCAwKS5pZH1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoRm4uZWxlbWVudChleGFtcGxlYnVja2V0LCAwKSwgW1wiaWRcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIGZ1bmN0aW9uIHdpdGggcmVmZXJlbmNlcyB3aXRoIHNwbGF0c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcIlxcJHtjb25jYXQodmFyLnByaXZhdGVfc3VibmV0cy4qLmlkLCB2YXIucHVibGljX3N1Ym5ldHMuKi5pZCl9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgdmFyaWFibGVzOiBbXCJwcml2YXRlX3N1Ym5ldHNcIiwgXCJwdWJsaWNfc3VibmV0c1wiXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4uY29uY2F0KFtGbi5sb29rdXBOZXN0ZWQocHJpdmF0ZVN1Ym5ldHMudmFsdWUsIFtcIipcIiwgXCJpZFwiXSksIEZuLmxvb2t1cE5lc3RlZChwdWJsaWNTdWJuZXRzLnZhbHVlLCBbXCIqXCIsIFwiaWRcIl0pXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IGEgaXRlcmF0b3IgdmFyaWFibGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZWFjaC5rZXl9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgdmFyaWFibGVzOiBbXCJwcml2YXRlX3N1Ym5ldHNcIiwgXCJwdWJsaWNfc3VibmV0c1wiXSxcbiAgICAgIGZvckVhY2hJdGVyYXRvck5hbWU6IFwibXlJdGVyYXRvclwiLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhteUl0ZXJhdG9yLmtleSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYSBzZWxmIHJlZmVyZW5jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcIlxcJHtzZWxmLnN1Ym5ldC5pZH1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICB2YXJpYWJsZXM6IFtcInByaXZhdGVfc3VibmV0c1wiLCBcInB1YmxpY19zdWJuZXRzXCJdLFxuICAgICAgZm9yRWFjaEl0ZXJhdG9yTmFtZTogXCJteUl0ZXJhdG9yXCIsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKFRlcnJhZm9ybVNlbGYuZ2V0QW55KFwic3VibmV0LmlkXCIpKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBoZXJlZG9jc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGA8PEVPRlxuW3tcbiAgICBcIkNvbmRpdGlvblwiOiB7XG4gICAgICAgIFwiS2V5UHJlZml4RXF1YWxzXCI6IFwiZG9jcy9cIlxuICAgIH0sXG4gICAgXCJSZWRpcmVjdFwiOiB7XG4gICAgICAgIFwiUmVwbGFjZUtleVByZWZpeFdpdGhcIjogXCJkb2N1bWVudHMvXCJcbiAgICB9XG59XVxuRU9GXG5gO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiXCJbe1xcXFxuICAgIFxcXFxcIkNvbmRpdGlvblxcXFxcIjoge1xcXFxuICAgICAgICBcXFxcXCJLZXlQcmVmaXhFcXVhbHNcXFxcXCI6IFxcXFxcImRvY3MvXFxcXFwiXFxcXG4gICAgfSxcXFxcbiAgICBcXFxcXCJSZWRpcmVjdFxcXFxcIjoge1xcXFxuICAgICAgICBcXFxcXCJSZXBsYWNlS2V5UHJlZml4V2l0aFxcXFxcIjogXFxcXFwiZG9jdW1lbnRzL1xcXFxcIlxcXFxuICAgIH1cXFxcbn1dXFxcXG5cIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBoZXJlZG9jcyB3aXRob3V0IGEgdHJhaWxpbmcgbmV3bGluZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGA8PEVPRlxuaGVsbG8gd29ybGRcbkVPRmA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGdldFR5cGUsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoYFwiXCJoZWxsbyB3b3JsZFxcXFxuXCJcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBpbmRlbnRlZCBoZXJlZG9jc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGA8PC1FT0ZcbiAgICAgICAgICAgICAgaGVsbG8gd29ybGRcbiAgICAgICAgICBFT0ZgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KGBcIlwiaGVsbG8gd29ybGRcXFxcblwiXCJgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgb3ZlcnJpZGUgZXhwcmVzc2lvbnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnXCIke3JlcXVpcmVkX3Jlc291cmNlX2FjY2Vzcy52YWx1ZVtcInJlc291cmNlX2FjY2Vzc1wiXX1cIic7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICB3aXRoaW5PdmVycmlkZUV4cHJlc3Npb246IHRydWUsXG4gICAgICBzY29wZWRWYXJpYWJsZXM6IHtcbiAgICAgICAgcmVxdWlyZWRfcmVzb3VyY2VfYWNjZXNzOiBcImR5bmFtaWMtYmxvY2tcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlwiXFwke3JlcXVpcmVkX3Jlc291cmNlX2FjY2Vzcy52YWx1ZVtcXFxcXCJyZXNvdXJjZV9hY2Nlc3NcXFxcXCJdfVwiXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IHVzaW5nIG9wZXJhdGlvbnMgd2hpbGUgY29udGFpbmluZyBzdWJzdHJpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAnXCIke2xlbmd0aCh2YXIuaW1hZ2VfaWQpID4gNCAmJiBzdWJzdHIodmFyLmltYWdlX2lkLCAwLCA0KSA9PSBcImFtaS1cIn1cIic7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7fSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIlRva2VuLmFzU3RyaW5nKE9wLmFuZChPcC5ndChGbi5sZW5ndGhPZihpbWFnZUlkLnZhbHVlKSwgNCksIE9wLmVxKEZuLnN1YnN0cihpbWFnZUlkLnN0cmluZ1ZhbHVlLCAwLCA0KSwgXCJhbWktXCIpKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYSBkYXRhIHNvdXJjZSB3aXRoIG51bWVyaWMgYWNjZXNzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHByZXNzaW9uID0gYFwiXFwke2RhdGEuYXdzX2F2YWlsYWJpbGl0eV96b25lcy5jaGFuZ2VtZV9hel9saXN0X2Vic19zbmFwc2hvdC5uYW1lc1swXX1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICBwcm92aWRlcjogYXdzUHJvdmlkZXJTY2hlbWEsXG4gICAgICBkYXRhOiBbXCJhd3Nfc3VibmV0X2lkc1wiXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKGNoYW5nZW1lQXpMaXN0RWJzU25hcHNob3QubmFtZXMsIFtcIjBcIl0pKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIHJlZmVyZW5jZSB0byBhIG1hcCBhY2Nlc3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZGF0YS5hd3NfYXZhaWxhYmlsaXR5X3pvbmVzLmNoYW5nZW1lX2F6X2xpc3RfZWJzX3NuYXBzaG90LnRlc3RpbmdfbWFwLmZvb31cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICBwcm92aWRlcjogYXdzUHJvdmlkZXJTY2hlbWEsXG4gICAgICBkYXRhOiBbXCJhd3Nfc3VibmV0X2lkc1wiXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKGNoYW5nZW1lQXpMaXN0RWJzU25hcHNob3QsIFtcInRlc3RpbmdfbWFwXCIsIFwiZm9vXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgYXR0cmlidXRlIHVwIHRvIGEgbWFwIGFuZCBub3Qgd2l0aGluIGF0dHJpYnV0ZSByZWZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZGF0YS5hd3NfYXZhaWxhYmlsaXR5X3pvbmVzLmNoYW5nZW1lX2F6X2xpc3RfZWJzX3NuYXBzaG90LnRlc3RpbmdfbWFwfVwiYDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKHtcbiAgICAgIHByb3ZpZGVyOiBhd3NQcm92aWRlclNjaGVtYSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgICgpID0+IFtcIm1hcFwiLCBcInN0cmluZ1wiXSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmdNYXAoY2hhbmdlbWVBekxpc3RFYnNTbmFwc2hvdC50ZXN0aW5nTWFwKVwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiZG9uJ3QgY29udmVydCBleHRlcm5hbCB1bmtub3duIGZpZWxkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcIlxcJHtkYXRhLmV4dGVybmFsLmNoYW5nZW1lX2V4dGVybmFsX3RodW1icHJpbnRfZGF0YS5yZXN1bHQudGh1bWJwcmludH1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICBwcm92aWRlcjogZXh0ZXJuYWxQcm92aWRlclNjaGVtYSxcbiAgICAgIGRhdGE6IFtcImF3c19zdWJuZXRfaWRzXCJdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgKCkgPT4gW1wibWFwXCIsIFwic3RyaW5nXCJdLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmdNYXAoRm4ubG9va3VwTmVzdGVkKGNoYW5nZW1lRXh0ZXJuYWxUaHVtYnByaW50RGF0YSwgW1wicmVzdWx0XCIsIFwidGh1bWJwcmludFwiXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0IHJlc291cmNlIHJlZmVyZW5jZSB3aXRoIG1hcCBhdHRyaWJ1dGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7YXdzX3MzX2J1Y2tldC5leGFtcGxlYnVja2V0LmZvby5iYXJ9XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgcHJvdmlkZXI6IGF3c1Byb3ZpZGVyU2NoZW1hLFxuICAgICAgcmVzb3VyY2VzOiBbXCJhd3NfczNfYnVja2V0XCJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgICgpID0+IFwic3RyaW5nXCIsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJUb2tlbi5hc1N0cmluZyhGbi5sb29rdXBOZXN0ZWQoZXhhbXBsZWJ1Y2tldCwgW1wiZm9vXCIsIFwiYmFyXCJdKSlcImAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdChcImNvbnZlcnQgY29tcGxleCB2YXJpYWJsZSByZWZlcmVuY2UgaW4gdGVtcGxhdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7dmFyLmRlZmF1bHRfdGFncy5wcm9qZWN0fS1jbGllbnQtdGdcImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICBwcm92aWRlcjogYXdzUHJvdmlkZXJTY2hlbWEsXG4gICAgICByZXNvdXJjZXM6IFtcImF3c19zM19idWNrZXRcIl0sXG4gICAgICB2YXJpYWJsZXM6IFtcImRlZmF1bHRfdGFnc1wiXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICAoKSA9PiBcInN0cmluZ1wiLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKGRlZmF1bHRUYWdzLnZhbHVlLCBbXCJwcm9qZWN0XCJdKSkgKyBcIi1jbGllbnQtdGdcIlwiYCxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBib29sZWFuIHZhbHVlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcIlxcJHtmYWxzZX1cImA7XG4gICAgY29uc3Qgc2NvcGUgPSBnZXRTY29wZSh7XG4gICAgICBwcm92aWRlcjogYXdzUHJvdmlkZXJTY2hlbWEsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgKCkgPT4gXCJib29sXCIsXG4gICAgKTtcbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoYFwiZmFsc2VcImApO1xuICB9KTtcblxuICB0ZXN0KFwiY29udmVydCBhIGRhdGEgc291cmNlIHdpdGggY291bnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7ZGF0YS5hd3NfYXZhaWxhYmlsaXR5X3pvbmVzLmF2YWlsYWJsZS5uYW1lc1tjb3VudC5pbmRleF19XCJgO1xuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoe1xuICAgICAgcHJvdmlkZXI6IGF3c1Byb3ZpZGVyU2NoZW1hLFxuICAgICAgZGF0YTogW1wiYXdzX2F2YWlsYWJpbGl0eV96b25lc1wiXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4ubG9va3VwTmVzdGVkKGF2YWlsYWJsZS5uYW1lcywgW1wiXFwke2NvdW50LmluZGV4fVwiXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJhY2NlcHQgZXNjYXBlZCBxdW90ZXMgd2l0aGluIHN0cmluZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcIlxcJHtqc29uZW5jb2RlKHtcbiAgICAgICAgICBcIlN0YXRlbWVudFwiID0gW3tcbiAgICAgICAgICAgIFwiQWN0aW9uXCIgPSBcInMzOipcIixcbiAgICAgICAgICAgIFwiRWZmZWN0XCIgPSBcIkFsbG93XCIsXG4gICAgICAgICAgfV0sXG4gICAgICAgIH0pfVwiYDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuICAgIGV4cGVjdChjb2RlKHJlc3VsdCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChgXG4gICAgICBcIlRva2VuLmFzU3RyaW5nKEZuLmpzb25lbmNvZGUoe1xuICAgICAgICBcIlN0YXRlbWVudFwiOiBbe1xuICAgICAgICAgIFwiQWN0aW9uXCI6IFwiczM6KlwiLFxuICAgICAgICAgIFwiRWZmZWN0XCI6IFwiQWxsb3dcIlxuICAgICAgICB9XVxuICAgICAgfSkpXCJcbiAgICBgKTtcbiAgfSk7XG5cbiAgdGVzdChcInN1cHBvcnQgdmFyaWFkaWMgcGFyYW1ldGVycyBpbiBhbnkgcG9zaXRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBgXCJcXCR7Y2lkcnN1Ym5ldHMoXCJmZDAwOmZkMTI6MzQ1Njo3ODkwOjovNTZcIiwgMTYsIDE2LCAxNiwgMzIpfVwiYDtcbiAgICBjb25zdCBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZ2V0VHlwZSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGNvZGUocmVzdWx0KSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiVG9rZW4uYXNTdHJpbmcoRm4uY2lkcnN1Ym5ldHMoXCJmZDAwOmZkMTI6MzQ1Njo3ODkwOjovNTZcIiwgWzE2LCAxNiwgMTYsIDMyXSkpXCJgLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoXCJjb252ZXJ0cyB0ZW1wbGF0ZSBleHByZXNzaW9uIHdpdGggZXNjYXBlZCAke30gZXhwcmVzc2lvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9ICdbXCIkJHtwYXRoOm5hbWUuZ2l2ZW5OYW1lfVwiXSc7IC8vIGZyb20gYXdzX3Nzb2FkbWluX2luc3RhbmNlX2FjY2Vzc19jb250cm9sX2F0dHJpYnV0ZXMgZXhhbXBsZVxuICAgIGNvbnN0IHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGV4cHJlc3Npb24sXG4gICAgICBnZXRUeXBlLFxuICAgICk7XG5cbiAgICBleHBlY3QoY29kZShyZXN1bHQpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJbXCIkXFwke3BhdGg6bmFtZS5naXZlbk5hbWV9XCJdXCJgLFxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -119,7 +119,7 @@ const valueToTs = async (scope, item, path, isModule = false) => {
119
119
  return undefined;
120
120
  }
121
121
  if (key === "dynamic") {
122
- const { for_each, ...others } = value;
122
+ const { for_each: _for_each, ...others } = value;
123
123
  const dynamicRef = Object.keys(others)[0];
124
124
  return t.objectProperty(t.identifier(scope.withinOverrideExpression
125
125
  ? dynamicRef
@@ -469,7 +469,7 @@ async function local(scope, key, id, item, graph) {
469
469
  }
470
470
  exports.local = local;
471
471
  async function modules(scope, key, id, item, graph) {
472
- const [{ source, version, ...props }] = item;
472
+ const [{ source, version: _version, ...props }] = item;
473
473
  const moduleConstraint = new provider_generator_1.TerraformModuleConstraint(source);
474
474
  return asExpression(scope, moduleConstraint.className, key, props, true, false, getReference(graph, id), undefined);
475
475
  }
@@ -511,7 +511,7 @@ async function imports(scope, _id, item, graph) {
511
511
  }
512
512
  exports.imports = imports;
513
513
  async function provider(scope, key, id, item, graph) {
514
- const { version, ...props } = item;
514
+ const { version: _version, ...props } = item;
515
515
  const importKey = key === "null" ? "NullProvider" : key;
516
516
  return asExpression(scope, `${importKey}.${(0, utils_1.pascalCase)(key)}Provider`, key, props, false, true, getReference(graph, id), undefined);
517
517
  }
@@ -673,4 +673,4 @@ function generateConfigType(name, config) {
673
673
  return t.tsInterfaceDeclaration(t.identifier(name), undefined, undefined, t.tsInterfaceBody(Object.entries(config).map(([key, _value]) => t.tsPropertySignature(t.identifier(key), t.tSTypeAnnotation(t.tsAnyKeyword())))));
674
674
  }
675
675
  exports.generateConfigType = generateConfigType;
676
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9nZW5lcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxpRUFBd0M7QUFDeEMsK0RBQXVDO0FBQ3ZDLGdEQUFrQztBQUVsQyx3REFBZ0M7QUFTaEMsbUNBQWtFO0FBVWxFLCtDQUE4RTtBQUU5RSw2Q0FBa0Q7QUFDbEQsa0VBR21DO0FBQ25DLHVEQUkyQjtBQUMzQiw0Q0FBMEU7QUFDMUUsOENBQWdFO0FBQ2hFLHFEQUE4RTtBQUM5RSwyQ0FJcUI7QUFDckIseUNBQTJDO0FBQzNDLCtDQUF3RDtBQUV4RCxTQUFTLFlBQVksQ0FBQyxLQUFvQixFQUFFLEVBQVU7SUFDcEQsY0FBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXpDLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixjQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixTQUFTLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsY0FBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkQsY0FBTSxDQUFDLEtBQUssQ0FDVix1QkFBdUIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUM3RCxDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUMsZ0JBQWdC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RCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBWSxFQUNaLE1BQXFDO0lBRXJDLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixDQUM3QixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUNsQixTQUFTLEVBQ1QsU0FBUyxFQUNULENBQUMsQ0FBQyxlQUFlLENBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQzNDLENBQUMsQ0FBQyxtQkFBbUIsQ0FDbkIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDakIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUNyQyxDQUNGLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQWpCRCxnREFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IGdlbmVyYXRlIGZyb20gXCJAYmFiZWwvZ2VuZXJhdG9yXCI7XG5pbXBvcnQgdGVtcGxhdGUgZnJvbSBcIkBiYWJlbC90ZW1wbGF0ZVwiO1xuaW1wb3J0ICogYXMgdCBmcm9tIFwiQGJhYmVsL3R5cGVzXCI7XG5pbXBvcnQgeyBEaXJlY3RlZEdyYXBoIH0gZnJvbSBcImdyYXBob2xvZ3lcIjtcbmltcG9ydCBwcmV0dGllciBmcm9tIFwicHJldHRpZXJcIjtcblxuaW1wb3J0IHtcbiAgVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgUHJvZ3JhbVNjb3BlLFxuICBSZXNvdXJjZVNjb3BlLFxuICBJbXBvcnRhYmxlQ29uc3RydWN0LFxuICBBdHRyaWJ1dGVQYXRoLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgY2FtZWxDYXNlLCBsb2dnZXIsIHBhc2NhbENhc2UsIHVuaXF1ZUlkIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIFJlc291cmNlLFxuICBUZXJyYWZvcm1Db25maWcsXG4gIE1vZHVsZSxcbiAgUHJvdmlkZXIsXG4gIFZhcmlhYmxlLFxuICBPdXRwdXQsXG4gIEltcG9ydCxcbn0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMsIGV4cHJlc3Npb25Bc3QgfSBmcm9tIFwiLi9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgUmVmZXJlbmNlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGZpbmRVc2VkUmVmZXJlbmNlcyB9IGZyb20gXCIuL3JlZmVyZW5jZXNcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQsXG4gIGVzY2FwZUF0dHJpYnV0ZU5hbWUsXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5pbXBvcnQge1xuICBnZXRUeXBlQXRQYXRoLFxuICBpc01hcEF0dHJpYnV0ZSxcbiAgZ2V0RGVzaXJlZFR5cGUsXG59IGZyb20gXCIuL3RlcnJhZm9ybVNjaGVtYVwiO1xuaW1wb3J0IHsgRXJyb3JzLCBBdHRyaWJ1dGVUeXBlLCBCbG9ja1R5cGUsIFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgVEZFeHByZXNzaW9uU3ludGF4VHJlZSBhcyB0ZXggfSBmcm9tIFwiQGNka3RuL2hjbDJqc29uXCI7XG5pbXBvcnQgeyBleHRyYWN0RHluYW1pY0Jsb2NrcywgaXNOZXN0ZWREeW5hbWljQmxvY2sgfSBmcm9tIFwiLi9keW5hbWljLWJsb2Nrc1wiO1xuaW1wb3J0IHtcbiAgY29uc3RydWN0QXN0LFxuICByZWZlcmVuY2VUb1ZhcmlhYmxlTmFtZSxcbiAgdmFyaWFibGVOYW1lLFxufSBmcm9tIFwiLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IHNuYWtlQ2FzZSB9IGZyb20gXCJjZGt0bi9saWIvdXRpbFwiO1xuaW1wb3J0IHsgZmlsbFdpdGhDb25maWdBY2Nlc3NvcnMgfSBmcm9tIFwiLi9wYXJ0aWFsQ29kZVwiO1xuXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2UoZ3JhcGg6IERpcmVjdGVkR3JhcGgsIGlkOiBzdHJpbmcpIHtcbiAgbG9nZ2VyLmRlYnVnKGBGaW5kaW5nIHJlZmVyZW5jZSBmb3IgJHtpZH1gKTtcbiAgY29uc3QgbmVpZ2hib3JzID0gZ3JhcGgub3V0TmVpZ2hib3JzKGlkKTtcblxuICBpZiAobmVpZ2hib3JzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIG5laWdoYm9ycyAke25laWdoYm9yc30gZm9yICR7aWR9YCk7XG4gICAgY29uc3QgZWRnZSA9IGdyYXBoLmRpcmVjdGVkRWRnZShpZCwgbmVpZ2hib3JzWzBdKTtcblxuICAgIGlmIChlZGdlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvdW5kIGZpcnN0IGVkZ2UgJHtlZGdlfSBmb3IgJHtpZH1gKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJldHVybmluZyByZWZlcmVuY2UgJHtncmFwaC5nZXRFZGdlQXR0cmlidXRlKGVkZ2UsIFwicmVmXCIpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdyYXBoLmdldEVkZ2VBdHRyaWJ1dGUoZWRnZSwgXCJyZWZcIikgYXMgUmVmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvdW5kIG5vIGVkZ2UgZm9yICR7aWR9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRyaWJ1dGVOYW1lVG9DZGt0Zk5hbWUobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBlc2NhcGVBdHRyaWJ1dGVOYW1lKGNhbWVsQ2FzZShuYW1lKSk7XG59XG5cbmV4cG9ydCBjb25zdCB2YWx1ZVRvVHMgPSBhc3luYyAoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBpdGVtOiBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLFxuICBwYXRoOiBzdHJpbmcsXG4gIGlzTW9kdWxlID0gZmFsc2UsXG4pOiBQcm9taXNlPHQuRXhwcmVzc2lvbj4gPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBpdGVtKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaWYgKFxuICAgICAgICAoYXdhaXQgZmluZFVzZWRSZWZlcmVuY2VzKHNjb3BlLm5vZGVJZHMsIGl0ZW0pKS5zb21lKChyZWYpID0+XG4gICAgICAgICAgcGF0aC5zdGFydHNXaXRoKHJlZi5yZWZlcmVuY2VlLmlkKSxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0LnN0cmluZ0xpdGVyYWwoaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoc2NvcGUsIGBcIiR7aXRlbX1cImAsICgpID0+XG4gICAgICAgIGdldERlc2lyZWRUeXBlKHNjb3BlLCBwYXRoKSxcbiAgICAgICk7XG5cbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhzY29wZSwgYCR7aXRlbX1gLCAoKSA9PlxuICAgICAgICBnZXREZXNpcmVkVHlwZShzY29wZSwgcGF0aCksXG4gICAgICApO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoc2NvcGUsIGAke2l0ZW19YCwgKCkgPT5cbiAgICAgICAgZ2V0RGVzaXJlZFR5cGUoc2NvcGUsIHBhdGgpLFxuICAgICAgKTtcbiAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdC5udWxsTGl0ZXJhbCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgaXRlcmF0b3JzIGFuZCBkeW5hbWljIGJsb2NrcyB3ZSBwdXQgdGhlIGNvcnJlY3QgVFMgZXhwcmVzc2lvbiBpbiB0aGUgY29uZmlnIGFoZWFkIG9mIHRpbWVcbiAgICAgIGlmICh0LmlzTm9kZShpdGVtKSAmJiB0LmlzRXhwcmVzc2lvbihpdGVtKSkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXR0cmlidXRlVHlwZSA9IGdldFR5cGVBdFBhdGgoc2NvcGUucHJvdmlkZXJTY2hlbWEsIHBhdGgpO1xuXG4gICAgICBmdW5jdGlvbiBzaG91bGRSZW1vdmVBcnJheUJhc2VkT25UeXBlKFxuICAgICAgICBhdHRyaWJ1dGVUeXBlOiBTY2hlbWEgfCBBdHRyaWJ1dGVUeXBlIHwgQmxvY2tUeXBlIHwgbnVsbCxcbiAgICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZVR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoZSBkZWZhdWx0IGFzc3VtcHRpb24gaXMgd2UgbmVlZCB0aGUgYXJyYXlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcHMgYW5kIG9iamVjdCBkb24ndCBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXR0cmlidXRlVHlwZSkgJiZcbiAgICAgICAgICAoYXR0cmlidXRlVHlwZVswXSA9PT0gXCJtYXBcIiB8fCBhdHRyaWJ1dGVUeXBlWzBdID09PSBcIm9iamVjdFwiKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGl0J3MgYSBibG9jayB0eXBlIHdpdGggbWF4X2l0ZW1zID0gMSB3ZSBkb24ndCBuZWVkIHRvIHdyYXAgaXQgaW4gYW4gYXJyYXlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgXCJtYXhfaXRlbXNcIiBpbiBhdHRyaWJ1dGVUeXBlICYmXG4gICAgICAgICAgYXR0cmlidXRlVHlwZS5tYXhfaXRlbXMgPT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVud3JhcHBlZEl0ZW0gPVxuICAgICAgICBBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgIChzaG91bGRSZW1vdmVBcnJheUJhc2VkT25UeXBlKGF0dHJpYnV0ZVR5cGUpIHx8XG4gICAgICAgICAgcGF0aC5lbmRzV2l0aChcImxpZmVjeWNsZVwiKSB8fFxuICAgICAgICAgIHBhdGguZW5kc1dpdGgoXCJjb25uZWN0aW9uXCIpKVxuICAgICAgICAgID8gaXRlbVswXVxuICAgICAgICAgIDogaXRlbTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodW53cmFwcGVkSXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIHQuYXJyYXlFeHByZXNzaW9uKFxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdW53cmFwcGVkSXRlbS5tYXAoKGkpID0+IHZhbHVlVG9UcyhzY29wZSwgaSwgYCR7cGF0aH0uW11gKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHQub2JqZWN0RXhwcmVzc2lvbihcbiAgICAgICAgKFxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModW53cmFwcGVkSXRlbSkubWFwKGFzeW5jIChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJkeW5hbWljXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZvcl9lYWNoLCAuLi5vdGhlcnMgfSA9IHZhbHVlIGFzIGFueTtcbiAgICAgICAgICAgICAgICBjb25zdCBkeW5hbWljUmVmID0gT2JqZWN0LmtleXMob3RoZXJzKVswXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgIHQuaWRlbnRpZmllcihcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUud2l0aGluT3ZlcnJpZGVFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyBkeW5hbWljUmVmXG4gICAgICAgICAgICAgICAgICAgICAgOiBlc2NhcGVBdHRyaWJ1dGVOYW1lKGNhbWVsQ2FzZShkeW5hbWljUmVmKSksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdC5hcnJheUV4cHJlc3Npb24oKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgaXRlbVBhdGggPSBgJHtwYXRofS4ke2tleX1gO1xuICAgICAgICAgICAgICBjb25zdCBpdGVtQXR0cmlidXRlVHlwZSA9IGdldFR5cGVBdFBhdGgoXG4gICAgICAgICAgICAgICAgc2NvcGUucHJvdmlkZXJTY2hlbWEsXG4gICAgICAgICAgICAgICAgaXRlbVBhdGgsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgY29uc3QgdHlwZU1ldGFkYXRhID0gZ2V0VHlwZUF0UGF0aChcbiAgICAgICAgICAgICAgICBzY29wZS5wcm92aWRlclNjaGVtYSxcbiAgICAgICAgICAgICAgICBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCBpc1NpbmdsZUl0ZW1CbG9jayA9XG4gICAgICAgICAgICAgICAgdHlwZU1ldGFkYXRhICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHR5cGVNZXRhZGF0YSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlTWV0YWRhdGEsIFwibWF4X2l0ZW1zXCIpXG4gICAgICAgICAgICAgICAgICA/ICh0eXBlTWV0YWRhdGEgYXMgYW55KS5tYXhfaXRlbXMgPT09IDFcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQmVBcnJheSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgISh0LmlzTm9kZSh2YWx1ZSkgJiYgdC5pc0V4cHJlc3Npb24odmFsdWUpKSAmJlxuICAgICAgICAgICAgICAgICFpc1NpbmdsZUl0ZW1CbG9jayAmJlxuICAgICAgICAgICAgICAgIC8vIE1hcCB0eXBlIGF0dHJpYnV0ZXMgbXVzdCBub3QgYmUgd3JhcHBlZCBpbiBhcnJheXNcbiAgICAgICAgICAgICAgICAhaXNNYXBBdHRyaWJ1dGUoaXRlbUF0dHJpYnV0ZVR5cGUpICYmXG4gICAgICAgICAgICAgICAga2V5ICE9PSBcInRhZ3NcIiAmJlxuICAgICAgICAgICAgICAgIGtleSAhPT0gXCJmb3JFYWNoXCIgJiZcbiAgICAgICAgICAgICAgICBrZXkgIT09IFwibGlmZWN5Y2xlXCI7XG5cbiAgICAgICAgICAgICAgY29uc3Qga2VlcEtleU5hbWU6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICFpc01vZHVsZSAmJlxuICAgICAgICAgICAgICAgIGtleSAhPT0gXCJkZXBlbmRzX29uXCIgJiZcbiAgICAgICAgICAgICAgICAhcGF0aC5pbmNsdWRlcyhcImxpZmVjeWNsZVwiKSAmJlxuICAgICAgICAgICAgICAgIChrZXkgPT09IFwiZm9yX2VhY2hcIiB8fFxuICAgICAgICAgICAgICAgICAgIXR5cGVNZXRhZGF0YSB8fFxuICAgICAgICAgICAgICAgICAgaXNNYXBBdHRyaWJ1dGUoYXR0cmlidXRlVHlwZSkpICYmXG4gICAgICAgICAgICAgICAgIShwYXRoLnN0YXJ0c1dpdGgoXCJ2YXIuXCIpICYmIHBhdGguaW5jbHVkZXMoXCJ2YWxpZGF0aW9uXCIpKTtcblxuICAgICAgICAgICAgICByZXR1cm4gdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICB0LnN0cmluZ0xpdGVyYWwoXG4gICAgICAgICAgICAgICAgICBrZWVwS2V5TmFtZSA/IGtleSA6IGF0dHJpYnV0ZU5hbWVUb0Nka3RmTmFtZShrZXkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgc2hvdWxkQmVBcnJheVxuICAgICAgICAgICAgICAgICAgPyB0LmFycmF5RXhwcmVzc2lvbihbYXdhaXQgdmFsdWVUb1RzKHNjb3BlLCB2YWx1ZSwgaXRlbVBhdGgpXSlcbiAgICAgICAgICAgICAgICAgIDogYXdhaXQgdmFsdWVUb1RzKHNjb3BlLCB2YWx1ZSwgaXRlbVBhdGgpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICApLmZpbHRlcigoZXhwcikgPT4gZXhwciAhPT0gdW5kZWZpbmVkKSBhcyB0Lk9iamVjdFByb3BlcnR5W10sXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlIFwiICsgaXRlbSk7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmFja2VuZFRvRXhwcmVzc2lvbihcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgdGY6IFRlcnJhZm9ybUNvbmZpZ1tcImJhY2tlbmRcIl0sXG4pOiBQcm9taXNlPHQuU3RhdGVtZW50W10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRmIHx8IHt9KS5tYXAoYXN5bmMgKFt0eXBlLCBbY29uZmlnXV0pID0+IHtcbiAgICAgICAgY29uc3QgYmFja2VuZElkZW50aWZpZXIgPSBwYXNjYWxDYXNlKGAke3R5cGV9QmFja2VuZGApO1xuICAgICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgICBjb25zdHJ1Y3ROYW1lOiBiYWNrZW5kSWRlbnRpZmllcixcbiAgICAgICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICAgICAgICB0Lm5ld0V4cHJlc3Npb24odC5pZGVudGlmaWVyKGJhY2tlbmRJZGVudGlmaWVyKSwgW1xuICAgICAgICAgICAgdC50aGlzRXhwcmVzc2lvbigpLFxuICAgICAgICAgICAgdC5vYmplY3RFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjb25maWcpLm1hcChhc3luYyAoW3Byb3BlcnR5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgICAgICAgICAgIHQub2JqZWN0UHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgICAgdC5pZGVudGlmaWVyKGNhbWVsQ2FzZShwcm9wZXJ0eSkpLFxuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHZhbHVlVG9UcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdGgtZm9yLWJhY2tlbmRzLWNhbi1iZS1pZ25vcmVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoY2FycnksIGl0ZW0pID0+IFsuLi5jYXJyeSwgaXRlbV0sXG4gICAgICAgICAgICAgICAgW10gYXMgdC5PYmplY3RQcm9wZXJ0eVtdLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgIClcbiAgKS5yZWR1Y2UoKGNhcnJ5LCBpdGVtKSA9PiBbLi4uY2FycnksIGl0ZW1dLCBbXSBhcyB0LlN0YXRlbWVudFtdKTtcbn1cblxuZnVuY3Rpb24gYWRkT3ZlcnJpZGVFeHByZXNzaW9uKFxuICB2YXJpYWJsZTogc3RyaW5nLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlOiB0LkV4cHJlc3Npb24sXG4gIGV4cGxhbmF0b3J5Q29tbWVudD86IHN0cmluZyxcbikge1xuICBjb25zdCBhc3QgPSB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgIHQubWVtYmVyRXhwcmVzc2lvbih0LmlkZW50aWZpZXIodmFyaWFibGUpLCB0LmlkZW50aWZpZXIoXCJhZGRPdmVycmlkZVwiKSksXG4gICAgICBbdC5zdHJpbmdMaXRlcmFsKHBhdGgpLCB2YWx1ZV0sXG4gICAgKSxcbiAgKTtcblxuICBpZiAoZXhwbGFuYXRvcnlDb21tZW50KSB7XG4gICAgdC5hZGRDb21tZW50KGFzdCwgXCJsZWFkaW5nXCIsIGV4cGxhbmF0b3J5Q29tbWVudCk7XG4gIH1cblxuICByZXR1cm4gYXN0O1xufVxuXG5mdW5jdGlvbiBhZGRPdmVycmlkZUxvZ2ljYWxJZEV4cHJlc3Npb24odmFyaWFibGU6IHN0cmluZywgbG9naWNhbElkOiBzdHJpbmcpIHtcbiAgY29uc3QgYXN0ID0gdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgIHQuaWRlbnRpZmllcih2YXJpYWJsZSksXG4gICAgICAgIHQuaWRlbnRpZmllcihcIm92ZXJyaWRlTG9naWNhbElkXCIpLFxuICAgICAgKSxcbiAgICAgIFt0LnN0cmluZ0xpdGVyYWwobG9naWNhbElkKV0sXG4gICAgKSxcbiAgKTtcblxuICB0LmFkZENvbW1lbnQoXG4gICAgYXN0LFxuICAgIFwibGVhZGluZ1wiLFxuICAgIFwiVGhpcyBhbGxvd3MgdGhlIFRlcnJhZm9ybSByZXNvdXJjZSBuYW1lIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCBuYW1lLiBZb3UgY2FuIHJlbW92ZSB0aGUgY2FsbCBpZiB5b3UgZG9uJ3QgbmVlZCB0aGVtIHRvIG1hdGNoLlwiLFxuICApO1xuXG4gIHJldHVybiBhc3Q7XG59XG5cbmZ1bmN0aW9uIGdldFJlbW90ZVN0YXRlVHlwZShpdGVtOiBSZXNvdXJjZSkge1xuICBjb25zdCBiYWNrZW5kUmVjb3JkID0gaXRlbS5maW5kKCh2YWwpID0+IHZhbC5iYWNrZW5kKTtcbiAgaWYgKGJhY2tlbmRSZWNvcmQpIHtcbiAgICBjb25zdCBiYWNrZW5kID0gYmFja2VuZFJlY29yZC5iYWNrZW5kO1xuICAgIHN3aXRjaCAoYmFja2VuZCkge1xuICAgICAgY2FzZSBcInJlbW90ZVwiOlxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIGNhc2UgXCJldGNkdjNcIjpcbiAgICAgICAgcmV0dXJuIFwiX2V0Y2RfdjNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgXyR7YmFja2VuZH1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvdXJjZVR5cGUocHJvdmlkZXI6IHN0cmluZywgbmFtZTogc3RyaW5nW10sIGl0ZW06IFJlc291cmNlKSB7XG4gIHN3aXRjaCAocHJvdmlkZXIpIHtcbiAgICBjYXNlIFwiZGF0YS50ZXJyYWZvcm1cIjpcbiAgICAgIHJldHVybiBgY2RrdG4uZGF0YV90ZXJyYWZvcm1fJHtuYW1lLmpvaW4oXCJfXCIpfSR7Z2V0UmVtb3RlU3RhdGVUeXBlKFxuICAgICAgICBpdGVtLFxuICAgICAgKX1gO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gYE51bGxQcm92aWRlci4ke25hbWUuam9pbihcIl9cIil9YDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAke3Byb3ZpZGVyfS4ke25hbWUuam9pbihcIl9cIil9YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBDb25maWdQZXJSZXNvdXJjZVR5cGUocmVzb3VyY2U6IHN0cmluZywgaXRlbTogUmVzb3VyY2VbMF0pIHtcbiAgLy8gQmFja2VuZHMgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBBUElcbiAgaWYgKHJlc291cmNlLnN0YXJ0c1dpdGgoXCJjZGt0bi5kYXRhX3RlcnJhZm9ybV9cIikpIHtcbiAgICByZXR1cm4gaXRlbS5jb25maWc7XG4gIH1cbiAgcmV0dXJuIGl0ZW07XG59XG5cbmNvbnN0IGxvb3BDb21tZW50ID0gYEluIG1vc3QgY2FzZXMgbG9vcHMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIGNvbnRleHQgYW5kXG5ub3QgaW5zaWRlIG9mIHRoZSBUZXJyYWZvcm0gY29udGV4dC4gSWYgeW91IGFyZSBsb29waW5nIG92ZXIgc29tZXRoaW5nIGV4dGVybmFsLCBlLmcuIGEgdmFyaWFibGUgb3IgYSBmaWxlIGlucHV0XG55b3Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nIGEgZm9yIGxvb3AuIElmIHlvdSBhcmUgbG9vcGluZyBvdmVyIHNvbWV0aGluZyBvbmx5IGtub3duIHRvIFRlcnJhZm9ybSwgZS5nLiBhIHJlc3VsdCBvZiBhIGRhdGEgc291cmNlXG55b3UgbmVlZCB0byBrZWVwIHRoaXMgbGlrZSBpdCBpcy5gO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc291cmNlKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICB0eXBlOiBzdHJpbmcsXG4gIGtleTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpdGVtOiBSZXNvdXJjZSxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pOiBQcm9taXNlPHQuU3RhdGVtZW50W10+IHtcbiAgY29uc3QgW3Byb3ZpZGVyLCAuLi5uYW1lXSA9IHR5cGUuc3BsaXQoXCJfXCIpO1xuICBjb25zdCByZXNvdXJjZSA9IHJlc291cmNlVHlwZShwcm92aWRlciwgbmFtZSwgaXRlbSk7XG5cbiAgaWYgKCFwcm92aWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIHJlc291cmNlIHR5cGUgJyR7dHlwZX0nYCk7XG4gIH1cbiAgbGV0IGV4cHJlc3Npb25zOiB0LlN0YXRlbWVudFtdID0gW107XG4gIGNvbnN0IHZhck5hbWUgPSB2YXJpYWJsZU5hbWUoc2NvcGUsIHJlc291cmNlLCBrZXkpO1xuICBjb25zdCB7IGZvcl9lYWNoLCBjb3VudCwgcHJvdmlzaW9uZXIsIC4uLmNvbmZpZyB9ID0gaXRlbVswXTtcbiAgY29uc3QgbWFwcGVkQ29uZmlnID0gbWFwQ29uZmlnUGVyUmVzb3VyY2VUeXBlKHJlc291cmNlLCBjb25maWcpO1xuXG4gIGxldCBmb3JFYWNoSXRlcmF0b3JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChmb3JfZWFjaCkge1xuICAgIGZvckVhY2hJdGVyYXRvck5hbWUgPSB2YXJpYWJsZU5hbWUoXG4gICAgICBzY29wZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAgYCR7a2V5fV9mb3JfZWFjaF9pdGVyYXRvcmAsXG4gICAgKTtcbiAgICBjb25zdCByZWZlcmVuY2VBc3QgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGBcIiR7Zm9yX2VhY2h9XCJgLFxuICAgICAgKCkgPT4gW1wibGlzdFwiLCBcImR5bmFtaWNcIl0sXG4gICAgKTtcblxuICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVGVycmFmb3JtSXRlcmF0b3JcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gdC52YXJpYWJsZURlY2xhcmF0aW9uKFwiY29uc3RcIiwgW1xuICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoXG4gICAgICAgIHQuaWRlbnRpZmllcihmb3JFYWNoSXRlcmF0b3JOYW1lKSxcbiAgICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgICAgICB0LmlkZW50aWZpZXIoXCJUZXJyYWZvcm1JdGVyYXRvclwiKSxcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcImZyb21MaXN0XCIpLFxuICAgICAgICAgICksXG5cbiAgICAgICAgICBbcmVmZXJlbmNlQXN0XSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgXSk7XG4gICAgdC5hZGRDb21tZW50KGl0ZXJhdG9yLCBcImxlYWRpbmdcIiwgbG9vcENvbW1lbnQpO1xuICAgIGV4cHJlc3Npb25zLnB1c2goaXRlcmF0b3IpO1xuXG4gICAgbWFwcGVkQ29uZmlnLmZvckVhY2ggPSB0LmlkZW50aWZpZXIoZm9yRWFjaEl0ZXJhdG9yTmFtZSk7XG4gIH1cblxuICBsZXQgY291bnRJdGVyYXRvck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKGNvdW50KSB7XG4gICAgY291bnRJdGVyYXRvck5hbWUgPSB2YXJpYWJsZU5hbWUoc2NvcGUsIHJlc291cmNlLCBgJHtrZXl9X2NvdW50YCk7XG4gICAgY29uc3QgcmVmZXJlbmNlQXN0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBgXCIke2NvdW50fVwiYCxcbiAgICAgICgpID0+IFwibnVtYmVyXCIsXG4gICAgKTtcblxuICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVGVycmFmb3JtQ291bnRcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gdC52YXJpYWJsZURlY2xhcmF0aW9uKFwiY29uc3RcIiwgW1xuICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoXG4gICAgICAgIHQuaWRlbnRpZmllcihjb3VudEl0ZXJhdG9yTmFtZSksXG4gICAgICAgIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKFwiVGVycmFmb3JtQ291bnRcIiksXG4gICAgICAgICAgICB0LmlkZW50aWZpZXIoXCJvZlwiKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIFtyZWZlcmVuY2VBc3RdLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICBdKTtcbiAgICB0LmFkZENvbW1lbnQoaXRlcmF0b3IsIFwibGVhZGluZ1wiLCBsb29wQ29tbWVudCk7XG4gICAgbWFwcGVkQ29uZmlnLmNvdW50ID0gdC5pZGVudGlmaWVyKGNvdW50SXRlcmF0b3JOYW1lKTtcbiAgICBleHByZXNzaW9ucy5wdXNoKGl0ZXJhdG9yKTtcbiAgfVxuXG4gIGNvbnN0IGR5bkJsb2NrcyA9IGV4dHJhY3REeW5hbWljQmxvY2tzKG1hcHBlZENvbmZpZyk7XG4gIGNvbnN0IG5lc3RlZER5bmFtaWNCbG9ja3MgPSBkeW5CbG9ja3MuZmlsdGVyKChibG9jaykgPT5cbiAgICBpc05lc3RlZER5bmFtaWNCbG9jayhkeW5CbG9ja3MsIGJsb2NrKSxcbiAgKTtcbiAgY29uc3QgZHluYW1pY0Jsb2Nrc1VzaW5nT3ZlcnJpZGVzID0gZHluQmxvY2tzLmZpbHRlcihcbiAgICAoYmxvY2spID0+XG4gICAgICAvLyBuZXN0ZWQgYmxvY2tzIG5lZWQgb3ZlcnJpZGVzXG4gICAgICBuZXN0ZWREeW5hbWljQmxvY2tzLmluY2x1ZGVzKGJsb2NrKSB8fFxuICAgICAgLy8gYmxvY2tzIHRoYXQgY29udGFpbiBuZXN0ZWQgYmxvY2tzIG5lZWQgdGhlbSBhcyB3ZWxsXG4gICAgICBuZXN0ZWREeW5hbWljQmxvY2tzLnNvbWUoKG5lc3RlZEJsb2NrKSA9PlxuICAgICAgICBuZXN0ZWRCbG9jay5wYXRoLnN0YXJ0c1dpdGgoYmxvY2sucGF0aCksXG4gICAgICApLFxuICApO1xuICAvLyBhbGwgb3RoZXJzIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBDREtUTiBydW50aW1lXG4gIGNvbnN0IGR5bmFtaWNCbG9ja3NVc2luZ1J1bnRpbWUgPSBkeW5CbG9ja3MuZmlsdGVyKFxuICAgIChibG9jaykgPT4gIWR5bmFtaWNCbG9ja3NVc2luZ092ZXJyaWRlcy5pbmNsdWRlcyhibG9jayksXG4gICk7XG5cbiAgZm9yIChjb25zdCBbaSwgYmxvY2tdIG9mIGR5bmFtaWNCbG9ja3NVc2luZ1J1bnRpbWUuZW50cmllcygpKSB7XG4gICAgY29uc3QgZHluYW1pY0Jsb2NrSXRlcmF0b3JOYW1lID0gdmFyaWFibGVOYW1lKFxuICAgICAgc2NvcGUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGAke2tleX1fZHluYW1pY19pdGVyYXRvcl8ke2l9YCxcbiAgICApO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlQXN0ID0gYXdhaXQgY29udmVydFRlcnJhZm9ybUV4cHJlc3Npb25Ub1RzKFxuICAgICAgc2NvcGUsXG4gICAgICBgXCIke2Jsb2NrLmZvcl9lYWNofVwiYCxcbiAgICAgICgpID0+IFtcImxpc3RcIiwgXCJkeW5hbWljXCJdLFxuICAgICk7XG5cbiAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRlcnJhZm9ybUl0ZXJhdG9yXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHQudmFyaWFibGVEZWNsYXJhdGlvbihcImNvbnN0XCIsIFtcbiAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKFxuICAgICAgICB0LmlkZW50aWZpZXIoZHluYW1pY0Jsb2NrSXRlcmF0b3JOYW1lKSxcbiAgICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgICAgICB0LmlkZW50aWZpZXIoXCJUZXJyYWZvcm1JdGVyYXRvclwiKSxcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcImZyb21MaXN0XCIpLFxuICAgICAgICAgICksXG4gICAgICAgICAgW3JlZmVyZW5jZUFzdF0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgIF0pO1xuICAgIHQuYWRkQ29tbWVudChpdGVyYXRvciwgXCJsZWFkaW5nXCIsIGxvb3BDb21tZW50KTtcbiAgICBleHByZXNzaW9ucy5wdXNoKGl0ZXJhdG9yKTtcbiAgICBjb25zdCBkeW5hbWljQ2FsbEV4cHJlc3Npb24gPSB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgICB0LmlkZW50aWZpZXIoZHluYW1pY0Jsb2NrSXRlcmF0b3JOYW1lKSxcbiAgICAgICAgdC5pZGVudGlmaWVyKFwiZHluYW1pY1wiKSxcbiAgICAgICksXG4gICAgICBbXG4gICAgICAgIGF3YWl0IHZhbHVlVG9UcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5zY29wZSxcbiAgICAgICAgICAgIHNjb3BlZFZhcmlhYmxlczoge1xuICAgICAgICAgICAgICBbYmxvY2suc2NvcGVkVmFyXTogZHluYW1pY0Jsb2NrSXRlcmF0b3JOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbGxXaXRoQ29uZmlnQWNjZXNzb3JzKFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGJsb2NrLmNvbnRlbnQpID8gYmxvY2suY29udGVudFswXSA6IGJsb2NrLmNvbnRlbnQsXG4gICAgICAgICAgICBibG9jay5wYXRoLnJlcGxhY2UoYmxvY2suc2NvcGVkVmFyLCBcIlwiKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIGJsb2NrLnBhdGgucmVwbGFjZShibG9jay5zY29wZWRWYXIsIFwiXCIpLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICApLFxuICAgICAgXSxcbiAgICApO1xuXG4gICAgY29uc3QgcGFydHMgPSBibG9jay5wYXRoXG4gICAgICAucmVwbGFjZShgZHluYW1pYy4ke2Jsb2NrLnNjb3BlZFZhcn1gLCBcIlwiKVxuICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgLmZpbHRlcigocCkgPT4gcC5sZW5ndGggPiAwKTtcblxuICAgIGNvbnN0IHBhcmVudCA9IHBhcnRzLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhY2MpICYmICFOdW1iZXIuaXNOYU4ocGFyc2VJbnQocGFydCwgMTApKSkge1xuICAgICAgICByZXR1cm4gYWNjW3BhcnNlSW50KHBhcnQsIDEwKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYWNjW3BhcnRdO1xuICAgICAgfVxuICAgIH0sIG1hcHBlZENvbmZpZyk7XG4gICAgcGFyZW50W2Jsb2NrLnNjb3BlZFZhcl0gPSBkeW5hbWljQ2FsbEV4cHJlc3Npb247XG4gICAgZGVsZXRlIHBhcmVudC5keW5hbWljO1xuICB9XG5cbiAgY29uc3Qgb3ZlcnJpZGVSZWZlcmVuY2UgPSBkeW5hbWljQmxvY2tzVXNpbmdPdmVycmlkZXMubGVuZ3RoXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICBlbmQ6IDAsXG4gICAgICAgIHJlZmVyZW5jZWU6IHtcbiAgICAgICAgICBpZDogYCR7dHlwZX0uJHtrZXl9YCxcbiAgICAgICAgICBmdWxsOiBgJHt0eXBlfS4ke2tleX1gLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGlmIChwcm92aXNpb25lcikge1xuICAgIG1hcHBlZENvbmZpZy5wcm92aXNpb25lcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHByb3Zpc2lvbmVyKS5mbGF0TWFwKChbdHlwZSwgcF06IFtzdHJpbmcsIGFueV0pID0+XG4gICAgICAgIHAubWFwKChwcDogUmVjb3JkPHN0cmluZywgYW55PikgPT5cbiAgICAgICAgICB2YWx1ZVRvVHMoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIHsgdHlwZSwgLi4ucHAgfSxcbiAgICAgICAgICAgIFwicGF0aC1mb3ItcHJvdmlzaW9uZXJzLWNhbi1iZS1pZ25vcmVkXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGltcG9ydEdyYXBoSWQgPSBgaW1wb3J0LiR7cmVzb3VyY2UucmVwbGFjZShcIi5cIiwgXCJfXCIpfS4ke2tleX1gO1xuICBjb25zdCBpbXBvcnREZWZpbml0aW9uOiBJbXBvcnQgfCB1bmRlZmluZWQgPSBncmFwaC5oYXNOb2RlKGltcG9ydEdyYXBoSWQpXG4gICAgPyBncmFwaC5nZXROb2RlQXR0cmlidXRlKGltcG9ydEdyYXBoSWQsIFwidmFsdWVcIilcbiAgICA6IHVuZGVmaW5lZDtcblxuICBleHByZXNzaW9ucyA9IGV4cHJlc3Npb25zLmNvbmNhdChcbiAgICBhd2FpdCBhc0V4cHJlc3Npb24oXG4gICAgICB7IC4uLnNjb3BlLCBmb3JFYWNoSXRlcmF0b3JOYW1lLCBjb3VudEl0ZXJhdG9yTmFtZSB9LFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBrZXksXG4gICAgICBtYXBwZWRDb25maWcsXG4gICAgICBmYWxzZSxcbiAgICAgIGZhbHNlLFxuICAgICAgZ2V0UmVmZXJlbmNlKGdyYXBoLCBpZCkgfHwgb3ZlcnJpZGVSZWZlcmVuY2UsXG4gICAgICBpbXBvcnREZWZpbml0aW9uLFxuICAgICksXG4gICk7XG5cbiAgLy8gQ2hlY2sgZm9yIGR5bmFtaWMgYmxvY2tzXG4gIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMuY29uY2F0KFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZHluYW1pY0Jsb2Nrc1VzaW5nT3ZlcnJpZGVzLm1hcChhc3luYyAoeyBwYXRoLCBmb3JfZWFjaCwgY29udGVudCB9KSA9PiB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gbGV0IHRoZSBleHByZXNzaW9uIGNvbnZlcnNpb24ga25vdyBhbGwgYXZhaWxhYmxlXG4gICAgICAgIC8vIGR5bmFtaWMgYmxvY2sgbmFtZXMsIHNvIHdlIGRvbid0IHJlcGxhY2UgdGhlbS4gVGhlIFwiZHluYW1pYy1ibG9ja1wiXG4gICAgICAgIC8vIHNjb3BlZCB2YXJpYWJsZSBpbmRpY2F0ZXMgdG8gdGhlIGV4cHJlc3Npb24gY29udmVyc2lvbiB0byB1c2UgdGhlXG4gICAgICAgIC8vIGtleSBuYW1lIGluc3RlYWQgb2YgYW4gaXRlcmF0b3JcbiAgICAgICAgY29uc3Qgc2NvcGVkVmFyaWFibGVzSW5QYXRoID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIC5zdWJzdHJpbmcoMSkgLy8gVGhlIHBhdGggc3RhcnRzIHdpdGggYSBkb3QgdGhhdCByZXN1bHRzIGluIGFuIGVtcHR5IHNwbGl0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAocCkgPT4gIVtcImR5bmFtaWNcIiwgXCJjb250ZW50XCJdLmluY2x1ZGVzKHApICYmIGlzTmFOKHBhcnNlSW50KHApKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXAoKHApID0+IFtwLCBcImR5bmFtaWMtYmxvY2tcIl0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBhZGRPdmVycmlkZUV4cHJlc3Npb24oXG4gICAgICAgICAgdmFyTmFtZSxcbiAgICAgICAgICBwYXRoLnN1YnN0cmluZygxKSwgLy8gVGhlIHBhdGggc3RhcnRzIHdpdGggYSBkb3QgdGhhdCB3ZSBkb24ndCB3YW50XG4gICAgICAgICAgYXdhaXQgdmFsdWVUb1RzKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zY29wZSxcbiAgICAgICAgICAgICAgd2l0aGluT3ZlcnJpZGVFeHByZXNzaW9uOiB0cnVlLFxuICAgICAgICAgICAgICBzY29wZWRWYXJpYWJsZXM6IHNjb3BlZFZhcmlhYmxlc0luUGF0aCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZvcl9lYWNoLFxuICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwicGF0aC1mb3ItZHluYW1pYy1ibG9ja3MtY2FuLWJlLWlnbm9yZWRcIixcbiAgICAgICAgICApLFxuICAgICAgICAgIGxvb3BDb21tZW50LFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcblxuICByZXR1cm4gZXhwcmVzc2lvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFzRXhwcmVzc2lvbihcbiAgc2NvcGU6IFJlc291cmNlU2NvcGUsXG4gIHR5cGU6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBjb25maWc6IFRlcnJhZm9ybVJlc291cmNlQmxvY2ssXG4gIGlzTW9kdWxlSW1wb3J0OiBib29sZWFuLFxuICBpc1Byb3ZpZGVyOiBib29sZWFuLFxuICByZWZlcmVuY2U/OiBSZWZlcmVuY2UsXG4gIGltcG9ydGVkPzogSW1wb3J0LFxuKSB7XG4gIGNvbnN0IHsgcHJvdmlkZXJzLCAuLi5vdGhlck9wdGlvbnMgfSA9IGNvbmZpZyBhcyBhbnk7XG5cbiAgY29uc3QgY29uc3RydWN0SWQgPSB1bmlxdWVJZChzY29wZS5jb25zdHJ1Y3RzLCBuYW1lKTtcbiAgY29uc3Qgb3ZlcnJpZGVJZCA9ICFpc1Byb3ZpZGVyICYmIGNvbnN0cnVjdElkICE9PSBuYW1lO1xuXG4gIGNvbnN0IGNvbXBsZXRlT2JqZWN0ID0gZmlsbFdpdGhDb25maWdBY2Nlc3NvcnMoc2NvcGUsIG90aGVyT3B0aW9ucywgdHlwZSk7XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IHQubmV3RXhwcmVzc2lvbihcbiAgICBjb25zdHJ1Y3RBc3Qoc2NvcGUsIHR5cGUsIGlzTW9kdWxlSW1wb3J0KSxcbiAgICBbXG4gICAgICB0LnRoaXNFeHByZXNzaW9uKCksXG4gICAgICB0LnN0cmluZ0xpdGVyYWwoY29uc3RydWN0SWQpLFxuXG4gICAgICBhd2FpdCB2YWx1ZVRvVHMoXG4gICAgICAgIHNjb3BlLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uY29tcGxldGVPYmplY3QsXG4gICAgICAgICAgcHJvdmlkZXJzOlxuICAgICAgICAgICAgcHJvdmlkZXJzICYmIE9iamVjdC5rZXlzKHByb3ZpZGVycykubGVuZ3RoXG4gICAgICAgICAgICAgID8gT2JqZWN0LmVudHJpZXMocHJvdmlkZXJzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIG1vZHVsZUFsaWFzOiBrZXksXG4gICAgICAgICAgICAgICAgICBwcm92aWRlcjogdmFsdWUsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBgJHt0eXBlfWAsXG4gICAgICAgIGlzTW9kdWxlSW1wb3J0LFxuICAgICAgKSxcbiAgICBdLFxuICApO1xuXG4gIGNvbnN0IHN0YXRlbWVudHMgPSBbXTtcbiAgY29uc3QgdmFyTmFtZSA9IHJlZmVyZW5jZVxuICAgID8gcmVmZXJlbmNlVG9WYXJpYWJsZU5hbWUoc2NvcGUsIHJlZmVyZW5jZSlcbiAgICA6IHZhcmlhYmxlTmFtZShzY29wZSwgdHlwZSwgbmFtZSk7XG5cbiAgaWYgKHJlZmVyZW5jZSB8fCBvdmVycmlkZUlkIHx8IGltcG9ydGVkKSB7XG4gICAgc3RhdGVtZW50cy5wdXNoKFxuICAgICAgdC52YXJpYWJsZURlY2xhcmF0aW9uKFwiY29uc3RcIiwgW1xuICAgICAgICB0LnZhcmlhYmxlRGVjbGFyYXRvcih0LmlkZW50aWZpZXIodmFyTmFtZSksIGV4cHJlc3Npb24pLFxuICAgICAgXSksXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZW1lbnRzLnB1c2godC5leHByZXNzaW9uU3RhdGVtZW50KGV4cHJlc3Npb24pKTtcbiAgfVxuXG4gIGlmIChvdmVycmlkZUlkKSB7XG4gICAgc3RhdGVtZW50cy5wdXNoKGFkZE92ZXJyaWRlTG9naWNhbElkRXhwcmVzc2lvbih2YXJOYW1lLCBuYW1lKSk7XG4gIH1cblxuICBpZiAoaW1wb3J0ZWQpIHtcbiAgICAvLyBBZGRzIG15VmFyLmltcG9ydEZyb20oXCJteS1hcm5cIilcbiAgICBjb25zdCBpbXBvcnRFeHByZXNzaW9uID0gdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKHQuaWRlbnRpZmllcih2YXJOYW1lKSwgdC5pZGVudGlmaWVyKFwiaW1wb3J0RnJvbVwiKSksXG4gICAgICAgIFt0LnN0cmluZ0xpdGVyYWwoaW1wb3J0ZWQuaWQpXSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGlmIChpbXBvcnRlZC5wcm92aWRlcikge1xuICAgICAgdC5hZGRDb21tZW50KFxuICAgICAgICBpbXBvcnRFeHByZXNzaW9uLFxuICAgICAgICBcImxlYWRpbmdcIixcbiAgICAgICAgYFRoaXMgaW1wb3J0IHdhcyBjb25maWd1cmVkIHdpdGggYSBwcm92aWRlci4gQ0RLVE4gZG9lcyBzdXBwb3J0IHRoaXMsIGJ1dCB0aGUgY2RrdG4gY29udmVydCBjb21tYW5kIGRvZXMgbm90IHlldC4gUGxlYXNlIGFkZCB0aGUgcHJvdmlkZXIgcmVmZXJlbmNlIG1hbnVhbGx5LiBTZWUgaHR0cHM6Ly9jZGt0bi5pby9kb2NzL2NvbmNlcHRzL3Jlc291cmNlcyNpbXBvcnRpbmctcmVzb3VyY2VzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHN0YXRlbWVudHMucHVzaChpbXBvcnRFeHByZXNzaW9uKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3V0cHV0KFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBrZXk6IHN0cmluZyxcbiAgX2lkOiBzdHJpbmcsXG4gIGl0ZW06IE91dHB1dCxcbiAgX2dyYXBoOiBEaXJlY3RlZEdyYXBoLFxuKSB7XG4gIGNvbnN0IFt7IHZhbHVlLCBkZXNjcmlwdGlvbiwgc2Vuc2l0aXZlIH1dID0gaXRlbTtcblxuICByZXR1cm4gYXNFeHByZXNzaW9uKFxuICAgIHNjb3BlLFxuICAgIFwiY2RrdG4uVGVycmFmb3JtT3V0cHV0XCIsXG4gICAga2V5LFxuICAgIHtcbiAgICAgIHZhbHVlLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBzZW5zaXRpdmUsXG4gICAgfSxcbiAgICBmYWxzZSxcbiAgICBmYWxzZSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFyaWFibGVUeXBlVG9Bc3QoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIHR5cGU6IHN0cmluZyxcbik6IFByb21pc2U8dC5FeHByZXNzaW9uPiB7XG4gIGNvbnN0IGFkZFZhcmlhYmxlVHlwZVRvSW1wb3J0cyA9ICgpID0+XG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBjb25zdHJ1Y3ROYW1lOiBcIlZhcmlhYmxlVHlwZVwiLFxuICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICB9KTtcblxuICBmdW5jdGlvbiBwYXJzZWRUeXBlVG9Bc3QodHlwZTogdGV4LkV4cHJlc3Npb25UeXBlKTogdC5FeHByZXNzaW9uIHtcbiAgICBpZiAodGV4LmlzU2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uKHR5cGUpKSB7XG4gICAgICBhZGRWYXJpYWJsZVR5cGVUb0ltcG9ydHMoKTtcbiAgICAgIHN3aXRjaCAodHlwZS5tZXRhLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gdC5pZGVudGlmaWVyKFwiVmFyaWFibGVUeXBlLlNUUklOR1wiKTtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIHJldHVybiB0LmlkZW50aWZpZXIoXCJWYXJpYWJsZVR5cGUuTlVNQkVSXCIpO1xuICAgICAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgICAgIHJldHVybiB0LmlkZW50aWZpZXIoXCJWYXJpYWJsZVR5cGUuQk9PTFwiKTtcbiAgICAgICAgY2FzZSBcImFueVwiOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB0LmlkZW50aWZpZXIoXCJWYXJpYWJsZVR5cGUuQU5ZXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXguaXNGdW5jdGlvbkNhbGxFeHByZXNzaW9uKHR5cGUpKSB7XG4gICAgICBhZGRWYXJpYWJsZVR5cGVUb0ltcG9ydHMoKTtcbiAgICAgIHN3aXRjaCAodHlwZS5tZXRhLm5hbWUpIHtcbiAgICAgICAgY2FzZSBcImxpc3RcIjpcbiAgICAgICAgY2FzZSBcInNldFwiOlxuICAgICAgICBjYXNlIFwibWFwXCI6XG4gICAgICAgIGNhc2UgXCJ0dXBsZVwiOlxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgcmV0dXJuIHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICAgICAgICB0LmlkZW50aWZpZXIoYFZhcmlhYmxlVHlwZS4ke3R5cGUubWV0YS5uYW1lfWApLFxuICAgICAgICAgICAgdHlwZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiBwYXJzZWRUeXBlVG9Bc3QoY2hpbGQpKSxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXguaXNPYmplY3RFeHByZXNzaW9uKHR5cGUpKSB7XG4gICAgICByZXR1cm4gdC5vYmplY3RFeHByZXNzaW9uKFxuICAgICAgICBPYmplY3QuZW50cmllcyh0eXBlLm1ldGEuaXRlbXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgIHQub2JqZWN0UHJvcGVydHkoXG4gICAgICAgICAgICB0LnN0cmluZ0xpdGVyYWwoa2V5KSxcbiAgICAgICAgICAgIC8vIFRoaXMgZG9lcyBub3QgZGVhbCB3aXRoIGNvbXBsZXggdHlwZXMgbmVzdGVkIHdpdGhpbiBvYmplY3RzXG4gICAgICAgICAgICAvLyBJZiBzdWNoIGEgdHlwZSBpcyBmb3VuZCBpdCB3aWxsIHJlc3VsdCBpbiBhbiBBbnkgdHlwZVxuICAgICAgICAgICAgLy8gZS5nLiB7IGZvbzogbGlzdChzdHJpbmcpIH0gd2lsbCByZXN1bHQgaW4geyBmb286IGFueSB9XG4gICAgICAgICAgICBwYXJzZWRUeXBlVG9Bc3Qoe1xuICAgICAgICAgICAgICB0eXBlOiBcInNjb3BlVHJhdmVyc2FsXCIsXG4gICAgICAgICAgICAgIG1ldGE6IHsgdmFsdWUgfSxcbiAgICAgICAgICAgIH0gYXMgYW55KSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhZGRWYXJpYWJsZVR5cGVUb0ltcG9ydHMoKTtcbiAgICByZXR1cm4gdC5pZGVudGlmaWVyKFwiVmFyaWFibGVUeXBlLkFOWVwiKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWRUeXBlVG9Bc3QoYXdhaXQgZXhwcmVzc2lvbkFzdCh0eXBlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2YXJpYWJsZShcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAga2V5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IFZhcmlhYmxlLFxuICBncmFwaDogRGlyZWN0ZWRHcmFwaCxcbikge1xuICBjb25zdCBbeyB0eXBlLCAuLi5wcm9wcyB9XSA9IGl0ZW07XG5cbiAgaWYgKCFnZXRSZWZlcmVuY2UoZ3JhcGgsIGlkKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBhc0V4cHJlc3Npb24oXG4gICAgc2NvcGUsXG4gICAgaWQsXG4gICAga2V5LFxuICAgIHsgLi4ucHJvcHMsIHR5cGU6IHR5cGUgPyBhd2FpdCB2YXJpYWJsZVR5cGVUb0FzdChzY29wZSwgdHlwZSkgOiB1bmRlZmluZWQgfSxcbiAgICBmYWxzZSxcbiAgICBmYWxzZSxcbiAgICBnZXRSZWZlcmVuY2UoZ3JhcGgsIGlkKSxcbiAgICB1bmRlZmluZWQsXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2NhbChcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAga2V5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IFRlcnJhZm9ybVJlc291cmNlQmxvY2ssXG4gIGdyYXBoOiBEaXJlY3RlZEdyYXBoLFxuKTogUHJvbWlzZTx0LlZhcmlhYmxlRGVjbGFyYXRpb25bXT4ge1xuICBsb2dnZXIuZGVidWcoYEluaXRpYWxpemluZyBsb2NhbCByZXNvdXJjZSAke2tleX0gd2l0aCBpZCAke2lkfWApO1xuICBpZiAoIWdldFJlZmVyZW5jZShncmFwaCwgaWQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBObyByZWZlcmVuY2UgZm91bmQgZm9yICR7a2V5fWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW1xuICAgIHQudmFyaWFibGVEZWNsYXJhdGlvbihcImNvbnN0XCIsIFtcbiAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKFxuICAgICAgICB0LmlkZW50aWZpZXIodmFyaWFibGVOYW1lKHNjb3BlLCBcImxvY2FsXCIsIGtleSkpLFxuICAgICAgICBhd2FpdCB2YWx1ZVRvVHMoc2NvcGUsIGl0ZW0sIFwicGF0aC1mb3ItbG9jYWwtYmxvY2tzLWNhbi1iZS1pZ25vcmVkXCIpLFxuICAgICAgKSxcbiAgICBdKSxcbiAgXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1vZHVsZXMoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGtleTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpdGVtOiBNb2R1bGUsXG4gIGdyYXBoOiBEaXJlY3RlZEdyYXBoLFxuKSB7XG4gIGNvbnN0IFt7IHNvdXJjZSwgdmVyc2lvbiwgLi4ucHJvcHMgfV0gPSBpdGVtO1xuXG4gIGNvbnN0IG1vZHVsZUNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChzb3VyY2UpO1xuXG4gIHJldHVybiBhc0V4cHJlc3Npb24oXG4gICAgc2NvcGUsXG4gICAgbW9kdWxlQ29uc3RyYWludC5jbGFzc05hbWUsXG4gICAga2V5LFxuICAgIHByb3BzLFxuICAgIHRydWUsXG4gICAgZmFsc2UsXG4gICAgZ2V0UmVmZXJlbmNlKGdyYXBoLCBpZCksXG4gICAgdW5kZWZpbmVkLFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0cyhcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgX2lkOiBzdHJpbmcsXG4gIGl0ZW06IEltcG9ydCxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgLy8gTW92ZSBmcm9tICR7YXdzX2luc3RhbmNlLmV4YW1wbGV9IHRvIGF3c19pbnN0YW5jZS5leGFtcGxlXG4gIGNvbnN0IHRhcmdldCA9XG4gICAgaXRlbS50by5zdGFydHNXaXRoKFwiJHtcIikgJiYgaXRlbS50by5lbmRzV2l0aChcIn1cIilcbiAgICAgID8gaXRlbS50by5zdWJzdHJpbmcoMiwgaXRlbS50by5sZW5ndGggLSAxKVxuICAgICAgOiBpdGVtLnRvO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBpbXBvcnQgZ29lcyBpbnRvIGEgbW9kdWxlXG4gIGlmICh0YXJnZXQuc3RhcnRzV2l0aChcIm1vZHVsZS5cIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdC5hZGRDb21tZW50KFxuICAgICAgICB0LmVtcHR5U3RhdGVtZW50KCksXG4gICAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgICBgQ0RLVE4gZG9lcyBub3Qgc3VwcG9ydCBpbXBvcnRzIGludG8gbW9kdWxlcyB5ZXQsIHBsZWFzZSByZW1vdmUgdGhlIGltcG9ydCBibG9jayBpbXBvcnRpbmcgJHtpdGVtLmlkfSBpbnRvICR7dGFyZ2V0fSBmcm9tIHlvdXIgY29uZmlndXJhdGlvbmAsXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICAvLyBXZSBub3cga25vdyB0aGF0IHRoZSBpbXBvcnQgZ29lcyBpbnRvIGEgcmVzb3VyY2UsIGUuZy4gYXdzX2luc3RhbmNlLmV4YW1wbGVcbiAgY29uc3QgW3Jlc291cmNlVHlwZUlkZW50aWZpZXIsIHJlc291cmNlTmFtZV0gPSB0YXJnZXQuc3BsaXQoXCIuXCIpO1xuICBpZiAocmVzb3VyY2VOYW1lLmluY2x1ZGVzKFwiW1wiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB0LmFkZENvbW1lbnQoXG4gICAgICAgIHQuZW1wdHlTdGF0ZW1lbnQoKSxcbiAgICAgICAgXCJsZWFkaW5nXCIsXG4gICAgICAgIGBDREtUTiBkb2VzIG5vdCBzdXBwb3J0IGltcG9ydHMgaW50byByZXNvdXJjZXMgd2l0aCBjb3VudCBvciBmb3JfZWFjaCB5ZXQsIHBsZWFzZSByZW1vdmUgdGhlIGltcG9ydCBibG9jayBpbXBvcnRpbmcgJHtpdGVtLmlkfSBpbnRvICR7dGFyZ2V0fSBmcm9tIHlvdXIgY29uZmlndXJhdGlvbmAsXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZXhpc3RpbmcgcmVzb3VyY2UgY29uZmlnIHdpdGggdGhlIGdpdmVuIG5hbWVcbiAgaWYgKGdyYXBoLmhhc05vZGUodGFyZ2V0KSkge1xuICAgIC8vIFdlIHdpbGwgaGFuZGxlIHRoaXMgY2FzZSBpbiB0aGUgcmVzb3VyY2UgZnVuY3Rpb25cbiAgICAvLyBzbyB3ZSBjYW4gc2tpcCBvdmVyIGl0XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgW3Byb3ZpZGVyLCAuLi5yZXNvdXJjZVR5cGVOYW1lUGFydHNdID1cbiAgICByZXNvdXJjZVR5cGVJZGVudGlmaWVyLnNwbGl0KFwiX1wiKTtcblxuICBjb25zdCBjb25zdHJ1Y3RJZCA9IHVuaXF1ZUlkKHNjb3BlLmNvbnN0cnVjdHMsIGNhbWVsQ2FzZShyZXNvdXJjZU5hbWUpKTtcbiAgY29uc3QgY29uc3RydWN0Q2xhc3MgPSBjb25zdHJ1Y3RBc3QoXG4gICAgc2NvcGUsXG4gICAgYCR7cHJvdmlkZXJ9LiR7cmVzb3VyY2VUeXBlTmFtZVBhcnRzLmpvaW4oXCJfXCIpfWAsXG4gICAgZmFsc2UsXG4gICk7XG4gIHJldHVybiBbXG4gICAgdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgICAgIGNvbnN0cnVjdENsYXNzLFxuICAgICAgICAgIHQuaWRlbnRpZmllcihcImdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0XCIpLFxuICAgICAgICApLFxuICAgICAgICBbXG4gICAgICAgICAgdC50aGlzRXhwcmVzc2lvbigpLFxuICAgICAgICAgIHQuc3RyaW5nTGl0ZXJhbChjb25zdHJ1Y3RJZCksXG4gICAgICAgICAgdC5zdHJpbmdMaXRlcmFsKGl0ZW0uaWQpLFxuICAgICAgICBdLFxuICAgICAgKSxcbiAgICApLFxuICBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmlkZXIoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGtleTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpdGVtOiBQcm92aWRlclswXSxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgY29uc3QgeyB2ZXJzaW9uLCAuLi5wcm9wcyB9ID0gaXRlbTtcblxuICBjb25zdCBpbXBvcnRLZXkgPSBrZXkgPT09IFwibnVsbFwiID8gXCJOdWxsUHJvdmlkZXJcIiA6IGtleTtcblxuICByZXR1cm4gYXNFeHByZXNzaW9uKFxuICAgIHNjb3BlLFxuICAgIGAke2ltcG9ydEtleX0uJHtwYXNjYWxDYXNlKGtleSl9UHJvdmlkZXJgLFxuICAgIGtleSxcbiAgICBwcm9wcyxcbiAgICBmYWxzZSxcbiAgICB0cnVlLFxuICAgIGdldFJlZmVyZW5jZShncmFwaCwgaWQpLFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNka3RmSW1wb3J0ID0gdGVtcGxhdGUoXG4gIGBpbXBvcnQgKiBhcyBjZGt0biBmcm9tIFwiY2RrdG5cImAsXG4pKCkgYXMgdC5TdGF0ZW1lbnQ7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RzSW1wb3J0ID0gdGVtcGxhdGUoXG4gIGBpbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCJgLFxuKSgpIGFzIHQuU3RhdGVtZW50O1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZXJJbXBvcnRzID0gKHByb3ZpZGVyczogc3RyaW5nW10pID0+XG4gIHByb3ZpZGVycy5tYXAoKHByb3ZpZGVyTmFtZSkgPT4ge1xuICAgIGNvbnN0IHBhcnRzID0gcHJvdmlkZXJOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBjb25zdCBuYW1lID0gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdIDogcGFydHNbMF07XG4gICAgY29uc3QgaW1wb3J0TmFtZSA9IG5hbWUgPT09IFwibnVsbFwiID8gXCJOdWxsUHJvdmlkZXJcIiA6IG5hbWU7XG4gICAgcmV0dXJuIHRlbXBsYXRlKFxuICAgICAgYGltcG9ydCAqIGFzICR7aW1wb3J0TmFtZX0gZnJvbSBcIi4vLmdlbi9wcm92aWRlcnMvJHtuYW1lLnJlcGxhY2UoXG4gICAgICAgIFwiLi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICl9XCJgLFxuICAgICkoKSBhcyB0LlN0YXRlbWVudDtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBtb2R1bGVJbXBvcnRzID0gKG1vZHVsZXM6IFJlY29yZDxzdHJpbmcsIE1vZHVsZT4gfCB1bmRlZmluZWQpID0+IHtcbiAgY29uc3QgdW5pcXVlTW9kdWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBPYmplY3QudmFsdWVzKG1vZHVsZXMgfHwge30pLm1hcCgoW21vZHVsZV0pID0+XG4gICAgdW5pcXVlTW9kdWxlcy5hZGQobW9kdWxlLnNvdXJjZSksXG4gICk7XG5cbiAgY29uc3QgaW1wb3J0czogdC5TdGF0ZW1lbnRbXSA9IFtdO1xuICB1bmlxdWVNb2R1bGVzLmZvckVhY2goKG0pID0+IHtcbiAgICBjb25zdCBtb2R1bGVDb25zdHJhaW50ID0gbmV3IFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQobSk7XG4gICAgaW1wb3J0cy5wdXNoKFxuICAgICAgdGVtcGxhdGUuYXN0KFxuICAgICAgICBgaW1wb3J0ICogYXMgJHttb2R1bGVDb25zdHJhaW50LmNsYXNzTmFtZX0gZnJvbSBcIi4vLmdlbi9tb2R1bGVzLyR7bW9kdWxlQ29uc3RyYWludC5maWxlTmFtZX1cImAsXG4gICAgICApIGFzIHQuU3RhdGVtZW50LFxuICAgICk7XG4gIH0pO1xuICByZXR1cm4gaW1wb3J0cztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW4oc3RhdGVtZW50czogdC5TdGF0ZW1lbnRbXSkge1xuICBsb2dnZXIuZGVidWcoYEdlbmVyYXRpbmcgY29kZSBmb3IgJHtKU09OLnN0cmluZ2lmeShzdGF0ZW1lbnRzLCBudWxsLCAyKX1gKTtcbiAgY29uc3QgY29kZSA9IHByZXR0aWVyLmZvcm1hdChnZW5lcmF0ZSh0LnByb2dyYW0oc3RhdGVtZW50cykgYXMgYW55KS5jb2RlLCB7XG4gICAgcGFyc2VyOiBcImJhYmVsXCIsXG4gIH0pO1xuXG4gIGxvZ2dlci5kZWJ1ZyhgR2VuZXJhdGVkIGNvZGU6XFxuJHtjb2RlfWApO1xuXG4gIHJldHVybiBjb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkSW1wb3J0Rm9yQ29kZUNvbnRhaW5lcihcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgY29kZUNvbnRhaW5lcjogc3RyaW5nLFxuKSB7XG4gIHN3aXRjaCAoY29kZUNvbnRhaW5lcikge1xuICAgIGNhc2UgXCJjb25zdHJ1Y3RzLkNvbnN0cnVjdFwiOlxuICAgICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICAgIHByb3ZpZGVyOiBcImNvbnN0cnVjdHNcIixcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJDb25zdHJ1Y3RcIixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiY2RrdG4uVGVycmFmb3JtU3RhY2tcIjpcbiAgICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgICBjb25zdHJ1Y3ROYW1lOiBcIlRlcnJhZm9ybVN0YWNrXCIsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImNka3RmLlRlcnJhZm9ybVN0YWNrXCI6XG4gICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgcHJvdmlkZXI6IFwiY2RrdGZcIixcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1TdGFja1wiLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFwiVW5zdXBwb3J0ZWQgY29kZSBjb250YWluZXI6IFwiICsgY29kZUNvbnRhaW5lcik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBDb2RlSW5Db25zdHJ1Y3RvcihcbiAgY29kZUNvbnRhaW5lcjogc3RyaW5nLFxuICBjb2RlOiB0LlN0YXRlbWVudFtdLFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgY29uZmlnVHlwZU5hbWU/OiBzdHJpbmcsXG4pOiB0LlN0YXRlbWVudCB7XG4gIGxldCBiYXNlQ29udGFpbmVyQ2xhc3M6IHQuSWRlbnRpZmllcjtcbiAgc3dpdGNoIChjb2RlQ29udGFpbmVyKSB7XG4gICAgY2FzZSBcImNvbnN0cnVjdHMuQ29uc3RydWN0XCI6XG4gICAgICBiYXNlQ29udGFpbmVyQ2xhc3MgPSB0LmlkZW50aWZpZXIoXCJDb25zdHJ1Y3RcIik7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJjZGt0bi5UZXJyYWZvcm1TdGFja1wiOlxuICAgICAgYmFzZUNvbnRhaW5lckNsYXNzID0gdC5pZGVudGlmaWVyKFwiVGVycmFmb3JtU3RhY2tcIik7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFwiVW5zdXBwb3J0ZWQgY29kZSBjb250YWluZXI6IFwiICsgY29kZUNvbnRhaW5lcik7XG4gIH1cbiAgaWYgKGNvbmZpZ1R5cGVOYW1lKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLnN0YXRlbWVudChcbiAgICAgIGBcbiAgY2xhc3MgJSVjbGFzc05hbWUlJSBleHRlbmRzICUlYmFzZSUlIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIGNvbmZpZzogJHtjb25maWdUeXBlTmFtZX0pIHtcbiAgICAgIHN1cGVyKHNjb3BlLCBuYW1lKTtcbiAgICAgICUlY29kZSUlXG4gICAgfVxuICB9XG5gLFxuICAgICAgeyBzeW50YWN0aWNQbGFjZWhvbGRlcnM6IHRydWUsIHBsdWdpbnM6IFtcInR5cGVzY3JpcHRcIl0gfSxcbiAgICApKHtcbiAgICAgIGNvZGUsXG4gICAgICBiYXNlOiBiYXNlQ29udGFpbmVyQ2xhc3MsXG4gICAgICBjbGFzc05hbWU6IHQuaWRlbnRpZmllcihjbGFzc05hbWUpLFxuICAgIH0pIGFzIHQuU3RhdGVtZW50O1xuICB9XG4gIHJldHVybiB0ZW1wbGF0ZS5zdGF0ZW1lbnQoXG4gICAgYFxuICBjbGFzcyAlJWNsYXNzTmFtZSUlIGV4dGVuZHMgJSViYXNlJSUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykge1xuICAgICAgc3VwZXIoc2NvcGUsIG5hbWUpO1xuICAgICAgJSVjb2RlJSVcbiAgICB9XG4gIH1cbmAsXG4gICAgeyBzeW50YWN0aWNQbGFjZWhvbGRlcnM6IHRydWUsIHBsdWdpbnM6IFtcInR5cGVzY3JpcHRcIl0gfSxcbiAgKSh7XG4gICAgY29kZSxcbiAgICBiYXNlOiBiYXNlQ29udGFpbmVyQ2xhc3MsXG4gICAgY2xhc3NOYW1lOiB0LmlkZW50aWZpZXIoY2xhc3NOYW1lKSxcbiAgfSkgYXMgdC5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlckNvbnN0cnVjdEltcG9ydHMgPSAoaW1wb3J0YWJsZTogSW1wb3J0YWJsZUNvbnN0cnVjdFtdKSA9PiB7XG4gIGxldCBwcm92aWRlciA9IGltcG9ydGFibGVbMF0ucHJvdmlkZXI7XG4gIGxldCBuYW1lc3BhY2UgPSBpbXBvcnRhYmxlWzBdLm5hbWVzcGFjZTtcbiAgY29uc3QgbmFtZXMgPSBpbXBvcnRhYmxlLm1hcCgoaSkgPT4gaS5jb25zdHJ1Y3ROYW1lKTtcblxuICBpZiAocHJvdmlkZXIgPT09IFwiY2RrdG5cIiB8fCBwcm92aWRlciA9PT0gXCJjb25zdHJ1Y3RzXCIpIHtcbiAgICByZXR1cm4gdGVtcGxhdGUoXG4gICAgICBgaW1wb3J0IHsgJHtuYW1lcy5qb2luKFwiLCBcIil9IH0gZnJvbSBcIiR7cHJvdmlkZXJ9XCJgLFxuICAgICkoKSBhcyB0LlN0YXRlbWVudDtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2UpIHtcbiAgICBuYW1lc3BhY2UgPSBzbmFrZUNhc2UobmFtZXNwYWNlKS5yZXBsYWNlKC9fL2csIFwiLVwiKTtcbiAgfVxuXG4gIC8vIFNwZWNpYWwgY2FzZXMgdG8gdW5kbyBwcm92aWRlciBuYW1lcyB0aGF0IHdlIG92ZXJyaWRlXG4gIGlmIChwcm92aWRlciA9PT0gXCJOdWxsUHJvdmlkZXJcIikge1xuICAgIHByb3ZpZGVyID0gXCJudWxsXCI7XG4gIH1cblxuICByZXR1cm4gdGVtcGxhdGUoXG4gICAgYGltcG9ydCB7ICR7bmFtZXMuam9pbihcbiAgICAgIFwiLCBcIixcbiAgICApfSB9IGZyb20gXCIuLy5nZW4vcHJvdmlkZXJzLyR7cHJvdmlkZXJ9LyR7bmFtZXNwYWNlfVwiYCxcbiAgKSgpIGFzIHQuU3RhdGVtZW50O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW1wb3J0cyhpbXBvcnRhYmxlczogSW1wb3J0YWJsZUNvbnN0cnVjdFtdKSB7XG4gIGNvbnN0IGdyb3VwZWRJbXBvcnRhYmxlcyA9IGltcG9ydGFibGVzLnJlZHVjZShcbiAgICAoYWNjLCBpbXBvcnRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBucyA9IGltcG9ydGFibGUubmFtZXNwYWNlIHx8IFwiXCI7XG4gICAgICAvLyBEb2luZyBzb21lIGhhY2t5IG9yZGVyaW5nIG9mIHRoZSBpbXBvcnRzIHRvIG1ha2UgdGhlbSBsb29rIGEgYml0IG5pY2VyXG4gICAgICBjb25zdCBwcmVmaXggPVxuICAgICAgICBpbXBvcnRhYmxlLnByb3ZpZGVyID09PSBcImNvbnN0cnVjdHNcIlxuICAgICAgICAgID8gXCIxXCJcbiAgICAgICAgICA6IGltcG9ydGFibGUucHJvdmlkZXIgPT09IFwiY2RrdG5cIlxuICAgICAgICAgICAgPyBcIjJcIlxuICAgICAgICAgICAgOiBpbXBvcnRhYmxlLnByb3ZpZGVyID09PSBcImNka3RmXCJcbiAgICAgICAgICAgICAgPyBcIjNcIlxuICAgICAgICAgICAgICA6IFwiNFwiO1xuICAgICAgY29uc3QgZ3JvdXBOYW1lID0gYCR7cHJlZml4fS4ke2ltcG9ydGFibGUucHJvdmlkZXJ9LiR7bnN9YDtcbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7aW1wb3J0YWJsZS5wcm92aWRlcn0uJHtuc30uJHtpbXBvcnRhYmxlLmNvbnN0cnVjdE5hbWV9YDtcblxuICAgICAgaWYgKGFjY1tncm91cE5hbWVdKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0c0FscmVhZHkgPSBhY2NbZ3JvdXBOYW1lXS5zb21lKFxuICAgICAgICAgIChpbXBvcnRhYmxlKSA9PlxuICAgICAgICAgICAgYCR7aW1wb3J0YWJsZS5wcm92aWRlcn0uJHtuc30uJHtpbXBvcnRhYmxlLmNvbnN0cnVjdE5hbWV9YCA9PT1cbiAgICAgICAgICAgIGZ1bGxOYW1lLFxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhpc3RzQWxyZWFkeSkge1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgYWNjW2dyb3VwTmFtZV0ucHVzaChpbXBvcnRhYmxlKTtcbiAgICAgICAgYWNjW2dyb3VwTmFtZV0uc29ydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjW2dyb3VwTmFtZV0gPSBbaW1wb3J0YWJsZV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBJbXBvcnRhYmxlQ29uc3RydWN0W10+LFxuICApO1xuXG4gIGxldCBjb21tZW50QWRkZWQgPSBmYWxzZTtcbiAgY29uc3QgY29uc3RydWN0SW1wb3J0cyA9IE9iamVjdC5rZXlzKGdyb3VwZWRJbXBvcnRhYmxlcylcbiAgICAuc29ydCgpXG4gICAgLm1hcCgoZ3JvdXBOYW1lKSA9PiB7XG4gICAgICBjb25zdCBpbXBvcnRTdGF0ZW1lbnQgPSBwcm92aWRlckNvbnN0cnVjdEltcG9ydHMoXG4gICAgICAgIGdyb3VwZWRJbXBvcnRhYmxlc1tncm91cE5hbWVdLFxuICAgICAgKTtcblxuICAgICAgaWYgKGdyb3VwTmFtZS5zdGFydHNXaXRoKFwiNC5cIikgJiYgIWNvbW1lbnRBZGRlZCkge1xuICAgICAgICBjb21tZW50QWRkZWQgPSB0cnVlO1xuICAgICAgICB0LmFkZENvbW1lbnQoXG4gICAgICAgICAgaW1wb3J0U3RhdGVtZW50LFxuICAgICAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgICAgIGBcXG4qIFByb3ZpZGVyIGJpbmRpbmdzIGFyZSBnZW5lcmF0ZWQgYnkgcnVubmluZyBcXGBjZGt0biBnZXRcXGAuXG4qIFNlZSBodHRwczovL2Nkay50Zi9wcm92aWRlci1nZW5lcmF0aW9uIGZvciBtb3JlIGRldGFpbHMuXFxuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbXBvcnRTdGF0ZW1lbnQ7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdEltcG9ydHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbmZpZ1R5cGUoXG4gIG5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBBdHRyaWJ1dGVQYXRoPixcbik6IHQuU3RhdGVtZW50IHtcbiAgcmV0dXJuIHQudHNJbnRlcmZhY2VEZWNsYXJhdGlvbihcbiAgICB0LmlkZW50aWZpZXIobmFtZSksXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0LnRzSW50ZXJmYWNlQm9keShcbiAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmZpZykubWFwKChba2V5LCBfdmFsdWVdKSA9PlxuICAgICAgICB0LnRzUHJvcGVydHlTaWduYXR1cmUoXG4gICAgICAgICAgdC5pZGVudGlmaWVyKGtleSksXG4gICAgICAgICAgdC50U1R5cGVBbm5vdGF0aW9uKHQudHNBbnlLZXl3b3JkKCkpLCAvLyBUT0RPOiBUcnkgdG8gbWFrZSB0aGlzIGJldHRlciB0aGFuIGFueVxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApLFxuICApO1xufVxuIl19
676
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9nZW5lcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxpRUFBd0M7QUFDeEMsK0RBQXVDO0FBQ3ZDLGdEQUFrQztBQUVsQyx3REFBZ0M7QUFTaEMsbUNBQWtFO0FBVWxFLCtDQUE4RTtBQUU5RSw2Q0FBa0Q7QUFDbEQsa0VBR21DO0FBQ25DLHVEQUkyQjtBQUMzQiw0Q0FBMEU7QUFDMUUsOENBQWdFO0FBQ2hFLHFEQUE4RTtBQUM5RSwyQ0FJcUI7QUFDckIseUNBQTJDO0FBQzNDLCtDQUF3RDtBQUV4RCxTQUFTLFlBQVksQ0FBQyxLQUFvQixFQUFFLEVBQVU7SUFDcEQsY0FBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXpDLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixjQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixTQUFTLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsY0FBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkQsY0FBTSxDQUFDLEtBQUssQ0FDVix1QkFBdUIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUM3RCxDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUMsZ0JBQWdC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QUM7QUFDMUIsQ0FBQztBQXpERCxvQ0F5REM7QUFFRCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBWSxFQUNaLE1BQXFDO0lBRXJDLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixDQUM3QixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUNsQixTQUFTLEVBQ1QsU0FBUyxFQUNULENBQUMsQ0FBQyxlQUFlLENBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQzNDLENBQUMsQ0FBQyxtQkFBbUIsQ0FDbkIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDakIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUNyQyxDQUNGLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQWpCRCxnREFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IGdlbmVyYXRlIGZyb20gXCJAYmFiZWwvZ2VuZXJhdG9yXCI7XG5pbXBvcnQgdGVtcGxhdGUgZnJvbSBcIkBiYWJlbC90ZW1wbGF0ZVwiO1xuaW1wb3J0ICogYXMgdCBmcm9tIFwiQGJhYmVsL3R5cGVzXCI7XG5pbXBvcnQgeyBEaXJlY3RlZEdyYXBoIH0gZnJvbSBcImdyYXBob2xvZ3lcIjtcbmltcG9ydCBwcmV0dGllciBmcm9tIFwicHJldHRpZXJcIjtcblxuaW1wb3J0IHtcbiAgVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgUHJvZ3JhbVNjb3BlLFxuICBSZXNvdXJjZVNjb3BlLFxuICBJbXBvcnRhYmxlQ29uc3RydWN0LFxuICBBdHRyaWJ1dGVQYXRoLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgY2FtZWxDYXNlLCBsb2dnZXIsIHBhc2NhbENhc2UsIHVuaXF1ZUlkIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIFJlc291cmNlLFxuICBUZXJyYWZvcm1Db25maWcsXG4gIE1vZHVsZSxcbiAgUHJvdmlkZXIsXG4gIFZhcmlhYmxlLFxuICBPdXRwdXQsXG4gIEltcG9ydCxcbn0gZnJvbSBcIi4vc2NoZW1hXCI7XG5pbXBvcnQgeyBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMsIGV4cHJlc3Npb25Bc3QgfSBmcm9tIFwiLi9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgUmVmZXJlbmNlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGZpbmRVc2VkUmVmZXJlbmNlcyB9IGZyb20gXCIuL3JlZmVyZW5jZXNcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybU1vZHVsZUNvbnN0cmFpbnQsXG4gIGVzY2FwZUF0dHJpYnV0ZU5hbWUsXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5pbXBvcnQge1xuICBnZXRUeXBlQXRQYXRoLFxuICBpc01hcEF0dHJpYnV0ZSxcbiAgZ2V0RGVzaXJlZFR5cGUsXG59IGZyb20gXCIuL3RlcnJhZm9ybVNjaGVtYVwiO1xuaW1wb3J0IHsgRXJyb3JzLCBBdHRyaWJ1dGVUeXBlLCBCbG9ja1R5cGUsIFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgVEZFeHByZXNzaW9uU3ludGF4VHJlZSBhcyB0ZXggfSBmcm9tIFwiQGNka3RuL2hjbDJqc29uXCI7XG5pbXBvcnQgeyBleHRyYWN0RHluYW1pY0Jsb2NrcywgaXNOZXN0ZWREeW5hbWljQmxvY2sgfSBmcm9tIFwiLi9keW5hbWljLWJsb2Nrc1wiO1xuaW1wb3J0IHtcbiAgY29uc3RydWN0QXN0LFxuICByZWZlcmVuY2VUb1ZhcmlhYmxlTmFtZSxcbiAgdmFyaWFibGVOYW1lLFxufSBmcm9tIFwiLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IHNuYWtlQ2FzZSB9IGZyb20gXCJjZGt0bi9saWIvdXRpbFwiO1xuaW1wb3J0IHsgZmlsbFdpdGhDb25maWdBY2Nlc3NvcnMgfSBmcm9tIFwiLi9wYXJ0aWFsQ29kZVwiO1xuXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2UoZ3JhcGg6IERpcmVjdGVkR3JhcGgsIGlkOiBzdHJpbmcpIHtcbiAgbG9nZ2VyLmRlYnVnKGBGaW5kaW5nIHJlZmVyZW5jZSBmb3IgJHtpZH1gKTtcbiAgY29uc3QgbmVpZ2hib3JzID0gZ3JhcGgub3V0TmVpZ2hib3JzKGlkKTtcblxuICBpZiAobmVpZ2hib3JzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIG5laWdoYm9ycyAke25laWdoYm9yc30gZm9yICR7aWR9YCk7XG4gICAgY29uc3QgZWRnZSA9IGdyYXBoLmRpcmVjdGVkRWRnZShpZCwgbmVpZ2hib3JzWzBdKTtcblxuICAgIGlmIChlZGdlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvdW5kIGZpcnN0IGVkZ2UgJHtlZGdlfSBmb3IgJHtpZH1gKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJldHVybmluZyByZWZlcmVuY2UgJHtncmFwaC5nZXRFZGdlQXR0cmlidXRlKGVkZ2UsIFwicmVmXCIpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdyYXBoLmdldEVkZ2VBdHRyaWJ1dGUoZWRnZSwgXCJyZWZcIikgYXMgUmVmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvdW5kIG5vIGVkZ2UgZm9yICR7aWR9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRyaWJ1dGVOYW1lVG9DZGt0Zk5hbWUobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBlc2NhcGVBdHRyaWJ1dGVOYW1lKGNhbWVsQ2FzZShuYW1lKSk7XG59XG5cbmV4cG9ydCBjb25zdCB2YWx1ZVRvVHMgPSBhc3luYyAoXG4gIHNjb3BlOiBSZXNvdXJjZVNjb3BlLFxuICBpdGVtOiBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLFxuICBwYXRoOiBzdHJpbmcsXG4gIGlzTW9kdWxlID0gZmFsc2UsXG4pOiBQcm9taXNlPHQuRXhwcmVzc2lvbj4gPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBpdGVtKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaWYgKFxuICAgICAgICAoYXdhaXQgZmluZFVzZWRSZWZlcmVuY2VzKHNjb3BlLm5vZGVJZHMsIGl0ZW0pKS5zb21lKChyZWYpID0+XG4gICAgICAgICAgcGF0aC5zdGFydHNXaXRoKHJlZi5yZWZlcmVuY2VlLmlkKSxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0LnN0cmluZ0xpdGVyYWwoaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoc2NvcGUsIGBcIiR7aXRlbX1cImAsICgpID0+XG4gICAgICAgIGdldERlc2lyZWRUeXBlKHNjb3BlLCBwYXRoKSxcbiAgICAgICk7XG5cbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhzY29wZSwgYCR7aXRlbX1gLCAoKSA9PlxuICAgICAgICBnZXREZXNpcmVkVHlwZShzY29wZSwgcGF0aCksXG4gICAgICApO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoc2NvcGUsIGAke2l0ZW19YCwgKCkgPT5cbiAgICAgICAgZ2V0RGVzaXJlZFR5cGUoc2NvcGUsIHBhdGgpLFxuICAgICAgKTtcbiAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdC5udWxsTGl0ZXJhbCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgaXRlcmF0b3JzIGFuZCBkeW5hbWljIGJsb2NrcyB3ZSBwdXQgdGhlIGNvcnJlY3QgVFMgZXhwcmVzc2lvbiBpbiB0aGUgY29uZmlnIGFoZWFkIG9mIHRpbWVcbiAgICAgIGlmICh0LmlzTm9kZShpdGVtKSAmJiB0LmlzRXhwcmVzc2lvbihpdGVtKSkge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXR0cmlidXRlVHlwZSA9IGdldFR5cGVBdFBhdGgoc2NvcGUucHJvdmlkZXJTY2hlbWEsIHBhdGgpO1xuXG4gICAgICBmdW5jdGlvbiBzaG91bGRSZW1vdmVBcnJheUJhc2VkT25UeXBlKFxuICAgICAgICBhdHRyaWJ1dGVUeXBlOiBTY2hlbWEgfCBBdHRyaWJ1dGVUeXBlIHwgQmxvY2tUeXBlIHwgbnVsbCxcbiAgICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZVR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoZSBkZWZhdWx0IGFzc3VtcHRpb24gaXMgd2UgbmVlZCB0aGUgYXJyYXlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hcHMgYW5kIG9iamVjdCBkb24ndCBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXR0cmlidXRlVHlwZSkgJiZcbiAgICAgICAgICAoYXR0cmlidXRlVHlwZVswXSA9PT0gXCJtYXBcIiB8fCBhdHRyaWJ1dGVUeXBlWzBdID09PSBcIm9iamVjdFwiKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGl0J3MgYSBibG9jayB0eXBlIHdpdGggbWF4X2l0ZW1zID0gMSB3ZSBkb24ndCBuZWVkIHRvIHdyYXAgaXQgaW4gYW4gYXJyYXlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhdHRyaWJ1dGVUeXBlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgXCJtYXhfaXRlbXNcIiBpbiBhdHRyaWJ1dGVUeXBlICYmXG4gICAgICAgICAgYXR0cmlidXRlVHlwZS5tYXhfaXRlbXMgPT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVud3JhcHBlZEl0ZW0gPVxuICAgICAgICBBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgIChzaG91bGRSZW1vdmVBcnJheUJhc2VkT25UeXBlKGF0dHJpYnV0ZVR5cGUpIHx8XG4gICAgICAgICAgcGF0aC5lbmRzV2l0aChcImxpZmVjeWNsZVwiKSB8fFxuICAgICAgICAgIHBhdGguZW5kc1dpdGgoXCJjb25uZWN0aW9uXCIpKVxuICAgICAgICAgID8gaXRlbVswXVxuICAgICAgICAgIDogaXRlbTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodW53cmFwcGVkSXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIHQuYXJyYXlFeHByZXNzaW9uKFxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdW53cmFwcGVkSXRlbS5tYXAoKGkpID0+IHZhbHVlVG9UcyhzY29wZSwgaSwgYCR7cGF0aH0uW11gKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHQub2JqZWN0RXhwcmVzc2lvbihcbiAgICAgICAgKFxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModW53cmFwcGVkSXRlbSkubWFwKGFzeW5jIChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJkeW5hbWljXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZvcl9lYWNoOiBfZm9yX2VhY2gsIC4uLm90aGVycyB9ID0gdmFsdWUgYXMgYW55O1xuICAgICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNSZWYgPSBPYmplY3Qua2V5cyhvdGhlcnMpWzBdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0Lm9iamVjdFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgdC5pZGVudGlmaWVyKFxuICAgICAgICAgICAgICAgICAgICBzY29wZS53aXRoaW5PdmVycmlkZUV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICA/IGR5bmFtaWNSZWZcbiAgICAgICAgICAgICAgICAgICAgICA6IGVzY2FwZUF0dHJpYnV0ZU5hbWUoY2FtZWxDYXNlKGR5bmFtaWNSZWYpKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB0LmFycmF5RXhwcmVzc2lvbigpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBpdGVtUGF0aCA9IGAke3BhdGh9LiR7a2V5fWA7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1BdHRyaWJ1dGVUeXBlID0gZ2V0VHlwZUF0UGF0aChcbiAgICAgICAgICAgICAgICBzY29wZS5wcm92aWRlclNjaGVtYSxcbiAgICAgICAgICAgICAgICBpdGVtUGF0aCxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCB0eXBlTWV0YWRhdGEgPSBnZXRUeXBlQXRQYXRoKFxuICAgICAgICAgICAgICAgIHNjb3BlLnByb3ZpZGVyU2NoZW1hLFxuICAgICAgICAgICAgICAgIGl0ZW1QYXRoLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlzU2luZ2xlSXRlbUJsb2NrID1cbiAgICAgICAgICAgICAgICB0eXBlTWV0YWRhdGEgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdHlwZU1ldGFkYXRhID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGVNZXRhZGF0YSwgXCJtYXhfaXRlbXNcIilcbiAgICAgICAgICAgICAgICAgID8gKHR5cGVNZXRhZGF0YSBhcyBhbnkpLm1heF9pdGVtcyA9PT0gMVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICAgICAgICBjb25zdCBzaG91bGRCZUFycmF5ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAhKHQuaXNOb2RlKHZhbHVlKSAmJiB0LmlzRXhwcmVzc2lvbih2YWx1ZSkpICYmXG4gICAgICAgICAgICAgICAgIWlzU2luZ2xlSXRlbUJsb2NrICYmXG4gICAgICAgICAgICAgICAgLy8gTWFwIHR5cGUgYXR0cmlidXRlcyBtdXN0IG5vdCBiZSB3cmFwcGVkIGluIGFycmF5c1xuICAgICAgICAgICAgICAgICFpc01hcEF0dHJpYnV0ZShpdGVtQXR0cmlidXRlVHlwZSkgJiZcbiAgICAgICAgICAgICAgICBrZXkgIT09IFwidGFnc1wiICYmXG4gICAgICAgICAgICAgICAga2V5ICE9PSBcImZvckVhY2hcIiAmJlxuICAgICAgICAgICAgICAgIGtleSAhPT0gXCJsaWZlY3ljbGVcIjtcblxuICAgICAgICAgICAgICBjb25zdCBrZWVwS2V5TmFtZTogYm9vbGVhbiA9XG4gICAgICAgICAgICAgICAgIWlzTW9kdWxlICYmXG4gICAgICAgICAgICAgICAga2V5ICE9PSBcImRlcGVuZHNfb25cIiAmJlxuICAgICAgICAgICAgICAgICFwYXRoLmluY2x1ZGVzKFwibGlmZWN5Y2xlXCIpICYmXG4gICAgICAgICAgICAgICAgKGtleSA9PT0gXCJmb3JfZWFjaFwiIHx8XG4gICAgICAgICAgICAgICAgICAhdHlwZU1ldGFkYXRhIHx8XG4gICAgICAgICAgICAgICAgICBpc01hcEF0dHJpYnV0ZShhdHRyaWJ1dGVUeXBlKSkgJiZcbiAgICAgICAgICAgICAgICAhKHBhdGguc3RhcnRzV2l0aChcInZhci5cIikgJiYgcGF0aC5pbmNsdWRlcyhcInZhbGlkYXRpb25cIikpO1xuXG4gICAgICAgICAgICAgIHJldHVybiB0Lm9iamVjdFByb3BlcnR5KFxuICAgICAgICAgICAgICAgIHQuc3RyaW5nTGl0ZXJhbChcbiAgICAgICAgICAgICAgICAgIGtlZXBLZXlOYW1lID8ga2V5IDogYXR0cmlidXRlTmFtZVRvQ2RrdGZOYW1lKGtleSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzaG91bGRCZUFycmF5XG4gICAgICAgICAgICAgICAgICA/IHQuYXJyYXlFeHByZXNzaW9uKFthd2FpdCB2YWx1ZVRvVHMoc2NvcGUsIHZhbHVlLCBpdGVtUGF0aCldKVxuICAgICAgICAgICAgICAgICAgOiBhd2FpdCB2YWx1ZVRvVHMoc2NvcGUsIHZhbHVlLCBpdGVtUGF0aCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXG4gICAgICAgICkuZmlsdGVyKChleHByKSA9PiBleHByICE9PSB1bmRlZmluZWQpIGFzIHQuT2JqZWN0UHJvcGVydHlbXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHR5cGUgXCIgKyBpdGVtKTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYWNrZW5kVG9FeHByZXNzaW9uKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICB0ZjogVGVycmFmb3JtQ29uZmlnW1wiYmFja2VuZFwiXSxcbik6IFByb21pc2U8dC5TdGF0ZW1lbnRbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXModGYgfHwge30pLm1hcChhc3luYyAoW3R5cGUsIFtjb25maWddXSkgPT4ge1xuICAgICAgICBjb25zdCBiYWNrZW5kSWRlbnRpZmllciA9IHBhc2NhbENhc2UoYCR7dHlwZX1CYWNrZW5kYCk7XG4gICAgICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgICAgIGNvbnN0cnVjdE5hbWU6IGJhY2tlbmRJZGVudGlmaWVyLFxuICAgICAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgICAgIHQubmV3RXhwcmVzc2lvbih0LmlkZW50aWZpZXIoYmFja2VuZElkZW50aWZpZXIpLCBbXG4gICAgICAgICAgICB0LnRoaXNFeHByZXNzaW9uKCksXG4gICAgICAgICAgICB0Lm9iamVjdEV4cHJlc3Npb24oXG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmZpZykubWFwKGFzeW5jIChbcHJvcGVydHksIHZhbHVlXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICB0LmlkZW50aWZpZXIoY2FtZWxDYXNlKHByb3BlcnR5KSksXG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdmFsdWVUb1RzKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGF0aC1mb3ItYmFja2VuZHMtY2FuLWJlLWlnbm9yZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkucmVkdWNlKFxuICAgICAgICAgICAgICAgIChjYXJyeSwgaXRlbSkgPT4gWy4uLmNhcnJ5LCBpdGVtXSxcbiAgICAgICAgICAgICAgICBbXSBhcyB0Lk9iamVjdFByb3BlcnR5W10sXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKVxuICApLnJlZHVjZSgoY2FycnksIGl0ZW0pID0+IFsuLi5jYXJyeSwgaXRlbV0sIFtdIGFzIHQuU3RhdGVtZW50W10pO1xufVxuXG5mdW5jdGlvbiBhZGRPdmVycmlkZUV4cHJlc3Npb24oXG4gIHZhcmlhYmxlOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWU6IHQuRXhwcmVzc2lvbixcbiAgZXhwbGFuYXRvcnlDb21tZW50Pzogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IGFzdCA9IHQuZXhwcmVzc2lvblN0YXRlbWVudChcbiAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKHQuaWRlbnRpZmllcih2YXJpYWJsZSksIHQuaWRlbnRpZmllcihcImFkZE92ZXJyaWRlXCIpKSxcbiAgICAgIFt0LnN0cmluZ0xpdGVyYWwocGF0aCksIHZhbHVlXSxcbiAgICApLFxuICApO1xuXG4gIGlmIChleHBsYW5hdG9yeUNvbW1lbnQpIHtcbiAgICB0LmFkZENvbW1lbnQoYXN0LCBcImxlYWRpbmdcIiwgZXhwbGFuYXRvcnlDb21tZW50KTtcbiAgfVxuXG4gIHJldHVybiBhc3Q7XG59XG5cbmZ1bmN0aW9uIGFkZE92ZXJyaWRlTG9naWNhbElkRXhwcmVzc2lvbih2YXJpYWJsZTogc3RyaW5nLCBsb2dpY2FsSWQ6IHN0cmluZykge1xuICBjb25zdCBhc3QgPSB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgICAgdC5pZGVudGlmaWVyKHZhcmlhYmxlKSxcbiAgICAgICAgdC5pZGVudGlmaWVyKFwib3ZlcnJpZGVMb2dpY2FsSWRcIiksXG4gICAgICApLFxuICAgICAgW3Quc3RyaW5nTGl0ZXJhbChsb2dpY2FsSWQpXSxcbiAgICApLFxuICApO1xuXG4gIHQuYWRkQ29tbWVudChcbiAgICBhc3QsXG4gICAgXCJsZWFkaW5nXCIsXG4gICAgXCJUaGlzIGFsbG93cyB0aGUgVGVycmFmb3JtIHJlc291cmNlIG5hbWUgdG8gbWF0Y2ggdGhlIG9yaWdpbmFsIG5hbWUuIFlvdSBjYW4gcmVtb3ZlIHRoZSBjYWxsIGlmIHlvdSBkb24ndCBuZWVkIHRoZW0gdG8gbWF0Y2guXCIsXG4gICk7XG5cbiAgcmV0dXJuIGFzdDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtb3RlU3RhdGVUeXBlKGl0ZW06IFJlc291cmNlKSB7XG4gIGNvbnN0IGJhY2tlbmRSZWNvcmQgPSBpdGVtLmZpbmQoKHZhbCkgPT4gdmFsLmJhY2tlbmQpO1xuICBpZiAoYmFja2VuZFJlY29yZCkge1xuICAgIGNvbnN0IGJhY2tlbmQgPSBiYWNrZW5kUmVjb3JkLmJhY2tlbmQ7XG4gICAgc3dpdGNoIChiYWNrZW5kKSB7XG4gICAgICBjYXNlIFwicmVtb3RlXCI6XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgY2FzZSBcImV0Y2R2M1wiOlxuICAgICAgICByZXR1cm4gXCJfZXRjZF92M1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGBfJHtiYWNrZW5kfWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlVHlwZShwcm92aWRlcjogc3RyaW5nLCBuYW1lOiBzdHJpbmdbXSwgaXRlbTogUmVzb3VyY2UpIHtcbiAgc3dpdGNoIChwcm92aWRlcikge1xuICAgIGNhc2UgXCJkYXRhLnRlcnJhZm9ybVwiOlxuICAgICAgcmV0dXJuIGBjZGt0bi5kYXRhX3RlcnJhZm9ybV8ke25hbWUuam9pbihcIl9cIil9JHtnZXRSZW1vdGVTdGF0ZVR5cGUoXG4gICAgICAgIGl0ZW0sXG4gICAgICApfWA7XG4gICAgY2FzZSBcIm51bGxcIjpcbiAgICAgIHJldHVybiBgTnVsbFByb3ZpZGVyLiR7bmFtZS5qb2luKFwiX1wiKX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYCR7cHJvdmlkZXJ9LiR7bmFtZS5qb2luKFwiX1wiKX1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcENvbmZpZ1BlclJlc291cmNlVHlwZShyZXNvdXJjZTogc3RyaW5nLCBpdGVtOiBSZXNvdXJjZVswXSkge1xuICAvLyBCYWNrZW5kcyBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IEFQSVxuICBpZiAocmVzb3VyY2Uuc3RhcnRzV2l0aChcImNka3RuLmRhdGFfdGVycmFmb3JtX1wiKSkge1xuICAgIHJldHVybiBpdGVtLmNvbmZpZztcbiAgfVxuICByZXR1cm4gaXRlbTtcbn1cblxuY29uc3QgbG9vcENvbW1lbnQgPSBgSW4gbW9zdCBjYXNlcyBsb29wcyBzaG91bGQgYmUgaGFuZGxlZCBpbiB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgY29udGV4dCBhbmRcbm5vdCBpbnNpZGUgb2YgdGhlIFRlcnJhZm9ybSBjb250ZXh0LiBJZiB5b3UgYXJlIGxvb3Bpbmcgb3ZlciBzb21ldGhpbmcgZXh0ZXJuYWwsIGUuZy4gYSB2YXJpYWJsZSBvciBhIGZpbGUgaW5wdXRcbnlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgYSBmb3IgbG9vcC4gSWYgeW91IGFyZSBsb29waW5nIG92ZXIgc29tZXRoaW5nIG9ubHkga25vd24gdG8gVGVycmFmb3JtLCBlLmcuIGEgcmVzdWx0IG9mIGEgZGF0YSBzb3VyY2VcbnlvdSBuZWVkIHRvIGtlZXAgdGhpcyBsaWtlIGl0IGlzLmA7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb3VyY2UoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIHR5cGU6IHN0cmluZyxcbiAga2V5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IFJlc291cmNlLFxuICBncmFwaDogRGlyZWN0ZWRHcmFwaCxcbik6IFByb21pc2U8dC5TdGF0ZW1lbnRbXT4ge1xuICBjb25zdCBbcHJvdmlkZXIsIC4uLm5hbWVdID0gdHlwZS5zcGxpdChcIl9cIik7XG4gIGNvbnN0IHJlc291cmNlID0gcmVzb3VyY2VUeXBlKHByb3ZpZGVyLCBuYW1lLCBpdGVtKTtcblxuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgcmVzb3VyY2UgdHlwZSAnJHt0eXBlfSdgKTtcbiAgfVxuICBsZXQgZXhwcmVzc2lvbnM6IHQuU3RhdGVtZW50W10gPSBbXTtcbiAgY29uc3QgdmFyTmFtZSA9IHZhcmlhYmxlTmFtZShzY29wZSwgcmVzb3VyY2UsIGtleSk7XG4gIGNvbnN0IHsgZm9yX2VhY2gsIGNvdW50LCBwcm92aXNpb25lciwgLi4uY29uZmlnIH0gPSBpdGVtWzBdO1xuICBjb25zdCBtYXBwZWRDb25maWcgPSBtYXBDb25maWdQZXJSZXNvdXJjZVR5cGUocmVzb3VyY2UsIGNvbmZpZyk7XG5cbiAgbGV0IGZvckVhY2hJdGVyYXRvck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKGZvcl9lYWNoKSB7XG4gICAgZm9yRWFjaEl0ZXJhdG9yTmFtZSA9IHZhcmlhYmxlTmFtZShcbiAgICAgIHNjb3BlLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBgJHtrZXl9X2Zvcl9lYWNoX2l0ZXJhdG9yYCxcbiAgICApO1xuICAgIGNvbnN0IHJlZmVyZW5jZUFzdCA9IGF3YWl0IGNvbnZlcnRUZXJyYWZvcm1FeHByZXNzaW9uVG9UcyhcbiAgICAgIHNjb3BlLFxuICAgICAgYFwiJHtmb3JfZWFjaH1cImAsXG4gICAgICAoKSA9PiBbXCJsaXN0XCIsIFwiZHluYW1pY1wiXSxcbiAgICApO1xuXG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1JdGVyYXRvclwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXRlcmF0b3IgPSB0LnZhcmlhYmxlRGVjbGFyYXRpb24oXCJjb25zdFwiLCBbXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRvcihcbiAgICAgICAgdC5pZGVudGlmaWVyKGZvckVhY2hJdGVyYXRvck5hbWUpLFxuICAgICAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcIlRlcnJhZm9ybUl0ZXJhdG9yXCIpLFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKFwiZnJvbUxpc3RcIiksXG4gICAgICAgICAgKSxcblxuICAgICAgICAgIFtyZWZlcmVuY2VBc3RdLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICBdKTtcbiAgICB0LmFkZENvbW1lbnQoaXRlcmF0b3IsIFwibGVhZGluZ1wiLCBsb29wQ29tbWVudCk7XG4gICAgZXhwcmVzc2lvbnMucHVzaChpdGVyYXRvcik7XG5cbiAgICBtYXBwZWRDb25maWcuZm9yRWFjaCA9IHQuaWRlbnRpZmllcihmb3JFYWNoSXRlcmF0b3JOYW1lKTtcbiAgfVxuXG4gIGxldCBjb3VudEl0ZXJhdG9yTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoY291bnQpIHtcbiAgICBjb3VudEl0ZXJhdG9yTmFtZSA9IHZhcmlhYmxlTmFtZShzY29wZSwgcmVzb3VyY2UsIGAke2tleX1fY291bnRgKTtcbiAgICBjb25zdCByZWZlcmVuY2VBc3QgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGBcIiR7Y291bnR9XCJgLFxuICAgICAgKCkgPT4gXCJudW1iZXJcIixcbiAgICApO1xuXG4gICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1Db3VudFwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXRlcmF0b3IgPSB0LnZhcmlhYmxlRGVjbGFyYXRpb24oXCJjb25zdFwiLCBbXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRvcihcbiAgICAgICAgdC5pZGVudGlmaWVyKGNvdW50SXRlcmF0b3JOYW1lKSxcbiAgICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgICAgICB0LmlkZW50aWZpZXIoXCJUZXJyYWZvcm1Db3VudFwiKSxcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcIm9mXCIpLFxuICAgICAgICAgICksXG4gICAgICAgICAgW3JlZmVyZW5jZUFzdF0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgIF0pO1xuICAgIHQuYWRkQ29tbWVudChpdGVyYXRvciwgXCJsZWFkaW5nXCIsIGxvb3BDb21tZW50KTtcbiAgICBtYXBwZWRDb25maWcuY291bnQgPSB0LmlkZW50aWZpZXIoY291bnRJdGVyYXRvck5hbWUpO1xuICAgIGV4cHJlc3Npb25zLnB1c2goaXRlcmF0b3IpO1xuICB9XG5cbiAgY29uc3QgZHluQmxvY2tzID0gZXh0cmFjdER5bmFtaWNCbG9ja3MobWFwcGVkQ29uZmlnKTtcbiAgY29uc3QgbmVzdGVkRHluYW1pY0Jsb2NrcyA9IGR5bkJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PlxuICAgIGlzTmVzdGVkRHluYW1pY0Jsb2NrKGR5bkJsb2NrcywgYmxvY2spLFxuICApO1xuICBjb25zdCBkeW5hbWljQmxvY2tzVXNpbmdPdmVycmlkZXMgPSBkeW5CbG9ja3MuZmlsdGVyKFxuICAgIChibG9jaykgPT5cbiAgICAgIC8vIG5lc3RlZCBibG9ja3MgbmVlZCBvdmVycmlkZXNcbiAgICAgIG5lc3RlZER5bmFtaWNCbG9ja3MuaW5jbHVkZXMoYmxvY2spIHx8XG4gICAgICAvLyBibG9ja3MgdGhhdCBjb250YWluIG5lc3RlZCBibG9ja3MgbmVlZCB0aGVtIGFzIHdlbGxcbiAgICAgIG5lc3RlZER5bmFtaWNCbG9ja3Muc29tZSgobmVzdGVkQmxvY2spID0+XG4gICAgICAgIG5lc3RlZEJsb2NrLnBhdGguc3RhcnRzV2l0aChibG9jay5wYXRoKSxcbiAgICAgICksXG4gICk7XG4gIC8vIGFsbCBvdGhlcnMgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIENES1ROIHJ1bnRpbWVcbiAgY29uc3QgZHluYW1pY0Jsb2Nrc1VzaW5nUnVudGltZSA9IGR5bkJsb2Nrcy5maWx0ZXIoXG4gICAgKGJsb2NrKSA9PiAhZHluYW1pY0Jsb2Nrc1VzaW5nT3ZlcnJpZGVzLmluY2x1ZGVzKGJsb2NrKSxcbiAgKTtcblxuICBmb3IgKGNvbnN0IFtpLCBibG9ja10gb2YgZHluYW1pY0Jsb2Nrc1VzaW5nUnVudGltZS5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkeW5hbWljQmxvY2tJdGVyYXRvck5hbWUgPSB2YXJpYWJsZU5hbWUoXG4gICAgICBzY29wZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAgYCR7a2V5fV9keW5hbWljX2l0ZXJhdG9yXyR7aX1gLFxuICAgICk7XG5cbiAgICBjb25zdCByZWZlcmVuY2VBc3QgPSBhd2FpdCBjb252ZXJ0VGVycmFmb3JtRXhwcmVzc2lvblRvVHMoXG4gICAgICBzY29wZSxcbiAgICAgIGBcIiR7YmxvY2suZm9yX2VhY2h9XCJgLFxuICAgICAgKCkgPT4gW1wibGlzdFwiLCBcImR5bmFtaWNcIl0sXG4gICAgKTtcblxuICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVGVycmFmb3JtSXRlcmF0b3JcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gdC52YXJpYWJsZURlY2xhcmF0aW9uKFwiY29uc3RcIiwgW1xuICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoXG4gICAgICAgIHQuaWRlbnRpZmllcihkeW5hbWljQmxvY2tJdGVyYXRvck5hbWUpLFxuICAgICAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgIHQubWVtYmVyRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihcIlRlcnJhZm9ybUl0ZXJhdG9yXCIpLFxuICAgICAgICAgICAgdC5pZGVudGlmaWVyKFwiZnJvbUxpc3RcIiksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBbcmVmZXJlbmNlQXN0XSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgXSk7XG4gICAgdC5hZGRDb21tZW50KGl0ZXJhdG9yLCBcImxlYWRpbmdcIiwgbG9vcENvbW1lbnQpO1xuICAgIGV4cHJlc3Npb25zLnB1c2goaXRlcmF0b3IpO1xuICAgIGNvbnN0IGR5bmFtaWNDYWxsRXhwcmVzc2lvbiA9IHQuY2FsbEV4cHJlc3Npb24oXG4gICAgICB0Lm1lbWJlckV4cHJlc3Npb24oXG4gICAgICAgIHQuaWRlbnRpZmllcihkeW5hbWljQmxvY2tJdGVyYXRvck5hbWUpLFxuICAgICAgICB0LmlkZW50aWZpZXIoXCJkeW5hbWljXCIpLFxuICAgICAgKSxcbiAgICAgIFtcbiAgICAgICAgYXdhaXQgdmFsdWVUb1RzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnNjb3BlLFxuICAgICAgICAgICAgc2NvcGVkVmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgIFtibG9jay5zY29wZWRWYXJdOiBkeW5hbWljQmxvY2tJdGVyYXRvck5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsbFdpdGhDb25maWdBY2Nlc3NvcnMoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYmxvY2suY29udGVudCkgPyBibG9jay5jb250ZW50WzBdIDogYmxvY2suY29udGVudCxcbiAgICAgICAgICAgIGJsb2NrLnBhdGgucmVwbGFjZShibG9jay5zY29wZWRWYXIsIFwiXCIpLFxuICAgICAgICAgICksXG4gICAgICAgICAgYmxvY2sucGF0aC5yZXBsYWNlKGJsb2NrLnNjb3BlZFZhciwgXCJcIiksXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICk7XG5cbiAgICBjb25zdCBwYXJ0cyA9IGJsb2NrLnBhdGhcbiAgICAgIC5yZXBsYWNlKGBkeW5hbWljLiR7YmxvY2suc2NvcGVkVmFyfWAsIFwiXCIpXG4gICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAuZmlsdGVyKChwKSA9PiBwLmxlbmd0aCA+IDApO1xuXG4gICAgY29uc3QgcGFyZW50ID0gcGFydHMucmVkdWNlKChhY2MsIHBhcnQpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFjYykgJiYgIU51bWJlci5pc05hTihwYXJzZUludChwYXJ0LCAxMCkpKSB7XG4gICAgICAgIHJldHVybiBhY2NbcGFyc2VJbnQocGFydCwgMTApXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2NbcGFydF07XG4gICAgICB9XG4gICAgfSwgbWFwcGVkQ29uZmlnKTtcbiAgICBwYXJlbnRbYmxvY2suc2NvcGVkVmFyXSA9IGR5bmFtaWNDYWxsRXhwcmVzc2lvbjtcbiAgICBkZWxldGUgcGFyZW50LmR5bmFtaWM7XG4gIH1cblxuICBjb25zdCBvdmVycmlkZVJlZmVyZW5jZSA9IGR5bmFtaWNCbG9ja3NVc2luZ092ZXJyaWRlcy5sZW5ndGhcbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgIGVuZDogMCxcbiAgICAgICAgcmVmZXJlbmNlZToge1xuICAgICAgICAgIGlkOiBgJHt0eXBlfS4ke2tleX1gLFxuICAgICAgICAgIGZ1bGw6IGAke3R5cGV9LiR7a2V5fWAsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHByb3Zpc2lvbmVyKSB7XG4gICAgbWFwcGVkQ29uZmlnLnByb3Zpc2lvbmVycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMocHJvdmlzaW9uZXIpLmZsYXRNYXAoKFt0eXBlLCBwXTogW3N0cmluZywgYW55XSkgPT5cbiAgICAgICAgcC5tYXAoKHBwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PlxuICAgICAgICAgIHZhbHVlVG9UcyhcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgeyB0eXBlLCAuLi5wcCB9LFxuICAgICAgICAgICAgXCJwYXRoLWZvci1wcm92aXNpb25lcnMtY2FuLWJlLWlnbm9yZWRcIixcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW1wb3J0R3JhcGhJZCA9IGBpbXBvcnQuJHtyZXNvdXJjZS5yZXBsYWNlKFwiLlwiLCBcIl9cIil9LiR7a2V5fWA7XG4gIGNvbnN0IGltcG9ydERlZmluaXRpb246IEltcG9ydCB8IHVuZGVmaW5lZCA9IGdyYXBoLmhhc05vZGUoaW1wb3J0R3JhcGhJZClcbiAgICA/IGdyYXBoLmdldE5vZGVBdHRyaWJ1dGUoaW1wb3J0R3JhcGhJZCwgXCJ2YWx1ZVwiKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMuY29uY2F0KFxuICAgIGF3YWl0IGFzRXhwcmVzc2lvbihcbiAgICAgIHsgLi4uc2NvcGUsIGZvckVhY2hJdGVyYXRvck5hbWUsIGNvdW50SXRlcmF0b3JOYW1lIH0sXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtleSxcbiAgICAgIG1hcHBlZENvbmZpZyxcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICBnZXRSZWZlcmVuY2UoZ3JhcGgsIGlkKSB8fCBvdmVycmlkZVJlZmVyZW5jZSxcbiAgICAgIGltcG9ydERlZmluaXRpb24sXG4gICAgKSxcbiAgKTtcblxuICAvLyBDaGVjayBmb3IgZHluYW1pYyBibG9ja3NcbiAgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucy5jb25jYXQoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBkeW5hbWljQmxvY2tzVXNpbmdPdmVycmlkZXMubWFwKGFzeW5jICh7IHBhdGgsIGZvcl9lYWNoLCBjb250ZW50IH0pID0+IHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBsZXQgdGhlIGV4cHJlc3Npb24gY29udmVyc2lvbiBrbm93IGFsbCBhdmFpbGFibGVcbiAgICAgICAgLy8gZHluYW1pYyBibG9jayBuYW1lcywgc28gd2UgZG9uJ3QgcmVwbGFjZSB0aGVtLiBUaGUgXCJkeW5hbWljLWJsb2NrXCJcbiAgICAgICAgLy8gc2NvcGVkIHZhcmlhYmxlIGluZGljYXRlcyB0byB0aGUgZXhwcmVzc2lvbiBjb252ZXJzaW9uIHRvIHVzZSB0aGVcbiAgICAgICAgLy8ga2V5IG5hbWUgaW5zdGVhZCBvZiBhbiBpdGVyYXRvclxuICAgICAgICBjb25zdCBzY29wZWRWYXJpYWJsZXNJblBhdGggPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgcGF0aFxuICAgICAgICAgICAgLnN1YnN0cmluZygxKSAvLyBUaGUgcGF0aCBzdGFydHMgd2l0aCBhIGRvdCB0aGF0IHJlc3VsdHMgaW4gYW4gZW1wdHkgc3BsaXRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgIChwKSA9PiAhW1wiZHluYW1pY1wiLCBcImNvbnRlbnRcIl0uaW5jbHVkZXMocCkgJiYgaXNOYU4ocGFyc2VJbnQocCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcCgocCkgPT4gW3AsIFwiZHluYW1pYy1ibG9ja1wiXSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGFkZE92ZXJyaWRlRXhwcmVzc2lvbihcbiAgICAgICAgICB2YXJOYW1lLFxuICAgICAgICAgIHBhdGguc3Vic3RyaW5nKDEpLCAvLyBUaGUgcGF0aCBzdGFydHMgd2l0aCBhIGRvdCB0aGF0IHdlIGRvbid0IHdhbnRcbiAgICAgICAgICBhd2FpdCB2YWx1ZVRvVHMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnNjb3BlLFxuICAgICAgICAgICAgICB3aXRoaW5PdmVycmlkZUV4cHJlc3Npb246IHRydWUsXG4gICAgICAgICAgICAgIHNjb3BlZFZhcmlhYmxlczogc2NvcGVkVmFyaWFibGVzSW5QYXRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZm9yX2VhY2gsXG4gICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJwYXRoLWZvci1keW5hbWljLWJsb2Nrcy1jYW4tYmUtaWdub3JlZFwiLFxuICAgICAgICAgICksXG4gICAgICAgICAgbG9vcENvbW1lbnQsXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApLFxuICApO1xuXG4gIHJldHVybiBleHByZXNzaW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXNFeHByZXNzaW9uKFxuICBzY29wZTogUmVzb3VyY2VTY29wZSxcbiAgdHlwZTogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGNvbmZpZzogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgaXNNb2R1bGVJbXBvcnQ6IGJvb2xlYW4sXG4gIGlzUHJvdmlkZXI6IGJvb2xlYW4sXG4gIHJlZmVyZW5jZT86IFJlZmVyZW5jZSxcbiAgaW1wb3J0ZWQ/OiBJbXBvcnQsXG4pIHtcbiAgY29uc3QgeyBwcm92aWRlcnMsIC4uLm90aGVyT3B0aW9ucyB9ID0gY29uZmlnIGFzIGFueTtcblxuICBjb25zdCBjb25zdHJ1Y3RJZCA9IHVuaXF1ZUlkKHNjb3BlLmNvbnN0cnVjdHMsIG5hbWUpO1xuICBjb25zdCBvdmVycmlkZUlkID0gIWlzUHJvdmlkZXIgJiYgY29uc3RydWN0SWQgIT09IG5hbWU7XG5cbiAgY29uc3QgY29tcGxldGVPYmplY3QgPSBmaWxsV2l0aENvbmZpZ0FjY2Vzc29ycyhzY29wZSwgb3RoZXJPcHRpb25zLCB0eXBlKTtcblxuICBjb25zdCBleHByZXNzaW9uID0gdC5uZXdFeHByZXNzaW9uKFxuICAgIGNvbnN0cnVjdEFzdChzY29wZSwgdHlwZSwgaXNNb2R1bGVJbXBvcnQpLFxuICAgIFtcbiAgICAgIHQudGhpc0V4cHJlc3Npb24oKSxcbiAgICAgIHQuc3RyaW5nTGl0ZXJhbChjb25zdHJ1Y3RJZCksXG5cbiAgICAgIGF3YWl0IHZhbHVlVG9UcyhcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5jb21wbGV0ZU9iamVjdCxcbiAgICAgICAgICBwcm92aWRlcnM6XG4gICAgICAgICAgICBwcm92aWRlcnMgJiYgT2JqZWN0LmtleXMocHJvdmlkZXJzKS5sZW5ndGhcbiAgICAgICAgICAgICAgPyBPYmplY3QuZW50cmllcyhwcm92aWRlcnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgbW9kdWxlQWxpYXM6IGtleSxcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIGAke3R5cGV9YCxcbiAgICAgICAgaXNNb2R1bGVJbXBvcnQsXG4gICAgICApLFxuICAgIF0sXG4gICk7XG5cbiAgY29uc3Qgc3RhdGVtZW50cyA9IFtdO1xuICBjb25zdCB2YXJOYW1lID0gcmVmZXJlbmNlXG4gICAgPyByZWZlcmVuY2VUb1ZhcmlhYmxlTmFtZShzY29wZSwgcmVmZXJlbmNlKVxuICAgIDogdmFyaWFibGVOYW1lKHNjb3BlLCB0eXBlLCBuYW1lKTtcblxuICBpZiAocmVmZXJlbmNlIHx8IG92ZXJyaWRlSWQgfHwgaW1wb3J0ZWQpIHtcbiAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICB0LnZhcmlhYmxlRGVjbGFyYXRpb24oXCJjb25zdFwiLCBbXG4gICAgICAgIHQudmFyaWFibGVEZWNsYXJhdG9yKHQuaWRlbnRpZmllcih2YXJOYW1lKSwgZXhwcmVzc2lvbiksXG4gICAgICBdKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlbWVudHMucHVzaCh0LmV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbikpO1xuICB9XG5cbiAgaWYgKG92ZXJyaWRlSWQpIHtcbiAgICBzdGF0ZW1lbnRzLnB1c2goYWRkT3ZlcnJpZGVMb2dpY2FsSWRFeHByZXNzaW9uKHZhck5hbWUsIG5hbWUpKTtcbiAgfVxuXG4gIGlmIChpbXBvcnRlZCkge1xuICAgIC8vIEFkZHMgbXlWYXIuaW1wb3J0RnJvbShcIm15LWFyblwiKVxuICAgIGNvbnN0IGltcG9ydEV4cHJlc3Npb24gPSB0LmV4cHJlc3Npb25TdGF0ZW1lbnQoXG4gICAgICB0LmNhbGxFeHByZXNzaW9uKFxuICAgICAgICB0Lm1lbWJlckV4cHJlc3Npb24odC5pZGVudGlmaWVyKHZhck5hbWUpLCB0LmlkZW50aWZpZXIoXCJpbXBvcnRGcm9tXCIpKSxcbiAgICAgICAgW3Quc3RyaW5nTGl0ZXJhbChpbXBvcnRlZC5pZCldLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgaWYgKGltcG9ydGVkLnByb3ZpZGVyKSB7XG4gICAgICB0LmFkZENvbW1lbnQoXG4gICAgICAgIGltcG9ydEV4cHJlc3Npb24sXG4gICAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgICBgVGhpcyBpbXBvcnQgd2FzIGNvbmZpZ3VyZWQgd2l0aCBhIHByb3ZpZGVyLiBDREtUTiBkb2VzIHN1cHBvcnQgdGhpcywgYnV0IHRoZSBjZGt0biBjb252ZXJ0IGNvbW1hbmQgZG9lcyBub3QgeWV0LiBQbGVhc2UgYWRkIHRoZSBwcm92aWRlciByZWZlcmVuY2UgbWFudWFsbHkuIFNlZSBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvcmVzb3VyY2VzI2ltcG9ydGluZy1yZXNvdXJjZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhdGVtZW50cy5wdXNoKGltcG9ydEV4cHJlc3Npb24pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvdXRwdXQoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGtleTogc3RyaW5nLFxuICBfaWQ6IHN0cmluZyxcbiAgaXRlbTogT3V0cHV0LFxuICBfZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgY29uc3QgW3sgdmFsdWUsIGRlc2NyaXB0aW9uLCBzZW5zaXRpdmUgfV0gPSBpdGVtO1xuXG4gIHJldHVybiBhc0V4cHJlc3Npb24oXG4gICAgc2NvcGUsXG4gICAgXCJjZGt0bi5UZXJyYWZvcm1PdXRwdXRcIixcbiAgICBrZXksXG4gICAge1xuICAgICAgdmFsdWUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHNlbnNpdGl2ZSxcbiAgICB9LFxuICAgIGZhbHNlLFxuICAgIGZhbHNlLFxuICAgIHVuZGVmaW5lZCxcbiAgICB1bmRlZmluZWQsXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2YXJpYWJsZVR5cGVUb0FzdChcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgdHlwZTogc3RyaW5nLFxuKTogUHJvbWlzZTx0LkV4cHJlc3Npb24+IHtcbiAgY29uc3QgYWRkVmFyaWFibGVUeXBlVG9JbXBvcnRzID0gKCkgPT5cbiAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVmFyaWFibGVUeXBlXCIsXG4gICAgICBwcm92aWRlcjogXCJjZGt0blwiLFxuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIHBhcnNlZFR5cGVUb0FzdCh0eXBlOiB0ZXguRXhwcmVzc2lvblR5cGUpOiB0LkV4cHJlc3Npb24ge1xuICAgIGlmICh0ZXguaXNTY29wZVRyYXZlcnNhbEV4cHJlc3Npb24odHlwZSkpIHtcbiAgICAgIGFkZFZhcmlhYmxlVHlwZVRvSW1wb3J0cygpO1xuICAgICAgc3dpdGNoICh0eXBlLm1ldGEudmFsdWUpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIHJldHVybiB0LmlkZW50aWZpZXIoXCJWYXJpYWJsZVR5cGUuU1RSSU5HXCIpO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgcmV0dXJuIHQuaWRlbnRpZmllcihcIlZhcmlhYmxlVHlwZS5OVU1CRVJcIik7XG4gICAgICAgIGNhc2UgXCJib29sXCI6XG4gICAgICAgICAgcmV0dXJuIHQuaWRlbnRpZmllcihcIlZhcmlhYmxlVHlwZS5CT09MXCIpO1xuICAgICAgICBjYXNlIFwiYW55XCI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHQuaWRlbnRpZmllcihcIlZhcmlhYmxlVHlwZS5BTllcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleC5pc0Z1bmN0aW9uQ2FsbEV4cHJlc3Npb24odHlwZSkpIHtcbiAgICAgIGFkZFZhcmlhYmxlVHlwZVRvSW1wb3J0cygpO1xuICAgICAgc3dpdGNoICh0eXBlLm1ldGEubmFtZSkge1xuICAgICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICBjYXNlIFwic2V0XCI6XG4gICAgICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgICAgY2FzZSBcInR1cGxlXCI6XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICByZXR1cm4gdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICAgIHQuaWRlbnRpZmllcihgVmFyaWFibGVUeXBlLiR7dHlwZS5tZXRhLm5hbWV9YCksXG4gICAgICAgICAgICB0eXBlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHBhcnNlZFR5cGVUb0FzdChjaGlsZCkpLFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleC5pc09iamVjdEV4cHJlc3Npb24odHlwZSkpIHtcbiAgICAgIHJldHVybiB0Lm9iamVjdEV4cHJlc3Npb24oXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHR5cGUubWV0YS5pdGVtcykubWFwKChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgdC5vYmplY3RQcm9wZXJ0eShcbiAgICAgICAgICAgIHQuc3RyaW5nTGl0ZXJhbChrZXkpLFxuICAgICAgICAgICAgLy8gVGhpcyBkb2VzIG5vdCBkZWFsIHdpdGggY29tcGxleCB0eXBlcyBuZXN0ZWQgd2l0aGluIG9iamVjdHNcbiAgICAgICAgICAgIC8vIElmIHN1Y2ggYSB0eXBlIGlzIGZvdW5kIGl0IHdpbGwgcmVzdWx0IGluIGFuIEFueSB0eXBlXG4gICAgICAgICAgICAvLyBlLmcuIHsgZm9vOiBsaXN0KHN0cmluZykgfSB3aWxsIHJlc3VsdCBpbiB7IGZvbzogYW55IH1cbiAgICAgICAgICAgIHBhcnNlZFR5cGVUb0FzdCh7XG4gICAgICAgICAgICAgIHR5cGU6IFwic2NvcGVUcmF2ZXJzYWxcIixcbiAgICAgICAgICAgICAgbWV0YTogeyB2YWx1ZSB9LFxuICAgICAgICAgICAgfSBhcyBhbnkpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIGFkZFZhcmlhYmxlVHlwZVRvSW1wb3J0cygpO1xuICAgIHJldHVybiB0LmlkZW50aWZpZXIoXCJWYXJpYWJsZVR5cGUuQU5ZXCIpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZFR5cGVUb0FzdChhd2FpdCBleHByZXNzaW9uQXN0KHR5cGUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhcmlhYmxlKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBrZXk6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgaXRlbTogVmFyaWFibGUsXG4gIGdyYXBoOiBEaXJlY3RlZEdyYXBoLFxuKSB7XG4gIGNvbnN0IFt7IHR5cGUsIC4uLnByb3BzIH1dID0gaXRlbTtcblxuICBpZiAoIWdldFJlZmVyZW5jZShncmFwaCwgaWQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIGFzRXhwcmVzc2lvbihcbiAgICBzY29wZSxcbiAgICBpZCxcbiAgICBrZXksXG4gICAgeyAuLi5wcm9wcywgdHlwZTogdHlwZSA/IGF3YWl0IHZhcmlhYmxlVHlwZVRvQXN0KHNjb3BlLCB0eXBlKSA6IHVuZGVmaW5lZCB9LFxuICAgIGZhbHNlLFxuICAgIGZhbHNlLFxuICAgIGdldFJlZmVyZW5jZShncmFwaCwgaWQpLFxuICAgIHVuZGVmaW5lZCxcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvY2FsKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICBrZXk6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgaXRlbTogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pOiBQcm9taXNlPHQuVmFyaWFibGVEZWNsYXJhdGlvbltdPiB7XG4gIGxvZ2dlci5kZWJ1ZyhgSW5pdGlhbGl6aW5nIGxvY2FsIHJlc291cmNlICR7a2V5fSB3aXRoIGlkICR7aWR9YCk7XG4gIGlmICghZ2V0UmVmZXJlbmNlKGdyYXBoLCBpZCkpIHtcbiAgICBsb2dnZXIuZGVidWcoYE5vIHJlZmVyZW5jZSBmb3VuZCBmb3IgJHtrZXl9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbXG4gICAgdC52YXJpYWJsZURlY2xhcmF0aW9uKFwiY29uc3RcIiwgW1xuICAgICAgdC52YXJpYWJsZURlY2xhcmF0b3IoXG4gICAgICAgIHQuaWRlbnRpZmllcih2YXJpYWJsZU5hbWUoc2NvcGUsIFwibG9jYWxcIiwga2V5KSksXG4gICAgICAgIGF3YWl0IHZhbHVlVG9UcyhzY29wZSwgaXRlbSwgXCJwYXRoLWZvci1sb2NhbC1ibG9ja3MtY2FuLWJlLWlnbm9yZWRcIiksXG4gICAgICApLFxuICAgIF0pLFxuICBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbW9kdWxlcyhcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAga2V5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IE1vZHVsZSxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgY29uc3QgW3sgc291cmNlLCB2ZXJzaW9uOiBfdmVyc2lvbiwgLi4ucHJvcHMgfV0gPSBpdGVtO1xuXG4gIGNvbnN0IG1vZHVsZUNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludChzb3VyY2UpO1xuXG4gIHJldHVybiBhc0V4cHJlc3Npb24oXG4gICAgc2NvcGUsXG4gICAgbW9kdWxlQ29uc3RyYWludC5jbGFzc05hbWUsXG4gICAga2V5LFxuICAgIHByb3BzLFxuICAgIHRydWUsXG4gICAgZmFsc2UsXG4gICAgZ2V0UmVmZXJlbmNlKGdyYXBoLCBpZCksXG4gICAgdW5kZWZpbmVkLFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0cyhcbiAgc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgX2lkOiBzdHJpbmcsXG4gIGl0ZW06IEltcG9ydCxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgLy8gTW92ZSBmcm9tICR7YXdzX2luc3RhbmNlLmV4YW1wbGV9IHRvIGF3c19pbnN0YW5jZS5leGFtcGxlXG4gIGNvbnN0IHRhcmdldCA9XG4gICAgaXRlbS50by5zdGFydHNXaXRoKFwiJHtcIikgJiYgaXRlbS50by5lbmRzV2l0aChcIn1cIilcbiAgICAgID8gaXRlbS50by5zdWJzdHJpbmcoMiwgaXRlbS50by5sZW5ndGggLSAxKVxuICAgICAgOiBpdGVtLnRvO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBpbXBvcnQgZ29lcyBpbnRvIGEgbW9kdWxlXG4gIGlmICh0YXJnZXQuc3RhcnRzV2l0aChcIm1vZHVsZS5cIikpIHtcbiAgICByZXR1cm4gW1xuICAgICAgdC5hZGRDb21tZW50KFxuICAgICAgICB0LmVtcHR5U3RhdGVtZW50KCksXG4gICAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgICBgQ0RLVE4gZG9lcyBub3Qgc3VwcG9ydCBpbXBvcnRzIGludG8gbW9kdWxlcyB5ZXQsIHBsZWFzZSByZW1vdmUgdGhlIGltcG9ydCBibG9jayBpbXBvcnRpbmcgJHtpdGVtLmlkfSBpbnRvICR7dGFyZ2V0fSBmcm9tIHlvdXIgY29uZmlndXJhdGlvbmAsXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICAvLyBXZSBub3cga25vdyB0aGF0IHRoZSBpbXBvcnQgZ29lcyBpbnRvIGEgcmVzb3VyY2UsIGUuZy4gYXdzX2luc3RhbmNlLmV4YW1wbGVcbiAgY29uc3QgW3Jlc291cmNlVHlwZUlkZW50aWZpZXIsIHJlc291cmNlTmFtZV0gPSB0YXJnZXQuc3BsaXQoXCIuXCIpO1xuICBpZiAocmVzb3VyY2VOYW1lLmluY2x1ZGVzKFwiW1wiKSkge1xuICAgIHJldHVybiBbXG4gICAgICB0LmFkZENvbW1lbnQoXG4gICAgICAgIHQuZW1wdHlTdGF0ZW1lbnQoKSxcbiAgICAgICAgXCJsZWFkaW5nXCIsXG4gICAgICAgIGBDREtUTiBkb2VzIG5vdCBzdXBwb3J0IGltcG9ydHMgaW50byByZXNvdXJjZXMgd2l0aCBjb3VudCBvciBmb3JfZWFjaCB5ZXQsIHBsZWFzZSByZW1vdmUgdGhlIGltcG9ydCBibG9jayBpbXBvcnRpbmcgJHtpdGVtLmlkfSBpbnRvICR7dGFyZ2V0fSBmcm9tIHlvdXIgY29uZmlndXJhdGlvbmAsXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgZXhpc3RpbmcgcmVzb3VyY2UgY29uZmlnIHdpdGggdGhlIGdpdmVuIG5hbWVcbiAgaWYgKGdyYXBoLmhhc05vZGUodGFyZ2V0KSkge1xuICAgIC8vIFdlIHdpbGwgaGFuZGxlIHRoaXMgY2FzZSBpbiB0aGUgcmVzb3VyY2UgZnVuY3Rpb25cbiAgICAvLyBzbyB3ZSBjYW4gc2tpcCBvdmVyIGl0XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgW3Byb3ZpZGVyLCAuLi5yZXNvdXJjZVR5cGVOYW1lUGFydHNdID1cbiAgICByZXNvdXJjZVR5cGVJZGVudGlmaWVyLnNwbGl0KFwiX1wiKTtcblxuICBjb25zdCBjb25zdHJ1Y3RJZCA9IHVuaXF1ZUlkKHNjb3BlLmNvbnN0cnVjdHMsIGNhbWVsQ2FzZShyZXNvdXJjZU5hbWUpKTtcbiAgY29uc3QgY29uc3RydWN0Q2xhc3MgPSBjb25zdHJ1Y3RBc3QoXG4gICAgc2NvcGUsXG4gICAgYCR7cHJvdmlkZXJ9LiR7cmVzb3VyY2VUeXBlTmFtZVBhcnRzLmpvaW4oXCJfXCIpfWAsXG4gICAgZmFsc2UsXG4gICk7XG4gIHJldHVybiBbXG4gICAgdC5leHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgdC5jYWxsRXhwcmVzc2lvbihcbiAgICAgICAgdC5tZW1iZXJFeHByZXNzaW9uKFxuICAgICAgICAgIGNvbnN0cnVjdENsYXNzLFxuICAgICAgICAgIHQuaWRlbnRpZmllcihcImdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0XCIpLFxuICAgICAgICApLFxuICAgICAgICBbXG4gICAgICAgICAgdC50aGlzRXhwcmVzc2lvbigpLFxuICAgICAgICAgIHQuc3RyaW5nTGl0ZXJhbChjb25zdHJ1Y3RJZCksXG4gICAgICAgICAgdC5zdHJpbmdMaXRlcmFsKGl0ZW0uaWQpLFxuICAgICAgICBdLFxuICAgICAgKSxcbiAgICApLFxuICBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmlkZXIoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGtleTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpdGVtOiBQcm92aWRlclswXSxcbiAgZ3JhcGg6IERpcmVjdGVkR3JhcGgsXG4pIHtcbiAgY29uc3QgeyB2ZXJzaW9uOiBfdmVyc2lvbiwgLi4ucHJvcHMgfSA9IGl0ZW07XG5cbiAgY29uc3QgaW1wb3J0S2V5ID0ga2V5ID09PSBcIm51bGxcIiA/IFwiTnVsbFByb3ZpZGVyXCIgOiBrZXk7XG5cbiAgcmV0dXJuIGFzRXhwcmVzc2lvbihcbiAgICBzY29wZSxcbiAgICBgJHtpbXBvcnRLZXl9LiR7cGFzY2FsQ2FzZShrZXkpfVByb3ZpZGVyYCxcbiAgICBrZXksXG4gICAgcHJvcHMsXG4gICAgZmFsc2UsXG4gICAgdHJ1ZSxcbiAgICBnZXRSZWZlcmVuY2UoZ3JhcGgsIGlkKSxcbiAgICB1bmRlZmluZWQsXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBjZGt0ZkltcG9ydCA9IHRlbXBsYXRlKFxuICBgaW1wb3J0ICogYXMgY2RrdG4gZnJvbSBcImNka3RuXCJgLFxuKSgpIGFzIHQuU3RhdGVtZW50O1xuXG5leHBvcnQgY29uc3QgY29uc3RydWN0c0ltcG9ydCA9IHRlbXBsYXRlKFxuICBgaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiYCxcbikoKSBhcyB0LlN0YXRlbWVudDtcblxuZXhwb3J0IGNvbnN0IHByb3ZpZGVySW1wb3J0cyA9IChwcm92aWRlcnM6IHN0cmluZ1tdKSA9PlxuICBwcm92aWRlcnMubWFwKChwcm92aWRlck5hbWUpID0+IHtcbiAgICBjb25zdCBwYXJ0cyA9IHByb3ZpZGVyTmFtZS5zcGxpdChcIi9cIik7XG4gICAgY29uc3QgbmFtZSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJ0c1sxXSA6IHBhcnRzWzBdO1xuICAgIGNvbnN0IGltcG9ydE5hbWUgPSBuYW1lID09PSBcIm51bGxcIiA/IFwiTnVsbFByb3ZpZGVyXCIgOiBuYW1lO1xuICAgIHJldHVybiB0ZW1wbGF0ZShcbiAgICAgIGBpbXBvcnQgKiBhcyAke2ltcG9ydE5hbWV9IGZyb20gXCIuLy5nZW4vcHJvdmlkZXJzLyR7bmFtZS5yZXBsYWNlKFxuICAgICAgICBcIi4vXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICApfVwiYCxcbiAgICApKCkgYXMgdC5TdGF0ZW1lbnQ7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgbW9kdWxlSW1wb3J0cyA9IChtb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGU+IHwgdW5kZWZpbmVkKSA9PiB7XG4gIGNvbnN0IHVuaXF1ZU1vZHVsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgT2JqZWN0LnZhbHVlcyhtb2R1bGVzIHx8IHt9KS5tYXAoKFttb2R1bGVdKSA9PlxuICAgIHVuaXF1ZU1vZHVsZXMuYWRkKG1vZHVsZS5zb3VyY2UpLFxuICApO1xuXG4gIGNvbnN0IGltcG9ydHM6IHQuU3RhdGVtZW50W10gPSBbXTtcbiAgdW5pcXVlTW9kdWxlcy5mb3JFYWNoKChtKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlQ29uc3RyYWludCA9IG5ldyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KG0pO1xuICAgIGltcG9ydHMucHVzaChcbiAgICAgIHRlbXBsYXRlLmFzdChcbiAgICAgICAgYGltcG9ydCAqIGFzICR7bW9kdWxlQ29uc3RyYWludC5jbGFzc05hbWV9IGZyb20gXCIuLy5nZW4vbW9kdWxlcy8ke21vZHVsZUNvbnN0cmFpbnQuZmlsZU5hbWV9XCJgLFxuICAgICAgKSBhcyB0LlN0YXRlbWVudCxcbiAgICApO1xuICB9KTtcbiAgcmV0dXJuIGltcG9ydHM7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuKHN0YXRlbWVudHM6IHQuU3RhdGVtZW50W10pIHtcbiAgbG9nZ2VyLmRlYnVnKGBHZW5lcmF0aW5nIGNvZGUgZm9yICR7SlNPTi5zdHJpbmdpZnkoc3RhdGVtZW50cywgbnVsbCwgMil9YCk7XG4gIGNvbnN0IGNvZGUgPSBwcmV0dGllci5mb3JtYXQoZ2VuZXJhdGUodC5wcm9ncmFtKHN0YXRlbWVudHMpIGFzIGFueSkuY29kZSwge1xuICAgIHBhcnNlcjogXCJiYWJlbFwiLFxuICB9KTtcblxuICBsb2dnZXIuZGVidWcoYEdlbmVyYXRlZCBjb2RlOlxcbiR7Y29kZX1gKTtcblxuICByZXR1cm4gY29kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEltcG9ydEZvckNvZGVDb250YWluZXIoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIGNvZGVDb250YWluZXI6IHN0cmluZyxcbikge1xuICBzd2l0Y2ggKGNvZGVDb250YWluZXIpIHtcbiAgICBjYXNlIFwiY29uc3RydWN0cy5Db25zdHJ1Y3RcIjpcbiAgICAgIHNjb3BlLmltcG9ydGFibGVzLnB1c2goe1xuICAgICAgICBwcm92aWRlcjogXCJjb25zdHJ1Y3RzXCIsXG4gICAgICAgIGNvbnN0cnVjdE5hbWU6IFwiQ29uc3RydWN0XCIsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImNka3RuLlRlcnJhZm9ybVN0YWNrXCI6XG4gICAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgICAgcHJvdmlkZXI6IFwiY2RrdG5cIixcbiAgICAgICAgY29uc3RydWN0TmFtZTogXCJUZXJyYWZvcm1TdGFja1wiLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJjZGt0Zi5UZXJyYWZvcm1TdGFja1wiOlxuICAgICAgc2NvcGUuaW1wb3J0YWJsZXMucHVzaCh7XG4gICAgICAgIHByb3ZpZGVyOiBcImNka3RmXCIsXG4gICAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVGVycmFmb3JtU3RhY2tcIixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcIlVuc3VwcG9ydGVkIGNvZGUgY29udGFpbmVyOiBcIiArIGNvZGVDb250YWluZXIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwQ29kZUluQ29uc3RydWN0b3IoXG4gIGNvZGVDb250YWluZXI6IHN0cmluZyxcbiAgY29kZTogdC5TdGF0ZW1lbnRbXSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gIGNvbmZpZ1R5cGVOYW1lPzogc3RyaW5nLFxuKTogdC5TdGF0ZW1lbnQge1xuICBsZXQgYmFzZUNvbnRhaW5lckNsYXNzOiB0LklkZW50aWZpZXI7XG4gIHN3aXRjaCAoY29kZUNvbnRhaW5lcikge1xuICAgIGNhc2UgXCJjb25zdHJ1Y3RzLkNvbnN0cnVjdFwiOlxuICAgICAgYmFzZUNvbnRhaW5lckNsYXNzID0gdC5pZGVudGlmaWVyKFwiQ29uc3RydWN0XCIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiY2RrdG4uVGVycmFmb3JtU3RhY2tcIjpcbiAgICAgIGJhc2VDb250YWluZXJDbGFzcyA9IHQuaWRlbnRpZmllcihcIlRlcnJhZm9ybVN0YWNrXCIpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcIlVuc3VwcG9ydGVkIGNvZGUgY29udGFpbmVyOiBcIiArIGNvZGVDb250YWluZXIpO1xuICB9XG4gIGlmIChjb25maWdUeXBlTmFtZSkge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5zdGF0ZW1lbnQoXG4gICAgICBgXG4gIGNsYXNzICUlY2xhc3NOYW1lJSUgZXh0ZW5kcyAlJWJhc2UlJSB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBjb25maWc6ICR7Y29uZmlnVHlwZU5hbWV9KSB7XG4gICAgICBzdXBlcihzY29wZSwgbmFtZSk7XG4gICAgICAlJWNvZGUlJVxuICAgIH1cbiAgfVxuYCxcbiAgICAgIHsgc3ludGFjdGljUGxhY2Vob2xkZXJzOiB0cnVlLCBwbHVnaW5zOiBbXCJ0eXBlc2NyaXB0XCJdIH0sXG4gICAgKSh7XG4gICAgICBjb2RlLFxuICAgICAgYmFzZTogYmFzZUNvbnRhaW5lckNsYXNzLFxuICAgICAgY2xhc3NOYW1lOiB0LmlkZW50aWZpZXIoY2xhc3NOYW1lKSxcbiAgICB9KSBhcyB0LlN0YXRlbWVudDtcbiAgfVxuICByZXR1cm4gdGVtcGxhdGUuc3RhdGVtZW50KFxuICAgIGBcbiAgY2xhc3MgJSVjbGFzc05hbWUlJSBleHRlbmRzICUlYmFzZSUlIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKHNjb3BlLCBuYW1lKTtcbiAgICAgICUlY29kZSUlXG4gICAgfVxuICB9XG5gLFxuICAgIHsgc3ludGFjdGljUGxhY2Vob2xkZXJzOiB0cnVlLCBwbHVnaW5zOiBbXCJ0eXBlc2NyaXB0XCJdIH0sXG4gICkoe1xuICAgIGNvZGUsXG4gICAgYmFzZTogYmFzZUNvbnRhaW5lckNsYXNzLFxuICAgIGNsYXNzTmFtZTogdC5pZGVudGlmaWVyKGNsYXNzTmFtZSksXG4gIH0pIGFzIHQuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgcHJvdmlkZXJDb25zdHJ1Y3RJbXBvcnRzID0gKGltcG9ydGFibGU6IEltcG9ydGFibGVDb25zdHJ1Y3RbXSkgPT4ge1xuICBsZXQgcHJvdmlkZXIgPSBpbXBvcnRhYmxlWzBdLnByb3ZpZGVyO1xuICBsZXQgbmFtZXNwYWNlID0gaW1wb3J0YWJsZVswXS5uYW1lc3BhY2U7XG4gIGNvbnN0IG5hbWVzID0gaW1wb3J0YWJsZS5tYXAoKGkpID0+IGkuY29uc3RydWN0TmFtZSk7XG5cbiAgaWYgKHByb3ZpZGVyID09PSBcImNka3RuXCIgfHwgcHJvdmlkZXIgPT09IFwiY29uc3RydWN0c1wiKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlKFxuICAgICAgYGltcG9ydCB7ICR7bmFtZXMuam9pbihcIiwgXCIpfSB9IGZyb20gXCIke3Byb3ZpZGVyfVwiYCxcbiAgICApKCkgYXMgdC5TdGF0ZW1lbnQ7XG4gIH1cblxuICBpZiAobmFtZXNwYWNlKSB7XG4gICAgbmFtZXNwYWNlID0gc25ha2VDYXNlKG5hbWVzcGFjZSkucmVwbGFjZSgvXy9nLCBcIi1cIik7XG4gIH1cblxuICAvLyBTcGVjaWFsIGNhc2VzIHRvIHVuZG8gcHJvdmlkZXIgbmFtZXMgdGhhdCB3ZSBvdmVycmlkZVxuICBpZiAocHJvdmlkZXIgPT09IFwiTnVsbFByb3ZpZGVyXCIpIHtcbiAgICBwcm92aWRlciA9IFwibnVsbFwiO1xuICB9XG5cbiAgcmV0dXJuIHRlbXBsYXRlKFxuICAgIGBpbXBvcnQgeyAke25hbWVzLmpvaW4oXG4gICAgICBcIiwgXCIsXG4gICAgKX0gfSBmcm9tIFwiLi8uZ2VuL3Byb3ZpZGVycy8ke3Byb3ZpZGVyfS8ke25hbWVzcGFjZX1cImAsXG4gICkoKSBhcyB0LlN0YXRlbWVudDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEltcG9ydHMoaW1wb3J0YWJsZXM6IEltcG9ydGFibGVDb25zdHJ1Y3RbXSkge1xuICBjb25zdCBncm91cGVkSW1wb3J0YWJsZXMgPSBpbXBvcnRhYmxlcy5yZWR1Y2UoXG4gICAgKGFjYywgaW1wb3J0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgbnMgPSBpbXBvcnRhYmxlLm5hbWVzcGFjZSB8fCBcIlwiO1xuICAgICAgLy8gRG9pbmcgc29tZSBoYWNreSBvcmRlcmluZyBvZiB0aGUgaW1wb3J0cyB0byBtYWtlIHRoZW0gbG9vayBhIGJpdCBuaWNlclxuICAgICAgY29uc3QgcHJlZml4ID1cbiAgICAgICAgaW1wb3J0YWJsZS5wcm92aWRlciA9PT0gXCJjb25zdHJ1Y3RzXCJcbiAgICAgICAgICA/IFwiMVwiXG4gICAgICAgICAgOiBpbXBvcnRhYmxlLnByb3ZpZGVyID09PSBcImNka3RuXCJcbiAgICAgICAgICAgID8gXCIyXCJcbiAgICAgICAgICAgIDogaW1wb3J0YWJsZS5wcm92aWRlciA9PT0gXCJjZGt0ZlwiXG4gICAgICAgICAgICAgID8gXCIzXCJcbiAgICAgICAgICAgICAgOiBcIjRcIjtcbiAgICAgIGNvbnN0IGdyb3VwTmFtZSA9IGAke3ByZWZpeH0uJHtpbXBvcnRhYmxlLnByb3ZpZGVyfS4ke25zfWA7XG4gICAgICBjb25zdCBmdWxsTmFtZSA9IGAke2ltcG9ydGFibGUucHJvdmlkZXJ9LiR7bnN9LiR7aW1wb3J0YWJsZS5jb25zdHJ1Y3ROYW1lfWA7XG5cbiAgICAgIGlmIChhY2NbZ3JvdXBOYW1lXSkge1xuICAgICAgICBjb25zdCBleGlzdHNBbHJlYWR5ID0gYWNjW2dyb3VwTmFtZV0uc29tZShcbiAgICAgICAgICAoaW1wb3J0YWJsZSkgPT5cbiAgICAgICAgICAgIGAke2ltcG9ydGFibGUucHJvdmlkZXJ9LiR7bnN9LiR7aW1wb3J0YWJsZS5jb25zdHJ1Y3ROYW1lfWAgPT09XG4gICAgICAgICAgICBmdWxsTmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGV4aXN0c0FscmVhZHkpIHtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGFjY1tncm91cE5hbWVdLnB1c2goaW1wb3J0YWJsZSk7XG4gICAgICAgIGFjY1tncm91cE5hbWVdLnNvcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY1tncm91cE5hbWVdID0gW2ltcG9ydGFibGVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAge30gYXMgUmVjb3JkPHN0cmluZywgSW1wb3J0YWJsZUNvbnN0cnVjdFtdPixcbiAgKTtcblxuICBsZXQgY29tbWVudEFkZGVkID0gZmFsc2U7XG4gIGNvbnN0IGNvbnN0cnVjdEltcG9ydHMgPSBPYmplY3Qua2V5cyhncm91cGVkSW1wb3J0YWJsZXMpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW1wb3J0U3RhdGVtZW50ID0gcHJvdmlkZXJDb25zdHJ1Y3RJbXBvcnRzKFxuICAgICAgICBncm91cGVkSW1wb3J0YWJsZXNbZ3JvdXBOYW1lXSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChncm91cE5hbWUuc3RhcnRzV2l0aChcIjQuXCIpICYmICFjb21tZW50QWRkZWQpIHtcbiAgICAgICAgY29tbWVudEFkZGVkID0gdHJ1ZTtcbiAgICAgICAgdC5hZGRDb21tZW50KFxuICAgICAgICAgIGltcG9ydFN0YXRlbWVudCxcbiAgICAgICAgICBcImxlYWRpbmdcIixcbiAgICAgICAgICBgXFxuKiBQcm92aWRlciBiaW5kaW5ncyBhcmUgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgXFxgY2RrdG4gZ2V0XFxgLlxuKiBTZWUgaHR0cHM6Ly9jZGsudGYvcHJvdmlkZXItZ2VuZXJhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLlxcbmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW1wb3J0U3RhdGVtZW50O1xuICAgIH0pO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RJbXBvcnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDb25maWdUeXBlKFxuICBuYW1lOiBzdHJpbmcsXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgQXR0cmlidXRlUGF0aD4sXG4pOiB0LlN0YXRlbWVudCB7XG4gIHJldHVybiB0LnRzSW50ZXJmYWNlRGVjbGFyYXRpb24oXG4gICAgdC5pZGVudGlmaWVyKG5hbWUpLFxuICAgIHVuZGVmaW5lZCxcbiAgICB1bmRlZmluZWQsXG4gICAgdC50c0ludGVyZmFjZUJvZHkoXG4gICAgICBPYmplY3QuZW50cmllcyhjb25maWcpLm1hcCgoW2tleSwgX3ZhbHVlXSkgPT5cbiAgICAgICAgdC50c1Byb3BlcnR5U2lnbmF0dXJlKFxuICAgICAgICAgIHQuaWRlbnRpZmllcihrZXkpLFxuICAgICAgICAgIHQudFNUeXBlQW5ub3RhdGlvbih0LnRzQW55S2V5d29yZCgpKSwgLy8gVE9ETzogVHJ5IHRvIG1ha2UgdGhpcyBiZXR0ZXIgdGhhbiBhbnlcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcbn1cbiJdfQ==
@@ -96,20 +96,20 @@ function replaceGoImports(code) {
96
96
  .split("\n")
97
97
  .map((line) => {
98
98
  // Replace using lines with lib
99
- const fromImportLibRegex = /import \"github.com\/aws-samples\/dummy\/gen\/providers\/([^\/]*)(?:\/lib)?\/(.*)\"/;
99
+ const fromImportLibRegex = /import "github.com\/aws-samples\/dummy\/gen\/providers\/([^/]*)(?:\/lib)?\/(.*)"/;
100
100
  const matchLib = line.match(fromImportLibRegex);
101
101
  if (matchLib) {
102
102
  const [, provider, resource] = matchLib;
103
103
  return `import "cdk.tf/go/stack/generated/${provider}/${resource}"`;
104
104
  }
105
105
  // Replace using lines
106
- const fromImportRegex = /import \"github.com\/aws-samples\/dummy\/gen\/providers\/([^\/]+)\/(.*)\"/;
106
+ const fromImportRegex = /import "github.com\/aws-samples\/dummy\/gen\/providers\/([^/]+)\/(.*)"/;
107
107
  const match = line.match(fromImportRegex);
108
108
  if (match) {
109
109
  const [, provider, resource] = match;
110
110
  return `import "cdk.tf/go/stack/generated/${provider}/${resource}"`;
111
111
  }
112
- const importModulesRegex = /import (.*) \"github.com\/aws-samples\/dummy\/gen\/modules\/(.*)\"/;
112
+ const importModulesRegex = /import (.*) "github.com\/aws-samples\/dummy\/gen\/modules\/(.*)"/;
113
113
  const matchModules = line.match(importModulesRegex);
114
114
  if (matchModules) {
115
115
  const [, name, module] = matchModules;
@@ -123,4 +123,4 @@ exports.replaceGoImports = replaceGoImports;
123
123
  function lowercaseFirstChar(str) {
124
124
  return str.substring(0, 1).toLocaleLowerCase() + str.substring(1);
125
125
  }
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaS1yb3NldHRhLXdvcmthcm91bmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2pzaWktcm9zZXR0YS13b3JrYXJvdW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQzs7O0FBRW5DLFNBQWdCLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsT0FBTyxJQUFJO1NBQ1IsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1oscUNBQXFDO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQ3RCLDJEQUEyRCxDQUFDO1FBQzlELElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELGdDQUFnQztRQUNoQyxNQUFNLGNBQWMsR0FDbEIsOERBQThELENBQUM7UUFDakUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELHVCQUF1QjtRQUN2QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQW5DRCxvREFtQ0M7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFZO0lBQzdDLE9BQU8sSUFBSTtTQUNSLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDWCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNaLG1EQUFtRDtRQUNuRCxNQUFNLGFBQWEsR0FDakIsMERBQTBELENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBQ3ZELE9BQU8sa0JBQWtCLFFBQVEsSUFBSSxRQUFRLElBQUksU0FBUyxHQUFHLENBQUM7UUFDaEUsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLGdCQUFnQixHQUFHLDhDQUE4QyxDQUFDO1FBQ3hFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7WUFDL0MsT0FBTyxrQkFBa0IsUUFBUSxJQUFJLFFBQVEsS0FBSyxDQUFDO1FBQ3JELENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxhQUFhLEdBQUcsZ0NBQWdDLENBQUM7UUFDdkQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztZQUN0QyxPQUFPLGtCQUFrQixNQUFNLEtBQUssQ0FBQztRQUN2QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQWhDRCxnREFnQ0M7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFZO0lBQy9DLE9BQU8sSUFBSTtTQUNSLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDWCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNaLCtCQUErQjtRQUMvQixNQUFNLGtCQUFrQixHQUN0QixnREFBZ0QsQ0FBQztRQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0MsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDckMsT0FBTyxTQUFTLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQzlELENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTVELE9BQU8sU0FBUyxVQUFVO2lCQUN2QixTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDZixpQkFBaUIsRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTFELE9BQU8sU0FBUyxVQUFVLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQS9CRCxvREErQkM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxJQUFZO0lBQzNDLE9BQU8sSUFBSTtTQUNSLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDWCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNaLCtCQUErQjtRQUMvQixNQUFNLGtCQUFrQixHQUN0QixxRkFBcUYsQ0FBQztRQUN4RixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDeEMsT0FBTyxxQ0FBcUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxlQUFlLEdBQ25CLDJFQUEyRSxDQUFDO1FBQzlFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDckMsT0FBTyxxQ0FBcUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxNQUFNLGtCQUFrQixHQUN0QixvRUFBb0UsQ0FBQztRQUN2RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBQ3RDLE9BQU8sVUFBVSxJQUFJLCtCQUErQixNQUFNLEdBQUcsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQWpDRCw0Q0FpQ0M7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEdBQVc7SUFDckMsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUHl0aG9uSW1wb3J0cyhjb2RlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAvLyBSZXBsYWNlIGZyb20taW1wb3J0IGxpbmVzIHdpdGggbGliXG4gICAgICBjb25zdCBmcm9tSW1wb3J0TGliUmVnZXggPVxuICAgICAgICAvZnJvbSBcXC5cXC5cXC5nZW5cXC5wcm92aWRlcnNcXC4oW14uXSspKD86XFwubGliKT9cXC4oLiopIGltcG9ydC87XG4gICAgICBpZiAoZnJvbUltcG9ydExpYlJlZ2V4LnRlc3QobGluZSkpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZShmcm9tSW1wb3J0TGliUmVnZXgsIFwiZnJvbSBpbXBvcnRzLiQxLiQyIGltcG9ydFwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSBpbXBvcnQgbGluZXMgd2l0aCBsaWJcbiAgICAgIGNvbnN0IGltcG9ydExpYlJlZ2V4ID1cbiAgICAgICAgL2ltcG9ydCBcXC5cXC5cXC5nZW5cXC5wcm92aWRlcnNcXC4oW14uXSspKD86XFwubGliKT9cXC4oLiopIGFzICguKikvO1xuICAgICAgaWYgKGltcG9ydExpYlJlZ2V4LnRlc3QobGluZSkpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZShpbXBvcnRMaWJSZWdleCwgXCJpbXBvcnQgaW1wb3J0cy4kMS4kMiBhcyAkM1wiKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSBmcm9tLWltcG9ydCBsaW5lc1xuICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcImZyb20gLi4uZ2VuLnByb3ZpZGVycy5cIikpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZShcImZyb20gLi4uZ2VuLnByb3ZpZGVycy5cIiwgXCJmcm9tIGltcG9ydHMuXCIpO1xuICAgICAgfVxuICAgICAgLy8gUmVwbGFjZSBpbXBvcnQgbGluZXNcbiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCJpbXBvcnQgLi4uZ2VuLnByb3ZpZGVycy5cIikpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZShcImltcG9ydCAuLi5nZW4ucHJvdmlkZXJzLlwiLCBcImltcG9ydCBpbXBvcnRzLlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSBtb2R1bGVzXG4gICAgICBpZiAobGluZS5zdGFydHNXaXRoKFwiaW1wb3J0IC4uLmdlbi5tb2R1bGVzLlwiKSkge1xuICAgICAgICByZXR1cm4gbGluZS5yZXBsYWNlKFwiaW1wb3J0IC4uLmdlbi5tb2R1bGVzLlwiLCBcImltcG9ydCBpbXBvcnRzLlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VKYXZhSW1wb3J0cyhjb2RlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAvLyBSZXBsYWNlIHVzaW5nIGxpbmVzIHdpdGggbGliIGFuZCBwcmVjaWNlcyBpbXBvcnRcbiAgICAgIGNvbnN0IGltcG9ydFdpdGhMaWIgPVxuICAgICAgICAvaW1wb3J0IGdlblxcLnByb3ZpZGVyc1xcLihbXi5dKykoPzpcXC5saWIpP1xcLihbXi5dKylcXC4oLiopOy87XG4gICAgICBjb25zdCBtYXRjaFdpdGhMaWIgPSBsaW5lLm1hdGNoKGltcG9ydFdpdGhMaWIpO1xuICAgICAgaWYgKG1hdGNoV2l0aExpYikge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2UsIGNsYXNzTmFtZV0gPSBtYXRjaFdpdGhMaWI7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IGltcG9ydHMuJHtwcm92aWRlcn0uJHtyZXNvdXJjZX0uJHtjbGFzc05hbWV9O2A7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlcGxhY2UgdXNpbmcgbGluZXNcbiAgICAgIGNvbnN0IGltcG9ydFdpdGhvdXRMaWIgPSAvaW1wb3J0IGdlblxcLnByb3ZpZGVyc1xcLihbXi5dKylcXC4oW14uXSspXFwuXFwqOy87XG4gICAgICBjb25zdCBtYXRjaFdpdGhvdXRMaWIgPSBsaW5lLm1hdGNoKGltcG9ydFdpdGhvdXRMaWIpO1xuICAgICAgaWYgKG1hdGNoV2l0aG91dExpYikge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2VdID0gbWF0Y2hXaXRob3V0TGliO1xuICAgICAgICByZXR1cm4gYGltcG9ydCBpbXBvcnRzLiR7cHJvdmlkZXJ9LiR7cmVzb3VyY2V9Lio7YDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSB1c2luZyBsaW5lc1xuICAgICAgY29uc3QgaW1wb3J0TW9kdWxlcyA9IC9pbXBvcnQgZ2VuXFwubW9kdWxlc1xcLiguKylcXC5cXCo7LztcbiAgICAgIGNvbnN0IGltcG9ydE1vZHVsZXNNYXRjaCA9IGxpbmUubWF0Y2goaW1wb3J0TW9kdWxlcyk7XG4gICAgICBpZiAoaW1wb3J0TW9kdWxlc01hdGNoKSB7XG4gICAgICAgIGNvbnN0IFssIG1vZHVsZV0gPSBpbXBvcnRNb2R1bGVzTWF0Y2g7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IGltcG9ydHMuJHttb2R1bGV9Lio7YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VDc2hhcnBJbXBvcnRzKGNvZGU6IHN0cmluZykge1xuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdChcIlxcblwiKVxuICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgIC8vIFJlcGxhY2UgdXNpbmcgbGluZXMgd2l0aCBsaWJcbiAgICAgIGNvbnN0IGZyb21JbXBvcnRMaWJSZWdleCA9XG4gICAgICAgIC91c2luZyBHZW5cXC5Qcm92aWRlcnNcXC4oW14uXSopKD86XFwuTGliKT9cXC4oLiopOy87XG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goZnJvbUltcG9ydExpYlJlZ2V4KTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2VdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBgdXNpbmcgJHtsb3dlcmNhc2VGaXJzdENoYXIocHJvdmlkZXIpfS4ke3Jlc291cmNlfTtgO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXBsYWNlIHVzaW5nIGxpbmVzXG4gICAgICBpZiAobGluZS5zdGFydHNXaXRoKFwidXNpbmcgR2VuLlByb3ZpZGVycy5cIikpIHtcbiAgICAgICAgY29uc3QgaW1wb3J0TGluZSA9IGxpbmUucmVwbGFjZShcInVzaW5nIEdlbi5Qcm92aWRlcnMuXCIsIFwiXCIpO1xuXG4gICAgICAgIHJldHVybiBgdXNpbmcgJHtpbXBvcnRMaW5lXG4gICAgICAgICAgLnN1YnN0cmluZygwLCAxKVxuICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpfSR7aW1wb3J0TGluZS5zdWJzdHJpbmcoMSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcInVzaW5nIEdlbi5Nb2R1bGVzLlwiKSkge1xuICAgICAgICBjb25zdCBpbXBvcnRMaW5lID0gbGluZS5yZXBsYWNlKFwidXNpbmcgR2VuLk1vZHVsZXMuXCIsIFwiXCIpO1xuXG4gICAgICAgIHJldHVybiBgdXNpbmcgJHtpbXBvcnRMaW5lfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaW5lO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlR29JbXBvcnRzKGNvZGU6IHN0cmluZykge1xuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdChcIlxcblwiKVxuICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgIC8vIFJlcGxhY2UgdXNpbmcgbGluZXMgd2l0aCBsaWJcbiAgICAgIGNvbnN0IGZyb21JbXBvcnRMaWJSZWdleCA9XG4gICAgICAgIC9pbXBvcnQgXFxcImdpdGh1Yi5jb21cXC9hd3Mtc2FtcGxlc1xcL2R1bW15XFwvZ2VuXFwvcHJvdmlkZXJzXFwvKFteXFwvXSopKD86XFwvbGliKT9cXC8oLiopXFxcIi87XG4gICAgICBjb25zdCBtYXRjaExpYiA9IGxpbmUubWF0Y2goZnJvbUltcG9ydExpYlJlZ2V4KTtcbiAgICAgIGlmIChtYXRjaExpYikge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2VdID0gbWF0Y2hMaWI7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IFwiY2RrLnRmL2dvL3N0YWNrL2dlbmVyYXRlZC8ke3Byb3ZpZGVyfS8ke3Jlc291cmNlfVwiYDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSB1c2luZyBsaW5lc1xuICAgICAgY29uc3QgZnJvbUltcG9ydFJlZ2V4ID1cbiAgICAgICAgL2ltcG9ydCBcXFwiZ2l0aHViLmNvbVxcL2F3cy1zYW1wbGVzXFwvZHVtbXlcXC9nZW5cXC9wcm92aWRlcnNcXC8oW15cXC9dKylcXC8oLiopXFxcIi87XG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goZnJvbUltcG9ydFJlZ2V4KTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2VdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IFwiY2RrLnRmL2dvL3N0YWNrL2dlbmVyYXRlZC8ke3Byb3ZpZGVyfS8ke3Jlc291cmNlfVwiYDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1wb3J0TW9kdWxlc1JlZ2V4ID1cbiAgICAgICAgL2ltcG9ydCAoLiopIFxcXCJnaXRodWIuY29tXFwvYXdzLXNhbXBsZXNcXC9kdW1teVxcL2dlblxcL21vZHVsZXNcXC8oLiopXFxcIi87XG4gICAgICBjb25zdCBtYXRjaE1vZHVsZXMgPSBsaW5lLm1hdGNoKGltcG9ydE1vZHVsZXNSZWdleCk7XG4gICAgICBpZiAobWF0Y2hNb2R1bGVzKSB7XG4gICAgICAgIGNvbnN0IFssIG5hbWUsIG1vZHVsZV0gPSBtYXRjaE1vZHVsZXM7XG4gICAgICAgIHJldHVybiBgaW1wb3J0ICR7bmFtZX0gXCJjZGsudGYvZ28vc3RhY2svZ2VuZXJhdGVkLyR7bW9kdWxlfVwiYDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gbG93ZXJjYXNlRmlyc3RDaGFyKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIDEpLnRvTG9jYWxlTG93ZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufVxuIl19
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaS1yb3NldHRhLXdvcmthcm91bmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2pzaWktcm9zZXR0YS13b3JrYXJvdW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQzs7O0FBRW5DLFNBQWdCLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsT0FBTyxJQUFJO1NBQ1IsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1oscUNBQXFDO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQ3RCLDJEQUEyRCxDQUFDO1FBQzlELElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELGdDQUFnQztRQUNoQyxNQUFNLGNBQWMsR0FDbEIsOERBQThELENBQUM7UUFDakUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELHVCQUF1QjtRQUN2QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsSUFB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QixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBQ3RDLE9BQU8sVUFBVSxJQUFJLCtCQUErQixNQUFNLEdBQUcsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQWpDRCw0Q0FpQ0M7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEdBQVc7SUFDckMsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUHl0aG9uSW1wb3J0cyhjb2RlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAvLyBSZXBsYWNlIGZyb20taW1wb3J0IGxpbmVzIHdpdGggbGliXG4gICAgICBjb25zdCBmcm9tSW1wb3J0TGliUmVnZXggPVxuICAgICAgICAvZnJvbSBcXC5cXC5cXC5nZW5cXC5wcm92aWRlcnNcXC4oW14uXSspKD86XFwubGliKT9cXC4oLiopIGltcG9ydC87XG4gICAgICBpZiAoZnJvbUltcG9ydExpYlJlZ2V4LnRlc3QobGluZSkpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZShmcm9tSW1wb3J0TGliUmVnZXgsIFwiZnJvbSBpbXBvcnRzLiQxLiQyIGltcG9ydFwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSBpbXBvcnQgbGluZXMgd2l0aCBsaWJcbiAgICAgIGNvbnN0IGltcG9ydExpYlJlZ2V4ID1cbiAgICAgICAgL2ltcG9ydCBcXC5cXC5cXC5nZW5cXC5wcm92aWRlcnNcXC4oW14uXSspKD86XFwubGliKT9cXC4oLiopIGFzICguKikvO1xuICAgICAgaWYgKGltcG9ydExpYlJlZ2V4LnRlc3QobGluZSkpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZShpbXBvcnRMaWJSZWdleCwgXCJpbXBvcnQgaW1wb3J0cy4kMS4kMiBhcyAkM1wiKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSBmcm9tLWltcG9ydCBsaW5lc1xuICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcImZyb20gLi4uZ2VuLnByb3ZpZGVycy5cIikpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZShcImZyb20gLi4uZ2VuLnByb3ZpZGVycy5cIiwgXCJmcm9tIGltcG9ydHMuXCIpO1xuICAgICAgfVxuICAgICAgLy8gUmVwbGFjZSBpbXBvcnQgbGluZXNcbiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCJpbXBvcnQgLi4uZ2VuLnByb3ZpZGVycy5cIikpIHtcbiAgICAgICAgcmV0dXJuIGxpbmUucmVwbGFjZShcImltcG9ydCAuLi5nZW4ucHJvdmlkZXJzLlwiLCBcImltcG9ydCBpbXBvcnRzLlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSBtb2R1bGVzXG4gICAgICBpZiAobGluZS5zdGFydHNXaXRoKFwiaW1wb3J0IC4uLmdlbi5tb2R1bGVzLlwiKSkge1xuICAgICAgICByZXR1cm4gbGluZS5yZXBsYWNlKFwiaW1wb3J0IC4uLmdlbi5tb2R1bGVzLlwiLCBcImltcG9ydCBpbXBvcnRzLlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VKYXZhSW1wb3J0cyhjb2RlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAvLyBSZXBsYWNlIHVzaW5nIGxpbmVzIHdpdGggbGliIGFuZCBwcmVjaWNlcyBpbXBvcnRcbiAgICAgIGNvbnN0IGltcG9ydFdpdGhMaWIgPVxuICAgICAgICAvaW1wb3J0IGdlblxcLnByb3ZpZGVyc1xcLihbXi5dKykoPzpcXC5saWIpP1xcLihbXi5dKylcXC4oLiopOy87XG4gICAgICBjb25zdCBtYXRjaFdpdGhMaWIgPSBsaW5lLm1hdGNoKGltcG9ydFdpdGhMaWIpO1xuICAgICAgaWYgKG1hdGNoV2l0aExpYikge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2UsIGNsYXNzTmFtZV0gPSBtYXRjaFdpdGhMaWI7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IGltcG9ydHMuJHtwcm92aWRlcn0uJHtyZXNvdXJjZX0uJHtjbGFzc05hbWV9O2A7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlcGxhY2UgdXNpbmcgbGluZXNcbiAgICAgIGNvbnN0IGltcG9ydFdpdGhvdXRMaWIgPSAvaW1wb3J0IGdlblxcLnByb3ZpZGVyc1xcLihbXi5dKylcXC4oW14uXSspXFwuXFwqOy87XG4gICAgICBjb25zdCBtYXRjaFdpdGhvdXRMaWIgPSBsaW5lLm1hdGNoKGltcG9ydFdpdGhvdXRMaWIpO1xuICAgICAgaWYgKG1hdGNoV2l0aG91dExpYikge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2VdID0gbWF0Y2hXaXRob3V0TGliO1xuICAgICAgICByZXR1cm4gYGltcG9ydCBpbXBvcnRzLiR7cHJvdmlkZXJ9LiR7cmVzb3VyY2V9Lio7YDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSB1c2luZyBsaW5lc1xuICAgICAgY29uc3QgaW1wb3J0TW9kdWxlcyA9IC9pbXBvcnQgZ2VuXFwubW9kdWxlc1xcLiguKylcXC5cXCo7LztcbiAgICAgIGNvbnN0IGltcG9ydE1vZHVsZXNNYXRjaCA9IGxpbmUubWF0Y2goaW1wb3J0TW9kdWxlcyk7XG4gICAgICBpZiAoaW1wb3J0TW9kdWxlc01hdGNoKSB7XG4gICAgICAgIGNvbnN0IFssIG1vZHVsZV0gPSBpbXBvcnRNb2R1bGVzTWF0Y2g7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IGltcG9ydHMuJHttb2R1bGV9Lio7YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VDc2hhcnBJbXBvcnRzKGNvZGU6IHN0cmluZykge1xuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdChcIlxcblwiKVxuICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgIC8vIFJlcGxhY2UgdXNpbmcgbGluZXMgd2l0aCBsaWJcbiAgICAgIGNvbnN0IGZyb21JbXBvcnRMaWJSZWdleCA9XG4gICAgICAgIC91c2luZyBHZW5cXC5Qcm92aWRlcnNcXC4oW14uXSopKD86XFwuTGliKT9cXC4oLiopOy87XG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goZnJvbUltcG9ydExpYlJlZ2V4KTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2VdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBgdXNpbmcgJHtsb3dlcmNhc2VGaXJzdENoYXIocHJvdmlkZXIpfS4ke3Jlc291cmNlfTtgO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXBsYWNlIHVzaW5nIGxpbmVzXG4gICAgICBpZiAobGluZS5zdGFydHNXaXRoKFwidXNpbmcgR2VuLlByb3ZpZGVycy5cIikpIHtcbiAgICAgICAgY29uc3QgaW1wb3J0TGluZSA9IGxpbmUucmVwbGFjZShcInVzaW5nIEdlbi5Qcm92aWRlcnMuXCIsIFwiXCIpO1xuXG4gICAgICAgIHJldHVybiBgdXNpbmcgJHtpbXBvcnRMaW5lXG4gICAgICAgICAgLnN1YnN0cmluZygwLCAxKVxuICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpfSR7aW1wb3J0TGluZS5zdWJzdHJpbmcoMSl9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcInVzaW5nIEdlbi5Nb2R1bGVzLlwiKSkge1xuICAgICAgICBjb25zdCBpbXBvcnRMaW5lID0gbGluZS5yZXBsYWNlKFwidXNpbmcgR2VuLk1vZHVsZXMuXCIsIFwiXCIpO1xuXG4gICAgICAgIHJldHVybiBgdXNpbmcgJHtpbXBvcnRMaW5lfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaW5lO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlR29JbXBvcnRzKGNvZGU6IHN0cmluZykge1xuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdChcIlxcblwiKVxuICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgIC8vIFJlcGxhY2UgdXNpbmcgbGluZXMgd2l0aCBsaWJcbiAgICAgIGNvbnN0IGZyb21JbXBvcnRMaWJSZWdleCA9XG4gICAgICAgIC9pbXBvcnQgXCJnaXRodWIuY29tXFwvYXdzLXNhbXBsZXNcXC9kdW1teVxcL2dlblxcL3Byb3ZpZGVyc1xcLyhbXi9dKikoPzpcXC9saWIpP1xcLyguKilcIi87XG4gICAgICBjb25zdCBtYXRjaExpYiA9IGxpbmUubWF0Y2goZnJvbUltcG9ydExpYlJlZ2V4KTtcbiAgICAgIGlmIChtYXRjaExpYikge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2VdID0gbWF0Y2hMaWI7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IFwiY2RrLnRmL2dvL3N0YWNrL2dlbmVyYXRlZC8ke3Byb3ZpZGVyfS8ke3Jlc291cmNlfVwiYDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVwbGFjZSB1c2luZyBsaW5lc1xuICAgICAgY29uc3QgZnJvbUltcG9ydFJlZ2V4ID1cbiAgICAgICAgL2ltcG9ydCBcImdpdGh1Yi5jb21cXC9hd3Mtc2FtcGxlc1xcL2R1bW15XFwvZ2VuXFwvcHJvdmlkZXJzXFwvKFteL10rKVxcLyguKilcIi87XG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goZnJvbUltcG9ydFJlZ2V4KTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBbLCBwcm92aWRlciwgcmVzb3VyY2VdID0gbWF0Y2g7XG4gICAgICAgIHJldHVybiBgaW1wb3J0IFwiY2RrLnRmL2dvL3N0YWNrL2dlbmVyYXRlZC8ke3Byb3ZpZGVyfS8ke3Jlc291cmNlfVwiYDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1wb3J0TW9kdWxlc1JlZ2V4ID1cbiAgICAgICAgL2ltcG9ydCAoLiopIFwiZ2l0aHViLmNvbVxcL2F3cy1zYW1wbGVzXFwvZHVtbXlcXC9nZW5cXC9tb2R1bGVzXFwvKC4qKVwiLztcbiAgICAgIGNvbnN0IG1hdGNoTW9kdWxlcyA9IGxpbmUubWF0Y2goaW1wb3J0TW9kdWxlc1JlZ2V4KTtcbiAgICAgIGlmIChtYXRjaE1vZHVsZXMpIHtcbiAgICAgICAgY29uc3QgWywgbmFtZSwgbW9kdWxlXSA9IG1hdGNoTW9kdWxlcztcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgJHtuYW1lfSBcImNkay50Zi9nby9zdGFjay9nZW5lcmF0ZWQvJHttb2R1bGV9XCJgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGluZTtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBsb3dlcmNhc2VGaXJzdENoYXIoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgMSkudG9Mb2NhbGVMb3dlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG59XG4iXX0=
@@ -131,11 +131,11 @@ async function findUsedReferences(nodeIds, item) {
131
131
  }
132
132
  if (item && "dynamic" in item) {
133
133
  const dyn = item["dynamic"];
134
- const { for_each, ...others } = dyn;
134
+ const { for_each: _for_each, ...others } = dyn;
135
135
  const dynamicRef = Object.keys(others)[0];
136
136
  return await findUsedReferences([...nodeIds, dynamicRef], dyn);
137
137
  }
138
138
  return (await Promise.all(Object.values(item).map((i) => findUsedReferences(nodeIds, i)))).flat();
139
139
  }
140
140
  exports.findUsedReferences = findUsedReferences;
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWZlcmVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILDhDQUd5QjtBQUN6QixtQ0FBbUQ7QUFFbkQsMkNBQTJDO0FBRTNDLFNBQWdCLHVCQUF1QixDQUNyQyxLQUFtQixFQUNuQixHQUFjO0lBRWQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsT0FBTyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBUkQsMERBUUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxVQUE4QjtJQUM5RCxJQUFJLENBQUMsaUNBQUcsQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2hELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDeEMsTUFBTSxZQUFZLEdBQUcsVUFB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akUsQ0FBQztJQUVELE9BQU8sQ0FDTCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUEyQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDbkQsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUMvQixDQUNGLENBQ0YsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNYLENBQUM7QUFqQ0QsZ0RBaUNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQge1xuICBnZXRSZWZlcmVuY2VzSW5FeHByZXNzaW9uLFxuICBURkV4cHJlc3Npb25TeW50YXhUcmVlIGFzIHRleCxcbn0gZnJvbSBcIkBjZGt0bi9oY2wyanNvblwiO1xuaW1wb3J0IHsgbGVhdmVDb21tZW50VGV4dCwgbG9nZ2VyIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IFByb2dyYW1TY29wZSwgUmVmZXJlbmNlLCBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IHZhcmlhYmxlTmFtZSB9IGZyb20gXCIuL3ZhcmlhYmxlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlVG9WYXJpYWJsZU5hbWUoXG4gIHNjb3BlOiBQcm9ncmFtU2NvcGUsXG4gIHJlZjogUmVmZXJlbmNlLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSByZWYucmVmZXJlbmNlZS5pZC5zcGxpdChcIi5cIik7XG4gIGNvbnN0IHJlc291cmNlID0gcGFydHNbMF0gPT09IFwiZGF0YVwiID8gYCR7cGFydHNbMF19LiR7cGFydHNbMV19YCA6IHBhcnRzWzBdO1xuICBjb25zdCBuYW1lID0gcGFydHNbMF0gPT09IFwiZGF0YVwiID8gcGFydHNbMl0gOiBwYXJ0c1sxXTtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZShzY29wZSwgcmVzb3VyY2UsIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNSZWZlcmVuY2UoZXhwcmVzc2lvbjogdGV4LkV4cHJlc3Npb25UeXBlKSB7XG4gIGlmICghdGV4LmlzU2NvcGVUcmF2ZXJzYWxFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBleHByZXNzaW9uLm1ldGEudHJhdmVyc2FsO1xuICBjb25zdCByb290U2VnbWVudCA9IHNlZ21lbnRzWzBdLnNlZ21lbnQ7XG4gIGNvbnN0IGZ1bGxBY2Nlc3NvciA9IGV4cHJlc3Npb24ubWV0YS5mdWxsQWNjZXNzb3I7XG5cbiAgaWYgKFxuICAgIHJvb3RTZWdtZW50ID09PSBcImNvdW50XCIgfHwgLy8gY291bnQgdmFyaWFibGVcbiAgICByb290U2VnbWVudCA9PT0gXCJlYWNoXCIgfHwgLy8gZWFjaCB2YXJpYWJsZVxuICAgIC8vIGh0dHBzOi8vd3d3LnRlcnJhZm9ybS5pby9kb2NzL2xhbmd1YWdlL2V4cHJlc3Npb25zL3JlZmVyZW5jZXMuaHRtbCNmaWxlc3lzdGVtLWFuZC13b3Jrc3BhY2UtaW5mb1xuICAgIGZ1bGxBY2Nlc3Nvci5zdGFydHNXaXRoKFwicGF0aC5tb2R1bGVcIikgfHxcbiAgICBmdWxsQWNjZXNzb3Iuc3RhcnRzV2l0aChcInBhdGgucm9vdFwiKSB8fFxuICAgIGZ1bGxBY2Nlc3Nvci5zdGFydHNXaXRoKFwicGF0aC5jd2RcIikgfHxcbiAgICBmdWxsQWNjZXNzb3Iuc3RhcnRzV2l0aChcInRlcnJhZm9ybS53b3Jrc3BhY2VcIikgfHxcbiAgICBmdWxsQWNjZXNzb3Iuc3RhcnRzV2l0aChcInNlbGYuXCIpIC8vIGJsb2NrIGxvY2FsIHZhbHVlXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1Zyhgc2tpcHBpbmcgJHtmdWxsQWNjZXNzb3J9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0UmVmZXJlbmNlc0Zyb21FeHByZXNzaW9uKFxuICBpbnB1dDogc3RyaW5nLFxuICBub2RlSWRzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgc2NvcGVkSWRzOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLCAvLyBkeW5hbWljcyBpbnRyb2R1Y2UgbmV3IHNjb3BlZCB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IHRoZSBnbG9iYWxseSBhY2Nlc3NpYmxlIGlkc1xuKTogUHJvbWlzZTxSZWZlcmVuY2VbXT4ge1xuICBsb2dnZXIuZGVidWcoYGV4dHJhY3RSZWZlcmVuY2VzRnJvbUV4cHJlc3Npb24oJHtpbnB1dH0pYCk7XG4gIGNvbnN0IHBvc3NpYmxlVmFyaWFibGVTcG90cyA9IGF3YWl0IGdldFJlZmVyZW5jZXNJbkV4cHJlc3Npb24oXG4gICAgXCJtYWluLnRmXCIsXG4gICAgaW5wdXQsXG4gICk7XG5cbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBmb3VuZCBwb3NzaWJsZSB2YXJpYWJsZSBzcG90czogJHtKU09OLnN0cmluZ2lmeShwb3NzaWJsZVZhcmlhYmxlU3BvdHMpfWAsXG4gICk7XG5cbiAgcmV0dXJuIHBvc3NpYmxlVmFyaWFibGVTcG90cy5yZWR1Y2UoKGNhcnJ5LCBzcG90KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gfSA9IHNwb3Q7XG4gICAgLy8gbm8gcmVmZXJlbmNlXG4gICAgaWYgKFxuICAgICAgIXZhbHVlLmluY2x1ZGVzKFwiLlwiKSB8fCAvLyBqdXN0IGEgbGl0ZXJhbFxuICAgICAgdmFsdWUuc3RhcnRzV2l0aChcIi5cIikgfHwgLy8gZGFuZ2xpbmcgcHJvcGVydHkgYWNjZXNzXG4gICAgICB2YWx1ZS5lbmRzV2l0aChcIi4uLlwiKSB8fCAvLyBzcHJlYWQgKGxpa2VseSBpbiBmb3IgbG9vcClcbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoXCJjb3VudC5cIikgfHwgLy8gY291bnQgdmFyaWFibGVcbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoXCJlYWNoLlwiKSB8fCAvLyBlYWNoIHZhcmlhYmxlXG4gICAgICAvLyBodHRwczovL3d3dy50ZXJyYWZvcm0uaW8vZG9jcy9sYW5ndWFnZS9leHByZXNzaW9ucy9yZWZlcmVuY2VzLmh0bWwjZmlsZXN5c3RlbS1hbmQtd29ya3NwYWNlLWluZm9cbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoXCJwYXRoLm1vZHVsZVwiKSB8fFxuICAgICAgdmFsdWUuc3RhcnRzV2l0aChcInBhdGgucm9vdFwiKSB8fFxuICAgICAgdmFsdWUuc3RhcnRzV2l0aChcInBhdGguY3dkXCIpIHx8XG4gICAgICB2YWx1ZS5zdGFydHNXaXRoKFwidGVycmFmb3JtLndvcmtzcGFjZVwiKSB8fFxuICAgICAgdmFsdWUuc3RhcnRzV2l0aChcInNlbGYuXCIpIC8vIGJsb2NrIGxvY2FsIHZhbHVlXG4gICAgKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYHNraXBwaW5nICR7dmFsdWV9YCk7XG4gICAgICByZXR1cm4gY2Fycnk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVmZXJlbmNlUGFydHMgPSB2YWx1ZS5zcGxpdChcIi5cIik7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgU2VhcmNoaW5nIGZvciBub2RlIGlkICcke3ZhbHVlfScgaW4gJHtKU09OLnN0cmluZ2lmeShub2RlSWRzKX1gLFxuICAgICk7XG4gICAgY29uc3QgY29yZXNwb25kaW5nTm9kZUlkID0gWy4uLm5vZGVJZHMsIC4uLnNjb3BlZElkc10uZmluZCgoaWQpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoXCIuXCIpO1xuICAgICAgY29uc3QgbWF0Y2hlc0ZpcnN0ID0gcGFydHNbMF0gPT09IHJlZmVyZW5jZVBhcnRzWzBdO1xuICAgICAgY29uc3QgbWF0Y2hlc0ZpcnN0VHdvID1cbiAgICAgICAgbWF0Y2hlc0ZpcnN0ICYmXG4gICAgICAgIChwYXJ0c1sxXSA9PT0gcmVmZXJlbmNlUGFydHNbMV0gfHwgcmVmZXJlbmNlUGFydHMubGVuZ3RoID09PSAxKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbWF0Y2hlc0ZpcnN0VHdvICYmXG4gICAgICAgIChwYXJ0c1swXSA9PT0gXCJkYXRhXCIgPyBwYXJ0c1syXSA9PT0gcmVmZXJlbmNlUGFydHNbMl0gOiB0cnVlKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmICghY29yZXNwb25kaW5nTm9kZUlkKSB7XG4gICAgICAvLyBUaGlzIGlzIG1vc3QgbGlrZWx5IGEgZmFsc2UgcG9zaXRpdmUsIHNvIHdlIGp1c3QgaWdub3JlIGl0XG4gICAgICAvLyBXZSBpbmNsdWRlIHRoZSBsb2cgYmVsb3cgdG8gaGVscCBkZWJ1Z2dpbmdcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZvdW5kIGEgcmVmZXJlbmNlIHRoYXQgaXMgdW5rbm93bjogJHtpbnB1dH0gaGFzIHJlZmVyZW5jZSBcIiR7dmFsdWV9XCIuVGhlIGlkIHdhcyBub3QgZm91bmQgaW4gJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBub2RlSWRzLFxuICAgICAgICApfSB3aXRoIHRlbXBvcmFyeSB2YWx1ZXMgJHtKU09OLnN0cmluZ2lmeShzY29wZWRJZHMpfS5cbiR7bGVhdmVDb21tZW50VGV4dH1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjYXJyeTtcbiAgICB9XG5cbiAgICBpZiAoc2NvcGVkSWRzLmluY2x1ZGVzKGNvcmVzcG9uZGluZ05vZGVJZCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1Zyhgc2tpcHBpbmcgJyR7dmFsdWV9JyBzaW5jZSBpdCdzIGEgc2NvcGVkIHZhcmlhYmxlYCk7XG4gICAgICByZXR1cm4gY2Fycnk7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgbm9kZSBpZCAnJHtjb3Jlc3BvbmRpbmdOb2RlSWR9J2ApO1xuXG4gICAgY29uc3Qgc3BvdFBhcnRzID0gdmFsdWUuc3BsaXQoXCIuXCIpO1xuICAgIGxldCBpc1RoZXJlQU51bWVyaWNBY2Nlc3NvciA9IGZhbHNlO1xuICAgIGNvbnN0IHJlZmVyZW5jZVNwb3RQYXJ0cyA9IHNwb3RQYXJ0cy5maWx0ZXIoKHBhcnQpID0+IHtcbiAgICAgIGlmICghTnVtYmVyLmlzTmFOKHBhcnNlSW50KHBhcnQsIDEwKSkpIHtcbiAgICAgICAgaXNUaGVyZUFOdW1lcmljQWNjZXNzb3IgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNUaGVyZUFOdW1lcmljQWNjZXNzb3I7XG4gICAgfSk7XG4gICAgY29uc3QgZnVsbFJlZmVyZW5jZSA9IGlzVGhlcmVBTnVtZXJpY0FjY2Vzc29yXG4gICAgICA/IHJlZmVyZW5jZVNwb3RQYXJ0cy5zbGljZSgwLCAyKS5qb2luKFwiLlwiKVxuICAgICAgOiB2YWx1ZTtcblxuICAgIGNvbnN0IGlzVmFyaWFibGUgPSB2YWx1ZS5zdGFydHNXaXRoKFwidmFyLlwiKTtcbiAgICBjb25zdCB1c2VGcW4gPVxuICAgICAgLy8gQ2FuIG5vdCB1c2UgRlFOIG9uIHZhcnNcbiAgICAgICFpc1ZhcmlhYmxlICYmXG4gICAgICAvLyBDYW4gbm90IHVzZSBGUU4gb24gbG9jYWxzXG4gICAgICAhdmFsdWUuc3RhcnRzV2l0aChcImxvY2FsLlwiKSAmJlxuICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXNcbiAgICAgIChpbnB1dC5zdWJzdHIoZW5kUG9zaXRpb24gKyAxLCAxKSA9PT0gXCIqXCIgfHwgLy8gYSAqIChzcGxhdCkgd2UgbmVlZCB0byB1c2UgdGhlIEZRTlxuICAgICAgICBpbnB1dC5zdWJzdHIoZW5kUG9zaXRpb24sIDEpID09PSBcIltcIiB8fCAvLyBhIHByb3BlcnR5IGFjY2Vzc1xuICAgICAgICBpc1RoZXJlQU51bWVyaWNBY2Nlc3Nvcik7IC8vIGEgbnVtZXJpYyBhY2Nlc3NcblxuICAgIGNvbnN0IHJlZjogUmVmZXJlbmNlID0ge1xuICAgICAgc3RhcnQ6IHN0YXJ0UG9zaXRpb24sXG4gICAgICBlbmQ6IGVuZFBvc2l0aW9uLFxuICAgICAgcmVmZXJlbmNlZToge1xuICAgICAgICBpZDogY29yZXNwb25kaW5nTm9kZUlkLFxuICAgICAgICBmdWxsOiBmdWxsUmVmZXJlbmNlLFxuICAgICAgfSxcbiAgICAgIHVzZUZxbixcbiAgICAgIGlzVmFyaWFibGUsXG4gICAgfTtcbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIHJlZmVyZW5jZSAke0pTT04uc3RyaW5naWZ5KHJlZil9YCk7XG4gICAgcmV0dXJuIFsuLi5jYXJyeSwgcmVmXTtcbiAgfSwgW10gYXMgUmVmZXJlbmNlW10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFVzZWRSZWZlcmVuY2VzKFxuICBub2RlSWRzOiBzdHJpbmdbXSxcbiAgaXRlbTogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbik6IFByb21pc2U8UmVmZXJlbmNlW10+IHtcbiAgbG9nZ2VyLmRlYnVnKGBmaW5kVXNlZFJlZmVyZW5jZXMoJHtub2RlSWRzfSwgJHtpdGVtfSlgKTtcbiAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGF3YWl0IGV4dHJhY3RSZWZlcmVuY2VzRnJvbUV4cHJlc3Npb24oaXRlbSwgbm9kZUlkcywgW10pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpdGVtICE9PSBcIm9iamVjdFwiIHx8IGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoaXRlbS5tYXAoKGkpID0+IGZpbmRVc2VkUmVmZXJlbmNlcyhub2RlSWRzLCBpKSkpXG4gICAgKS5mbGF0KCk7XG4gIH1cblxuICBpZiAoaXRlbSAmJiBcImR5bmFtaWNcIiBpbiBpdGVtKSB7XG4gICAgY29uc3QgZHluID0gKGl0ZW0gYXMgYW55KVtcImR5bmFtaWNcIl07XG4gICAgY29uc3QgeyBmb3JfZWFjaCwgLi4ub3RoZXJzIH0gPSBkeW47XG4gICAgY29uc3QgZHluYW1pY1JlZiA9IE9iamVjdC5rZXlzKG90aGVycylbMF07XG4gICAgcmV0dXJuIGF3YWl0IGZpbmRVc2VkUmVmZXJlbmNlcyhbLi4ubm9kZUlkcywgZHluYW1pY1JlZl0sIGR5bik7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLm1hcCgoaSkgPT5cbiAgICAgICAgZmluZFVzZWRSZWZlcmVuY2VzKG5vZGVJZHMsIGkpLFxuICAgICAgKSxcbiAgICApXG4gICkuZmxhdCgpO1xufVxuIl19
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWZlcmVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILDhDQUd5QjtBQUN6QixtQ0FBbUQ7QUFFbkQsMkNBQTJDO0FBRTNDLFNBQWdCLHVCQUF1QixDQUNyQyxLQUFtQixFQUNuQixHQUFjO0lBRWQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsT0FBTyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBUkQsMERBUUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxVQUE4QjtJQUM5RCxJQUFJLENBQUMsaUNBQUcsQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2hELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDeEMsTUFBTSxZQUFZLEdBQUcsVUFB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QyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxPQUFPLENBQ0wsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBMkIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ25ELGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDL0IsQ0FDRixDQUNGLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDWCxDQUFDO0FBakNELGdEQWlDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0UmVmZXJlbmNlc0luRXhwcmVzc2lvbixcbiAgVEZFeHByZXNzaW9uU3ludGF4VHJlZSBhcyB0ZXgsXG59IGZyb20gXCJAY2RrdG4vaGNsMmpzb25cIjtcbmltcG9ydCB7IGxlYXZlQ29tbWVudFRleHQsIGxvZ2dlciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBQcm9ncmFtU2NvcGUsIFJlZmVyZW5jZSwgVGVycmFmb3JtUmVzb3VyY2VCbG9jayB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyB2YXJpYWJsZU5hbWUgfSBmcm9tIFwiLi92YXJpYWJsZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVRvVmFyaWFibGVOYW1lKFxuICBzY29wZTogUHJvZ3JhbVNjb3BlLFxuICByZWY6IFJlZmVyZW5jZSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gcmVmLnJlZmVyZW5jZWUuaWQuc3BsaXQoXCIuXCIpO1xuICBjb25zdCByZXNvdXJjZSA9IHBhcnRzWzBdID09PSBcImRhdGFcIiA/IGAke3BhcnRzWzBdfS4ke3BhcnRzWzFdfWAgOiBwYXJ0c1swXTtcbiAgY29uc3QgbmFtZSA9IHBhcnRzWzBdID09PSBcImRhdGFcIiA/IHBhcnRzWzJdIDogcGFydHNbMV07XG4gIHJldHVybiB2YXJpYWJsZU5hbWUoc2NvcGUsIHJlc291cmNlLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zUmVmZXJlbmNlKGV4cHJlc3Npb246IHRleC5FeHByZXNzaW9uVHlwZSkge1xuICBpZiAoIXRleC5pc1Njb3BlVHJhdmVyc2FsRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNlZ21lbnRzID0gZXhwcmVzc2lvbi5tZXRhLnRyYXZlcnNhbDtcbiAgY29uc3Qgcm9vdFNlZ21lbnQgPSBzZWdtZW50c1swXS5zZWdtZW50O1xuICBjb25zdCBmdWxsQWNjZXNzb3IgPSBleHByZXNzaW9uLm1ldGEuZnVsbEFjY2Vzc29yO1xuXG4gIGlmIChcbiAgICByb290U2VnbWVudCA9PT0gXCJjb3VudFwiIHx8IC8vIGNvdW50IHZhcmlhYmxlXG4gICAgcm9vdFNlZ21lbnQgPT09IFwiZWFjaFwiIHx8IC8vIGVhY2ggdmFyaWFibGVcbiAgICAvLyBodHRwczovL3d3dy50ZXJyYWZvcm0uaW8vZG9jcy9sYW5ndWFnZS9leHByZXNzaW9ucy9yZWZlcmVuY2VzLmh0bWwjZmlsZXN5c3RlbS1hbmQtd29ya3NwYWNlLWluZm9cbiAgICBmdWxsQWNjZXNzb3Iuc3RhcnRzV2l0aChcInBhdGgubW9kdWxlXCIpIHx8XG4gICAgZnVsbEFjY2Vzc29yLnN0YXJ0c1dpdGgoXCJwYXRoLnJvb3RcIikgfHxcbiAgICBmdWxsQWNjZXNzb3Iuc3RhcnRzV2l0aChcInBhdGguY3dkXCIpIHx8XG4gICAgZnVsbEFjY2Vzc29yLnN0YXJ0c1dpdGgoXCJ0ZXJyYWZvcm0ud29ya3NwYWNlXCIpIHx8XG4gICAgZnVsbEFjY2Vzc29yLnN0YXJ0c1dpdGgoXCJzZWxmLlwiKSAvLyBibG9jayBsb2NhbCB2YWx1ZVxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoYHNraXBwaW5nICR7ZnVsbEFjY2Vzc29yfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFJlZmVyZW5jZXNGcm9tRXhwcmVzc2lvbihcbiAgaW5wdXQ6IHN0cmluZyxcbiAgbm9kZUlkczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHNjb3BlZElkczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSwgLy8gZHluYW1pY3MgaW50cm9kdWNlIG5ldyBzY29wZWQgdmFyaWFibGVzIHRoYXQgYXJlIG5vdCB0aGUgZ2xvYmFsbHkgYWNjZXNzaWJsZSBpZHNcbik6IFByb21pc2U8UmVmZXJlbmNlW10+IHtcbiAgbG9nZ2VyLmRlYnVnKGBleHRyYWN0UmVmZXJlbmNlc0Zyb21FeHByZXNzaW9uKCR7aW5wdXR9KWApO1xuICBjb25zdCBwb3NzaWJsZVZhcmlhYmxlU3BvdHMgPSBhd2FpdCBnZXRSZWZlcmVuY2VzSW5FeHByZXNzaW9uKFxuICAgIFwibWFpbi50ZlwiLFxuICAgIGlucHV0LFxuICApO1xuXG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgZm91bmQgcG9zc2libGUgdmFyaWFibGUgc3BvdHM6ICR7SlNPTi5zdHJpbmdpZnkocG9zc2libGVWYXJpYWJsZVNwb3RzKX1gLFxuICApO1xuXG4gIHJldHVybiBwb3NzaWJsZVZhcmlhYmxlU3BvdHMucmVkdWNlKChjYXJyeSwgc3BvdCkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIH0gPSBzcG90O1xuICAgIC8vIG5vIHJlZmVyZW5jZVxuICAgIGlmIChcbiAgICAgICF2YWx1ZS5pbmNsdWRlcyhcIi5cIikgfHwgLy8ganVzdCBhIGxpdGVyYWxcbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoXCIuXCIpIHx8IC8vIGRhbmdsaW5nIHByb3BlcnR5IGFjY2Vzc1xuICAgICAgdmFsdWUuZW5kc1dpdGgoXCIuLi5cIikgfHwgLy8gc3ByZWFkIChsaWtlbHkgaW4gZm9yIGxvb3ApXG4gICAgICB2YWx1ZS5zdGFydHNXaXRoKFwiY291bnQuXCIpIHx8IC8vIGNvdW50IHZhcmlhYmxlXG4gICAgICB2YWx1ZS5zdGFydHNXaXRoKFwiZWFjaC5cIikgfHwgLy8gZWFjaCB2YXJpYWJsZVxuICAgICAgLy8gaHR0cHM6Ly93d3cudGVycmFmb3JtLmlvL2RvY3MvbGFuZ3VhZ2UvZXhwcmVzc2lvbnMvcmVmZXJlbmNlcy5odG1sI2ZpbGVzeXN0ZW0tYW5kLXdvcmtzcGFjZS1pbmZvXG4gICAgICB2YWx1ZS5zdGFydHNXaXRoKFwicGF0aC5tb2R1bGVcIikgfHxcbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoXCJwYXRoLnJvb3RcIikgfHxcbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoXCJwYXRoLmN3ZFwiKSB8fFxuICAgICAgdmFsdWUuc3RhcnRzV2l0aChcInRlcnJhZm9ybS53b3Jrc3BhY2VcIikgfHxcbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoXCJzZWxmLlwiKSAvLyBibG9jayBsb2NhbCB2YWx1ZVxuICAgICkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBza2lwcGluZyAke3ZhbHVlfWApO1xuICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgIH1cblxuICAgIGNvbnN0IHJlZmVyZW5jZVBhcnRzID0gdmFsdWUuc3BsaXQoXCIuXCIpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFNlYXJjaGluZyBmb3Igbm9kZSBpZCAnJHt2YWx1ZX0nIGluICR7SlNPTi5zdHJpbmdpZnkobm9kZUlkcyl9YCxcbiAgICApO1xuICAgIGNvbnN0IGNvcmVzcG9uZGluZ05vZGVJZCA9IFsuLi5ub2RlSWRzLCAuLi5zY29wZWRJZHNdLmZpbmQoKGlkKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGlkLnNwbGl0KFwiLlwiKTtcbiAgICAgIGNvbnN0IG1hdGNoZXNGaXJzdCA9IHBhcnRzWzBdID09PSByZWZlcmVuY2VQYXJ0c1swXTtcbiAgICAgIGNvbnN0IG1hdGNoZXNGaXJzdFR3byA9XG4gICAgICAgIG1hdGNoZXNGaXJzdCAmJlxuICAgICAgICAocGFydHNbMV0gPT09IHJlZmVyZW5jZVBhcnRzWzFdIHx8IHJlZmVyZW5jZVBhcnRzLmxlbmd0aCA9PT0gMSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIG1hdGNoZXNGaXJzdFR3byAmJlxuICAgICAgICAocGFydHNbMF0gPT09IFwiZGF0YVwiID8gcGFydHNbMl0gPT09IHJlZmVyZW5jZVBhcnRzWzJdIDogdHJ1ZSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWNvcmVzcG9uZGluZ05vZGVJZCkge1xuICAgICAgLy8gVGhpcyBpcyBtb3N0IGxpa2VseSBhIGZhbHNlIHBvc2l0aXZlLCBzbyB3ZSBqdXN0IGlnbm9yZSBpdFxuICAgICAgLy8gV2UgaW5jbHVkZSB0aGUgbG9nIGJlbG93IHRvIGhlbHAgZGVidWdnaW5nXG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGb3VuZCBhIHJlZmVyZW5jZSB0aGF0IGlzIHVua25vd246ICR7aW5wdXR9IGhhcyByZWZlcmVuY2UgXCIke3ZhbHVlfVwiLlRoZSBpZCB3YXMgbm90IGZvdW5kIGluICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgbm9kZUlkcyxcbiAgICAgICAgKX0gd2l0aCB0ZW1wb3JhcnkgdmFsdWVzICR7SlNPTi5zdHJpbmdpZnkoc2NvcGVkSWRzKX0uXG4ke2xlYXZlQ29tbWVudFRleHR9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY2Fycnk7XG4gICAgfVxuXG4gICAgaWYgKHNjb3BlZElkcy5pbmNsdWRlcyhjb3Jlc3BvbmRpbmdOb2RlSWQpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYHNraXBwaW5nICcke3ZhbHVlfScgc2luY2UgaXQncyBhIHNjb3BlZCB2YXJpYWJsZWApO1xuICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIG5vZGUgaWQgJyR7Y29yZXNwb25kaW5nTm9kZUlkfSdgKTtcblxuICAgIGNvbnN0IHNwb3RQYXJ0cyA9IHZhbHVlLnNwbGl0KFwiLlwiKTtcbiAgICBsZXQgaXNUaGVyZUFOdW1lcmljQWNjZXNzb3IgPSBmYWxzZTtcbiAgICBjb25zdCByZWZlcmVuY2VTcG90UGFydHMgPSBzcG90UGFydHMuZmlsdGVyKChwYXJ0KSA9PiB7XG4gICAgICBpZiAoIU51bWJlci5pc05hTihwYXJzZUludChwYXJ0LCAxMCkpKSB7XG4gICAgICAgIGlzVGhlcmVBTnVtZXJpY0FjY2Vzc29yID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzVGhlcmVBTnVtZXJpY0FjY2Vzc29yO1xuICAgIH0pO1xuICAgIGNvbnN0IGZ1bGxSZWZlcmVuY2UgPSBpc1RoZXJlQU51bWVyaWNBY2Nlc3NvclxuICAgICAgPyByZWZlcmVuY2VTcG90UGFydHMuc2xpY2UoMCwgMikuam9pbihcIi5cIilcbiAgICAgIDogdmFsdWU7XG5cbiAgICBjb25zdCBpc1ZhcmlhYmxlID0gdmFsdWUuc3RhcnRzV2l0aChcInZhci5cIik7XG4gICAgY29uc3QgdXNlRnFuID1cbiAgICAgIC8vIENhbiBub3QgdXNlIEZRTiBvbiB2YXJzXG4gICAgICAhaXNWYXJpYWJsZSAmJlxuICAgICAgLy8gQ2FuIG5vdCB1c2UgRlFOIG9uIGxvY2Fsc1xuICAgICAgIXZhbHVlLnN0YXJ0c1dpdGgoXCJsb2NhbC5cIikgJiZcbiAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzXG4gICAgICAoaW5wdXQuc3Vic3RyKGVuZFBvc2l0aW9uICsgMSwgMSkgPT09IFwiKlwiIHx8IC8vIGEgKiAoc3BsYXQpIHdlIG5lZWQgdG8gdXNlIHRoZSBGUU5cbiAgICAgICAgaW5wdXQuc3Vic3RyKGVuZFBvc2l0aW9uLCAxKSA9PT0gXCJbXCIgfHwgLy8gYSBwcm9wZXJ0eSBhY2Nlc3NcbiAgICAgICAgaXNUaGVyZUFOdW1lcmljQWNjZXNzb3IpOyAvLyBhIG51bWVyaWMgYWNjZXNzXG5cbiAgICBjb25zdCByZWY6IFJlZmVyZW5jZSA9IHtcbiAgICAgIHN0YXJ0OiBzdGFydFBvc2l0aW9uLFxuICAgICAgZW5kOiBlbmRQb3NpdGlvbixcbiAgICAgIHJlZmVyZW5jZWU6IHtcbiAgICAgICAgaWQ6IGNvcmVzcG9uZGluZ05vZGVJZCxcbiAgICAgICAgZnVsbDogZnVsbFJlZmVyZW5jZSxcbiAgICAgIH0sXG4gICAgICB1c2VGcW4sXG4gICAgICBpc1ZhcmlhYmxlLFxuICAgIH07XG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCByZWZlcmVuY2UgJHtKU09OLnN0cmluZ2lmeShyZWYpfWApO1xuICAgIHJldHVybiBbLi4uY2FycnksIHJlZl07XG4gIH0sIFtdIGFzIFJlZmVyZW5jZVtdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRVc2VkUmVmZXJlbmNlcyhcbiAgbm9kZUlkczogc3RyaW5nW10sXG4gIGl0ZW06IFRlcnJhZm9ybVJlc291cmNlQmxvY2ssXG4pOiBQcm9taXNlPFJlZmVyZW5jZVtdPiB7XG4gIGxvZ2dlci5kZWJ1ZyhgZmluZFVzZWRSZWZlcmVuY2VzKCR7bm9kZUlkc30sICR7aXRlbX0pYCk7XG4gIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBhd2FpdCBleHRyYWN0UmVmZXJlbmNlc0Zyb21FeHByZXNzaW9uKGl0ZW0sIG5vZGVJZHMsIFtdKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaXRlbSAhPT0gXCJvYmplY3RcIiB8fCBpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGl0ZW0ubWFwKChpKSA9PiBmaW5kVXNlZFJlZmVyZW5jZXMobm9kZUlkcywgaSkpKVxuICAgICkuZmxhdCgpO1xuICB9XG5cbiAgaWYgKGl0ZW0gJiYgXCJkeW5hbWljXCIgaW4gaXRlbSkge1xuICAgIGNvbnN0IGR5biA9IChpdGVtIGFzIGFueSlbXCJkeW5hbWljXCJdO1xuICAgIGNvbnN0IHsgZm9yX2VhY2g6IF9mb3JfZWFjaCwgLi4ub3RoZXJzIH0gPSBkeW47XG4gICAgY29uc3QgZHluYW1pY1JlZiA9IE9iamVjdC5rZXlzKG90aGVycylbMF07XG4gICAgcmV0dXJuIGF3YWl0IGZpbmRVc2VkUmVmZXJlbmNlcyhbLi4ubm9kZUlkcywgZHluYW1pY1JlZl0sIGR5bik7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLm1hcCgoaSkgPT5cbiAgICAgICAgZmluZFVzZWRSZWZlcmVuY2VzKG5vZGVJZHMsIGkpLFxuICAgICAgKSxcbiAgICApXG4gICkuZmxhdCgpO1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdktn/hcl2cdk",
3
- "version": "0.23.0-pre.41",
3
+ "version": "0.23.0-pre.44",
4
4
  "description": "Transform HCL into CDK",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -40,12 +40,12 @@
40
40
  "@babel/generator": "7.29.1",
41
41
  "@babel/template": "7.28.6",
42
42
  "@babel/types": "7.29.0",
43
- "@cdktn/commons": "0.23.0-pre.41",
44
- "@cdktn/hcl2json": "0.23.0-pre.41",
45
- "@cdktn/provider-generator": "0.23.0-pre.41",
46
- "@cdktn/provider-schema": "0.23.0-pre.41",
43
+ "@cdktn/commons": "0.23.0-pre.44",
44
+ "@cdktn/hcl2json": "0.23.0-pre.44",
45
+ "@cdktn/provider-generator": "0.23.0-pre.44",
46
+ "@cdktn/provider-schema": "0.23.0-pre.44",
47
47
  "camelcase": "6.3.0",
48
- "cdktn": "0.23.0-pre.41",
48
+ "cdktn": "0.23.0-pre.44",
49
49
  "codemaker": "1.128.0",
50
50
  "deep-equal": "2.2.3",
51
51
  "glob": "10.5.0",