@seniorsistemas/yms-integration 1.15.1 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/seniorsistemas-yms-integration.umd.js +22 -23
- package/bundles/seniorsistemas-yms-integration.umd.js.map +1 -1
- package/bundles/seniorsistemas-yms-integration.umd.min.js +1 -1
- package/bundles/seniorsistemas-yms-integration.umd.min.js.map +1 -1
- package/esm2015/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.js +9 -1
- package/esm2015/src/erp-senior/devolucao/form/devolucao-form.component.js +2 -2
- package/esm2015/src/erp-senior/expedicao/form/expedicao-form.component.js +2 -8
- package/esm2015/src/erp-senior/recebimento/form/recebimento-form.component.js +12 -9
- package/esm2015/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +2 -8
- package/esm5/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.js +9 -1
- package/esm5/src/erp-senior/devolucao/form/devolucao-form.component.js +2 -2
- package/esm5/src/erp-senior/expedicao/form/expedicao-form.component.js +2 -8
- package/esm5/src/erp-senior/recebimento/form/recebimento-form.component.js +12 -9
- package/esm5/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +2 -8
- package/fesm2015/seniorsistemas-yms-integration.js +22 -23
- package/fesm2015/seniorsistemas-yms-integration.js.map +1 -1
- package/fesm5/seniorsistemas-yms-integration.js +22 -23
- package/fesm5/seniorsistemas-yms-integration.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-yms-integration.metadata.json +1 -1
- package/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.d.ts +2 -0
- package/src/erp-senior/recebimento/form/recebimento-form.component.d.ts +2 -0
|
@@ -145,13 +145,7 @@ let ExpedicaoFormComponent = class ExpedicaoFormComponent {
|
|
|
145
145
|
this.setTransportadora(this.agenda.externalTenant.cnpj);
|
|
146
146
|
}
|
|
147
147
|
this.totalEixosComposicao = this.agenda && this.agenda.veiculo ? this.agenda.veiculo.eixos || 0 : 0;
|
|
148
|
-
const statusAgenda = [
|
|
149
|
-
"AGUARDANDO_CONFIRMACAO_SOLICITANTE",
|
|
150
|
-
"AGENDADO",
|
|
151
|
-
"AGUARDANDO_CONFIRMACAO",
|
|
152
|
-
"EM_EXECUCAO",
|
|
153
|
-
"REJEITADO_POR_VALIDACAO",
|
|
154
|
-
];
|
|
148
|
+
const statusAgenda = ["AGUARDANDO_CONFIRMACAO_SOLICITANTE", "AGENDADO", "AGUARDANDO_CONFIRMACAO", "REJEITADO_POR_VALIDACAO"];
|
|
155
149
|
if (this.agenda && !statusAgenda.includes(this.agenda.status)) {
|
|
156
150
|
this.formGroup.disable();
|
|
157
151
|
this.disableButtonSave = true;
|
|
@@ -1434,4 +1428,4 @@ ExpedicaoFormComponent = tslib_1.__decorate([
|
|
|
1434
1428
|
HasChangeService])
|
|
1435
1429
|
], ExpedicaoFormComponent);
|
|
1436
1430
|
export { ExpedicaoFormComponent };
|
|
1437
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWRpY2FvLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL2V4cGVkaWNhby9mb3JtL2V4cGVkaWNhby1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FHWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhC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UUFDYixnQkFBZ0I7UUFDWCxjQUFjO1FBQ1YseUJBQXlCO1FBQy9CLFlBQVk7UUFDWCxhQUFhO1FBQ2IsYUFBYTtRQUNMLHFCQUFxQjtRQUN4QixrQkFBa0I7UUFDZCxzQkFBc0I7UUFDL0IsYUFBYTtRQUNsQiwrQkFBK0I7UUFDcEIsbUJBQW1CO1FBQ3JCLGlCQUFpQjtRQUNkLG9CQUFvQjtRQUN4QixnQkFBZ0I7R0FqSmpDLHNCQUFzQixDQTh5RGxDO1NBOXlEWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0dXNBZ2VuZGEgfSBmcm9tIFwiLi8uLi8uLi9jb3JlL2VudW1zL3N0YXR1cy1hZ2VuZGFcIjtcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRvcnMsXG4gIEZvcm1BcnJheSxcbiAgQWJzdHJhY3RDb250cm9sLFxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybUZpZWxkIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCB7IEhvdGtleSwgSG90a2V5c1NlcnZpY2UgfSBmcm9tIFwiYW5ndWxhcjItaG90a2V5c1wiO1xuaW1wb3J0ICogYXMgX21vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJwcmltZW5nL2NvbXBvbmVudHMvY29tbW9uL21lc3NhZ2VzZXJ2aWNlXCI7XG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBmaW5hbGl6ZSwgbWFwLCB0YWtlVW50aWwsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZpZWxkLWN1c3RvbWl6YXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2ZvY3VzLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIGlzVmFsaWRGaWx0ZXIsXG4gIG1lcmdlVW5pcXVlLFxuICB1c2VyQ2FuVmlzdWFsaXplLFxufSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFnZW5kYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGFcIjtcbmltcG9ydCB7IEFnZW5kYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9hZ2VuZGEvYWdlbmRhLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIEV4cGVkaWNhbyxcbiAgT3JkZW1WZW5kYUl0ZW0sXG59IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2V4cGVkaWNhby9leHBlZGljYW9cIjtcbmltcG9ydCB7IEV4cGVkaWNhb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9leHBlZGljYW8vZXhwZWRpY2FvLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZpbGlhbCB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2ZpbGlhbC9maWxpYWxcIjtcbmltcG9ydCB7XG4gIEZpbGlhbFNlcnZpY2UsXG4gIFBlc3F1aXNhckZpbGlhaXNJbnB1dCxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEvcGVkaWRvLXZlbmRhLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlc3NvYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2FcIjtcbmltcG9ydCB7IFBlc3NvYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZXNzb2EvcGVzc29hLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3RyYW5zcG9ydGFkb3JhL3RyYW5zcG9ydGFkb3JhLnNlcnZpY2VcIjtcbmltcG9ydCB7IEV4cGVkaWNhb0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUgfSBmcm9tIFwiLi4vZXhwZWRpY2FvLWNoZWdhZGEtdmVpY3Vsby5vdmVycmlkZVwiO1xuaW1wb3J0IHsgUGVkaWRvVmVuZGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEvcGVkaWRvLXZlbmRhXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYUl0ZW0gfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEtaXRlbS9wZWRpZG8tdmVuZGEtaXRlbVwiO1xuaW1wb3J0IHsgUGVkaWRvVmVuZGFJdGVtU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS1pdGVtL3BlZGlkby12ZW5kYS1pdGVtLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zcG9ydGFkb3JhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmFcIjtcbmltcG9ydCB7XG4gIFBlZGlkb1ZlbmRhRHRvLFxuICBQZXNxdWlzYVBlZGlkb3NWZW5kYUR0byxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVkaWRvLXZlbmRhL3BlZGlkby12ZW5kYS1kdG9cIjtcbmltcG9ydCB7IG9uTG9va3VwUmVxdWVzdCwgb25TZWFyY2hSZXF1ZXN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvb2t1cC11dGlsc1wiO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgU29ydE1ldGEgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IEVycFByb2Nlc3NEYXRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1kYXRhXCI7XG5pbXBvcnQgeyBFcnBQcm9jZXNzU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1wcm9jZXNzLWRhdGEvZXJwLXByb2Nlc3Mtc2VydmljZVwiO1xuaW1wb3J0IHsgRXJwRm9ybUNvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtZm9ybS1jb25maWcvZXJwLWZvcm0tY29uZmlnLXNlcnZpY2VcIjtcbmltcG9ydCB7IEhhc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2hhcy1jaGFuZ2UvaGFzLWNoYW5nZS1zZXJ2aWNlJztcblxuY29uc3QgbW9tZW50ID0gX21vbWVudDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImV4cGVkaWNhby1mb3JtXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXhwZWRpY2FvLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuLi8uLi9lcnAtc2VuaW9yLnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEV4cGVkaWNhb0Zvcm1Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICBwdWJsaWMgbG9jYWxlQ29uZmlnOiBhbnkgPSB7fTtcbiAgcHVibGljIGN1cnJlbmN5TG9jYWxlT3B0aW9uczogYW55ID0ge307XG4gIHB1YmxpYyBwZXJtaXNzaW9uczogYW55ID0ge307XG4gIHB1YmxpYyBhbGxQZXJtaXNzaW9uczogYW55ID0ge307XG4gIHB1YmxpYyBwZWRpZG9BdHVhbDogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIHBlZGlkb1ZlbmRhRm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgaXRlbUZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgbG9hZGluZzogYm9vbGVhbjtcbiAgcHVibGljIG1haW5QYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xuICBwdWJsaWMgdmlzaWJsZURpYWxvZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZm9ybUNhcnJlZ2FkbyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZERhdGE6IFBlc3NvYVtdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIGNsaWVudGVSZW1lc3NhTG9va3VwU3VnZ2VzdGlvbnM6IFBlc3NvYVtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kaWdvXCIsIFwibm9tZVwiLCBcImNwZkNucGpcIl07XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYVNlYXJjaEdyaWREYXRhOiBQZXNzb2FbXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIGZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zOiBGaWxpYWxbXTtcbiAgcHVibGljIGZpbGlhbExvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICBwdWJsaWMgZmlsaWFsQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICBwdWJsaWMgZmlsaWFsTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIGZpbGlhbFNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBmaWxpYWxTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWREYXRhOiBGaWxpYWxbXTtcbiAgcHVibGljIGZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zOiBUcmFuc3BvcnRhZG9yYVtdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzID0gW1xuICAgIFwiY29kaWdvXCIsXG4gICAgXCJwZXNzb2Eubm9tZVwiLFxuICAgIFwicGVzc29hLmNwZkNucGpcIixcbiAgXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1xuICAgIFwiaWRcIixcbiAgICBcImNvZGlnb1wiLFxuICAgIFwicGVzc29hLm5vbWVcIixcbiAgICBcInBlc3NvYS5jcGZDbnBqXCIsXG4gIF07XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRGF0YTogVHJhbnNwb3J0YWRvcmFbXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIHBlZGlkb1ZlbmRhTG9va3VwU3VnZ2VzdGlvbnM6IFBlZGlkb1ZlbmRhW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJudW1lcm9cIiwgXCJjbGllbnRlXCJdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJpZFwiLFxuICAgIFwibnVtZXJvXCIsXG4gICAgXCJmaWxpYWwubm9tZVwiLFxuICAgIFwiZmlsaWFsLmNvZGlnb1wiLFxuICAgIFwicGVzc29hLmlkXCIsXG4gICAgXCJwZXNzb2EuY29kaWdvXCIsXG4gICAgXCJwZXNzb2Eubm9tZVwiLFxuICBdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhU2VhcmNoR3JpZERhdGE6IFBlZGlkb1ZlbmRhW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1Mb29rdXBTdWdnZXN0aW9uczogUGVkaWRvVmVuZGFJdGVtW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzID0gW1wic2VxdWVuY2lhXCIsIFwic2t1LmRlc2NyaWNhb1wiXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcbiAgICBcImlkXCIsXG4gICAgXCJzZXF1ZW5jaWFcIixcbiAgICBcInNrdS5kZXNjcmljYW9cIixcbiAgXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRGF0YTogUGVkaWRvVmVuZGFJdGVtW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgYWdlbmRhTG9va3VwU3VnZ2VzdGlvbnM6IEFnZW5kYVtdO1xuICBwdWJsaWMgYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiZGVzY3JpY2FvXCJdO1xuICBwdWJsaWMgYWdlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJkZXNjcmljYW9cIl07XG4gIHB1YmxpYyBhZ2VuZGFMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGFnZW5kYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZERhdGE6IEFnZW5kYVtdO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIGRpc2FibGVCdXR0b25TYXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGRpc2FibGVPcmRlcnNCdXR0b25zOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgdG90YWxFaXhvc0NvbnRyYXRhZG9zOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgdG90YWxFaXhvc0NvbXBvc2ljYW86IG51bWJlciA9IDA7XG5cbiAgcHVibGljIG9yZGVyc1ZhbGlkID0gdHJ1ZTtcbiAgcHVibGljIHNhdmVBbmRJbml0QnV0dG9uOiBhbnk7XG5cbiAgQElucHV0KCkgcHJpdmF0ZSBhZ2VuZGE6IEFnZW5kYTtcbiAgQElucHV0KCkgcHJpdmF0ZSByZXZhbGlkYWNhbzogYm9vbGVhbjtcblxuICBAVmlld0NoaWxkKFwiY3VzdG9tVGVtcGxhdGVcIilcbiAgcHVibGljIGN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoXCJjdXN0b21Gb3JtRmllbGRzXCIpXG4gIHB1YmxpYyBjdXN0b21Gb3JtRmllbGRzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7ICBcbiAgcHJpdmF0ZSBlcnBQcm9jZXNzRGF0YTogRXJwUHJvY2Vzc0RhdGE7XG4gIHByaXZhdGUgZW5hYmxlUmV2YWxpZGF0aW9uOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXhwZWRpY2FvU2VydmljZTogRXhwZWRpY2FvU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaG90a2V5c1NlcnZpY2U6IEhvdGtleXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmllbGRDdXN0b21pemF0aW9uOiBGaWVsZEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9jdXNTZXJ2aWNlOiBGb2N1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXNzb2FTZXJ2aWNlOiBQZXNzb2FTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsaWFsU2VydmljZTogRmlsaWFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zcG9ydGFkb3JhU2VydmljZTogVHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVkaWRvVmVuZGFTZXJ2aWNlOiBQZWRpZG9WZW5kYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlOiBQZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWdlbmRhU2VydmljZTogQWdlbmRhU2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJyaWRlOiBFeHBlZGljYW9DaGVnYWRhVmVpY3Vsb092ZXJyaWRlLFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVycFByb2Nlc3NTZXJ2aWNlOiBFcnBQcm9jZXNzU2VydmljZSxcbiAgICBwcml2YXRlIGVycEZvcm1Db25maWdTZXJ2aWNlOiBFcnBGb3JtQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGhhc0NoYW5nZVNlcnZpY2U6IEhhc0NoYW5nZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmdldEZvcm1Hcm91cCgpO1xuICAgIHRoaXMucGVkaWRvVmVuZGFGb3JtID0gdGhpcy5nZXRQZWRpZG9WZW5kYUZvcm0oKTtcbiAgICB0aGlzLml0ZW1Gb3JtR3JvdXAgPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMucm91dGUuZGF0YVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMub25Sb3V0ZURhdGFDaGFuZ2UoZGF0YSkpO1xuXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoeyBhZ2VuZGEgfSkgPT4ge1xuICAgICAgICBpZiAoYWdlbmRhICE9IFwibmV3XCIpIHtcbiAgICAgICAgICB0aGlzLmdldEV4cGVkaWNhbyhhZ2VuZGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnVzY2FyRmlsaWFsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRDbGllbnRlU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5jbGllbnRlUmVtZXNzYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLmZpbGlhbFNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFBlZGlkb1ZlbmRhU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFBlZGlkb1ZlbmRhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hGaWVsZHMgPSB0aGlzLmdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5hZ2VuZGFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMuYWdlbmRhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5zZXRIb3RrZXlzKCk7XG5cbiAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQpIHtcbiAgICAgIHRoaXMuc2V0VHJhbnNwb3J0YWRvcmEodGhpcy5hZ2VuZGEuZXh0ZXJuYWxUZW5hbnQuY25waik7XG4gICAgfVxuXG4gICAgdGhpcy50b3RhbEVpeG9zQ29tcG9zaWNhbyA9IHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnZlaWN1bG8gPyB0aGlzLmFnZW5kYS52ZWljdWxvLmVpeG9zIHx8IDAgOiAwO1xuXG4gICAgY29uc3Qgc3RhdHVzQWdlbmRhID0gW1xuICAgICAgXCJBR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFXCIsXG4gICAgICBcIkFHRU5EQURPXCIsXG4gICAgICBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9cIixcbiAgICAgIFwiRU1fRVhFQ1VDQU9cIixcbiAgICAgIFwiUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cIixcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuYWdlbmRhICYmICFzdGF0dXNBZ2VuZGEuaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uU2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLmNyZWF0ZWRCeUVycCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVSZW1lc3NhXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhRm9ybS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLml0ZW1Gb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRQZWRpZG9zVmFsdWVDaGFuZ2VzKCk7XG4gICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSBtZXNzYWdlKTsgICAgXG4gICAgdGhpcy5lcnBGb3JtQ29uZmlnU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZW5hYmxlUmV2YWxpZGF0aW9uID0gbWVzc2FnZSk7ICBcblxuICAgIHRoaXMucmV2YWxpZGFjYW9UcmFuc3BvcnRhZG9yYSAoKTtcbiAgICB0aGlzLnZlcmlmaWNhU2VUZW1BbHRlcmFjYW8oKTtcbiAgfVxuICAgICAgIFxuICBwcml2YXRlIHZlcmlmaWNhU2VUZW1BbHRlcmFjYW8oKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2UodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJldmFsaWRhY2FvVHJhbnNwb3J0YWRvcmEgKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zcCA9IHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLnZhbHVlO1xuICAgICAgaWYgKHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UgJiYgdHJhbnNwKSB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEudHJhbnNwb3J0YWRvcmFJZCA9IHRyYW5zcC5pZDsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0pOyAgIFxuICB9XG5cbiAgcHVibGljIGFicmlyUGVkaWRvVmVuZGEocGVkaWRvVmVuZGE/OiBQZWRpZG9WZW5kYSkge1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudFxuICAgICAgLmdldEVsZW1lbnRCeUlkKFwicGVkaWRvVmVuZGFcIilcbiAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKTtcblxuICAgIGlmICghYnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhRm9ybS5wYXRjaFZhbHVlKHsgcGVkaWRvVmVuZGEgfSk7XG4gICAgYnV0dG9uc1swXS5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGV4Y2x1aXJQZWRpZG9WZW5kYShpbmRleDogbnVtYmVyKSB7XG4gICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgYWJyaXJQZWRpZG9WZW5kYUl0ZW0oXG4gICAgcGVkaWRvOiBGb3JtR3JvdXAsXG4gICAgcGVkaWRvVmVuZGFJdGVtPzogT3JkZW1WZW5kYUl0ZW1cbiAgKSB7XG4gICAgdGhpcy5pdGVtRm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICBwZWRpZG9WZW5kYUl0ZW0gfHwgeyBpdGVtOiB1bmRlZmluZWQsIHF1YW50aWRhZGU6IDEgfVxuICAgICk7XG4gICAgdGhpcy5wZWRpZG9BdHVhbCA9IHBlZGlkbztcbiAgICB0aGlzLnZpc2libGVEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGV4Y2x1aXJQZWRpZG9WZW5kYUl0ZW0oaWQ6IHN0cmluZywgcGVkaWRvOiBGb3JtR3JvdXApIHtcbiAgICBjb25zdCBpbmRleCA9IChcbiAgICAgIChwZWRpZG8uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS52YWx1ZSBhcyBPcmRlbVZlbmRhSXRlbVtdXG4gICAgKS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uaXRlbS5pZCA9PT0gaWQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAocGVkaWRvLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRQZWRpZG9zVmFsdWVDaGFuZ2VzKCkge1xuICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBwZWRpZG9zTGVuZ3RoID0gKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KVxuICAgICAgICAgIC5sZW5ndGg7XG4gICAgICAgIHRoaXMub3JkZXJzVmFsaWQgPSBwZWRpZG9zTGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KFwiZmlsaWFsXCIpXG4gICAgICAgICAgW3BlZGlkb3NMZW5ndGggPj0gMSA/IFwiZGlzYWJsZVwiIDogXCJlbmFibGVcIl0oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbGVjaW9uYXJQZWRpZG9WZW5kYShwZWRpZG9WZW5kYTogUGVkaWRvVmVuZGEpIHtcbiAgICBjb25zdCBjaGVja09yZGVycyA9IChvcmRlcjogYW55KSA9PiBvcmRlci5wZWRpZG9WZW5kYS5pZCA9PT0gcGVkaWRvVmVuZGEuaWQ7XG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWU7XG5cbiAgICBpZiAocGVkaWRvcy5maW5kKGNoZWNrT3JkZXJzKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkTWVzc2FnZShcbiAgICAgICAgXCJ3YXJuXCIsXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9zdW1tYXJ5XCJcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAucGVkaWRvX3ZlbmRhX3NlYXJjaF9hbHJlYWR5X3NlbGVjdGVkX2RldGFpbFwiXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KVxuICAgIC5wdXNoKHRoaXMuZ2V0T3JkZW1WZW5kYUZvcm0ocGVkaWRvVmVuZGEsIHRydWUpKTtcblxuICAgIGlmIChcbiAgICAgICEhcGVkaWRvVmVuZGEgJiZcbiAgICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoID09PSAxICYmXG4gICAgICAhdGhpcy5mb3JtR3JvdXAuZ2V0KFwiY2xpZW50ZUZhdHVyYW1lbnRvXCIpLnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmJ1c2NhckNsaWVudGVBRmF0dXJhcihwZWRpZG9WZW5kYSBhcyBhbnkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY2lvbmFyUGVkaWRvVmVuZGFJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Gb3JtR3JvdXAudmFsdWU7XG4gICAgY29uc3QgcGVkaWRvID0gdGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJpdGVuc1wiKS52YWx1ZTtcbiAgICBjb25zdCBjaGVja09yZGVySXRlbnMgPSAob3JkZXI6IGFueSkgPT4gb3JkZXIuaXRlbS5pZCA9PT0gaXRlbS5pdGVtLmlkO1xuICAgIGlmIChwZWRpZG8gJiYgaXRlbSAmJiBpdGVtLml0ZW0gJiYgcGVkaWRvLmZpbmQoY2hlY2tPcmRlckl0ZW5zKSlcbiAgICAgIHJldHVybiB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgIFwieW1zLmVycC5pdGVtX3BlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9zdW1tYXJ5XCJcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAuaXRlbV9wZWRpZG9fdmVuZGFfc2VhcmNoX2FscmVhZHlfc2VsZWN0ZWRfZGV0YWlsXCJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRPcmRlbVZlbmRhSXRlbUZvcm0oKTtcbiAgICBmb3JtLnBhdGNoVmFsdWUoeyAuLi50aGlzLml0ZW1Gb3JtR3JvdXAudmFsdWUgfSk7XG4gICAgaWYgKGZvcm0uZ2V0KFwiaXRlbVwiKS52YWx1ZSA9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAodGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XG4gICAgdGhpcy52aXNpYmxlRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZWNpb25hclBlZGlkb1ZlbmRhSXRlbUF1dG9tYXRpY2FtZW50ZShcbiAgICBpdGVuczogYW55LFxuICAgIHBlZGlkb1ZlbmRhOiBhbnlcbiAgKSB7XG4gICAgaWYgKGl0ZW5zICYmIGl0ZW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKCk7XG4gICAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5nZXRQZWRpZG9zKCk7XG4gICAgICBjb25zdCBwZWRpZG9BdHVhbDogYW55ID0gcGVkaWRvcy5maWx0ZXIoKHBlZGlkbzogYW55KSA9PlxuICAgICAgICBwZWRpZG8gJiYgcGVkaWRvLnZhbHVlLnBlZGlkb1ZlbmRhXG4gICAgICAgICAgPyBwZWRpZG8udmFsdWUucGVkaWRvVmVuZGEuaWQgPT09IHBlZGlkb1ZlbmRhLmlkXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXRlbUZvcm1Hcm91cFxuICAgICAgICAuZ2V0KFwiaXRlbVwiKVxuICAgICAgICAuc2V0VmFsdWUoaXRlbnMubGVuZ3RoID09PSAxID8gaXRlbnNbMF0gOiB7fSk7XG4gICAgICB0aGlzLml0ZW1Gb3JtR3JvdXAuZ2V0KFwicXVhbnRpZGFkZVwiKS5zZXRWYWx1ZSgxKTtcbiAgICAgIGZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuaXRlbUZvcm1Hcm91cC52YWx1ZSB9KTtcbiAgICAgIChwZWRpZG9BdHVhbFswXS5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XG4gICAgICB0aGlzLnZpc2libGVEaWFsb2cgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UGVkaWRvcygpOiBBYnN0cmFjdENvbnRyb2xbXSB7XG4gICAgcmV0dXJuICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHM7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRUb2tlbnMoaXRlbnM6IE9yZGVtVmVuZGFJdGVtW10pIHtcbiAgICByZXR1cm4gaXRlbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbSAmJiBpdGVtLml0ZW0gPyBpdGVtLml0ZW0gOiBpdGVtO1xuICAgICAgY29uc3QgcHJvZHV0byA9IHZhbHVlLnNrdSA/IHZhbHVlLnNrdSA6IHZhbHVlLnByb2R1dG87XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogdmFsdWUuaWQsXG4gICAgICAgIGxhYmVsOiBgUHJvZHV0bzogJHtwcm9kdXRvLmRlc2NyaWNhb30sIFNlcXVlbmNpYTogJHt2YWx1ZS5zZXF1ZW5jaWF9YCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IGlucHV0TGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG4gICAgY29uc3Qgc2VsZWN0ZWRJbnB1dCA9IEFycmF5LmZyb20oaW5wdXRMaXN0KS5maW5kKChmOiBhbnkpID0+ICFmLmRpc2FibGVkKTtcbiAgICBpZiAoc2VsZWN0ZWRJbnB1dCkge1xuICAgICAgc2VsZWN0ZWRJbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIHRoaXMub3ZlcnJpZGUuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluaXRcIik7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLm92ZXJyaWRlLnJlbW92ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEhvdGtleXMoKSB7XG4gICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICBuZXcgSG90a2V5KFxuICAgICAgICBcImFsdCtzaGlmdCtzXCIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc05ldygpIHx8IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyKSB0aGlzLm9uU2F2ZSgpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgIFwiYWx0K3NoaWZ0K2NcIixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzTmV3KCkge1xuICAgIHJldHVybiAhdGhpcy5mb3JtR3JvdXAudmFsdWUuaWQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3VnZ2VzdGlvbnModmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZS5hZ2VuZGEpIHtcbiAgICAgIHZhbHVlLmFnZW5kYS5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXSxcbiAgICAgICAgXCJhZ2VuZGFcIixcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yXG4gICAgICApO1xuICAgICAgaWYgKHZhbHVlLmFnZW5kYS5sYWJlbC50cmltKCkgPT09IHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yLnRyaW0oKSkge1xuICAgICAgICBkZWxldGUgdmFsdWUuYWdlbmRhLmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgZGlzcGxheUZpZWxkczogc3RyaW5nW10sXG4gICAgb3duZXJFbnRpdHk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIHNlcGFyYXRvcjogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBkaXNwbGF5RmllbGRzXG4gICAgICAubWFwKChmaWVsZCkgPT4gdGhpcy5nZXRQcm9wKHZhbHVlLCBgJHtvd25lckVudGl0eX0uJHtmaWVsZH1gKSlcbiAgICAgIC5yZWR1Y2UoKGFjYzogYW55LCB2YWw6IGFueSkgPT4gYCR7YWNjfSR7c2VwYXJhdG9yfSR7dmFsfWApO1xuICB9XG5cbiAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHsgY3VycmVuY3lTeW1ib2wsIHRob3VzYW5kc1NlcGFyYXRvciwgZGVjaW1hbFNlcGFyYXRvciB9ID1cbiAgICAgIGRhdGEubG9jYWxlQ29uZmlnLm51bWJlcjtcblxuICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XG4gICAgdGhpcy5jdXJyZW5jeUxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICBwcmVmaXg6IGN1cnJlbmN5U3ltYm9sLFxuICAgICAgdGhvdXNhbmRzOiB0aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICBkZWNpbWFsOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgIH07XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnMuZXhwZWRpY2FvO1xuICAgIHRoaXMuYWxsUGVybWlzc2lvbnMgPSBkYXRhLmFsbFBlcm1pc3Npb25zO1xuICAgIC8vdGhpcy52YWxpZGF0ZVZpc3VhbGl6YXRpb24oKTtcbiAgICBpZiAoZGF0YS5lbnRpdHkpIHtcbiAgICAgIGNvbnN0IGNhbkVkaXQgPSB0aGlzLnBlcm1pc3Npb25zLmVkaXRhcjtcbiAgICAgIGlmICghY2FuRWRpdCkgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgY29uc3QgdmFsdWU6IGFueSA9IEV4cGVkaWNhby5mcm9tRHRvKGRhdGEuZW50aXR5KTtcbiAgICAgIHRoaXMudXBkYXRlU3VnZ2VzdGlvbnModmFsdWUpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3IEV4cGVkaWNhbygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKSB7XG4gICAgdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbmRGaWxlKGZpbGVzVG9EZWxldGU6IGFueSwgZmlsZXNUb0NvbW1pdDogYW55W10pIHtcbiAgICBjb25zdCBvYnNlcnZhYmxlczogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvRGVsZXRlKSkge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5kZWxldGVGaWxlcyhmaWxlc1RvRGVsZXRlKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvQ29tbWl0KSkge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5jb21taXRGaWxlcyhmaWxlc1RvQ29tbWl0KSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KG9ic2VydmFibGVzKSkge1xuICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKSB7XG4gICAgY29uc3QgbnVtZXJvUGVkaWRvQ2xpZW50ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChcIm51bWVyb1BlZGlkb0NsaWVudGVcIikudmFsdWU7XG4gICAgY29uc3QgaXRlbVBlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpdGVtUGVkaWRvQ2xpZW50ZVwiKS52YWx1ZTtcbiAgICBjb25zdCB7IHZhbHVlOiBwZWRpZG9zIH0gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpO1xuICAgIChwZWRpZG9zIHx8IFtdKS5tYXAoKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGUgJiYgZS5pdGVucyAmJiBlLml0ZW5zLmxlbmd0aCkge1xuICAgICAgICBlLml0ZW5zWzBdLm51bWVyb1BlZGlkb0NsaWVudGUgPSBudW1lcm9QZWRpZG9DbGllbnRlO1xuICAgICAgICBlLml0ZW5zWzBdLml0ZW1QZWRpZG9DbGllbnRlID0gaXRlbVBlZGlkb0NsaWVudGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS5wYXRjaFZhbHVlKHBlZGlkb3MpO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlc1BlZGlkb0Jpb2Rpc2VsKCkge1xuICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpLnZhbHVlO1xuICAgIGNvbnN0IG51bWVyb1BlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJudW1lcm9QZWRpZG9DbGllbnRlXCIpO1xuICAgIGNvbnN0IGl0ZW1QZWRpZG9DbGllbnRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaXRlbVBlZGlkb0NsaWVudGVcIik7XG4gICAgKHBlZGlkb3MgfHwgW10pLm1hcCgoZTogYW55KSA9PiB7XG4gICAgICBpZiAobnVtZXJvUGVkaWRvQ2xpZW50ZS52YWx1ZSAmJiBpdGVtUGVkaWRvQ2xpZW50ZS52YWx1ZSkgcmV0dXJuO1xuICAgICAgY29uc3QgcGVkaWRvc0ludGVybm8gPVxuICAgICAgICBlICYmIGUuaXRlbnMgJiYgZS5pdGVucy5sZW5ndGggPyBlLml0ZW5zWzBdLnBlZGlkbyA6IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vICYmXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zICYmXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGlmIChwZWRpZG9zSW50ZXJuby5pdGVucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBudW1lcm9QZWRpZG9DbGllbnRlLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICBwZWRpZG9zSW50ZXJuby5pdGVuc1swXS5udW1lcm9QZWRpZG9DbGllbnRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpdGVtUGVkaWRvQ2xpZW50ZS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgcGVkaWRvc0ludGVybm8uaXRlbnNbMF0uaXRlbVBlZGlkb0NsaWVudGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TYXZlKHN0YXJ0PzogYm9vbGVhbikge1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImFnZW5kYVwiKS5zZXRWYWx1ZSh0aGlzLmFnZW5kYSk7XG4gICAgdGhpcy5vcmRlcnNWYWxpZCA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoID4gMDtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkIHx8ICF0aGlzLm9yZGVyc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHRoaXMuc2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKTtcblxuICAgIGNvbnN0IHsgZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCB9ID0gdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uZ2V0RmlsZXModGhpcy5mb3JtR3JvdXApO1xuICAgIFxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5pc05ldygpIHx8ICF0aGlzLmVuYWJsZVJldmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCwgc3RhcnQpO1xuICAgIH1cblxuICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhRXJwKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgIHJldHVybiB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgLmNoZWNhclJldmFsaWRhY2FvKHRoaXMuZXJwUHJvY2Vzc0RhdGEpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlcXVlclJldmFsaWRhY2FvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNhdmVBbmRJbml0KGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsIHN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX3RpdGxlXCIpLFxuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fbWVzc2FnZVwiKSxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgIHRoaXMuYWdlbmRhLnN0YXR1cyA9IFN0YXR1c0FnZW5kYS5SRUpFSVRBRE9fUE9SX1ZBTElEQUNBTztcbiAgICAgICAgdGhpcy5hZ2VuZGEubW90b3Jpc3RhID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLm1vdG9yaXN0YUlkfTtcbiAgICAgICAgdGhpcy5hZ2VuZGEudmVpY3VsbyA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS52ZWljdWxvSWR9O1xuICAgICAgICB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgICAuYXR1YWxpemFyQWdlbmRhKHRoaXMuYWdlbmRhKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBjb25jYXRNYXAoKF8pID0+IHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGVnYWRhLXZlaWN1bG9cIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmVqZWN0OiAoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZTogYW55LCBmaWxlc1RvQ29tbWl0OiBhbnlbXSwgc3RhcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmF0dWFsaXphRXhwZWRpY2FvKGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsICgpID0+IHtcbiAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgIGlmIChzdGFydCAmJiB0aGlzLnNhdmVBbmRJbml0QnV0dG9uKSB7XG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbi5jbGljaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzTWVzc2FnZSgpIHtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgIHNldmVyaXR5OiBcInN1Y2Nlc3NcIixcbiAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfdGl0bGVcIiksXG4gICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR1YWxpemFFeHBlZGljYW8oXG4gICAgZmlsZXNUb0RlbGV0ZTogYW55LFxuICAgIGZpbGVzVG9Db21taXQ6IGFueVtdLFxuICAgIG9uU3Vic2NyaWJlPzogRnVuY3Rpb25cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaWRcIikuc2V0VmFsdWUodmFsdWUuaWQgfHwgbnVsbCk7XG5cbiAgICAgICAgdGhpcy5vblNlbmRGaWxlKGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICBcInNhdmVkX21lc3NhZ2VfdGl0bGVcIixcbiAgICAgICAgICAgICAgXCJzYXZlZF9tZXNzYWdlX2NvbnRlbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9uU3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUcmFuc3BvcnRhZG9yYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBjbnBqID0gdmFsdWUucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIi9cIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtjbnBqfSdgO1xuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2VcbiAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogMTAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjb250ZW50c1swXS5jb2RpZ29cbiAgICAgICAgICAgICAgPyBjb250ZW50c1swXS5jb2RpZ28udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRlbnRzWzBdLmRlc2NyaWNhb1xuICAgICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmRlc2NyaWNhby50b1N0cmluZygpXG4gICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIGlmICghZGVzY3JpcHRpb24udHJpbSgpICYmICFjb2RlLnRyaW0oKSkge1xuICAgICAgICAgICAgICBjb250ZW50c1swXS5sYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgXCJ5bXMuZXJwLmRlcml2YWNhb19zZW1fZGVzY3JpY2FvXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gYCR7Y29kZX0gLSAke2Rlc2NyaXB0aW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS5zZXRWYWx1ZShjb250ZW50c1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvcChvYmo6IGFueSwgcGF0aDogYW55KSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PlxuICAgICAgICAgIHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHJlc3VsdFtwcm9wXSxcbiAgICAgICAgb2JqXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEV4cGVkaWNhbyhhZ2VuZGFJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmV4cGVkaWNhb1NlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBhZ2VuZGEuaWQgZXEgJyR7YWdlbmRhSWR9J2AsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgIGlmICghY29udGVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgIHRoaXMudG90YWxFaXhvc0NvbXBvc2ljYW8gPVxuICAgICAgICAgIGNvbnRlbnRzWzBdLmFnZW5kYSAmJiBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsb1xuICAgICAgICAgICAgPyBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsby5laXhvcyB8fCAwXG4gICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgY29uc3QgZXhwZWRpY2FvID0gRXhwZWRpY2FvLmZyb21EdG8oY29udGVudHNbMF0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGV4cGVkaWNhbyk7XG5cbiAgICAgICAgZXhwZWRpY2FvLnBlZGlkb3MuZm9yRWFjaCgocGVkaWRvKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUZvcm0oKTtcbiAgICAgICAgICBmb3JtLnBhdGNoVmFsdWUocGVkaWRvKTtcbiAgICAgICAgICBwZWRpZG8uaXRlbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUZvcm0gPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICAgICAgICAgICAgaXRlbUZvcm0ucGF0Y2hWYWx1ZShpdGVtKTtcbiAgICAgICAgICAgIChmb3JtLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaChpdGVtRm9ybSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRWYWx1ZXNQZWRpZG9CaW9kaXNlbCgpO1xuICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIHB1YmxpYyBvbkNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMucGVzc29hU2VydmljZSxcbiAgICAgIHZhbHVlLFxuICAgICAgXCJjbGllbnRlIGVxIHRydWVcIlxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DbGllbnRlRmF0dXJhbWVudG9TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuTG9va3VwKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWUuaWR9J2A7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICBmaWx0ZXJRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSR7XG4gICAgICBmaWx0ZXJRdWVyeSA/IFwiIGFuZCBcIiA6IFwiXCJcbiAgICB9c2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZWA7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICAgIH1cblxuICBwdWJsaWMgb25DbGllbnRlUmVtZXNzYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwU2VwYXJhdG9yLFxuICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgdmFsdWUsXG4gICAgICBcImNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpZW50ZVJlbWVzc2FTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgIGZpbHRlclF1ZXJ5ID0gYCR7ZmlsdGVyUXVlcnl9JHtcbiAgICAgIGZpbHRlclF1ZXJ5ID8gXCIgYW5kIFwiIDogXCJcIlxuICAgIH1zaXR1YWNhbyBlcSBBVElWTyBhbmQgY2xpZW50ZSBlcSB0cnVlYDtcblxuICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZShcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSAhZXZlbnQgfHwgdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwO1xuICB9XG5cbiAgcHVibGljIG9uRmlsaWFsTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLFxuICAgICAgICAgIHBhZ2luYTogeyBsaW1pdDogMTAsIG9mZnNldDogMCB9LFxuICAgICAgICB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dFxuICAgICAgKTtcblxuICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAobGlzdDogYW55KSA9PlxuICAgICAgICAgICh0aGlzLmZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5maWxpYWlzLm1hcCgoZmlsaWFsOiBhbnkpID0+XG4gICAgICAgICAgICBGaWxpYWwuZnJvbUR0byhmaWxpYWwpXG4gICAgICAgICAgKSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYge1xuICAgICAgY2FtcG86IHNvcnRbMF0uZmllbGQsXG4gICAgICBvcmRlbmFjYW86IHNvcnRbMF0ub3JkZXIgPiAwID8gXCJBc2NcIiA6IFwiRGVzY1wiLFxuICAgIH07XG4gICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNucGpzOiB0aGlzLmFnZW5kYS5wbGFudGEuY25waixcbiAgICAgICAgICBwYWdpbmE6IHtcbiAgICAgICAgICAgIGxpbWl0OiByb3dzLFxuICAgICAgICAgICAgb2Zmc2V0OiBwYWdlLFxuICAgICAgICAgICAgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbeyAuLi5zb3J0Rm9ybWF0dGVkIH1dIDogbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dFxuICAgICAgKTtcblxuICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRGF0YSA9IGxpc3QuZmlsaWFpcy5tYXAoRmlsaWFsLmZyb21EdG8pO1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSxcbiAgICAgIHZhbHVlXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBvblNlYXJjaFJlcXVlc3QoXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgICAgZXZlbnRcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgZmlsdGVyUXVlcnkgPSBgJHtmaWx0ZXJRdWVyeX0ke1xuICAgICAgZmlsdGVyUXVlcnkgPyBcIiBhbmQgXCIgOiBcIlwiXG4gICAgfXNpdHVhY2FvUGVkaWRvIGVxIEFCRVJUT19UT1RBTCBvciBzaXR1YWNhb1BlZGlkbyBlcSBBQkVSVE9fUEFSQ0lBTGA7XG5cbiAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS52YWx1ZSB8fCBbXTtcbiAgICBsZXQgcGVkaWRvc0lkc1F1ZXJ5ID0gXCJcIjtcbiAgICBwZWRpZG9zLm1hcCgoZTogYW55KSA9PlxuICAgICAgZSAmJiBlLnBlZGlkb1ZlbmRhICYmIGUucGVkaWRvVmVuZGEuaWRcbiAgICAgICAgPyAocGVkaWRvc0lkc1F1ZXJ5ICs9IGAgYW5kIChpZCBuZSAnJHtlLnBlZGlkb1ZlbmRhLmlkfScpYClcbiAgICAgICAgOiBmYWxzZVxuICAgICk7XG4gICAgaWYgKHBlZGlkb3MubGVuZ3RoICYmIHBlZGlkb3NJZHNRdWVyeSkgZmlsdGVyUXVlcnkgKz0gcGVkaWRvc0lkc1F1ZXJ5O1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzXG4gICAgKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VydmljZVxuICAgICAgLmxpc3QoeyBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJlY1BhZ2luYShmaXJzdDogbnVtYmVyLCByb3dzOiBudW1iZXIsIHNvcnQ6IGFueSkge1xuICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgY29uc3Qgb3JkZXJCeSA9XG4gICAgICBzb3J0ICYmIHNvcnQubGVuZ3RoXG4gICAgICAgID8gc29ydC5tYXAoKHM6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGNhbXBvOiBzLmZpZWxkLFxuICAgICAgICAgICAgb3JkZW5hY2FvOiBzLm9yZGVyID09PSAxID8gXCJBc2NcIiA6IFwiRGVzY1wiLFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFtdO1xuICAgIHJldHVybiB7XG4gICAgICBvZmZzZXQ6IHBhZ2UsXG4gICAgICBsaW1pdDogcm93cyxcbiAgICAgIGxpc3RhT3JkZW5hY2FvOiBvcmRlckJ5LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhIHx8IFtdO1xuXG4gICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuXG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWUgfHwgW107XG4gICAgbGV0IHBlZGlkb3NTZWxlY2lvbmFkb3M6IGFueSA9IFtdO1xuICAgIHBlZGlkb3MubWFwKChlOiBhbnkpID0+XG4gICAgICBlICYmIGUucGVkaWRvVmVuZGEgJiYgZS5wZWRpZG9WZW5kYS5pZFxuICAgICAgICA/IHBlZGlkb3NTZWxlY2lvbmFkb3MucHVzaChlLnBlZGlkb1ZlbmRhLmlkKVxuICAgICAgICA6IGZhbHNlXG4gICAgKTtcblxuICAgIGNvbnN0IHBlc3F1aXNhOiBQZXNxdWlzYVBlZGlkb3NWZW5kYUR0byA9IHtcbiAgICAgIHBlc3NvYUlkOiBmaWx0ZXJEYXRhW1wiY2xpZW50ZVwiXSA/IGZpbHRlckRhdGFbXCJjbGllbnRlXCJdLmlkIDogbnVsbCxcbiAgICAgIGZpbGlhbElkOiBmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICA6IG51bGwsXG4gICAgICBmaWxpYWxQZWRpZG86IGZpbHRlckRhdGFbXCJmaWxpYWxQZWRpZG9cIl0sXG4gICAgICBwZWRpZG9zU2VsZWNpb25hZG9zLFxuICAgICAgbnVtZXJvOiBmaWx0ZXJEYXRhW1wibnVtZXJvXCJdLFxuICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYShmaXJzdCwgcm93cywgc29ydCksXG4gICAgfTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFTZXJ2aWNlXG4gICAgICAucGVzcXVpc2FyUGVkaWRvc1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUGVkaWRvVmVuZGFJdGVtTG9va3VwUmVxdWVzdCh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGZpbGlhbElkID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZSB8fCB7fSkuaWQ7XG4gICAgY29uc3QgcGVkaWRvSWQgPSAodGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJwZWRpZG9WZW5kYVwiKS52YWx1ZSB8fCB7fSkuaWQ7XG5cbiAgICBjb25zdCBwZXNxdWlzYSA9IHtcbiAgICAgIHBlZGlkb0lkLFxuICAgICAgZmlsaWFsSWQsXG4gICAgICBzZXF1ZW5jaWE6ICFpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IG51bGwsXG4gICAgICB0aXBvQWdlbmRhbWVudG9JZDpcbiAgICAgICAgdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvXG4gICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBwYWdpbmE6IHRoaXMuZ2V0UmVjUGFnaW5hKDAsIDEwLCBzb3J0KSxcbiAgICB9O1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlXG4gICAgICAucGVzcXVpc2FySXRlbnNQZWRpZG9WZW5kYShwZXNxdWlzYSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBlZGlkb1ZlbmRhSXRlbVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuXG4gICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcbiAgICBjb25zdCBwZWRpZG9JZCA9ICh0aGlzLnBlZGlkb0F0dWFsLmdldChcInBlZGlkb1ZlbmRhXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgIGNvbnN0IHBlc3F1aXNhID0ge1xuICAgICAgcGVkaWRvSWQsXG4gICAgICBmaWxpYWxJZCxcbiAgICAgIHNlcXVlbmNpYTogZmlsdGVyRGF0YVtcInNlcXVlbmNpYVwiXSxcbiAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICB0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG9cbiAgICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHBhZ2luYTogdGhpcy5nZXRSZWNQYWdpbmEoZmlyc3QsIHJvd3MsIHNvcnQpLFxuICAgIH07XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgIC5wZXNxdWlzYXJJdGVuc1BlZGlkb1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdXRvbWF0aWNJdGVuc09yZGVyKHBlZGlkb1ZlbmRhOiBhbnkpIHtcbiAgICBpZiAocGVkaWRvVmVuZGEgJiYgcGVkaWRvVmVuZGEuaWQpIHtcbiAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgICAgY29uc3QgcGVzcXVpc2EgPSB7XG4gICAgICAgIHBlZGlkb0lkOiBwZWRpZG9WZW5kYS5pZCxcbiAgICAgICAgZmlsaWFsSWQsXG4gICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICAgIHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYSgwLCAxMCwgc29ydCksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgICAgLnBlc3F1aXNhckl0ZW5zUGVkaWRvVmVuZGEocGVzcXVpc2EpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJQZWRpZG9WZW5kYUl0ZW1BdXRvbWF0aWNhbWVudGUoXG4gICAgICAgICAgICBsaXN0LmNvbnRlbnRzLFxuICAgICAgICAgICAgcGVkaWRvVmVuZGFcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25BZ2VuZGFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgb3JkZXI6IDEsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmFnZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAubGlzdEV4dGVybmFsQWdlbmRhKHsgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5hZ2VuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZ2VuZGFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcblxuICAgIC8qe0NBOk9OX0FHRU5EQV9MT09LVVBfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAvKntDQTpPTl9BR0VOREFfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICB9XG5cbiAgcHVibGljIG9uQWdlbmRhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuXG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiXG4gICAgICApXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5hZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHNcbiAgICApO1xuICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgLmxpc3RFeHRlcm5hbEFnZW5kYSh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWdlbmRhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmFnZW5kYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgIC8qe0NBOk9OX0FHRU5EQV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1Hcm91cCgpIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlkOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgIGNsaWVudGVGYXR1cmFtZW50bzogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIF0sXG4gICAgICBjbGllbnRlUmVtZXNzYTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH1dLFxuICAgICAgZmlsaWFsOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgXSxcbiAgICAgIHRyYW5zcG9ydGFkb3JhOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgcGVkaWRvczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICBhZ2VuZGE6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICBdLFxuICAgICAgbnVtZXJvQWdlbmRhbWVudG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbnVtZXJvUGVkaWRvQ2xpZW50ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIGl0ZW1QZWRpZG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgY3JlYXRlZEJ5OiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgIGNyZWF0ZWREYXRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBsYXN0TW9kaWZpZWRCeTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbGFzdE1vZGlmaWVkRGF0ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLyp7Q0E6R0VUX0ZPUk1fQ09OVFJPTFM6U1RBUlR9Ki9cbiAgICAvKntDQTpHRVRfRk9STV9DT05UUk9MUzpFTkR9Ki9cblxuICAgIHJldHVybiBmb3JtR3JvdXA7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudGVTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjcGZDbnBqXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NwZkNucGpcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInNpdGVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9zaXRlXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2Rlc2NyaWNhb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBjbGllbnRTdWdnZXN0aW9ucyQgPSBuZXcgU3ViamVjdDxhbnlbXT4oKTtcbiAgICBjb25zdCBjbGllbnRTZWFyY2gkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX251bWVyb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbFBlZGlkb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNsaWVudGVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTG9va3VwLFxuICAgICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpLFxuICAgICAgICBzZWFyY2hHcmlkRmllbGRzOiB0aGlzLmdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCksXG4gICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogY2xpZW50U3VnZ2VzdGlvbnMkLFxuICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiBjbGllbnRTZWFyY2gkLFxuICAgICAgICBlbXB0eU1lc3NhZ2U6IFwiTmVuaHVtYSBzdWdlc3TDo28gZW5jb250cmFkYVwiLFxuICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9LFxuICAgICAgICBvbkxvb2t1cFJlcXVlc3Q6ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBcInNpdHVhY2FvIGVxIEFUSVZPIGFuZCBjbGllbnRlIGVxIHRydWVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiBjbGllbnRTdWdnZXN0aW9ucyQubmV4dChsaXN0LmNvbnRlbnRzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdDogKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBvblNlYXJjaFJlcXVlc3QoXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IsXG4gICAgICAgICAgICB0aGlzLnBlc3NvYVNlcnZpY2UsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIFwic2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY2xpZW50U2VhcmNoJC5uZXh0KHtcbiAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICBncmlkRGF0YTogbGlzdC5jb250ZW50cyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YUtleTogXCJpZFwiLFxuICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICBzZWFyY2hFbXB0eVRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsdGVyXCIpLFxuICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5pbnRlZ3JhdGlvbi5maWx0ZXJzXCIpLFxuICAgICAgICBjbGVhckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5jbGVhclwiKSxcbiAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmNhbmNlbFwiKSxcbiAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNlbGVjdFwiKSxcbiAgICAgICAgdG9vbHRpcDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX251bWVyb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbC5ub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbC5jb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2EuY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY2xpZW50ZV9jb2RpZ29fbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJzZXF1ZW5jaWFcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9pdGVtX3NlcXVlbmNpYVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLmdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcygpLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwic2t1LmRlc2NyaWNhb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEFnZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFnZW5kYV9kZXNjcmljYW9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWdlbmRhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZ2VuZGFfZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9BR0VOREFfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKCkge1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gIH1cblxuICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0RFUklWQUNBT19TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ29CYWNrKCkge1xuICAgIGNvbnN0IHByZXZpb3VzUm91dGUgPSBcIi4uL1wiO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1JvdXRlXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cClcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvY3VzU2VydmljZS5mb2N1c0ZpcnN0SW52YWxpZElucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNhdmVPYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBleHBlZGljYW9EdG8gPSBFeHBlZGljYW8udG9EdG8odmFsdWUpO1xuXG4gICAgbGV0IG9ic2VydmFibGU7XG5cbiAgICBpZiAodGhpcy5pc05ldygpICYmICF2YWx1ZS5pZCkge1xuICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMuZXhwZWRpY2FvU2VydmljZS5pbnNlcnQoZXhwZWRpY2FvRHRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaWQgPSB2YWx1ZS5pZDtcbiAgICAgIG9ic2VydmFibGUgPSB0aGlzLmV4cGVkaWNhb1NlcnZpY2UudXBkYXRlKGlkLCBleHBlZGljYW9EdG8pO1xuICAgIH1cblxuICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZpc3VhbGl6YXRpb24oKSB7XG4gICAgaWYgKCF1c2VyQ2FuVmlzdWFsaXplKHRoaXMuZm9ybUdyb3VwLCB0aGlzLmFsbFBlcm1pc3Npb25zKSkge1xuICAgICAgdGhpcy5hZGRNZXNzYWdlKFxuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIFwieW1zLmVycC5jYW5ub3RfdmlzdWFsaXplX2Zvcm1fc3VtbWFyeVwiLFxuICAgICAgICBcInltcy5lcnAuY2Fubm90X3Zpc3VhbGl6ZV9mb3JtX2RldGFpbFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkTWVzc2FnZShzZXZlcml0eTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIGRldGFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgc2V2ZXJpdHksXG4gICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxuICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRldGFpbCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlZGlkb1ZlbmRhRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBwZWRpZG9WZW5kYTogW3VuZGVmaW5lZF0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVtVmVuZGFGb3JtKFxuICAgIHBlZGlkb1ZlbmRhPzogUGVkaWRvVmVuZGEsXG4gICAgZ2V0QXV0b21hdGljSXRlbnNPcmRlcj86IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKGdldEF1dG9tYXRpY0l0ZW5zT3JkZXIpIHRoaXMuZ2V0QXV0b21hdGljSXRlbnNPcmRlcihwZWRpZG9WZW5kYSk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt1bmRlZmluZWRdLFxuICAgICAgcGVkaWRvVmVuZGE6IFtwZWRpZG9WZW5kYV0sXG4gICAgICBpdGVuczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVtVmVuZGFJdGVtRm9ybShwZWRpZG9WZW5kYUl0ZW0/OiBQZWRpZG9WZW5kYUl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3VuZGVmaW5lZF0sXG4gICAgICBwZWRpZG86IFt1bmRlZmluZWRdLFxuICAgICAgaXRlbTogW3BlZGlkb1ZlbmRhSXRlbV0sXG4gICAgICBxdWFudGlkYWRlOiBbdW5kZWZpbmVkXSxcbiAgICAgIG51bWVyb1BlZGlkb0NsaWVudGU6IFt1bmRlZmluZWRdLFxuICAgICAgaXRlbVBlZGlkb0NsaWVudGU6IFt1bmRlZmluZWRdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidXNjYXJGaWxpYWwoKSB7XG4gICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcblxuICAgIGlmIChwbGFudGEuY25wai5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7ICAgICBcbiAgICAgIHJldHVybjtcbiAgICB9IFxuICAgICAgXG4gICAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtwbGFudGEuY25walswXX0nYCxcbiAgICAgICAgZGlzcGxheUZpZWxkczogW1wiKlwiLCBcImVtcHJlc2Eubm9tZVwiXSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnNldFZhbHVlKEZpbGlhbC5mcm9tRHRvKGNvbnRlbnRzWzBdKSk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7ICAgXG4gIH1cblxuICBwcml2YXRlIGJ1c2NhckNsaWVudGVBRmF0dXJhcihwZWRpZG9WZW5kYTogUGVkaWRvVmVuZGFEdG8pIHtcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtwZWRpZG9WZW5kYS5wZXNzb2EuaWR9J2AsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgaWYgKChjb250ZW50cyB8fCBbXSkubGVuZ3RoICE9PSAxKSByZXR1cm47XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKVxuICAgICAgICAgIC5zZXRWYWx1ZShQZXNzb2EuZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
1431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWRpY2FvLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL2V4cGVkaWNhby9mb3JtL2V4cGVkaWNhby1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FHWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhC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QUNYLGNBQWM7UUFDVix5QkFBeUI7UUFDL0IsWUFBWTtRQUNYLGFBQWE7UUFDYixhQUFhO1FBQ0wscUJBQXFCO1FBQ3hCLGtCQUFrQjtRQUNkLHNCQUFzQjtRQUMvQixhQUFhO1FBQ2xCLCtCQUErQjtRQUNwQixtQkFBbUI7UUFDckIsaUJBQWlCO1FBQ2Qsb0JBQW9CO1FBQ3hCLGdCQUFnQjtHQWpKakMsc0JBQXNCLENBdXlEbEM7U0F2eURZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXR1c0FnZW5kYSB9IGZyb20gXCIuLy4uLy4uL2NvcmUvZW51bXMvc3RhdHVzLWFnZW5kYVwiO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbiAgRm9ybUFycmF5LFxuICBBYnN0cmFjdENvbnRyb2wsXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtRmllbGQgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgSG90a2V5LCBIb3RrZXlzU2VydmljZSB9IGZyb20gXCJhbmd1bGFyMi1ob3RrZXlzXCI7XG5pbXBvcnQgKiBhcyBfbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvY29tcG9uZW50cy9jb21tb24vbWVzc2FnZXNlcnZpY2VcIjtcbmltcG9ydCB7IGZvcmtKb2luLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIGZpbmFsaXplLCBtYXAsIHRha2VVbnRpbCwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZpZWxkQ3VzdG9taXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZmllbGQtY3VzdG9taXphdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZm9jdXMuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgaXNWYWxpZEZpbHRlcixcbiAgbWVyZ2VVbmlxdWUsXG4gIHVzZXJDYW5WaXN1YWxpemUsXG59IGZyb20gXCIuLi8uLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQWdlbmRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYVwiO1xuaW1wb3J0IHsgQWdlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGEuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgRXhwZWRpY2FvLFxuICBPcmRlbVZlbmRhSXRlbSxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZXhwZWRpY2FvL2V4cGVkaWNhb1wiO1xuaW1wb3J0IHsgRXhwZWRpY2FvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2V4cGVkaWNhby9leHBlZGljYW8uc2VydmljZVwiO1xuaW1wb3J0IHsgRmlsaWFsIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbFwiO1xuaW1wb3J0IHtcbiAgRmlsaWFsU2VydmljZSxcbiAgUGVzcXVpc2FyRmlsaWFpc0lucHV0LFxufSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlZGlkb1ZlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS9wZWRpZG8tdmVuZGEuc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hL3Blc3NvYVwiO1xuaW1wb3J0IHsgUGVzc29hU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2Euc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNwb3J0YWRvcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmEuc2VydmljZVwiO1xuaW1wb3J0IHsgRXhwZWRpY2FvQ2hlZ2FkYVZlaWN1bG9PdmVycmlkZSB9IGZyb20gXCIuLi9leHBlZGljYW8tY2hlZ2FkYS12ZWljdWxvLm92ZXJyaWRlXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS9wZWRpZG8tdmVuZGFcIjtcbmltcG9ydCB7IFBlZGlkb1ZlbmRhSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS1pdGVtL3BlZGlkby12ZW5kYS1pdGVtXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVkaWRvLXZlbmRhLWl0ZW0vcGVkaWRvLXZlbmRhLWl0ZW0uc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNwb3J0YWRvcmEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc3BvcnRhZG9yYS90cmFuc3BvcnRhZG9yYVwiO1xuaW1wb3J0IHtcbiAgUGVkaWRvVmVuZGFEdG8sXG4gIFBlc3F1aXNhUGVkaWRvc1ZlbmRhRHRvLFxufSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEvcGVkaWRvLXZlbmRhLWR0b1wiO1xuaW1wb3J0IHsgb25Mb29rdXBSZXF1ZXN0LCBvblNlYXJjaFJlcXVlc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9va3VwLXV0aWxzXCI7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBTb3J0TWV0YSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc0RhdGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLWRhdGFcIjtcbmltcG9ydCB7IEVycFByb2Nlc3NTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFcnBGb3JtQ29uZmlnU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1mb3JtLWNvbmZpZy9lcnAtZm9ybS1jb25maWctc2VydmljZVwiO1xuaW1wb3J0IHsgSGFzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaGFzLWNoYW5nZS9oYXMtY2hhbmdlLXNlcnZpY2UnO1xuXG5jb25zdCBtb21lbnQgPSBfbW9tZW50O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZXhwZWRpY2FvLWZvcm1cIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9leHBlZGljYW8tZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4uLy4uL2VycC1zZW5pb3Iuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhwZWRpY2FvRm9ybUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gIHB1YmxpYyBsb2NhbGVDb25maWc6IGFueSA9IHt9O1xuICBwdWJsaWMgY3VycmVuY3lMb2NhbGVPcHRpb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIGFsbFBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIHBlZGlkb0F0dWFsOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBpdGVtRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICBwdWJsaWMgbWFpblBhbmVsQ29sbGFwc2VkID0gZmFsc2U7XG4gIHB1YmxpYyB2aXNpYmxlRGlhbG9nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBmb3JtQ2FycmVnYWRvID0gZmFsc2U7XG5cbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFN1Z2dlc3Rpb25zOiBQZXNzb2FbXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hHcmlkRGF0YTogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FMb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZERhdGE6IFBlc3NvYVtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgZmlsaWFsTG9va3VwU3VnZ2VzdGlvbnM6IEZpbGlhbFtdO1xuICBwdWJsaWMgZmlsaWFsTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBmaWxpYWxBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBmaWxpYWxMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoR3JpZERhdGE6IEZpbGlhbFtdO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU3VnZ2VzdGlvbnM6IFRyYW5zcG9ydGFkb3JhW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJjb2RpZ29cIixcbiAgICBcInBlc3NvYS5ub21lXCIsXG4gICAgXCJwZXNzb2EuY3BmQ25walwiLFxuICBdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJpZFwiLFxuICAgIFwiY29kaWdvXCIsXG4gICAgXCJwZXNzb2Eubm9tZVwiLFxuICAgIFwicGVzc29hLmNwZkNucGpcIixcbiAgXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhOiBUcmFuc3BvcnRhZG9yYVtdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgcGVkaWRvVmVuZGFMb29rdXBTdWdnZXN0aW9uczogUGVkaWRvVmVuZGFbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcIm51bWVyb1wiLCBcImNsaWVudGVcIl07XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcbiAgICBcImlkXCIsXG4gICAgXCJudW1lcm9cIixcbiAgICBcImZpbGlhbC5ub21lXCIsXG4gICAgXCJmaWxpYWwuY29kaWdvXCIsXG4gICAgXCJwZXNzb2EuaWRcIixcbiAgICBcInBlc3NvYS5jb2RpZ29cIixcbiAgICBcInBlc3NvYS5ub21lXCIsXG4gIF07XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFTZWFyY2hHcmlkRGF0YTogUGVkaWRvVmVuZGFbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUxvb2t1cFN1Z2dlc3Rpb25zOiBQZWRpZG9WZW5kYUl0ZW1bXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJzZXF1ZW5jaWFcIiwgXCJza3UuZGVzY3JpY2FvXCJdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1xuICAgIFwiaWRcIixcbiAgICBcInNlcXVlbmNpYVwiLFxuICAgIFwic2t1LmRlc2NyaWNhb1wiLFxuICBdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWREYXRhOiBQZWRpZG9WZW5kYUl0ZW1bXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBhZ2VuZGFMb29rdXBTdWdnZXN0aW9uczogQWdlbmRhW107XG4gIHB1YmxpYyBhZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJkZXNjcmljYW9cIl07XG4gIHB1YmxpYyBhZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXTtcbiAgcHVibGljIGFnZW5kYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hHcmlkRGF0YTogQWdlbmRhW107XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgZGlzYWJsZUJ1dHRvblNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZGlzYWJsZU9yZGVyc0J1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyB0b3RhbEVpeG9zQ29udHJhdGFkb3M6IG51bWJlciA9IDA7XG4gIHB1YmxpYyB0b3RhbEVpeG9zQ29tcG9zaWNhbzogbnVtYmVyID0gMDtcblxuICBwdWJsaWMgb3JkZXJzVmFsaWQgPSB0cnVlO1xuICBwdWJsaWMgc2F2ZUFuZEluaXRCdXR0b246IGFueTtcblxuICBASW5wdXQoKSBwcml2YXRlIGFnZW5kYTogQWdlbmRhO1xuICBASW5wdXQoKSBwcml2YXRlIHJldmFsaWRhY2FvOiBib29sZWFuO1xuXG4gIEBWaWV3Q2hpbGQoXCJjdXN0b21UZW1wbGF0ZVwiKVxuICBwdWJsaWMgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZChcImN1c3RvbUZvcm1GaWVsZHNcIilcbiAgcHVibGljIGN1c3RvbUZvcm1GaWVsZHM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTsgIFxuICBwcml2YXRlIGVycFByb2Nlc3NEYXRhOiBFcnBQcm9jZXNzRGF0YTtcbiAgcHJpdmF0ZSBlbmFibGVSZXZhbGlkYXRpb246IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBleHBlZGljYW9TZXJ2aWNlOiBFeHBlZGljYW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3RrZXlzU2VydmljZTogSG90a2V5c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWVsZEN1c3RvbWl6YXRpb246IEZpZWxkQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb2N1c1NlcnZpY2U6IEZvY3VzU2VydmljZSxcbiAgICBwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFBlc3NvYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxpYWxTZXJ2aWNlOiBGaWxpYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNwb3J0YWRvcmFTZXJ2aWNlOiBUcmFuc3BvcnRhZG9yYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZWRpZG9WZW5kYVNlcnZpY2U6IFBlZGlkb1ZlbmRhU2VydmljZSxcbiAgICBwcml2YXRlIHBlZGlkb1ZlbmRhSXRlbVNlcnZpY2U6IFBlZGlkb1ZlbmRhSXRlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZ2VuZGFTZXJ2aWNlOiBBZ2VuZGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcnJpZGU6IEV4cGVkaWNhb0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUsXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJwUHJvY2Vzc1NlcnZpY2U6IEVycFByb2Nlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJwRm9ybUNvbmZpZ1NlcnZpY2U6IEVycEZvcm1Db25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGFzQ2hhbmdlU2VydmljZTogSGFzQ2hhbmdlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwKCk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYUZvcm0gPSB0aGlzLmdldFBlZGlkb1ZlbmRhRm9ybSgpO1xuICAgIHRoaXMuaXRlbUZvcm1Hcm91cCA9IHRoaXMuZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yb3V0ZS5kYXRhXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5vblJvdXRlRGF0YUNoYW5nZShkYXRhKSk7XG5cbiAgICB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGFnZW5kYSB9KSA9PiB7XG4gICAgICAgIGlmIChhZ2VuZGEgIT0gXCJuZXdcIikge1xuICAgICAgICAgIHRoaXMuZ2V0RXhwZWRpY2FvKGFnZW5kYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMuZmlsaWFsU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLmFnZW5kYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5hZ2VuZGFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRBZ2VuZGFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnNldEhvdGtleXMoKTtcblxuICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudCkge1xuICAgICAgdGhpcy5zZXRUcmFuc3BvcnRhZG9yYSh0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudC5jbnBqKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudmVpY3VsbyA/IHRoaXMuYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICBjb25zdCBzdGF0dXNBZ2VuZGEgPSBbXCJBR1VBUkRBTkRPX0NPTkZJUk1BQ0FPX1NPTElDSVRBTlRFXCIsIFwiQUdFTkRBRE9cIiwgXCJBR1VBUkRBTkRPX0NPTkZJUk1BQ0FPXCIsIFwiUkVKRUlUQURPX1BPUl9WQUxJREFDQU9cIl07XG4gICAgaWYgKHRoaXMuYWdlbmRhICYmICFzdGF0dXNBZ2VuZGEuaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uU2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLmNyZWF0ZWRCeUVycCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVSZW1lc3NhXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhRm9ybS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLml0ZW1Gb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRQZWRpZG9zVmFsdWVDaGFuZ2VzKCk7XG4gICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSBtZXNzYWdlKTsgICAgXG4gICAgdGhpcy5lcnBGb3JtQ29uZmlnU2VydmljZS5jdXJyZW50LnN1YnNjcmliZShtZXNzYWdlID0+IHRoaXMuZW5hYmxlUmV2YWxpZGF0aW9uID0gbWVzc2FnZSk7ICBcblxuICAgIHRoaXMucmV2YWxpZGFjYW9UcmFuc3BvcnRhZG9yYSAoKTtcbiAgICB0aGlzLnZlcmlmaWNhU2VUZW1BbHRlcmFjYW8oKTtcbiAgfVxuICAgICAgIFxuICBwcml2YXRlIHZlcmlmaWNhU2VUZW1BbHRlcmFjYW8oKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2UodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJldmFsaWRhY2FvVHJhbnNwb3J0YWRvcmEgKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zcCA9IHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLnZhbHVlO1xuICAgICAgaWYgKHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UgJiYgdHJhbnNwKSB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEudHJhbnNwb3J0YWRvcmFJZCA9IHRyYW5zcC5pZDsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0pOyAgIFxuICB9XG5cbiAgcHVibGljIGFicmlyUGVkaWRvVmVuZGEocGVkaWRvVmVuZGE/OiBQZWRpZG9WZW5kYSkge1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudFxuICAgICAgLmdldEVsZW1lbnRCeUlkKFwicGVkaWRvVmVuZGFcIilcbiAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKTtcblxuICAgIGlmICghYnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhRm9ybS5wYXRjaFZhbHVlKHsgcGVkaWRvVmVuZGEgfSk7XG4gICAgYnV0dG9uc1swXS5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGV4Y2x1aXJQZWRpZG9WZW5kYShpbmRleDogbnVtYmVyKSB7XG4gICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgYWJyaXJQZWRpZG9WZW5kYUl0ZW0oXG4gICAgcGVkaWRvOiBGb3JtR3JvdXAsXG4gICAgcGVkaWRvVmVuZGFJdGVtPzogT3JkZW1WZW5kYUl0ZW1cbiAgKSB7XG4gICAgdGhpcy5pdGVtRm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICBwZWRpZG9WZW5kYUl0ZW0gfHwgeyBpdGVtOiB1bmRlZmluZWQsIHF1YW50aWRhZGU6IDEgfVxuICAgICk7XG4gICAgdGhpcy5wZWRpZG9BdHVhbCA9IHBlZGlkbztcbiAgICB0aGlzLnZpc2libGVEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGV4Y2x1aXJQZWRpZG9WZW5kYUl0ZW0oaWQ6IHN0cmluZywgcGVkaWRvOiBGb3JtR3JvdXApIHtcbiAgICBjb25zdCBpbmRleCA9IChcbiAgICAgIChwZWRpZG8uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS52YWx1ZSBhcyBPcmRlbVZlbmRhSXRlbVtdXG4gICAgKS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uaXRlbS5pZCA9PT0gaWQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAocGVkaWRvLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRQZWRpZG9zVmFsdWVDaGFuZ2VzKCkge1xuICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBwZWRpZG9zTGVuZ3RoID0gKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KVxuICAgICAgICAgIC5sZW5ndGg7XG4gICAgICAgIHRoaXMub3JkZXJzVmFsaWQgPSBwZWRpZG9zTGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KFwiZmlsaWFsXCIpXG4gICAgICAgICAgW3BlZGlkb3NMZW5ndGggPj0gMSA/IFwiZGlzYWJsZVwiIDogXCJlbmFibGVcIl0oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbGVjaW9uYXJQZWRpZG9WZW5kYShwZWRpZG9WZW5kYTogUGVkaWRvVmVuZGEpIHtcbiAgICBjb25zdCBjaGVja09yZGVycyA9IChvcmRlcjogYW55KSA9PiBvcmRlci5wZWRpZG9WZW5kYS5pZCA9PT0gcGVkaWRvVmVuZGEuaWQ7XG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWU7XG5cbiAgICBpZiAocGVkaWRvcy5maW5kKGNoZWNrT3JkZXJzKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkTWVzc2FnZShcbiAgICAgICAgXCJ3YXJuXCIsXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9zdW1tYXJ5XCJcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAucGVkaWRvX3ZlbmRhX3NlYXJjaF9hbHJlYWR5X3NlbGVjdGVkX2RldGFpbFwiXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KVxuICAgIC5wdXNoKHRoaXMuZ2V0T3JkZW1WZW5kYUZvcm0ocGVkaWRvVmVuZGEsIHRydWUpKTtcblxuICAgIGlmIChcbiAgICAgICEhcGVkaWRvVmVuZGEgJiZcbiAgICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoID09PSAxICYmXG4gICAgICAhdGhpcy5mb3JtR3JvdXAuZ2V0KFwiY2xpZW50ZUZhdHVyYW1lbnRvXCIpLnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmJ1c2NhckNsaWVudGVBRmF0dXJhcihwZWRpZG9WZW5kYSBhcyBhbnkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY2lvbmFyUGVkaWRvVmVuZGFJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Gb3JtR3JvdXAudmFsdWU7XG4gICAgY29uc3QgcGVkaWRvID0gdGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJpdGVuc1wiKS52YWx1ZTtcbiAgICBjb25zdCBjaGVja09yZGVySXRlbnMgPSAob3JkZXI6IGFueSkgPT4gb3JkZXIuaXRlbS5pZCA9PT0gaXRlbS5pdGVtLmlkO1xuICAgIGlmIChwZWRpZG8gJiYgaXRlbSAmJiBpdGVtLml0ZW0gJiYgcGVkaWRvLmZpbmQoY2hlY2tPcmRlckl0ZW5zKSlcbiAgICAgIHJldHVybiB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgIFwieW1zLmVycC5pdGVtX3BlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9zdW1tYXJ5XCJcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAuaXRlbV9wZWRpZG9fdmVuZGFfc2VhcmNoX2FscmVhZHlfc2VsZWN0ZWRfZGV0YWlsXCJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRPcmRlbVZlbmRhSXRlbUZvcm0oKTtcbiAgICBmb3JtLnBhdGNoVmFsdWUoeyAuLi50aGlzLml0ZW1Gb3JtR3JvdXAudmFsdWUgfSk7XG4gICAgaWYgKGZvcm0uZ2V0KFwiaXRlbVwiKS52YWx1ZSA9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAodGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XG4gICAgdGhpcy52aXNpYmxlRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZWNpb25hclBlZGlkb1ZlbmRhSXRlbUF1dG9tYXRpY2FtZW50ZShcbiAgICBpdGVuczogYW55LFxuICAgIHBlZGlkb1ZlbmRhOiBhbnlcbiAgKSB7XG4gICAgaWYgKGl0ZW5zICYmIGl0ZW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKCk7XG4gICAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5nZXRQZWRpZG9zKCk7XG4gICAgICBjb25zdCBwZWRpZG9BdHVhbDogYW55ID0gcGVkaWRvcy5maWx0ZXIoKHBlZGlkbzogYW55KSA9PlxuICAgICAgICBwZWRpZG8gJiYgcGVkaWRvLnZhbHVlLnBlZGlkb1ZlbmRhXG4gICAgICAgICAgPyBwZWRpZG8udmFsdWUucGVkaWRvVmVuZGEuaWQgPT09IHBlZGlkb1ZlbmRhLmlkXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXRlbUZvcm1Hcm91cFxuICAgICAgICAuZ2V0KFwiaXRlbVwiKVxuICAgICAgICAuc2V0VmFsdWUoaXRlbnMubGVuZ3RoID09PSAxID8gaXRlbnNbMF0gOiB7fSk7XG4gICAgICB0aGlzLml0ZW1Gb3JtR3JvdXAuZ2V0KFwicXVhbnRpZGFkZVwiKS5zZXRWYWx1ZSgxKTtcbiAgICAgIGZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuaXRlbUZvcm1Hcm91cC52YWx1ZSB9KTtcbiAgICAgIChwZWRpZG9BdHVhbFswXS5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XG4gICAgICB0aGlzLnZpc2libGVEaWFsb2cgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UGVkaWRvcygpOiBBYnN0cmFjdENvbnRyb2xbXSB7XG4gICAgcmV0dXJuICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHM7XG4gIH1cblxuICBwdWJsaWMgYnVpbGRUb2tlbnMoaXRlbnM6IE9yZGVtVmVuZGFJdGVtW10pIHtcbiAgICByZXR1cm4gaXRlbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbSAmJiBpdGVtLml0ZW0gPyBpdGVtLml0ZW0gOiBpdGVtO1xuICAgICAgY29uc3QgcHJvZHV0byA9IHZhbHVlLnNrdSA/IHZhbHVlLnNrdSA6IHZhbHVlLnByb2R1dG87XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogdmFsdWUuaWQsXG4gICAgICAgIGxhYmVsOiBgUHJvZHV0bzogJHtwcm9kdXRvLmRlc2NyaWNhb30sIFNlcXVlbmNpYTogJHt2YWx1ZS5zZXF1ZW5jaWF9YCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IGlucHV0TGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG4gICAgY29uc3Qgc2VsZWN0ZWRJbnB1dCA9IEFycmF5LmZyb20oaW5wdXRMaXN0KS5maW5kKChmOiBhbnkpID0+ICFmLmRpc2FibGVkKTtcbiAgICBpZiAoc2VsZWN0ZWRJbnB1dCkge1xuICAgICAgc2VsZWN0ZWRJbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIHRoaXMub3ZlcnJpZGUuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluaXRcIik7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcm1DYXJyZWdhZG8pIHtcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLm92ZXJyaWRlLnJlbW92ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEhvdGtleXMoKSB7XG4gICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICBuZXcgSG90a2V5KFxuICAgICAgICBcImFsdCtzaGlmdCtzXCIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc05ldygpIHx8IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyKSB0aGlzLm9uU2F2ZSgpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgIFwiYWx0K3NoaWZ0K2NcIixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzTmV3KCkge1xuICAgIHJldHVybiAhdGhpcy5mb3JtR3JvdXAudmFsdWUuaWQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3VnZ2VzdGlvbnModmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZS5hZ2VuZGEpIHtcbiAgICAgIHZhbHVlLmFnZW5kYS5sYWJlbCA9IHRoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgICAgICBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXSxcbiAgICAgICAgXCJhZ2VuZGFcIixcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yXG4gICAgICApO1xuICAgICAgaWYgKHZhbHVlLmFnZW5kYS5sYWJlbC50cmltKCkgPT09IHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yLnRyaW0oKSkge1xuICAgICAgICBkZWxldGUgdmFsdWUuYWdlbmRhLmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgZGlzcGxheUZpZWxkczogc3RyaW5nW10sXG4gICAgb3duZXJFbnRpdHk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIHNlcGFyYXRvcjogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBkaXNwbGF5RmllbGRzXG4gICAgICAubWFwKChmaWVsZCkgPT4gdGhpcy5nZXRQcm9wKHZhbHVlLCBgJHtvd25lckVudGl0eX0uJHtmaWVsZH1gKSlcbiAgICAgIC5yZWR1Y2UoKGFjYzogYW55LCB2YWw6IGFueSkgPT4gYCR7YWNjfSR7c2VwYXJhdG9yfSR7dmFsfWApO1xuICB9XG5cbiAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHsgY3VycmVuY3lTeW1ib2wsIHRob3VzYW5kc1NlcGFyYXRvciwgZGVjaW1hbFNlcGFyYXRvciB9ID1cbiAgICAgIGRhdGEubG9jYWxlQ29uZmlnLm51bWJlcjtcblxuICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XG4gICAgdGhpcy5jdXJyZW5jeUxvY2FsZU9wdGlvbnMgPSB7XG4gICAgICBhbGlnbjogXCJsZWZ0XCIsXG4gICAgICBwcmVmaXg6IGN1cnJlbmN5U3ltYm9sLFxuICAgICAgdGhvdXNhbmRzOiB0aG91c2FuZHNTZXBhcmF0b3IsXG4gICAgICBkZWNpbWFsOiBkZWNpbWFsU2VwYXJhdG9yLFxuICAgIH07XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnMuZXhwZWRpY2FvO1xuICAgIHRoaXMuYWxsUGVybWlzc2lvbnMgPSBkYXRhLmFsbFBlcm1pc3Npb25zO1xuICAgIC8vdGhpcy52YWxpZGF0ZVZpc3VhbGl6YXRpb24oKTtcbiAgICBpZiAoZGF0YS5lbnRpdHkpIHtcbiAgICAgIGNvbnN0IGNhbkVkaXQgPSB0aGlzLnBlcm1pc3Npb25zLmVkaXRhcjtcbiAgICAgIGlmICghY2FuRWRpdCkgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgY29uc3QgdmFsdWU6IGFueSA9IEV4cGVkaWNhby5mcm9tRHRvKGRhdGEuZW50aXR5KTtcbiAgICAgIHRoaXMudXBkYXRlU3VnZ2VzdGlvbnModmFsdWUpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3IEV4cGVkaWNhbygpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKSB7XG4gICAgdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbmRGaWxlKGZpbGVzVG9EZWxldGU6IGFueSwgZmlsZXNUb0NvbW1pdDogYW55W10pIHtcbiAgICBjb25zdCBvYnNlcnZhYmxlczogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvRGVsZXRlKSkge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5kZWxldGVGaWxlcyhmaWxlc1RvRGVsZXRlKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShmaWxlc1RvQ29tbWl0KSkge1xuICAgICAgb2JzZXJ2YWJsZXMucHVzaCh0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5jb21taXRGaWxlcyhmaWxlc1RvQ29tbWl0KSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KG9ic2VydmFibGVzKSkge1xuICAgICAgcmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKSB7XG4gICAgY29uc3QgbnVtZXJvUGVkaWRvQ2xpZW50ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChcIm51bWVyb1BlZGlkb0NsaWVudGVcIikudmFsdWU7XG4gICAgY29uc3QgaXRlbVBlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpdGVtUGVkaWRvQ2xpZW50ZVwiKS52YWx1ZTtcbiAgICBjb25zdCB7IHZhbHVlOiBwZWRpZG9zIH0gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpO1xuICAgIChwZWRpZG9zIHx8IFtdKS5tYXAoKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGUgJiYgZS5pdGVucyAmJiBlLml0ZW5zLmxlbmd0aCkge1xuICAgICAgICBlLml0ZW5zWzBdLm51bWVyb1BlZGlkb0NsaWVudGUgPSBudW1lcm9QZWRpZG9DbGllbnRlO1xuICAgICAgICBlLml0ZW5zWzBdLml0ZW1QZWRpZG9DbGllbnRlID0gaXRlbVBlZGlkb0NsaWVudGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS5wYXRjaFZhbHVlKHBlZGlkb3MpO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlc1BlZGlkb0Jpb2Rpc2VsKCkge1xuICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpLnZhbHVlO1xuICAgIGNvbnN0IG51bWVyb1BlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJudW1lcm9QZWRpZG9DbGllbnRlXCIpO1xuICAgIGNvbnN0IGl0ZW1QZWRpZG9DbGllbnRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaXRlbVBlZGlkb0NsaWVudGVcIik7XG4gICAgKHBlZGlkb3MgfHwgW10pLm1hcCgoZTogYW55KSA9PiB7XG4gICAgICBpZiAobnVtZXJvUGVkaWRvQ2xpZW50ZS52YWx1ZSAmJiBpdGVtUGVkaWRvQ2xpZW50ZS52YWx1ZSkgcmV0dXJuO1xuICAgICAgY29uc3QgcGVkaWRvc0ludGVybm8gPVxuICAgICAgICBlICYmIGUuaXRlbnMgJiYgZS5pdGVucy5sZW5ndGggPyBlLml0ZW5zWzBdLnBlZGlkbyA6IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vICYmXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zICYmXG4gICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGlmIChwZWRpZG9zSW50ZXJuby5pdGVucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBudW1lcm9QZWRpZG9DbGllbnRlLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICBwZWRpZG9zSW50ZXJuby5pdGVuc1swXS5udW1lcm9QZWRpZG9DbGllbnRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpdGVtUGVkaWRvQ2xpZW50ZS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgcGVkaWRvc0ludGVybm8uaXRlbnNbMF0uaXRlbVBlZGlkb0NsaWVudGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TYXZlKHN0YXJ0PzogYm9vbGVhbikge1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImFnZW5kYVwiKS5zZXRWYWx1ZSh0aGlzLmFnZW5kYSk7XG4gICAgdGhpcy5vcmRlcnNWYWxpZCA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkubGVuZ3RoID4gMDtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkIHx8ICF0aGlzLm9yZGVyc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtR3JvdXApO1xuICAgIH1cblxuICAgIHRoaXMuc2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKTtcblxuICAgIGNvbnN0IHsgZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCB9ID0gdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uZ2V0RmlsZXModGhpcy5mb3JtR3JvdXApO1xuICAgIFxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5pc05ldygpIHx8ICF0aGlzLmVuYWJsZVJldmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCwgc3RhcnQpO1xuICAgIH1cblxuICAgIHRoaXMuZXJwUHJvY2Vzc0RhdGEgPSB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmJ1aWxkZXJFcnBQcm9jZXNzRGF0YSh0aGlzLmVycFByb2Nlc3NEYXRhLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5lcnBQcm9jZXNzU2VydmljZS5jaGFuZ2VEYXRhRXJwKHRoaXMuZXJwUHJvY2Vzc0RhdGEpO1xuICAgIHJldHVybiB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgLmNoZWNhclJldmFsaWRhY2FvKHRoaXMuZXJwUHJvY2Vzc0RhdGEpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlcXVlclJldmFsaWRhY2FvKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNhdmVBbmRJbml0KGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsIHN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX3RpdGxlXCIpLFxuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fbWVzc2FnZVwiKSxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgIHRoaXMuYWdlbmRhLnN0YXR1cyA9IFN0YXR1c0FnZW5kYS5SRUpFSVRBRE9fUE9SX1ZBTElEQUNBTztcbiAgICAgICAgdGhpcy5hZ2VuZGEubW90b3Jpc3RhID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLm1vdG9yaXN0YUlkfTtcbiAgICAgICAgdGhpcy5hZ2VuZGEudmVpY3VsbyA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS52ZWljdWxvSWR9O1xuICAgICAgICB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgICAgICAuYXR1YWxpemFyQWdlbmRhKHRoaXMuYWdlbmRhKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBjb25jYXRNYXAoKF8pID0+IHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGVnYWRhLXZlaWN1bG9cIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmVqZWN0OiAoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZTogYW55LCBmaWxlc1RvQ29tbWl0OiBhbnlbXSwgc3RhcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmF0dWFsaXphRXhwZWRpY2FvKGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsICgpID0+IHtcbiAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgIGlmIChzdGFydCAmJiB0aGlzLnNhdmVBbmRJbml0QnV0dG9uKSB7XG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbi5jbGljaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzTWVzc2FnZSgpIHtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgIHNldmVyaXR5OiBcInN1Y2Nlc3NcIixcbiAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfdGl0bGVcIiksXG4gICAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR1YWxpemFFeHBlZGljYW8oXG4gICAgZmlsZXNUb0RlbGV0ZTogYW55LFxuICAgIGZpbGVzVG9Db21taXQ6IGFueVtdLFxuICAgIG9uU3Vic2NyaWJlPzogRnVuY3Rpb25cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2F2ZU9ic2VydmFibGUoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaWRcIikuc2V0VmFsdWUodmFsdWUuaWQgfHwgbnVsbCk7XG5cbiAgICAgICAgdGhpcy5vblNlbmRGaWxlKGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICBcInNhdmVkX21lc3NhZ2VfdGl0bGVcIixcbiAgICAgICAgICAgICAgXCJzYXZlZF9tZXNzYWdlX2NvbnRlbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9uU3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUcmFuc3BvcnRhZG9yYSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBjbnBqID0gdmFsdWUucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIi9cIiwgXCJcIikucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtjbnBqfSdgO1xuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2VcbiAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgcGFnZTogMCwgc2l6ZTogMTAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBjb250ZW50c1swXS5jb2RpZ29cbiAgICAgICAgICAgICAgPyBjb250ZW50c1swXS5jb2RpZ28udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRlbnRzWzBdLmRlc2NyaWNhb1xuICAgICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmRlc2NyaWNhby50b1N0cmluZygpXG4gICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIGlmICghZGVzY3JpcHRpb24udHJpbSgpICYmICFjb2RlLnRyaW0oKSkge1xuICAgICAgICAgICAgICBjb250ZW50c1swXS5sYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgXCJ5bXMuZXJwLmRlcml2YWNhb19zZW1fZGVzY3JpY2FvXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gYCR7Y29kZX0gLSAke2Rlc2NyaXB0aW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJ0cmFuc3BvcnRhZG9yYVwiKS5zZXRWYWx1ZShjb250ZW50c1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvcChvYmo6IGFueSwgcGF0aDogYW55KSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PlxuICAgICAgICAgIHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHJlc3VsdFtwcm9wXSxcbiAgICAgICAgb2JqXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEV4cGVkaWNhbyhhZ2VuZGFJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmV4cGVkaWNhb1NlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBhZ2VuZGEuaWQgZXEgJyR7YWdlbmRhSWR9J2AsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgIGlmICghY29udGVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb250cmF0YWRvcyA9IGNvbnRlbnRzWzBdLmVpeG9zIHx8IDA7XG4gICAgICAgIHRoaXMudG90YWxFaXhvc0NvbXBvc2ljYW8gPVxuICAgICAgICAgIGNvbnRlbnRzWzBdLmFnZW5kYSAmJiBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsb1xuICAgICAgICAgICAgPyBjb250ZW50c1swXS5hZ2VuZGEudmVpY3Vsby5laXhvcyB8fCAwXG4gICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgY29uc3QgZXhwZWRpY2FvID0gRXhwZWRpY2FvLmZyb21EdG8oY29udGVudHNbMF0pO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGV4cGVkaWNhbyk7XG5cbiAgICAgICAgZXhwZWRpY2FvLnBlZGlkb3MuZm9yRWFjaCgocGVkaWRvKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUZvcm0oKTtcbiAgICAgICAgICBmb3JtLnBhdGNoVmFsdWUocGVkaWRvKTtcbiAgICAgICAgICBwZWRpZG8uaXRlbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUZvcm0gPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICAgICAgICAgICAgaXRlbUZvcm0ucGF0Y2hWYWx1ZShpdGVtKTtcbiAgICAgICAgICAgIChmb3JtLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaChpdGVtRm9ybSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRWYWx1ZXNQZWRpZG9CaW9kaXNlbCgpO1xuICAgICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIHB1YmxpYyBvbkNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMucGVzc29hU2VydmljZSxcbiAgICAgIHZhbHVlLFxuICAgICAgXCJjbGllbnRlIGVxIHRydWVcIlxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DbGllbnRlRmF0dXJhbWVudG9TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuTG9va3VwKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWUuaWR9J2A7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICBmaWx0ZXJRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSR7XG4gICAgICBmaWx0ZXJRdWVyeSA/IFwiIGFuZCBcIiA6IFwiXCJcbiAgICB9c2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZWA7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICAgIH1cblxuICBwdWJsaWMgb25DbGllbnRlUmVtZXNzYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwU2VwYXJhdG9yLFxuICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgdmFsdWUsXG4gICAgICBcImNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpZW50ZVJlbWVzc2FTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgIGZpbHRlclF1ZXJ5ID0gYCR7ZmlsdGVyUXVlcnl9JHtcbiAgICAgIGZpbHRlclF1ZXJ5ID8gXCIgYW5kIFwiIDogXCJcIlxuICAgIH1zaXR1YWNhbyBlcSBBVElWTyBhbmQgY2xpZW50ZSBlcSB0cnVlYDtcblxuICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZShcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSAhZXZlbnQgfHwgdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwO1xuICB9XG5cbiAgcHVibGljIG9uRmlsaWFsTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLFxuICAgICAgICAgIHBhZ2luYTogeyBsaW1pdDogMTAsIG9mZnNldDogMCB9LFxuICAgICAgICB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dFxuICAgICAgKTtcblxuICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAobGlzdDogYW55KSA9PlxuICAgICAgICAgICh0aGlzLmZpbGlhbExvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5maWxpYWlzLm1hcCgoZmlsaWFsOiBhbnkpID0+XG4gICAgICAgICAgICBGaWxpYWwuZnJvbUR0byhmaWxpYWwpXG4gICAgICAgICAgKSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQ6IFNvcnRNZXRhW10gPSBtdWx0aVNvcnRNZXRhO1xuICAgIGNvbnN0IHNvcnRGb3JtYXR0ZWQgPSAhIShzb3J0IHx8IFtdKS5sZW5ndGggJiYge1xuICAgICAgY2FtcG86IHNvcnRbMF0uZmllbGQsXG4gICAgICBvcmRlbmFjYW86IHNvcnRbMF0ub3JkZXIgPiAwID8gXCJBc2NcIiA6IFwiRGVzY1wiLFxuICAgIH07XG4gICAgY29uc3QgZmlsdGVySW5wdXQgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiBgJHt2YWx1ZX1gLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNucGpzOiB0aGlzLmFnZW5kYS5wbGFudGEuY25waixcbiAgICAgICAgICBwYWdpbmE6IHtcbiAgICAgICAgICAgIGxpbWl0OiByb3dzLFxuICAgICAgICAgICAgb2Zmc2V0OiBwYWdlLFxuICAgICAgICAgICAgbGlzdGFPcmRlbmFjYW86IHNvcnRGb3JtYXR0ZWQgPyBbeyAuLi5zb3J0Rm9ybWF0dGVkIH1dIDogbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIFBlc3F1aXNhckZpbGlhaXNJbnB1dFxuICAgICAgKTtcblxuICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3RGaWxpYWlzKGZpbHRlcklucHV0KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hHcmlkRGF0YSA9IGxpc3QuZmlsaWFpcy5tYXAoRmlsaWFsLmZyb21EdG8pO1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QucXRkVG90YWxSZWdpc3Ryb3M7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSxcbiAgICAgIHZhbHVlXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBvblNlYXJjaFJlcXVlc3QoXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgICAgZXZlbnRcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgZmlsdGVyUXVlcnkgPSBgJHtmaWx0ZXJRdWVyeX0ke1xuICAgICAgZmlsdGVyUXVlcnkgPyBcIiBhbmQgXCIgOiBcIlwiXG4gICAgfXNpdHVhY2FvUGVkaWRvIGVxIEFCRVJUT19UT1RBTCBvciBzaXR1YWNhb1BlZGlkbyBlcSBBQkVSVE9fUEFSQ0lBTGA7XG5cbiAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS52YWx1ZSB8fCBbXTtcbiAgICBsZXQgcGVkaWRvc0lkc1F1ZXJ5ID0gXCJcIjtcbiAgICBwZWRpZG9zLm1hcCgoZTogYW55KSA9PlxuICAgICAgZSAmJiBlLnBlZGlkb1ZlbmRhICYmIGUucGVkaWRvVmVuZGEuaWRcbiAgICAgICAgPyAocGVkaWRvc0lkc1F1ZXJ5ICs9IGAgYW5kIChpZCBuZSAnJHtlLnBlZGlkb1ZlbmRhLmlkfScpYClcbiAgICAgICAgOiBmYWxzZVxuICAgICk7XG4gICAgaWYgKHBlZGlkb3MubGVuZ3RoICYmIHBlZGlkb3NJZHNRdWVyeSkgZmlsdGVyUXVlcnkgKz0gcGVkaWRvc0lkc1F1ZXJ5O1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzXG4gICAgKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VydmljZVxuICAgICAgLmxpc3QoeyBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJlY1BhZ2luYShmaXJzdDogbnVtYmVyLCByb3dzOiBudW1iZXIsIHNvcnQ6IGFueSkge1xuICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgY29uc3Qgb3JkZXJCeSA9XG4gICAgICBzb3J0ICYmIHNvcnQubGVuZ3RoXG4gICAgICAgID8gc29ydC5tYXAoKHM6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGNhbXBvOiBzLmZpZWxkLFxuICAgICAgICAgICAgb3JkZW5hY2FvOiBzLm9yZGVyID09PSAxID8gXCJBc2NcIiA6IFwiRGVzY1wiLFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFtdO1xuICAgIHJldHVybiB7XG4gICAgICBvZmZzZXQ6IHBhZ2UsXG4gICAgICBsaW1pdDogcm93cyxcbiAgICAgIGxpc3RhT3JkZW5hY2FvOiBvcmRlckJ5LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhIHx8IFtdO1xuXG4gICAgY29uc3QgZmlsaWFsID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlO1xuXG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWUgfHwgW107XG4gICAgbGV0IHBlZGlkb3NTZWxlY2lvbmFkb3M6IGFueSA9IFtdO1xuICAgIHBlZGlkb3MubWFwKChlOiBhbnkpID0+XG4gICAgICBlICYmIGUucGVkaWRvVmVuZGEgJiYgZS5wZWRpZG9WZW5kYS5pZFxuICAgICAgICA/IHBlZGlkb3NTZWxlY2lvbmFkb3MucHVzaChlLnBlZGlkb1ZlbmRhLmlkKVxuICAgICAgICA6IGZhbHNlXG4gICAgKTtcblxuICAgIGNvbnN0IHBlc3F1aXNhOiBQZXNxdWlzYVBlZGlkb3NWZW5kYUR0byA9IHtcbiAgICAgIHBlc3NvYUlkOiBmaWx0ZXJEYXRhW1wiY2xpZW50ZVwiXSA/IGZpbHRlckRhdGFbXCJjbGllbnRlXCJdLmlkIDogbnVsbCxcbiAgICAgIGZpbGlhbElkOiBmaWxpYWwgPyBmaWxpYWwuaWQgOiBudWxsLFxuICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICA6IG51bGwsXG4gICAgICBmaWxpYWxQZWRpZG86IGZpbHRlckRhdGFbXCJmaWxpYWxQZWRpZG9cIl0sXG4gICAgICBwZWRpZG9zU2VsZWNpb25hZG9zLFxuICAgICAgbnVtZXJvOiBmaWx0ZXJEYXRhW1wibnVtZXJvXCJdLFxuICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYShmaXJzdCwgcm93cywgc29ydCksXG4gICAgfTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFTZXJ2aWNlXG4gICAgICAucGVzcXVpc2FyUGVkaWRvc1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUGVkaWRvVmVuZGFJdGVtTG9va3VwUmVxdWVzdCh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGZpbGlhbElkID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZSB8fCB7fSkuaWQ7XG4gICAgY29uc3QgcGVkaWRvSWQgPSAodGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJwZWRpZG9WZW5kYVwiKS52YWx1ZSB8fCB7fSkuaWQ7XG5cbiAgICBjb25zdCBwZXNxdWlzYSA9IHtcbiAgICAgIHBlZGlkb0lkLFxuICAgICAgZmlsaWFsSWQsXG4gICAgICBzZXF1ZW5jaWE6ICFpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IG51bGwsXG4gICAgICB0aXBvQWdlbmRhbWVudG9JZDpcbiAgICAgICAgdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvXG4gICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBwYWdpbmE6IHRoaXMuZ2V0UmVjUGFnaW5hKDAsIDEwLCBzb3J0KSxcbiAgICB9O1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlXG4gICAgICAucGVzcXVpc2FySXRlbnNQZWRpZG9WZW5kYShwZXNxdWlzYSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBlZGlkb1ZlbmRhSXRlbVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuXG4gICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcbiAgICBjb25zdCBwZWRpZG9JZCA9ICh0aGlzLnBlZGlkb0F0dWFsLmdldChcInBlZGlkb1ZlbmRhXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgIGNvbnN0IHBlc3F1aXNhID0ge1xuICAgICAgcGVkaWRvSWQsXG4gICAgICBmaWxpYWxJZCxcbiAgICAgIHNlcXVlbmNpYTogZmlsdGVyRGF0YVtcInNlcXVlbmNpYVwiXSxcbiAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICB0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG9cbiAgICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHBhZ2luYTogdGhpcy5nZXRSZWNQYWdpbmEoZmlyc3QsIHJvd3MsIHNvcnQpLFxuICAgIH07XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgIC5wZXNxdWlzYXJJdGVuc1BlZGlkb1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdXRvbWF0aWNJdGVuc09yZGVyKHBlZGlkb1ZlbmRhOiBhbnkpIHtcbiAgICBpZiAocGVkaWRvVmVuZGEgJiYgcGVkaWRvVmVuZGEuaWQpIHtcbiAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgICAgY29uc3QgcGVzcXVpc2EgPSB7XG4gICAgICAgIHBlZGlkb0lkOiBwZWRpZG9WZW5kYS5pZCxcbiAgICAgICAgZmlsaWFsSWQsXG4gICAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICAgIHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYSgwLCAxMCwgc29ydCksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgICAgLnBlc3F1aXNhckl0ZW5zUGVkaWRvVmVuZGEocGVzcXVpc2EpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJQZWRpZG9WZW5kYUl0ZW1BdXRvbWF0aWNhbWVudGUoXG4gICAgICAgICAgICBsaXN0LmNvbnRlbnRzLFxuICAgICAgICAgICAgcGVkaWRvVmVuZGFcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25BZ2VuZGFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgb3JkZXI6IDEsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmFnZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAubGlzdEV4dGVybmFsQWdlbmRhKHsgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5hZ2VuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZ2VuZGFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcblxuICAgIC8qe0NBOk9OX0FHRU5EQV9MT09LVVBfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAvKntDQTpPTl9BR0VOREFfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICB9XG5cbiAgcHVibGljIG9uQWdlbmRhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuXG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiXG4gICAgICApXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5hZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHNcbiAgICApO1xuICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgLmxpc3RFeHRlcm5hbEFnZW5kYSh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWdlbmRhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLmFnZW5kYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgIC8qe0NBOk9OX0FHRU5EQV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1Hcm91cCgpIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlkOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgIGNsaWVudGVGYXR1cmFtZW50bzogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIF0sXG4gICAgICBjbGllbnRlUmVtZXNzYTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH1dLFxuICAgICAgZmlsaWFsOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgXSxcbiAgICAgIHRyYW5zcG9ydGFkb3JhOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgcGVkaWRvczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgICBhZ2VuZGE6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICBdLFxuICAgICAgbnVtZXJvQWdlbmRhbWVudG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbnVtZXJvUGVkaWRvQ2xpZW50ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIGl0ZW1QZWRpZG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgY3JlYXRlZEJ5OiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgIGNyZWF0ZWREYXRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBsYXN0TW9kaWZpZWRCeTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbGFzdE1vZGlmaWVkRGF0ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLyp7Q0E6R0VUX0ZPUk1fQ09OVFJPTFM6U1RBUlR9Ki9cbiAgICAvKntDQTpHRVRfRk9STV9DT05UUk9MUzpFTkR9Ki9cblxuICAgIHJldHVybiBmb3JtR3JvdXA7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudGVTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjcGZDbnBqXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NwZkNucGpcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInNpdGVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9zaXRlXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2Rlc2NyaWNhb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NvZGlnb1wiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNwZkNucGpcIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnRyYW5zcG9ydGFkb3JhX2NucGpcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBjbGllbnRTdWdnZXN0aW9ucyQgPSBuZXcgU3ViamVjdDxhbnlbXT4oKTtcbiAgICBjb25zdCBjbGllbnRTZWFyY2gkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX251bWVyb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbFBlZGlkb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNsaWVudGVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTG9va3VwLFxuICAgICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpLFxuICAgICAgICBzZWFyY2hHcmlkRmllbGRzOiB0aGlzLmdldENsaWVudGVTZWFyY2hHcmlkRmllbGRzKCksXG4gICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogY2xpZW50U3VnZ2VzdGlvbnMkLFxuICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiBjbGllbnRTZWFyY2gkLFxuICAgICAgICBlbXB0eU1lc3NhZ2U6IFwiTmVuaHVtYSBzdWdlc3TDo28gZW5jb250cmFkYVwiLFxuICAgICAgICBzaXplOiB7IHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9LFxuICAgICAgICBvbkxvb2t1cFJlcXVlc3Q6ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBcInNpdHVhY2FvIGVxIEFUSVZPIGFuZCBjbGllbnRlIGVxIHRydWVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiBjbGllbnRTdWdnZXN0aW9ucyQubmV4dChsaXN0LmNvbnRlbnRzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2VhcmNoUmVxdWVzdDogKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBvblNlYXJjaFJlcXVlc3QoXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IsXG4gICAgICAgICAgICB0aGlzLnBlc3NvYVNlcnZpY2UsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIFwic2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY2xpZW50U2VhcmNoJC5uZXh0KHtcbiAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICBncmlkRGF0YTogbGlzdC5jb250ZW50cyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YUtleTogXCJpZFwiLFxuICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICBzZWFyY2hFbXB0eVRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsdGVyXCIpLFxuICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5pbnRlZ3JhdGlvbi5maWx0ZXJzXCIpLFxuICAgICAgICBjbGVhckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5jbGVhclwiKSxcbiAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmNhbmNlbFwiKSxcbiAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnNlbGVjdFwiKSxcbiAgICAgICAgdG9vbHRpcDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm51bWVyb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX251bWVyb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbC5ub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImZpbGlhbC5jb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2EuY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY2xpZW50ZV9jb2RpZ29fbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJzZXF1ZW5jaWFcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9pdGVtX3NlcXVlbmNpYVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLmdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcygpLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwic2t1LmRlc2NyaWNhb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucHJvZHV0b1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEFnZW5kYVNlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFnZW5kYV9kZXNjcmljYW9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWdlbmRhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZ2VuZGFfZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9BR0VOREFfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVyaXZhY2FvU2VhcmNoRmllbGRzKCkge1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gIH1cblxuICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0RFUklWQUNBT19TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ29CYWNrKCkge1xuICAgIGNvbnN0IHByZXZpb3VzUm91dGUgPSBcIi4uL1wiO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1JvdXRlXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cClcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvY3VzU2VydmljZS5mb2N1c0ZpcnN0SW52YWxpZElucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNhdmVPYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBleHBlZGljYW9EdG8gPSBFeHBlZGljYW8udG9EdG8odmFsdWUpO1xuXG4gICAgbGV0IG9ic2VydmFibGU7XG5cbiAgICBpZiAodGhpcy5pc05ldygpICYmICF2YWx1ZS5pZCkge1xuICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMuZXhwZWRpY2FvU2VydmljZS5pbnNlcnQoZXhwZWRpY2FvRHRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaWQgPSB2YWx1ZS5pZDtcbiAgICAgIG9ic2VydmFibGUgPSB0aGlzLmV4cGVkaWNhb1NlcnZpY2UudXBkYXRlKGlkLCBleHBlZGljYW9EdG8pO1xuICAgIH1cblxuICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZpc3VhbGl6YXRpb24oKSB7XG4gICAgaWYgKCF1c2VyQ2FuVmlzdWFsaXplKHRoaXMuZm9ybUdyb3VwLCB0aGlzLmFsbFBlcm1pc3Npb25zKSkge1xuICAgICAgdGhpcy5hZGRNZXNzYWdlKFxuICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIFwieW1zLmVycC5jYW5ub3RfdmlzdWFsaXplX2Zvcm1fc3VtbWFyeVwiLFxuICAgICAgICBcInltcy5lcnAuY2Fubm90X3Zpc3VhbGl6ZV9mb3JtX2RldGFpbFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkTWVzc2FnZShzZXZlcml0eTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcsIGRldGFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgc2V2ZXJpdHksXG4gICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxuICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRldGFpbCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlZGlkb1ZlbmRhRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBwZWRpZG9WZW5kYTogW3VuZGVmaW5lZF0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVtVmVuZGFGb3JtKFxuICAgIHBlZGlkb1ZlbmRhPzogUGVkaWRvVmVuZGEsXG4gICAgZ2V0QXV0b21hdGljSXRlbnNPcmRlcj86IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKGdldEF1dG9tYXRpY0l0ZW5zT3JkZXIpIHRoaXMuZ2V0QXV0b21hdGljSXRlbnNPcmRlcihwZWRpZG9WZW5kYSk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt1bmRlZmluZWRdLFxuICAgICAgcGVkaWRvVmVuZGE6IFtwZWRpZG9WZW5kYV0sXG4gICAgICBpdGVuczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVtVmVuZGFJdGVtRm9ybShwZWRpZG9WZW5kYUl0ZW0/OiBQZWRpZG9WZW5kYUl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3VuZGVmaW5lZF0sXG4gICAgICBwZWRpZG86IFt1bmRlZmluZWRdLFxuICAgICAgaXRlbTogW3BlZGlkb1ZlbmRhSXRlbV0sXG4gICAgICBxdWFudGlkYWRlOiBbdW5kZWZpbmVkXSxcbiAgICAgIG51bWVyb1BlZGlkb0NsaWVudGU6IFt1bmRlZmluZWRdLFxuICAgICAgaXRlbVBlZGlkb0NsaWVudGU6IFt1bmRlZmluZWRdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidXNjYXJGaWxpYWwoKSB7XG4gICAgY29uc3QgcGxhbnRhID0gdGhpcy5hZ2VuZGEucGxhbnRhIHx8IHsgY25wajogW10gfTtcblxuICAgIGlmIChwbGFudGEuY25wai5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7ICAgICBcbiAgICAgIHJldHVybjtcbiAgICB9IFxuICAgICAgXG4gICAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBwZXNzb2EuY3BmQ25waiBlcSAnJHtwbGFudGEuY25walswXX0nYCxcbiAgICAgICAgZGlzcGxheUZpZWxkczogW1wiKlwiLCBcImVtcHJlc2Eubm9tZVwiXSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnNldFZhbHVlKEZpbGlhbC5mcm9tRHRvKGNvbnRlbnRzWzBdKSk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7ICAgXG4gIH1cblxuICBwcml2YXRlIGJ1c2NhckNsaWVudGVBRmF0dXJhcihwZWRpZG9WZW5kYTogUGVkaWRvVmVuZGFEdG8pIHtcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2VcbiAgICAgIC5saXN0KHtcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtwZWRpZG9WZW5kYS5wZXNzb2EuaWR9J2AsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgaWYgKChjb250ZW50cyB8fCBbXSkubGVuZ3RoICE9PSAxKSByZXR1cm47XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAgICAgLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKVxuICAgICAgICAgIC5zZXRWYWx1ZShQZXNzb2EuZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|