@sumaris-net/ngx-components 1.23.8 → 1.23.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sumaris-net.ngx-components.umd.js +530 -492
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +8 -0
- package/esm2015/src/app/admin/users/list/users.js +2 -2
- package/esm2015/src/app/core/form/editor.class.js +40 -37
- package/esm2015/src/app/core/services/account.service.js +2 -2
- package/esm2015/src/app/core/services/config.service.js +2 -2
- package/esm2015/src/app/core/services/network.service.js +6 -6
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +2 -2
- package/esm2015/src/app/core/table/table.class.js +63 -54
- package/esm2015/src/app/core/table/testing/table.testing.js +3 -2
- package/esm2015/src/app/shared/directives/autofocus.directive.js +1 -1
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +2 -2
- package/esm2015/src/app/shared/services/entity-service.class.js +1 -10
- package/esm2015/src/app/shared/services/memory-entity-service.class.js +76 -33
- package/esm2015/src/app/shared/services/startable-service.class.js +21 -13
- package/fesm2015/sumaris-net.ngx-components.js +438 -397
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +3 -3
- package/src/app/core/form/editor.class.d.ts +2 -1
- package/src/app/core/services/network.service.d.ts +1 -1
- package/src/app/core/table/table.class.d.ts +2 -1
- package/src/app/shared/services/entity-service.class.d.ts +0 -8
- package/src/app/shared/services/memory-entity-service.class.d.ts +14 -7
- package/src/app/shared/services/startable-service.class.d.ts +4 -2
- package/src/theme/_ngx-components.scss +5 -0
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -238,7 +238,7 @@ export class AccountService extends BaseGraphqlService {
|
|
|
238
238
|
firstNotNilPromise(this._tokenType$)
|
|
239
239
|
]);
|
|
240
240
|
// Listen graphql start (or restart)
|
|
241
|
-
this.registerSubscription(this.graphql.
|
|
241
|
+
this.registerSubscription(this.graphql.stopSubject.subscribe(() => {
|
|
242
242
|
if (this.started && this.isLogin()) {
|
|
243
243
|
console.debug('[account] Restarting, to retry to authenticate...');
|
|
244
244
|
this.restart();
|
|
@@ -1162,4 +1162,4 @@ AccountService.ctorParameters = () => [
|
|
|
1162
1162
|
{ type: ToastController, decorators: [{ type: Optional }] },
|
|
1163
1163
|
{ type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] }
|
|
1164
1164
|
];
|
|
1165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxhQUFhLEVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUFTLFdBQVcsRUFBbUIsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQTJCLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBQyxlQUFlLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFjLEdBQUcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxPQUFPLEVBQWdCLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUMscUJB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YUFBYTtZQWVFLGNBQWM7WUFIN0IsY0FBYztZQUNkLG9CQUFvQjtZQU5wQixPQUFPO1lBU1AsV0FBVztZQWFYLGdCQUFnQix1QkFvT25CLFFBQVE7WUFyT0wsZUFBZSx1QkFzT2xCLFFBQVE7NENBQ1IsTUFBTSxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDcnlwdG9TZXJ2aWNlLCBLZXlQYWlyfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7RGVwYXJ0bWVudH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7UGVyc29uLCBQZXJzb25VdGlscywgVXNlclByb2ZpbGVMYWJlbH0gZnJvbSAnLi9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzLCBVc2FnZU1vZGUsIFVzZXJTZXR0aW5nc30gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmV0Y2hQb2xpY3ksIGdxbH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcblxuaW1wb3J0IHtpc05pbCwgc2xlZXAsIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7QmFzZUdyYXBocWxTZXJ2aWNlfSBmcm9tICcuL2Jhc2UtZ3JhcGhxbC1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RXJyb3JDb2RlcywgU2VydmVyRXJyb3JDb2Rlc30gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtHcmFwaHFsU2VydmljZX0gZnJvbSAnLi4vZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtBdXRoVG9rZW5UeXBlLCBOZXR3b3JrU2VydmljZX0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7TUlOSUZZX0VOVElUWV9GT1JfUE9ELCBSZWZlcmVudGlhbCwgUmVmZXJlbnRpYWxVdGlsc30gZnJvbSAnLi9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge1N0YXR1c0lkc30gZnJvbSAnLi9tb2RlbC9tb2RlbC5lbnVtJztcbmltcG9ydCB7QmFzZTU4fSBmcm9tICcuL2Jhc2U1OCc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7Zmlyc3ROb3ROaWxQcm9taXNlfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucywgQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zfSBmcm9tICcuL2Jhc2UtZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQge092ZXJsYXlFdmVudERldGFpbH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFjY291bnREZXRhaWxzIHtcbiAgbG9hZGVkOiBib29sZWFuO1xuICBrZXlwYWlyOiBLZXlQYWlyO1xuICBhdXRoVG9rZW46IHN0cmluZztcbiAgYXV0aEJhc2ljPzogc3RyaW5nO1xuICBwdWJrZXk6IHN0cmluZztcbiAgcGVyc29uOiBQZXJzb247XG4gIGRlcGFydG1lbnQ6IERlcGFydG1lbnQ7XG4gIG1haW5Qcm9maWxlOiBTdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEF1dGhEYXRhIHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgb2ZmbGluZT86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGF0YSBleHRlbmRzIEF1dGhEYXRhIHtcbiAgYWNjb3VudDogQWNjb3VudDtcbn1cblxuY29uc3QgVE9LRU5fU1RPUkFHRV9LRVkgPSAndG9rZW4nO1xuY29uc3QgUFVCS0VZX1NUT1JBR0VfS0VZID0gJ3B1YmtleSc7XG5jb25zdCBTRUNLRVlfU1RPUkFHRV9LRVkgPSAnc2Vja2V5JztcbmNvbnN0IEFDQ09VTlRfU1RPUkFHRV9LRVkgPSAnYWNjb3VudCc7XG5cbmNvbnN0IERFRkFVTFRfQVZBVEFSX0lNQUdFID0gJ2Fzc2V0cy9pbWcvcGVyc29uLnBuZyc7XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBHcmFwaFFMIHF1ZXJpZXNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5jb25zdCBGcmFnbWVudHMgPSB7XG4gIGFjY291bnQ6IGdxbGBcbiAgICBmcmFnbWVudCBBY2NvdW50RnJhZ21lbnQgb24gQWNjb3VudFZPIHtcbiAgICAgIGlkXG4gICAgICBmaXJzdE5hbWVcbiAgICAgIGxhc3ROYW1lXG4gICAgICBlbWFpbFxuICAgICAgcHVia2V5XG4gICAgICBhdmF0YXJcbiAgICAgIHN0YXR1c0lkXG4gICAgICB1cGRhdGVEYXRlXG4gICAgICBjcmVhdGlvbkRhdGVcbiAgICAgIHByb2ZpbGVzXG4gICAgICBzZXR0aW5ncyB7XG4gICAgICAgIC4uLlVzZXJTZXR0aW5nc0ZyYWdtZW50XG4gICAgICB9XG4gICAgICBkZXBhcnRtZW50IHtcbiAgICAgICAgaWRcbiAgICAgICAgbGFiZWxcbiAgICAgICAgbmFtZVxuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICB9XG4gICAgICBfX3R5cGVuYW1lXG4gICAgfWAsXG5cbiAgc2V0dGluZ3M6IGdxbGBmcmFnbWVudCBVc2VyU2V0dGluZ3NGcmFnbWVudCBvbiBVc2VyU2V0dGluZ3NWTyB7XG4gICAgaWRcbiAgICBsb2NhbGVcbiAgICBsYXRMb25nRm9ybWF0XG4gICAgY29udGVudFxuICAgIG5vbmNlXG4gICAgdXBkYXRlRGF0ZVxuICAgIF9fdHlwZW5hbWVcbiAgfWBcbn07XG5cbi8vIExvYWQgYWNjb3VudCBxdWVyeVxuY29uc3QgTG9hZFF1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IEFjY291bnQge1xuICAgIGRhdGE6IGFjY291bnQge1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfVxuYDtcblxuLy8gQ2hlY2sgZW1haWwgcXVlcnlcbmNvbnN0IElzRW1haWxFeGlzdHNRdWVyeTogYW55ID0gZ3FsYFxuICBxdWVyeSBJc0VtYWlsRXhpc3RzKCRlbWFpbDogU3RyaW5nLCAkaGFzaDogU3RyaW5nKXtcbiAgICBpc0VtYWlsRXhpc3RzKGVtYWlsOiAkZW1haWwsIGhhc2g6ICRoYXNoKVxuICB9XG5gO1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElzRW1haWxFeGlzdHNWYXJpYWJsZXMge1xuICBlbWFpbDogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG59XG5cbi8vIFNhdmUgKGNyZWF0ZSBvciB1cGRhdGUpIGFjY291bnQgbXV0YXRpb25cbmNvbnN0IEFjY291bnRNdXRhdGlvbnM6IFBhcnRpYWw8QmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnM+ICYgeyBjcmVhdGU6IGFueSwgc2F2ZVNldHRpbmdzOiBhbnk7IH0gPSB7XG4gIHNhdmU6IGdxbGAgbXV0YXRpb24gU2F2ZUFjY291bnQoJGRhdGE6QWNjb3VudFZPSW5wdXQpe1xuICAgIGRhdGE6IHNhdmVBY2NvdW50KGFjY291bnQ6ICRkYXRhKXtcbiAgICAgIC4uLkFjY291bnRGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0ZyYWdtZW50cy5hY2NvdW50fVxuICAke0ZyYWdtZW50cy5zZXR0aW5nc31gLFxuXG4gIGNyZWF0ZTogZ3FsYG11dGF0aW9uIENyZWF0ZUFjY291bnQoJGRhdGE6QWNjb3VudFZPSW5wdXQpe1xuICAgIGRhdGE6IGNyZWF0ZUFjY291bnQoYWNjb3VudDogJGRhdGEpe1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfWAsXG5cbiAgc2F2ZVNldHRpbmdzOiBncWxgbXV0YXRpb24gU2F2ZVNldHRpbmdzKCRkYXRhOlVzZXJTZXR0aW5nc1ZPSW5wdXQpe1xuICAgIGRhdGE6IHNhdmVTZXR0aW5ncyhzZXR0aW5nczogJGRhdGEpe1xuICAgICAgLi4uVXNlclNldHRpbmdzRnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuc2V0dGluZ3N9YFxufTtcblxuLy8gU2VudCBjb25maXJtYXRpb24gZW1haWxcbmNvbnN0IFNlbmRDb25maXJtRW1haWxNdXRhdGlvbjogYW55ID0gZ3FsYFxuICBtdXRhdGlvbiBzZW5kQWNjb3VudENvbmZpcm1hdGlvbkVtYWlsKCRlbWFpbDpTdHJpbmcsICRsb2NhbGU6U3RyaW5nKXtcbiAgICBzZW5kQWNjb3VudENvbmZpcm1hdGlvbkVtYWlsKGVtYWlsOiAkZW1haWwsIGxvY2FsZTogJGxvY2FsZSlcbiAgfVxuYDtcblxuLy8gQ29uZmlybSBhY2NvdW50IGVtYWlsXG5jb25zdCBDb25maXJtRW1haWxNdXRhdGlvbjogYW55ID0gZ3FsYFxuICBtdXRhdGlvbiBjb25maXJtQWNjb3VudEVtYWlsKCRlbWFpbDpTdHJpbmcsICRjb2RlOlN0cmluZyl7XG4gICAgY29uZmlybUFjY291bnRFbWFpbChlbWFpbDogJGVtYWlsLCBjb2RlOiAkY29kZSlcbiAgfVxuYDtcblxuLy8gQXV0aGVudGljYXRpb24gIHF1ZXJ5XG5jb25zdCBBdXRoUXVlcnk6IGFueSA9IGdxbGBcbiAgcXVlcnkgQXV0aCgkdG9rZW46IFN0cmluZyl7XG4gICAgYXV0aGVudGljYXRlKHRva2VuOiAkdG9rZW4pXG4gIH1cbmA7XG5cbi8vIE5ldyBhdXRoIGNoYWxsZW5nZSBxdWVyeVxuY29uc3QgQXV0aENoYWxsZW5nZVF1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IEF1dGhDaGFsbGVuZ2V7XG4gICAgYXV0aENoYWxsZW5nZXtcbiAgICAgIGNoYWxsZW5nZVxuICAgICAgcHVia2V5XG4gICAgICBzaWduYXR1cmVcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IEFjY291bnRTdWJzY3JpcHRpb25zOiBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnMgPSB7XG4gIGxpc3RlbkNoYW5nZXM6IGdxbGBzdWJzY3JpcHRpb24gdXBkYXRlQWNjb3VudCgkaW50ZXJ2YWw6IEludCl7XG4gICAgZGF0YTogdXBkYXRlQWNjb3VudChpbnRlcnZhbDogJGludGVydmFsKSB7XG4gICAgICBpZFxuICAgICAgdXBkYXRlRGF0ZVxuICAgIH1cbiAgfWBcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudFdhdGNoT3B0aW9ucyB7XG4gIGludGVydmFsSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnLCBkZXBzOiBbIEVOVklST05NRU5UIF19KVxuZXhwb3J0IGNsYXNzIEFjY291bnRTZXJ2aWNlIGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlPEFjY291bnQsIGFueSwgbnVtYmVyLCBBY2NvdW50PiB7XG5cbiAgb25Mb2dpbiA9IG5ldyBTdWJqZWN0PEFjY291bnQ+KCk7XG4gIG9uTG9nb3V0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBvbkNoYW5nZSA9IG5ldyBTdWJqZWN0PEFjY291bnQ+KCk7XG4gIG9uQXV0aFRva2VuQ2hhbmdlID0gbmV3IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBvbkF1dGhCYXNpY0NoYW5nZSA9IG5ldyBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICBwcml2YXRlIF9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmFibGVMaXN0ZW5DaGFuZ2VzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5JbnRlcnZhbEluU2Vjb25kczogbnVtYmVyO1xuICBwcml2YXRlIF9jYWNoZTogQWNjb3VudERldGFpbHMgPSB7XG4gICAgbG9hZGVkOiBmYWxzZSxcbiAgICBrZXlwYWlyOiBudWxsLFxuICAgIGF1dGhUb2tlbjogbnVsbCxcbiAgICBhdXRoQmFzaWM6IG51bGwsXG4gICAgcHVia2V5OiBudWxsLFxuICAgIG1haW5Qcm9maWxlOiBudWxsLFxuICAgIHBlcnNvbjogbnVsbCxcbiAgICBkZXBhcnRtZW50OiBudWxsXG4gIH07XG4gIHByaXZhdGUgXyRhZGRpdGlvbmFsRmllbGRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtRmllbGREZWZpbml0aW9uW10+KFtdKTtcbiAgcHJpdmF0ZSBfdG9rZW5UeXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFRva2VuVHlwZT4odW5kZWZpbmVkKTtcblxuICBnZXQgYWNjb3VudCgpOiBBY2NvdW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGUubG9hZGVkID8gdGhpcy5fZGF0YSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBwZXJzb24oKTogUGVyc29uIHtcbiAgICBpZiAodGhpcy5fY2FjaGUubG9hZGVkICYmICF0aGlzLl9jYWNoZS5wZXJzb24pIHtcbiAgICAgIHRoaXMuX2NhY2hlLnBlcnNvbiA9IHRoaXMuX2NhY2hlLmxvYWRlZCA/IHRoaXMuX2RhdGEuYXNQZXJzb24oKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLnBlcnNvbjtcbiAgfVxuXG4gIGdldCBkZXBhcnRtZW50KCk6IERlcGFydG1lbnQge1xuICAgIGlmICh0aGlzLl9jYWNoZS5sb2FkZWQgJiYgIXRoaXMuX2NhY2hlLmRlcGFydG1lbnQpIHtcbiAgICAgIHRoaXMuX2NhY2hlLmRlcGFydG1lbnQgPSB0aGlzLl9jYWNoZS5sb2FkZWQgPyB0aGlzLl9kYXRhLmFzUGVyc29uKCkuZGVwYXJ0bWVudCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmRlcGFydG1lbnQ7XG4gIH1cblxuICBnZXQgdG9rZW5UeXBlKCk6IEF1dGhUb2tlblR5cGUge1xuICAgIHJldHVybiB0aGlzLl90b2tlblR5cGUkLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuVHlwZSh2YWx1ZTogQXV0aFRva2VuVHlwZSkge1xuICAgIGlmICh0aGlzLl90b2tlblR5cGUkLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbYWNjb3VudF0gVXNpbmcgYXV0aGVudGljYXRpb24gdG9rZW4gdHlwZTogJyArIHZhbHVlKTtcbiAgICAgIHRoaXMuX3Rva2VuVHlwZSQubmV4dCh2YWx1ZSk7XG4gICAgICAvLyBSZXNldCB2YWx1ZXNcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcm90ZWN0ZWQgZmlsZTogRmlsZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSAoIWVudmlyb25tZW50LmFjY291bnQgfHwgZW52aXJvbm1lbnQuYWNjb3VudC5lbmFibGVMaXN0ZW5DaGFuZ2VzICE9PSBmYWxzZSk7IC8vIFRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzID0gdG9OdW1iZXIoZW52aXJvbm1lbnQuYWNjb3VudCAmJiBlbnZpcm9ubWVudC5hY2NvdW50Lmxpc3RlbkludGVydmFsSW5TZWNvbmRzLCAwKTsgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50LXNlcnZpY2VdIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICAvLyBTZW5kIGF1dGggdG9rZW4gdG8gdGhlIGdyYXBocWwgbGF5ZXIsIHdoZW4gY2hhbmdlZFxuICAgIHRoaXMub25BdXRoVG9rZW5DaGFuZ2Uuc3Vic2NyaWJlKCh0b2tlbikgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhUb2tlbih0b2tlbikpO1xuICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2Uuc3Vic2NyaWJlKChiYXNpYykgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhCYXNpYyhiYXNpYykpO1xuXG4gICAgLy8gRm9yY2UgbmV0d29yayB0byB3YWl0IGFjY291bnQgc2VydmljZSwgYWZ0ZXIgZ2V0dGluZyBjb25uZWN0aW9uIHRvIHRoZSBwZWVyXG4gICAgdGhpcy5uZXR3b3JrLm9uKCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCBhc3luYyAob25saW5lKSA9PiB7XG4gICAgICAvLyBJZiBvbmxpbmUsIHdhaXQgYSBmdWxsIHJlc3RhcnQsIGJlY2F1c2UgaXQgY2FuIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgaWYgKG9ubGluZSAmJiAoIXRoaXMuc3RhcnRlZCB8fCB0aGlzLmlzTG9naW4oKSkpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEZvcmNlIG5ldHdvcmtTZXJ2aWNlLnRyeU9ubGluZSgpIHRvIHdhaXQsIHRoYXQgZ3JhcGhxbCBhbmQgYWNjb3VudCBzZXJ2aWNlIGlzIHJlc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBzbGVlcCg1MDApOyAvLyB3YWl0IGdyYXBocWwgc2VydmljZSB0byBiZSByZXN0YXJ0ZWRcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8QWNjb3VudD4ge1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgLy8gV2FpdCB0b2tlbiB0eXBlIHRvIGJlIHNldFxuICAgICAgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX3Rva2VuVHlwZSQpXG4gICAgXSk7XG5cbiAgICAvLyBMaXN0ZW4gZ3JhcGhxbCBzdGFydCAob3IgcmVzdGFydClcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5ncmFwaHFsLm9uU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCAmJiB0aGlzLmlzTG9naW4oKSkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBSZXN0YXJ0aW5nLCB0byByZXRyeSB0byBhdXRoZW50aWNhdGUuLi4nKTtcbiAgICAgICAgICB0aGlzLnJlc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuICAgIGF3YWl0IHRoaXMubGlzdGVuU2V0dGluZ3MoKTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhZEF1dGhUb2tlbiA9IHRoaXMuX2NhY2hlLmF1dGhUb2tlbiAmJiB0cnVlO1xuICAgIGNvbnN0IGhhZEF1dGhCYXNpYyA9IHRoaXMuX2NhY2hlLmF1dGhCYXNpYyAmJiB0cnVlO1xuICAgIGNvbnN0IGhhZEF1dGggPSBoYWRBdXRoVG9rZW4gfHwgaGFkQXV0aEJhc2ljO1xuICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgaWYgKGhhZEF1dGgpIHtcbiAgICAgIHRoaXMub25Mb2dvdXQubmV4dCgpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFkQXV0aFRva2VuKSB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIGlmIChoYWRBdXRoQmFzaWMpIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGlzTG9naW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuX2NhY2hlLnB1YmtleSAmJiB0aGlzLl9jYWNoZS5sb2FkZWQpO1xuICB9XG5cbiAgaXNBdXRoKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLl9jYWNoZS5wdWJrZXkgJiYgdGhpcy5fY2FjaGUua2V5cGFpciAmJiB0aGlzLl9jYWNoZS5rZXlwYWlyLnNlY3JldEtleSk7XG4gIH1cblxuICBoYXNNaW5Qcm9maWxlKHVzZXJQcm9maWxlOiBVc2VyUHJvZmlsZUxhYmVsKTogYm9vbGVhbiB7XG4gICAgLy8gc2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRSBvciBURU1QT1JBUllcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8XG4gICAgICAodGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSAmJiB0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgdXNlclByb2ZpbGUpO1xuICB9XG5cbiAgaGFzRXhhY3RQcm9maWxlKGxhYmVsOiBVc2VyUHJvZmlsZUxhYmVsKTogYm9vbGVhbiB7XG4gICAgLy8gc2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRSBvciBURU1QT1JBUllcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8XG4gICAgICAodGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSAmJiB0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5wcm9maWxlcy5zb21lKHByb2ZpbGUgPT4gcHJvZmlsZSA9PT0gbGFiZWwpO1xuICB9XG5cbiAgaGFzUHJvZmlsZUFuZElzRW5hYmxlKHVzZXJQcm9maWxlOiBVc2VyUHJvZmlsZUxhYmVsKTogYm9vbGVhbiB7XG4gICAgLy8gc2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRVxuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wdWJrZXkgfHwgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBQZXJzb25VdGlscy5oYXNVcHBlck9yRXF1YWxzUHJvZmlsZSh0aGlzLl9kYXRhLnByb2ZpbGVzLCB1c2VyUHJvZmlsZSk7XG4gIH1cblxuICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Byb2ZpbGVBbmRJc0VuYWJsZSgnQURNSU4nKTtcbiAgfVxuXG4gIGlzU3VwZXJ2aXNvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQcm9maWxlQW5kSXNFbmFibGUoJ1NVUEVSVklTT1InKTtcbiAgfVxuXG4gIGlzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQcm9maWxlQW5kSXNFbmFibGUoJ1VTRVInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAcGFyYW0gbW9kZVxuICAgKi9cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaXNVc2FnZU1vZGUobW9kZSk7XG4gIH1cblxuICBpc09ubHlHdWVzdCgpOiBib29sZWFuIHtcbiAgICAvLyBTaG91bGQgYmUgbG9naW4sIGFuZCBzdGF0dXMgRU5BQkxFIG9yIFRFTVBPUkFSWVxuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wdWJrZXkgfHxcbiAgICAgICh0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuRU5BQkxFICYmIHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5URU1QT1JBUlkpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIFByb2ZpbGUgbGVzcyB0aGVuIHVzZXJcbiAgICByZXR1cm4gIVBlcnNvblV0aWxzLmhhc1VwcGVyT3JFcXVhbHNQcm9maWxlKHRoaXMuX2RhdGEucHJvZmlsZXMsICdVU0VSJyk7XG4gIH1cblxuICBjYW5Vc2VyV3JpdGVEYXRhRm9yRGVwYXJ0bWVudChyZWNvcmRlckRlcGFydG1lbnQ6IFJlZmVyZW50aWFsIHwgYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKFJlZmVyZW50aWFsVXRpbHMuaXNFbXB0eShyZWNvcmRlckRlcGFydG1lbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0FkbWluKCk7XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRVxuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wdWJrZXkgfHwgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLl9kYXRhLmRlcGFydG1lbnQgfHwgIXRoaXMuX2RhdGEuZGVwYXJ0bWVudC5pZCkge1xuICAgICAgY29uc29sZS53YXJuKCdVc2VyIGFjY291bnQgaGFzIG5vIGRlcGFydG1lbnQgISBVbmFibGUgdG8gY2hlY2sgd3JpdGUgcmlnaHQgYWdhaW5zdCByZWNvcmRlckRlcGFydG1lbnQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTYW1lIHJlY29yZGVyIGRlcGFydG1lbnQ6IE9LLCB1c2VyIGNhbiB3cml0ZVxuICAgIGlmICh0aGlzLl9kYXRhLmRlcGFydG1lbnQuaWQgPT09IHJlY29yZGVyRGVwYXJ0bWVudC5pZCkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBFbHNlLCBjaGVjayBpZiBzdXBlcnZpc29yIChvciBtb3JlKVxuICAgIHJldHVybiBQZXJzb25VdGlscy5oYXNVcHBlck9yRXF1YWxzUHJvZmlsZSh0aGlzLl9kYXRhLnByb2ZpbGVzLCAnU1VQRVJWSVNPUicpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXIoZGF0YTogUmVnaXN0ZXJEYXRhKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKHRoaXMuaXNMb2dpbigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgYWxyZWFkeSBsb2dpbi4gUGxlYXNlIGxvZ291dCBiZWZvcmUgcmVnaXN0ZXIuJyk7XG4gICAgfVxuICAgIGlmICghZGF0YS51c2VybmFtZSB8fCAhZGF0YS5wYXNzd29yZCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBSZWdpc3RlciBuZXcgdXNlciBhY2NvdW50Li4uJywgZGF0YS5hY2NvdW50KTtcbiAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSBmYWxzZTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleXBhaXIgPSBhd2FpdCB0aGlzLmNyeXB0b1NlcnZpY2Uuc2NyeXB0S2V5cGFpcihkYXRhLnVzZXJuYW1lLCBkYXRhLnBhc3N3b3JkKTtcbiAgICAgIGRhdGEuYWNjb3VudC5wdWJrZXkgPSBCYXNlNTguZW5jb2RlKGtleXBhaXIucHVibGljS2V5KTtcblxuICAgICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICAgIGRhdGEuYWNjb3VudC5zZXR0aW5ncyA9IGRhdGEuYWNjb3VudC5zZXR0aW5ncyB8fCBuZXcgVXNlclNldHRpbmdzKCk7XG4gICAgICBkYXRhLmFjY291bnQuc2V0dGluZ3MubG9jYWxlID0gdGhpcy5zZXR0aW5ncy5sb2NhbGU7XG4gICAgICBkYXRhLmFjY291bnQuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCA9IHRoaXMuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdDtcbiAgICAgIGRhdGEuYWNjb3VudC5zZXR0aW5ncy5jb250ZW50ID0gZGF0YS5hY2NvdW50LnNldHRpbmdzLmNvbnRlbnQgfHwge307XG4gICAgICBkYXRhLmFjY291bnQuZGVwYXJ0bWVudC5pZCA9IGRhdGEuYWNjb3VudC5kZXBhcnRtZW50LmlkIHx8IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdERlcGFydG1lbnRJZDtcblxuICAgICAgdGhpcy5fY2FjaGUua2V5cGFpciA9IGtleXBhaXI7XG4gICAgICBjb25zdCBhY2NvdW50ID0gYXdhaXQgdGhpcy5zYXZlUmVtb3RlbHkoZGF0YS5hY2NvdW50LCBrZXlwYWlyKTtcblxuICAgICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoYWNjb3VudC5wcm9maWxlcyk7XG5cbiAgICAgIHRoaXMuX2RhdGEgPSBhY2NvdW50O1xuICAgICAgdGhpcy5fY2FjaGUucHVia2V5ID0gYWNjb3VudC5wdWJrZXk7XG5cbiAgICAgIC8vIFRyeSB0byBhdXRoIG9uIHBvZFxuICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoZGF0YSk7XG5cbiAgICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IHRydWU7XG5cbiAgICAgIGF3YWl0IHRoaXMuc2F2ZUxvY2FsbHkoKTtcblxuICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICAgIC8vIEVtaXQgZXZlbnRzXG4gICAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcblxuICAgICAgLy8gTGlzdGVuIHJlbW90ZSBjaGFuZ2VzXG4gICAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvciAmJiBlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcbiAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhdXRoZW50aWNhdGUoZGF0YT86IEF1dGhEYXRhKSB7XG4gICAgLy8gV2FpdCB0aGUgYXV0aCB0b2tlbiwgdGhlbiBjb250aW51ZVxuICAgIGNvbnN0IHRva2VuVHlwZSA9IGF3YWl0IGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl90b2tlblR5cGUkKTtcblxuICAgIC8vIEJhc2ljIGF1dGhcbiAgICBpZiAodG9rZW5UeXBlID09PSAnYmFzaWMnIHx8IHRva2VuVHlwZSA9PT0gJ2Jhc2ljLWFuZC10b2tlbicpIHtcblxuICAgICAgLy8gR2VuZXJhdGUgdGhlIGF1dGhCYXNpYywgaWYgdXNlZFxuICAgICAgaWYgKCF0aGlzLl9jYWNoZS5hdXRoQmFzaWMpIHtcbiAgICAgICAgLy8gU2tpcCBpZiB0b2tlbiBhbHJlYWR5IHByb3ZpZGVkXG4gICAgICAgIGlmICghKHRoaXMuX2NhY2hlLmF1dGhUb2tlbiAmJiB0b2tlblR5cGUgPT09ICdiYXNpYy1hbmQtdG9rZW4nKSkge1xuICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS51c2VybmFtZSB8fCAhZGF0YS5wYXNzd29yZCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHVzZXJuYW1lIGFuZCBwYXNzd29yZCcpO1xuICAgICAgICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IHRoaXMuY3J5cHRvU2VydmljZS5lbmNvZGVCYXNlNjQoYCR7ZGF0YS51c2VybmFtZX06JHtkYXRhLnBhc3N3b3JkfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9uQXV0aEJhc2ljQ2hhbmdlLm5leHQodGhpcy5fY2FjaGUuYXV0aEJhc2ljKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB0aGUgYXV0aFRva2VuLCBpZiB1c2VkXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gJ3Rva2VuJyB8fCB0b2tlblR5cGUgPT09ICdiYXNpYy1hbmQtdG9rZW4nKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZUFuZEdldFRva2VuKHRoaXMuX2NhY2hlLmF1dGhUb2tlbik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBOZXZlciBhdXRoZW50aWNhdGUsIG9yIG5vdCByZWFkeSBmb3Igb2ZmbGluZSBtb2RlID0+IGV4aXRcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcmdldCBhdXRoQmFzaWMsIHRvIHN3aXRjaCB0byBhdXRoVG9rZW5cbiAgICBpZiAodG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykge1xuICAgICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9naW4oZGF0YTogQXV0aERhdGEpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCB1c2VybmFtZSBvciBwYXNzd29yZCcpO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIExvZ2luLi4uJyk7XG5cbiAgICBsZXQga2V5cGFpcjtcbiAgICB0cnkge1xuICAgICAga2V5cGFpciA9IGF3YWl0IHRoaXMuY3J5cHRvU2VydmljZS5zY3J5cHRLZXlwYWlyKGRhdGEudXNlcm5hbWUsIGRhdGEucGFzc3dvcmQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVU5LTk9XTl9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlNDUllQVF9FUlJPUicgfTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBwdWJrZXkra2V5cGFpclxuICAgIHRoaXMuX2NhY2hlLnB1YmtleSA9IEJhc2U1OC5lbmNvZGUoa2V5cGFpci5wdWJsaWNLZXkpO1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBrZXlwYWlyO1xuXG4gICAgLy8gVHJ5IHRvIGxvYWQgcHJldmlvdXMgdG9rZW5cbiAgICBsZXQgcHJldmlvdXNUb2tlbjogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChUT0tFTl9TVE9SQUdFX0tFWSk7XG4gICAgcHJldmlvdXNUb2tlbiA9IHByZXZpb3VzVG9rZW4gJiYgcHJldmlvdXNUb2tlbi5zdGFydHNXaXRoKHRoaXMuX2NhY2hlLnB1YmtleSkgJiYgcHJldmlvdXNUb2tlbiB8fCBudWxsO1xuXG4gICAgLy8gT2ZmbGluZSBtb2RlXG4gICAgY29uc3Qgb2ZmbGluZSA9IHRoaXMuc2V0dGluZ3MuaGFzT2ZmbGluZUZlYXR1cmUoKSAmJiAodGhpcy5uZXR3b3JrLm9mZmxpbmUgfHwgZGF0YS5vZmZsaW5lID09PSB0cnVlKTtcbiAgICBpZiAob2ZmbGluZSkgIHtcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiA9IHByZXZpb3VzVG9rZW47XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSBuZXR3b3JrIGlmIHNldCBhcyBvZmZsaW5lXG4gICAgICB0aGlzLm5ldHdvcmsuc2V0Rm9yY2VPZmZsaW5lKHRydWUsIHtzaG93VG9hc3Q6IGZhbHNlfSk7XG4gICAgICBjb25zb2xlLmluZm8oYFthY2NvdW50XSBMb2dpbiBbT0tdIHtwdWJrZXk6ICR7dGhpcy5fY2FjaGUucHVia2V5LnN1YnN0cigwLCA4KX19LCB7b2ZmbGluZTogdHJ1ZX1gKTtcbiAgICB9XG5cbiAgICAvLyBPbmxpbmUgbW9kZTogdHJ5IHRvIGF1dGggb24gcG9kXG4gICAgZWxzZSB7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gTmV2ZXIgYXV0aGVudGljYXRlLCBvciBub3QgcmVhZHkgZm9yIG9mZmxpbmUgbW9kZSA9PiBleGl0XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIGFjY291bnQgZGF0YVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWREYXRhKHtvZmZsaW5lLCBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSd9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgLy8gSWYgYWNjb3VudCBub3QgZm91bmQsIGNoZWNrIGlmIGVtYWlsIGlzIHZhbGlkXG4gICAgICBpZiAoZXJyICYmICsoZXJyLmNvZGUpID09PSBFcnJvckNvZGVzLkxPQURfQUNDT1VOVF9FUlJPUikge1xuXG4gICAgICAgIC8vIENoZWNrIGVtYWlsIGV4aXN0c1xuICAgICAgICBpZiAoZGF0YS51c2VybmFtZS5pbmRleE9mKCdAJykgIT09IC0xKSB7XG4gICAgICAgICAgbGV0IGlzRW1haWxFeGlzdHM7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlzRW1haWxFeGlzdHMgPSBhd2FpdCB0aGlzLmlzRW1haWxFeGlzdHMoZGF0YS51c2VybmFtZSk7XG4gICAgICAgICAgfSBjYXRjaCAob3RoZXJFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgZXJyOyAvLyByZXNlbmQgdGhlIGZpcnN0IGVycm9yXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRW1haWwgbm90IGV4aXN0cyAobm8gYWNjb3VudClcbiAgICAgICAgICBpZiAoIWlzRW1haWxFeGlzdHMpIHtcbiAgICAgICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5VTktOT1dOX0FDQ09VTlRfRU1BSUwsIG1lc3NhZ2U6ICdFUlJPUi5VTktOT1dOX0FDQ09VTlRfRU1BSUwnIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW1haWwgZXhpc3RzLCBzbyBlcnJvciA9ICdiYWQgcGFzc3dvcmQnXG4gICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5CQURfUEFTU1dPUkQsIG1lc3NhZ2U6ICdFUlJPUi5CQURfUEFTU1dPUkQnIH07XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjsgLy8gcmVzZW5kIHRoZSBmaXJzdCBlcnJvclxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBTdG9yZSB0byBsb2NhbCBzdG9yYWdlXG4gICAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudCB0byBvYnNlcnZlcnNcbiAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKG9wdHM/OiB7c2hvd1RvYXN0PzogYm9vbGVhbn0pOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQnKTtcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNoZWNrIGFjY291bnQgaW4gb2ZmbGluZSBtb2RlJyk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBSZWxvYWRpbmcgYWNjb3VudC4uLmApO1xuICAgIGNvbnN0IHdhc0xvZ2luID0gdGhpcy5pc0xvZ2luKCk7XG5cbiAgICB0cnkge1xuXG4gICAgICBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBSZWxvYWRpbmcgYWNjb3VudCBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgICAvLyBFbWl0IGxvZ2luIGV2ZW50IHRvIHN1YnNjcmliZXJzXG4gICAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcblxuICAgICAgLy8gRGlzcGxheSB0b2FzdCAod2l0aG91dCBhd2FpdCwgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0IGNsb3NlIGV2ZW50KVxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ0FDQ09VTlQuSU5GTy5SRUxPQURFRCcsIHR5cGU6ICdpbmZvJ30pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDYW5ub3QgcmVsb2FkIGJ1dCB3YXMgbG9naW46IGZvcmNlIHRvIGxvZ291dFxuICAgICAgaWYgKHdhc0xvZ2luICYmICF0aGlzLmlzTG9naW4oKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbYWNjb3VudF0gUmVsb2FkaW5nIGFjY291bnQgZmFpbGVkLiBXaWxsIGZvcmNlIGxvZ291dC4uLmAsIGVycm9yKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG9yIHVwZGF0ZSBhbiB1c2VyIGFjY291bnQsIHRvIHRoZSByZW1vdGUgc3RvcmFnZVxuICAgKlxuICAgKiBAcGFyYW0gYWNjb3VudFxuICAgKi9cbiAgYXN5bmMgc2F2ZShhY2NvdW50OiBBY2NvdW50KTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHJldHVybiBQcm9taXNlLnJlamVjdCgnVXNlciBub3QgbG9nZ2VkJyk7XG4gICAgaWYgKHRoaXMuX2NhY2hlLnB1YmtleSAhPT0gYWNjb3VudC5wdWJrZXkpIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm90IHVzZXIgYWNjb3VudCcpO1xuXG4gICAgYWNjb3VudCA9IGF3YWl0IHRoaXMuc2F2ZVJlbW90ZWx5KGFjY291bnQsIHRoaXMuX2NhY2hlLmtleXBhaXIpO1xuXG4gICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgYWNjb3VudC5hdmF0YXIgPSBhY2NvdW50LmF2YXRhciB8fCAodGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsICsgREVGQVVMVF9BVkFUQVJfSU1BR0UpO1xuICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoYWNjb3VudC5wcm9maWxlcyk7XG5cbiAgICB0aGlzLl9kYXRhID0gYWNjb3VudDtcbiAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSB0cnVlO1xuXG4gICAgLy8gU2F2ZSBsb2NhbGx5IChpbiBzdG9yYWdlKVxuICAgIGF3YWl0IHRoaXMuc2F2ZUxvY2FsbHkoKTtcblxuICAgIC8vIFNlbmQgZXZlbnRcbiAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIGNvbnN0IGhhZEF1dGhUb2tlbiA9IHRoaXMuX2NhY2hlLmF1dGhUb2tlbiAmJiB0cnVlO1xuICAgIGNvbnN0IGhhZEF1dGhCYXNpYyA9IHRoaXMuX2NhY2hlLmF1dGhCYXNpYyAmJiB0cnVlO1xuICAgIGNvbnN0IHB1YmtleSA9IHRoaXMuX2NhY2hlICYmIHRoaXMuX2NhY2hlLnB1YmtleTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuaGFzT2ZmbGluZUZlYXR1cmUoKSkge1xuXG4gICAgICAvLyBSZW1vdmUgYWxsIGRhdGEgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFBVQktFWV9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoVE9LRU5fU1RPUkFHRV9LRVkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEFDQ09VTlRfU1RPUkFHRV9LRVkpLFxuICAgICAgICBwdWJrZXkgJiYgdGhpcy5zdG9yYWdlLnJlbW92ZShBQ0NPVU5UX1NUT1JBR0VfS0VZICsgJyMnICsgcHVia2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKSxcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShTRUNLRVlfU1RPUkFHRV9LRVkpXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBPZmZsaW5lIGZlYXR1cmVzIGVuYWJsZTogbmVlZCB0byBrZWVwIHNvbWUgZGF0YVxuICAgIGVsc2Uge1xuICAgICAgLy8gQWx3YXlzIHJlbW92ZSBvbmx5IHNlY3JldCBrZXlcbiAgICAgIC8vIEJ1dCBrZWVwOlxuICAgICAgLy8gLSBhY2NvdW50IGJ5IHB1YmtleVxuICAgICAgLy8gLSBhdXRoIHRva2VuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoUFVCS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShBQ0NPVU5UX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShTRUNLRVlfU1RPUkFHRV9LRVkpXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiBwYWdlIGhpc3RvcnksIGluIGxvY2FsIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5jbGVhclBhZ2VIaXN0b3J5KCk7XG5cbiAgICAvLyBOb3RpZnkgb2JzZXJ2ZXJzXG4gICAgdGhpcy5vbkxvZ291dC5uZXh0KCk7XG4gICAgaWYgKGhhZEF1dGhUb2tlbikgdGhpcy5vbkF1dGhUb2tlbkNoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgaWYgKGhhZEF1dGhCYXNpYykgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhIGFjY291bnRcbiAgICpcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGxvYWQob3B0cz86IHtcbiAgICBvZmZsaW5lPzogYm9vbGVhbjtcbiAgICBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5O1xuICB9KTogUHJvbWlzZTxBY2NvdW50IHwgdW5kZWZpbmVkPiB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIExvYWRpbmcgYWNjb3VudC4uLmApO1xuICAgIGxldCBqc29uOiBhbnk7XG5cbiAgICAvLyBMb2FkIGxvY2FsbHlcbiAgICBjb25zdCBvZmZsaW5lID0gdGhpcy5uZXR3b3JrLm9mZmxpbmVcbiAgICAgICYmICghb3B0cyB8fCAob3B0cy5mZXRjaFBvbGljeSAhPT0gJ25ldHdvcmstb25seScgJiYgb3B0cy5mZXRjaFBvbGljeSAhPT0gJ25vLWNhY2hlJykpXG4gICAgICB8fCAob3B0cyAmJiBvcHRzLm9mZmxpbmUgPT09IHRydWUpO1xuICAgIGlmIChvZmZsaW5lKSB7XG4gICAgICBqc29uID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChBQ0NPVU5UX1NUT1JBR0VfS0VZKTtcbiAgICAgIGpzb24gPSBqc29uICYmICh0eXBlb2YganNvbiA9PT0gJ3N0cmluZycpICYmIEpTT04ucGFyc2UoanNvbikgfHwganNvbjtcbiAgICAgIGpzb24gPSBqc29uICYmIHRoaXMuX2NhY2hlLnB1YmtleSAmJiAoanNvbi5wdWJrZXkgPT09IHRoaXMuX2NhY2hlLnB1YmtleSkgJiYganNvbiB8fCBudWxsO1xuICAgICAgaWYgKCFqc29uICYmIHRoaXMuX2NhY2hlLnB1YmtleSkge1xuICAgICAgICBqc29uID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChBQ0NPVU5UX1NUT1JBR0VfS0VZICsgJyMnICsgdGhpcy5fY2FjaGUucHVia2V5KTtcbiAgICAgICAganNvbiA9IGpzb24gJiYgKHR5cGVvZiBqc29uID09PSAnc3RyaW5nJykgJiYgSlNPTi5wYXJzZShqc29uKSB8fCBqc29uO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvYWQgcmVtb3RlbHlcbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICAgIHF1ZXJ5OiBMb2FkUXVlcnksXG4gICAgICAgIGVycm9yOiB7IGNvZGU6IEVycm9yQ29kZXMuTE9BRF9BQ0NPVU5UX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuTE9BRF9BQ0NPVU5UX0VSUk9SJyB9LFxuICAgICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiBvcHRzLmZldGNoUG9saWN5IHx8ICduby1jYWNoZScgfHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIGpzb24gPSBkYXRhO1xuICAgIH1cblxuICAgIGlmIChqc29uKSB7XG4gICAgICBjb25zdCBhY2NvdW50ID0gQWNjb3VudC5mcm9tT2JqZWN0KGpzb24pO1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCwgYWNjb3VudCk7XG4gICAgICAgcmV0dXJuIGFjY291bnQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKGBbYWNjb3VudF0gQWNjb3VudCBub3QgZm91bmQgIWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBlbWFpbCBpcyBhdmFpbGFibGUgZm9yIG5ldyBhY2NvdW50IHJlZ2lzdHJhdGlvbi5cbiAgICogVGhyb3cgYW4gZXJyb3IgaWYgbm90IGF2YWlsYWJsZVxuICAgKlxuICAgKiBAcGFyYW0gZW1haWxcbiAgICovXG4gIGFzeW5jIGNoZWNrRW1haWxBdmFpbGFibGUoZW1haWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlzRW1haWxFeGlzdHMgPSBhd2FpdCB0aGlzLmlzRW1haWxFeGlzdHMoZW1haWwpO1xuICAgIGlmIChpc0VtYWlsRXhpc3RzKSB7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuRU1BSUxfQUxSRUFEWV9SRUdJU1RFUkVELCBtZXNzYWdlOiAnRVJST1IuRU1BSUxfQUxSRUFEWV9SRUdJU1RFUkVEJyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBlbWFpbCBpcyBleGlzdHMgaW4gc2VydmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZW1haWxcbiAgICovXG4gIGFzeW5jIGlzRW1haWxFeGlzdHMoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gQ2hlY2tpbmcgaWYgeycgKyBlbWFpbCArICd9IGV4aXN0cy4uLicpO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGlzRW1haWxFeGlzdHM6IGJvb2xlYW4gfSwgSXNFbWFpbEV4aXN0c1ZhcmlhYmxlcz4oe1xuICAgICAgcXVlcnk6IElzRW1haWxFeGlzdHNRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgaGFzaDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBFbWFpbCBleGlzdDogJyArIChkYXRhICYmIGRhdGEuaXNFbWFpbEV4aXN0cykpO1xuXG4gICAgcmV0dXJuIGRhdGEgJiYgZGF0YS5pc0VtYWlsRXhpc3RzO1xuICB9XG5cbiAgYXN5bmMgc2VuZENvbmZpcm1hdGlvbkVtYWlsKGVtYWlsOiBzdHJpbmcsIGxvY2FsZT86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgbG9jYWxlID0gbG9jYWxlIHx8IHRoaXMuc2V0dGluZ3MubG9jYWxlO1xuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBTZW5kaW5nIGNvbmZpcm1hdGlvbiBlbWFpbCB0byB7JyArIGVtYWlsICsgJ30gd2l0aCBsb2NhbGUgeycgKyBsb2NhbGUgKyAnfS4uLicpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8Ym9vbGVhbj4oe1xuICAgICAgbXV0YXRpb246IFNlbmRDb25maXJtRW1haWxNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgbG9jYWxlXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TRU5UX0NPTkZJUk1BVElPTl9FTUFJTF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TRU5UX0FDQ09VTlRfQ09ORklSTUFUSU9OX0VNQUlMX0ZBSUxFRCdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpcm1FbWFpbChlbWFpbDogU3RyaW5nLCBjb2RlOiBTdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBTZW5kbmcgY29uZmlybSByZXF1ZXN0IGZvciBlbWFpbCB7JyArIGVtYWlsICsgJ30gd2l0aCBjb2RlIHsnICsgY29kZSArICd9Li4uJyk7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgY29uZmlybUFjY291bnRFbWFpbDogYm9vbGVhbiB9Pih7XG4gICAgICBtdXRhdGlvbjogQ29uZmlybUVtYWlsTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGNvZGVcbiAgICAgIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLkNPTkZJUk1fRU1BSUxfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuQ09ORklSTV9BQ0NPVU5UX0VNQUlMX0ZBSUxFRCdcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzICYmIHJlcy5jb25maXJtQWNjb3VudEVtYWlsO1xuICB9XG5cbiAgbGlzdGVuQ2hhbmdlcyhvcHRzPzogQWNjb3VudFdhdGNoT3B0aW9ucyk6IFN1YnNjcmlwdGlvbiB7XG4gICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCk7IC8vIEFscmVhZHkgc3RhcnRlZDogc2tpcFxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKG9wdHMpO1xuICB9XG5cbiAgZ2V0IGFkZGl0aW9uYWxGaWVsZHMoKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCAkYWRkaXRpb25hbEZpZWxkcygpOiBPYnNlcnZhYmxlPEZvcm1GaWVsZERlZmluaXRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLl8kYWRkaXRpb25hbEZpZWxkcy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldEFkZGl0aW9uYWxGaWVsZChrZXk6IHN0cmluZyk6IEZvcm1GaWVsZERlZmluaXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl8kYWRkaXRpb25hbEZpZWxkcy5nZXRWYWx1ZSgpLmZpbmQoZiA9PiBmLmtleSA9PT0ga2V5KTtcbiAgfVxuXG4gIHJlZ2lzdGVyQWRkaXRpb25hbEZpZWxkKGZpZWxkOiBGb3JtRmllbGREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMuZ2V0VmFsdWUoKTtcbiAgICBpZiAoISF2YWx1ZXMuZmluZChmID0+IGYua2V5ID09PSBmaWVsZC5rZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFkZGl0aW9uYWwgYWNjb3VudCBmaWVsZCB7a2V5OiAke2ZpZWxkLmtleX19IGFscmVhZHkgZGVmaW5lLmApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBGb3VuZCBhZGRpdGlvbmFsIGFjY291bnQncyBmaWVsZCB7a2V5OiAke2ZpZWxkLmtleX19YCk7XG4gICAgdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMubmV4dCh2YWx1ZXMuY29uY2F0KGZpZWxkKSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJvdGVjdGVkIHJlc2V0RGF0YSgpIHtcbiAgICB0aGlzLnN0b3BMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2FjaGUua2V5cGFpciA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUuYXV0aFRva2VuID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLnB1YmtleSA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUubWFpblByb2ZpbGUgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLnBlcnNvbiA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUuZGVwYXJ0bWVudCA9IG51bGw7XG4gICAgdGhpcy5fZGF0YSA9IG5ldyBBY2NvdW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZERhdGEob3B0cz86IHtcbiAgICBvZmZsaW5lPzogYm9vbGVhbjtcbiAgICBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5O1xuICB9KTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG5cbiAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBhY2NvdW50ID0gKGF3YWl0IHRoaXMubG9hZChvcHRzKSkgfHwgbmV3IEFjY291bnQoKTtcblxuICAgICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgICBhY2NvdW50LmF2YXRhciA9IGFjY291bnQuYXZhdGFyIHx8ICh0aGlzLmVudmlyb25tZW50LmJhc2VVcmwgKyBERUZBVUxUX0FWQVRBUl9JTUFHRSk7XG4gICAgICBhY2NvdW50LnNldHRpbmdzID0gYWNjb3VudC5zZXR0aW5ncyB8fCBuZXcgVXNlclNldHRpbmdzKCk7XG4gICAgICBhY2NvdW50LnNldHRpbmdzLmxvY2FsZSA9IGFjY291bnQuc2V0dGluZ3MubG9jYWxlIHx8IHRoaXMuc2V0dGluZ3MubG9jYWxlO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncy5sYXRMb25nRm9ybWF0ID0gYWNjb3VudC5zZXR0aW5ncy5sYXRMb25nRm9ybWF0IHx8IHRoaXMuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCB8fCAnRERNTSc7XG4gICAgICBhY2NvdW50LnNldHRpbmdzLmNvbnRlbnQgPSBhY2NvdW50LnNldHRpbmdzLmNvbnRlbnQgfHwge307XG5cbiAgICAgIC8vIFJlYWQgbWFpbiBwcm9maWxlXG4gICAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuXG4gICAgICAvLyBVcGRhdGUsIGluc3RlYWQgb2YgcmVwbGFjZSBpdFxuICAgICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgICAgdGhpcy5fZGF0YS5mcm9tT2JqZWN0KGFjY291bnQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBhY2NvdW50O1xuICAgICAgfVxuICAgICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgICAgLy8gQXBwbHkgc2V0dGluZ3MsIGZvdW5kIGluIHJlbW90ZSBhY2NvdW50XG4gICAgICBpZiAoYWNjb3VudC5zZXR0aW5ncykge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgICAgICAuLi50aGlzLnNldHRpbmdzLnNldHRpbmdzLFxuICAgICAgICAgIC4uLmFjY291bnQuc2V0dGluZ3MuYXNMb2NhbFNldHRpbmdzKClcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmdzLmFwcGx5KHNldHRpbmdzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgIGlmIChlcnJvci5jb2RlICYmIGVycm9yLm1lc3NhZ2UpIHRocm93IGVycm9yO1xuXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRocm93IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5MT0FEX0FDQ09VTlRfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0FDQ09VTlRfRVJST1InXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBsaXN0ZW5TZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+e1xuICAgIC8vIFdoZW4gc2V0dGluZ3MgY2hhbmdlZDogc2F2ZSBpdCByZW1vdGVseVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLnNldHRpbmdzLm9uQ2hhbmdlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSxcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0xvZ2luKCkgJiYgdGhpcy5uZXR3b3JrLm9ubGluZSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHNldHRpbmdzID0+IHRoaXMuc2F2ZUxvY2FsU2V0dGluZ3NSZW1vdGVseShzZXR0aW5ncykpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPEFjY291bnQgfCB1bmRlZmluZWQ+IHtcblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgY29uc3QgdmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zdG9yYWdlLmdldChQVUJLRVlfU1RPUkFHRV9LRVkpLFxuICAgICAgdGhpcy5zdG9yYWdlLmdldChUT0tFTl9TVE9SQUdFX0tFWSksXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0KFNFQ0tFWV9TVE9SQUdFX0tFWSlcbiAgICBdKTtcbiAgICBjb25zdCBwdWJrZXkgPSB2YWx1ZXNbMF07XG4gICAgY29uc3QgdG9rZW4gPSB2YWx1ZXNbMV07XG4gICAgY29uc3Qgc2Vja2V5ID0gdmFsdWVzWzJdO1xuXG4gICAgLy8gUXVpdCBpZiBubyBwdWJrZXkgKG5vdCBsb2dnZWQpXG4gICAgaWYgKCFwdWJrZXkpIHJldHVybjtcblxuICAgIC8vIFF1aXQgaWYgY291bGQgbm90IGF1dGggb24gcG9kXG4gICAgY29uc3QgY2FuUmVtb3RlQXV0aCA9IHRva2VuIHx8IHNlY2tleSB8fCBmYWxzZTtcbiAgICBpZiAoIWNhblJlbW90ZUF1dGgpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgcmVzdG9yYXRpb24uLi5gKTtcblxuICAgIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiA9IHRva2VuO1xuICAgIHRoaXMuX2NhY2hlLnB1YmtleSA9IHB1YmtleTtcbiAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0gc2Vja2V5ICYmIHtcbiAgICAgIHB1YmxpY0tleTogQmFzZTU4LmRlY29kZShwdWJrZXkpLFxuICAgICAgc2VjcmV0S2V5OiBCYXNlNTguZGVjb2RlKHNlY2tleSlcbiAgICB9IHx8IG51bGw7XG5cbiAgICAvLyBPbmxpbmUgbW9kZTogdHJ5IHRvIGNvbm5lY3QgdG8gcG9kXG4gICAgaWYgKHRoaXMubmV0d29yay5vbmxpbmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKCk7XG4gICAgICAgIGlmICghdGhpcy5fY2FjaGUuYXV0aFRva2VuICYmICF0aGlzLl9jYWNoZS5hdXRoQmFzaWMpIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkJyk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gT2ZmbGluZSBmZWF0dXJlIGFyZSBlbmFibGU6IGNvbnRpbnVlIGluIG9mZmxpbmUgbW9kZVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5oYXNPZmZsaW5lRmVhdHVyZSgpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbYWNjb3VudF0gVW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBvbiBwb2Q6IGZvcmNpbmcgb2ZmbGluZSBtb2RlJyk7XG4gICAgICAgICAgdGhpcy5uZXR3b3JrLnNldEZvcmNlT2ZmbGluZSh0cnVlLCB7c2hvd1RvYXN0OiBmYWxzZX0pO1xuICAgICAgICAgIC8vIENvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gb2ZmbGluZSBmZWF0dXJlcyBlbmFibGUgKD1vZmZsaW5lIG1vZGUgbm90IGFsbG93ZWQpXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGFjY291bnQsIGZyb20gcHVia2V5XG4gICAgbGV0IGpzb25BY2NvdW50ID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChgJHtBQ0NPVU5UX1NUT1JBR0VfS0VZfSMke3B1YmtleX1gKTtcbiAgICBpZiAoIWpzb25BY2NvdW50KSB7XG4gICAgICAvLyBUcnkgdXNpbmcgdGhlIG9sZCBzdG9yYWdlIGtleVxuICAgICAgY29uc3QgYWNjb3VudFN0ciA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoQUNDT1VOVF9TVE9SQUdFX0tFWSk7XG4gICAgICBqc29uQWNjb3VudCA9IGFjY291bnRTdHIgJiYgKCh0eXBlb2YgYWNjb3VudFN0ciA9PT0gJ3N0cmluZycpICYmIEpTT04ucGFyc2UoanNvbkFjY291bnQpIHx8IGFjY291bnRTdHIpO1xuICAgIH1cblxuICAgIC8vIEludmFsaWQgYWNjb3VudDogZG8gbm90IHVzZSBpdFxuICAgIGlmICghanNvbkFjY291bnQgfHwganNvbkFjY291bnQucHVia2V5ICE9PSBwdWJrZXkpIHJldHVybjtcblxuICAgIC8vIFRyYW5zZm9ybSB0byBlbnRpdHlcbiAgICBjb25zdCBhY2NvdW50ID0gQWNjb3VudC5mcm9tT2JqZWN0KGpzb25BY2NvdW50KTtcblxuICAgIC8vIFVwZGF0ZSBkYXRhXG4gICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgdGhpcy5fY2FjaGUubWFpblByb2ZpbGUgPSBQZXJzb25VdGlscy5nZXRNYWluUHJvZmlsZShhY2NvdW50LnByb2ZpbGVzKTtcbiAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSB0cnVlO1xuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMub25Mb2dpbi5uZXh0KHRoaXMuX2RhdGEpO1xuICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcblxuICAgIGlmICh0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzKSB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZXN0b3JhdGlvbiBbT0tdIHtwdWJrZXk6ICR7cHVia2V5LnN1YnN0cigwLCA4KX19LCB7cHJvZmlsZTogJHt0aGlzLl9jYWNoZS5tYWluUHJvZmlsZX19YCk7XG5cbiAgICByZXR1cm4gYWNjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGFjY291bnQgaW50byB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHNhdmVMb2NhbGx5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gU2F2aW5nIGFjY291bnQgeyR7dGhpcy5fY2FjaGUucHVia2V5LnN1YnN0cmluZygwLCA2KX19IGluIGxvY2FsIHN0b3JhZ2UuLi5gKTtcblxuICAgIC8vIENvbnZlcnQgYWNjb3VudCB0byBqc29uXG4gICAgY29uc3QganNvbiA9IHRoaXMuX2RhdGEuYXNPYmplY3Qoe2tlZXBUeXBlbmFtZTogdHJ1ZX0pO1xuICAgIGNvbnN0IHNlY2tleSA9IHRoaXMuX2NhY2hlLmtleXBhaXIgJiYgdGhpcy5fY2FjaGUua2V5cGFpci5zZWNyZXRLZXkgJiYgQmFzZTU4LmVuY29kZSh0aGlzLl9jYWNoZS5rZXlwYWlyLnNlY3JldEtleSkgfHwgbnVsbDtcblxuICAgIC8vIENvbnZlcnQgYXZhdGFyIFVSTCB0byBkYXRhVXJsIChlLmcuICdkYXRhOmltYWdlL3BuZzo8YmFzZTY0IGNvbnRlbnQ+JylcbiAgICBjb25zdCBoYXNBdmF0YXJVcmwgPSBqc29uLmF2YXRhciAmJiAhanNvbi5hdmF0YXIuZW5kc1dpdGgoREVGQVVMVF9BVkFUQVJfSU1BR0UpICYmXG4gICAgICAoanNvbi5hdmF0YXIuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IChqc29uLmF2YXRhci5zdGFydHNXaXRoKCdodHRwczovLycpKSk7XG4gICAgaWYgKGhhc0F2YXRhclVybCAmJiB0aGlzLm5ldHdvcmsub25saW5lKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGUuZ2V0SW1hZ2UoanNvbi5hdmF0YXIsIHtcbiAgICAgICAgdGh1bWJuYWlsOiB0cnVlLFxuICAgICAgICBvdXRwdXRUeXBlOiAnZGF0YVVybCdcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKGRhdGFVcmwgPT4ge1xuICAgICAgICAgIGlmIChkYXRhVXJsICYmIHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gSW1hZ2UgZmV0Y2hlZDogJywgZGF0YVVybC5zdWJzdHJpbmcoMCwgNTApKTtcblxuICAgICAgICAgIC8vIFRPRE86IG1ha2Ugc3VyZSB0byBkaXNwbGF5IEJhc2U2NCBpbWFnZSBpbiB0aGUgbWVudSB0b3AgaGVhZGVyXG4gICAgICAgICAgLy9qc29uQWNjb3VudC5hdmF0YXIgPSBkYXRhVXJsO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbYWNjb3VudF0gRXJyb3Igd2hpbGUgZmV0Y2hpbmcgaW1hZ2U6ICR7anNvbi5hdmF0YXJ9OiAke2Vycn1gKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldChQVUJLRVlfU1RPUkFHRV9LRVksIHRoaXMuX2NhY2hlLnB1YmtleSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoVE9LRU5fU1RPUkFHRV9LRVksIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoYCR7QUNDT1VOVF9TVE9SQUdFX0tFWX0jJHt0aGlzLl9jYWNoZS5wdWJrZXl9YCwganNvbiksXG4gICAgICAgIC8vIFNlY3JldCBrZXkgKG9wdGlvbmFsKVxuICAgICAgICBzZWNrZXkgJiYgdGhpcy5zdG9yYWdlLnNldChTRUNLRVlfU1RPUkFHRV9LRVksIHNlY2tleSkgfHwgdGhpcy5zdG9yYWdlLnJlbW92ZShTRUNLRVlfU1RPUkFHRV9LRVkpLFxuICAgICAgICAvLyBSZW1vdmUgb2xkIHN0b3JhZ2Uga2V5XG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSlcbiAgICAgIF0pO1xuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBBY2NvdW50IHNhdmVkIGluIGxvY2FsIHN0b3JhZ2UnKTtcbiAgICB9XG4gICAgY2F0Y2goZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbYWNjb3VudF0gRXJyb3Igd2hpbGUgc2F2aW5nIGFjY291bnQgbG9jYWxseTogJyArIChlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKSwgZXJyKTtcbiAgICB9XG4gIH1cblxuICAgYXN5bmMgc2F2ZUxvY2FsU2V0dGluZ3NSZW1vdGVseShzb3VyY2U6IExvY2FsU2V0dGluZ3Mpe1xuICAgICBpZiAoIXNvdXJjZSB8fCAhdGhpcy5pc0xvZ2luKCkgfHwgc291cmNlLmFjY291bnRJbmhlcml0YW5jZSA9PT0gZmFsc2UpIHJldHVybjsgLy8gU2tpcFxuICAgICBjb25zdCBhY2NvdW50ID0gdGhpcy5hY2NvdW50O1xuXG4gICAgIC8vIE1lcmdlIGxvY2FsIHNldHRpbmdzIGludG8gYWNjb3VudCdzIHNldHRpbmdzXG4gICAgIGNvbnN0IHNldHRpbmdzID0gVXNlclNldHRpbmdzLmZyb21PYmplY3QoYWNjb3VudC5zZXR0aW5ncykgfHwgbmV3IFVzZXJTZXR0aW5ncygpO1xuICAgICBjb25zdCBjaGFuZ2VkID0gc2V0dGluZ3MubWVyZ2Uoc291cmNlLCBbJ2xvY2FsZScsICdsYXRMb25nRm9ybWF0JywgJ3Byb3BlcnRpZXMnXSk7XG5cbiAgICAgaWYgKCFjaGFuZ2VkKSByZXR1cm47IC8vIFNraXAgaWYgdW5jaGFuZ2VkXG5cbiAgICAgLy8gU2F2ZSByZW1vdGVseVxuICAgICB0aGlzLmFjY291bnQuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgYXdhaXQgdGhpcy5zYXZlU2V0dGluZ3NSZW1vdGVseShzZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG9yIHVwZGF0ZSBhbiB1c2VyIGFjY291bnRcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRcbiAgICogQHBhcmFtIGtleVBhaXJcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlUmVtb3RlbHkoYWNjb3VudDogQWNjb3VudCwga2V5UGFpcj86IEtleVBhaXIpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBhY2NvdW50LnB1YmtleSA9IGFjY291bnQucHVia2V5IHx8IChrZXlQYWlyICYmIEJhc2U1OC5lbmNvZGUoa2V5UGFpci5wdWJsaWNLZXkpKTtcbiAgICBpZiAoIWFjY291bnQucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYWNjb3VudCBwdWJrZXknKTtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gU2F2aW5nIGFjY291bnQgcmVtb3RlbHkuLi5gKTtcblxuICAgIGNvbnN0IGlzTmV3ID0gaXNOaWwoYWNjb3VudC5pZCk7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGFuIHVwZGF0ZTogZ2V0IGV4aXN0aW5nIGFjY291bnQncyB1cGRhdGVEYXRlLCB0byBhdm9pZCAndmVyc2lvbiBlcnJvcicgd2hlbiBzYXZpbmdcbiAgICBpZiAoIWlzTmV3KSB7XG4gICAgICBjb25zdCBleGlzdGluZ0FjY291bnQgPSBhd2FpdCB0aGlzLmxvYWQoeyBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScgfSk7XG4gICAgICBpZiAoIWV4aXN0aW5nQWNjb3VudCB8fCAhZXhpc3RpbmdBY2NvdW50LnVwZGF0ZURhdGUpIHtcbiAgICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkFDQ09VTlRfTk9UX0VYSVNUUywgbWVzc2FnZTogJ0VSUk9SLkFDQ09VTlRfTk9UX0VYSVNUUycgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZShleGlzdGluZ0FjY291bnQsIGFjY291bnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGpzb24gPSBhY2NvdW50LmFzT2JqZWN0KE1JTklGWV9FTlRJVFlfRk9SX1BPRCk7XG5cbiAgICAvLyBVc2VyIG5vdCBhbGxvdyB0byBjaGFuZ2UgaGlzIHByb2ZpbGVzXG4gICAgZGVsZXRlIGpzb24ucHJvZmlsZXM7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogQWNjb3VudCB9Pih7XG4gICAgICBtdXRhdGlvbjogaXNOZXcgPyBBY2NvdW50TXV0YXRpb25zLmNyZWF0ZSA6IEFjY291bnRNdXRhdGlvbnMuc2F2ZSxcbiAgICAgIHZhcmlhYmxlczogeyBkYXRhOiBqc29uIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNBVkVfQUNDT1VOVF9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLlNBVkVfQUNDT1VOVF9FUlJPUidcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENvcHkgdXBkYXRlIHByb3BlcnRpZXNcbiAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoZGF0YSwgYWNjb3VudCk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBBY2NvdW50IHJlbW90ZWx5IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgcmV0dXJuIGFjY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG9yIHVwZGF0ZSB1c2VyIHNldHRpbmdzXG4gICAqXG4gICAqIEBwYXJhbSBzZXR0aW5nc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHNhdmVTZXR0aW5nc1JlbW90ZWx5KHNldHRpbmdzOiBVc2VyU2V0dGluZ3MpIHtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gU2F2aW5nIHNldHRpbmdzIHJlbW90ZWx5Li4uYCk7XG5cbiAgICBjb25zdCBqc29uID0gc2V0dGluZ3MuYXNPYmplY3QoTUlOSUZZX0VOVElUWV9GT1JfUE9EKTtcblxuICAgIC8vIEV4ZWN1dGUgbXV0YXRpb25cbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBkYXRhOiBVc2VyU2V0dGluZ3MgfT4oe1xuICAgICAgbXV0YXRpb246IEFjY291bnRNdXRhdGlvbnMuc2F2ZVNldHRpbmdzLFxuICAgICAgdmFyaWFibGVzOiB7IGRhdGE6IGpzb24gfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuU0FWRV9TRVRUSU5HU19FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLlNBVkVfU0VUVElOR1NfRVJST1InXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlU2V0dGluZ3MoZGF0YSwgc2V0dGluZ3MpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gU2V0dGluZ3MgcmVtb3RlbHkgc2F2ZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICAvLyBTYXZlIGludG8gYWNjb3VudFxuICAgIGlmICh0aGlzLmFjY291bnQpIHRoaXMuYWNjb3VudC5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGF1dGhlbnRpY2F0ZUFuZEdldFRva2VuKHRva2VuPzogc3RyaW5nLCBjb3VudGVyPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQnKTtcblxuICAgIGlmICghY291bnRlcikgY29uc29sZS5pbmZvKCdbYWNjb3VudF0gQXV0aGVudGljYXRpb24gb24gcG9kLi4uJyk7XG5cbiAgICBpZiAoY291bnRlciA+IDQpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEZhaWxlZCB0byBhdXRoZW50aWNhdGlvbiBvbiBwb2QgKGFmdGVyICR7Y291bnRlcn0gYXR0ZW1wdHMpYCk7XG4gICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuQVVUSF9TRVJWRVJfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5BVVRIX1NFUlZFUl9FUlJPUicgfTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB2YWxpZFxuICAgIGlmICh0b2tlbikge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGF1dGhlbnRpY2F0ZTogYm9vbGVhbiB9LCB7IHRva2VuOiBzdHJpbmcgfT4oe1xuICAgICAgICBxdWVyeTogQXV0aFF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICB0b2tlblxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIGNvZGU6IEVycm9yQ29kZXMuVU5BVVRIT1JJWkVELFxuICAgICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5VTkFVVEhPUklaRUQnXG4gICAgICAgIH0sXG4gICAgICAgIGZldGNoUG9saWN5OiAnbm8tY2FjaGUnXG4gICAgICB9KTtcblxuICAgICAgLy8gVG9rZW4gaXMgYWNjZXB0ZWQgYnkgdGhlIHNlcnZlclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5hdXRoZW50aWNhdGUpIHtcbiAgICAgICAgLy8gU3RvcmUgdGhlIHRva2VuXG4gICAgICAgIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh0b2tlbik7XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBbYWNjb3VudF0gQXV0aGVudGljYXRpb24gb24gcG9kIFtPS10ge3B1YmtleTogJyR7dGhpcy5fY2FjaGUucHVia2V5LnN1YnN0cigwLCA4KX0nfWApO1xuICAgICAgICByZXR1cm4gdG9rZW47IC8vIHJldHVybiB0aGUgdG9rZW5cbiAgICAgIH1cblxuICAgICAgLy8gQ29udGludWUgKHdpbGwgcmV0cnkgd2l0aCBhbm90aGVyIGNoYWxsZW5nZSlcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBhIG5ldyB0b2tlblxuICAgIGNvbnN0IGNoYWxsZW5nZUVycm9yID0ge1xuICAgICAgY29kZTogRXJyb3JDb2Rlcy5BVVRIX0NIQUxMRU5HRV9FUlJPUixcbiAgICAgIG1lc3NhZ2U6ICdFUlJPUi5BVVRIX0NIQUxMRU5HRV9FUlJPUidcbiAgICB9O1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8e1xuICAgICAgYXV0aENoYWxsZW5nZToge1xuICAgICAgICBwdWJrZXk6IHN0cmluZztcbiAgICAgICAgY2hhbGxlbmdlOiBzdHJpbmc7XG4gICAgICAgIHNpZ25hdHVyZTogc3RyaW5nO1xuICAgICAgfTtcbiAgICB9Pih7XG4gICAgICBxdWVyeTogQXV0aENoYWxsZW5nZVF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7fSxcbiAgICAgIGVycm9yOiBjaGFsbGVuZ2VFcnJvcixcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5J1xuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2sgY2hhbGxlbmdlXG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLmF1dGhDaGFsbGVuZ2UpIHRocm93IGNoYWxsZW5nZUVycm9yOyAvLyBTaG91bGQgbmV2ZXIgb2NjdXJcblxuICAgIC8vIENoZWNrIHNlcnZlciBzaWduYXR1cmVcbiAgICBjb25zdCBzaWduYXR1cmVPSyA9IGF3YWl0IHRoaXMuY3J5cHRvU2VydmljZS52ZXJpZnkoXG4gICAgICBkYXRhLmF1dGhDaGFsbGVuZ2UuY2hhbGxlbmdlLFxuICAgICAgZGF0YS5hdXRoQ2hhbGxlbmdlLnNpZ25hdHVyZSxcbiAgICAgIGRhdGEuYXV0aENoYWxsZW5nZS5wdWJrZXlcbiAgICApO1xuICAgIGlmICghc2lnbmF0dXJlT0spIHtcbiAgICAgIGNvbnNvbGUud2FybignRklYTUU6IEJhZCBwZWVyIHNpZ25hdHVyZSBvbiBhdXRoIGNoYWxsZW5nZSAhJywgZGF0YS5hdXRoQ2hhbGxlbmdlKTtcbiAgICB9XG4gICAgLy8gVE9ETzogY2hlY2sgc2VydmVyIHB1YmtleSBhcyBhIHZhbGlkIGNlcnRpZmljYXRlXG5cbiAgICAvLyBEbyB0aGUgY2hhbGxlbmdlXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgdGhpcy5jcnlwdG9TZXJ2aWNlLnNpZ24oZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZSwgdGhpcy5fY2FjaGUua2V5cGFpcik7XG4gICAgY29uc3QgbmV3VG9rZW4gPSBgJHt0aGlzLl9jYWNoZS5wdWJrZXl9OiR7ZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZX18JHtzaWduYXR1cmV9YDtcblxuICAgIC8vIGl0ZXJhdGUgd2l0aCB0aGUgbmV3IHRva2VuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlQW5kR2V0VG9rZW4obmV3VG9rZW4sIChjb3VudGVyIHx8IDEpICsgMSAvKiBpbmNyZW1lbnQgKi8pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcyhvcHRzPzogQWNjb3VudFdhdGNoT3B0aW9ucyk6IFN1YnNjcmlwdGlvbiB7XG4gICAgaWYgKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pIHRoaXMuc3RvcExpc3RlblJlbW90ZUNoYW5nZXMoKTsgLy8gU3RvcCBwcmV2aW91cyBzdWJzY3JpcHRpb25cbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCk7IC8vIE9mZmxpbmU6IHNraXBcblxuICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLndhdGNoQ2hhbmdlcyhvcHRzKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFJlbW90ZSB1cGRhdGUgZGV0ZWN0ZWQgYXQgJHtkYXRhLnVwZGF0ZURhdGV9YCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyICYmICtlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFtXU10gQWNjb3VudCBub3QgZXhpc3RzIGFueW1vcmU6IGZvcmNlIHVzZXIgdG8gbG9nb3V0Li4uJywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgK2Vyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbYWNjb3VudF0gW1dTXSBBY2NvdW50IG5vdCBhdXRob3JpemVkOiBmb3JjZSB1c2VyIHRvIGxvZ291dC4uLicsIGVycik7XG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBbV1NdIFJlY2VpdmVkIGVycm9yOicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gU3RvcCB3YXRjaGluZyByZW1vdGUgY2hhbmdlc2ApO1xuICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdhdGNoQ2hhbmdlcyhvcHRzPzogQWNjb3VudFdhdGNoT3B0aW9ucyk6IE9ic2VydmFibGU8QWNjb3VudD4ge1xuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIC8vIFdhaXQgc2VydmljZSByZWFkeSwgdGhlbiBsb29wXG4gICAgICByZXR1cm4gZnJvbSh0aGlzLnJlYWR5KCkpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLndhdGNoQ2hhbmdlcyhvcHRzKSkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBsb2dnZWQgaW4nKTtcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHdhdGNoIGFjY291bnQgY2hhbmdlczogbmV0d29yayBpcyBvZmZsaW5lLicpO1xuXG4gICAgY29uc3QgdmFyaWFibGVzID0ge1xuICAgICAgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdHMgJiYgb3B0cy5pbnRlcnZhbEluU2Vjb25kcywgdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHMpXG4gICAgfTtcblxuICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBXYXRjaGluZyByZW1vdGUgY2hhbmdlcywgZXZlcnkgJHt2YXJpYWJsZXMuaW50ZXJ2YWx9c2ApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8e2RhdGE6IGFueX0+KHtcbiAgICAgIHF1ZXJ5OiBBY2NvdW50U3Vic2NyaXB0aW9ucy5saXN0ZW5DaGFuZ2VzLFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TVUJTQ1JJQkVfQUNDT1VOVF9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkFDQ09VTlQuU1VCU0NSSUJFX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoe2RhdGF9KSA9PiBkYXRhKSxcbiAgICAgICAgLy8gS2VlcCBvbmx5IGlmIG5ld2VyXG4gICAgICAgIGZpbHRlcihkYXRhID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VXBkYXRlRGF0ZTogTW9tZW50ID0gZnJvbURhdGVJU09TdHJpbmcodGhpcy5fZGF0YT8udXBkYXRlRGF0ZSk7XG4gICAgICAgICAgY29uc3QgcmVtb3RlVXBkYXRlRGF0ZTogTW9tZW50ID0gZnJvbURhdGVJU09TdHJpbmcoZGF0YT8udXBkYXRlRGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIChyZW1vdGVVcGRhdGVEYXRlICYmICghY3VycmVudFVwZGF0ZURhdGUgfHwgIXJlbW90ZVVwZGF0ZURhdGUuaXNTYW1lKGN1cnJlbnRVcGRhdGVEYXRlLCAnbWlsbGlzZWNvbmQnKSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlKHNvdXJjZTogQWNjb3VudCB8IHVuZGVmaW5lZCwgdGFyZ2V0OiBBY2NvdW50KSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZCB8fCB0YXJnZXQuaWQ7XG4gICAgdGFyZ2V0LnVwZGF0ZURhdGUgPSBzb3VyY2UudXBkYXRlRGF0ZSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcblxuICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKHNvdXJjZS5zZXR0aW5ncywgdGFyZ2V0LnNldHRpbmdzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlU2V0dGluZ3Moc291cmNlOiBVc2VyU2V0dGluZ3MgfCB1bmRlZmluZWQsIHRhcmdldDogVXNlclNldHRpbmdzKSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZCB8fCB0YXJnZXQuaWQ7XG4gICAgdGFyZ2V0LnVwZGF0ZURhdGUgPSBzb3VyY2UudXBkYXRlRGF0ZSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Q8VCA9IGFueT4ob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cbn1cbiJdfQ==
|
|
1165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxhQUFhLEVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUFTLFdBQVcsRUFBbUIsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQTJCLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBQyxlQUFlLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFjLEdBQUcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxPQUFPLEVBQWdCLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUMscUJB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YUFBYTtZQWVFLGNBQWM7WUFIN0IsY0FBYztZQUNkLG9CQUFvQjtZQU5wQixPQUFPO1lBU1AsV0FBVztZQWFYLGdCQUFnQix1QkFvT25CLFFBQVE7WUFyT0wsZUFBZSx1QkFzT2xCLFFBQVE7NENBQ1IsTUFBTSxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDcnlwdG9TZXJ2aWNlLCBLZXlQYWlyfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7RGVwYXJ0bWVudH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7UGVyc29uLCBQZXJzb25VdGlscywgVXNlclByb2ZpbGVMYWJlbH0gZnJvbSAnLi9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzLCBVc2FnZU1vZGUsIFVzZXJTZXR0aW5nc30gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmV0Y2hQb2xpY3ksIGdxbH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcblxuaW1wb3J0IHtpc05pbCwgc2xlZXAsIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7QmFzZUdyYXBocWxTZXJ2aWNlfSBmcm9tICcuL2Jhc2UtZ3JhcGhxbC1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RXJyb3JDb2RlcywgU2VydmVyRXJyb3JDb2Rlc30gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtHcmFwaHFsU2VydmljZX0gZnJvbSAnLi4vZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtBdXRoVG9rZW5UeXBlLCBOZXR3b3JrU2VydmljZX0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7TUlOSUZZX0VOVElUWV9GT1JfUE9ELCBSZWZlcmVudGlhbCwgUmVmZXJlbnRpYWxVdGlsc30gZnJvbSAnLi9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge1N0YXR1c0lkc30gZnJvbSAnLi9tb2RlbC9tb2RlbC5lbnVtJztcbmltcG9ydCB7QmFzZTU4fSBmcm9tICcuL2Jhc2U1OCc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7Zmlyc3ROb3ROaWxQcm9taXNlfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucywgQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zfSBmcm9tICcuL2Jhc2UtZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQge092ZXJsYXlFdmVudERldGFpbH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFjY291bnREZXRhaWxzIHtcbiAgbG9hZGVkOiBib29sZWFuO1xuICBrZXlwYWlyOiBLZXlQYWlyO1xuICBhdXRoVG9rZW46IHN0cmluZztcbiAgYXV0aEJhc2ljPzogc3RyaW5nO1xuICBwdWJrZXk6IHN0cmluZztcbiAgcGVyc29uOiBQZXJzb247XG4gIGRlcGFydG1lbnQ6IERlcGFydG1lbnQ7XG4gIG1haW5Qcm9maWxlOiBTdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEF1dGhEYXRhIHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgb2ZmbGluZT86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGF0YSBleHRlbmRzIEF1dGhEYXRhIHtcbiAgYWNjb3VudDogQWNjb3VudDtcbn1cblxuY29uc3QgVE9LRU5fU1RPUkFHRV9LRVkgPSAndG9rZW4nO1xuY29uc3QgUFVCS0VZX1NUT1JBR0VfS0VZID0gJ3B1YmtleSc7XG5jb25zdCBTRUNLRVlfU1RPUkFHRV9LRVkgPSAnc2Vja2V5JztcbmNvbnN0IEFDQ09VTlRfU1RPUkFHRV9LRVkgPSAnYWNjb3VudCc7XG5cbmNvbnN0IERFRkFVTFRfQVZBVEFSX0lNQUdFID0gJ2Fzc2V0cy9pbWcvcGVyc29uLnBuZyc7XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBHcmFwaFFMIHF1ZXJpZXNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5jb25zdCBGcmFnbWVudHMgPSB7XG4gIGFjY291bnQ6IGdxbGBcbiAgICBmcmFnbWVudCBBY2NvdW50RnJhZ21lbnQgb24gQWNjb3VudFZPIHtcbiAgICAgIGlkXG4gICAgICBmaXJzdE5hbWVcbiAgICAgIGxhc3ROYW1lXG4gICAgICBlbWFpbFxuICAgICAgcHVia2V5XG4gICAgICBhdmF0YXJcbiAgICAgIHN0YXR1c0lkXG4gICAgICB1cGRhdGVEYXRlXG4gICAgICBjcmVhdGlvbkRhdGVcbiAgICAgIHByb2ZpbGVzXG4gICAgICBzZXR0aW5ncyB7XG4gICAgICAgIC4uLlVzZXJTZXR0aW5nc0ZyYWdtZW50XG4gICAgICB9XG4gICAgICBkZXBhcnRtZW50IHtcbiAgICAgICAgaWRcbiAgICAgICAgbGFiZWxcbiAgICAgICAgbmFtZVxuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICB9XG4gICAgICBfX3R5cGVuYW1lXG4gICAgfWAsXG5cbiAgc2V0dGluZ3M6IGdxbGBmcmFnbWVudCBVc2VyU2V0dGluZ3NGcmFnbWVudCBvbiBVc2VyU2V0dGluZ3NWTyB7XG4gICAgaWRcbiAgICBsb2NhbGVcbiAgICBsYXRMb25nRm9ybWF0XG4gICAgY29udGVudFxuICAgIG5vbmNlXG4gICAgdXBkYXRlRGF0ZVxuICAgIF9fdHlwZW5hbWVcbiAgfWBcbn07XG5cbi8vIExvYWQgYWNjb3VudCBxdWVyeVxuY29uc3QgTG9hZFF1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IEFjY291bnQge1xuICAgIGRhdGE6IGFjY291bnQge1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfVxuYDtcblxuLy8gQ2hlY2sgZW1haWwgcXVlcnlcbmNvbnN0IElzRW1haWxFeGlzdHNRdWVyeTogYW55ID0gZ3FsYFxuICBxdWVyeSBJc0VtYWlsRXhpc3RzKCRlbWFpbDogU3RyaW5nLCAkaGFzaDogU3RyaW5nKXtcbiAgICBpc0VtYWlsRXhpc3RzKGVtYWlsOiAkZW1haWwsIGhhc2g6ICRoYXNoKVxuICB9XG5gO1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElzRW1haWxFeGlzdHNWYXJpYWJsZXMge1xuICBlbWFpbDogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG59XG5cbi8vIFNhdmUgKGNyZWF0ZSBvciB1cGRhdGUpIGFjY291bnQgbXV0YXRpb25cbmNvbnN0IEFjY291bnRNdXRhdGlvbnM6IFBhcnRpYWw8QmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnM+ICYgeyBjcmVhdGU6IGFueSwgc2F2ZVNldHRpbmdzOiBhbnk7IH0gPSB7XG4gIHNhdmU6IGdxbGAgbXV0YXRpb24gU2F2ZUFjY291bnQoJGRhdGE6QWNjb3VudFZPSW5wdXQpe1xuICAgIGRhdGE6IHNhdmVBY2NvdW50KGFjY291bnQ6ICRkYXRhKXtcbiAgICAgIC4uLkFjY291bnRGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0ZyYWdtZW50cy5hY2NvdW50fVxuICAke0ZyYWdtZW50cy5zZXR0aW5nc31gLFxuXG4gIGNyZWF0ZTogZ3FsYG11dGF0aW9uIENyZWF0ZUFjY291bnQoJGRhdGE6QWNjb3VudFZPSW5wdXQpe1xuICAgIGRhdGE6IGNyZWF0ZUFjY291bnQoYWNjb3VudDogJGRhdGEpe1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfWAsXG5cbiAgc2F2ZVNldHRpbmdzOiBncWxgbXV0YXRpb24gU2F2ZVNldHRpbmdzKCRkYXRhOlVzZXJTZXR0aW5nc1ZPSW5wdXQpe1xuICAgIGRhdGE6IHNhdmVTZXR0aW5ncyhzZXR0aW5nczogJGRhdGEpe1xuICAgICAgLi4uVXNlclNldHRpbmdzRnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuc2V0dGluZ3N9YFxufTtcblxuLy8gU2VudCBjb25maXJtYXRpb24gZW1haWxcbmNvbnN0IFNlbmRDb25maXJtRW1haWxNdXRhdGlvbjogYW55ID0gZ3FsYFxuICBtdXRhdGlvbiBzZW5kQWNjb3VudENvbmZpcm1hdGlvbkVtYWlsKCRlbWFpbDpTdHJpbmcsICRsb2NhbGU6U3RyaW5nKXtcbiAgICBzZW5kQWNjb3VudENvbmZpcm1hdGlvbkVtYWlsKGVtYWlsOiAkZW1haWwsIGxvY2FsZTogJGxvY2FsZSlcbiAgfVxuYDtcblxuLy8gQ29uZmlybSBhY2NvdW50IGVtYWlsXG5jb25zdCBDb25maXJtRW1haWxNdXRhdGlvbjogYW55ID0gZ3FsYFxuICBtdXRhdGlvbiBjb25maXJtQWNjb3VudEVtYWlsKCRlbWFpbDpTdHJpbmcsICRjb2RlOlN0cmluZyl7XG4gICAgY29uZmlybUFjY291bnRFbWFpbChlbWFpbDogJGVtYWlsLCBjb2RlOiAkY29kZSlcbiAgfVxuYDtcblxuLy8gQXV0aGVudGljYXRpb24gIHF1ZXJ5XG5jb25zdCBBdXRoUXVlcnk6IGFueSA9IGdxbGBcbiAgcXVlcnkgQXV0aCgkdG9rZW46IFN0cmluZyl7XG4gICAgYXV0aGVudGljYXRlKHRva2VuOiAkdG9rZW4pXG4gIH1cbmA7XG5cbi8vIE5ldyBhdXRoIGNoYWxsZW5nZSBxdWVyeVxuY29uc3QgQXV0aENoYWxsZW5nZVF1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IEF1dGhDaGFsbGVuZ2V7XG4gICAgYXV0aENoYWxsZW5nZXtcbiAgICAgIGNoYWxsZW5nZVxuICAgICAgcHVia2V5XG4gICAgICBzaWduYXR1cmVcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IEFjY291bnRTdWJzY3JpcHRpb25zOiBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnMgPSB7XG4gIGxpc3RlbkNoYW5nZXM6IGdxbGBzdWJzY3JpcHRpb24gdXBkYXRlQWNjb3VudCgkaW50ZXJ2YWw6IEludCl7XG4gICAgZGF0YTogdXBkYXRlQWNjb3VudChpbnRlcnZhbDogJGludGVydmFsKSB7XG4gICAgICBpZFxuICAgICAgdXBkYXRlRGF0ZVxuICAgIH1cbiAgfWBcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudFdhdGNoT3B0aW9ucyB7XG4gIGludGVydmFsSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnLCBkZXBzOiBbIEVOVklST05NRU5UIF19KVxuZXhwb3J0IGNsYXNzIEFjY291bnRTZXJ2aWNlIGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlPEFjY291bnQsIGFueSwgbnVtYmVyLCBBY2NvdW50PiB7XG5cbiAgb25Mb2dpbiA9IG5ldyBTdWJqZWN0PEFjY291bnQ+KCk7XG4gIG9uTG9nb3V0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBvbkNoYW5nZSA9IG5ldyBTdWJqZWN0PEFjY291bnQ+KCk7XG4gIG9uQXV0aFRva2VuQ2hhbmdlID0gbmV3IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBvbkF1dGhCYXNpY0NoYW5nZSA9IG5ldyBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICBwcml2YXRlIF9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmFibGVMaXN0ZW5DaGFuZ2VzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5JbnRlcnZhbEluU2Vjb25kczogbnVtYmVyO1xuICBwcml2YXRlIF9jYWNoZTogQWNjb3VudERldGFpbHMgPSB7XG4gICAgbG9hZGVkOiBmYWxzZSxcbiAgICBrZXlwYWlyOiBudWxsLFxuICAgIGF1dGhUb2tlbjogbnVsbCxcbiAgICBhdXRoQmFzaWM6IG51bGwsXG4gICAgcHVia2V5OiBudWxsLFxuICAgIG1haW5Qcm9maWxlOiBudWxsLFxuICAgIHBlcnNvbjogbnVsbCxcbiAgICBkZXBhcnRtZW50OiBudWxsXG4gIH07XG4gIHByaXZhdGUgXyRhZGRpdGlvbmFsRmllbGRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtRmllbGREZWZpbml0aW9uW10+KFtdKTtcbiAgcHJpdmF0ZSBfdG9rZW5UeXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXV0aFRva2VuVHlwZT4odW5kZWZpbmVkKTtcblxuICBnZXQgYWNjb3VudCgpOiBBY2NvdW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGUubG9hZGVkID8gdGhpcy5fZGF0YSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBwZXJzb24oKTogUGVyc29uIHtcbiAgICBpZiAodGhpcy5fY2FjaGUubG9hZGVkICYmICF0aGlzLl9jYWNoZS5wZXJzb24pIHtcbiAgICAgIHRoaXMuX2NhY2hlLnBlcnNvbiA9IHRoaXMuX2NhY2hlLmxvYWRlZCA/IHRoaXMuX2RhdGEuYXNQZXJzb24oKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLnBlcnNvbjtcbiAgfVxuXG4gIGdldCBkZXBhcnRtZW50KCk6IERlcGFydG1lbnQge1xuICAgIGlmICh0aGlzLl9jYWNoZS5sb2FkZWQgJiYgIXRoaXMuX2NhY2hlLmRlcGFydG1lbnQpIHtcbiAgICAgIHRoaXMuX2NhY2hlLmRlcGFydG1lbnQgPSB0aGlzLl9jYWNoZS5sb2FkZWQgPyB0aGlzLl9kYXRhLmFzUGVyc29uKCkuZGVwYXJ0bWVudCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmRlcGFydG1lbnQ7XG4gIH1cblxuICBnZXQgdG9rZW5UeXBlKCk6IEF1dGhUb2tlblR5cGUge1xuICAgIHJldHVybiB0aGlzLl90b2tlblR5cGUkLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuVHlwZSh2YWx1ZTogQXV0aFRva2VuVHlwZSkge1xuICAgIGlmICh0aGlzLl90b2tlblR5cGUkLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbYWNjb3VudF0gVXNpbmcgYXV0aGVudGljYXRpb24gdG9rZW4gdHlwZTogJyArIHZhbHVlKTtcbiAgICAgIHRoaXMuX3Rva2VuVHlwZSQubmV4dCh2YWx1ZSk7XG4gICAgICAvLyBSZXNldCB2YWx1ZXNcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcm90ZWN0ZWQgZmlsZTogRmlsZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSAoIWVudmlyb25tZW50LmFjY291bnQgfHwgZW52aXJvbm1lbnQuYWNjb3VudC5lbmFibGVMaXN0ZW5DaGFuZ2VzICE9PSBmYWxzZSk7IC8vIFRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzID0gdG9OdW1iZXIoZW52aXJvbm1lbnQuYWNjb3VudCAmJiBlbnZpcm9ubWVudC5hY2NvdW50Lmxpc3RlbkludGVydmFsSW5TZWNvbmRzLCAwKTsgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50LXNlcnZpY2VdIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICAvLyBTZW5kIGF1dGggdG9rZW4gdG8gdGhlIGdyYXBocWwgbGF5ZXIsIHdoZW4gY2hhbmdlZFxuICAgIHRoaXMub25BdXRoVG9rZW5DaGFuZ2Uuc3Vic2NyaWJlKCh0b2tlbikgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhUb2tlbih0b2tlbikpO1xuICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2Uuc3Vic2NyaWJlKChiYXNpYykgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhCYXNpYyhiYXNpYykpO1xuXG4gICAgLy8gRm9yY2UgbmV0d29yayB0byB3YWl0IGFjY291bnQgc2VydmljZSwgYWZ0ZXIgZ2V0dGluZyBjb25uZWN0aW9uIHRvIHRoZSBwZWVyXG4gICAgdGhpcy5uZXR3b3JrLm9uKCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCBhc3luYyAob25saW5lKSA9PiB7XG4gICAgICAvLyBJZiBvbmxpbmUsIHdhaXQgYSBmdWxsIHJlc3RhcnQsIGJlY2F1c2UgaXQgY2FuIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgaWYgKG9ubGluZSAmJiAoIXRoaXMuc3RhcnRlZCB8fCB0aGlzLmlzTG9naW4oKSkpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEZvcmNlIG5ldHdvcmtTZXJ2aWNlLnRyeU9ubGluZSgpIHRvIHdhaXQsIHRoYXQgZ3JhcGhxbCBhbmQgYWNjb3VudCBzZXJ2aWNlIGlzIHJlc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBzbGVlcCg1MDApOyAvLyB3YWl0IGdyYXBocWwgc2VydmljZSB0byBiZSByZXN0YXJ0ZWRcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8QWNjb3VudD4ge1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgLy8gV2FpdCB0b2tlbiB0eXBlIHRvIGJlIHNldFxuICAgICAgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX3Rva2VuVHlwZSQpXG4gICAgXSk7XG5cbiAgICAvLyBMaXN0ZW4gZ3JhcGhxbCBzdGFydCAob3IgcmVzdGFydClcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5ncmFwaHFsLnN0b3BTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQgJiYgdGhpcy5pc0xvZ2luKCkpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gUmVzdGFydGluZywgdG8gcmV0cnkgdG8gYXV0aGVudGljYXRlLi4uJyk7XG4gICAgICAgICAgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgICBhd2FpdCB0aGlzLmxpc3RlblNldHRpbmdzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYWRBdXRoVG9rZW4gPSB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoQmFzaWMgPSB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoID0gaGFkQXV0aFRva2VuIHx8IGhhZEF1dGhCYXNpYztcbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgIGlmIChoYWRBdXRoKSB7XG4gICAgICB0aGlzLm9uTG9nb3V0Lm5leHQoKTtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgaWYgKGhhZEF1dGhUb2tlbikgdGhpcy5vbkF1dGhUb2tlbkNoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFkQXV0aEJhc2ljKSB0aGlzLm9uQXV0aEJhc2ljQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBpc0xvZ2luKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLl9jYWNoZS5wdWJrZXkgJiYgdGhpcy5fY2FjaGUubG9hZGVkKTtcbiAgfVxuXG4gIGlzQXV0aCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5fY2FjaGUucHVia2V5ICYmIHRoaXMuX2NhY2hlLmtleXBhaXIgJiYgdGhpcy5fY2FjaGUua2V5cGFpci5zZWNyZXRLZXkpO1xuICB9XG5cbiAgaGFzTWluUHJvZmlsZSh1c2VyUHJvZmlsZTogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEUgb3IgVEVNUE9SQVJZXG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnB1YmtleSB8fFxuICAgICAgKHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUgJiYgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLlRFTVBPUkFSWSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIFBlcnNvblV0aWxzLmhhc1VwcGVyT3JFcXVhbHNQcm9maWxlKHRoaXMuX2RhdGEucHJvZmlsZXMsIHVzZXJQcm9maWxlKTtcbiAgfVxuXG4gIGhhc0V4YWN0UHJvZmlsZShsYWJlbDogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEUgb3IgVEVNUE9SQVJZXG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnB1YmtleSB8fFxuICAgICAgKHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUgJiYgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLlRFTVBPUkFSWSkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEucHJvZmlsZXMuc29tZShwcm9maWxlID0+IHByb2ZpbGUgPT09IGxhYmVsKTtcbiAgfVxuXG4gIGhhc1Byb2ZpbGVBbmRJc0VuYWJsZSh1c2VyUHJvZmlsZTogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEVcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8IHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgdXNlclByb2ZpbGUpO1xuICB9XG5cbiAgaXNBZG1pbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQcm9maWxlQW5kSXNFbmFibGUoJ0FETUlOJyk7XG4gIH1cblxuICBpc1N1cGVydmlzb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvZmlsZUFuZElzRW5hYmxlKCdTVVBFUlZJU09SJyk7XG4gIH1cblxuICBpc1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvZmlsZUFuZElzRW5hYmxlKCdVU0VSJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHBhcmFtIG1vZGVcbiAgICovXG4gIGlzVXNhZ2VNb2RlKG1vZGU6IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzVXNhZ2VNb2RlKG1vZGUpO1xuICB9XG5cbiAgaXNPbmx5R3Vlc3QoKTogYm9vbGVhbiB7XG4gICAgLy8gU2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRSBvciBURU1QT1JBUllcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8XG4gICAgICAodGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSAmJiB0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBQcm9maWxlIGxlc3MgdGhlbiB1c2VyXG4gICAgcmV0dXJuICFQZXJzb25VdGlscy5oYXNVcHBlck9yRXF1YWxzUHJvZmlsZSh0aGlzLl9kYXRhLnByb2ZpbGVzLCAnVVNFUicpO1xuICB9XG5cbiAgY2FuVXNlcldyaXRlRGF0YUZvckRlcGFydG1lbnQocmVjb3JkZXJEZXBhcnRtZW50OiBSZWZlcmVudGlhbCB8IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChSZWZlcmVudGlhbFV0aWxzLmlzRW1wdHkocmVjb3JkZXJEZXBhcnRtZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNBZG1pbigpO1xuICAgIH1cblxuICAgIC8vIFNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEVcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8IHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fZGF0YS5kZXBhcnRtZW50IHx8ICF0aGlzLl9kYXRhLmRlcGFydG1lbnQuaWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignVXNlciBhY2NvdW50IGhhcyBubyBkZXBhcnRtZW50ICEgVW5hYmxlIHRvIGNoZWNrIHdyaXRlIHJpZ2h0IGFnYWluc3QgcmVjb3JkZXJEZXBhcnRtZW50Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2FtZSByZWNvcmRlciBkZXBhcnRtZW50OiBPSywgdXNlciBjYW4gd3JpdGVcbiAgICBpZiAodGhpcy5fZGF0YS5kZXBhcnRtZW50LmlkID09PSByZWNvcmRlckRlcGFydG1lbnQuaWQpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gRWxzZSwgY2hlY2sgaWYgc3VwZXJ2aXNvciAob3IgbW9yZSlcbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgJ1NVUEVSVklTT1InKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKGRhdGE6IFJlZ2lzdGVyRGF0YSk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICh0aGlzLmlzTG9naW4oKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIGFscmVhZHkgbG9naW4uIFBsZWFzZSBsb2dvdXQgYmVmb3JlIHJlZ2lzdGVyLicpO1xuICAgIH1cbiAgICBpZiAoIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCB1c2VybmFtZSBvciBwYXNzd29yZCcpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gUmVnaXN0ZXIgbmV3IHVzZXIgYWNjb3VudC4uLicsIGRhdGEuYWNjb3VudCk7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gZmFsc2U7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBrZXlwYWlyID0gYXdhaXQgdGhpcy5jcnlwdG9TZXJ2aWNlLnNjcnlwdEtleXBhaXIoZGF0YS51c2VybmFtZSwgZGF0YS5wYXNzd29yZCk7XG4gICAgICBkYXRhLmFjY291bnQucHVia2V5ID0gQmFzZTU4LmVuY29kZShrZXlwYWlyLnB1YmxpY0tleSk7XG5cbiAgICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgICBkYXRhLmFjY291bnQuc2V0dGluZ3MgPSBkYXRhLmFjY291bnQuc2V0dGluZ3MgfHwgbmV3IFVzZXJTZXR0aW5ncygpO1xuICAgICAgZGF0YS5hY2NvdW50LnNldHRpbmdzLmxvY2FsZSA9IHRoaXMuc2V0dGluZ3MubG9jYWxlO1xuICAgICAgZGF0YS5hY2NvdW50LnNldHRpbmdzLmxhdExvbmdGb3JtYXQgPSB0aGlzLnNldHRpbmdzLmxhdExvbmdGb3JtYXQ7XG4gICAgICBkYXRhLmFjY291bnQuc2V0dGluZ3MuY29udGVudCA9IGRhdGEuYWNjb3VudC5zZXR0aW5ncy5jb250ZW50IHx8IHt9O1xuICAgICAgZGF0YS5hY2NvdW50LmRlcGFydG1lbnQuaWQgPSBkYXRhLmFjY291bnQuZGVwYXJ0bWVudC5pZCB8fCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHREZXBhcnRtZW50SWQ7XG5cbiAgICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBrZXlwYWlyO1xuICAgICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IHRoaXMuc2F2ZVJlbW90ZWx5KGRhdGEuYWNjb3VudCwga2V5cGFpcik7XG5cbiAgICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgICBhY2NvdW50LmF2YXRhciA9IGFjY291bnQuYXZhdGFyIHx8ICh0aGlzLmVudmlyb25tZW50LmJhc2VVcmwgKyBERUZBVUxUX0FWQVRBUl9JTUFHRSk7XG4gICAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuXG4gICAgICB0aGlzLl9kYXRhID0gYWNjb3VudDtcbiAgICAgIHRoaXMuX2NhY2hlLnB1YmtleSA9IGFjY291bnQucHVia2V5O1xuXG4gICAgICAvLyBUcnkgdG8gYXV0aCBvbiBwb2RcbiAgICAgIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlKGRhdGEpO1xuXG4gICAgICB0aGlzLl9jYWNoZS5sb2FkZWQgPSB0cnVlO1xuXG4gICAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBBY2NvdW50IHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgICAvLyBFbWl0IGV2ZW50c1xuICAgICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICAgIC8vIExpc3RlbiByZW1vdGUgY2hhbmdlc1xuICAgICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHRoaXMuc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IgJiYgZXJyb3IubWVzc2FnZSB8fCBlcnJvcik7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXV0aGVudGljYXRlKGRhdGE/OiBBdXRoRGF0YSkge1xuICAgIC8vIFdhaXQgdGhlIGF1dGggdG9rZW4sIHRoZW4gY29udGludWVcbiAgICBjb25zdCB0b2tlblR5cGUgPSBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5fdG9rZW5UeXBlJCk7XG5cbiAgICAvLyBCYXNpYyBhdXRoXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gJ2Jhc2ljJyB8fCB0b2tlblR5cGUgPT09ICdiYXNpYy1hbmQtdG9rZW4nKSB7XG5cbiAgICAgIC8vIEdlbmVyYXRlIHRoZSBhdXRoQmFzaWMsIGlmIHVzZWRcbiAgICAgIGlmICghdGhpcy5fY2FjaGUuYXV0aEJhc2ljKSB7XG4gICAgICAgIC8vIFNraXAgaWYgdG9rZW4gYWxyZWFkeSBwcm92aWRlZFxuICAgICAgICBpZiAoISh0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykpIHtcbiAgICAgICAgICBpZiAoIWRhdGEgfHwgIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB1c2VybmFtZSBhbmQgcGFzc3dvcmQnKTtcbiAgICAgICAgICB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgPSB0aGlzLmNyeXB0b1NlcnZpY2UuZW5jb2RlQmFzZTY0KGAke2RhdGEudXNlcm5hbWV9OiR7ZGF0YS5wYXNzd29yZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHRoaXMuX2NhY2hlLmF1dGhCYXNpYyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgdGhlIGF1dGhUb2tlbiwgaWYgdXNlZFxuICAgIGlmICh0b2tlblR5cGUgPT09ICd0b2tlbicgfHwgdG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fY2FjaGUuYXV0aFRva2VuID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGVBbmRHZXRUb2tlbih0aGlzLl9jYWNoZS5hdXRoVG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gTmV2ZXIgYXV0aGVudGljYXRlLCBvciBub3QgcmVhZHkgZm9yIG9mZmxpbmUgbW9kZSA9PiBleGl0XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3JnZXQgYXV0aEJhc2ljLCB0byBzd2l0Y2ggdG8gYXV0aFRva2VuXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gJ2Jhc2ljLWFuZC10b2tlbicpIHtcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvZ2luKGRhdGE6IEF1dGhEYXRhKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLnVzZXJuYW1lIHx8ICFkYXRhLnBhc3N3b3JkKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQnKTtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50XSBMb2dpbi4uLicpO1xuXG4gICAgbGV0IGtleXBhaXI7XG4gICAgdHJ5IHtcbiAgICAgIGtleXBhaXIgPSBhd2FpdCB0aGlzLmNyeXB0b1NlcnZpY2Uuc2NyeXB0S2V5cGFpcihkYXRhLnVzZXJuYW1lLCBkYXRhLnBhc3N3b3JkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlVOS05PV05fRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5TQ1JZUFRfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gU3RvcmUgcHVia2V5K2tleXBhaXJcbiAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBCYXNlNTguZW5jb2RlKGtleXBhaXIucHVibGljS2V5KTtcbiAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0ga2V5cGFpcjtcblxuICAgIC8vIFRyeSB0byBsb2FkIHByZXZpb3VzIHRva2VuXG4gICAgbGV0IHByZXZpb3VzVG9rZW46IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoVE9LRU5fU1RPUkFHRV9LRVkpO1xuICAgIHByZXZpb3VzVG9rZW4gPSBwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4uc3RhcnRzV2l0aCh0aGlzLl9jYWNoZS5wdWJrZXkpICYmIHByZXZpb3VzVG9rZW4gfHwgbnVsbDtcblxuICAgIC8vIE9mZmxpbmUgbW9kZVxuICAgIGNvbnN0IG9mZmxpbmUgPSB0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkgJiYgKHRoaXMubmV0d29yay5vZmZsaW5lIHx8IGRhdGEub2ZmbGluZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKG9mZmxpbmUpICB7XG4gICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBwcmV2aW91c1Rva2VuO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgbmV0d29yayBpZiBzZXQgYXMgb2ZmbGluZVxuICAgICAgdGhpcy5uZXR3b3JrLnNldEZvcmNlT2ZmbGluZSh0cnVlLCB7c2hvd1RvYXN0OiBmYWxzZX0pO1xuICAgICAgY29uc29sZS5pbmZvKGBbYWNjb3VudF0gTG9naW4gW09LXSB7cHVia2V5OiAke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9fSwge29mZmxpbmU6IHRydWV9YCk7XG4gICAgfVxuXG4gICAgLy8gT25saW5lIG1vZGU6IHRyeSB0byBhdXRoIG9uIHBvZFxuICAgIGVsc2Uge1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE5ldmVyIGF1dGhlbnRpY2F0ZSwgb3Igbm90IHJlYWR5IGZvciBvZmZsaW5lIG1vZGUgPT4gZXhpdFxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCBhY2NvdW50IGRhdGFcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSh7b2ZmbGluZSwgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknfSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGFjY291bnQgbm90IGZvdW5kLCBjaGVjayBpZiBlbWFpbCBpcyB2YWxpZFxuICAgICAgaWYgKGVyciAmJiArKGVyci5jb2RlKSA9PT0gRXJyb3JDb2Rlcy5MT0FEX0FDQ09VTlRfRVJST1IpIHtcblxuICAgICAgICAvLyBDaGVjayBlbWFpbCBleGlzdHNcbiAgICAgICAgaWYgKGRhdGEudXNlcm5hbWUuaW5kZXhPZignQCcpICE9PSAtMSkge1xuICAgICAgICAgIGxldCBpc0VtYWlsRXhpc3RzO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpc0VtYWlsRXhpc3RzID0gYXdhaXQgdGhpcy5pc0VtYWlsRXhpc3RzKGRhdGEudXNlcm5hbWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKG90aGVyRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycjsgLy8gcmVzZW5kIHRoZSBmaXJzdCBlcnJvclxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVtYWlsIG5vdCBleGlzdHMgKG5vIGFjY291bnQpXG4gICAgICAgICAgaWYgKCFpc0VtYWlsRXhpc3RzKSB7XG4gICAgICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVU5LTk9XTl9BQ0NPVU5UX0VNQUlMLCBtZXNzYWdlOiAnRVJST1IuVU5LTk9XTl9BQ0NPVU5UX0VNQUlMJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtYWlsIGV4aXN0cywgc28gZXJyb3IgPSAnYmFkIHBhc3N3b3JkJ1xuICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuQkFEX1BBU1NXT1JELCBtZXNzYWdlOiAnRVJST1IuQkFEX1BBU1NXT1JEJyB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7IC8vIHJlc2VuZCB0aGUgZmlyc3QgZXJyb3JcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3RvcmUgdG8gbG9jYWwgc3RvcmFnZVxuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnQgdG8gb2JzZXJ2ZXJzXG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHRoaXMuc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZChvcHRzPzoge3Nob3dUb2FzdD86IGJvb2xlYW59KTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjaGVjayBhY2NvdW50IGluIG9mZmxpbmUgbW9kZScpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gUmVsb2FkaW5nIGFjY291bnQuLi5gKTtcbiAgICBjb25zdCB3YXNMb2dpbiA9IHRoaXMuaXNMb2dpbigpO1xuXG4gICAgdHJ5IHtcblxuICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuXG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gUmVsb2FkaW5nIGFjY291bnQgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgICAgLy8gRW1pdCBsb2dpbiBldmVudCB0byBzdWJzY3JpYmVyc1xuICAgICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdBQ0NPVU5ULklORk8uUkVMT0FERUQnLCB0eXBlOiAnaW5mbyd9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ2Fubm90IHJlbG9hZCBidXQgd2FzIGxvZ2luOiBmb3JjZSB0byBsb2dvdXRcbiAgICAgIGlmICh3YXNMb2dpbiAmJiAhdGhpcy5pc0xvZ2luKCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIFJlbG9hZGluZyBhY2NvdW50IGZhaWxlZC4gV2lsbCBmb3JjZSBsb2dvdXQuLi5gLCBlcnJvcik7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50LCB0byB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRcbiAgICovXG4gIGFzeW5jIHNhdmUoYWNjb3VudDogQWNjb3VudCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuICAgIGlmICh0aGlzLl9jYWNoZS5wdWJrZXkgIT09IGFjY291bnQucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ05vdCB1c2VyIGFjY291bnQnKTtcblxuICAgIGFjY291bnQgPSBhd2FpdCB0aGlzLnNhdmVSZW1vdGVseShhY2NvdW50LCB0aGlzLl9jYWNoZS5rZXlwYWlyKTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuXG4gICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIFNhdmUgbG9jYWxseSAoaW4gc3RvcmFnZSlcbiAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAvLyBTZW5kIGV2ZW50XG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBjb25zdCBoYWRBdXRoVG9rZW4gPSB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoQmFzaWMgPSB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgJiYgdHJ1ZTtcbiAgICBjb25zdCBwdWJrZXkgPSB0aGlzLl9jYWNoZSAmJiB0aGlzLl9jYWNoZS5wdWJrZXk7XG5cbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBkYXRhIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShQVUJLRVlfU1RPUkFHRV9LRVkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFRPS0VOX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShBQ0NPVU5UX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgcHVia2V5ICYmIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSArICcjJyArIHB1YmtleSkgfHwgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gT2ZmbGluZSBmZWF0dXJlcyBlbmFibGU6IG5lZWQgdG8ga2VlcCBzb21lIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIC8vIEFsd2F5cyByZW1vdmUgb25seSBzZWNyZXQga2V5XG4gICAgICAvLyBCdXQga2VlcDpcbiAgICAgIC8vIC0gYWNjb3VudCBieSBwdWJrZXlcbiAgICAgIC8vIC0gYXV0aCB0b2tlblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFBVQktFWV9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gcGFnZSBoaXN0b3J5LCBpbiBsb2NhbCBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuY2xlYXJQYWdlSGlzdG9yeSgpO1xuXG4gICAgLy8gTm90aWZ5IG9ic2VydmVyc1xuICAgIHRoaXMub25Mb2dvdXQubmV4dCgpO1xuICAgIGlmIChoYWRBdXRoVG9rZW4pIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIGlmIChoYWRBdXRoQmFzaWMpIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMub25DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkKG9wdHM/OiB7XG4gICAgb2ZmbGluZT86IGJvb2xlYW47XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8QWNjb3VudCB8IHVuZGVmaW5lZD4ge1xuXG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBMb2FkaW5nIGFjY291bnQuLi5gKTtcbiAgICBsZXQganNvbjogYW55O1xuXG4gICAgLy8gTG9hZCBsb2NhbGx5XG4gICAgY29uc3Qgb2ZmbGluZSA9IHRoaXMubmV0d29yay5vZmZsaW5lXG4gICAgICAmJiAoIW9wdHMgfHwgKG9wdHMuZmV0Y2hQb2xpY3kgIT09ICduZXR3b3JrLW9ubHknICYmIG9wdHMuZmV0Y2hQb2xpY3kgIT09ICduby1jYWNoZScpKVxuICAgICAgfHwgKG9wdHMgJiYgb3B0cy5vZmZsaW5lID09PSB0cnVlKTtcbiAgICBpZiAob2ZmbGluZSkge1xuICAgICAganNvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoQUNDT1VOVF9TVE9SQUdFX0tFWSk7XG4gICAgICBqc29uID0ganNvbiAmJiAodHlwZW9mIGpzb24gPT09ICdzdHJpbmcnKSAmJiBKU09OLnBhcnNlKGpzb24pIHx8IGpzb247XG4gICAgICBqc29uID0ganNvbiAmJiB0aGlzLl9jYWNoZS5wdWJrZXkgJiYgKGpzb24ucHVia2V5ID09PSB0aGlzLl9jYWNoZS5wdWJrZXkpICYmIGpzb24gfHwgbnVsbDtcbiAgICAgIGlmICghanNvbiAmJiB0aGlzLl9jYWNoZS5wdWJrZXkpIHtcbiAgICAgICAganNvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoQUNDT1VOVF9TVE9SQUdFX0tFWSArICcjJyArIHRoaXMuX2NhY2hlLnB1YmtleSk7XG4gICAgICAgIGpzb24gPSBqc29uICYmICh0eXBlb2YganNvbiA9PT0gJ3N0cmluZycpICYmIEpTT04ucGFyc2UoanNvbikgfHwganNvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIHJlbW90ZWx5XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgICBxdWVyeTogTG9hZFF1ZXJ5LFxuICAgICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkxPQURfQUNDT1VOVF9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQUNDT1VOVF9FUlJPUicgfSxcbiAgICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSB8fCAnbm8tY2FjaGUnIHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBqc29uID0gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoanNvbikge1xuICAgICAgY29uc3QgYWNjb3VudCA9IEFjY291bnQuZnJvbU9iamVjdChqc29uKTtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGFjY291bnQpO1xuICAgICAgIHJldHVybiBhY2NvdW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2FjY291bnRdIEFjY291bnQgbm90IGZvdW5kICFgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZW1haWwgaXMgYXZhaWxhYmxlIGZvciBuZXcgYWNjb3VudCByZWdpc3RyYXRpb24uXG4gICAqIFRocm93IGFuIGVycm9yIGlmIG5vdCBhdmFpbGFibGVcbiAgICpcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqL1xuICBhc3luYyBjaGVja0VtYWlsQXZhaWxhYmxlKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0VtYWlsRXhpc3RzID0gYXdhaXQgdGhpcy5pc0VtYWlsRXhpc3RzKGVtYWlsKTtcbiAgICBpZiAoaXNFbWFpbEV4aXN0cykge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkVNQUlMX0FMUkVBRFlfUkVHSVNURVJFRCwgbWVzc2FnZTogJ0VSUk9SLkVNQUlMX0FMUkVBRFlfUkVHSVNURVJFRCcgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZW1haWwgaXMgZXhpc3RzIGluIHNlcnZlci5cbiAgICpcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqL1xuICBhc3luYyBpc0VtYWlsRXhpc3RzKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIENoZWNraW5nIGlmIHsnICsgZW1haWwgKyAnfSBleGlzdHMuLi4nKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBpc0VtYWlsRXhpc3RzOiBib29sZWFuIH0sIElzRW1haWxFeGlzdHNWYXJpYWJsZXM+KHtcbiAgICAgIHF1ZXJ5OiBJc0VtYWlsRXhpc3RzUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGhhc2g6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gRW1haWwgZXhpc3Q6ICcgKyAoZGF0YSAmJiBkYXRhLmlzRW1haWxFeGlzdHMpKTtcblxuICAgIHJldHVybiBkYXRhICYmIGRhdGEuaXNFbWFpbEV4aXN0cztcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb25maXJtYXRpb25FbWFpbChlbWFpbDogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCB0aGlzLnNldHRpbmdzLmxvY2FsZTtcbiAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gU2VuZGluZyBjb25maXJtYXRpb24gZW1haWwgdG8geycgKyBlbWFpbCArICd9IHdpdGggbG9jYWxlIHsnICsgbG9jYWxlICsgJ30uLi4nKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPGJvb2xlYW4+KHtcbiAgICAgIG11dGF0aW9uOiBTZW5kQ29uZmlybUVtYWlsTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGxvY2FsZVxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuU0VOVF9DT05GSVJNQVRJT05fRU1BSUxfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuU0VOVF9BQ0NPVU5UX0NPTkZJUk1BVElPTl9FTUFJTF9GQUlMRUQnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb25maXJtRW1haWwoZW1haWw6IFN0cmluZywgY29kZTogU3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gU2VuZG5nIGNvbmZpcm0gcmVxdWVzdCBmb3IgZW1haWwgeycgKyBlbWFpbCArICd9IHdpdGggY29kZSB7JyArIGNvZGUgKyAnfS4uLicpO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGNvbmZpcm1BY2NvdW50RW1haWw6IGJvb2xlYW4gfT4oe1xuICAgICAgbXV0YXRpb246IENvbmZpcm1FbWFpbE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICBjb2RlXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5DT05GSVJNX0VNQUlMX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkNPTkZJUk1fQUNDT1VOVF9FTUFJTF9GQUlMRUQnXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcyAmJiByZXMuY29uZmlybUFjY291bnRFbWFpbDtcbiAgfVxuXG4gIGxpc3RlbkNoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBTdWJzY3JpcHRpb24ge1xuICAgIGlmICh0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzKSByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigpOyAvLyBBbHJlYWR5IHN0YXJ0ZWQ6IHNraXBcblxuICAgIHJldHVybiB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcyhvcHRzKTtcbiAgfVxuXG4gIGdldCBhZGRpdGlvbmFsRmllbGRzKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgJGFkZGl0aW9uYWxGaWVsZHMoKTogT2JzZXJ2YWJsZTxGb3JtRmllbGREZWZpbml0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRBZGRpdGlvbmFsRmllbGQoa2V5OiBzdHJpbmcpOiBGb3JtRmllbGREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMuZ2V0VmFsdWUoKS5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gIH1cblxuICByZWdpc3RlckFkZGl0aW9uYWxGaWVsZChmaWVsZDogRm9ybUZpZWxkRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLmdldFZhbHVlKCk7XG4gICAgaWYgKCEhdmFsdWVzLmZpbmQoZiA9PiBmLmtleSA9PT0gZmllbGQua2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFjY291bnQgZmllbGQge2tleTogJHtmaWVsZC5rZXl9fSBhbHJlYWR5IGRlZmluZS5gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gRm91bmQgYWRkaXRpb25hbCBhY2NvdW50J3MgZmllbGQge2tleTogJHtmaWVsZC5rZXl9fWApO1xuICAgIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLm5leHQodmFsdWVzLmNvbmNhdChmaWVsZCkpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCByZXNldERhdGEoKSB7XG4gICAgdGhpcy5zdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5wZXJzb24gPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLmRlcGFydG1lbnQgPSBudWxsO1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgQWNjb3VudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWREYXRhKG9wdHM/OiB7XG4gICAgb2ZmbGluZT86IGJvb2xlYW47XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuXG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjb3VudCA9IChhd2FpdCB0aGlzLmxvYWQob3B0cykpIHx8IG5ldyBBY2NvdW50KCk7XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0c1xuICAgICAgYWNjb3VudC5hdmF0YXIgPSBhY2NvdW50LmF2YXRhciB8fCAodGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsICsgREVGQVVMVF9BVkFUQVJfSU1BR0UpO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncyA9IGFjY291bnQuc2V0dGluZ3MgfHwgbmV3IFVzZXJTZXR0aW5ncygpO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUgPSBhY2NvdW50LnNldHRpbmdzLmxvY2FsZSB8fCB0aGlzLnNldHRpbmdzLmxvY2FsZTtcbiAgICAgIGFjY291bnQuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCA9IGFjY291bnQuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCB8fCB0aGlzLnNldHRpbmdzLmxhdExvbmdGb3JtYXQgfHwgJ0RETU0nO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncy5jb250ZW50ID0gYWNjb3VudC5zZXR0aW5ncy5jb250ZW50IHx8IHt9O1xuXG4gICAgICAvLyBSZWFkIG1haW4gcHJvZmlsZVxuICAgICAgdGhpcy5fY2FjaGUubWFpblByb2ZpbGUgPSBQZXJzb25VdGlscy5nZXRNYWluUHJvZmlsZShhY2NvdW50LnByb2ZpbGVzKTtcblxuICAgICAgLy8gVXBkYXRlLCBpbnN0ZWFkIG9mIHJlcGxhY2UgaXRcbiAgICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICAgIHRoaXMuX2RhdGEuZnJvbU9iamVjdChhY2NvdW50KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9kYXRhID0gYWNjb3VudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IHRydWU7XG5cbiAgICAgIC8vIEFwcGx5IHNldHRpbmdzLCBmb3VuZCBpbiByZW1vdGUgYWNjb3VudFxuICAgICAgaWYgKGFjY291bnQuc2V0dGluZ3MpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgLi4udGhpcy5zZXR0aW5ncy5zZXR0aW5ncyxcbiAgICAgICAgICAuLi5hY2NvdW50LnNldHRpbmdzLmFzTG9jYWxTZXR0aW5ncygpXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseShzZXR0aW5ncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICBpZiAoZXJyb3IuY29kZSAmJiBlcnJvci5tZXNzYWdlKSB0aHJvdyBlcnJvcjtcblxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuTE9BRF9BQ0NPVU5UX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuTE9BRF9BQ0NPVU5UX0VSUk9SJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbGlzdGVuU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPntcbiAgICAvLyBXaGVuIHNldHRpbmdzIGNoYW5nZWQ6IHNhdmUgaXQgcmVtb3RlbHlcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZXR0aW5ncy5vbkNoYW5nZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNMb2dpbigpICYmIHRoaXMubmV0d29yay5vbmxpbmUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShzZXR0aW5ncyA9PiB0aGlzLnNhdmVMb2NhbFNldHRpbmdzUmVtb3RlbHkoc2V0dGluZ3MpKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxBY2NvdW50IHwgdW5kZWZpbmVkPiB7XG5cbiAgICAvLyBSZXN0b3JlIGZyb20gc3RvcmFnZVxuICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQoUFVCS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQoVE9LRU5fU1RPUkFHRV9LRVkpLFxuICAgICAgdGhpcy5zdG9yYWdlLmdldChTRUNLRVlfU1RPUkFHRV9LRVkpXG4gICAgXSk7XG4gICAgY29uc3QgcHVia2V5ID0gdmFsdWVzWzBdO1xuICAgIGNvbnN0IHRva2VuID0gdmFsdWVzWzFdO1xuICAgIGNvbnN0IHNlY2tleSA9IHZhbHVlc1syXTtcblxuICAgIC8vIFF1aXQgaWYgbm8gcHVia2V5IChub3QgbG9nZ2VkKVxuICAgIGlmICghcHVia2V5KSByZXR1cm47XG5cbiAgICAvLyBRdWl0IGlmIGNvdWxkIG5vdCBhdXRoIG9uIHBvZFxuICAgIGNvbnN0IGNhblJlbW90ZUF1dGggPSB0b2tlbiB8fCBzZWNrZXkgfHwgZmFsc2U7XG4gICAgaWYgKCFjYW5SZW1vdGVBdXRoKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBBY2NvdW50IHJlc3RvcmF0aW9uLi4uYCk7XG5cbiAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBwdWJrZXk7XG4gICAgdGhpcy5fY2FjaGUua2V5cGFpciA9IHNlY2tleSAmJiB7XG4gICAgICBwdWJsaWNLZXk6IEJhc2U1OC5kZWNvZGUocHVia2V5KSxcbiAgICAgIHNlY3JldEtleTogQmFzZTU4LmRlY29kZShzZWNrZXkpXG4gICAgfSB8fCBudWxsO1xuXG4gICAgLy8gT25saW5lIG1vZGU6IHRyeSB0byBjb25uZWN0IHRvIHBvZFxuICAgIGlmICh0aGlzLm5ldHdvcmsub25saW5lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX2NhY2hlLmF1dGhUb2tlbiAmJiAhdGhpcy5fY2FjaGUuYXV0aEJhc2ljKSB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE9mZmxpbmUgZmVhdHVyZSBhcmUgZW5hYmxlOiBjb250aW51ZSBpbiBvZmZsaW5lIG1vZGVcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuaGFzT2ZmbGluZUZlYXR1cmUoKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW2FjY291bnRdIFVuYWJsZSB0byBhdXRoZW50aWNhdGUgb24gcG9kOiBmb3JjaW5nIG9mZmxpbmUgbW9kZScpO1xuICAgICAgICAgIHRoaXMubmV0d29yay5zZXRGb3JjZU9mZmxpbmUodHJ1ZSwge3Nob3dUb2FzdDogZmFsc2V9KTtcbiAgICAgICAgICAvLyBDb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vIG9mZmxpbmUgZmVhdHVyZXMgZW5hYmxlICg9b2ZmbGluZSBtb2RlIG5vdCBhbGxvd2VkKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBhY2NvdW50LCBmcm9tIHB1YmtleVxuICAgIGxldCBqc29uQWNjb3VudCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoYCR7QUNDT1VOVF9TVE9SQUdFX0tFWX0jJHtwdWJrZXl9YCk7XG4gICAgaWYgKCFqc29uQWNjb3VudCkge1xuICAgICAgLy8gVHJ5IHVzaW5nIHRoZSBvbGQgc3RvcmFnZSBrZXlcbiAgICAgIGNvbnN0IGFjY291bnRTdHIgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KEFDQ09VTlRfU1RPUkFHRV9LRVkpO1xuICAgICAganNvbkFjY291bnQgPSBhY2NvdW50U3RyICYmICgodHlwZW9mIGFjY291bnRTdHIgPT09ICdzdHJpbmcnKSAmJiBKU09OLnBhcnNlKGpzb25BY2NvdW50KSB8fCBhY2NvdW50U3RyKTtcbiAgICB9XG5cbiAgICAvLyBJbnZhbGlkIGFjY291bnQ6IGRvIG5vdCB1c2UgaXRcbiAgICBpZiAoIWpzb25BY2NvdW50IHx8IGpzb25BY2NvdW50LnB1YmtleSAhPT0gcHVia2V5KSByZXR1cm47XG5cbiAgICAvLyBUcmFuc2Zvcm0gdG8gZW50aXR5XG4gICAgY29uc3QgYWNjb3VudCA9IEFjY291bnQuZnJvbU9iamVjdChqc29uQWNjb3VudCk7XG5cbiAgICAvLyBVcGRhdGUgZGF0YVxuICAgIHRoaXMuX2RhdGEgPSBhY2NvdW50O1xuICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoYWNjb3VudC5wcm9maWxlcyk7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgcmVzdG9yYXRpb24gW09LXSB7cHVia2V5OiAke3B1YmtleS5zdWJzdHIoMCwgOCl9fSwge3Byb2ZpbGU6ICR7dGhpcy5fY2FjaGUubWFpblByb2ZpbGV9fWApO1xuXG4gICAgcmV0dXJuIGFjY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhY2NvdW50IGludG8gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlTG9jYWxseSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQnKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBhY2NvdW50IHske3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHJpbmcoMCwgNil9fSBpbiBsb2NhbCBzdG9yYWdlLi4uYCk7XG5cbiAgICAvLyBDb252ZXJ0IGFjY291bnQgdG8ganNvblxuICAgIGNvbnN0IGpzb24gPSB0aGlzLl9kYXRhLmFzT2JqZWN0KHtrZWVwVHlwZW5hbWU6IHRydWV9KTtcbiAgICBjb25zdCBzZWNrZXkgPSB0aGlzLl9jYWNoZS5rZXlwYWlyICYmIHRoaXMuX2NhY2hlLmtleXBhaXIuc2VjcmV0S2V5ICYmIEJhc2U1OC5lbmNvZGUodGhpcy5fY2FjaGUua2V5cGFpci5zZWNyZXRLZXkpIHx8IG51bGw7XG5cbiAgICAvLyBDb252ZXJ0IGF2YXRhciBVUkwgdG8gZGF0YVVybCAoZS5nLiAnZGF0YTppbWFnZS9wbmc6PGJhc2U2NCBjb250ZW50PicpXG4gICAgY29uc3QgaGFzQXZhdGFyVXJsID0ganNvbi5hdmF0YXIgJiYgIWpzb24uYXZhdGFyLmVuZHNXaXRoKERFRkFVTFRfQVZBVEFSX0lNQUdFKSAmJlxuICAgICAgKGpzb24uYXZhdGFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCAoanNvbi5hdmF0YXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkpO1xuICAgIGlmIChoYXNBdmF0YXJVcmwgJiYgdGhpcy5uZXR3b3JrLm9ubGluZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlLmdldEltYWdlKGpzb24uYXZhdGFyLCB7XG4gICAgICAgIHRodW1ibmFpbDogdHJ1ZSxcbiAgICAgICAgb3V0cHV0VHlwZTogJ2RhdGFVcmwnXG4gICAgICB9KVxuICAgICAgICAudGhlbihkYXRhVXJsID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVVybCAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEltYWdlIGZldGNoZWQ6ICcsIGRhdGFVcmwuc3Vic3RyaW5nKDAsIDUwKSk7XG5cbiAgICAgICAgICAvLyBUT0RPOiBtYWtlIHN1cmUgdG8gZGlzcGxheSBCYXNlNjQgaW1hZ2UgaW4gdGhlIG1lbnUgdG9wIGhlYWRlclxuICAgICAgICAgIC8vanNvbkFjY291bnQuYXZhdGFyID0gZGF0YVVybDtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIEVycm9yIHdoaWxlIGZldGNoaW5nIGltYWdlOiAke2pzb24uYXZhdGFyfTogJHtlcnJ9YCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoUFVCS0VZX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5wdWJrZXkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KFRPS0VOX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5hdXRoVG9rZW4pLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7dGhpcy5fY2FjaGUucHVia2V5fWAsIGpzb24pLFxuICAgICAgICAvLyBTZWNyZXQga2V5IChvcHRpb25hbClcbiAgICAgICAgc2Vja2V5ICYmIHRoaXMuc3RvcmFnZS5zZXQoU0VDS0VZX1NUT1JBR0VfS0VZLCBzZWNrZXkpIHx8IHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgLy8gUmVtb3ZlIG9sZCBzdG9yYWdlIGtleVxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEFDQ09VTlRfU1RPUkFHRV9LRVkpXG4gICAgICBdKTtcblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gQWNjb3VudCBzYXZlZCBpbiBsb2NhbCBzdG9yYWdlJyk7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2FjY291bnRdIEVycm9yIHdoaWxlIHNhdmluZyBhY2NvdW50IGxvY2FsbHk6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgfVxuICB9XG5cbiAgIGFzeW5jIHNhdmVMb2NhbFNldHRpbmdzUmVtb3RlbHkoc291cmNlOiBMb2NhbFNldHRpbmdzKXtcbiAgICAgaWYgKCFzb3VyY2UgfHwgIXRoaXMuaXNMb2dpbigpIHx8IHNvdXJjZS5hY2NvdW50SW5oZXJpdGFuY2UgPT09IGZhbHNlKSByZXR1cm47IC8vIFNraXBcbiAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudDtcblxuICAgICAvLyBNZXJnZSBsb2NhbCBzZXR0aW5ncyBpbnRvIGFjY291bnQncyBzZXR0aW5nc1xuICAgICBjb25zdCBzZXR0aW5ncyA9IFVzZXJTZXR0aW5ncy5mcm9tT2JqZWN0KGFjY291bnQuc2V0dGluZ3MpIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgY29uc3QgY2hhbmdlZCA9IHNldHRpbmdzLm1lcmdlKHNvdXJjZSwgWydsb2NhbGUnLCAnbGF0TG9uZ0Zvcm1hdCcsICdwcm9wZXJ0aWVzJ10pO1xuXG4gICAgIGlmICghY2hhbmdlZCkgcmV0dXJuOyAvLyBTa2lwIGlmIHVuY2hhbmdlZFxuXG4gICAgIC8vIFNhdmUgcmVtb3RlbHlcbiAgICAgdGhpcy5hY2NvdW50LnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgIGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzUmVtb3RlbHkoc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBhY2NvdW50XG4gICAqIEBwYXJhbSBrZXlQYWlyXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVJlbW90ZWx5KGFjY291bnQ6IEFjY291bnQsIGtleVBhaXI/OiBLZXlQYWlyKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgYWNjb3VudC5wdWJrZXkgPSBhY2NvdW50LnB1YmtleSB8fCAoa2V5UGFpciAmJiBCYXNlNTguZW5jb2RlKGtleVBhaXIucHVibGljS2V5KSk7XG4gICAgaWYgKCFhY2NvdW50LnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFjY291bnQgcHVia2V5Jyk7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBhY2NvdW50IHJlbW90ZWx5Li4uYCk7XG5cbiAgICBjb25zdCBpc05ldyA9IGlzTmlsKGFjY291bnQuaWQpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhbiB1cGRhdGU6IGdldCBleGlzdGluZyBhY2NvdW50J3MgdXBkYXRlRGF0ZSwgdG8gYXZvaWQgJ3ZlcnNpb24gZXJyb3InIHdoZW4gc2F2aW5nXG4gICAgaWYgKCFpc05ldykge1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50ID0gYXdhaXQgdGhpcy5sb2FkKHsgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknIH0pO1xuICAgICAgaWYgKCFleGlzdGluZ0FjY291bnQgfHwgIWV4aXN0aW5nQWNjb3VudC51cGRhdGVEYXRlKSB7XG4gICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5BQ0NPVU5UX05PVF9FWElTVFMsIG1lc3NhZ2U6ICdFUlJPUi5BQ0NPVU5UX05PVF9FWElTVFMnIH07XG4gICAgICB9XG4gICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoZXhpc3RpbmdBY2NvdW50LCBhY2NvdW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gYWNjb3VudC5hc09iamVjdChNSU5JRllfRU5USVRZX0ZPUl9QT0QpO1xuXG4gICAgLy8gVXNlciBub3QgYWxsb3cgdG8gY2hhbmdlIGhpcyBwcm9maWxlc1xuICAgIGRlbGV0ZSBqc29uLnByb2ZpbGVzO1xuXG4gICAgLy8gRXhlY3V0ZSBtdXRhdGlvblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IEFjY291bnQgfT4oe1xuICAgICAgbXV0YXRpb246IGlzTmV3ID8gQWNjb3VudE11dGF0aW9ucy5jcmVhdGUgOiBBY2NvdW50TXV0YXRpb25zLnNhdmUsXG4gICAgICB2YXJpYWJsZXM6IHsgZGF0YToganNvbiB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TQVZFX0FDQ09VTlRfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX0FDQ09VTlRfRVJST1InXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKGRhdGEsIGFjY291bnQpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZW1vdGVseSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIHJldHVybiBhY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgdXNlciBzZXR0aW5nc1xuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3NcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlU2V0dGluZ3NSZW1vdGVseShzZXR0aW5nczogVXNlclNldHRpbmdzKSB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBzZXR0aW5ncyByZW1vdGVseS4uLmApO1xuXG4gICAgY29uc3QganNvbiA9IHNldHRpbmdzLmFzT2JqZWN0KE1JTklGWV9FTlRJVFlfRk9SX1BPRCk7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogVXNlclNldHRpbmdzIH0+KHtcbiAgICAgIG11dGF0aW9uOiBBY2NvdW50TXV0YXRpb25zLnNhdmVTZXR0aW5ncyxcbiAgICAgIHZhcmlhYmxlczogeyBkYXRhOiBqc29uIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNBVkVfU0VUVElOR1NfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX1NFVFRJTkdTX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ29weSB1cGRhdGUgcHJvcGVydGllc1xuICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKGRhdGEsIHNldHRpbmdzKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNldHRpbmdzIHJlbW90ZWx5IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgLy8gU2F2ZSBpbnRvIGFjY291bnRcbiAgICBpZiAodGhpcy5hY2NvdW50KSB0aGlzLmFjY291bnQuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhdXRoZW50aWNhdGVBbmRHZXRUb2tlbih0b2tlbj86IHN0cmluZywgY291bnRlcj86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG5cbiAgICBpZiAoIWNvdW50ZXIpIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZC4uLicpO1xuXG4gICAgaWYgKGNvdW50ZXIgPiA0KSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBGYWlsZWQgdG8gYXV0aGVudGljYXRpb24gb24gcG9kIChhZnRlciAke2NvdW50ZXJ9IGF0dGVtcHRzKWApO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkFVVEhfU0VSVkVSX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuQVVUSF9TRVJWRVJfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdmFsaWRcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBhdXRoZW50aWNhdGU6IGJvb2xlYW4gfSwgeyB0b2tlbjogc3RyaW5nIH0+KHtcbiAgICAgICAgcXVlcnk6IEF1dGhRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICAgICBtZXNzYWdlOiAnRVJST1IuVU5BVVRIT1JJWkVEJ1xuICAgICAgICB9LFxuICAgICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRva2VuIGlzIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2ZXJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuYXV0aGVudGljYXRlKSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSB0b2tlblxuICAgICAgICB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodG9rZW4pO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZCBbT0tdIHtwdWJrZXk6ICcke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9J31gKTtcbiAgICAgICAgcmV0dXJuIHRva2VuOyAvLyByZXR1cm4gdGhlIHRva2VuXG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh3aWxsIHJldHJ5IHdpdGggYW5vdGhlciBjaGFsbGVuZ2UpXG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYSBuZXcgdG9rZW5cbiAgICBjb25zdCBjaGFsbGVuZ2VFcnJvciA9IHtcbiAgICAgIGNvZGU6IEVycm9yQ29kZXMuQVVUSF9DSEFMTEVOR0VfRVJST1IsXG4gICAgICBtZXNzYWdlOiAnRVJST1IuQVVUSF9DSEFMTEVOR0VfRVJST1InXG4gICAgfTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHtcbiAgICAgIGF1dGhDaGFsbGVuZ2U6IHtcbiAgICAgICAgcHVia2V5OiBzdHJpbmc7XG4gICAgICAgIGNoYWxsZW5nZTogc3RyaW5nO1xuICAgICAgICBzaWduYXR1cmU6IHN0cmluZztcbiAgICAgIH07XG4gICAgfT4oe1xuICAgICAgcXVlcnk6IEF1dGhDaGFsbGVuZ2VRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICBlcnJvcjogY2hhbGxlbmdlRXJyb3IsXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGNoYWxsZW5nZVxuICAgIGlmICghZGF0YSB8fCAhZGF0YS5hdXRoQ2hhbGxlbmdlKSB0aHJvdyBjaGFsbGVuZ2VFcnJvcjsgLy8gU2hvdWxkIG5ldmVyIG9jY3VyXG5cbiAgICAvLyBDaGVjayBzZXJ2ZXIgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnbmF0dXJlT0sgPSBhd2FpdCB0aGlzLmNyeXB0b1NlcnZpY2UudmVyaWZ5KFxuICAgICAgZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZSxcbiAgICAgIGRhdGEuYXV0aENoYWxsZW5nZS5zaWduYXR1cmUsXG4gICAgICBkYXRhLmF1dGhDaGFsbGVuZ2UucHVia2V5XG4gICAgKTtcbiAgICBpZiAoIXNpZ25hdHVyZU9LKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZJWE1FOiBCYWQgcGVlciBzaWduYXR1cmUgb24gYXV0aCBjaGFsbGVuZ2UgIScsIGRhdGEuYXV0aENoYWxsZW5nZSk7XG4gICAgfVxuICAgIC8vIFRPRE86IGNoZWNrIHNlcnZlciBwdWJrZXkgYXMgYSB2YWxpZCBjZXJ0aWZpY2F0ZVxuXG4gICAgLy8gRG8gdGhlIGNoYWxsZW5nZVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHRoaXMuY3J5cHRvU2VydmljZS5zaWduKGRhdGEuYXV0aENoYWxsZW5nZS5jaGFsbGVuZ2UsIHRoaXMuX2NhY2hlLmtleXBhaXIpO1xuICAgIGNvbnN0IG5ld1Rva2VuID0gYCR7dGhpcy5fY2FjaGUucHVia2V5fToke2RhdGEuYXV0aENoYWxsZW5nZS5jaGFsbGVuZ2V9fCR7c2lnbmF0dXJlfWA7XG5cbiAgICAvLyBpdGVyYXRlIHdpdGggdGhlIG5ldyB0b2tlblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZUFuZEdldFRva2VuKG5ld1Rva2VuLCAoY291bnRlciB8fCAxKSArIDEgLyogaW5jcmVtZW50ICovKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydExpc3RlblJlbW90ZUNoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBTdWJzY3JpcHRpb24ge1xuICAgIGlmICh0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKSB0aGlzLnN0b3BMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7IC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigpOyAvLyBPZmZsaW5lOiBza2lwXG5cbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy53YXRjaENoYW5nZXMob3B0cylcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBSZW1vdGUgdXBkYXRlIGRldGVjdGVkIGF0ICR7ZGF0YS51cGRhdGVEYXRlfWApO1xuICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGVyciAmJiArZXJyLmNvZGUgPT09IFNlcnZlckVycm9yQ29kZXMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oJ1thY2NvdW50XSBbV1NdIEFjY291bnQgbm90IGV4aXN0cyBhbnltb3JlOiBmb3JjZSB1c2VyIHRvIGxvZ291dC4uLicsIGVycik7XG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyICYmICtlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5VTkFVVEhPUklaRUQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFtXU10gQWNjb3VudCBub3QgYXV0aG9yaXplZDogZm9yY2UgdXNlciB0byBsb2dvdXQuLi4nLCBlcnIpO1xuICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbYWNjb3VudF0gW1dTXSBSZWNlaXZlZCBlcnJvcjonLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoKCkgPT4ge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFN0b3Agd2F0Y2hpbmcgcmVtb3RlIGNoYW5nZXNgKTtcbiAgICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RvcExpc3RlblJlbW90ZUNoYW5nZXMoKSB7XG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB3YXRjaENoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBPYnNlcnZhYmxlPEFjY291bnQ+IHtcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAvLyBXYWl0IHNlcnZpY2UgcmVhZHksIHRoZW4gbG9vcFxuICAgICAgcmV0dXJuIGZyb20odGhpcy5yZWFkeSgpKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy53YXRjaENoYW5nZXMob3B0cykpKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdOb3QgbG9nZ2VkIGluJyk7XG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB3YXRjaCBhY2NvdW50IGNoYW5nZXM6IG5ldHdvcmsgaXMgb2ZmbGluZS4nKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtcbiAgICAgIGludGVydmFsOiB0b051bWJlcihvcHRzICYmIG9wdHMuaW50ZXJ2YWxJblNlY29uZHMsIHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzKVxuICAgIH07XG5cbiAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gV2F0Y2hpbmcgcmVtb3RlIGNoYW5nZXMsIGV2ZXJ5ICR7dmFyaWFibGVzLmludGVydmFsfXNgKTtcblxuICAgIHJldHVybiB0aGlzLmdyYXBocWwuc3Vic2NyaWJlPHtkYXRhOiBhbnl9Pih7XG4gICAgICBxdWVyeTogQWNjb3VudFN1YnNjcmlwdGlvbnMubGlzdGVuQ2hhbmdlcyxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuU1VCU0NSSUJFX0FDQ09VTlRfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5BQ0NPVU5ULlNVQlNDUklCRV9FUlJPUidcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgICBtYXAoKHtkYXRhfSkgPT4gZGF0YSksXG4gICAgICAgIC8vIEtlZXAgb25seSBpZiBuZXdlclxuICAgICAgICBmaWx0ZXIoZGF0YSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFVwZGF0ZURhdGU6IE1vbWVudCA9IGZyb21EYXRlSVNPU3RyaW5nKHRoaXMuX2RhdGE/LnVwZGF0ZURhdGUpO1xuICAgICAgICAgIGNvbnN0IHJlbW90ZVVwZGF0ZURhdGU6IE1vbWVudCA9IGZyb21EYXRlSVNPU3RyaW5nKGRhdGE/LnVwZGF0ZURhdGUpO1xuICAgICAgICAgIHJldHVybiAocmVtb3RlVXBkYXRlRGF0ZSAmJiAoIWN1cnJlbnRVcGRhdGVEYXRlIHx8ICFyZW1vdGVVcGRhdGVEYXRlLmlzU2FtZShjdXJyZW50VXBkYXRlRGF0ZSwgJ21pbGxpc2Vjb25kJykpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2U6IEFjY291bnQgfCB1bmRlZmluZWQsIHRhcmdldDogQWNjb3VudCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICB0YXJnZXQuaWQgPSBzb3VyY2UuaWQgfHwgdGFyZ2V0LmlkO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gc291cmNlLnVwZGF0ZURhdGUgfHwgdGFyZ2V0LnVwZGF0ZURhdGU7XG5cbiAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGVTZXR0aW5ncyhzb3VyY2Uuc2V0dGluZ3MsIHRhcmdldC5zZXR0aW5ncyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKHNvdXJjZTogVXNlclNldHRpbmdzIHwgdW5kZWZpbmVkLCB0YXJnZXQ6IFVzZXJTZXR0aW5ncykge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG5cbiAgICB0YXJnZXQuaWQgPSBzb3VyY2UuaWQgfHwgdGFyZ2V0LmlkO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gc291cmNlLnVwZGF0ZURhdGUgfHwgdGFyZ2V0LnVwZGF0ZURhdGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG59XG4iXX0=
|