@sumaris-net/ngx-components 18.22.21 → 18.22.23

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/doc/changelog.md CHANGED
@@ -2030,3 +2030,7 @@ enh: Environment: add useHash property to configure Angular router to use hash U
2030
2030
 
2031
2031
  # 18.22.21
2032
2032
  - enh(functions) Add utility function `toLoadData()` to extract data from a `LoadResult<T> | T[]` (e.g. from a `suggestFn` result type)
2033
+
2034
+ # 18.22.22
2035
+ - enh(table) Catch error on the dataSource.watchAll(), to be able to refresh the table after a graphql error
2036
+ - enh(table) Add options to emitRefresh() and doRefresh()
@@ -284,7 +284,7 @@ export class UsersPage extends AppTable {
284
284
  this.restoreFilterOrLoad();
285
285
  }
286
286
  applyFilterAndClosePanel(event) {
287
- this.emitRefresh(event);
287
+ this.emitRefresh();
288
288
  this.filterExpansionPanel.close();
289
289
  }
290
290
  resetFilter(event) {
@@ -490,4 +490,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
490
490
  type: ViewChild,
491
491
  args: [MatExpansionPanel, { static: true }]
492
492
  }] } });
493
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2FkbWluL3VzZXJzL3VzZXJzLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9hZG1pbi91c2Vycy91c2Vycy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFZLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQXVCLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NB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RUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBMkVVLG9CQUFvQjtzQkFBbkUsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBlcnNvbiwgUFJJT1JJVElaRURfQVVUSE9SSVRJRVMgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL3BlcnNvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZWZlcmVudGlhbFJlZiwgU3RhdHVzQnlJZCwgU3RhdHVzTGlzdCB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwnO1xuaW1wb3J0IHsgUGVyc29uU2VydmljZSB9IGZyb20gJy4vcGVyc29uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVyc29uVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4vcGVyc29uLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXBwVGFibGUgfSBmcm9tICcuLi8uLi9jb3JlL3RhYmxlL3RhYmxlLmNsYXNzJztcbmltcG9ydCB7IFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiwgRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCwgZmlsdGVyLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2NvcmUvdGFibGUvZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcyc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFBlcnNvbkZpbHRlciB9IGZyb20gJy4vcGVyc29uLmZpbHRlcic7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgQXV0aFRva2VuVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbmV0d29yay50eXBlcyc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25QYW5lbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBzbGlkZVVwRG93bkFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9zb2NpYWwvbWVzc2FnZS9tZXNzYWdlLm1vZGVsJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc29jaWFsL21lc3NhZ2UvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJFU0VSVkVEX0VORF9DT0xVTU5TLCBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLCBUQUJMRV9TRVRUSU5HU19FTlVNIH0gZnJvbSAnLi4vLi4vY29yZS90YWJsZS90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvbWVudS9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3N2VXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9jc3YudXRpbHMnO1xuaW1wb3J0IHsgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXNlcnMtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJ3VzZXJzLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91c2Vycy5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogVmFsaWRhdG9yU2VydmljZSwgdXNlRXhpc3Rpbmc6IFBlcnNvblZhbGlkYXRvclNlcnZpY2UgfV0sXG4gIGFuaW1hdGlvbnM6IFtzbGlkZVVwRG93bkFuaW1hdGlvbl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBVc2Vyc1BhZ2UgZXh0ZW5kcyBBcHBUYWJsZTxQZXJzb24sIFBlcnNvbkZpbHRlcj4gaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBjYW5EZWJ1ZzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZmlsdGVyRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgcmVhZG9ubHkgcHJvZmlsZXMgPSBbLi4uUFJJT1JJVElaRURfQVVUSE9SSVRJRVNdLnJldmVyc2UoKTtcbiAgcmVhZG9ubHkgc3RhdHVzTGlzdCA9IFN0YXR1c0xpc3Q7XG4gIHJlYWRvbmx5IHN0YXR1c0J5SWQgPSBTdGF0dXNCeUlkO1xuICByZWFkb25seSB1c2VyUHJvZmlsZUxpc3Q6IFJlZmVyZW50aWFsUmVmW10gPSBQUklPUklUSVpFRF9BVVRIT1JJVElFUy5tYXAoKGxhYmVsKSA9PlxuICAgIFJlZmVyZW50aWFsUmVmLmZyb21PYmplY3Qoe1xuICAgICAgbGFiZWwsXG4gICAgICBuYW1lOiBgVVNFUi5QUk9GSUxFX0VOVU0uJHtsYWJlbH1gLFxuICAgIH0pXG4gICk7XG5cbiAgcHJvdGVjdGVkIGFkZGl0aW9uYWxGaWVsZHM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJvdGVjdGVkIGZpbHRlckNyaXRlcmlhQ291bnQgPSAwO1xuICBwcm90ZWN0ZWQgZGVmYXVsdENvbXBhY3QgPSBmYWxzZTtcblxuICBnZXQgZmlsdGVyYWJsZUFkZGl0aW9uYWxGaWVsZHMoKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5hZGRpdGlvbmFsRmllbGRzPy5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5leHRyYT8udXNlcnM/LmRpc2FibGVkICE9PSB0cnVlKSB8fCBbXTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzaG93VXNlcm5hbWVDb2x1bW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lJywgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dVc2VybmFtZUNvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTaG93Q29sdW1uKCd1c2VybmFtZScpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNob3dVc2VybmFtZUV4dHJhbmV0Q29sdW1uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRTaG93Q29sdW1uKCd1c2VybmFtZUV4dHJhbmV0JywgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dVc2VybmFtZUV4dHJhbmV0Q29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNob3dDb2x1bW4oJ3VzZXJuYW1lRXh0cmFuZXQnKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzaG93RW1haWxDb2x1bW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFNob3dDb2x1bW4oJ2VtYWlsJywgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dFbWFpbENvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTaG93Q29sdW1uKCdlbWFpbCcpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNob3dQdWJrZXlDb2x1bW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3B1YmtleScsIHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93UHVia2V5Q29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNob3dDb2x1bW4oJ3B1YmtleScpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBzaG93Q3JlYXRpb25EYXRlQ29sdW1uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRTaG93Q29sdW1uKCdjcmVhdGlvbkRhdGUnLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd0NyZWF0aW9uRGF0ZUNvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTaG93Q29sdW1uKCdjcmVhdGlvbkRhdGUnKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzaG93VXBkYXRlRGF0ZUNvbHVtbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0U2hvd0NvbHVtbigndXBkYXRlRGF0ZScsIHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93VXBkYXRlRGF0ZUNvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTaG93Q29sdW1uKCd1cGRhdGVEYXRlJyk7XG4gIH1cblxuICBnZXQgc2hvd0Zvcm1CdXR0b25zKCkge1xuICAgIHJldHVybiAhdGhpcy5tb2JpbGUgJiYgdGhpcy5jYW5FZGl0O1xuICB9XG5cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhblNlbmRNZXNzYWdlOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuRWRpdDogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNvbXBhY3Q6IGJvb2xlYW4gPSBudWxsO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdXNlUGFnZVNldHRpbmdzID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHN0aWNreSA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc3RpY2t5RW5kID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5Eb3dubG9hZCA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpbk1vZGFsID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93Rm9vdGVyID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dUb29sYmFyID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dQYWdpbmF0b3IgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRvclNlcnZpY2U6IFZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBQZXJzb25TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgZW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBpbmplY3RvcixcbiAgICAgIFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuY29uY2F0KFsnYXZhdGFyJywgJ2xhc3ROYW1lJywgJ2ZpcnN0TmFtZScsICdlbWFpbCcsICdwcm9maWxlJywgJ3N0YXR1cycsICd1c2VybmFtZScsICd1c2VybmFtZUV4dHJhbmV0JywgJ3B1YmtleSddKVxuICAgICAgICAuY29uY2F0KGFjY291bnRTZXJ2aWNlLmFkZGl0aW9uYWxGaWVsZHMubWFwKChmaWVsZCkgPT4gZmllbGQua2V5KSlcbiAgICAgICAgLmNvbmNhdChbJ2NyZWF0aW9uRGF0ZScsICd1cGRhdGVEYXRlJ10pXG4gICAgICAgIC5jb25jYXQoUkVTRVJWRURfRU5EX0NPTFVNTlMpLFxuICAgICAgbmV3IEVudGl0aWVzVGFibGVEYXRhU291cmNlKFBlcnNvbiwgZGF0YVNlcnZpY2UsIHZhbGlkYXRvclNlcnZpY2UsIHtcbiAgICAgICAgcHJlcGVuZE5ld0VsZW1lbnRzOiBmYWxzZSxcbiAgICAgICAgc3VwcHJlc3NFcnJvcnM6IGVudmlyb25tZW50LnByb2R1Y3Rpb24sXG4gICAgICAgIHNhdmVPbmx5RGlydHlSb3dzOiB0cnVlLFxuICAgICAgfSksXG4gICAgICBudWxsXG4gICAgKTtcblxuICAgIHRoaXMuY2FuRGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICB0aGlzLmNhbkVkaXQgPSBhY2NvdW50U2VydmljZS5pc0FkbWluKCk7XG4gICAgdGhpcy5jYW5TZW5kTWVzc2FnZSA9IHRoaXMuY2FuRWRpdDtcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSB0aGlzLmNhbkVkaXQ7XG4gICAgdGhpcy5jb25maXJtQmVmb3JlRGVsZXRlID0gdHJ1ZTtcbiAgICB0aGlzLmF1dG9Mb2FkID0gZmFsc2U7IC8vIFdhaXQgY29uZmlnIGxvYWRpbmdcbiAgICB0aGlzLmkxOG5Db2x1bW5QcmVmaXggPSAnVVNFUi4nO1xuICAgIHRoaXMuZGVmYXVsdFNvcnRCeSA9ICdsYXN0TmFtZSc7XG4gICAgdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiA9ICdhc2MnO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhZGRpdGlvbmFsIGZpZWxkcyBmaXJzdFxuICAgIHRoaXMuYWRkaXRpb25hbEZpZWxkcyA9ICh0aGlzLmFjY291bnRTZXJ2aWNlLmFkZGl0aW9uYWxGaWVsZHMgfHwgW10pXG4gICAgICAuZmlsdGVyKChmaWVsZCkgPT4gaXNOb3ROaWwoZmllbGQuYXV0b2NvbXBsZXRlKSlcbiAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0byBnZXQgdGhlIGZpbmFsIGF1dG9jb21wbGV0ZSBjb25maWcgKGUuZy4gd2l0aCBhIHN1Z2dlc3RGbiBmdW5jdGlvbilcbiAgICAgICAgZmllbGQuYXV0b2NvbXBsZXRlID0gdGhpcy5yZWdpc3RlckF1dG9jb21wbGV0ZUZpZWxkKGZpZWxkLmtleSwge1xuICAgICAgICAgIC4uLmZpZWxkLmF1dG9jb21wbGV0ZSwgLy8gQ29weSwgdG8gYmUgc3VyZSB0aGUgb3JpZ2luYWwgY29uZmlnIGlzIHVuY2hhbmdlZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgZmlsdGVyIGZvcm0gd2l0aCBkeW5hbWljIGNvbnRyb2xzIGZvciBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGNvbnN0IGZpbHRlckZvcm1Db250cm9sczogYW55ID0ge1xuICAgICAgc2VhcmNoVGV4dDogW251bGxdLFxuICAgICAgc3RhdHVzSWQ6IFtudWxsXSxcbiAgICAgIHVzZXJQcm9maWxlczogW251bGxdLFxuICAgIH07XG5cbiAgICAvLyBBZGQgY29udHJvbHMgZm9yIGVhY2ggYWRkaXRpb25hbCBmaWVsZCB0aGF0IGlzIG5vdCBkaXNhYmxlZCBmb3IgdXNlcnNcbiAgICB0aGlzLmFkZGl0aW9uYWxGaWVsZHNcbiAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5leHRyYT8udXNlcnM/LmRpc2FibGVkICE9PSB0cnVlKVxuICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGZpbHRlckZvcm1Db250cm9sc1tmaWVsZC5rZXldID0gW251bGxdO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0gPSBmb3JtQnVpbGRlci5ncm91cChmaWx0ZXJGb3JtQ29udHJvbHMpO1xuXG4gICAgLy8gVHJhbnNsYXRlIHVzZXIgcHJvZmlsZXNcbiAgICB0aGlzLnVzZXJQcm9maWxlTGlzdC5mb3JFYWNoKChwcm9maWxlKSA9PiB7XG4gICAgICBwcm9maWxlLm5hbWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHByb2ZpbGUubmFtZSk7XG4gICAgfSk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHkgLS1cbiAgICB0aGlzLmNhbkRlYnVnID0gdHJ1ZTtcbiAgICB0aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBAVmlld0NoaWxkKE1hdEV4cGFuc2lvblBhbmVsLCB7IHN0YXRpYzogdHJ1ZSB9KSBmaWx0ZXJFeHBhbnNpb25QYW5lbDogTWF0RXhwYW5zaW9uUGFuZWw7XG5cbiAgZ2V0IGZpcnN0VXNlckNvbHVtbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtbk5hbWUgPSB0aGlzLmRpc3BsYXllZENvbHVtbnNbUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5sZW5ndGhdO1xuICAgIC8vIFNraXAgYXZhdGFyIGNvbHVtbiwgaWYgcHJlc2VudFxuICAgIHJldHVybiAoY29sdW1uTmFtZSA9PT0gJ2F2YXRhcicgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW1JFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoICsgMV0pIHx8IGNvbHVtbk5hbWU7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgdGhpcy5pbmxpbmVFZGl0aW9uID0gdGhpcy5pbmxpbmVFZGl0aW9uICYmIHRoaXMuY2FuRWRpdDtcblxuICAgIC8vIExpc3RlbiBwYWdlIGFjdGlvbiAoZS5nLiBmcm9tIHN1YiBtZW51IGl0ZW0pXG4gICAgaWYgKCF0aGlzLmluTW9kYWwpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMucGlwZShkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCgnYWN0aW9uJykpLnN1YnNjcmliZSgocXVlcnlQYXJhbXMpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSBxdWVyeVBhcmFtc1snYWN0aW9uJ10gfHwgJ25vbmUnO1xuICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlICdzZW5kJzpcbiAgICAgICAgICAgICAgdGhpcy5vcGVuQ29tcG9zZU1lc3NhZ2VNb2RhbCgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW3VzZXJzXSBVbmtub3duIGFjdGlvbj0nICsgYWN0aW9uKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIE1hcmsgYXMgY29uc3VtZWRcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nXSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IC4uLnF1ZXJ5UGFyYW1zLCBhY3Rpb246IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgICAgIHN0YXRlOiB7IGFuaW1hdGVkOiBmYWxzZSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBhdXRoVG9rZW5UeXBlID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVVUSF9UT0tFTl9UWVBFKSBhcyBBdXRoVG9rZW5UeXBlO1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbdXNlcnNdIEF1dGhUb2tlblR5cGU9JyArIGF1dGhUb2tlblR5cGUpO1xuICAgICAgICBzd2l0Y2ggKGF1dGhUb2tlblR5cGUpIHtcbiAgICAgICAgICBjYXNlICdiYXNpYyc6XG4gICAgICAgICAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3B1YmtleScsIGZhbHNlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lJywgdHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXRTaG93Q29sdW1uKCd1c2VybmFtZUV4dHJhbmV0JywgdHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYmFzaWMtYW5kLXRva2VuJzpcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigncHVia2V5JywgdHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXRTaG93Q29sdW1uKCd1c2VybmFtZScsIHRydWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigndXNlcm5hbWVFeHRyYW5ldCcsIHRydWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rva2VuJzpcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigncHVia2V5JywgdHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXRTaG93Q29sdW1uKCd1c2VybmFtZScsIGZhbHNlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lRXh0cmFuZXQnLCBmYWxzZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmVtaXRSZWZyZXNoKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblJlZnJlc2guc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFVwZGF0ZSBmaWx0ZXIgd2hlbiBjaGFuZ2VzXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZmlsdGVyRm9ybS52YWxpZCksXG4gICAgICAgICAgdGFwKChqc29uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBQZXJzb25GaWx0ZXIuZnJvbU9iamVjdChqc29uKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWFDb3VudCA9IGZpbHRlci5jb3VudE5vdEVtcHR5Q3JpdGVyaWEoKTtcbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGZpbHRlciwgd2l0aG91dCByZWxvYWRpbmcgdGhlIGNvbnRlbnRcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyKGZpbHRlciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIFNhdmUgZmlsdGVyIGluIHNldHRpbmdzIChhZnRlciBhIGRlYm91bmNlIHRpbWUpXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IGlzTm90TmlsT3JCbGFuayh0aGlzLnNldHRpbmdzSWQpICYmIHRoaXMudXNlUGFnZVNldHRpbmdzKSxcbiAgICAgICAgICB0YXAoKGpzb24pID0+IHRoaXMuc2V0dGluZ3Muc2F2ZVBhZ2VTZXR0aW5nKHRoaXMuc2V0dGluZ3NJZCwganNvbiwgVEFCTEVfU0VUVElOR1NfRU5VTS5GSUxURVJfS0VZKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuY2FuU2VuZE1lc3NhZ2UpIHtcbiAgICAgIGF3YWl0IHRoaXMubWVudVNlcnZpY2UuYWRkU3ViTWVudUl0ZW1zKFxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyZW50UGF0aDogJy9hZG1pbi91c2VycycsXG4gICAgICAgICAgICBwYXRoOiAnL2FkbWluL3VzZXJzJyxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHsgYWN0aW9uOiAnZXhwYW5kJyB9LFxuICAgICAgICAgICAgbWF0SWNvbjogJ2V4cGFuZF9tb3JlJyxcbiAgICAgICAgICAgIHRpdGxlOiAnVVNFUi5MSVNULkJUTl9BQ1RJT05TJyxcbiAgICAgICAgICAgIGFjdGlvbjogJ2V4cGFuZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJlbnRQYXRoOiAnL2FkbWluL3VzZXJzP2FjdGlvbj1leHBhbmQnLFxuICAgICAgICAgICAgcGF0aDogJy9hZG1pbi91c2Vycz9hY3Rpb249c2VuZCcsXG4gICAgICAgICAgICBpY29uOiAnbWFpbCcsXG4gICAgICAgICAgICB0aXRsZTogJ1VTRVIuTElTVC5CVE5fU0VORF9NRVNTQUdFJyxcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5vcGVuQ29tcG9zZU1lc3NhZ2VNb2RhbCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHsgc2tpcElmRXhpc3RzOiBmYWxzZSB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgY29tcGFjdCByb3dzXG4gICAgdGhpcy5yZXN0b3JlQ29tcGFjdE1vZGUoKTtcblxuICAgIC8vIFJlc3RvcmUgZmlsdGVyIGZyb20gc2V0dGluZ3MsIG9yIGxvYWQgYWxsXG4gICAgdGhpcy5yZXN0b3JlRmlsdGVyT3JMb2FkKCk7XG4gIH1cblxuICBhcHBseUZpbHRlckFuZENsb3NlUGFuZWwoZXZlbnQ/OiBFdmVudCkge1xuICAgIHRoaXMuZW1pdFJlZnJlc2goZXZlbnQpO1xuICAgIHRoaXMuZmlsdGVyRXhwYW5zaW9uUGFuZWwuY2xvc2UoKTtcbiAgfVxuXG4gIHJlc2V0RmlsdGVyKGV2ZW50PzogRXZlbnQpIHtcbiAgICB0aGlzLnRvdGFsUm93Q291bnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWx0ZXJDcml0ZXJpYUNvdW50ID0gMDtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQoKTtcbiAgICB0aGlzLnNldEZpbHRlcihudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZXN0b3JlRmlsdGVyT3JMb2FkKCkge1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW3VzZXJzXSBSZXN0b3JpbmcgZmlsdGVyIGZyb20gc2V0dGluZ3MuLi4nKTtcblxuICAgIGNvbnN0IGpzb24gPSB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIFRBQkxFX1NFVFRJTkdTX0VOVU0uRklMVEVSX0tFWSkgfHwge307XG4gICAgY29uc3QgZmlsdGVyID0gUGVyc29uRmlsdGVyLmZyb21PYmplY3QoanNvbik7XG5cbiAgICBqc29uLnVzZXJQcm9maWxlcyA9IEFycmF5LmlzQXJyYXkoanNvbi51c2VyUHJvZmlsZXMpXG4gICAgICA/IGpzb24udXNlclByb2ZpbGVzLm1hcCgodXApID0+IHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IHVwLmxhYmVsID8/IHVwO1xuICAgICAgICAgIHJldHVybiBSZWZlcmVudGlhbFJlZi5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgVVNFUi5QUk9GSUxFX0VOVU0uJHtsYWJlbH1gKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIDogbnVsbDtcblxuICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKGpzb24pO1xuICAgIHRoaXMuc2V0RmlsdGVyKGZpbHRlciwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gIH1cblxuICBjbGVhckNvbnRyb2xWYWx1ZShldmVudDogRXZlbnQsIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBBdm9pZCB0byBlbnRlciBpbnB1dCB0aGUgZmllbGRcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBvcGVuQ29tcG9zZU1lc3NhZ2VNb2RhbChldmVudD86IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBDb21wdXRlIHJlY2lwaWVudHNcbiAgICBjb25zdCByZWNpcGllbnRzID0gKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKVxuICAgICAgLm1hcCgocm93KSA9PiByb3cuY3VycmVudERhdGEpXG4gICAgICAubWFwKFBlcnNvbi5mcm9tT2JqZWN0KVxuICAgICAgLm1hcCgocCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBwLmFzT2JqZWN0KHsgbWluaWZ5OiB0cnVlIH0pO1xuICAgICAgICB0YXJnZXQuZGVwYXJ0bWVudCA9IHAuZGVwYXJ0bWVudD8uYXNPYmplY3QoKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgcmVjaXBpZW50RmlsdGVyID0gUGVyc29uRmlsdGVyLmZyb21PYmplY3QodGhpcy5maWx0ZXIpO1xuICAgIGNvbnN0IGNhblJlY2lwaWVudEZpbHRlciA9ICFyZWNpcGllbnRGaWx0ZXIuaXNFbXB0eSgpICYmICh0aGlzLmFjY291bnRTZXJ2aWNlLmlzQWRtaW4oKSB8fCB0aGlzLmFjY291bnRTZXJ2aWNlLmlzU3VwZXJ2aXNvcigpKTtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZS5vcGVuQ29tcG9zZU1vZGFsKHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIsIHNvcnRCeSwgc29ydERpcmVjdGlvbikgPT4gdGhpcy5kYXRhU2VydmljZS5zdWdnZXN0KHZhbHVlLCBmaWx0ZXIsIHNvcnRCeSwgc29ydERpcmVjdGlvbiksXG4gICAgICBjYW5SZWNpcGllbnRGaWx0ZXIsXG4gICAgICByZWNpcGllbnRGaWx0ZXJDb3VudDogdGhpcy50b3RhbFJvd0NvdW50LFxuICAgICAgZGF0YTogTWVzc2FnZS5mcm9tT2JqZWN0KHtcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgcmVjaXBpZW50RmlsdGVyLFxuICAgICAgfSksXG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc3RvcmVDb21wYWN0TW9kZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMudXNlUGFnZVNldHRpbmdzIHx8IGlzTmlsT3JCbGFuayh0aGlzLnNldHRpbmdzSWQpIHx8IGlzTm90TmlsKHRoaXMuY29tcGFjdCkpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbXBhY3QgPSB0b0Jvb2xlYW4oXG4gICAgICB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIFRBQkxFX1NFVFRJTkdTX0VOVU0uQ09NUEFDVF9ST1dTX0tFWSksXG4gICAgICB0b0Jvb2xlYW4odGhpcy5jb21wYWN0LCB0aGlzLmRlZmF1bHRDb21wYWN0KVxuICAgICk7XG4gICAgaWYgKHRoaXMuY29tcGFjdCAhPT0gY29tcGFjdCkge1xuICAgICAgdGhpcy5jb21wYWN0ID0gY29tcGFjdDtcblxuICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUNvbXBhY3RNb2RlKCkge1xuICAgIHRoaXMuY29tcGFjdCA9ICF0aGlzLmNvbXBhY3Q7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL25vLWV4cGxpY2l0LWNoYW5nZS1kZXRlY3Rpb24tYXBpc1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgaWYgKHRoaXMudXNlUGFnZVNldHRpbmdzICYmIGlzTm90TmlsT3JCbGFuayh0aGlzLnNldHRpbmdzSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModGhpcy5jb21wYWN0LCBUQUJMRV9TRVRUSU5HU19FTlVNLkNPTVBBQ1RfUk9XU19LRVkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4cG9ydFRvQ3N2KGV2ZW50OiBFdmVudCkge1xuICAgIC8vIFByZXBhcmUgQ1NWIG9wdGlvbnNcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBDc3ZVdGlscy5nZXRMb2NhbGl6ZWRTZXBhcmF0b3IodGhpcy50cmFuc2xhdGUpO1xuICAgIGNvbnN0IGVuY29kaW5nID0gQ3N2VXRpbHMuZ2V0TG9jYWxpemVkRW5jb2RpbmcodGhpcy50cmFuc2xhdGUpO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoW1xuICAgICAgJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTicsXG4gICAgICAnVVNFUi5MSVNULlRJVExFJyxcbiAgICAgICdVU0VSLkVNQUlMJyxcbiAgICAgICdVU0VSLkZJUlNUX05BTUUnLFxuICAgICAgJ1VTRVIuTEFTVF9OQU1FJyxcbiAgICAgICdVU0VSLlVTRVJOQU1FJyxcbiAgICAgICdVU0VSLlVTRVJOQU1FX0VYVFJBTkVUJyxcbiAgICAgICdVU0VSLkRFUEFSVE1FTlRfTEFCRUwnLFxuICAgICAgJ1VTRVIuREVQQVJUTUVOVF9OQU1FJyxcbiAgICAgICdVU0VSLlBST0ZJTEUnLFxuICAgICAgJ1VTRVIuU1RBVFVTJyxcbiAgICAgICdVU0VSLlBVQktFWScsXG4gICAgICAuLi4odGhpcy5hZGRpdGlvbmFsRmllbGRzIHx8IFtdKS5tYXAoKGZpZWxkKSA9PiBmaWVsZC5sYWJlbCksXG4gICAgICAnVVNFUi5DUkVBVElPTl9EQVRFJyxcbiAgICAgICdVU0VSLlVQREFURV9EQVRFJyxcbiAgICAgIC4uLnRoaXMuc3RhdHVzTGlzdC5tYXAoKHN0YXR1cykgPT4gc3RhdHVzLmxhYmVsKSxcbiAgICBdKTtcbiAgICBjb25zdCBkYXRlVGltZVBhdHRlcm4gPSB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTiddO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gdHJhbnNsYXRpb25zWydVU0VSLkxJU1QuVElUTEUnXSArICcuY3N2JztcbiAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgdHJhbnNsYXRpb25zWydVU0VSLkVNQUlMJ10sXG4gICAgICB0cmFuc2xhdGlvbnNbJ1VTRVIuRklSU1RfTkFNRSddLFxuICAgICAgdHJhbnNsYXRpb25zWydVU0VSLkxBU1RfTkFNRSddLFxuICAgICAgLi4uKHRoaXMuc2hvd1VzZXJuYW1lQ29sdW1uID8gW3RyYW5zbGF0aW9uc1snVVNFUi5VU0VSTkFNRSddXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLnNob3dVc2VybmFtZUV4dHJhbmV0Q29sdW1uID8gW3RyYW5zbGF0aW9uc1snVVNFUi5VU0VSTkFNRV9FWFRSQU5FVCddXSA6IFtdKSxcbiAgICAgIHRyYW5zbGF0aW9uc1snVVNFUi5QUk9GSUxFJ10sXG4gICAgICB0cmFuc2xhdGlvbnNbJ1VTRVIuU1RBVFVTJ10sXG4gICAgICB0cmFuc2xhdGlvbnNbJ1VTRVIuUFVCS0VZJ10sXG4gICAgICAuLi4odGhpcy5hZGRpdGlvbmFsRmllbGRzIHx8IFtdKS5tYXAoKGZpZWxkKSA9PiB0cmFuc2xhdGlvbnNbZmllbGQubGFiZWxdKSxcbiAgICAgIHRyYW5zbGF0aW9uc1snVVNFUi5DUkVBVElPTl9EQVRFJ10sXG4gICAgICB0cmFuc2xhdGlvbnNbJ1VTRVIuVVBEQVRFX0RBVEUnXSxcbiAgICBdO1xuXG4gICAgY29uc3QgYWRkaXRpb25hbEZpZWxkc0ZucyA9ICh0aGlzLmFkZGl0aW9uYWxGaWVsZHMgfHwgW10pLm1hcChGb3JtRmllbGREZWZpbml0aW9uVXRpbHMuZ2V0RGlzcGxheVZhbHVlRm4pO1xuXG4gICAgY29uc3Qgcm93cyA9ICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkgPyB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpIDogdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpXG4gICAgICAubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LmN1cnJlbnREYXRhKVxuICAgICAgLm1hcCgocGVyc29uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuc3RhdHVzQnlJZFtwZXJzb24uc3RhdHVzSWRdO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHBlcnNvbi5sYXN0TmFtZSxcbiAgICAgICAgICBwZXJzb24uZmlyc3ROYW1lLFxuICAgICAgICAgIHBlcnNvbi5lbWFpbCxcbiAgICAgICAgICAuLi4odGhpcy5zaG93VXNlcm5hbWVDb2x1bW4gPyBbcGVyc29uLnVzZXJuYW1lXSA6IFtdKSxcbiAgICAgICAgICAuLi4odGhpcy5zaG93VXNlcm5hbWVFeHRyYW5ldENvbHVtbiA/IFtwZXJzb24udXNlcm5hbWVFeHRyYW5ldF0gOiBbXSksXG4gICAgICAgICAgcGVyc29uLm1haW5Qcm9maWxlLFxuICAgICAgICAgIHN0YXR1cyA/IHRyYW5zbGF0aW9uc1tzdGF0dXM/LmxhYmVsXSA6IG51bGwsXG4gICAgICAgICAgcGVyc29uLnB1YmtleSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsRmllbGRzRm5zLm1hcCgoZGlzcGxheUZuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRQcm9wZXJ0eUJ5UGF0aChwZXJzb24sIHRoaXMuYWRkaXRpb25hbEZpZWxkc1tpbmRleF0ua2V5KTtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1t1c2Vyc10gQWRkaXRpb25hbCBmaWVsZCBkaXNwbGF5Rm4nLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZGlzcGxheUZuKHZhbHVlKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBmcm9tRGF0ZUlTT1N0cmluZyhwZXJzb24uY3JlYXRpb25EYXRlKS5mb3JtYXQoZGF0ZVRpbWVQYXR0ZXJuKSxcbiAgICAgICAgICBmcm9tRGF0ZUlTT1N0cmluZyhwZXJzb24udXBkYXRlRGF0ZSkuZm9ybWF0KGRhdGVUaW1lUGF0dGVybiksXG4gICAgICAgIF07XG4gICAgICB9KTtcblxuICAgIENzdlV0aWxzLmV4cG9ydFRvRmlsZShyb3dzLCB7IGZpbGVuYW1lLCBoZWFkZXJzLCBzZXBhcmF0b3IsIGVuY29kaW5nIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRldlRvZ2dsZURlYnVnKCkge1xuICAgIHRoaXMuZGVidWcgPSAhdGhpcy5kZWJ1ZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvbm8tZXhwbGljaXQtY2hhbmdlLWRldGVjdGlvbi1hcGlzXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICBpZiAodGhpcy51c2VQYWdlU2V0dGluZ3MgJiYgaXNOb3ROaWxPckJsYW5rKHRoaXMuc2V0dGluZ3NJZCkpIGF3YWl0IHRoaXMuc2F2ZVBhZ2VTZXR0aW5ncyh0aGlzLmRlYnVnLCAnZGVidWcnKTtcbiAgfVxuXG4gIGdldERpc3BsYXlWYWx1ZUZuID0gRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzLmdldERpc3BsYXlWYWx1ZUZuO1xufVxuIiwiPGFwcC10b29sYmFyXG4gIFt0aXRsZV09XCIodGl0bGUgfHwgJ1VTRVIuTElTVC5USVRMRScpIHwgdHJhbnNsYXRlXCJcbiAgY29sb3I9XCJwcmltYXJ5XCJcbiAgW2NhbkdvQmFja109XCJmYWxzZVwiXG4gIFtjbGFzcy5jZGstdmlzaWJsZS1oaWRkZW5dPVwiIXNob3dUb29sYmFyXCJcbiAgW2hhc1ZhbGlkYXRlXT1cIihsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSAhPT0gdHJ1ZSAmJiAoZGlydHlTdWJqZWN0IHwgYXN5bmMpID09PSB0cnVlXCJcbiAgKG9uVmFsaWRhdGUpPVwic2F2ZSgpXCJcbj5cbiAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICA8IS0tIENvbXBvc2UgbWVzc2FnZSAtLT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VcIlxuICAgICAgW3RpdGxlXT1cIidVU0VSLkxJU1QuQlROX1NFTkRfTUVTU0FHRScgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cIm9wZW5Db21wb3NlTWVzc2FnZU1vZGFsKCRldmVudClcIlxuICAgID5cbiAgICAgIDxpb24taWNvbiBuYW1lPVwibWFpbFwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgQGlmIChzZWxlY3Rpb24gfCBpc0VtcHR5U2VsZWN0aW9uKSB7XG4gICAgICA8IS0tIEFkZCAtLT5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiY2FuRWRpdCAmJiAhbW9iaWxlXCIgW3RpdGxlXT1cIidDT01NT04uQlROX0FERCcgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiYWRkUm93KClcIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPCEtLSBSZWZyZXNoIC0tPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCIhbW9iaWxlXCIgW3RpdGxlXT1cIidDT01NT04uQlROX1JFRlJFU0gnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVtaXRSZWZyZXNoKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDwhLS0gcmVzZXQgZmlsdGVyIC0tPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIiAqbmdJZj1cImZpbHRlckNyaXRlcmlhQ291bnRcIj5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwiYWNjZW50XCI+ZmlsdGVyX2xpc3RfYWx0PC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1zZWNvbmRhcnlcIiBzdHlsZT1cImxlZnQ6IDE2cHg7IHRvcDogNXB4OyBmb250LXdlaWdodDogYm9sZFwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8IS0tIHNob3cgZmlsdGVyIC0tPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImZpbHRlckV4cGFuc2lvblBhbmVsLnRvZ2dsZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICpuZ0lmPVwiZmlsdGVyQ3JpdGVyaWFDb3VudDsgZWxzZSBlbXB0eUZpbHRlclwiXG4gICAgICAgICAgW21hdEJhZGdlXT1cImZpbHRlckNyaXRlcmlhQ291bnRcIlxuICAgICAgICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYWZ0ZXJcIlxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgICAgZmlsdGVyX2xpc3RfYWx0XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXI+XG4gICAgICAgICAgPG1hdC1pY29uPmZpbHRlcl9saXN0X2FsdDwvbWF0LWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDwhLS0gZGVsZXRlIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY2xhc3M9XCJoaWRkZW4teHMgaGlkZGVuLXNtXCJcbiAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwiZGVsZXRlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cblxuICAgIEBpZiAoIW1vYmlsZSAmJiAoY2FuRG93bmxvYWQgfHwgY2FuRGVidWcpKSB7XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fT1BUSU9OUycgfCB0cmFuc2xhdGVcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidG9vbGJhck9wdGlvbnNNZW51XCI+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L2lvbi1idXR0b25zPlxuPC9hcHAtdG9vbGJhcj5cblxuPCEtLSBUb29sYmFyIG9wdGlvbiBtZW51IC0tPlxuPG1hdC1tZW51ICN0b29sYmFyT3B0aW9uc01lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYWZ0ZXJcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuICA8IS0tIGV4cG9ydCBidXR0b24gLS0+XG4gIEBpZiAoY2FuRG93bmxvYWQpIHtcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cG9ydFRvQ3N2KCRldmVudClcIj5cbiAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5GSUxFLkNTVi5CVE5fRE9XTkxPQURfSEVMUDwvaW9uLWxhYmVsPlxuICAgIDwvYnV0dG9uPlxuICB9XG5cbiAgPCEtLSBEZWJ1ZyBvbmx5OiBUZXN0IHNlbGVjdCB1c2VycyBtb2RhbCAtLT5cbiAgQGlmIChjYW5EZWJ1Zykge1xuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCIgKG1vdXNlZW50ZXIpPVwibWVudVRyaWdnZXIub3Blbk1lbnUoKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJkZWJ1Z01lbnVcIj5cbiAgICAgIDxtYXQtaWNvbj48aW9uLWljb24gbmFtZT1cImJ1Z1wiPjwvaW9uLWljb24+PC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5ERUJVRy5CVE5fREVCVUdfRE9UUzwvaW9uLWxhYmVsPlxuICAgIDwvYnV0dG9uPlxuICB9XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48IS0tIGRlYnVnIG1lbnUgLS0+XG48bWF0LW1lbnUgI2RlYnVnTWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJkZXZUb2dnbGVEZWJ1ZygpXCI+XG4gICAgICA8bWF0LWljb24+e3sgZGVidWcgPyAnY2hlY2tfYm94JyA6ICdjaGVja19ib3hfb3V0bGluZV9ibGFuaycgfX08L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkRFQlVHLkJUTl9FTkFCTEVfREVCVUc8L2lvbi1sYWJlbD5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gIDwhLS0gZXJyb3IgLS0+XG4gIDxpb24taXRlbVxuICAgICpuZ0lmPVwibW9iaWxlICYmIChlcnJvclN1YmplY3QgfCBhc3luYyk7IGxldCBlcnJvclwiXG4gICAgbGluZXM9XCJub25lXCJcbiAgICBjbGFzcz1cImhpZGRlbi1zbSBoaWRkZW4teHMgaGlkZGVuLW1vYmlsZVwiXG4gICAgQHNsaWRlVXBEb3duQW5pbWF0aW9uXG4gID5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgPC9pb24taXRlbT5cblxuICA8IS0tIGRlYnVnIC0tPlxuICA8YXBwLWRlYnVnICpuZ0lmPVwiZGVidWdcIj5cbiAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIGZvY3VzQ29sdW1uOiB7eyBmb2N1c0NvbHVtbiB9fVxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIGxvYWRpbmdTdWJqZWN0OiB7eyBsb2FkaW5nIH19XG4gICAgICAgICAgPGJyIC8+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICA8L2lvbi1ncmlkPlxuICA8L2FwcC1kZWJ1Zz5cblxuICA8IS0tIHNlYXJjaCAtLT5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgI2ZpbHRlckV4cGFuc2lvblBhbmVsIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgZmlsdGVyLXBhbmVsIGZpbHRlci1wYW5lbC1mbG9hdGluZ1wiPlxuICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1jb250YWluZXIgaW9uLXBhZGRpbmdcIiBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIiAobmdTdWJtaXQpPVwiZW1pdFJlZnJlc2goKVwiPlxuICAgICAgPGlvbi1ncmlkPlxuICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgIDwhLS0gc2VhcmNoIC0tPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdVU0VSLkxJU1QuRklMVEVSLlNFQVJDSCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFRleHRcIiAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyQ29udHJvbFZhbHVlKCRldmVudCwgZmlsdGVyRm9ybS5jb250cm9scy5zZWFyY2hUZXh0KVwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWx0ZXJGb3JtLmNvbnRyb2xzLnNlYXJjaFRleHQuZGlzYWJsZWQgfHwgIWZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoVGV4dC52YWx1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICA8IS0tIHN0YXR1cyAtLT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnVVNFUi5TVEFUVVMnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInN0YXR1c0lkXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm51bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpPjxzcGFuIHRyYW5zbGF0ZT5DT01NT04uRU1QVFlfT1BUSU9OPC9zcGFuPjwvaT5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3RhdHVzTGlzdFwiIFt2YWx1ZV09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyQ29udHJvbFZhbHVlKCRldmVudCwgZmlsdGVyRm9ybS5jb250cm9scy5zdGF0dXNJZClcIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmlsdGVyRm9ybS5jb250cm9scy5zdGF0dXNJZC5kaXNhYmxlZCB8fCAhZmlsdGVyRm9ybS5jb250cm9scy5zdGF0dXNJZC52YWx1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICA8IS0tIHVzZXIgcHJvZmlsZXMgLS0+XG4gICAgICAgICAgICA8bWF0LWNoaXBzLWZpZWxkXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzZXJQcm9maWxlc1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVVNFUi5QUk9GSUxFUycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBjaGlwQ29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidXNlclByb2ZpbGVMaXN0XCJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlBdHRyaWJ1dGVzXT1cIlsnbmFtZSddXCJcbiAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8L21hdC1jaGlwcy1maWVsZD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICA8IS0tIEFkZGl0aW9uYWwgZmllbGRzIGZpbHRlcnMgLS0+XG4gICAgICAgIDxpb24tcm93ICpuZ0lmPVwiZmlsdGVyYWJsZUFkZGl0aW9uYWxGaWVsZHMgJiYgZmlsdGVyYWJsZUFkZGl0aW9uYWxGaWVsZHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxpb24tY29sICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWx0ZXJhYmxlQWRkaXRpb25hbEZpZWxkc1wiIHNpemU9XCIxMlwiIHNpemUtbWQ9XCI2XCIgc2l6ZS1sZz1cIjRcIj5cbiAgICAgICAgICAgIDxhcHAtZm9ybS1maWVsZFxuICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cImF1dG9cIj5cbiAgICAgICAgICAgIDwvYXBwLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICA8L2lvbi1ncmlkPlxuICAgIDwvZm9ybT5cblxuICAgIDxtYXQtYWN0aW9uLXJvdz5cbiAgICAgIDwhLS0gQ291bnRlciAgLS0+XG4gICAgICA8aW9uLWxhYmVsXG4gICAgICAgIFtoaWRkZW5dPVwiKGxvYWRpbmdTdWJqZWN0IHwgYXN5bmMpID09PSB0cnVlIHx8IGZpbHRlckZvcm0uZGlydHlcIlxuICAgICAgICBbY29sb3JdPVwiZW1wdHkgJiYgJ2RhbmdlcidcIlxuICAgICAgICBjbGFzcz1cImlvbi1wYWRkaW5nXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICAodG90YWxSb3dDb3VudCA/ICdDT01NT04uUkVTVUxUX0NPVU5UJyA6ICdDT01NT04uTk9fUkVTVUxUJylcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgY291bnQ6ICh0b3RhbFJvd0NvdW50IHwgbnVtYmVyRm9ybWF0KSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA8L2lvbi1sYWJlbD5cblxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItc3BhY2VyXCI+PC9kaXY+XG5cbiAgICAgIDwhLS0gQ2xvc2UgcGFuZWwgLS0+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIChjbGljayk9XCJmaWx0ZXJFeHBhbnNpb25QYW5lbC5jbG9zZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgPlxuICAgICAgICA8aW9uLXRleHQgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0xPU0U8L2lvbi10ZXh0PlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8IS0tIFNlYXJjaCBidXR0b24gLS0+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIFtjb2xvcl09XCJmaWx0ZXJGb3JtLmRpcnR5ID8gJ3RlcnRpYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgIFtmaWxsXT1cImZpbHRlckZvcm0uZGlydHkgPyAnc29saWQnIDogJ2NsZWFyJ1wiXG4gICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlckFuZENsb3NlUGFuZWwoJGV2ZW50KVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nU3ViamVjdCB8IGFzeW5jXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi10ZXh0IHRyYW5zbGF0ZT5DT01NT04uQlROX0FQUExZPC9pb24tdGV4dD5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L21hdC1hY3Rpb24tcm93PlxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgPCEtLSBlcnJvciAtLT5cbiAgQGlmIChtb2JpbGUgJiYgKGVycm9yU3ViamVjdCB8IGFzeW5jKTsgYXMgZXJyb3IpIHtcbiAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImVycm9yXCIgW2lubmVySFRNTF09XCJlcnJvciB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWl0ZW0+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCIgW2NsYXNzLmhhcy10b29sYmFyXT1cInNob3dUb29sYmFyXCJcbiAgICAgICBbY2xhc3MuaGFzLXBhZ2luYXRvcl09XCJzaG93UGFnaW5hdG9yXCIgW2NsYXNzLmhhcy1mb3JtLWJ1dHRvbnNdPVwic2hvd0Zvcm1CdXR0b25zXCI+XG4gICAgPHRhYmxlXG4gICAgICAjdGFibGVcbiAgICAgIG1hdC10YWJsZVxuICAgICAgbWF0U29ydFxuICAgICAgW2NsYXNzLmNvbXBhY3RdPVwiY29tcGFjdFwiXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICAgIFttYXRTb3J0QWN0aXZlXT1cImRlZmF1bHRTb3J0QnlcIlxuICAgICAgW21hdFNvcnREaXJlY3Rpb25dPVwiZGVmYXVsdFNvcnREaXJlY3Rpb25cIlxuICAgICAgbWF0U29ydERpc2FibGVDbGVhclxuICAgICAgW3RyYWNrQnldPVwidHJhY2tCeUZuXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdFwiIFtzdGlja3ldPVwic3RpY2t5XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIWlubGluZUVkaXRpb25cIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJ0aGlzIHwgaXNBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0aGlzIHwgaXNOb3RBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIWlubGluZUVkaXRpb25cIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCJ0b2dnbGVTZWxlY3RSb3coJGV2ZW50LCByb3cpXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uIHwgaXNTZWxlY3RlZDogcm93XCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJZCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImlkXCIgW3N0aWNreV09XCJzdGlja3lcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbD4jPC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsPnt7IHJvdy5jdXJyZW50RGF0YS5pZCB9fTwvaW9uLWxhYmVsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gYXZhdGFyIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYXZhdGFyXCIgW3N0aWNreV09XCJzdGlja3lcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPGlvbi1hdmF0YXIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3doaXRlJ1wiPlxuICAgICAgICAgICAgQGlmIChyb3cuY3VycmVudERhdGEuYXZhdGFyOyBhcyBhdmF0YXJVcmwpIHtcbiAgICAgICAgICAgICAgPGlvbi1pbWcgW3NyY109XCJhdmF0YXJVcmxcIj48L2lvbi1pbWc+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiBbZGF0YS1qZGVudGljb24tdmFsdWVdPVwicm93LmN1cnJlbnREYXRhLmlkXCI+PC9zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tYXZhdGFyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gbGFzdE5hbWUgIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJsYXN0TmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VVNFUi5MQVNUX05BTUU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwiZm9jdXNDb2x1bW4gPSAnbGFzdE5hbWUnXCI+XG4gICAgICAgICAgQGlmIChyb3cuZWRpdGluZykge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydsYXN0TmFtZSddXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuTEFTVF9OQU1FJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJyb3cuZWRpdGluZyAmJiBmb2N1c0NvbHVtbiA9PT0gJ2xhc3ROYW1lJ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydsYXN0TmFtZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snbGFzdE5hbWUnXS5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IDIgfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlvbi1sYWJlbCBhcHBBdXRvVGl0bGU+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICdsYXN0TmFtZScgfX1cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGZpcnN0bmFtZSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZmlyc3ROYW1lXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5VU0VSLkZJUlNUX05BTUU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwiZm9jdXNDb2x1bW4gPSAnZmlyc3ROYW1lJ1wiPlxuICAgICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZmlyc3ROYW1lJ11cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVVNFUi5GSVJTVF9OQU1FJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJyb3cuZWRpdGluZyAmJiBmb2N1c0NvbHVtbiA9PT0gJ2ZpcnN0TmFtZSdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZmlyc3ROYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgRVJST1IuRklFTERfUkVRVUlSRURcbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydmaXJzdE5hbWUnXS5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IDIgfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlvbi1sYWJlbCBhcHBBdXRvVGl0bGU+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICdmaXJzdE5hbWUnIH19XG4gICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBlbWFpbCAgLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImVtYWlsXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5VU0VSLkVNQUlMPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgKGNsaWNrKT1cImZvY3VzQ29sdW1uID0gJ2VtYWlsJ1wiPlxuICAgICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZW1haWwnXVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVU0VSLkVNQUlMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJyb3cuZWRpdGluZyAmJiBmb2N1c0NvbHVtbiA9PT0gJ2VtYWlsJ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydlbWFpbCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZW1haWwnXS5oYXNFcnJvcignZW1haWwnKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfRU1BSUw8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPlxuICAgICAgICAgICAgICB7eyByb3cudmFsaWRhdG9yIHwgZm9ybUdldFZhbHVlOiAnZW1haWwnIH19XG4gICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBhZGRpdGlvbmFsIGZpZWxkcyAtLT5cbiAgICAgIEBmb3IgKGRlZmluaXRpb24gb2YgYWRkaXRpb25hbEZpZWxkczsgdHJhY2sgZGVmaW5pdGlvbi5rZXkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImRlZmluaXRpb24ua2V5XCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGRlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgKGNsaWNrKT1cImZvY3VzQ29sdW1uID0gZGVmaW5pdGlvbi5rZXlcIj5cbiAgICAgICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICAgICAgPGFwcC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJkZWZpbml0aW9uXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1tkZWZpbml0aW9uLmtleV1cIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJkZWZpbml0aW9uLmV4dHJhPy51c2Vycz8ucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwicm93LmVkaXRpbmcgJiYgZm9jdXNDb2x1bW4gPT09IGRlZmluaXRpb24ua2V5XCJcbiAgICAgICAgICAgICAgPjwvYXBwLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPnt7IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6IGRlZmluaXRpb24ua2V5IHwgZGlzcGxheVdpdGg6IGdldERpc3BsYXlWYWx1ZUZuKGRlZmluaXRpb24pIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gcHJvZmlsZSBjb2x1bW4gIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwcm9maWxlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuUFJPRklMRTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIChjbGljayk9XCJmb2N1c0NvbHVtbiA9ICdwcm9maWxlJ1wiPlxuICAgICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvciB8IGZvcm1HZXRDb250cm9sOiAnbWFpblByb2ZpbGUnXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuUFJPRklMRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJvZmlsZXNcIiBbdmFsdWVdPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAge3sgJ1VTRVIuUFJPRklMRV9FTlVNLicgKyBpdGVtIHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydtYWluUHJvZmlsZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBsZXQgcHJvZmlsZSA9IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICdtYWluUHJvZmlsZSc7XG4gICAgICAgICAgICBAaWYgKHByb2ZpbGUpIHtcbiAgICAgICAgICAgICAgPGlvbi1sYWJlbCBhcHBBdXRvVGl0bGU+e3sgJ1VTRVIuUFJPRklMRV9FTlVNLicgKyBwcm9maWxlIHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBTdGF0dXMgY29sdW1uICAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdHVzXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuU1RBVFVTPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgKGNsaWNrKT1cImZvY3VzQ29sdW1uID0gJ3N0YXR1cydcIj5cbiAgICAgICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgICAgICBAbGV0IGNvbnRyb2wgPSByb3cudmFsaWRhdG9yIHwgZm9ybUdldENvbnRyb2w6ICdzdGF0dXNJZCc7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUkVGRVJFTlRJQUwuU1RBVFVTJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250cm9sLnZhbHVlID49IDBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc3RhdHVzQnlJZFtjb250cm9sLnZhbHVlXT8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHN0YXR1c0xpc3Q7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj48aW9uLWljb24gW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBsZXQgc3RhdHVzSWQgPSByb3cudmFsaWRhdG9yIHwgZm9ybUdldFZhbHVlOiAnc3RhdHVzSWQnO1xuICAgICAgICAgICAgQGlmIChzdGF0dXNJZCA+PSAwKSB7XG4gICAgICAgICAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPlxuICAgICAgICAgICAgICAgIHt7IChzdGF0dXNCeUlkIHwgbWFwR2V0OiBzdGF0dXNJZCk/LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIHVzZXJuYW1lIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ1c2VybmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VVNFUi5VU0VSTkFNRTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIChjbGljayk9XCJmb2N1c0NvbHVtbiA9ICd1c2VybmFtZSdcIj5cbiAgICAgICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInJvdy52YWxpZGF0b3IuY29udHJvbHMudXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVVNFUi5VU0VSTkFNRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhcm93LmVkaXRpbmdcIlxuICAgICAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwicm93LmVkaXRpbmcgJiYgZm9jdXNDb2x1bW4gPT09ICd1c2VybmFtZSdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9scy51c2VybmFtZS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICBFUlJPUi5GSUVMRF9SRVFVSVJFRFxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8aW9uLWxhYmVsIGFwcEF1dG9UaXRsZT5cbiAgICAgICAgICAgICAge3sgcm93LnZhbGlkYXRvciB8IGZvcm1HZXRWYWx1ZTogJ3VzZXJuYW1lJyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gdXNlcm5hbWUgZXh0cmFuZXQgLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVzZXJuYW1lRXh0cmFuZXRcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuVVNFUk5BTUVfRVhUUkFORVQ8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwiZm9jdXNDb2x1bW4gPSAndXNlcm5hbWVFeHRyYW5ldCdcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJyb3cuZWRpdGluZzsgZWxzZSByZWFkb25seUNlbGxcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9scy51c2VybmFtZUV4dHJhbmV0XCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVU0VSLlVTRVJOQU1FX0VYVFJBTkVUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCIhcm93LmVkaXRpbmdcIlxuICAgICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cInJvdy5lZGl0aW5nICYmIGZvY3VzQ29sdW1uID09PSAndXNlcm5hbWVFeHRyYW5ldCdcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzLnVzZXJuYW1lRXh0cmFuZXQuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlDZWxsPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBhcHBBdXRvVGl0bGU+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICd1c2VybmFtZUV4dHJhbmV0JyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIHB1YmtleSAgLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInB1YmtleVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VVNFUi5QVUJLRVk8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgICBbdGl0bGVdPVwicm93LnZhbGlkYXRvci5jb250cm9scy5wdWJrZXkudmFsdWVDaGFuZ2VzIHwgYXN5bmNcIlxuICAgICAgICAgIChjbGljayk9XCJmb2N1c0NvbHVtbiA9ICdwdWJrZXknXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInJvdy5lZGl0aW5nOyBlbHNlIHJlYWRvbmx5Q2VsbFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydwdWJrZXknXVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVVNFUi5QVUJLRVknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInJvdy52YWxpZGF0b3IuY29udHJvbHMucHVia2V5Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBFUlJPUi5GSUVMRF9SRVFVSVJFRFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9scy5wdWJrZXkuaGFzRXJyb3IoJ3B1YmtleScpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZPC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5Q2VsbD5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPlxuICAgICAgICAgICAgICB7eyByb3cudmFsaWRhdG9yIHwgZm9ybUdldFZhbHVlOiAncHVia2V5JyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIENyZWF0aW9uIGRhdGUgY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjcmVhdGlvbkRhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+VVNFUi5DUkVBVElPTl9EQVRFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLXRleHQtZW5kXCIgY29sb3I9XCJtZWRpdW1cIiAqbmdJZj1cInJvdy5pZCAhPT0gLTFcIj5cbiAgICAgICAgICAgIHt7IHJvdy5jdXJyZW50RGF0YS5jcmVhdGlvbkRhdGUgfCBkYXRlRm9ybWF0OiB7IHRpbWU6IHRydWUgfSB9fVxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBVcGRhdGUgZGF0ZSBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVwZGF0ZURhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+VVNFUi5VUERBVEVfREFURTwvaW9uLWxhYmVsPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZFwiPlxuICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi10ZXh0LWVuZFwiIGNvbG9yPVwibWVkaXVtXCIgKm5nSWY9XCJyb3cuaWQgIT09IC0xXCI+XG4gICAgICAgICAgICB7eyByb3cuY3VycmVudERhdGEudXBkYXRlRGF0ZSB8IGRhdGVGb3JtYXQ6IHsgdGltZTogdHJ1ZSB9IH19XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEFjdGlvbnMgYnV0dG9ucyBjb2x1bW4gLS0+XG4gICAgICA8YXBwLWFjdGlvbnMtY29sdW1uXG4gICAgICAgIFtzdGlja3lFbmRdPVwic3RpY2t5RW5kXCJcbiAgICAgICAgKGNhbmNlbE9yRGVsZXRlQ2xpY2spPVwiY2FuY2VsT3JEZWxldGUoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgIChjb25maXJtRWRpdENyZWF0ZUNsaWNrKT1cImNvbmZpcm1FZGl0Q3JlYXRlKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAoY29uZmlybUFuZEFkZENsaWNrKT1cImNvbmZpcm1BbmRBZGQoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgIChiYWNrd2FyZCk9XCJjb25maXJtQW5kQmFja3dhcmQoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgIChmb3J3YXJkKT1cImNvbmZpcm1BbmRGb3J3YXJkKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICBbY2FuQ2FuY2VsXT1cImZhbHNlXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSB0YWJsZSBvcHRpb25zIG1lbnUgLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXRIZWFkZXJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fT1BUSU9OUycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0YWJsZU9wdGlvbnNNZW51XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvYXBwLWFjdGlvbnMtY29sdW1uPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG4gICAgICA8dHJcbiAgICAgICAgbWF0LXJvd1xuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiXG4gICAgICAgIFtjbGFzcy5tYXQtcm93LWVycm9yXT1cInJvdy52YWxpZGF0b3IuaW52YWxpZFwiXG4gICAgICAgIFtjbGFzcy5tYXQtcm93LWRpcnR5XT1cInJvdy5jdXJyZW50RGF0YS5kaXJ0eVwiXG4gICAgICAgIFtjbGFzcy5tYXQtcm93LWRpc2FibGVkXT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgIFtjbGFzcy5tYXQtbWRjLXJvdy1zZWxlY3RlZF09XCJyb3cuZWRpdGluZyB8fCAoIWNhbkVkaXQgJiYgc2VsZWN0aW9uIHwgaXNTZWxlY3RlZDogcm93KVwiXG4gICAgICAgIChjbGljayk9XCJjbGlja1JvdygkZXZlbnQsIHJvdylcIlxuICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiZXNjYXBlRWRpdGluZ1JvdygkZXZlbnQpXCJcbiAgICAgICAgW2Nka1RyYXBGb2N1c109XCIhcm93LnZhbGlkYXRvcj8udmFsaWRcIlxuICAgICAgPjwvdHI+XG4gICAgPC90YWJsZT5cblxuICAgIDwhLS0gRMOpY2xlbmNoZXVyIGludmlzaWJsZSBwb3VyIGxlIG1hdC1tZW51IC0tPlxuXG4gICAgQGlmIChsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSB7XG4gICAgICA8aW9uLWl0ZW0+XG4gICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBhbmltYXRlZD48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgPC9pb24taXRlbT5cbiAgICB9IEBlbHNlIGlmICh0b3RhbFJvd0NvdW50ID09PSAwKSB7XG4gICAgICA8aW9uLWl0ZW0+XG4gICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwidGV4dC1pdGFsaWNcIiB0cmFuc2xhdGU+Q09NTU9OLk5PX1JFU1VMVDwvaW9uLXRleHQ+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgIH1cbiAgPC9kaXY+XG48L2lvbi1jb250ZW50PlxuXG48IS0tIFRhYmxlIG9wdGlvbnMgbWVudSAtLT5cbjxtYXQtbWVudSAjdGFibGVPcHRpb25zTWVudT1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJhZnRlclwiPlxuICA8IS0tIGRpc3BsYXkgY29sdW1ucyAtLT5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuU2VsZWN0Q29sdW1uc01vZGFsKCRldmVudClcIj5cbiAgICA8bWF0LWljb24+dmlld19jb2x1bW48L21hdC1pY29uPlxuICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5ESVNQTEFZRURfQ09MVU1OU19ET1RTPC9pb24tbGFiZWw+XG4gIDwvYnV0dG9uPlxuXG4gIEBpZiAodXNlUGFnZVNldHRpbmdzKSB7XG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cbiAgICA8IS0tIENvbXBhY3QgbW9kZSAtLT5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInRvZ2dsZUNvbXBhY3RNb2RlKClcIj5cbiAgICAgIDxtYXQtaWNvbj57eyBjb21wYWN0ID8gJ2NoZWNrX2JveCcgOiAnY2hlY2tfYm94X291dGxpbmVfYmxhbmsnIH19PC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ09NUEFDVF9ST1dTPC9pb24tbGFiZWw+XG4gICAgPC9idXR0b24+XG4gIH1cbjwvbWF0LW1lbnU+XG5cbjxpb24tZm9vdGVyPlxuICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInNob3dQYWdpbmF0b3JcIlxuICAgIFtsZW5ndGhdPVwidG90YWxSb3dDb3VudFwiXG4gICAgW3BhZ2VTaXplXT1cImRlZmF1bHRQYWdlU2l6ZVwiXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJkZWZhdWx0UGFnZVNpemVPcHRpb25zXCJcbiAgICBzaG93Rmlyc3RMYXN0QnV0dG9uc1xuICA+PC9tYXQtcGFnaW5hdG9yPlxuXG4gIEBpZiAoc2hvd0Zvcm1CdXR0b25zKSB7XG4gICAgPGFwcC1mb3JtLWJ1dHRvbnMtYmFyXG4gICAgICAob25DYW5jZWwpPVwiY2FuY2VsKCRldmVudClcIlxuICAgICAgKG9uU2F2ZSk9XCJzYXZlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIihsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSA9PT0gdHJ1ZSB8fCAoZGlydHlTdWJqZWN0IHwgYXN5bmMpICE9PSB0cnVlXCJcbiAgICA+XG4gICAgICA8IS0tIGVycm9yIC0tPlxuICAgICAgPGlvbi1pdGVtICpuZ0lmPVwiZXJyb3JTdWJqZWN0IHwgYXN5bmM7IGxldCBlcnJvclwiIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9hcHAtZm9ybS1idXR0b25zLWJhcj5cbiAgfVxuPC9pb24tZm9vdGVyPlxuXG48aW9uLWZhYiBzbG90PVwiZml4ZWRcIiB2ZXJ0aWNhbD1cImJvdHRvbVwiIGhvcml6b250YWw9XCJlbmRcIiAqbmdJZj1cIm1vYmlsZVwiPlxuICA8aW9uLWZhYi1idXR0b24gY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJhZGRSb3coKVwiPlxuICAgIDxpb24taWNvbiBuYW1lPVwiYWRkXCI+PC9pb24taWNvbj5cbiAgPC9pb24tZmFiLWJ1dHRvbj5cbjwvaW9uLWZhYj5cbiJdfQ==
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2FkbWluL3VzZXJzL3VzZXJzLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9hZG1pbi91c2Vycy91c2Vycy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFZLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQXVCLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NB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RUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxVQUFVO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsYUFBYTtzQkFBcEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkEyRVUsb0JBQW9CO3NCQUFuRSxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVyc29uLCBQUklPUklUSVpFRF9BVVRIT1JJVElFUyB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvcGVyc29uLm1vZGVsJztcbmltcG9ydCB7IFJlZmVyZW50aWFsUmVmLCBTdGF0dXNCeUlkLCBTdGF0dXNMaXN0IH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQgeyBQZXJzb25TZXJ2aWNlIH0gZnJvbSAnLi9wZXJzb24uc2VydmljZSc7XG5pbXBvcnQgeyBQZXJzb25WYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9wZXJzb24udmFsaWRhdG9yJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBcHBUYWJsZSB9IGZyb20gJy4uLy4uL2NvcmUvdGFibGUvdGFibGUuY2xhc3MnO1xuaW1wb3J0IHsgVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkLCBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVudGl0aWVzVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vY29yZS90YWJsZS9lbnRpdGllcy10YWJsZS1kYXRhc291cmNlLmNsYXNzJztcbmltcG9ydCB7IGdldFByb3BlcnR5QnlQYXRoLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgUGVyc29uRmlsdGVyIH0gZnJvbSAnLi9wZXJzb24uZmlsdGVyJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBBdXRoVG9rZW5UeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnR5cGVzJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvblBhbmVsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcbmltcG9ydCB7IHNsaWRlVXBEb3duQW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4uLy4uL3NvY2lhbC9tZXNzYWdlL21lc3NhZ2UubW9kZWwnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zb2NpYWwvbWVzc2FnZS9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkVTRVJWRURfRU5EX0NPTFVNTlMsIFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMsIFRBQkxFX1NFVFRJTkdTX0VOVU0gfSBmcm9tICcuLi8uLi9jb3JlL3RhYmxlL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9tZW51L21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBDc3ZVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2Nzdi51dGlscyc7XG5pbXBvcnQgeyBmcm9tRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC11c2Vycy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAndXNlcnMuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VzZXJzLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBWYWxpZGF0b3JTZXJ2aWNlLCB1c2VFeGlzdGluZzogUGVyc29uVmFsaWRhdG9yU2VydmljZSB9XSxcbiAgYW5pbWF0aW9uczogW3NsaWRlVXBEb3duQW5pbWF0aW9uXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJzUGFnZSBleHRlbmRzIEFwcFRhYmxlPFBlcnNvbiwgUGVyc29uRmlsdGVyPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5IGNhbkRlYnVnOiBib29sZWFuO1xuICByZWFkb25seSBmaWx0ZXJGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICByZWFkb25seSBwcm9maWxlcyA9IFsuLi5QUklPUklUSVpFRF9BVVRIT1JJVElFU10ucmV2ZXJzZSgpO1xuICByZWFkb25seSBzdGF0dXNMaXN0ID0gU3RhdHVzTGlzdDtcbiAgcmVhZG9ubHkgc3RhdHVzQnlJZCA9IFN0YXR1c0J5SWQ7XG4gIHJlYWRvbmx5IHVzZXJQcm9maWxlTGlzdDogUmVmZXJlbnRpYWxSZWZbXSA9IFBSSU9SSVRJWkVEX0FVVEhPUklUSUVTLm1hcCgobGFiZWwpID0+XG4gICAgUmVmZXJlbnRpYWxSZWYuZnJvbU9iamVjdCh7XG4gICAgICBsYWJlbCxcbiAgICAgIG5hbWU6IGBVU0VSLlBST0ZJTEVfRU5VTS4ke2xhYmVsfWAsXG4gICAgfSlcbiAgKTtcblxuICBwcm90ZWN0ZWQgYWRkaXRpb25hbEZpZWxkczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBwcm90ZWN0ZWQgZmlsdGVyQ3JpdGVyaWFDb3VudCA9IDA7XG4gIHByb3RlY3RlZCBkZWZhdWx0Q29tcGFjdCA9IGZhbHNlO1xuXG4gIGdldCBmaWx0ZXJhYmxlQWRkaXRpb25hbEZpZWxkcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmFkZGl0aW9uYWxGaWVsZHM/LmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmV4dHJhPy51c2Vycz8uZGlzYWJsZWQgIT09IHRydWUpIHx8IFtdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNob3dVc2VybmFtZUNvbHVtbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0U2hvd0NvbHVtbigndXNlcm5hbWUnLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd1VzZXJuYW1lQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNob3dDb2x1bW4oJ3VzZXJuYW1lJyk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgc2hvd1VzZXJuYW1lRXh0cmFuZXRDb2x1bW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lRXh0cmFuZXQnLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd1VzZXJuYW1lRXh0cmFuZXRDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0NvbHVtbigndXNlcm5hbWVFeHRyYW5ldCcpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNob3dFbWFpbENvbHVtbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0U2hvd0NvbHVtbignZW1haWwnLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd0VtYWlsQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNob3dDb2x1bW4oJ2VtYWlsJyk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgc2hvd1B1YmtleUNvbHVtbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0U2hvd0NvbHVtbigncHVia2V5JywgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dQdWJrZXlDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0NvbHVtbigncHVia2V5Jyk7XG4gIH1cbiAgQElucHV0KCkgc2V0IHNob3dDcmVhdGlvbkRhdGVDb2x1bW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFNob3dDb2x1bW4oJ2NyZWF0aW9uRGF0ZScsIHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93Q3JlYXRpb25EYXRlQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNob3dDb2x1bW4oJ2NyZWF0aW9uRGF0ZScpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHNob3dVcGRhdGVEYXRlQ29sdW1uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRTaG93Q29sdW1uKCd1cGRhdGVEYXRlJywgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dVcGRhdGVEYXRlQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNob3dDb2x1bW4oJ3VwZGF0ZURhdGUnKTtcbiAgfVxuXG4gIGdldCBzaG93Rm9ybUJ1dHRvbnMoKSB7XG4gICAgcmV0dXJuICF0aGlzLm1vYmlsZSAmJiB0aGlzLmNhbkVkaXQ7XG4gIH1cblxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuU2VuZE1lc3NhZ2U6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5FZGl0OiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY29tcGFjdDogYm9vbGVhbiA9IG51bGw7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB1c2VQYWdlU2V0dGluZ3MgPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc3RpY2t5ID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzdGlja3lFbmQgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkRvd25sb2FkID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGluTW9kYWwgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dGb290ZXIgPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1Rvb2xiYXIgPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1BhZ2luYXRvciA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdG9yU2VydmljZTogVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IFBlcnNvblNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBlbnZpcm9ubWVudFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGluamVjdG9yLFxuICAgICAgUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5jb25jYXQoWydhdmF0YXInLCAnbGFzdE5hbWUnLCAnZmlyc3ROYW1lJywgJ2VtYWlsJywgJ3Byb2ZpbGUnLCAnc3RhdHVzJywgJ3VzZXJuYW1lJywgJ3VzZXJuYW1lRXh0cmFuZXQnLCAncHVia2V5J10pXG4gICAgICAgIC5jb25jYXQoYWNjb3VudFNlcnZpY2UuYWRkaXRpb25hbEZpZWxkcy5tYXAoKGZpZWxkKSA9PiBmaWVsZC5rZXkpKVxuICAgICAgICAuY29uY2F0KFsnY3JlYXRpb25EYXRlJywgJ3VwZGF0ZURhdGUnXSlcbiAgICAgICAgLmNvbmNhdChSRVNFUlZFRF9FTkRfQ09MVU1OUyksXG4gICAgICBuZXcgRW50aXRpZXNUYWJsZURhdGFTb3VyY2UoUGVyc29uLCBkYXRhU2VydmljZSwgdmFsaWRhdG9yU2VydmljZSwge1xuICAgICAgICBwcmVwZW5kTmV3RWxlbWVudHM6IGZhbHNlLFxuICAgICAgICBzdXBwcmVzc0Vycm9yczogZW52aXJvbm1lbnQucHJvZHVjdGlvbixcbiAgICAgICAgc2F2ZU9ubHlEaXJ0eVJvd3M6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIG51bGxcbiAgICApO1xuXG4gICAgdGhpcy5jYW5EZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIHRoaXMuY2FuRWRpdCA9IGFjY291bnRTZXJ2aWNlLmlzQWRtaW4oKTtcbiAgICB0aGlzLmNhblNlbmRNZXNzYWdlID0gdGhpcy5jYW5FZGl0O1xuICAgIHRoaXMuaW5saW5lRWRpdGlvbiA9IHRoaXMuY2FuRWRpdDtcbiAgICB0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUgPSB0cnVlO1xuICAgIHRoaXMuYXV0b0xvYWQgPSBmYWxzZTsgLy8gV2FpdCBjb25maWcgbG9hZGluZ1xuICAgIHRoaXMuaTE4bkNvbHVtblByZWZpeCA9ICdVU0VSLic7XG4gICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gJ2xhc3ROYW1lJztcbiAgICB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG5cbiAgICAvLyBJbml0aWFsaXplIGFkZGl0aW9uYWwgZmllbGRzIGZpcnN0XG4gICAgdGhpcy5hZGRpdGlvbmFsRmllbGRzID0gKHRoaXMuYWNjb3VudFNlcnZpY2UuYWRkaXRpb25hbEZpZWxkcyB8fCBbXSlcbiAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiBpc05vdE5pbChmaWVsZC5hdXRvY29tcGxldGUpKVxuICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGdldCB0aGUgZmluYWwgYXV0b2NvbXBsZXRlIGNvbmZpZyAoZS5nLiB3aXRoIGEgc3VnZ2VzdEZuIGZ1bmN0aW9uKVxuICAgICAgICBmaWVsZC5hdXRvY29tcGxldGUgPSB0aGlzLnJlZ2lzdGVyQXV0b2NvbXBsZXRlRmllbGQoZmllbGQua2V5LCB7XG4gICAgICAgICAgLi4uZmllbGQuYXV0b2NvbXBsZXRlLCAvLyBDb3B5LCB0byBiZSBzdXJlIHRoZSBvcmlnaW5hbCBjb25maWcgaXMgdW5jaGFuZ2VkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBmaWx0ZXIgZm9ybSB3aXRoIGR5bmFtaWMgY29udHJvbHMgZm9yIGFkZGl0aW9uYWwgZmllbGRzXG4gICAgY29uc3QgZmlsdGVyRm9ybUNvbnRyb2xzOiBhbnkgPSB7XG4gICAgICBzZWFyY2hUZXh0OiBbbnVsbF0sXG4gICAgICBzdGF0dXNJZDogW251bGxdLFxuICAgICAgdXNlclByb2ZpbGVzOiBbbnVsbF0sXG4gICAgfTtcblxuICAgIC8vIEFkZCBjb250cm9scyBmb3IgZWFjaCBhZGRpdGlvbmFsIGZpZWxkIHRoYXQgaXMgbm90IGRpc2FibGVkIGZvciB1c2Vyc1xuICAgIHRoaXMuYWRkaXRpb25hbEZpZWxkc1xuICAgICAgLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmV4dHJhPy51c2Vycz8uZGlzYWJsZWQgIT09IHRydWUpXG4gICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgZmlsdGVyRm9ybUNvbnRyb2xzW2ZpZWxkLmtleV0gPSBbbnVsbF07XG4gICAgICB9KTtcblxuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKGZpbHRlckZvcm1Db250cm9scyk7XG5cbiAgICAvLyBUcmFuc2xhdGUgdXNlciBwcm9maWxlc1xuICAgIHRoaXMudXNlclByb2ZpbGVMaXN0LmZvckVhY2goKHByb2ZpbGUpID0+IHtcbiAgICAgIHByb2ZpbGUubmFtZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQocHJvZmlsZS5uYW1lKTtcbiAgICB9KTtcblxuICAgIC8vIEZvciBERVYgb25seSAtLVxuICAgIHRoaXMuY2FuRGVidWcgPSB0cnVlO1xuICAgIHRoaXMuZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoTWF0RXhwYW5zaW9uUGFuZWwsIHsgc3RhdGljOiB0cnVlIH0pIGZpbHRlckV4cGFuc2lvblBhbmVsOiBNYXRFeHBhbnNpb25QYW5lbDtcblxuICBnZXQgZmlyc3RVc2VyQ29sdW1uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuZGlzcGxheWVkQ29sdW1uc1tSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmxlbmd0aF07XG4gICAgLy8gU2tpcCBhdmF0YXIgY29sdW1uLCBpZiBwcmVzZW50XG4gICAgcmV0dXJuIChjb2x1bW5OYW1lID09PSAnYXZhdGFyJyAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnNbUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5sZW5ndGggKyAxXSkgfHwgY29sdW1uTmFtZTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSB0aGlzLmlubGluZUVkaXRpb24gJiYgdGhpcy5jYW5FZGl0O1xuXG4gICAgLy8gTGlzdGVuIHBhZ2UgYWN0aW9uIChlLmcuIGZyb20gc3ViIG1lbnUgaXRlbSlcbiAgICBpZiAoIXRoaXMuaW5Nb2RhbCkge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5waXBlKGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCdhY3Rpb24nKSkuc3Vic2NyaWJlKChxdWVyeVBhcmFtcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHF1ZXJ5UGFyYW1zWydhY3Rpb24nXSB8fCAnbm9uZSc7XG4gICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ3NlbmQnOlxuICAgICAgICAgICAgICB0aGlzLm9wZW5Db21wb3NlTWVzc2FnZU1vZGFsKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbdXNlcnNdIFVua25vd24gYWN0aW9uPScgKyBhY3Rpb24pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTWFyayBhcyBjb25zdW1lZFxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLiddLCB7XG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgLi4ucXVlcnlQYXJhbXMsIGFjdGlvbjogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICAgICAgc3RhdGU6IHsgYW5pbWF0ZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgIGNvbnN0IGF1dGhUb2tlblR5cGUgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUpIGFzIEF1dGhUb2tlblR5cGU7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1t1c2Vyc10gQXV0aFRva2VuVHlwZT0nICsgYXV0aFRva2VuVHlwZSk7XG4gICAgICAgIHN3aXRjaCAoYXV0aFRva2VuVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2Jhc2ljJzpcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigncHVia2V5JywgZmFsc2UsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigndXNlcm5hbWUnLCB0cnVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lRXh0cmFuZXQnLCB0cnVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdiYXNpYy1hbmQtdG9rZW4nOlxuICAgICAgICAgICAgdGhpcy5zZXRTaG93Q29sdW1uKCdwdWJrZXknLCB0cnVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lJywgdHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXRTaG93Q29sdW1uKCd1c2VybmFtZUV4dHJhbmV0JywgdHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndG9rZW4nOlxuICAgICAgICAgICAgdGhpcy5zZXRTaG93Q29sdW1uKCdwdWJrZXknLCB0cnVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0aGlzLnNldFNob3dDb2x1bW4oJ3VzZXJuYW1lJywgZmFsc2UsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2hvd0NvbHVtbigndXNlcm5hbWVFeHRyYW5ldCcsIGZhbHNlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuZW1pdFJlZnJlc2goKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uUmVmcmVzaC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gVXBkYXRlIGZpbHRlciB3aGVuIGNoYW5nZXNcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5maWx0ZXJGb3JtLnZhbGlkKSxcbiAgICAgICAgICB0YXAoKGpzb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IFBlcnNvbkZpbHRlci5mcm9tT2JqZWN0KGpzb24pO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYUNvdW50ID0gZmlsdGVyLmNvdW50Tm90RW1wdHlDcml0ZXJpYSgpO1xuICAgICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZmlsdGVyLCB3aXRob3V0IHJlbG9hZGluZyB0aGUgY29udGVudFxuICAgICAgICAgICAgdGhpcy5zZXRGaWx0ZXIoZmlsdGVyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gU2F2ZSBmaWx0ZXIgaW4gc2V0dGluZ3MgKGFmdGVyIGEgZGVib3VuY2UgdGltZSlcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gaXNOb3ROaWxPckJsYW5rKHRoaXMuc2V0dGluZ3NJZCkgJiYgdGhpcy51c2VQYWdlU2V0dGluZ3MpLFxuICAgICAgICAgIHRhcCgoanNvbikgPT4gdGhpcy5zZXR0aW5ncy5zYXZlUGFnZVNldHRpbmcodGhpcy5zZXR0aW5nc0lkLCBqc29uLCBUQUJMRV9TRVRUSU5HU19FTlVNLkZJTFRFUl9LRVkpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5jYW5TZW5kTWVzc2FnZSkge1xuICAgICAgYXdhaXQgdGhpcy5tZW51U2VydmljZS5hZGRTdWJNZW51SXRlbXMoXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJlbnRQYXRoOiAnL2FkbWluL3VzZXJzJyxcbiAgICAgICAgICAgIHBhdGg6ICcvYWRtaW4vdXNlcnMnLFxuICAgICAgICAgICAgcGF0aFBhcmFtczogeyBhY3Rpb246ICdleHBhbmQnIH0sXG4gICAgICAgICAgICBtYXRJY29uOiAnZXhwYW5kX21vcmUnLFxuICAgICAgICAgICAgdGl0bGU6ICdVU0VSLkxJU1QuQlROX0FDVElPTlMnLFxuICAgICAgICAgICAgYWN0aW9uOiAnZXhwYW5kJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmVudFBhdGg6ICcvYWRtaW4vdXNlcnM/YWN0aW9uPWV4cGFuZCcsXG4gICAgICAgICAgICBwYXRoOiAnL2FkbWluL3VzZXJzP2FjdGlvbj1zZW5kJyxcbiAgICAgICAgICAgIGljb246ICdtYWlsJyxcbiAgICAgICAgICAgIHRpdGxlOiAnVVNFUi5MSVNULkJUTl9TRU5EX01FU1NBR0UnLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLm9wZW5Db21wb3NlTWVzc2FnZU1vZGFsKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgeyBza2lwSWZFeGlzdHM6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBjb21wYWN0IHJvd3NcbiAgICB0aGlzLnJlc3RvcmVDb21wYWN0TW9kZSgpO1xuXG4gICAgLy8gUmVzdG9yZSBmaWx0ZXIgZnJvbSBzZXR0aW5ncywgb3IgbG9hZCBhbGxcbiAgICB0aGlzLnJlc3RvcmVGaWx0ZXJPckxvYWQoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyQW5kQ2xvc2VQYW5lbChldmVudD86IEV2ZW50KSB7XG4gICAgdGhpcy5lbWl0UmVmcmVzaCgpO1xuICAgIHRoaXMuZmlsdGVyRXhwYW5zaW9uUGFuZWwuY2xvc2UoKTtcbiAgfVxuXG4gIHJlc2V0RmlsdGVyKGV2ZW50PzogRXZlbnQpIHtcbiAgICB0aGlzLnRvdGFsUm93Q291bnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWx0ZXJDcml0ZXJpYUNvdW50ID0gMDtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQoKTtcbiAgICB0aGlzLnNldEZpbHRlcihudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZXN0b3JlRmlsdGVyT3JMb2FkKCkge1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW3VzZXJzXSBSZXN0b3JpbmcgZmlsdGVyIGZyb20gc2V0dGluZ3MuLi4nKTtcblxuICAgIGNvbnN0IGpzb24gPSB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIFRBQkxFX1NFVFRJTkdTX0VOVU0uRklMVEVSX0tFWSkgfHwge307XG4gICAgY29uc3QgZmlsdGVyID0gUGVyc29uRmlsdGVyLmZyb21PYmplY3QoanNvbik7XG5cbiAgICBqc29uLnVzZXJQcm9maWxlcyA9IEFycmF5LmlzQXJyYXkoanNvbi51c2VyUHJvZmlsZXMpXG4gICAgICA/IGpzb24udXNlclByb2ZpbGVzLm1hcCgodXApID0+IHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IHVwLmxhYmVsID8/IHVwO1xuICAgICAgICAgIHJldHVybiBSZWZlcmVudGlhbFJlZi5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgVVNFUi5QUk9GSUxFX0VOVU0uJHtsYWJlbH1gKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIDogbnVsbDtcblxuICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKGpzb24pO1xuICAgIHRoaXMuc2V0RmlsdGVyKGZpbHRlciwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gIH1cblxuICBjbGVhckNvbnRyb2xWYWx1ZShldmVudDogRXZlbnQsIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBBdm9pZCB0byBlbnRlciBpbnB1dCB0aGUgZmllbGRcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBvcGVuQ29tcG9zZU1lc3NhZ2VNb2RhbChldmVudD86IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBDb21wdXRlIHJlY2lwaWVudHNcbiAgICBjb25zdCByZWNpcGllbnRzID0gKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKVxuICAgICAgLm1hcCgocm93KSA9PiByb3cuY3VycmVudERhdGEpXG4gICAgICAubWFwKFBlcnNvbi5mcm9tT2JqZWN0KVxuICAgICAgLm1hcCgocCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBwLmFzT2JqZWN0KHsgbWluaWZ5OiB0cnVlIH0pO1xuICAgICAgICB0YXJnZXQuZGVwYXJ0bWVudCA9IHAuZGVwYXJ0bWVudD8uYXNPYmplY3QoKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgcmVjaXBpZW50RmlsdGVyID0gUGVyc29uRmlsdGVyLmZyb21PYmplY3QodGhpcy5maWx0ZXIpO1xuICAgIGNvbnN0IGNhblJlY2lwaWVudEZpbHRlciA9ICFyZWNpcGllbnRGaWx0ZXIuaXNFbXB0eSgpICYmICh0aGlzLmFjY291bnRTZXJ2aWNlLmlzQWRtaW4oKSB8fCB0aGlzLmFjY291bnRTZXJ2aWNlLmlzU3VwZXJ2aXNvcigpKTtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZS5vcGVuQ29tcG9zZU1vZGFsKHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIsIHNvcnRCeSwgc29ydERpcmVjdGlvbikgPT4gdGhpcy5kYXRhU2VydmljZS5zdWdnZXN0KHZhbHVlLCBmaWx0ZXIsIHNvcnRCeSwgc29ydERpcmVjdGlvbiksXG4gICAgICBjYW5SZWNpcGllbnRGaWx0ZXIsXG4gICAgICByZWNpcGllbnRGaWx0ZXJDb3VudDogdGhpcy50b3RhbFJvd0NvdW50LFxuICAgICAgZGF0YTogTWVzc2FnZS5mcm9tT2JqZWN0KHtcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgcmVjaXBpZW50RmlsdGVyLFxuICAgICAgfSksXG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc3RvcmVDb21wYWN0TW9kZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMudXNlUGFnZVNldHRpbmdzIHx8IGlzTmlsT3JCbGFuayh0aGlzLnNldHRpbmdzSWQpIHx8IGlzTm90TmlsKHRoaXMuY29tcGFjdCkpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbXBhY3QgPSB0b0Jvb2xlYW4oXG4gICAgICB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIFRBQkxFX1NFVFRJTkdTX0VOVU0uQ09NUEFDVF9ST1dTX0tFWSksXG4gICAgICB0b0Jvb2xlYW4odGhpcy5jb21wYWN0LCB0aGlzLmRlZmF1bHRDb21wYWN0KVxuICAgICk7XG4gICAgaWYgKHRoaXMuY29tcGFjdCAhPT0gY29tcGFjdCkge1xuICAgICAgdGhpcy5jb21wYWN0ID0gY29tcGFjdDtcblxuICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUNvbXBhY3RNb2RlKCkge1xuICAgIHRoaXMuY29tcGFjdCA9ICF0aGlzLmNvbXBhY3Q7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEByeC1hbmd1bGFyL25vLWV4cGxpY2l0LWNoYW5nZS1kZXRlY3Rpb24tYXBpc1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgaWYgKHRoaXMudXNlUGFnZVNldHRpbmdzICYmIGlzTm90TmlsT3JCbGFuayh0aGlzLnNldHRpbmdzSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQYWdlU2V0dGluZ3ModGhpcy5jb21wYWN0LCBUQUJMRV9TRVRUSU5HU19FTlVNLkNPTVBBQ1RfUk9XU19LRVkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4cG9ydFRvQ3N2KGV2ZW50OiBFdmVudCkge1xuICAgIC8vIFByZXBhcmUgQ1NWIG9wdGlvbnNcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBDc3ZVdGlscy5nZXRMb2NhbGl6ZWRTZXBhcmF0b3IodGhpcy50cmFuc2xhdGUpO1xuICAgIGNvbnN0IGVuY29kaW5nID0gQ3N2VXRpbHMuZ2V0TG9jYWxpemVkRW5jb2RpbmcodGhpcy50cmFuc2xhdGUpO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoW1xuICAgICAgJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTicsXG4gICAgICAnVVNFUi5MSVNULlRJVExFJyxcbiAgICAgICdVU0VSLkVNQUlMJyxcbiAgICAgICdVU0VSLkZJUlNUX05BTUUnLFxuICAgICAgJ1VTRVIuTEFTVF9OQU1FJyxcbiAgICAgICdVU0VSLlVTRVJOQU1FJyxcbiAgICAgICdVU0VSLlVTRVJOQU1FX0VYVFJBTkVUJyxcbiAgICAgICdVU0VSLkRFUEFSVE1FTlRfTEFCRUwnLFxuICAgICAgJ1VTRVIuREVQQVJUTUVOVF9OQU1FJyxcbiAgICAgICdVU0VSLlBST0ZJTEUnLFxuICAgICAgJ1VTRVIuU1RBVFVTJyxcbiAgICAgICdVU0VSLlBVQktFWScsXG4gICAgICAuLi4odGhpcy5hZGRpdGlvbmFsRmllbGRzIHx8IFtdKS5tYXAoKGZpZWxkKSA9PiBmaWVsZC5sYWJlbCksXG4gICAgICAnVVNFUi5DUkVBVElPTl9EQVRFJyxcbiAgICAgICdVU0VSLlVQREFURV9EQVRFJyxcbiAgICAgIC4uLnRoaXMuc3RhdHVzTGlzdC5tYXAoKHN0YXR1cykgPT4gc3RhdHVzLmxhYmVsKSxcbiAgICBdKTtcbiAgICBjb25zdCBkYXRlVGltZVBhdHRlcm4gPSB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5EQVRFX1RJTUVfUEFUVEVSTiddO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gdHJhbnNsYXRpb25zWydVU0VSLkxJU1QuVElUTEUnXSArICcuY3N2JztcbiAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgdHJhbnNsYXRpb25zWydVU0VSLkVNQUlMJ10sXG4gICAgICB0cmFuc2xhdGlvbnNbJ1VTRVIuRklSU1RfTkFNRSddLFxuICAgICAgdHJhbnNsYXRpb25zWydVU0VSLkxBU1RfTkFNRSddLFxuICAgICAgLi4uKHRoaXMuc2hvd1VzZXJuYW1lQ29sdW1uID8gW3RyYW5zbGF0aW9uc1snVVNFUi5VU0VSTkFNRSddXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLnNob3dVc2VybmFtZUV4dHJhbmV0Q29sdW1uID8gW3RyYW5zbGF0aW9uc1snVVNFUi5VU0VSTkFNRV9FWFRSQU5FVCddXSA6IFtdKSxcbiAgICAgIHRyYW5zbGF0aW9uc1snVVNFUi5QUk9GSUxFJ10sXG4gICAgICB0cmFuc2xhdGlvbnNbJ1VTRVIuU1RBVFVTJ10sXG4gICAgICB0cmFuc2xhdGlvbnNbJ1VTRVIuUFVCS0VZJ10sXG4gICAgICAuLi4odGhpcy5hZGRpdGlvbmFsRmllbGRzIHx8IFtdKS5tYXAoKGZpZWxkKSA9PiB0cmFuc2xhdGlvbnNbZmllbGQubGFiZWxdKSxcbiAgICAgIHRyYW5zbGF0aW9uc1snVVNFUi5DUkVBVElPTl9EQVRFJ10sXG4gICAgICB0cmFuc2xhdGlvbnNbJ1VTRVIuVVBEQVRFX0RBVEUnXSxcbiAgICBdO1xuXG4gICAgY29uc3QgYWRkaXRpb25hbEZpZWxkc0ZucyA9ICh0aGlzLmFkZGl0aW9uYWxGaWVsZHMgfHwgW10pLm1hcChGb3JtRmllbGREZWZpbml0aW9uVXRpbHMuZ2V0RGlzcGxheVZhbHVlRm4pO1xuXG4gICAgY29uc3Qgcm93cyA9ICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkgPyB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpIDogdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpXG4gICAgICAubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LmN1cnJlbnREYXRhKVxuICAgICAgLm1hcCgocGVyc29uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuc3RhdHVzQnlJZFtwZXJzb24uc3RhdHVzSWRdO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHBlcnNvbi5sYXN0TmFtZSxcbiAgICAgICAgICBwZXJzb24uZmlyc3ROYW1lLFxuICAgICAgICAgIHBlcnNvbi5lbWFpbCxcbiAgICAgICAgICAuLi4odGhpcy5zaG93VXNlcm5hbWVDb2x1bW4gPyBbcGVyc29uLnVzZXJuYW1lXSA6IFtdKSxcbiAgICAgICAgICAuLi4odGhpcy5zaG93VXNlcm5hbWVFeHRyYW5ldENvbHVtbiA/IFtwZXJzb24udXNlcm5hbWVFeHRyYW5ldF0gOiBbXSksXG4gICAgICAgICAgcGVyc29uLm1haW5Qcm9maWxlLFxuICAgICAgICAgIHN0YXR1cyA/IHRyYW5zbGF0aW9uc1tzdGF0dXM/LmxhYmVsXSA6IG51bGwsXG4gICAgICAgICAgcGVyc29uLnB1YmtleSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsRmllbGRzRm5zLm1hcCgoZGlzcGxheUZuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRQcm9wZXJ0eUJ5UGF0aChwZXJzb24sIHRoaXMuYWRkaXRpb25hbEZpZWxkc1tpbmRleF0ua2V5KTtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1t1c2Vyc10gQWRkaXRpb25hbCBmaWVsZCBkaXNwbGF5Rm4nLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZGlzcGxheUZuKHZhbHVlKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBmcm9tRGF0ZUlTT1N0cmluZyhwZXJzb24uY3JlYXRpb25EYXRlKS5mb3JtYXQoZGF0ZVRpbWVQYXR0ZXJuKSxcbiAgICAgICAgICBmcm9tRGF0ZUlTT1N0cmluZyhwZXJzb24udXBkYXRlRGF0ZSkuZm9ybWF0KGRhdGVUaW1lUGF0dGVybiksXG4gICAgICAgIF07XG4gICAgICB9KTtcblxuICAgIENzdlV0aWxzLmV4cG9ydFRvRmlsZShyb3dzLCB7IGZpbGVuYW1lLCBoZWFkZXJzLCBzZXBhcmF0b3IsIGVuY29kaW5nIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRldlRvZ2dsZURlYnVnKCkge1xuICAgIHRoaXMuZGVidWcgPSAhdGhpcy5kZWJ1ZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvbm8tZXhwbGljaXQtY2hhbmdlLWRldGVjdGlvbi1hcGlzXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICBpZiAodGhpcy51c2VQYWdlU2V0dGluZ3MgJiYgaXNOb3ROaWxPckJsYW5rKHRoaXMuc2V0dGluZ3NJZCkpIGF3YWl0IHRoaXMuc2F2ZVBhZ2VTZXR0aW5ncyh0aGlzLmRlYnVnLCAnZGVidWcnKTtcbiAgfVxuXG4gIGdldERpc3BsYXlWYWx1ZUZuID0gRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzLmdldERpc3BsYXlWYWx1ZUZuO1xufVxuIiwiPGFwcC10b29sYmFyXG4gIFt0aXRsZV09XCIodGl0bGUgfHwgJ1VTRVIuTElTVC5USVRMRScpIHwgdHJhbnNsYXRlXCJcbiAgY29sb3I9XCJwcmltYXJ5XCJcbiAgW2NhbkdvQmFja109XCJmYWxzZVwiXG4gIFtjbGFzcy5jZGstdmlzaWJsZS1oaWRkZW5dPVwiIXNob3dUb29sYmFyXCJcbiAgW2hhc1ZhbGlkYXRlXT1cIihsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSAhPT0gdHJ1ZSAmJiAoZGlydHlTdWJqZWN0IHwgYXN5bmMpID09PSB0cnVlXCJcbiAgKG9uVmFsaWRhdGUpPVwic2F2ZSgpXCJcbj5cbiAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICA8IS0tIENvbXBvc2UgbWVzc2FnZSAtLT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VcIlxuICAgICAgW3RpdGxlXT1cIidVU0VSLkxJU1QuQlROX1NFTkRfTUVTU0FHRScgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cIm9wZW5Db21wb3NlTWVzc2FnZU1vZGFsKCRldmVudClcIlxuICAgID5cbiAgICAgIDxpb24taWNvbiBuYW1lPVwibWFpbFwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgQGlmIChzZWxlY3Rpb24gfCBpc0VtcHR5U2VsZWN0aW9uKSB7XG4gICAgICA8IS0tIEFkZCAtLT5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiY2FuRWRpdCAmJiAhbW9iaWxlXCIgW3RpdGxlXT1cIidDT01NT04uQlROX0FERCcgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiYWRkUm93KClcIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPCEtLSBSZWZyZXNoIC0tPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCIhbW9iaWxlXCIgW3RpdGxlXT1cIidDT01NT04uQlROX1JFRlJFU0gnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVtaXRSZWZyZXNoKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDwhLS0gcmVzZXQgZmlsdGVyIC0tPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIiAqbmdJZj1cImZpbHRlckNyaXRlcmlhQ291bnRcIj5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwiYWNjZW50XCI+ZmlsdGVyX2xpc3RfYWx0PC9tYXQtaWNvbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1zZWNvbmRhcnlcIiBzdHlsZT1cImxlZnQ6IDE2cHg7IHRvcDogNXB4OyBmb250LXdlaWdodDogYm9sZFwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8IS0tIHNob3cgZmlsdGVyIC0tPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImZpbHRlckV4cGFuc2lvblBhbmVsLnRvZ2dsZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICpuZ0lmPVwiZmlsdGVyQ3JpdGVyaWFDb3VudDsgZWxzZSBlbXB0eUZpbHRlclwiXG4gICAgICAgICAgW21hdEJhZGdlXT1cImZpbHRlckNyaXRlcmlhQ291bnRcIlxuICAgICAgICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYWZ0ZXJcIlxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgICAgZmlsdGVyX2xpc3RfYWx0XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXI+XG4gICAgICAgICAgPG1hdC1pY29uPmZpbHRlcl9saXN0X2FsdDwvbWF0LWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDwhLS0gZGVsZXRlIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgY2xhc3M9XCJoaWRkZW4teHMgaGlkZGVuLXNtXCJcbiAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwiZGVsZXRlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cblxuICAgIEBpZiAoIW1vYmlsZSAmJiAoY2FuRG93bmxvYWQgfHwgY2FuRGVidWcpKSB7XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fT1BUSU9OUycgfCB0cmFuc2xhdGVcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidG9vbGJhck9wdGlvbnNNZW51XCI+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L2lvbi1idXR0b25zPlxuPC9hcHAtdG9vbGJhcj5cblxuPCEtLSBUb29sYmFyIG9wdGlvbiBtZW51IC0tPlxuPG1hdC1tZW51ICN0b29sYmFyT3B0aW9uc01lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYWZ0ZXJcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuICA8IS0tIGV4cG9ydCBidXR0b24gLS0+XG4gIEBpZiAoY2FuRG93bmxvYWQpIHtcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cG9ydFRvQ3N2KCRldmVudClcIj5cbiAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5GSUxFLkNTVi5CVE5fRE9XTkxPQURfSEVMUDwvaW9uLWxhYmVsPlxuICAgIDwvYnV0dG9uPlxuICB9XG5cbiAgPCEtLSBEZWJ1ZyBvbmx5OiBUZXN0IHNlbGVjdCB1c2VycyBtb2RhbCAtLT5cbiAgQGlmIChjYW5EZWJ1Zykge1xuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCIgKG1vdXNlZW50ZXIpPVwibWVudVRyaWdnZXIub3Blbk1lbnUoKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJkZWJ1Z01lbnVcIj5cbiAgICAgIDxtYXQtaWNvbj48aW9uLWljb24gbmFtZT1cImJ1Z1wiPjwvaW9uLWljb24+PC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5ERUJVRy5CVE5fREVCVUdfRE9UUzwvaW9uLWxhYmVsPlxuICAgIDwvYnV0dG9uPlxuICB9XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48IS0tIGRlYnVnIG1lbnUgLS0+XG48bWF0LW1lbnUgI2RlYnVnTWVudT1cIm1hdE1lbnVcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJkZXZUb2dnbGVEZWJ1ZygpXCI+XG4gICAgICA8bWF0LWljb24+e3sgZGVidWcgPyAnY2hlY2tfYm94JyA6ICdjaGVja19ib3hfb3V0bGluZV9ibGFuaycgfX08L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkRFQlVHLkJUTl9FTkFCTEVfREVCVUc8L2lvbi1sYWJlbD5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gIDwhLS0gZXJyb3IgLS0+XG4gIDxpb24taXRlbVxuICAgICpuZ0lmPVwibW9iaWxlICYmIChlcnJvclN1YmplY3QgfCBhc3luYyk7IGxldCBlcnJvclwiXG4gICAgbGluZXM9XCJub25lXCJcbiAgICBjbGFzcz1cImhpZGRlbi1zbSBoaWRkZW4teHMgaGlkZGVuLW1vYmlsZVwiXG4gICAgQHNsaWRlVXBEb3duQW5pbWF0aW9uXG4gID5cbiAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJlcnJvclwiIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgPC9pb24taXRlbT5cblxuICA8IS0tIGRlYnVnIC0tPlxuICA8YXBwLWRlYnVnICpuZ0lmPVwiZGVidWdcIj5cbiAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIGZvY3VzQ29sdW1uOiB7eyBmb2N1c0NvbHVtbiB9fVxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIGxvYWRpbmdTdWJqZWN0OiB7eyBsb2FkaW5nIH19XG4gICAgICAgICAgPGJyIC8+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICA8L2lvbi1ncmlkPlxuICA8L2FwcC1kZWJ1Zz5cblxuICA8IS0tIHNlYXJjaCAtLT5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgI2ZpbHRlckV4cGFuc2lvblBhbmVsIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgZmlsdGVyLXBhbmVsIGZpbHRlci1wYW5lbC1mbG9hdGluZ1wiPlxuICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1jb250YWluZXIgaW9uLXBhZGRpbmdcIiBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIiAobmdTdWJtaXQpPVwiZW1pdFJlZnJlc2goKVwiPlxuICAgICAgPGlvbi1ncmlkPlxuICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgIDwhLS0gc2VhcmNoIC0tPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdVU0VSLkxJU1QuRklMVEVSLlNFQVJDSCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFRleHRcIiAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyQ29udHJvbFZhbHVlKCRldmVudCwgZmlsdGVyRm9ybS5jb250cm9scy5zZWFyY2hUZXh0KVwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWx0ZXJGb3JtLmNvbnRyb2xzLnNlYXJjaFRleHQuZGlzYWJsZWQgfHwgIWZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoVGV4dC52YWx1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICA8IS0tIHN0YXR1cyAtLT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnVVNFUi5TVEFUVVMnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInN0YXR1c0lkXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm51bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpPjxzcGFuIHRyYW5zbGF0ZT5DT01NT04uRU1QVFlfT1BUSU9OPC9zcGFuPjwvaT5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3RhdHVzTGlzdFwiIFt2YWx1ZV09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyQ29udHJvbFZhbHVlKCRldmVudCwgZmlsdGVyRm9ybS5jb250cm9scy5zdGF0dXNJZClcIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmlsdGVyRm9ybS5jb250cm9scy5zdGF0dXNJZC5kaXNhYmxlZCB8fCAhZmlsdGVyRm9ybS5jb250cm9scy5zdGF0dXNJZC52YWx1ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICA8IS0tIHVzZXIgcHJvZmlsZXMgLS0+XG4gICAgICAgICAgICA8bWF0LWNoaXBzLWZpZWxkXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzZXJQcm9maWxlc1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVVNFUi5QUk9GSUxFUycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBjaGlwQ29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwidXNlclByb2ZpbGVMaXN0XCJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlBdHRyaWJ1dGVzXT1cIlsnbmFtZSddXCJcbiAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8L21hdC1jaGlwcy1maWVsZD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICA8IS0tIEFkZGl0aW9uYWwgZmllbGRzIGZpbHRlcnMgLS0+XG4gICAgICAgIDxpb24tcm93ICpuZ0lmPVwiZmlsdGVyYWJsZUFkZGl0aW9uYWxGaWVsZHMgJiYgZmlsdGVyYWJsZUFkZGl0aW9uYWxGaWVsZHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxpb24tY29sICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWx0ZXJhYmxlQWRkaXRpb25hbEZpZWxkc1wiIHNpemU9XCIxMlwiIHNpemUtbWQ9XCI2XCIgc2l6ZS1sZz1cIjRcIj5cbiAgICAgICAgICAgIDxhcHAtZm9ybS1maWVsZFxuICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cImF1dG9cIj5cbiAgICAgICAgICAgIDwvYXBwLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICA8L2lvbi1ncmlkPlxuICAgIDwvZm9ybT5cblxuICAgIDxtYXQtYWN0aW9uLXJvdz5cbiAgICAgIDwhLS0gQ291bnRlciAgLS0+XG4gICAgICA8aW9uLWxhYmVsXG4gICAgICAgIFtoaWRkZW5dPVwiKGxvYWRpbmdTdWJqZWN0IHwgYXN5bmMpID09PSB0cnVlIHx8IGZpbHRlckZvcm0uZGlydHlcIlxuICAgICAgICBbY29sb3JdPVwiZW1wdHkgJiYgJ2RhbmdlcidcIlxuICAgICAgICBjbGFzcz1cImlvbi1wYWRkaW5nXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICAodG90YWxSb3dDb3VudCA/ICdDT01NT04uUkVTVUxUX0NPVU5UJyA6ICdDT01NT04uTk9fUkVTVUxUJylcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgY291bnQ6ICh0b3RhbFJvd0NvdW50IHwgbnVtYmVyRm9ybWF0KSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA8L2lvbi1sYWJlbD5cblxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItc3BhY2VyXCI+PC9kaXY+XG5cbiAgICAgIDwhLS0gQ2xvc2UgcGFuZWwgLS0+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIChjbGljayk9XCJmaWx0ZXJFeHBhbnNpb25QYW5lbC5jbG9zZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgPlxuICAgICAgICA8aW9uLXRleHQgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0xPU0U8L2lvbi10ZXh0PlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8IS0tIFNlYXJjaCBidXR0b24gLS0+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIFtjb2xvcl09XCJmaWx0ZXJGb3JtLmRpcnR5ID8gJ3RlcnRpYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgIFtmaWxsXT1cImZpbHRlckZvcm0uZGlydHkgPyAnc29saWQnIDogJ2NsZWFyJ1wiXG4gICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlckFuZENsb3NlUGFuZWwoJGV2ZW50KVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nU3ViamVjdCB8IGFzeW5jXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi10ZXh0IHRyYW5zbGF0ZT5DT01NT04uQlROX0FQUExZPC9pb24tdGV4dD5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L21hdC1hY3Rpb24tcm93PlxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgPCEtLSBlcnJvciAtLT5cbiAgQGlmIChtb2JpbGUgJiYgKGVycm9yU3ViamVjdCB8IGFzeW5jKTsgYXMgZXJyb3IpIHtcbiAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImVycm9yXCIgW2lubmVySFRNTF09XCJlcnJvciB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWl0ZW0+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCIgW2NsYXNzLmhhcy10b29sYmFyXT1cInNob3dUb29sYmFyXCJcbiAgICAgICBbY2xhc3MuaGFzLXBhZ2luYXRvcl09XCJzaG93UGFnaW5hdG9yXCIgW2NsYXNzLmhhcy1mb3JtLWJ1dHRvbnNdPVwic2hvd0Zvcm1CdXR0b25zXCI+XG4gICAgPHRhYmxlXG4gICAgICAjdGFibGVcbiAgICAgIG1hdC10YWJsZVxuICAgICAgbWF0U29ydFxuICAgICAgW2NsYXNzLmNvbXBhY3RdPVwiY29tcGFjdFwiXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICAgIFttYXRTb3J0QWN0aXZlXT1cImRlZmF1bHRTb3J0QnlcIlxuICAgICAgW21hdFNvcnREaXJlY3Rpb25dPVwiZGVmYXVsdFNvcnREaXJlY3Rpb25cIlxuICAgICAgbWF0U29ydERpc2FibGVDbGVhclxuICAgICAgW3RyYWNrQnldPVwidHJhY2tCeUZuXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdFwiIFtzdGlja3ldPVwic3RpY2t5XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIWlubGluZUVkaXRpb25cIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJ0aGlzIHwgaXNBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0aGlzIHwgaXNOb3RBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIWlubGluZUVkaXRpb25cIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCJ0b2dnbGVTZWxlY3RSb3coJGV2ZW50LCByb3cpXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uIHwgaXNTZWxlY3RlZDogcm93XCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJZCBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImlkXCIgW3N0aWNreV09XCJzdGlja3lcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbD4jPC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsPnt7IHJvdy5jdXJyZW50RGF0YS5pZCB9fTwvaW9uLWxhYmVsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gYXZhdGFyIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYXZhdGFyXCIgW3N0aWNreV09XCJzdGlja3lcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPGlvbi1hdmF0YXIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3doaXRlJ1wiPlxuICAgICAgICAgICAgQGlmIChyb3cuY3VycmVudERhdGEuYXZhdGFyOyBhcyBhdmF0YXJVcmwpIHtcbiAgICAgICAgICAgICAgPGlvbi1pbWcgW3NyY109XCJhdmF0YXJVcmxcIj48L2lvbi1pbWc+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiBbZGF0YS1qZGVudGljb24tdmFsdWVdPVwicm93LmN1cnJlbnREYXRhLmlkXCI+PC9zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tYXZhdGFyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gbGFzdE5hbWUgIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJsYXN0TmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VVNFUi5MQVNUX05BTUU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwiZm9jdXNDb2x1bW4gPSAnbGFzdE5hbWUnXCI+XG4gICAgICAgICAgQGlmIChyb3cuZWRpdGluZykge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydsYXN0TmFtZSddXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuTEFTVF9OQU1FJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJyb3cuZWRpdGluZyAmJiBmb2N1c0NvbHVtbiA9PT0gJ2xhc3ROYW1lJ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydsYXN0TmFtZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snbGFzdE5hbWUnXS5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IDIgfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlvbi1sYWJlbCBhcHBBdXRvVGl0bGU+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICdsYXN0TmFtZScgfX1cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGZpcnN0bmFtZSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZmlyc3ROYW1lXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5VU0VSLkZJUlNUX05BTUU8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwiZm9jdXNDb2x1bW4gPSAnZmlyc3ROYW1lJ1wiPlxuICAgICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZmlyc3ROYW1lJ11cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVVNFUi5GSVJTVF9OQU1FJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJyb3cuZWRpdGluZyAmJiBmb2N1c0NvbHVtbiA9PT0gJ2ZpcnN0TmFtZSdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZmlyc3ROYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgRVJST1IuRklFTERfUkVRVUlSRURcbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydmaXJzdE5hbWUnXS5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRVJST1IuRklFTERfTUlOX0xFTkdUSCcgfCB0cmFuc2xhdGU6IHsgcmVxdWlyZWRMZW5ndGg6IDIgfSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlvbi1sYWJlbCBhcHBBdXRvVGl0bGU+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICdmaXJzdE5hbWUnIH19XG4gICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBlbWFpbCAgLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImVtYWlsXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5VU0VSLkVNQUlMPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgKGNsaWNrKT1cImZvY3VzQ29sdW1uID0gJ2VtYWlsJ1wiPlxuICAgICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZW1haWwnXVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVU0VSLkVNQUlMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJyb3cuZWRpdGluZyAmJiBmb2N1c0NvbHVtbiA9PT0gJ2VtYWlsJ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydlbWFpbCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9sc1snZW1haWwnXS5oYXNFcnJvcignZW1haWwnKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfRU1BSUw8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPlxuICAgICAgICAgICAgICB7eyByb3cudmFsaWRhdG9yIHwgZm9ybUdldFZhbHVlOiAnZW1haWwnIH19XG4gICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBhZGRpdGlvbmFsIGZpZWxkcyAtLT5cbiAgICAgIEBmb3IgKGRlZmluaXRpb24gb2YgYWRkaXRpb25hbEZpZWxkczsgdHJhY2sgZGVmaW5pdGlvbi5rZXkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImRlZmluaXRpb24ua2V5XCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGRlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgKGNsaWNrKT1cImZvY3VzQ29sdW1uID0gZGVmaW5pdGlvbi5rZXlcIj5cbiAgICAgICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICAgICAgPGFwcC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJkZWZpbml0aW9uXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9sc1tkZWZpbml0aW9uLmtleV1cIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJkZWZpbml0aW9uLmV4dHJhPy51c2Vycz8ucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwicm93LmVkaXRpbmcgJiYgZm9jdXNDb2x1bW4gPT09IGRlZmluaXRpb24ua2V5XCJcbiAgICAgICAgICAgICAgPjwvYXBwLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPnt7IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6IGRlZmluaXRpb24ua2V5IHwgZGlzcGxheVdpdGg6IGdldERpc3BsYXlWYWx1ZUZuKGRlZmluaXRpb24pIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gcHJvZmlsZSBjb2x1bW4gIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwcm9maWxlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuUFJPRklMRTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIChjbGljayk9XCJmb2N1c0NvbHVtbiA9ICdwcm9maWxlJ1wiPlxuICAgICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvciB8IGZvcm1HZXRDb250cm9sOiAnbWFpblByb2ZpbGUnXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1VTRVIuUFJPRklMRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJvZmlsZXNcIiBbdmFsdWVdPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAge3sgJ1VTRVIuUFJPRklMRV9FTlVNLicgKyBpdGVtIHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydtYWluUHJvZmlsZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBsZXQgcHJvZmlsZSA9IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICdtYWluUHJvZmlsZSc7XG4gICAgICAgICAgICBAaWYgKHByb2ZpbGUpIHtcbiAgICAgICAgICAgICAgPGlvbi1sYWJlbCBhcHBBdXRvVGl0bGU+e3sgJ1VTRVIuUFJPRklMRV9FTlVNLicgKyBwcm9maWxlIHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBTdGF0dXMgY29sdW1uICAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdHVzXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuU1RBVFVTPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgKGNsaWNrKT1cImZvY3VzQ29sdW1uID0gJ3N0YXR1cydcIj5cbiAgICAgICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgICAgICBAbGV0IGNvbnRyb2wgPSByb3cudmFsaWRhdG9yIHwgZm9ybUdldENvbnRyb2w6ICdzdGF0dXNJZCc7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUkVGRVJFTlRJQUwuU1RBVFVTJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250cm9sLnZhbHVlID49IDBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc3RhdHVzQnlJZFtjb250cm9sLnZhbHVlXT8ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHN0YXR1c0xpc3Q7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj48aW9uLWljb24gW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBsZXQgc3RhdHVzSWQgPSByb3cudmFsaWRhdG9yIHwgZm9ybUdldFZhbHVlOiAnc3RhdHVzSWQnO1xuICAgICAgICAgICAgQGlmIChzdGF0dXNJZCA+PSAwKSB7XG4gICAgICAgICAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPlxuICAgICAgICAgICAgICAgIHt7IChzdGF0dXNCeUlkIHwgbWFwR2V0OiBzdGF0dXNJZCk/LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIHVzZXJuYW1lIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ1c2VybmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VVNFUi5VU0VSTkFNRTwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIChjbGljayk9XCJmb2N1c0NvbHVtbiA9ICd1c2VybmFtZSdcIj5cbiAgICAgICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInJvdy52YWxpZGF0b3IuY29udHJvbHMudXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVVNFUi5VU0VSTkFNRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhcm93LmVkaXRpbmdcIlxuICAgICAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwicm93LmVkaXRpbmcgJiYgZm9jdXNDb2x1bW4gPT09ICd1c2VybmFtZSdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9scy51c2VybmFtZS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICBFUlJPUi5GSUVMRF9SRVFVSVJFRFxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8aW9uLWxhYmVsIGFwcEF1dG9UaXRsZT5cbiAgICAgICAgICAgICAge3sgcm93LnZhbGlkYXRvciB8IGZvcm1HZXRWYWx1ZTogJ3VzZXJuYW1lJyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gdXNlcm5hbWUgZXh0cmFuZXQgLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVzZXJuYW1lRXh0cmFuZXRcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVTRVIuVVNFUk5BTUVfRVhUUkFORVQ8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwiZm9jdXNDb2x1bW4gPSAndXNlcm5hbWVFeHRyYW5ldCdcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJyb3cuZWRpdGluZzsgZWxzZSByZWFkb25seUNlbGxcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvci5jb250cm9scy51c2VybmFtZUV4dHJhbmV0XCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVU0VSLlVTRVJOQU1FX0VYVFJBTkVUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCIhcm93LmVkaXRpbmdcIlxuICAgICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cInJvdy5lZGl0aW5nICYmIGZvY3VzQ29sdW1uID09PSAndXNlcm5hbWVFeHRyYW5ldCdcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzLnVzZXJuYW1lRXh0cmFuZXQuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIEVSUk9SLkZJRUxEX1JFUVVJUkVEXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlDZWxsPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBhcHBBdXRvVGl0bGU+XG4gICAgICAgICAgICAgIHt7IHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICd1c2VybmFtZUV4dHJhbmV0JyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIHB1YmtleSAgLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInB1YmtleVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VVNFUi5QVUJLRVk8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgICBbdGl0bGVdPVwicm93LnZhbGlkYXRvci5jb250cm9scy5wdWJrZXkudmFsdWVDaGFuZ2VzIHwgYXN5bmNcIlxuICAgICAgICAgIChjbGljayk9XCJmb2N1c0NvbHVtbiA9ICdwdWJrZXknXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInJvdy5lZGl0aW5nOyBlbHNlIHJlYWRvbmx5Q2VsbFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyb3cudmFsaWRhdG9yLmNvbnRyb2xzWydwdWJrZXknXVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVVNFUi5QVUJLRVknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInJvdy52YWxpZGF0b3IuY29udHJvbHMucHVia2V5Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBFUlJPUi5GSUVMRF9SRVFVSVJFRFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LnZhbGlkYXRvci5jb250cm9scy5wdWJrZXkuaGFzRXJyb3IoJ3B1YmtleScpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZPC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5Q2VsbD5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPlxuICAgICAgICAgICAgICB7eyByb3cudmFsaWRhdG9yIHwgZm9ybUdldFZhbHVlOiAncHVia2V5JyB9fVxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIENyZWF0aW9uIGRhdGUgY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjcmVhdGlvbkRhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+VVNFUi5DUkVBVElPTl9EQVRFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLXRleHQtZW5kXCIgY29sb3I9XCJtZWRpdW1cIiAqbmdJZj1cInJvdy5pZCAhPT0gLTFcIj5cbiAgICAgICAgICAgIHt7IHJvdy5jdXJyZW50RGF0YS5jcmVhdGlvbkRhdGUgfCBkYXRlRm9ybWF0OiB7IHRpbWU6IHRydWUgfSB9fVxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBVcGRhdGUgZGF0ZSBjb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVwZGF0ZURhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+VVNFUi5VUERBVEVfREFURTwvaW9uLWxhYmVsPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZFwiPlxuICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi10ZXh0LWVuZFwiIGNvbG9yPVwibWVkaXVtXCIgKm5nSWY9XCJyb3cuaWQgIT09IC0xXCI+XG4gICAgICAgICAgICB7eyByb3cuY3VycmVudERhdGEudXBkYXRlRGF0ZSB8IGRhdGVGb3JtYXQ6IHsgdGltZTogdHJ1ZSB9IH19XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEFjdGlvbnMgYnV0dG9ucyBjb2x1bW4gLS0+XG4gICAgICA8YXBwLWFjdGlvbnMtY29sdW1uXG4gICAgICAgIFtzdGlja3lFbmRdPVwic3RpY2t5RW5kXCJcbiAgICAgICAgKGNhbmNlbE9yRGVsZXRlQ2xpY2spPVwiY2FuY2VsT3JEZWxldGUoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgIChjb25maXJtRWRpdENyZWF0ZUNsaWNrKT1cImNvbmZpcm1FZGl0Q3JlYXRlKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAoY29uZmlybUFuZEFkZENsaWNrKT1cImNvbmZpcm1BbmRBZGQoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgIChiYWNrd2FyZCk9XCJjb25maXJtQW5kQmFja3dhcmQoJGV2ZW50LmV2ZW50LCAkZXZlbnQucm93KVwiXG4gICAgICAgIChmb3J3YXJkKT1cImNvbmZpcm1BbmRGb3J3YXJkKCRldmVudC5ldmVudCwgJGV2ZW50LnJvdylcIlxuICAgICAgICBbY2FuQ2FuY2VsXT1cImZhbHNlXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSB0YWJsZSBvcHRpb25zIG1lbnUgLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXRIZWFkZXJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fT1BUSU9OUycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0YWJsZU9wdGlvbnNNZW51XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvYXBwLWFjdGlvbnMtY29sdW1uPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG4gICAgICA8dHJcbiAgICAgICAgbWF0LXJvd1xuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiXG4gICAgICAgIFtjbGFzcy5tYXQtcm93LWVycm9yXT1cInJvdy52YWxpZGF0b3IuaW52YWxpZFwiXG4gICAgICAgIFtjbGFzcy5tYXQtcm93LWRpcnR5XT1cInJvdy5jdXJyZW50RGF0YS5kaXJ0eVwiXG4gICAgICAgIFtjbGFzcy5tYXQtcm93LWRpc2FibGVkXT1cIiFyb3cuZWRpdGluZ1wiXG4gICAgICAgIFtjbGFzcy5tYXQtbWRjLXJvdy1zZWxlY3RlZF09XCJyb3cuZWRpdGluZyB8fCAoIWNhbkVkaXQgJiYgc2VsZWN0aW9uIHwgaXNTZWxlY3RlZDogcm93KVwiXG4gICAgICAgIChjbGljayk9XCJjbGlja1JvdygkZXZlbnQsIHJvdylcIlxuICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiZXNjYXBlRWRpdGluZ1JvdygkZXZlbnQpXCJcbiAgICAgICAgW2Nka1RyYXBGb2N1c109XCIhcm93LnZhbGlkYXRvcj8udmFsaWRcIlxuICAgICAgPjwvdHI+XG4gICAgPC90YWJsZT5cblxuICAgIDwhLS0gRMOpY2xlbmNoZXVyIGludmlzaWJsZSBwb3VyIGxlIG1hdC1tZW51IC0tPlxuXG4gICAgQGlmIChsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSB7XG4gICAgICA8aW9uLWl0ZW0+XG4gICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBhbmltYXRlZD48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgPC9pb24taXRlbT5cbiAgICB9IEBlbHNlIGlmICh0b3RhbFJvd0NvdW50ID09PSAwKSB7XG4gICAgICA8aW9uLWl0ZW0+XG4gICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwidGV4dC1pdGFsaWNcIiB0cmFuc2xhdGU+Q09NTU9OLk5PX1JFU1VMVDwvaW9uLXRleHQ+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgIH1cbiAgPC9kaXY+XG48L2lvbi1jb250ZW50PlxuXG48IS0tIFRhYmxlIG9wdGlvbnMgbWVudSAtLT5cbjxtYXQtbWVudSAjdGFibGVPcHRpb25zTWVudT1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJhZnRlclwiPlxuICA8IS0tIGRpc3BsYXkgY29sdW1ucyAtLT5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuU2VsZWN0Q29sdW1uc01vZGFsKCRldmVudClcIj5cbiAgICA8bWF0LWljb24+dmlld19jb2x1bW48L21hdC1pY29uPlxuICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5ESVNQTEFZRURfQ09MVU1OU19ET1RTPC9pb24tbGFiZWw+XG4gIDwvYnV0dG9uPlxuXG4gIEBpZiAodXNlUGFnZVNldHRpbmdzKSB7XG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cbiAgICA8IS0tIENvbXBhY3QgbW9kZSAtLT5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInRvZ2dsZUNvbXBhY3RNb2RlKClcIj5cbiAgICAgIDxtYXQtaWNvbj57eyBjb21wYWN0ID8gJ2NoZWNrX2JveCcgOiAnY2hlY2tfYm94X291dGxpbmVfYmxhbmsnIH19PC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ09NUEFDVF9ST1dTPC9pb24tbGFiZWw+XG4gICAgPC9idXR0b24+XG4gIH1cbjwvbWF0LW1lbnU+XG5cbjxpb24tZm9vdGVyPlxuICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInNob3dQYWdpbmF0b3JcIlxuICAgIFtsZW5ndGhdPVwidG90YWxSb3dDb3VudFwiXG4gICAgW3BhZ2VTaXplXT1cImRlZmF1bHRQYWdlU2l6ZVwiXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJkZWZhdWx0UGFnZVNpemVPcHRpb25zXCJcbiAgICBzaG93Rmlyc3RMYXN0QnV0dG9uc1xuICA+PC9tYXQtcGFnaW5hdG9yPlxuXG4gIEBpZiAoc2hvd0Zvcm1CdXR0b25zKSB7XG4gICAgPGFwcC1mb3JtLWJ1dHRvbnMtYmFyXG4gICAgICAob25DYW5jZWwpPVwiY2FuY2VsKCRldmVudClcIlxuICAgICAgKG9uU2F2ZSk9XCJzYXZlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIihsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSA9PT0gdHJ1ZSB8fCAoZGlydHlTdWJqZWN0IHwgYXN5bmMpICE9PSB0cnVlXCJcbiAgICA+XG4gICAgICA8IS0tIGVycm9yIC0tPlxuICAgICAgPGlvbi1pdGVtICpuZ0lmPVwiZXJyb3JTdWJqZWN0IHwgYXN5bmM7IGxldCBlcnJvclwiIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBzbG90PVwic3RhcnRcIiBuYW1lPVwiYWxlcnQtY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9hcHAtZm9ybS1idXR0b25zLWJhcj5cbiAgfVxuPC9pb24tZm9vdGVyPlxuXG48aW9uLWZhYiBzbG90PVwiZml4ZWRcIiB2ZXJ0aWNhbD1cImJvdHRvbVwiIGhvcml6b250YWw9XCJlbmRcIiAqbmdJZj1cIm1vYmlsZVwiPlxuICA8aW9uLWZhYi1idXR0b24gY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJhZGRSb3coKVwiPlxuICAgIDxpb24taWNvbiBuYW1lPVwiYWRkXCI+PC9pb24taWNvbj5cbiAgPC9pb24tZmFiLWJ1dHRvbj5cbjwvaW9uLWZhYj5cbiJdfQ==
@@ -234,9 +234,9 @@ export class AppPropertiesTable extends AppInMemoryTable {
234
234
  applyFilterAndClosePanel(event) {
235
235
  const filter = this.filterForm.value;
236
236
  this.setFilter(filter, { emitEvent: false });
237
- this.emitRefresh(event);
238
- if (this.filterExpansionPanel && this.filterPanelFloating)
239
- this.filterExpansionPanel.close();
237
+ this.emitRefresh();
238
+ if (this.filterPanelFloating)
239
+ this.filterExpansionPanel?.close();
240
240
  }
241
241
  resetProperty(event, row) {
242
242
  event?.preventDefault();
@@ -261,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
261
261
  type: ViewChild,
262
262
  args: [MatExpansionPanel, { static: true }]
263
263
  }] } });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy50YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy50YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy50YWJsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVksS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUF5QixXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQXlELFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5HLE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEUsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVB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QUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO3dHQTVLVSxrQkFBa0IsZ0hBY25CLFdBQVc7NEZBZFYsa0JBQWtCLG1IQUhsQixDQUFDLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLGdGQU16RSxpQkFBaUIscUZDeEc5QixvMVBBb09BOzs0RkQvSGEsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLG1CQUNuRSx1QkFBdUIsQ0FBQyxNQUFNOzswQkFnQjVDLE1BQU07MkJBQUMsV0FBVzt5Q0FiWixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQzBDLG9CQUFvQjtzQkFBbkUsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBJbk1lbW9yeVRhYmxlIH0gZnJvbSAnLi4vLi4vdGFibGUvbWVtb3J5LXRhYmxlLmNsYXNzJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERpcmVjdGl2ZSwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSRVNFUlZFRF9FTkRfQ09MVU1OUywgUkVTRVJWRURfU1RBUlRfQ09MVU1OUyB9IGZyb20gJy4uLy4uL3RhYmxlL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IEluTWVtb3J5RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL21lbW9yeS1lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBFbnRpdHksIEVudGl0eUFzT2JqZWN0T3B0aW9ucywgRW50aXR5VXRpbHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQXBwVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRvci9iYXNlLnZhbGlkYXRvci5jbGFzcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXAgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBpc05vdE5pbCwgc3BsaXRCeVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlJztcbmltcG9ydCB7IEVudGl0eUNsYXNzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kZWwvZW50aXR5LmRlY29yYXRvcnMnO1xuaW1wb3J0IHsgRW50aXR5RmlsdGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kZWwvZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7IEZpbHRlckZuLCBQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwRm9ybVV0aWxzIH0gZnJvbSAnLi4vZm9ybS51dGlscyc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25QYW5lbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5cbkBFbnRpdHlDbGFzcyh7IHR5cGVuYW1lOiAnUHJvcGVydHlFbnRpdHknIH0pXG5leHBvcnQgY2xhc3MgUHJvcGVydHlFbnRpdHkgZXh0ZW5kcyBFbnRpdHk8UHJvcGVydHlFbnRpdHksIHN0cmluZz4gaW1wbGVtZW50cyBQcm9wZXJ0eSB7XG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpID0+IFByb3BlcnR5RW50aXR5O1xuXG4gIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24gPSBudWxsO1xuICB2YWx1ZTogYW55ID0gbnVsbDtcblxuICBnZXQga2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbj8ua2V5IHx8IHRoaXMuaWQ7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55KSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIHRoaXMuaWQgPSBzb3VyY2UuZGVmaW5pdGlvbj8ua2V5ID8/IHNvdXJjZS5rZXkgPz8gc291cmNlLmlkO1xuICAgIHRoaXMuZGVmaW5pdGlvbiA9IHNvdXJjZS5kZWZpbml0aW9uO1xuICAgIHRoaXMudmFsdWUgPSBzb3VyY2UudmFsdWU7XG4gIH1cblxuICBhc09iamVjdChvcHRzPzogRW50aXR5QXNPYmplY3RPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCB0YXJnZXQgPSBzdXBlci5hc09iamVjdChvcHRzKTtcbiAgICB0YXJnZXQuaWQgPSB0aGlzLmRlZmluaXRpb24ua2V5O1xuICAgIGRlbGV0ZSB0YXJnZXQuZGVmaW5pdGlvbjtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUVudGl0eUZpbHRlciBleHRlbmRzIEVudGl0eUZpbHRlcjxQcm9wZXJ0eUVudGl0eUZpbHRlciwgUHJvcGVydHlFbnRpdHk+IHtcbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2UsIG9wdHM/OiBhbnkpID0+IFByb3BlcnR5RW50aXR5RmlsdGVyO1xuXG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgbm90RGVmYXVsdE9ubHkgPSBmYWxzZTtcblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55KSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNvdXJjZS5zZWFyY2hUZXh0O1xuICAgIHRoaXMubm90RGVmYXVsdE9ubHkgPSBzb3VyY2Uubm90RGVmYXVsdE9ubHk7XG4gIH1cblxuICBhc09iamVjdChvcHRzPzogRW50aXR5QXNPYmplY3RPcHRpb25zKTogYW55IHtcbiAgICByZXR1cm4gc3VwZXIuYXNPYmplY3Qob3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRGaWx0ZXIoKTogRmlsdGVyRm48UHJvcGVydHlFbnRpdHk+W10ge1xuICAgIGNvbnN0IGZpbHRlckZucyA9IHN1cGVyLmJ1aWxkRmlsdGVyKCk7XG5cbiAgICBjb25zdCBzZWFyY2hUZXh0RmlsdGVyID0gRW50aXR5VXRpbHMuc2VhcmNoVGV4dEZpbHRlcignZGVmaW5pdGlvbi50cmFuc2xhdGVkTmFtZScsIHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgaWYgKHNlYXJjaFRleHRGaWx0ZXIpIGZpbHRlckZucy5wdXNoKHNlYXJjaFRleHRGaWx0ZXIpO1xuXG4gICAgaWYgKHRoaXMubm90RGVmYXVsdE9ubHkpIHtcbiAgICAgIGZpbHRlckZucy5wdXNoKChkYXRhKSA9PiBpc05vdE5pbChkYXRhLnZhbHVlKSAmJiBkYXRhLmRlZmluaXRpb24uZGVmYXVsdFZhbHVlICE9PSBkYXRhLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyRm5zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQ3JpdGVyaWFOb3RFbXB0eShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChrZXkgPT09ICdub3REZWZhdWx0T25seScpIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZTtcbiAgICByZXR1cm4gc3VwZXIuaXNDcml0ZXJpYU5vdEVtcHR5KGtleSwgdmFsdWUpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5RW50aXR5VmFsaWRhdG9yIGV4dGVuZHMgQXBwVmFsaWRhdG9yU2VydmljZTxQcm9wZXJ0eUVudGl0eT4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcikge1xuICAgIHN1cGVyKGZvcm1CdWlsZGVyLCBudWxsKTtcbiAgfVxuXG4gIGdldEZvcm1Hcm91cENvbmZpZyhkYXRhPzogUHJvcGVydHlFbnRpdHkpOiB7IFtwOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBbZGF0YT8uaWQgfHwgbnVsbF0sXG4gICAgICBkZWZpbml0aW9uOiBbZGF0YT8uZGVmaW5pdGlvbiB8fCBudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHZhbHVlOiBbZGF0YT8udmFsdWUgfHwgbnVsbF0sXG4gICAgfTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcHJvcGVydGllcy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAncHJvcGVydGllcy50YWJsZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3Byb3BlcnRpZXMudGFibGUuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFByb3BlcnR5RW50aXR5VmFsaWRhdG9yLCB1c2VDbGFzczogUHJvcGVydHlFbnRpdHlWYWxpZGF0b3IgfV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBQcm9wZXJ0aWVzVGFibGUgZXh0ZW5kcyBBcHBJbk1lbW9yeVRhYmxlPFByb3BlcnR5RW50aXR5LCBQcm9wZXJ0eUVudGl0eUZpbHRlciwgc3RyaW5nPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGRlZmluaXRpb25zOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIEBJbnB1dCgpIHNob3dUb29sYmFyID0gdHJ1ZTtcbiAgQFZpZXdDaGlsZChNYXRFeHBhbnNpb25QYW5lbCwgeyBzdGF0aWM6IHRydWUgfSkgZmlsdGVyRXhwYW5zaW9uUGFuZWw6IE1hdEV4cGFuc2lvblBhbmVsO1xuXG4gIGRlZmluaXRpb25zTWFwQnlLZXk6IEZvcm1GaWVsZERlZmluaXRpb25NYXAgPSB7fTtcbiAgZmlsdGVyRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgZmlsdGVyQ3JpdGVyaWFDb3VudCA9IDA7XG4gIGZpbHRlclBhbmVsRmxvYXRpbmcgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRvclNlcnZpY2U6IFByb3BlcnR5RW50aXR5VmFsaWRhdG9yLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGluamVjdG9yLFxuICAgICAgWy4uLlJFU0VSVkVEX1NUQVJUX0NPTFVNTlMsICdkZWZpbml0aW9uJywgJ3ZhbHVlJywgLi4uUkVTRVJWRURfRU5EX0NPTFVNTlNdLFxuICAgICAgUHJvcGVydHlFbnRpdHksXG4gICAgICBuZXcgSW5NZW1vcnlFbnRpdGllc1NlcnZpY2UoUHJvcGVydHlFbnRpdHksIFByb3BlcnR5RW50aXR5RmlsdGVyLCB7XG4gICAgICAgIHNvcnRCeVJlcGxhY2VtZW50OiB7IGRlZmluaXRpb246ICdkZWZpbml0aW9uLmxhYmVsJyB9LFxuICAgICAgfSksXG4gICAgICB2YWxpZGF0b3JTZXJ2aWNlXG4gICAgKTtcblxuICAgIHRoaXMuaW5saW5lRWRpdGlvbiA9IHRydWU7XG4gICAgdGhpcy5kZWZhdWx0U29ydEJ5ID0gJ2RlZmluaXRpb24nO1xuICAgIHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICB0aGlzLmRlYnVnID0gIWVudmlyb25tZW50Py5wcm9kdWN0aW9uO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgc2VhcmNoVGV4dDogW10sXG4gICAgICBub3REZWZhdWx0T25seTogW251bGxdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hdXRvTG9hZCA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIEZpbGwgZGVmaW5pdGlvbnMgbWFwXG4gICAgdGhpcy5kZWZpbml0aW9ucyA9ICh0aGlzLmRlZmluaXRpb25zIHx8IFtdKS5tYXAoKGRlZikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZWYubGFiZWwpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLmRlZmluaXRpb25zTWFwQnlLZXkgPSBzcGxpdEJ5UHJvcGVydHkodGhpcy5kZWZpbml0aW9ucywgJ2tleScpO1xuXG4gICAgdGhpcy5yZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMoJ2RlZmluaXRpb24nKS5zdWJzY3JpYmUoKGRlZmluaXRpb24pID0+IHtcbiAgICAgIGlmIChpc05vdE5pbChkZWZpbml0aW9uKSAmJiB0aGlzLmVkaXRlZFJvdz8uaWQgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvci5wYXRjaFZhbHVlKHsgaWQ6IGRlZmluaXRpb24ua2V5LCB2YWx1ZTogZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyQ2VsbFZhbHVlQ2hhbmdlcygndmFsdWUnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgZmlsdGVyKChfKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMuZmlsdGVyRm9ybS52YWxpZDtcbiAgICAgICAgICAgIGlmICghdmFsaWQgJiYgdGhpcy5kZWJ1ZykgQXBwRm9ybVV0aWxzLmxvZ0Zvcm1FcnJvcnModGhpcy5maWx0ZXJGb3JtKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIGZpbHRlclxuICAgICAgICAgIHRhcCgoanNvbikgPT4gdGhpcy5zZXRGaWx0ZXIoanNvbikpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICAgIHRoaXMucmVzZXRGaWx0ZXIoKTtcblxuICAgIHRoaXMubWFya0FzUmVhZHkoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBQcm9wZXJ0eUVudGl0eVtdIHtcbiAgICBsZXQgdmFsdWVzID0gc3VwZXIudmFsdWUgfHwgW107XG5cbiAgICAvLyByZW1vdmUgdW5zZXQgb3B0aW9uc1xuICAgIHZhbHVlcyA9IHZhbHVlcy5maWx0ZXIoKHByb3BlcnR5KSA9PiBpc05vdE5pbChwcm9wZXJ0eS52YWx1ZSAhPT0gcHJvcGVydHkuZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUpKTtcblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBzZXQgdmFsdWUoZGF0YTogUHJvcGVydHlFbnRpdHlbXSkge1xuICAgIHN1cGVyLnZhbHVlID0gZGF0YTtcbiAgfVxuXG4gIGRlZmluaXRpb25CeVJvdyA9IChyb3c6IFRhYmxlRWxlbWVudDxQcm9wZXJ0eUVudGl0eT4pOiBGb3JtRmllbGREZWZpbml0aW9uID0+IHRoaXMuZGVmaW5pdGlvbnNNYXBCeUtleVtyb3cuY3VycmVudERhdGEuaWRdO1xuXG4gIHNldFZhbHVlKHZhbHVlOiBQcm9wZXJ0eUVudGl0eVtdLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICAvLyBCdWlsZCBlbnRpdGllc1xuICAgIGNvbnN0IHRhcmdldDogUHJvcGVydHlFbnRpdHlbXSA9IHRoaXMuZGVmaW5pdGlvbnMubWFwKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9ICh2YWx1ZSB8fCBbXSk/LmZpbmQoKHNvdXJjZSkgPT4gc291cmNlLmtleSA9PT0gZGVmaW5pdGlvbi5rZXkpO1xuICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5Py52YWx1ZSA/PyBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZTtcbiAgICAgIC8vIENvbnZlcnQgdG8gZW50aXR5XG4gICAgICByZXR1cm4gUHJvcGVydHlFbnRpdHkuZnJvbU9iamVjdCh7XG4gICAgICAgIGlkOiBkZWZpbml0aW9uLmtleSxcbiAgICAgICAgZGVmaW5pdGlvbixcbiAgICAgICAgLy8gZ2V0IHVzZXIgdmFsdWUgb3IgZGVmYXVsdCB2YWx1ZVxuICAgICAgICB2YWx1ZTogcHJvcGVydHlWYWx1ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc3VwZXIuc2V0VmFsdWUodGFyZ2V0LCBvcHRzKTtcbiAgfVxuXG4gIGNsZWFyQ29udHJvbFZhbHVlKGV2ZW50OiBFdmVudCwgZm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGlmIChldmVudCkgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIEF2b2lkIHRvIGVudGVyIGlucHV0IHRoZSBmaWVsZFxuICAgIGZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJlc2V0RmlsdGVyKHZhbHVlPzogYW55LCBvcHRzPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGYgPSA8UHJvcGVydHlFbnRpdHlGaWx0ZXI+eyBzZWFyY2hUZXh0OiBudWxsLCBub3REZWZhdWx0T25seTogZmFsc2UsIC4uLnZhbHVlIH07XG4gICAgdGhpcy5maWx0ZXJGb3JtLnJlc2V0KGYsIG9wdHMpO1xuICAgIHRoaXMuc2V0RmlsdGVyKGYgfHwgbnVsbCwgb3B0cyk7XG4gICAgdGhpcy5maWx0ZXJDcml0ZXJpYUNvdW50ID0gMDtcbiAgICBpZiAodGhpcy5maWx0ZXJFeHBhbnNpb25QYW5lbCAmJiB0aGlzLmZpbHRlclBhbmVsRmxvYXRpbmcpIHRoaXMuZmlsdGVyRXhwYW5zaW9uUGFuZWwuY2xvc2UoKTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IFByb3BlcnR5RW50aXR5RmlsdGVyLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBmaWx0ZXIgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVNlcnZpY2UuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIC8vIFVwZGF0ZSBjcml0ZXJpYSBjb3VudFxuICAgIGNvbnN0IGNyaXRlcmlhQ291bnQgPSBmaWx0ZXIuY291bnROb3RFbXB0eUNyaXRlcmlhKCk7XG4gICAgaWYgKGNyaXRlcmlhQ291bnQgIT09IHRoaXMuZmlsdGVyQ3JpdGVyaWFDb3VudCkge1xuICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYUNvdW50ID0gY3JpdGVyaWFDb3VudDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBmb3JtIGNvbnRlbnRcbiAgICBpZiAodGhpcy5maWx0ZXJGb3JtICYmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ucGF0Y2hWYWx1ZShmaWx0ZXIuYXNPYmplY3QoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHN1cGVyLnNldEZpbHRlcihmaWx0ZXIgYXMgUHJvcGVydHlFbnRpdHlGaWx0ZXIsIG9wdHMpO1xuICB9XG5cbiAgZ2V0IGZpbHRlcklzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ3JpdGVyaWFDb3VudCA9PT0gMDtcbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclBhbmVsRmxvYXRpbmcoKSB7XG4gICAgdGhpcy5maWx0ZXJQYW5lbEZsb2F0aW5nID0gIXRoaXMuZmlsdGVyUGFuZWxGbG9hdGluZztcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2xvc2VGaWx0ZXJQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJFeHBhbnNpb25QYW5lbCkgdGhpcy5maWx0ZXJFeHBhbnNpb25QYW5lbC5jbG9zZSgpO1xuICAgIHRoaXMuZmlsdGVyUGFuZWxGbG9hdGluZyA9IHRydWU7XG4gIH1cblxuICBhcHBseUZpbHRlckFuZENsb3NlUGFuZWwoZXZlbnQ/OiBFdmVudCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZTtcbiAgICB0aGlzLnNldEZpbHRlcihmaWx0ZXIsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmVtaXRSZWZyZXNoKGV2ZW50KTtcbiAgICBpZiAodGhpcy5maWx0ZXJFeHBhbnNpb25QYW5lbCAmJiB0aGlzLmZpbHRlclBhbmVsRmxvYXRpbmcpIHRoaXMuZmlsdGVyRXhwYW5zaW9uUGFuZWwuY2xvc2UoKTtcbiAgfVxuXG4gIHJlc2V0UHJvcGVydHkoZXZlbnQ6IFVJRXZlbnQsIHJvdzogVGFibGVFbGVtZW50PFByb3BlcnR5RW50aXR5Pikge1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZSh7IHZhbHVlOiByb3cuY3VycmVudERhdGEuZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgfSk7XG4gICAgdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpO1xuICAgIHRoaXMubWFya1Jvd0FzRGlydHkoKTtcbiAgfVxufVxuIiwiPG1hdC10b29sYmFyICpuZ0lmPVwic2hvd1Rvb2xiYXJcIiBbY2xhc3MuZXhwYW5kZWRdPVwiZmlsdGVyRXhwYW5zaW9uUGFuZWwuZXhwYW5kZWRcIj5cbiAgPCEtLSBSZWZyZXNoIC0tPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIiFtb2JpbGVcIiBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fUkVGUkVTSCcgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiZW1pdFJlZnJlc2goKVwiPlxuICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG5cbiAgPGlvbi1pdGVtICpuZ0lmPVwiIW1vYmlsZSAmJiBlcnJvcjsgbGV0IGVycm9yXCIgbGluZXM9XCJub25lXCI+XG4gICAgPGlvbi1pY29uIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cInN0YXJ0XCIgbmFtZT1cImFsZXJ0LWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgPC9pb24taXRlbT5cblxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1zcGFjZXJcIj48L2Rpdj5cblxuICA8IS0tIFJlc2V0IGZpbHRlciAtLT5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIiAqbmdJZj1cImZpbHRlckNyaXRlcmlhQ291bnRcIj5cbiAgICA8bWF0LWljb24gY29sb3I9XCJhY2NlbnRcIj5maWx0ZXJfbGlzdF9hbHQ8L21hdC1pY29uPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tc2Vjb25kYXJ5XCIgc3R5bGU9XCJsZWZ0OiAxNnB4OyB0b3A6IDVweDsgZm9udC13ZWlnaHQ6IGJvbGRcIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gU2hvdyBmaWx0ZXIgLS0+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJmaWx0ZXJFeHBhbnNpb25QYW5lbC50b2dnbGUoKVwiPlxuICAgIDxtYXQtaWNvblxuICAgICAgW21hdEJhZGdlXT1cImZpbHRlckNyaXRlcmlhQ291bnRcIlxuICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImZpbHRlcklzRW1wdHlcIlxuICAgICAgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiXG4gICAgICBtYXRCYWRnZVNpemU9XCJzbWFsbFwiXG4gICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYWZ0ZXJcIlxuICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXG4gICAgPlxuICAgICAgZmlsdGVyX2xpc3RfYWx0XG4gICAgPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L21hdC10b29sYmFyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICA8IS0tIHNlYXJjaCAtLT5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWxcbiAgICAjZmlsdGVyRXhwYW5zaW9uUGFuZWxcbiAgICBjbGFzcz1cImZpbHRlci1wYW5lbFwiXG4gICAgW2NsYXNzLmlvbi1uby1wYWRkaW5nXT1cIm1vYmlsZVwiXG4gICAgW2NsYXNzLmZpbHRlci1wYW5lbC1mbG9hdGluZ109XCJmaWx0ZXJQYW5lbEZsb2F0aW5nXCJcbiAgPlxuICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIiBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIiAobmdTdWJtaXQpPVwiZW1pdFJlZnJlc2goKVwiPlxuICAgICAgPGlvbi1ncmlkPlxuICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgIDwhLS0gc2VhcmNoIC0tPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdTRVRUSU5HUy5GSUxURVIuU0VBUkNIJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoVGV4dFwiIC8+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckNvbnRyb2xWYWx1ZSgkZXZlbnQsIGZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoVGV4dClcIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmlsdGVyRm9ybS5jb250cm9scy5zZWFyY2hUZXh0LmRpc2FibGVkIHx8ICFmaWx0ZXJGb3JtLmNvbnRyb2xzLnNlYXJjaFRleHQudmFsdWVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgIFtzdHlsZV09XCInY2hlY2tib3gnXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibm90RGVmYXVsdE9ubHlcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFVFRJTkdTLkZJTFRFUi5PTkxZX05PVF9ERUZBVUxUJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIGZsb2F0TGFiZWw9XCJhbHdheXNcIlxuICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICA8L2lvbi1ncmlkPlxuICAgIDwvZm9ybT5cblxuICAgIDxtYXQtYWN0aW9uLXJvdz5cbiAgICAgIDwhLS0gQ291bnRlciAgLS0+XG4gICAgICA8aW9uLWxhYmVsXG4gICAgICAgIFtoaWRkZW5dPVwiKGxvYWRpbmdTdWJqZWN0IHwgYXN5bmMpIHx8IGZpbHRlckZvcm0uZGlydHlcIlxuICAgICAgICBbY29sb3JdPVwiZW1wdHkgJiYgJ2RhbmdlcidcIlxuICAgICAgICBjbGFzcz1cImlvbi1wYWRkaW5nXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICAodG90YWxSb3dDb3VudCA/ICdDT01NT04uUkVTVUxUX0NPVU5UJyA6ICdDT01NT04uTk9fUkVTVUxUJylcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgY291bnQ6ICh0b3RhbFJvd0NvdW50IHwgbnVtYmVyRm9ybWF0KSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA8L2lvbi1sYWJlbD5cblxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItc3BhY2VyXCI+PC9kaXY+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgKm5nSWY9XCJmaWx0ZXJQYW5lbEZsb2F0aW5nXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZpbHRlclBhbmVsRmxvYXRpbmcoKVwiXG4gICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbWRcIlxuICAgICAgICBbdGl0bGVdPVwiKGZpbHRlclBhbmVsRmxvYXRpbmcgPyAnQ09NTU9OLkJUTl9FWFBBTkQnIDogJ0NPTU1PTi5CVE5fSElERScpIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwidHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpXCI+e3sgZmlsdGVyUGFuZWxGbG9hdGluZyA/ICcmI3hiYjsnIDogJyYjeGFiOycgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPCEtLSBDbG9zZSBwYW5lbCAtLT5cbiAgICAgIDxpb24tYnV0dG9uIG1hdC1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNsb3NlRmlsdGVyUGFuZWwoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nU3ViamVjdCB8IGFzeW5jXCI+XG4gICAgICAgIDxpb24tdGV4dCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DTE9TRTwvaW9uLXRleHQ+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gU2VhcmNoIGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgW2NvbG9yXT1cImZpbHRlckZvcm0uZGlydHkgPyAndGVydGlhcnknIDogJ2RhcmsnXCJcbiAgICAgICAgW2ZpbGxdPVwiZmlsdGVyRm9ybS5kaXJ0eSA/ICdzb2xpZCcgOiAnY2xlYXInXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyQW5kQ2xvc2VQYW5lbCgkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgPlxuICAgICAgICA8aW9uLXRleHQgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQVBQTFk8L2lvbi10ZXh0PlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvbWF0LWFjdGlvbi1yb3c+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICA8aW9uLXJlZnJlc2hlciBzbG90PVwiZml4ZWRcIiAqbmdJZj1cIm1vYmlsZVwiIChpb25SZWZyZXNoKT1cImRvUmVmcmVzaCgkZXZlbnQpXCI+XG4gICAgPGlvbi1yZWZyZXNoZXItY29udGVudD48L2lvbi1yZWZyZXNoZXItY29udGVudD5cbiAgPC9pb24tcmVmcmVzaGVyPlxuXG4gIDwhLS0gdGFibGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgICA8dGFibGVcbiAgICAgICN0YWJsZVxuICAgICAgbWF0LXRhYmxlXG4gICAgICBtYXRTb3J0XG4gICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICAgIFttYXRTb3J0QWN0aXZlXT1cImRlZmF1bHRTb3J0QnlcIlxuICAgICAgW21hdFNvcnREaXJlY3Rpb25dPVwiZGVmYXVsdFNvcnREaXJlY3Rpb25cIlxuICAgICAgW3RyYWNrQnldPVwidHJhY2tCeUZuXCJcbiAgICAgIFtzdHlsZS4tLW1hdC1yb3ctaGVpZ2h0XT1cIic1MnB4J1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJ0cnVlXCI+PC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cInRydWVcIj48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gaWQgY29sdW1uIChoaWRkZW4pIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpZFwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFkZWJ1Z1wiPjwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhZGVidWdcIj5cbiAgICAgICAgICB7eyByb3cuY3VycmVudERhdGEuaWQgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGRlZmluaXRpb24gY29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJkZWZpbml0aW9uXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIGNsYXNzPVwiaW9uLXBhZGRpbmctc3RhcnRcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsPnt7IGkxOG5Db2x1bW5QcmVmaXggKyAnREVGSU5JVElPTicgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiaW9uLXBhZGRpbmctc3RhcnRcIj5cbiAgICAgICAgICB7eyByb3cuY3VycmVudERhdGEgfCBwcm9wZXJ0eUdldDogJ2RlZmluaXRpb24ubGFiZWwnIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSB2YWx1ZSBjb2x1bW4gLS0+XG4gICAgICA8YXBwLXJvdy1maWVsZFxuICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICBmbG9hdExhYmVsPVwibmV2ZXJcIlxuICAgICAgICBbZGVmaW5pdGlvbkZuXT1cImRlZmluaXRpb25CeVJvd1wiXG4gICAgICAgIFtoZWFkZXJJMThuXT1cImkxOG5Db2x1bW5QcmVmaXggKyAnVkFMVUUnXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgPjwvYXBwLXJvdy1maWVsZD5cblxuICAgICAgPCEtLSBBY3Rpb25zIGJ1dHRvbnMgY29sdW1uIC0tPlxuICAgICAgPGFwcC1hY3Rpb25zLWNvbHVtblxuICAgICAgICBbc3RpY2t5RW5kXT1cInRydWVcIlxuICAgICAgICBbY2FuQ2FuY2VsXT1cImZhbHNlXCJcbiAgICAgICAgW2NhbkRlbGV0ZV09XCJmYWxzZVwiXG4gICAgICAgIFtkaXJ0eUljb25dPVwiZmFsc2VcIlxuICAgICAgICBbY2VsbFRlbXBsYXRlXT1cImNlbGxJbmplY3Rpb25cIlxuICAgICAgPlxuICAgICAgICA8IS0tIGNlbGwgaW5qZWN0aW9uLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEluamVjdGlvbiBsZXQtcm93PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhbW9iaWxlICYmXG4gICAgICAgICAgICAgICFkaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAocm93LnZhbGlkYXRvciB8IGZvcm1HZXRWYWx1ZTogJ3ZhbHVlJykgIT09IChyb3cudmFsaWRhdG9yIHwgZm9ybUdldFZhbHVlOiAnZGVmaW5pdGlvbicpLmRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy52aXNpYmxlLWhvdmVyLXJvd109XCIhbW9iaWxlXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ1NFVFRJTkdTLkJUTl9SRVNFVF9QUk9QRVJUWScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0UHJvcGVydHkoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+dW5kbzwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2FwcC1hY3Rpb25zLWNvbHVtbj5cblxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgICAgPHRyXG4gICAgICAgIG1hdC1yb3dcbiAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIlxuICAgICAgICBbY2xhc3MubWF0LXJvdy1zZWxlY3RlZF09XCJyb3cuZWRpdGluZ1wiXG4gICAgICAgIFtjbGFzcy5tYXQtcm93LWVycm9yXT1cInJvdy52YWxpZGF0b3I/LmludmFsaWRcIlxuICAgICAgICBbY2xhc3MubWF0LXJvdy1kaXJ0eV09XCJyb3cudmFsaWRhdG9yPy5kaXJ0eVwiXG4gICAgICAgIChjbGljayk9XCJjbGlja1JvdygkZXZlbnQsIHJvdylcIlxuICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiZXNjYXBlRWRpdGluZ1JvdygkZXZlbnQpXCJcbiAgICAgICAgW2Nka1RyYXBGb2N1c109XCJyb3cudmFsaWRhdG9yPy5pbnZhbGlkXCJcbiAgICAgID48L3RyPlxuICAgIDwvdGFibGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1N1YmplY3QgfCBhc3luYzsgZWxzZSBub1Jlc3VsdFwiPlxuICAgICAgPGlvbi1pdGVtPlxuICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgYW5pbWF0ZWQ+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI25vUmVzdWx0PlxuICAgICAgPGlvbi1pdGVtICpuZ0lmPVwidG90YWxSb3dDb3VudCA9PT0gMFwiPlxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cInRleHQtaXRhbGljXCIgdHJhbnNsYXRlPkNPTU1PTi5OT19SRVNVTFQ8L2lvbi10ZXh0PlxuICAgICAgPC9pb24taXRlbT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy50YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy50YWJsZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy50YWJsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVksS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUF5QixXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQXlELFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5HLE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEUsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVB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QUM7SUFDeEIsQ0FBQzt3R0E1S1Usa0JBQWtCLGdIQWNuQixXQUFXOzRGQWRWLGtCQUFrQixtSEFIbEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxnRkFNekUsaUJBQWlCLHFGQ3hHOUIsbzFQQW9PQTs7NEZEL0hhLGtCQUFrQjtrQkFQOUIsU0FBUzsrQkFDRSxzQkFBc0IsYUFHckIsQ0FBQyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxtQkFDbkUsdUJBQXVCLENBQUMsTUFBTTs7MEJBZ0I1QyxNQUFNOzJCQUFDLFdBQVc7eUNBYlosV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUMwQyxvQkFBb0I7c0JBQW5FLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwSW5NZW1vcnlUYWJsZSB9IGZyb20gJy4uLy4uL3RhYmxlL21lbW9yeS10YWJsZS5jbGFzcyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEaXJlY3RpdmUsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUkVTRVJWRURfRU5EX0NPTFVNTlMsIFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMgfSBmcm9tICcuLi8uLi90YWJsZS90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbk1lbW9yeUVudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9tZW1vcnktZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlBc09iamVjdE9wdGlvbnMsIEVudGl0eVV0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IEFwcFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0b3IvYmFzZS52YWxpZGF0b3IuY2xhc3MnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgaXNOb3ROaWwsIHNwbGl0QnlQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBFbnRpdHlDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5kZWNvcmF0b3JzJztcbmltcG9ydCB7IEVudGl0eUZpbHRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBGaWx0ZXJGbiwgUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcEZvcm1VdGlscyB9IGZyb20gJy4uL2Zvcm0udXRpbHMnO1xuaW1wb3J0IHsgTWF0RXhwYW5zaW9uUGFuZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuXG5ARW50aXR5Q2xhc3MoeyB0eXBlbmFtZTogJ1Byb3BlcnR5RW50aXR5JyB9KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5RW50aXR5IGV4dGVuZHMgRW50aXR5PFByb3BlcnR5RW50aXR5LCBzdHJpbmc+IGltcGxlbWVudHMgUHJvcGVydHkge1xuICBzdGF0aWMgZnJvbU9iamVjdDogKHNvdXJjZTogYW55LCBvcHRzPzogYW55KSA9PiBQcm9wZXJ0eUVudGl0eTtcblxuICBkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uID0gbnVsbDtcbiAgdmFsdWU6IGFueSA9IG51bGw7XG5cbiAgZ2V0IGtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb24/LmtleSB8fCB0aGlzLmlkO1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSkge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLmlkID0gc291cmNlLmRlZmluaXRpb24/LmtleSA/PyBzb3VyY2Uua2V5ID8/IHNvdXJjZS5pZDtcbiAgICB0aGlzLmRlZmluaXRpb24gPSBzb3VyY2UuZGVmaW5pdGlvbjtcbiAgICB0aGlzLnZhbHVlID0gc291cmNlLnZhbHVlO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IEVudGl0eUFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc3VwZXIuYXNPYmplY3Qob3B0cyk7XG4gICAgdGFyZ2V0LmlkID0gdGhpcy5kZWZpbml0aW9uLmtleTtcbiAgICBkZWxldGUgdGFyZ2V0LmRlZmluaXRpb247XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlFbnRpdHlGaWx0ZXIgZXh0ZW5kcyBFbnRpdHlGaWx0ZXI8UHJvcGVydHlFbnRpdHlGaWx0ZXIsIFByb3BlcnR5RW50aXR5PiB7XG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlLCBvcHRzPzogYW55KSA9PiBQcm9wZXJ0eUVudGl0eUZpbHRlcjtcblxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIG5vdERlZmF1bHRPbmx5ID0gZmFsc2U7XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSkge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSBzb3VyY2Uuc2VhcmNoVGV4dDtcbiAgICB0aGlzLm5vdERlZmF1bHRPbmx5ID0gc291cmNlLm5vdERlZmF1bHRPbmx5O1xuICB9XG5cbiAgYXNPYmplY3Qob3B0cz86IEVudGl0eUFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgcmV0dXJuIHN1cGVyLmFzT2JqZWN0KG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkRmlsdGVyKCk6IEZpbHRlckZuPFByb3BlcnR5RW50aXR5PltdIHtcbiAgICBjb25zdCBmaWx0ZXJGbnMgPSBzdXBlci5idWlsZEZpbHRlcigpO1xuXG4gICAgY29uc3Qgc2VhcmNoVGV4dEZpbHRlciA9IEVudGl0eVV0aWxzLnNlYXJjaFRleHRGaWx0ZXIoJ2RlZmluaXRpb24udHJhbnNsYXRlZE5hbWUnLCB0aGlzLnNlYXJjaFRleHQpO1xuICAgIGlmIChzZWFyY2hUZXh0RmlsdGVyKSBmaWx0ZXJGbnMucHVzaChzZWFyY2hUZXh0RmlsdGVyKTtcblxuICAgIGlmICh0aGlzLm5vdERlZmF1bHRPbmx5KSB7XG4gICAgICBmaWx0ZXJGbnMucHVzaCgoZGF0YSkgPT4gaXNOb3ROaWwoZGF0YS52YWx1ZSkgJiYgZGF0YS5kZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSAhPT0gZGF0YS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckZucztcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0NyaXRlcmlhTm90RW1wdHkoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoa2V5ID09PSAnbm90RGVmYXVsdE9ubHknKSByZXR1cm4gdmFsdWUgPT09IHRydWU7XG4gICAgcmV0dXJuIHN1cGVyLmlzQ3JpdGVyaWFOb3RFbXB0eShrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUVudGl0eVZhbGlkYXRvciBleHRlbmRzIEFwcFZhbGlkYXRvclNlcnZpY2U8UHJvcGVydHlFbnRpdHk+IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHtcbiAgICBzdXBlcihmb3JtQnVpbGRlciwgbnVsbCk7XG4gIH1cblxuICBnZXRGb3JtR3JvdXBDb25maWcoZGF0YT86IFByb3BlcnR5RW50aXR5KTogeyBbcDogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogW2RhdGE/LmlkIHx8IG51bGxdLFxuICAgICAgZGVmaW5pdGlvbjogW2RhdGE/LmRlZmluaXRpb24gfHwgbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB2YWx1ZTogW2RhdGE/LnZhbHVlIHx8IG51bGxdLFxuICAgIH07XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb3BlcnRpZXMtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJ3Byb3BlcnRpZXMudGFibGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWydwcm9wZXJ0aWVzLnRhYmxlLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBQcm9wZXJ0eUVudGl0eVZhbGlkYXRvciwgdXNlQ2xhc3M6IFByb3BlcnR5RW50aXR5VmFsaWRhdG9yIH1dLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwUHJvcGVydGllc1RhYmxlIGV4dGVuZHMgQXBwSW5NZW1vcnlUYWJsZTxQcm9wZXJ0eUVudGl0eSwgUHJvcGVydHlFbnRpdHlGaWx0ZXIsIHN0cmluZz4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkZWZpbml0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBASW5wdXQoKSBzaG93VG9vbGJhciA9IHRydWU7XG4gIEBWaWV3Q2hpbGQoTWF0RXhwYW5zaW9uUGFuZWwsIHsgc3RhdGljOiB0cnVlIH0pIGZpbHRlckV4cGFuc2lvblBhbmVsOiBNYXRFeHBhbnNpb25QYW5lbDtcblxuICBkZWZpbml0aW9uc01hcEJ5S2V5OiBGb3JtRmllbGREZWZpbml0aW9uTWFwID0ge307XG4gIGZpbHRlckZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIGZpbHRlckNyaXRlcmlhQ291bnQgPSAwO1xuICBmaWx0ZXJQYW5lbEZsb2F0aW5nID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCB2YWxpZGF0b3JTZXJ2aWNlOiBQcm9wZXJ0eUVudGl0eVZhbGlkYXRvcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBpbmplY3RvcixcbiAgICAgIFsuLi5SRVNFUlZFRF9TVEFSVF9DT0xVTU5TLCAnZGVmaW5pdGlvbicsICd2YWx1ZScsIC4uLlJFU0VSVkVEX0VORF9DT0xVTU5TXSxcbiAgICAgIFByb3BlcnR5RW50aXR5LFxuICAgICAgbmV3IEluTWVtb3J5RW50aXRpZXNTZXJ2aWNlKFByb3BlcnR5RW50aXR5LCBQcm9wZXJ0eUVudGl0eUZpbHRlciwge1xuICAgICAgICBzb3J0QnlSZXBsYWNlbWVudDogeyBkZWZpbml0aW9uOiAnZGVmaW5pdGlvbi5sYWJlbCcgfSxcbiAgICAgIH0pLFxuICAgICAgdmFsaWRhdG9yU2VydmljZVxuICAgICk7XG5cbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSB0cnVlO1xuICAgIHRoaXMuZGVmYXVsdFNvcnRCeSA9ICdkZWZpbml0aW9uJztcbiAgICB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudD8ucHJvZHVjdGlvbjtcblxuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHNlYXJjaFRleHQ6IFtdLFxuICAgICAgbm90RGVmYXVsdE9ubHk6IFtudWxsXSxcbiAgICB9KTtcblxuICAgIHRoaXMuYXV0b0xvYWQgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBGaWxsIGRlZmluaXRpb25zIG1hcFxuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSAodGhpcy5kZWZpbml0aW9ucyB8fCBbXSkubWFwKChkZWYpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGVmLmxhYmVsKSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5kZWZpbml0aW9uc01hcEJ5S2V5ID0gc3BsaXRCeVByb3BlcnR5KHRoaXMuZGVmaW5pdGlvbnMsICdrZXknKTtcblxuICAgIHRoaXMucmVnaXN0ZXJDZWxsVmFsdWVDaGFuZ2VzKCdkZWZpbml0aW9uJykuc3Vic2NyaWJlKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBpZiAoaXNOb3ROaWwoZGVmaW5pdGlvbikgJiYgdGhpcy5lZGl0ZWRSb3c/LmlkID09PSAtMSkge1xuICAgICAgICB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZSh7IGlkOiBkZWZpbml0aW9uLmtleSwgdmFsdWU6IGRlZmluaXRpb24uZGVmYXVsdFZhbHVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMoJ3ZhbHVlJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgyNTApLFxuICAgICAgICAgIGZpbHRlcigoXykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLmZpbHRlckZvcm0udmFsaWQ7XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmIHRoaXMuZGVidWcpIEFwcEZvcm1VdGlscy5sb2dGb3JtRXJyb3JzKHRoaXMuZmlsdGVyRm9ybSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgICAgICB0YXAoKGpzb24pID0+IHRoaXMuc2V0RmlsdGVyKGpzb24pKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG5cbiAgICB0aGlzLnJlc2V0RmlsdGVyKCk7XG5cbiAgICB0aGlzLm1hcmtBc1JlYWR5KCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogUHJvcGVydHlFbnRpdHlbXSB7XG4gICAgbGV0IHZhbHVlcyA9IHN1cGVyLnZhbHVlIHx8IFtdO1xuXG4gICAgLy8gcmVtb3ZlIHVuc2V0IG9wdGlvbnNcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKChwcm9wZXJ0eSkgPT4gaXNOb3ROaWwocHJvcGVydHkudmFsdWUgIT09IHByb3BlcnR5LmRlZmluaXRpb24uZGVmYXVsdFZhbHVlKSk7XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgc2V0IHZhbHVlKGRhdGE6IFByb3BlcnR5RW50aXR5W10pIHtcbiAgICBzdXBlci52YWx1ZSA9IGRhdGE7XG4gIH1cblxuICBkZWZpbml0aW9uQnlSb3cgPSAocm93OiBUYWJsZUVsZW1lbnQ8UHJvcGVydHlFbnRpdHk+KTogRm9ybUZpZWxkRGVmaW5pdGlvbiA9PiB0aGlzLmRlZmluaXRpb25zTWFwQnlLZXlbcm93LmN1cnJlbnREYXRhLmlkXTtcblxuICBzZXRWYWx1ZSh2YWx1ZTogUHJvcGVydHlFbnRpdHlbXSwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgLy8gQnVpbGQgZW50aXRpZXNcbiAgICBjb25zdCB0YXJnZXQ6IFByb3BlcnR5RW50aXR5W10gPSB0aGlzLmRlZmluaXRpb25zLm1hcCgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSAodmFsdWUgfHwgW10pPy5maW5kKChzb3VyY2UpID0+IHNvdXJjZS5rZXkgPT09IGRlZmluaXRpb24ua2V5KTtcbiAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eT8udmFsdWUgPz8gZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWU7XG4gICAgICAvLyBDb252ZXJ0IHRvIGVudGl0eVxuICAgICAgcmV0dXJuIFByb3BlcnR5RW50aXR5LmZyb21PYmplY3Qoe1xuICAgICAgICBpZDogZGVmaW5pdGlvbi5rZXksXG4gICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgIC8vIGdldCB1c2VyIHZhbHVlIG9yIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgdmFsdWU6IHByb3BlcnR5VmFsdWUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHN1cGVyLnNldFZhbHVlKHRhcmdldCwgb3B0cyk7XG4gIH1cblxuICBjbGVhckNvbnRyb2xWYWx1ZShldmVudDogRXZlbnQsIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBBdm9pZCB0byBlbnRlciBpbnB1dCB0aGUgZmllbGRcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXNldEZpbHRlcih2YWx1ZT86IGFueSwgb3B0cz86IHsgZW1pdEV2ZW50OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBmID0gPFByb3BlcnR5RW50aXR5RmlsdGVyPnsgc2VhcmNoVGV4dDogbnVsbCwgbm90RGVmYXVsdE9ubHk6IGZhbHNlLCAuLi52YWx1ZSB9O1xuICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldChmLCBvcHRzKTtcbiAgICB0aGlzLnNldEZpbHRlcihmIHx8IG51bGwsIG9wdHMpO1xuICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWFDb3VudCA9IDA7XG4gICAgaWYgKHRoaXMuZmlsdGVyRXhwYW5zaW9uUGFuZWwgJiYgdGhpcy5maWx0ZXJQYW5lbEZsb2F0aW5nKSB0aGlzLmZpbHRlckV4cGFuc2lvblBhbmVsLmNsb3NlKCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gIH1cblxuICBzZXRGaWx0ZXIoZmlsdGVyOiBQcm9wZXJ0eUVudGl0eUZpbHRlciwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgZmlsdGVyID0gdGhpcy5kYXRhU291cmNlLmRhdGFTZXJ2aWNlLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICAvLyBVcGRhdGUgY3JpdGVyaWEgY291bnRcbiAgICBjb25zdCBjcml0ZXJpYUNvdW50ID0gZmlsdGVyLmNvdW50Tm90RW1wdHlDcml0ZXJpYSgpO1xuICAgIGlmIChjcml0ZXJpYUNvdW50ICE9PSB0aGlzLmZpbHRlckNyaXRlcmlhQ291bnQpIHtcbiAgICAgIHRoaXMuZmlsdGVyQ3JpdGVyaWFDb3VudCA9IGNyaXRlcmlhQ291bnQ7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybSBjb250ZW50XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybSAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkge1xuICAgICAgdGhpcy5maWx0ZXJGb3JtLnBhdGNoVmFsdWUoZmlsdGVyLmFzT2JqZWN0KCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBzdXBlci5zZXRGaWx0ZXIoZmlsdGVyIGFzIFByb3BlcnR5RW50aXR5RmlsdGVyLCBvcHRzKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJJc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckNyaXRlcmlhQ291bnQgPT09IDA7XG4gIH1cblxuICB0b2dnbGVGaWx0ZXJQYW5lbEZsb2F0aW5nKCkge1xuICAgIHRoaXMuZmlsdGVyUGFuZWxGbG9hdGluZyA9ICF0aGlzLmZpbHRlclBhbmVsRmxvYXRpbmc7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsb3NlRmlsdGVyUGFuZWwoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyRXhwYW5zaW9uUGFuZWwpIHRoaXMuZmlsdGVyRXhwYW5zaW9uUGFuZWwuY2xvc2UoKTtcbiAgICB0aGlzLmZpbHRlclBhbmVsRmxvYXRpbmcgPSB0cnVlO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJBbmRDbG9zZVBhbmVsKGV2ZW50PzogRXZlbnQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlckZvcm0udmFsdWU7XG4gICAgdGhpcy5zZXRGaWx0ZXIoZmlsdGVyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5lbWl0UmVmcmVzaCgpO1xuICAgIGlmICh0aGlzLmZpbHRlclBhbmVsRmxvYXRpbmcpIHRoaXMuZmlsdGVyRXhwYW5zaW9uUGFuZWw/LmNsb3NlKCk7XG4gIH1cblxuICByZXNldFByb3BlcnR5KGV2ZW50OiBVSUV2ZW50LCByb3c6IFRhYmxlRWxlbWVudDxQcm9wZXJ0eUVudGl0eT4pIHtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICByb3cudmFsaWRhdG9yLnBhdGNoVmFsdWUoeyB2YWx1ZTogcm93LmN1cnJlbnREYXRhLmRlZmluaXRpb24uZGVmYXVsdFZhbHVlIH0pO1xuICAgIHRoaXMuY29uZmlybUVkaXRDcmVhdGUoKTtcbiAgICB0aGlzLm1hcmtSb3dBc0RpcnR5KCk7XG4gIH1cbn1cbiIsIjxtYXQtdG9vbGJhciAqbmdJZj1cInNob3dUb29sYmFyXCIgW2NsYXNzLmV4cGFuZGVkXT1cImZpbHRlckV4cGFuc2lvblBhbmVsLmV4cGFuZGVkXCI+XG4gIDwhLS0gUmVmcmVzaCAtLT5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCIhbW9iaWxlXCIgW3RpdGxlXT1cIidDT01NT04uQlROX1JFRlJFU0gnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVtaXRSZWZyZXNoKClcIj5cbiAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDxpb24taXRlbSAqbmdJZj1cIiFtb2JpbGUgJiYgZXJyb3I7IGxldCBlcnJvclwiIGxpbmVzPVwibm9uZVwiPlxuICAgIDxpb24taWNvbiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJhbGVydC1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBbaW5uZXJIVE1MXT1cImVycm9yIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0+XG5cbiAgPGRpdiBjbGFzcz1cInRvb2xiYXItc3BhY2VyXCI+PC9kaXY+XG5cbiAgPCEtLSBSZXNldCBmaWx0ZXIgLS0+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZXNldEZpbHRlcigpXCIgKm5nSWY9XCJmaWx0ZXJDcml0ZXJpYUNvdW50XCI+XG4gICAgPG1hdC1pY29uIGNvbG9yPVwiYWNjZW50XCI+ZmlsdGVyX2xpc3RfYWx0PC9tYXQtaWNvbj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLXNlY29uZGFyeVwiIHN0eWxlPVwibGVmdDogMTZweDsgdG9wOiA1cHg7IGZvbnQtd2VpZ2h0OiBib2xkXCI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIFNob3cgZmlsdGVyIC0tPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsdGVyRXhwYW5zaW9uUGFuZWwudG9nZ2xlKClcIj5cbiAgICA8bWF0LWljb25cbiAgICAgIFttYXRCYWRnZV09XCJmaWx0ZXJDcml0ZXJpYUNvdW50XCJcbiAgICAgIFttYXRCYWRnZUhpZGRlbl09XCJmaWx0ZXJJc0VtcHR5XCJcbiAgICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIlxuICAgICAgbWF0QmFkZ2VTaXplPVwic21hbGxcIlxuICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cImFib3ZlIGFmdGVyXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIGZpbHRlcl9saXN0X2FsdFxuICAgIDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgPCEtLSBzZWFyY2ggLS0+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsXG4gICAgI2ZpbHRlckV4cGFuc2lvblBhbmVsXG4gICAgY2xhc3M9XCJmaWx0ZXItcGFuZWxcIlxuICAgIFtjbGFzcy5pb24tbm8tcGFkZGluZ109XCJtb2JpbGVcIlxuICAgIFtjbGFzcy5maWx0ZXItcGFuZWwtZmxvYXRpbmddPVwiZmlsdGVyUGFuZWxGbG9hdGluZ1wiXG4gID5cbiAgICA8Zm9ybSBjbGFzcz1cImZvcm0tY29udGFpbmVyXCIgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgKG5nU3VibWl0KT1cImVtaXRSZWZyZXNoKClcIj5cbiAgICAgIDxpb24tZ3JpZD5cbiAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICA8IS0tIHNlYXJjaCAtLT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnU0VUVElOR1MuRklMVEVSLlNFQVJDSCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFRleHRcIiAvPlxuXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJDb250cm9sVmFsdWUoJGV2ZW50LCBmaWx0ZXJGb3JtLmNvbnRyb2xzLnNlYXJjaFRleHQpXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoVGV4dC5kaXNhYmxlZCB8fCAhZmlsdGVyRm9ybS5jb250cm9scy5zZWFyY2hUZXh0LnZhbHVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICBbc3R5bGVdPVwiJ2NoZWNrYm94J1wiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5vdERlZmF1bHRPbmx5XCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTRVRUSU5HUy5GSUxURVIuT05MWV9OT1RfREVGQVVMVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBmbG9hdExhYmVsPVwiYWx3YXlzXCJcbiAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPC9pb24tcm93PlxuICAgICAgPC9pb24tZ3JpZD5cbiAgICA8L2Zvcm0+XG5cbiAgICA8bWF0LWFjdGlvbi1yb3c+XG4gICAgICA8IS0tIENvdW50ZXIgIC0tPlxuICAgICAgPGlvbi1sYWJlbFxuICAgICAgICBbaGlkZGVuXT1cIihsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSB8fCBmaWx0ZXJGb3JtLmRpcnR5XCJcbiAgICAgICAgW2NvbG9yXT1cImVtcHR5ICYmICdkYW5nZXInXCJcbiAgICAgICAgY2xhc3M9XCJpb24tcGFkZGluZ1wiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgKHRvdGFsUm93Q291bnQgPyAnQ09NTU9OLlJFU1VMVF9DT1VOVCcgOiAnQ09NTU9OLk5PX1JFU1VMVCcpXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGNvdW50OiAodG90YWxSb3dDb3VudCB8IG51bWJlckZvcm1hdCksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgPC9pb24tbGFiZWw+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXNwYWNlclwiPjwvZGl2PlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cImFjY2VudFwiXG4gICAgICAgICpuZ0lmPVwiZmlsdGVyUGFuZWxGbG9hdGluZ1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lbEZsb2F0aW5nKClcIlxuICAgICAgICBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1kXCJcbiAgICAgICAgW3RpdGxlXT1cIihmaWx0ZXJQYW5lbEZsb2F0aW5nID8gJ0NPTU1PTi5CVE5fRVhQQU5EJyA6ICdDT01NT04uQlROX0hJREUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT1cInRyYW5zZm9ybTogcm90YXRlKDkwZGVnKVwiPnt7IGZpbHRlclBhbmVsRmxvYXRpbmcgPyAnJiN4YmI7JyA6ICcmI3hhYjsnIH19PC9zcGFuPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDwhLS0gQ2xvc2UgcGFuZWwgLS0+XG4gICAgICA8aW9uLWJ1dHRvbiBtYXQtYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjbG9zZUZpbHRlclBhbmVsKClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1N1YmplY3QgfCBhc3luY1wiPlxuICAgICAgICA8aW9uLXRleHQgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0xPU0U8L2lvbi10ZXh0PlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8IS0tIFNlYXJjaCBidXR0b24gLS0+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIFtjb2xvcl09XCJmaWx0ZXJGb3JtLmRpcnR5ID8gJ3RlcnRpYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgIFtmaWxsXT1cImZpbHRlckZvcm0uZGlydHkgPyAnc29saWQnIDogJ2NsZWFyJ1wiXG4gICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlckFuZENsb3NlUGFuZWwoJGV2ZW50KVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nU3ViamVjdCB8IGFzeW5jXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi10ZXh0IHRyYW5zbGF0ZT5DT01NT04uQlROX0FQUExZPC9pb24tdGV4dD5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L21hdC1hY3Rpb24tcm93PlxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgPGlvbi1yZWZyZXNoZXIgc2xvdD1cImZpeGVkXCIgKm5nSWY9XCJtb2JpbGVcIiAoaW9uUmVmcmVzaCk9XCJkb1JlZnJlc2goJGV2ZW50KVwiPlxuICAgIDxpb24tcmVmcmVzaGVyLWNvbnRlbnQ+PC9pb24tcmVmcmVzaGVyLWNvbnRlbnQ+XG4gIDwvaW9uLXJlZnJlc2hlcj5cblxuICA8IS0tIHRhYmxlIC0tPlxuICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gICAgPHRhYmxlXG4gICAgICAjdGFibGVcbiAgICAgIG1hdC10YWJsZVxuICAgICAgbWF0U29ydFxuICAgICAgbWF0U29ydERpc2FibGVDbGVhclxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICBbbWF0U29ydEFjdGl2ZV09XCJkZWZhdWx0U29ydEJ5XCJcbiAgICAgIFttYXRTb3J0RGlyZWN0aW9uXT1cImRlZmF1bHRTb3J0RGlyZWN0aW9uXCJcbiAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlGblwiXG4gICAgICBbc3R5bGUuLS1tYXQtcm93LWhlaWdodF09XCInNTJweCdcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwidHJ1ZVwiPjwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJ0cnVlXCI+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGlkIGNvbHVtbiAoaGlkZGVuKSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiaWRcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhZGVidWdcIj48L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIWRlYnVnXCI+XG4gICAgICAgICAge3sgcm93LmN1cnJlbnREYXRhLmlkIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBkZWZpbml0aW9uIGNvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZGVmaW5pdGlvblwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBjbGFzcz1cImlvbi1wYWRkaW5nLXN0YXJ0XCI+XG4gICAgICAgICAgPGlvbi1sYWJlbD57eyBpMThuQ29sdW1uUHJlZml4ICsgJ0RFRklOSVRJT04nIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImlvbi1wYWRkaW5nLXN0YXJ0XCI+XG4gICAgICAgICAge3sgcm93LmN1cnJlbnREYXRhIHwgcHJvcGVydHlHZXQ6ICdkZWZpbml0aW9uLmxhYmVsJyB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gdmFsdWUgY29sdW1uIC0tPlxuICAgICAgPGFwcC1yb3ctZmllbGRcbiAgICAgICAgbmFtZT1cInZhbHVlXCJcbiAgICAgICAgZmxvYXRMYWJlbD1cIm5ldmVyXCJcbiAgICAgICAgW2RlZmluaXRpb25Gbl09XCJkZWZpbml0aW9uQnlSb3dcIlxuICAgICAgICBbaGVhZGVySTE4bl09XCJpMThuQ29sdW1uUHJlZml4ICsgJ1ZBTFVFJ1wiXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgID48L2FwcC1yb3ctZmllbGQ+XG5cbiAgICAgIDwhLS0gQWN0aW9ucyBidXR0b25zIGNvbHVtbiAtLT5cbiAgICAgIDxhcHAtYWN0aW9ucy1jb2x1bW5cbiAgICAgICAgW3N0aWNreUVuZF09XCJ0cnVlXCJcbiAgICAgICAgW2NhbkNhbmNlbF09XCJmYWxzZVwiXG4gICAgICAgIFtjYW5EZWxldGVdPVwiZmFsc2VcIlxuICAgICAgICBbZGlydHlJY29uXT1cImZhbHNlXCJcbiAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJjZWxsSW5qZWN0aW9uXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBjZWxsIGluamVjdGlvbi0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGxJbmplY3Rpb24gbGV0LXJvdz5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgIW1vYmlsZSAmJlxuICAgICAgICAgICAgICAhZGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgKHJvdy52YWxpZGF0b3IgfCBmb3JtR2V0VmFsdWU6ICd2YWx1ZScpICE9PSAocm93LnZhbGlkYXRvciB8IGZvcm1HZXRWYWx1ZTogJ2RlZmluaXRpb24nKS5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MudmlzaWJsZS1ob3Zlci1yb3ddPVwiIW1vYmlsZVwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidTRVRUSU5HUy5CVE5fUkVTRVRfUFJPUEVSVFknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJyZXNldFByb3BlcnR5KCRldmVudCwgcm93KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPnVuZG88L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9hcHAtYWN0aW9ucy1jb2x1bW4+XG5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICAgIDx0clxuICAgICAgICBtYXQtcm93XG4gICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCJcbiAgICAgICAgW2NsYXNzLm1hdC1yb3ctc2VsZWN0ZWRdPVwicm93LmVkaXRpbmdcIlxuICAgICAgICBbY2xhc3MubWF0LXJvdy1lcnJvcl09XCJyb3cudmFsaWRhdG9yPy5pbnZhbGlkXCJcbiAgICAgICAgW2NsYXNzLm1hdC1yb3ctZGlydHldPVwicm93LnZhbGlkYXRvcj8uZGlydHlcIlxuICAgICAgICAoY2xpY2spPVwiY2xpY2tSb3coJGV2ZW50LCByb3cpXCJcbiAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImVzY2FwZUVkaXRpbmdSb3coJGV2ZW50KVwiXG4gICAgICAgIFtjZGtUcmFwRm9jdXNdPVwicm93LnZhbGlkYXRvcj8uaW52YWxpZFwiXG4gICAgICA+PC90cj5cbiAgICA8L3RhYmxlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdTdWJqZWN0IHwgYXN5bmM7IGVsc2Ugbm9SZXN1bHRcIj5cbiAgICAgIDxpb24taXRlbT5cbiAgICAgICAgPGlvbi1za2VsZXRvbi10ZXh0IGFuaW1hdGVkPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNub1Jlc3VsdD5cbiAgICAgIDxpb24taXRlbSAqbmdJZj1cInRvdGFsUm93Q291bnQgPT09IDBcIj5cbiAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJ0ZXh0LWl0YWxpY1wiIHRyYW5zbGF0ZT5DT01NT04uTk9fUkVTVUxUPC9pb24tdGV4dD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L2lvbi1jb250ZW50PlxuIl19