@sumaris-net/ngx-components 2.4.118 → 2.4.119
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/esm2020/src/app/admin/users/users.mjs +2 -2
- package/esm2020/src/app/core/account/account.page.mjs +1 -1
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +42 -6
- package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +2 -2
- package/esm2020/src/app/core/settings/settings.page.mjs +1 -1
- package/esm2020/src/app/core/table/table.class.mjs +2 -1
- package/esm2020/src/app/core/table/testing/table.testing.mjs +1 -1
- package/fesm2015/sumaris-net.ngx-components.mjs +47 -9
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +47 -9
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +14 -2
- package/src/assets/i18n/fr.json +2 -0
|
@@ -1590,6 +1590,7 @@ export class AppTable {
|
|
|
1590
1590
|
this.registerSubscription(this.dataSource.rowsSubject
|
|
1591
1591
|
// restore the 'adding' selection (for example after a page or sort change)
|
|
1592
1592
|
.subscribe((rows) => {
|
|
1593
|
+
this.visibleRowCount = rows.length;
|
|
1593
1594
|
selectionChangedPrevented = true;
|
|
1594
1595
|
try {
|
|
1595
1596
|
const permanentSelectionIds = (this.permanentSelection.selected || []).map(EntityUtils.getId);
|
|
@@ -1712,4 +1713,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1712
1713
|
type: ViewChild,
|
|
1713
1714
|
args: [MatSort, { static: false }]
|
|
1714
1715
|
}] } });
|
|
1715
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFDLE9BQU8sRUFBNkIsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRzdJLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsV0FBVyxFQUFVLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFhLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDekYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFV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d0luaXQsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdFBhZ2luYXRvcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7TWF0U29ydCwgTWF0U29ydGFibGUsIFNvcnREaXJlY3Rpb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHtNYXRUYWJsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VGFibGVFbGVtZW50fSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHtFbnRpdGllc1RhYmxlRGF0YVNvdXJjZX0gZnJvbSAnLi9lbnRpdGllcy10YWJsZS1kYXRhc291cmNlLmNsYXNzJztcbmltcG9ydCB7U2VsZWN0aW9uTW9kZWx9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQge0VudGl0eVV0aWxzLCBJRW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtBbGVydENvbnRyb2xsZXIsIE1vZGFsQ29udHJvbGxlciwgTmF2Q29udHJvbGxlciwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0NvbHVtbkl0ZW0sIFRhYmxlU2VsZWN0Q29sdW1uc0NvbXBvbmVudH0gZnJvbSAnLi90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7RXJyb3JDb2Rlc30gZnJvbSAnLi4vc2VydmljZXMvZXJyb3JzJztcbmltcG9ydCB7QXBwRm9ybVV0aWxzLCBJQXBwRm9ybSwgT25SZWFkeX0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7TG9jYWxTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLCBNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnMsIE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHtDb21wbGV0YWJsZUV2ZW50LCBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyLCBlbWl0UHJvbWlzZUV2ZW50fSBmcm9tICcuLi8uLi9zaGFyZWQvZXZlbnRzJztcbmltcG9ydCB7Y2hhbmdlQ2FzZVRvVW5kZXJzY29yZSwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3ROaWwsIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge3dhaXRGb3IsIHdhaXRGb3JGYWxzZSwgV2FpdEZvck9wdGlvbnMsIHdhaXRGb3JUcnVlfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHtBbGVydHN9IGZyb20gJy4uLy4uL3NoYXJlZC9hbGVydHMnO1xuaW1wb3J0IHtDZGtDb2x1bW5EZWZ9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQge0xvYWRSZXN1bHR9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0Zvcm1FcnJvclRyYW5zbGF0b3IsIEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zLCBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvcn0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQ2VsbFZhbHVlQ2hhbmdlTGlzdGVuZXIsXG4gIERFRkFVTFRfUEFHRV9TSVpFLFxuICBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxuICBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlMsXG4gIFJFU0VSVkVEX0VORF9DT0xVTU5TLFxuICBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLFxuICBTYXZlQWN0aW9uVHlwZSxcbiAgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TLFxuICBTRVRUSU5HU19QQUdFX1NJWkUsXG4gIFNFVFRJTkdTX1NPUlRFRF9DT0xVTU5cbn0gZnJvbSAnLi90YWJsZS5tb2RlbCc7XG5pbXBvcnQge0FwcFRhYmxlVXRpbHN9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBUYWJsZTxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIEYgPSBhbnksXG4gIElEID0gbnVtYmVyPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBJQXBwRm9ybSwgSUZvcm1Db250cm9sUGF0aFRyYW5zbGF0b3Ige1xuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIF9jZWxsVmFsdWVDaGFuZ2VzRGVmczoge1xuICAgIFtrZXk6IHN0cmluZ106IENlbGxWYWx1ZUNoYW5nZUxpc3RlbmVyO1xuICB9ID0ge307XG5cbiAgcHJvdGVjdGVkIF9lbmFibGVkID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVDb25maWdIb2xkZXI6IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcjtcbiAgcHJvdGVjdGVkIGFsbG93Um93RGV0YWlsID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuICBwcm90ZWN0ZWQgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGxvY2F0aW9uOiBMb2NhdGlvbjtcbiAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZTtcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgYWxlcnRDdHJsOiBBbGVydENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIHByZXZpb3VzbHlFZGl0ZWRSb3dJZDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZm9ybUVycm9yQWRhcHRlcjogRm9ybUVycm9yVHJhbnNsYXRvcjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBleGNsdWRlc0NvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xuICB0b3RhbFJvd0NvdW50OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdmlzaWJsZVJvd0NvdW50OiBudW1iZXI7XG4gIGVycm9yVHJhbnNsYXRvck9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zO1xuXG4gIHJlYWRvbmx5IHJlYWR5U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHNhdmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdG91Y2hlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZGlydHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGVycm9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuXG4gIGdldCBlcnJvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0IGVycm9yJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG5cbiAgc2V0IGVycm9yKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUYWJsZUVsZW1lbnQ8VD4+KHRydWUsIFtdKTtcbiAgcGVybWFuZW50U2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiA9IG51bGw7XG4gIGVkaXRlZFJvdzogVGFibGVFbGVtZW50PFQ+ID0gdW5kZWZpbmVkO1xuICBhdXRvY29tcGxldGVGaWVsZHM6IHtba2V5OiBzdHJpbmddOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZ307XG4gIHJlYWRvbmx5IG1vYmlsZTogYm9vbGVhbjtcblxuICAvLyBUYWJsZSBvcHRpb25zXG4gIEBJbnB1dCgpIHNldHRpbmdzSWQ6IHN0cmluZztcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5QcmVmaXggPSAnQ09NTU9OLic7XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5TdWZmaXg6IHN0cmluZztcbiAgQElucHV0KCkgYXV0b0xvYWQgPSB0cnVlO1xuICBASW5wdXQoKSByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5saW5lRWRpdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgZm9jdXNGaXJzdENvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlRGVsZXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpcm1CZWZvcmVDYW5jZWwgPSBmYWxzZTtcbiAgQElucHV0KCkgdW5kb2FibGVEZWxldGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlRGVsZXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBrZWVwRWRpdGVkUm93T25TYXZlOiBib29sZWFuO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlU29ydDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZUZpbHRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgcHJvcGFnYXRlUm93RXJyb3IgPSBmYWxzZTtcblxuICBASW5wdXQoKSBkZWZhdWx0U29ydEJ5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuICBASW5wdXQoKSBkZWZhdWx0UGFnZVNpemUgPSBERUZBVUxUX1BBR0VfU0laRTtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlM7XG5cbiAgLy8gRm9jdXMgbWFuYWdlclxuICBASW5wdXQoKSBmb2N1c0NvbHVtbjogc3RyaW5nO1xuXG4gIGdldCBmaXJzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW1JFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoXTtcbiAgfVxuXG4gIGdldCBsYXN0VXNlckNvbHVtbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNbdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCAtIFJFU0VSVkVEX0VORF9DT0xVTU5TLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPikge1xuICAgIHRoaXMuc2V0RGF0YXNvdXJjZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGF0YVNvdXJjZSgpOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogRikge1xuICAgIHRoaXMuc2V0RmlsdGVyKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXIoKTogRiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgfVxuXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nIHx8IHRoaXMudG90YWxSb3dDb3VudCA9PT0gMDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZEVudGl0aWVzKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMucGVybWFuZW50U2VsZWN0aW9uPy5zZWxlY3RlZFxuICAgICAgfHwgQXBwVGFibGVVdGlscy5nZXRFbnRpdGllcyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25SZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uTmV3Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN0YXJ0RWRpdGluZ1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Db25maXJtRWRpdENyZWF0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWxPckRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7cm93czogVGFibGVFbGVtZW50PFQ+W119PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVDYW5jZWxSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7cm93czogVGFibGVFbGVtZW50PFQ+W119PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVTYXZlID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjx7Y29uZmlybWVkOiBib29sZWFuOyBzYXZlOiBib29sZWFufSwge2FjdGlvbjogU2F2ZUFjdGlvblR5cGU7IHZhbGlkOiBib29sZWFufT4oKTtcbiAgQE91dHB1dCgpIG9uQWZ0ZXJEZWxldGVkUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+W10+KCk7XG4gIEBPdXRwdXQoKSBvblNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uRGlydHkgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpcnR5U3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8udmFsaWQgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LmludmFsaWQgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5wZW5kaW5nIDogZmFsc2U7XG4gIH1cblxuICBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b3VjaGVkU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCB1bnRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZGlzYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZW5hYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIC8vIEZJWE1FOiBuZWVkIHRvIGhpZGRlbiBidXR0b25zIChpbiBIVE1MKSwgZXRjLiB3aGVuIGRpc2FibGVkXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBlbHNlIHRoaXMuZW5hYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5kaXJ0eVN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmRpcnR5U3ViamVjdC52YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgbGV0IG5lZWRFbWl0RXZlbnQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b3VjaGVkU3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy50b3VjaGVkU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXJ0eSB8fCAodGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuaWQgIT09IHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkKSkge1xuICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IGVkaXRpbmcgcm93IG9ubHkgaWYgZWRpdGluZyBhbmQgaWYgaXQgd2FzIG5vdCBwcmV2aW91c2x5IHNhdmVkXG4gICAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHRoaXMuZWRpdGVkUm93KTtcblxuICAgICAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZVxuICAgICAgICB0aGlzLmNoZWNrSWZSb3dQcmlzdGluZSh0aGlzLmVkaXRlZFJvdywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gbnVsbDtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAobmVlZEVtaXRFdmVudCAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBwcmVmZXIgdG8gdXNlIG1hcmtBbGxBc1RvdWNoZWQoKVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgbWFya0FzVG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgY29uc29sZS53YXJuKCdUT0RPOiBSZXBsYWNlIHRoaXMgY2FsbCBieSBtYXJrQWxsQXNUb3VjaGVkKCkgLSBiZWNhdXNlIG9mIGNoYW5nZXMgaW4gbmd4LWNvbXBvbmVudHMgPj0gMC4xNi4wJyk7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/Lm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLnRvdWNoZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCBmb2N1cyBjb2x1bW5cbiAgICAgIHRoaXMuc2F2aW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pIHtcbiAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgb3B0cyk7XG4gIH1cblxuICBtYXJrQXNMb2FkZWQob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgb3B0cyk7XG4gIH1cblxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5yZWFkeVN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMucmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgIC8vIElmIHN1YmNsYXNzZXMgaW1wbGVtZW50cyBPblJlYWR5XG4gICAgICBpZiAodHlwZW9mIHRoaXNbJ25nT25SZWFkeSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICh0aGlzIGFzIGFueSBhcyBPblJlYWR5KS5uZ09uUmVhZHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZW5hYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGRpc2FibGVTb3J0KCkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZGVmYXVsdFBhZ2VTaXplID0gdmFsdWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgfVxuXG4gIGdldCBwYWdlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIHx8IDA7XG4gIH1cblxuICBnZXQgc29ydEFjdGl2ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmFjdGl2ZTtcbiAgfVxuXG4gIGdldCBzb3J0RGlyZWN0aW9uKCk6ICdhc2MnIHwgJ2Rlc2MnIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0ICYmIHRoaXMuc29ydC5kaXJlY3Rpb24gJiYgKHRoaXMuc29ydC5kaXJlY3Rpb24gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF9wYWdpbmF0b3I6IE1hdFBhZ2luYXRvciB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHNldCBwYWdpbmF0b3IodmFsdWU6IE1hdFBhZ2luYXRvcikge1xuICAgIHRoaXMuX3BhZ2luYXRvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3IgfHwgdGhpcy5jaGlsZFBhZ2luYXRvcjtcbiAgfVxuXG4gIGdldCBkZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveVN1YmplY3Q/LmNsb3NlZCAhPT0gZmFsc2U7XG4gIH1cblxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7c3RhdGljOiBmYWxzZX0pIHRhYmxlOiBNYXRUYWJsZTxUPjtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHtzdGF0aWM6IGZhbHNlfSkgY2hpbGRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7c3RhdGljOiBmYWxzZX0pIHNvcnQ6IE1hdFNvcnQ7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgY29sdW1uczogc3RyaW5nW10sXG4gICAgcHJvdGVjdGVkIF9kYXRhU291cmNlPzogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+LFxuICAgIHByaXZhdGUgX2ZpbHRlcj86IEZcbiAgKSB7XG4gICAgdGhpcy5yb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5yb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoTmF2Q29udHJvbGxlcik7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGluamVjdG9yLmdldChMb2NhdGlvbik7XG4gICAgdGhpcy5zZXR0aW5ncyA9IGluamVjdG9yLmdldChMb2NhbFNldHRpbmdzU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5tb2RhbEN0cmwgPSBpbmplY3Rvci5nZXQoTW9kYWxDb250cm9sbGVyKTtcbiAgICB0aGlzLmFsZXJ0Q3RybCA9IGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpO1xuICAgIHRoaXMudG9hc3RDb250cm9sbGVyID0gaW5qZWN0b3IuZ2V0KFRvYXN0Q29udHJvbGxlcik7XG4gICAgdGhpcy5mb3JtRXJyb3JBZGFwdGVyID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMubW9iaWxlID0gdGhpcy5zZXR0aW5ncy5tb2JpbGU7XG5cbiAgICAvLyBBdXRvY29tcGxldGUgZmllbGRzXG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyID0gbmV3IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcih7XG4gICAgICBnZXRVc2VyQXR0cmlidXRlczogKGEsIGIpID0+IHRoaXMuc2V0dGluZ3MuZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhhLCBiKVxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVhZE9ubHkgfHwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zID0gdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zIHx8IHsgc2VwYXJhdG9yOiAnLCAnLCBjb250cm9sUGF0aFRyYW5zbGF0b3I6IHRoaXMgfTsgLy8gQ2FuIGJlIG92ZXJyaWRlIGluIHN1YmNsYXNzZXMgY29uc3RydWN0b3JzXG5cbiAgICAvLyBDaGVjayBhc2sgdXNlciBjb25maXJtYXRpb24gaXMgcG9zc2libGVcbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICF0aGlzLmFsZXJ0Q3RybCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgXFwnYWxlcnRDdHJsXFwnIG9yIFxcJ2luamVjdG9yXFwnIGluIGNvbXBvbmVudFxcJ3MgY29uc3RydWN0b3IuJyk7XG5cbiAgICAvLyBEZWZpbmVkIHVuaXF1ZSBpZCBmb3Igc2V0dGluZ3MgZm9yIHRoZSBwYWdlXG4gICAgdGhpcy5zZXR0aW5nc0lkID0gdGhpcy5zZXR0aW5nc0lkIHx8IHRoaXMuZ2VuZXJhdGVUYWJsZUlkKCk7XG5cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmdldERpc3BsYXlDb2x1bW5zKCk7XG5cbiAgICAvLyBMb2FkIHRoZSBzb3J0ZWQgY29sdW1ucywgZnJvbSBzZXR0aW5nc1xuICAgIHtcbiAgICAgIGNvbnN0IHNvcnRlZENvbHVtbiA9IHRoaXMuZ2V0U29ydGVkQ29sdW1uKCk7XG4gICAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSBzb3J0ZWRDb2x1bW4uaWQ7XG4gICAgICB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uID0gc29ydGVkQ29sdW1uLnN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMuZGVmYXVsdFBhZ2VTaXplID0gdGhpcy5nZXRQYWdlU2l6ZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIGVycm9yIHRvIGV2ZW50IGVtaXR0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuZXJyb3JTdWJqZWN0XG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25FcnJvci5lbWl0KHZhbHVlKSkpO1xuXG4gICAgLy8gUHJvcGFnYXRlIGRpcnR5IHRvIGV2ZW50IGVtaXR0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuZGlydHlTdWJqZWN0XG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25EaXJ0eS5lbWl0KHZhbHVlKSkpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHJvdyBkaXJ0eSBzdGF0ZSB0byB0YWJsZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93XG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcihyb3cgPT4gcm93Py52YWxpZGF0b3IgJiYgdHJ1ZSksXG4gICAgICAgICAgbWVyZ2VNYXAocm93ID0+IHJvdy52YWxpZGF0b3IudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKHJvdyA9PiByb3cuZGlydHkpLFxuICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgICAvL3RhcCgoKSA9PiBjb25zb2xlLmRlYnVnKFwiUHJvcGFnYXRlIHJvdydzIGRpcnR5IHRvIHRhYmxlLi4uXCIpKVxuXG4gICAgICAgICAgICAgIC8vIFN0b3AgaWYgbmV4dCBhbm90aGVyIHJvdywgb3IgZGVzdHJveWluZ1xuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vblN0YXJ0RWRpdGluZ1JvdyksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0KVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubWFya0FzRGlydHkoKSlcbiAgICApO1xuXG4gICAgLy8gQ2FsbCBkYXRhc291cmNlIHJlZnJlc2gsIG9uIGVhY2ggcmVmcmVzaCBldmVudHNcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblJlZnJlc2hcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoPGFueSwgYW55PigodGhpcy5hdXRvTG9hZCA/IHt9IDogJ3NraXAnKSBhcyBhbnkpLFxuICAgICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAgIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgICBpZiAoZXZlbnQgPT09ICdza2lwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghdGhpcy5fZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFNraXBwaW5nIGRhdGEgbG9hZDogbm8gZGF0YVNvdXJjZSBkZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQ2FsbGluZyBkYXRhU291cmNlLndhdGNoQWxsKCkuLi4nKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2Uud2F0Y2hBbGwoXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0QWN0aXZlLFxuICAgICAgICAgICAgICAgIHRoaXMuc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLnNldEVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7IC8vIENvbnRpbnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLnVwZGF0ZVZpZXcocmVzIGFzIExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQpKSk7XG5cbiAgICAvLyBMaXN0ZW4gZGF0YVNvdXJjZSBsb2FkaW5nIGV2ZW50c1xuICAgIGlmICh0aGlzLl9kYXRhU291cmNlKSB0aGlzLmxpc3RlbkRhdGFzb3VyY2VMb2FkaW5nKHRoaXMuX2RhdGFTb3VyY2UpO1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gRGV0ZWN0IHdoZW4gcGFyZW50IG5nT25Jbml0KCkgbm90IGNhbGxcbiAgICBpZiAodGhpcy5kZWJ1ZyAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKSBjb25zb2xlLndhcm4oYFt0YWJsZV0gTWlzc2luZyAnZGlzcGxheWVkQ29sdW1ucycuIERpZCB5b3UgY2FsbCBwYXJlbnQgbmdPbkluaXQoKSBpbiBjb21wb25lbnQgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9ID9gKTtcblxuICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBzb3J0IGFuZCBwYWdpbmF0b3IgZXZlbnRzXG4gICAgLy8gbm9pbnNwZWN0aW9uIEpTSWdub3JlZFByb21pc2VGcm9tQ2FsbFxuICAgIHRoaXMubGlzdGVuU29ydEFuZFBhZ2luYXRpb25FdmVudHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgLy8gVW5zdWJzY3JpYmUgY29sdW1uIHZhbHVlIGNoYW5nZXNcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcykuZm9yRWFjaChjb2wgPT4gdGhpcy5zdG9wQ2VsbFZhbHVlQ2hhbmdlcyhjb2wsIHRydWUpKTtcbiAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcyA9IHt9O1xuXG4gICAgdGhpcy5yZWFkeVN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhyZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsIG9wdHM/OiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcmVzKSByZXR1cm47IC8vIFNraXAgKGUuZyBlcnJvcilcbiAgICBpZiAocmVzICYmIHJlcy5kYXRhKSB7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IHJlcy5kYXRhLmxlbmd0aDtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IGlzTm90TmlsKHJlcy50b3RhbCkgPyByZXMudG90YWwgOiAoKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqICh0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRSkgfHwgMCkgKyB0aGlzLnZpc2libGVSb3dDb3VudCk7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSAke3Jlcy5kYXRhLmxlbmd0aH0gcm93cyBsb2FkZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBOTyByb3dzIGxvYWRlZCcpO1xuICAgICAgdGhpcy50b3RhbFJvd0NvdW50ID0gMDtcbiAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc1VudG91Y2hlZCh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0RGF0YXNvdXJjZShkYXRhc291cmNlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZSkgdGhyb3cgbmV3IEVycm9yKCdbdGFibGVdIGRhdGFTb3VyY2UgYWxyZWFkeSBzZXQgIScpO1xuICAgIGlmIChkYXRhc291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UgIT09IGRhdGFzb3VyY2UpIHtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhc291cmNlO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB0aGlzLmxpc3RlbkRhdGFzb3VyY2VMb2FkaW5nKGRhdGFzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RGF0YVNvdXJjZSgpIHtcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgLy90aGlzLl9kYXRhU291cmNlPy5jbG9zZSgpO1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBudWxsO1xuICB9XG5cbiAgYWRkQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5hZGRDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHJlbW92ZUNvbHVtbkRlZihjb2x1bW46IENka0NvbHVtbkRlZikge1xuICAgIHRoaXMudGFibGUucmVtb3ZlQ29sdW1uRGVmKGNvbHVtbik7XG4gIH1cblxuICBzZXRGaWx0ZXIoZmlsdGVyOiBGLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyB9KSB7XG4gICAgb3B0cyA9IG9wdHMgfHwgeyBlbWl0RXZlbnQ6IHRydWUgfTtcblxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVGaWx0ZXIpIHtcblxuICAgICAgLy8gaWYgYSBkaXJ0eSB0YWJsZSBpcyB0byBiZSBzYXZlZCBiZWZvcmUgZmlsdGVyXG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuXG4gICAgICAgIC8vIFNhdmVcbiAgICAgICAgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdmaWx0ZXInKS50aGVuKHNhdmVkID0+IHtcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb25seSBpZiB1c2VyIGRpZG4ndCBjYW5jZWwgdGhlIHNhdmUgb3IgdGhlIHNhdmUgaXMgb2tcbiAgICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgb24gbm9uLWRpcnR5IHRhYmxlXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGFwcGx5IGZpbHRlciBkaXJlY3RseVxuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1BbmRBZGQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG4gICAgLy8gQWRkIHJvd1xuICAgIHJldHVybiB0aGlzLmFkZFJvdyhldmVudCk7XG4gIH1cblxuICBjb25maXJtQW5kQmFja3dhcmQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KTogYm9vbGVhbiB7XG5cbiAgICAvLyBEZWxldGluZyBlZGl0ZWQgcm93LCBpZiBlbXB0eSBhbmQgbm90IGRpcnR5XG4gICAgY29uc3QgcHJldmlvdXNSb3cgPSB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAocHJldmlvdXNSb3cgJiYgKHByZXZpb3VzUm93LmlkID09PSAtMSkgJiYgcHJldmlvdXNSb3cudmFsaWRhdG9yPy5pbnZhbGlkICYmICEocHJldmlvdXNSb3cudmFsaWRhdG9yPy5kaXJ0eSkpIHtcbiAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCBwcmV2aW91c1Jvdyk7XG5cbiAgICAgIC8vIFdhaXQgZGVsZXRpb24gaXMgZG9uZSwgdGhlbiBlZGl0IHByZXZpb3VzIHJvdyAoYnkgaWQsIGJlY2F1c2Ugb2YgcmVsb2FkaW5nKVxuICAgICAgdGhpcy53YWl0SWRsZSgpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIHJvdy5pZCwge2ZvY3VzQ29sdW1uOiB0aGlzLmxhc3RVc2VyQ29sdW1ufSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRWRpdCBwcmV2aW91cyByb3dcbiAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywge2ZvY3VzQ29sdW1uOiB0aGlzLmxhc3RVc2VyQ29sdW1ufSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25maXJtQW5kRm9yd2FyZChldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHJldHVybiBmYWxzZTtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICAvLyBJZiBwZW5kaW5nOiBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uLCB0aGVuIGxvb3BcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgIHJldHVybiBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyhyb3cudmFsaWRhdG9yKS50aGVuKCgpID0+IHRoaXMuY29uZmlybUFuZEZvcndhcmQoZXZlbnQsIHJvdykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICB0aGlzLmVkaXRSb3dCeUlkKGV2ZW50LCByb3cuaWQgKyAxLCB7Zm9jdXNDb2x1bW46IHRoaXMuZmlyc3RVc2VyQ29sdW1ufSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybSB0aGUgY3JlYXRpb24gb2YgdGhlIGdpdmVuIHJvdywgb3IgaWYgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudGx5IGVkaXRlZCByb3dcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIGNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybiB0cnVlOyAvLyBubyByb3cgdG8gY29uZmlybVxuXG4gICAgLy8gU3RvcCBldmVudFxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgLy8gVE9ETzogYWRkIGF3YWl0ID9cbiAgICBjb25zdCBjb25maXJtZWQgPSByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIC8vIElmIGVkaXQgZmluaXNoZWQsIGZvcmdldCBlZGl0ZWQgcm93XG4gICAgICBpZiAocm93ID09PSB0aGlzLmVkaXRlZFJvdykge1xuICAgICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayB0YWJsZSBhcyBkaXJ0eSAoaWYgcm93IGlzIGRpcnR5KVxuICAgICAgaWYgKHJvdy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKiBiZWNhdXNlIG9mIHJlc2V0RXJyb3IoKSAqLyB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgZXJyb3JcbiAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBjb25maXJtIGV2ZW50XG4gICAgICB0aGlzLm9uQ29uZmlybUVkaXRDcmVhdGVSb3cubmV4dChyb3cpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiB1c2luZyBhc3luYyBpc1ZhbGlkKCkgZnVuY3Rpb25cbiAgICAgIGlmIChyb3cudmFsaWRhdG9yLnBlbmRpbmcpIHtcbiAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcikudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBOT1QgY29uZmlybWVkID0gcm93IGhhcyBlcnJvclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIENhbm5vdCBjb25maXJtIHJvdywgYmVjYXVzZSBpbnZhbGlkJyk7XG4gICAgICAgIEFwcEZvcm1VdGlscy5sb2dGb3JtRXJyb3JzKHJvdy52YWxpZGF0b3IsICdbdGFibGVdICcpO1xuICAgICAgfVxuXG4gICAgICAvLyBmaXg6IG1hcmsgYWxsIGNvbnRyb2xzIGFzIHRvdWNoZWQgdG8gc2hvdyBlcnJvcnNcbiAgICAgIHJvdy52YWxpZGF0b3IubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICAvLyBDb21wdXRlIHJvdyBlcnJvciwgYW5kIHByb3BhZ2F0ZSB0byB0YWJsZSdzIGVycm9yXG4gICAgICBpZiAodGhpcy5wcm9wYWdhdGVSb3dFcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0Um93RXJyb3Iocm93KTtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm90IGNvbmZpcm1lZFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNhbmNlbE9yRGVsZXRlKGV2ZW50OiBFdmVudCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsga2VlcEVkaXRpbmc/OiBib29sZWFuOyB9KSB7XG4gICAgLy8gRGVsZXRlIG5ldyByb3dcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgfVxuICAgIC8vIERlbGV0ZSBleGlzdGluZyAoYnV0IG5vdCBlZGl0aW5nKSByb3dcbiAgICBlbHNlIGlmICghcm93LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICAgIC8vIENhbmNlbCBleGlzdGluZyAoYW5kIGVkaXRpbmcpIHJvd1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRSb3coZXZlbnQ/OiBFdmVudCwgaW5zZXJ0QXQ/OiBudW1iZXIsIG9wdHM/OiB7Zm9jdXNDb2x1bW4/OiBzdHJpbmc7IGVkaXRpbmc/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBc2tpbmcgZm9yIG5ldyByb3cuLi4nKTtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSBtb2RhbCBpZiBpbmxpbmUgZWRpdGlvbiBpcyBkaXNhYmxlZFxuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5OZXdSb3dEZXRhaWwoZXZlbnQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyByb3dcbiAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmFkZFJvd1RvVGFibGUoaW5zZXJ0QXQsIG9wdHMpO1xuICAgIHJldHVybiAhIXJvdztcbiAgfVxuXG4gIGFzeW5jIHNhdmUob3B0cz86IHsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBvcHRzID0ge1xuICAgICAga2VlcEVkaXRpbmc6IHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSxcbiAgICAgIC4uLm9wdHNcbiAgICB9O1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknfTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIC8vIEtlZXAgZWRpdGVkIHJvdyBpZCAoc2hvdWxkIGJlIGRvbmUgQkVGT1JFIGNvbmZpcm1FZGl0Q3JlYXRlKCkgKVxuICAgIHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkID0gb3B0cy5rZWVwRWRpdGluZyA/ICgodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy5pZCA6IHVuZGVmaW5lZCkgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdz8uaWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZXZpb3VzbHlFZGl0ZWREYXRhID0gb3B0cy5rZWVwRWRpdGluZyA/IChpc05vdE5pbCh0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCkgJiYgdGhpcy5lZGl0ZWRSb3c/LmN1cnJlbnREYXRhIHx8IHRoaXMuc2luZ2xlU2VsZWN0ZWRSb3c/LmN1cnJlbnREYXRhKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5UQUJMRV9JTlZBTElEX1JPV19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SJ307XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBzYXZpbmdcbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuXG4gICAgdHJ5IHtcblxuICAgICAgLy8gQ2FsbGluZyBzZXJ2aWNlIHNhdmUoKVxuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQ2FsbGluZyBkYXRhU291cmNlLnNhdmUoKS4uLicpO1xuICAgICAgY29uc3QgaXNPSyA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2Uuc2F2ZSgpO1xuXG4gICAgICBpZiAoaXNPSykgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICByZXR1cm4gaXNPSztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcblxuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyByb3dcbiAgICAgIGlmIChpc05vdE5pbCh0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkT3JEYXRhKHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkLCBwcmV2aW91c2x5RWRpdGVkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKGV2ZW50PzogRXZlbnQsIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsgfSkge1xuXG4gICAgLy8gQ2hlY2sgY29uZmlybWF0aW9uXG4gICAgaWYgKCghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkgJiYgdGhpcy5kaXJ0eSAmJiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsIHx8IHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLm9ic2VydmVycy5sZW5ndGggPiAwKSkge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jYW5DYW5jZWxSb3dzKCkudGhlbihjb25maXJtID0+IHtcbiAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbChudWxsLCB7aW50ZXJhY3RpdmU6IGZhbHNlfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVSb3coZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzoge1xuICAgIHNraXBQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gIH0pIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICByb3cgPSByb3cgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1JvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZShyb3cuaWQgKyAxKTtcbiAgICBpZiAoIW5ld1JvdykgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIG5ldyByb3cgdG8gdGFibGUnKTtcbiAgICBjb25zdCBqc29uID0gey4uLnJvdy5jdXJyZW50RGF0YSwgaWQ6IG51bGx9O1xuXG4gICAgLy8gUmVzZXQgc29tZSBwcm9wZXJ0aWVzIChlLmcuIHJhbmtPcmRlciwgZXRjKVxuICAgIGlmIChvcHRzICYmIG9wdHMuc2tpcFByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXdSb3cuY3VycmVudERhdGE7XG4gICAgICBvcHRzLnNraXBQcm9wZXJ0aWVzLmZvckVhY2goa2V5ID0+IGpzb25ba2V5XSA9IG5ld0RhdGFba2V5XSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Jvdy52YWxpZGF0b3IpIHtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZShqc29uKTtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IubWFya0FzRGlydHkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5ld1Jvdy5jdXJyZW50RGF0YT8uZnJvbU9iamVjdCkge1xuICAgICAgICBuZXdSb3cuY3VycmVudERhdGEuZnJvbU9iamVjdChqc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YSA9IGpzb247XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0XG4gICAgdGhpcy5jbGlja1Jvdyh1bmRlZmluZWQsIG5ld1Jvdyk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdpc0FsbFNlbGVjdGVkLiBsZW5ndGhzJywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy52aXNpYmxlUm93Q291bnQ7XG4gIH1cblxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBhc3luYyBtYXN0ZXJUb2dnbGUoKSB7XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgICByb3dzLmZvckVhY2gocm93ID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZWxlY3Rpb24oZXZlbnQ6IEV2ZW50LCBvcHRzPzoge2ludGVyYWN0aXZlPzogYm9vbGVhbn0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gYXdhaXQgdGhpcy5kZWxldGVSb3dzKGV2ZW50LCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCwgb3B0cyk7XG4gICAgaWYgKGRlbGV0ZUNvdW50ID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBvcHRzIFVzZSBpbnRlcmFjdGl2ZT1mYWxzZSB0byBhdm9pZCB1c2VyIGludGVyYWN0aW9uIChlLmcuIHVzZXIgY29uZmlybWF0aW9uKVxuICAgKiAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93KGV2ZW50OiBFdmVudHxudWxsLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHtpbnRlcmFjdGl2ZT86IGJvb2xlYW47fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdyk7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSBhd2FpdCB0aGlzLmRlbGV0ZVJvd3MoZXZlbnQsIFtyb3ddLCBvcHRzKTtcblxuICAgIC8vIFVuc2VsZWN0IHRoZSBkZWxldGVkIHJvd1xuICAgIGlmIChkZWxldGVDb3VudCAmJiBpc1NlbGVjdGVkKSB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xuXG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50ID09PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93c1xuICAgKiBAcGFyYW0gb3B0cyBVc2UgaW50ZXJhY3RpdmU9ZmFsc2UgdG8gYXZvaWQgdXNlciBpbnRlcmFjdGlvbiAoZS5nLiB1c2VyIGNvbmZpcm1hdGlvbilcbiAgICogICAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93cyhldmVudDogRXZlbnR8bnVsbCwgcm93czogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7aW50ZXJhY3RpdmU/OiBib29sZWFuO30pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknfTtcbiAgICB9XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gMDsgLy8gU0tpcFxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkIHx8IGlzRW1wdHlBcnJheShyb3dzKSkgcmV0dXJuIDA7IC8vIFNraXAgaXMgZGlzYWJsZWQsIG9yIG5vIHJvd3MgdG8gZGVsZXRlXG5cbiAgICBpZiAodGhpcy5sb2FkaW5nICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW2FwcC10YWJsZV0gU2tpcCBkZWxldGVSb3dzKCkgYmVjYXVzZSB0YWJsZSBpcyBidXN5IChsb2FkaW5nKS4gVXNlIG9wdHMuaW50ZXJhY3RpdmUgPSBmYWxzZSB0byBmb3JjZSBkZWxldGlvbicpO1xuICAgICAgcmV0dXJuIDA7IC8vIFNraXAgaWYgbG9hZGluZ1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0byBrZWVwIG5ld2x5IGNyZWF0ZWQgcm93XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93Py5pZCA9PT0gLTEgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyAmJiAhcm93cy5pbmNsdWRlcyh0aGlzLmVkaXRlZFJvdykpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IHRoaXMuY29uZmlybUVkaXRDcmVhdGUoKTtcbiAgICAgIGlmICghY29uZmlybWVkKSByZXR1cm4gMDsgLy8gQ2Fubm90IGRlbGV0ZSAoZS5nLiBlZGl0ZWQgcm93IGlzIGludmFsaWQpXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgY2FuIGRlbGV0ZVxuICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IHRoaXMuY2FuRGVsZXRlUm93cyhyb3dzLCBvcHRzKTtcbiAgICBpZiAoIWNhbkRlbGV0ZSkgcmV0dXJuIDA7IC8vIENhbm5vdCBkZWxldGVcblxuICAgIC8vIFJldmVyc2Ugcm93IG9yZGVyIChvbiBhIGNvcHkpXG4gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQsIG5lZWQgYmVjYXVzZSByb3cuZGVsZXRlKCkgaGFzIGFzeW5jIGV4ZWN1dGlvblxuICAgIC8vIGFuZCBpbmRleCBjYWNoZSBpcyB1cGRhdGVkIHdpdGggYSBkZWxheVxuICAgIGxldCB0ZW1wUm93cyA9IHJvd3Muc2xpY2UoKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaWQgPiBiLmlkID8gLTEgOiAxKTtcblxuICAgIGxldCBkZWxldGVkUm93czogVGFibGVFbGVtZW50PFQ+W10gPSBbXTtcblxuICAgIC8vIElmIGRhdGEgbmVlZCB0byBiZSBzYXZlZCBmaXJzdFxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVEZWxldGUpIHtcbiAgICAgIC8vIEV4Y2x1ZGUgaW52YWxpZCByb3dzIChiZWNhdXNlIG9mIHNhdmUoKSB3aWxsIGZhaWwsIHdoZW4gZXhpc3RzIHNvbWUgaW52YWxpZCByb3dzKVxuICAgICAgdGVtcFJvd3MgPSB0ZW1wUm93cy5maWx0ZXIocm93ID0+IHtcbiAgICAgICAgLy8gRGVsZXRlIHRoZSByb3cgOlxuICAgICAgICAvLyAtIGlmIG5ld2x5IGNyZWF0ZWQgcm93IChpZCA9IC0xKSxcbiAgICAgICAgLy8gLSBvciBpZiBpbnZhbGlkIGFuZCBub3QgZWRpdGluZyAoPSBub3QgY2FuY2VsbGFibGUpXG4gICAgICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICghcm93LmVkaXRpbmcgJiYgcm93LmludmFsaWQgLypkbyBub3QgdXNlICF2YWxpZCBiZWNhdXNlIGlmIHJvdyBpcyBkaXNhYmxlZCwgaXQgd2lsbCBiZSBhbHdheXMgIXZhbGlkICovKSkge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIERlbGV0ZSByb3cgIyR7cm93LmlkfWApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgICAgICAgcm93LmRlbGV0ZSgpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgICAgICAgZGVsZXRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgICAgIGlmICh0aGlzLmVkaXRlZFJvdyA9PT0gcm93KSB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEV4Y2x1ZGUgZnJvbSB0aGUgbGlzdCB0byBkZWxldGUgdXNpbmcgdGhlIHNlcnZpY2VcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW5jZWwgdGhlIHJvdyAoYW5kIG1hcmsgYXMgcHJpc3RpbmUpLCB3aGVuIG5vdCB2YWxpZCBidXQgaW4gZWRpdGlvblxuICAgICAgICBlbHNlIGlmIChyb3cuZWRpdGluZyAmJiAhcm93LnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcbiAgICAgICAgICByb3cuY2FuY2VsKCk7XG4gICAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmUgKGlmIHBvc3NpYmxlKVxuICAgICAgICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHJvdywge2VtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIC8qYXZvaWQgcHJvcGFnYXRpb24gdG8gdGFibGUqL30pO1xuICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIHRoZSByb3cuIHRoZSByb3cgd2lsbCBiZSBkZWxldGVkIGFmdGVyIHRoZSBzYXZlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBcHBseSBzYXZlLCBvbmx5IGlmIHRoZXJlIGlzIHN0aWxsIHNvbWUgcm93cyB0byBkZWxldGVcbiAgICAgIC8vIFdBUk46IElmIG5vIG1vcmUgcm93cyAoZS5nLiBiZWNhdXNlIGFsbCBoYXMgYmVlbiBjYW5jZWxsZWQpIHRoZW4gY29udGludWUgYW55d2F5IHRvIGNsZWFyIGVkaXRlZFJvdyBhbmQgc2VsZWN0aW9uIChpc3N1ZSBJTUFHSU5FLTY2OSlcbiAgICAgIGlmIChkZWxldGVkUm93cy5sZW5ndGggfHwgdGVtcFJvd3MubGVuZ3RoKSB7XG5cbiAgICAgICAgLy8gU2F2ZSBkYXRhIChlLmcuIHdoZW4gdXNpbmcgbWVtb3J5IHNlcnZpY2UpXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdkZWxldGUnKTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIC8vIFN0b3AgaWYgc2F2ZSBjYW5jZWxsZWQgb3Igc2F2ZSBmYWlsZWRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuXG4gICAgICAvLyBBcHBseSBkZWxldGlvbiBvbiBkYXRhc291cmNlXG4gICAgICAvLyBJZiBubyBtb3JlIHJvd3MgdG8gZGVsZXRlLCBjb250aW51ZSBhbnl3YXkgdG8gY2xlYXIgZWRpdGVkUm93IGFuZCBzZWxlY3Rpb24gKGlzc3VlIElNQUdJTkUtNjY5KVxuICAgICAgaWYgKHRlbXBSb3dzLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBEZWxldGUgJHt0ZW1wUm93cy5sZW5ndGh9IHJvd3MuLi5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5kZWxldGVBbGwodGVtcFJvd3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBETyBub3QgdXBkYXRlIG1hbnVhbGx5LCBiZWNhdXNlIHdhdGNoQUxsKCkuc3Vic2NyaWJlKCkgd2lsbCB1cGRhdGUgdGhpcyBjb3VudFxuICAgICAgLy90aGlzLnRvdGFsUm93Q291bnQgLT0gZGVsZXRlQ291bnQ7XG4gICAgICAvL3RoaXMudmlzaWJsZVJvd0NvdW50IC09IGRlbGV0ZUNvdW50O1xuXG4gICAgICAvLyBEZXNlbGVjdCBkZWxldGVkIHJvd3NcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJvd3MpO1xuXG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubWFya0FzRGlydHkoe2VtaXRFdmVudDogZmFsc2UgLyptYXJrRm9yQ2hlY2soKSBpcyBjYWxsZWQganVzdCBhZnRlciovfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICB0aGlzLm9uQWZ0ZXJEZWxldGVkUm93cy5uZXh0KHJvd3MpO1xuXG4gICAgICByZXR1cm4gcm93cy5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbGVjdFJvd0J5SWQoaWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy53YWl0SWRsZSgpO1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3coaWQpO1xuICAgIGlmICghcm93KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY2xpY2tSb3cobnVsbCwgcm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IHJvdyBieSBkYXRhLiBXaWxsIHVzZSBlcXVhbHMoKSB0byBmaW5kIHNhbWUgcm93J3MgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgYXN5bmMgc2VsZWN0Um93QnlEYXRhKGRhdGE6IFQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhU291cmNlLmdldFJvd3MoKVxuICAgICAgLmZpbmQocm93ID0+IHRoaXMuZXF1YWxzKHJvdy5jdXJyZW50RGF0YSwgZGF0YSkpO1xuICAgIGlmICghcm93KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY2xpY2tSb3cobnVsbCwgcm93KTtcbiAgfVxuXG4gIGNsaWNrUm93KGV2ZW50OiBFdmVudHx1bmRlZmluZWQsIHJvdzogVGFibGVFbGVtZW50PFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgLy8gV2FpdCB3aGlsZSBsb2FkaW5nLCBhbmQgbG9vcFxuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoXCJbdGFibGVdIFdhaXRpbmcgYmVmb3JlIGFwcGx5IGNsaWNrUm93KCkgKGRhdGFzb3VyY2UgaXMgYnVzeSkuLi5cIik7XG4gICAgICB0aGlzLndhaXRJZGxlKHt0aW1lb3V0OiAyMDAwfSkudGhlbigoKSA9PiB0aGlzLmNsaWNrUm93KGV2ZW50LCByb3cpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlt0YWJsZV0gRGV0ZWN0IGNsaWNrIG9uIHJvd1wiKTtcblxuICAgIC8vIENhbmNlbGxlZCBieSBldmVudFxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoXCJbdGFibGVdIGNsaWNrUm93IGV2ZW50IGlzIGRlZmF1bHRQcmV2ZW50ZWRcIik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWxyZWFkeSBpbiBlZGl0aW9uXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEgfHwgcm93LmVkaXRpbmcpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiW3RhYmxlXSBSb3cgYWxyZWFkeSBlZGl0aW5nLiBTa2lwIGNsaWNrUm93IGV2ZW50XCIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gT3BlbiB0aGUgZGV0YWlsIHBhZ2UgKGlmIG5vdCBpbmxpbmUgZWRpdGluZylcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikge1xuXG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgICB0aGlzLm9wZW5Sb3cocm93LmN1cnJlbnREYXRhLmlkLCByb3cpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMubWFya0FzTG9hZGVkKCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLm1hcmtBc0xvYWRlZCgpKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgZWRpdGluZyByb3dcbiAgICByZXR1cm4gdGhpcy5lZGl0Um93KGV2ZW50LCByb3csIHtmb2N1c0NvbHVtbjogdW5kZWZpbmVkIC8qZm9yY2UgdG8gdXNlIHRoZSBjbGljayB0YXJnZXQqL30pO1xuICB9XG5cbiAgbW92ZVJvdyhpZDogbnVtYmVyLCBkaXJlY3Rpb246IG51bWJlcikge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5tb3ZlKGlkLCBkaXJlY3Rpb24pO1xuICB9XG5cbiAgcmVhZHkob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHdhaXRGb3JUcnVlKHRoaXMucmVhZHlTdWJqZWN0LCBvcHRzKTtcbiAgfVxuXG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3YWl0Rm9yRmFsc2UodGhpcy5sb2FkaW5nU3ViamVjdCwgb3B0cyk7XG4gIH1cblxuICBhc3luYyBvcGVuU2VsZWN0Q29sdW1uc01vZGFsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGFueT4ge1xuXG4gICAgLy8gQ29weSBjdXJyZW50IGNvbHVtbnMgKGRlZXAgY29weSlcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDdXJyZW50Q29sdW1ucygpO1xuXG4gICAgY29uc3QgaGFzVG9wTW9kYWwgPSAhIShhd2FpdCB0aGlzLm1vZGFsQ3RybC5nZXRUb3AoKSk7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUYWJsZVNlbGVjdENvbHVtbnNDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge2NvbHVtbnN9LFxuICAgICAgY3NzQ2xhc3M6IGhhc1RvcE1vZGFsICYmICdzdGFjay1tb2RhbCdcbiAgICB9KTtcblxuICAgIC8vIE9wZW4gdGhlIG1vZGFsXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgLy8gT24gZGlzbWlzc1xuICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IG1vZGFsLm9uRGlkRGlzbWlzcygpO1xuICAgIGlmICghZGF0YSkgcmV0dXJuOyAvLyBDQU5DRUxMRURcblxuICAgIC8vIEFwcGx5IGNvbHVtbnNcbiAgICBjb25zdCB1c2VyQ29sdW1ucyA9IChkYXRhIHx8IFtdKS5maWx0ZXIoYyA9PiBjLmNhbkhpZGUgPT09IGZhbHNlIHx8IGMudmlzaWJsZSkubWFwKGMgPT4gYy5uYW1lKSB8fCBbXTtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmNvbmNhdCh1c2VyQ29sdW1ucykuY29uY2F0KFJFU0VSVkVEX0VORF9DT0xVTU5TKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gVXBkYXRlIHVzZXIgc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZyh0aGlzLnNldHRpbmdzSWQsIHVzZXJDb2x1bW5zLCBTRVRUSU5HU19ESVNQTEFZX0NPTFVNTlMpO1xuICB9XG5cbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfVxuXG4gIGRvUmVmcmVzaChldmVudD86IENvbXBsZXRhYmxlRXZlbnQpIHtcbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KGV2ZW50KTtcblxuICAgIC8vIFdoZW4gdGFyZ2V0IHdhaXQgZm9yIGEgY29tcGxldGUgKGUuZy4gSW9uUmVmcmVzaGVyKVxuICAgIGlmIChldmVudD8udGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5jb21wbGV0ZSkge1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRDdXJyZW50Q29sdW1ucygpOiBDb2x1bW5JdGVtW10ge1xuICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuc2xpY2UoUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5sZW5ndGgpXG4gICAgICAgIC5maWx0ZXIobmFtZSA9PiB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKSA9PT0gLTEpO1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNcbiAgICAgICAgLmNvbmNhdChoaWRkZW5Db2x1bW5zKVxuICAgICAgICAuZmlsdGVyKG5hbWUgPT4gIVJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMobmFtZSkgJiYgIVJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpXG4gICAgICAgICAgICAmJiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMobmFtZSkpXG4gICAgICAgIC5tYXAobmFtZSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUobmFtZSksXG4gICAgICAgICAgdmlzaWJsZTogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YobmFtZSkgIT09IC0xLFxuICAgICAgICAgIGNhbkhpZGU6IHRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuaW5kZXhPZihuYW1lKSA9PT0gLTFcbiAgICAgICAgfSkpO1xuICB9XG5cbiAgZXNjYXBlRWRpdGluZ1JvdyhldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5lZGl0aW5nKSByZXR1cm47XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW2FwcC10YWJsZV0gQ2FuY2VsIHRoZSByb3cgKGtleWRvd24uZXNjYXBlKScpO1xuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICAvLyBBdm9pZCB0byBjYW5jZWwgdGhlIGVkaXRvclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8vIElmIG5ldyByb3cgKG5vIGlkKVxuICAgIGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgICAvLyBJZiBwZW5kaW5nOiBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uLCB0aGVuIGxvb3BcbiAgICAgICAgaWYgKHJvdy52YWxpZGF0b3IucGVuZGluZykge1xuICAgICAgICAgIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IpLnRoZW4oKCkgPT4gdGhpcy5lc2NhcGVFZGl0aW5nUm93KGV2ZW50LCByb3cpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSb3cgaXMgaW52YWxpZDogZGVsZXRlIHRoZSByb3dcbiAgICAgICAgaWYgKHJvdy52YWxpZGF0b3IuaW52YWxpZCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCByb3cpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgcm93IGV4aXN0cyAoaGFzIGFuIGlkKVxuICAgIGVsc2Uge1xuICAgICAgLy8gbmVlZCB0byBjYWxsIGNhbmNlbCBmdW5jdGlvbiAoaWYgY29uZmlybWF0aW9uIHdpbGwgYmUgY2FsbCBiZWZvcmUgYmVmb3JlKVxuICAgICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCkge1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nUm93KGV2ZW50LCByb3csIHtrZWVwRWRpdGluZzogZmFsc2V9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIHRyeSB0byBjb25maXJtIHRoZSByb3dcbiAgICB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpO1xuICB9XG5cbiAgdHJhbnNsYXRlQ29udHJvbFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBDYW4gYmUgb3ZlcnJpZGUgYnkgc3ViY2xhc3NlcywgdG8gcmVzb2x2ZSBhbGwgZmllbGQgbmFtZVxuXG4gICAgLy8gVXNlIGNvbHVtbnMga2V5LCBoYXMgZGVmYXVsdCBuYW1lXG4gICAgY29uc3QgaTE4bkNvbHVtbktleSA9IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlPy5pbnN0YW50KGkxOG5Db2x1bW5LZXkpIHx8IGkxOG5Db2x1bW5LZXk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cblxuICBwcm90ZWN0ZWQgZWRpdFJvdyhldmVudDogRXZlbnR8dW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHtmb2N1c0NvbHVtbj86IHN0cmluZ30pOiBib29sZWFuIHtcblxuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCAhdGhpcy5pbmxpbmVFZGl0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93ID09PSByb3cpIHJldHVybiB0cnVlOyAvLyBBbHJlYWR5IHRoZSBlZGl0ZWQgcm93XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghcm93LmVkaXRpbmcgJiYgIXRoaXMubG9hZGluZykge1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHMgJiYgb3B0cy5mb2N1c0NvbHVtbiB8fCB0aGlzLmZvY3VzQ29sdW1uO1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zdGFydEVkaXQocm93KTtcbiAgICB9XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSByb3c7XG4gICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5lbWl0KHJvdyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHNlbGVjdCByb3csIGJ5IHJvdy5pZCwgb3IgYnkgZGF0YS4gV0lsbCB1c2UgRW50aXR5VXRpbHMuZXF1YWxzKClcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzZWxlY3RSb3dCeUlkT3JEYXRhKGlkOiBudW1iZXIsIGRhdGE/OiBUKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICB0cnkge1xuXG4gICAgICAvLyBTZWxlY3QgYnkgcm93IGlkIChpZiBOT1QgYSBuZXcgcm93KVxuICAgICAgaWYgKGlzTm90TmlsKGlkKSB8fCBpZCAhPT0gLTEpIHtcbiAgICAgICAgZG9uZSA9IGF3YWl0IHRoaXMuc2VsZWN0Um93QnlJZChpZCk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IHJvdy5pZDogJywgaWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgYnkgZGF0YVxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgZG9uZSA9IGF3YWl0IHRoaXMuc2VsZWN0Um93QnlEYXRhKGRhdGEpO1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnNvbGUud2FybignW2FwcC10YWJsZV0gU2F2ZTogQ2Fubm90IHJlc2VsZWN0IHJvdyBieSBkYXRhOiAnLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjYXRjaChlcnIpIHtcbiAgICAgIC8vIExvZywgYnV0IGNvbnRpbnVlXG4gICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIHNlbGVjdGVkIHJvdyBpZiB1bmlxdWUgaW4gc2VsZWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNpbmdsZVNlbGVjdGVkUm93KCk6IFRhYmxlRWxlbWVudDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkPy5sZW5ndGggPT09IDEgPyB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFswXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5EZWxldGVSb3dzKHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW47IH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3Mub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MsICdjYW5EZWxldGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7cm93c31cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FuQ2FuY2VsUm93cyhyb3dzPzogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgLy8gR2V0IGRpcnR5IHJvd3NcbiAgICByb3dzID0gcm93cyB8fCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpLmZpbHRlcihyb3cgPT4gcm93LnZhbGlkYXRvcj8uZGlydHkpO1xuXG4gICAgaWYgKGlzRW1wdHlBcnJheShyb3dzKSkgcmV0dXJuIHRydWU7IC8vIE5vIGRpcnR5OiBPS1xuXG4gICAgLy8gQ2hlY2sgdXNpbmcgZW1pdHRlclxuICAgIGlmICh0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXNDYW5jZWwgPSBhd2FpdCBlbWl0UHJvbWlzZUV2ZW50KHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLCAnY2FuQ2FuY2VsJywge1xuICAgICAgICAgIGRldGFpbDoge3Jvd3N9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWlzQ2FuY2VsKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBjYW5jZWwgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0NhbmNlbENvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZUJlZm9yZUFjdGlvbihzYXZlQWN0aW9uOiBTYXZlQWN0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgaWYgKCF0aGlzLmRpcnR5KSB7XG4gICAgICAvLyBDb250aW51ZSB3aXRob3V0IHNhdmVcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBzYXZlOiBib29sZWFuO1xuICAgIHN3aXRjaCAoc2F2ZUFjdGlvbikge1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZURlbGV0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmaWx0ZXInOlxuICAgICAgICBzYXZlID0gdGhpcy5zYXZlQmVmb3JlRmlsdGVyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICBzYXZlID0gdGhpcy5zYXZlQmVmb3JlU29ydDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzYXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yXG4gICAgbGV0IGNvbmZpcm1lZCA9IHRydWU7XG5cbiAgICBpZiAoc2F2ZSkge1xuICAgICAgaWYgKHRoaXMub25CZWZvcmVTYXZlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFzayBjb25maXJtYXRpb25cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBlbWl0UHJvbWlzZUV2ZW50KHRoaXMub25CZWZvcmVTYXZlLCAnYmVmb3JlU2F2ZScsIHtcbiAgICAgICAgICAgIGRldGFpbDoge2FjdGlvbjogc2F2ZUFjdGlvbiwgdmFsaWQ6IHRoaXMudmFsaWR9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uZmlybWVkID0gcmVzLmNvbmZpcm1lZDtcbiAgICAgICAgICBzYXZlID0gcmVzLnNhdmU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIGlmIChzYXZlKSB7XG4gICAgICAgIC8vIFVzZXIgY29uZmlybWVkIHNhdmVcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpOyAvLyBSZXN0b3JlIGRpcnR5IGZsYWdcbiAgICAgICAgcmV0dXJuIHNhdmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7IC8vIE5vIHNhdmUgYnV0IGNvbnRpbnVlIGFjdGlvblxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWwgdGhlIGFjdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSByb3cgZGV0YWlsIHZpZXcuIEJ5IGRlZmF1bHQsIHdpbGwgdG8gb3BlbiByb3cgZGV0YWlsIHBhZ2UuXG4gICAqIENhbiBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzLCBCVVQgcHJlZmVyIHRvIHN1YnNjcmliZSBvbiBvbk9wZW5Sb3dcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9wZW5Sb3coaWQ6IElELCByb3c6IFRhYmxlRWxlbWVudDxUPik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmFsbG93Um93RGV0YWlsKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZyAmJiB0aGlzLmRpcnR5KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBPcGVuaW5nIHJvdyBkZXRhaWxzLCBidXQgdGFibGUgaGFzIHVuc2F2ZWQgY2hhbmdlcyEnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub25PcGVuUm93Lm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vbk9wZW5Sb3cuZW1pdChyb3cpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTm8gSUQgZGVmaW5lZDogdW5hYmxlIHRvIG9wZW4gZGV0YWlsc1xuICAgICAgaWYgKGlzTmlsKGlkKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gT3BlbmluZyByb3cgZGV0YWlscywgYnV0IGRhdGEgaGFzIG5vIGlkIScpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKGAke3RoaXMucm91dGVyLnVybH0vJHtpZC50b1N0cmluZygpfWAsIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHt9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9wZW5OZXdSb3dEZXRhaWwoZXZlbnQ/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuYWxsb3dSb3dEZXRhaWwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0aGlzLm9uTmV3Um93Lm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9uTmV3Um93LmVtaXQoZXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUZvcndhcmQoYCR7dGhpcy5yb3V0ZXIudXJsfS9uZXdgKTtcbiAgfVxuXG4gIC8vIGNhbiBiZSBvdmVycmlkZGVuIHRvIGFkZCBtb3JlIHJlcXVpcmVkIGNvbHVtbnNcbiAgcHJvdGVjdGVkIGdldFJlcXVpcmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gREVGQVVMVF9SRVFVSVJFRF9DT0xVTU5TO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFVzZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5nZXRQYWdlU2V0dGluZ3ModGhpcy5zZXR0aW5nc0lkLCBTRVRUSU5HU19ESVNQTEFZX0NPTFVNTlMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvcnRlZENvbHVtbigpOiBNYXRTb3J0YWJsZSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc2V0dGluZ3MuZ2V0UGFnZVNldHRpbmdzKHRoaXMuc2V0dGluZ3NJZCwgU0VUVElOR1NfU09SVEVEX0NPTFVNTik7XG4gICAgY29uc3QgcGFydHMgPSBkYXRhICYmIGRhdGEuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMgJiYgcGFydHMubGVuZ3RoID09PSAyICYmIHRoaXMuY29sdW1ucy5pbmNsdWRlcyhwYXJ0c1swXSkpIHtcbiAgICAgIHJldHVybiB7aWQ6IHBhcnRzWzBdLCBzdGFydDogcGFydHNbMV0gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVmYXVsdFNvcnRCeSkge1xuICAgICAgIHJldHVybiB7aWQ6IHRoaXMuZGVmYXVsdFNvcnRCeSwgc3RhcnQ6IHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gfHwgJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2V9O1xuICAgIH1cbiAgICByZXR1cm4ge2lkOiAnaWQnLCBzdGFydDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2V9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5nczxudW1iZXI+KHRoaXMuc2V0dGluZ3NJZCwgU0VUVElOR1NfUEFHRV9TSVpFKTtcbiAgICByZXR1cm4gcGFnZVNpemUgfHwgdGhpcy5kZWZhdWx0UGFnZVNpemU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGxldCB1c2VyQ29sdW1ucyA9IHRoaXMuZ2V0VXNlckNvbHVtbnMoKTtcblxuICAgIC8vIE5vIHVzZXIgb3ZlcnJpZGVcbiAgICBpZiAoIXVzZXJDb2x1bW5zKSB7XG4gICAgICAvLyBSZXR1cm4gZGVmYXVsdCwgd2l0aG91dCBjb2x1bW5zIHRvIGhpZGVcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZpeGVkIHN0YXJ0IGNvbHVtbnNcbiAgICBjb25zdCBmaXhlZFN0YXJ0Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFJlbW92ZSBlbmQgY29sdW1uc1xuICAgIGNvbnN0IGZpeGVkRW5kQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBSRVNFUlZFRF9FTkRfQ09MVU1OUy5pbmNsdWRlcyhjKSk7XG5cbiAgICAvLyBSZW1vdmUgZml4ZWQgY29sdW1ucyBmcm9tIHVzZXIgY29sdW1uc1xuICAgIHVzZXJDb2x1bW5zID0gdXNlckNvbHVtbnMuZmlsdGVyKGMgPT4gIWZpeGVkU3RhcnRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICFmaXhlZEVuZENvbHVtbnMuaW5jbHVkZXMoYykgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIEFkZCByZXF1aXJlZCBjb2x1bW5zIGlmIG1pc3NpbmdcbiAgICB1c2VyQ29sdW1ucy5wdXNoKC4uLnRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuZmlsdGVyKGMgPT4gIWZpeGVkU3RhcnRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICFmaXhlZEVuZENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIXVzZXJDb2x1bW5zLmluY2x1ZGVzKGMpKSk7XG5cbiAgICByZXR1cm4gZml4ZWRTdGFydENvbHVtbnNcbiAgICAgIC5jb25jYXQodXNlckNvbHVtbnMpXG4gICAgICAuY29uY2F0KGZpeGVkRW5kQ29sdW1ucylcbiAgICAgIC8vIFJlbW92ZSBjb2x1bW5zIHRvIGhpZGVcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+ICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZ2V0RGlzcGxheUNvbHVtbnMoKTtcbiAgICBpZiAoIXRoaXMubG9hZGluZykgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlclN1YnNjcmlwdGlvbihzdWI6IFN1YnNjcmlwdGlvbikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3ViKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZShzdWIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQXV0b2NvbXBsZXRlRmllbGQ8RSA9IGFueSwgRUYgPSBhbnk+KGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25zPzogTWF0QXV0b2NvbXBsZXRlRmllbGRBZGRPcHRpb25zPEUsIEVGPik6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPEUsIEVGPiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlci5hZGQoZmllbGROYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJMThuQ29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKHRoaXMuaTE4bkNvbHVtblByZWZpeCB8fCAnJykgKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGNvbHVtbk5hbWUpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUYWJsZUlkKCkge1xuICAgIGNvbnN0IGlkID0gdGhpcy5sb2NhdGlvbi5wYXRoKHRydWUpXG4gICAgICAucmVwbGFjZSgvWz9dLiokL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1xcL1tcXGRdKy9nLCAnX2lkJylcbiAgICAgICsgJ18nXG4gICAgICAvLyBHZXQgYSBjb21wb25lbnQgdW5pcXVlIG5hbWUgLSBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAxMTQ2ODIvaG93LXRvLWFjY2Vzcy1jb21wb25lbnRzLXVuaXF1ZS1lbmNhcHN1bGF0aW9uLWlkLWluLWFuZ3VsYXItOVxuICAgICAgKyAodGhpcy5jb25zdHJ1Y3RvclsnybVjbXAnXT8uaWQgfHwgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiW3RhYmxlXSBpZCA9IFwiICsgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRSb3dUb1RhYmxlKGluc2VydEF0PzogbnVtYmVyLCBvcHRzPzoge2ZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjsgfSk6IFByb21pc2U8VGFibGVFbGVtZW50PFQ+fHVuZGVmaW5lZD4ge1xuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gQ2Fubm90IGFkZCBuZXcgcm93LCBiZWNhdXNlIHRoZSBwcmV2aW91cyBlZGl0ZWQgcm93IGNhbm5vdCBiZSBjb25maXJtZWQnKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZWRpdGluZyA9IHRoaXMuaW5saW5lRWRpdGlvbiAmJiAoIW9wdHMgfHwgb3B0cy5lZGl0aW5nICE9PSBmYWxzZSk7IC8vIHRydWUgYnkgZGVmYXVsdCwgaWYgaW5saW5lRWRpdGlvblxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5jcmVhdGVOZXcoaW5zZXJ0QXQsIHtlZGl0aW5nfSk7XG4gICAgaWYgKCFyb3cpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgIC8vIFVwZGF0ZSBmb2N1c2VkIGNvbHVtblxuICAgICAgdGhpcy5mb2N1c0ZpcnN0Q29sdW1uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSBvcHRzPy5mb2N1c0NvbHVtbiB8fCB0aGlzLmZpcnN0VXNlckNvbHVtbjtcblxuICAgICAgLy8gRW1pdCBzdGFydCBlZGl0aW5nIGV2ZW50XG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IHJvdztcbiAgICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cuZW1pdChyb3cpO1xuICAgIH1cblxuICAgIHRoaXMudG90YWxSb3dDb3VudCsrO1xuICAgIHRoaXMudmlzaWJsZVJvd0NvdW50Kys7XG5cbiAgICB0aGlzLm1hcmtBc0RpcnR5KHtlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqL30pO1xuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQ2VsbFZhbHVlQ2hhbmdlcyhuYW1lOiBzdHJpbmcsIGZvcm1QYXRoPzogc3RyaW5nLCBlbWl0SW5pdGlhbFZhbHVlPzogYm9vbGVhbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgZm9ybVBhdGggPSBmb3JtUGF0aCB8fCBuYW1lO1xuICAgIGVtaXRJbml0aWFsVmFsdWUgPSBlbWl0SW5pdGlhbFZhbHVlIHx8IGZhbHNlO1xuICAgIGxldCBkZWYgPSB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXTtcbiAgICBpZiAoZGVmICYmIChkZWYuZm9ybVBhdGggIT09IGZvcm1QYXRoIHx8IGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBlbWl0SW5pdGlhbFZhbHVlKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FscmVhZHkgcmVnaXN0ZXIgYSBjZWxsIHZhbHVlIGNoYW5nZSBmb3IgdGhpcyBuYW1lLCB3aXRoIGRpZmZlcmVudCBcXCdmb3JtUGF0aFxcJyBvciBcXCdlbWl0SW5pdGlhbFZhbHVlXFwnLiBQbGVhc2UgdXNlIHNhbWUgYXJndW1lbnRzLicpO1xuICAgIH1cblxuICAgIC8vIE5vdCBleGlzdHM6IHJlZ2lzdGVyIG5ldyBkZWZpbml0aW9uXG4gICAgaWYgKCFkZWYpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIE5ldyBsaXN0ZW5lciB7JHtuYW1lfX0gZm9yIHZhbHVlIGNoYW5nZXMgb24gcGF0aCAke2Zvcm1QYXRofWApO1xuICAgICAgZGVmID0ge1xuICAgICAgICBzdWJqZWN0OiBuZXcgU3ViamVjdDxhbnk+KCksXG4gICAgICAgIHN1YnNjcmlwdGlvbjogbnVsbCxcbiAgICAgICAgZm9ybVBhdGgsXG4gICAgICAgIGVtaXRJbml0aWFsVmFsdWVcbiAgICAgIH07XG4gICAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXSA9IGRlZjtcblxuICAgICAgLy8gU3RhcnQgdGhlIGxpc3RlbmVyLCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnN1YnNjcmliZShyb3cgPT4gdGhpcy5zdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZSwgcm93KSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWYuc3ViamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKSAhPT0gc2hvdykge1xuICAgICAgaWYgKCFzaG93KSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnB1c2goY29sdW1uTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZXhjbHVkZXNDb2x1bW5zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zICYmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRzV2l0aFVwcGVyQ2FzZShpbnB1dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbnB1dCAmJiBpbnB1dC50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgLy8gU2hvdWxkIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMsIGRlcGVuZGluZyBvbiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza0RlbGV0ZUNvbmZpcm1hdGlvbihldmVudD86IEV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy51bmRvYWJsZURlbGV0aW9uKSB7XG4gICAgICAvLyBTcGVjaWFsIG1lc3NhZ2UsIGZvciB1bmRvYWJsZSBkZWxldGlvblxuICAgICAgcmV0dXJuIEFsZXJ0cy5hc2tDb25maXJtYXRpb24ocm93cz8ubGVuZ3RoID09PSAxID8gJ0NPTkZJUk0uREVMRVRFX1JPVycgOiAnQ09ORklSTS5ERUxFVEVfUk9XUycsIHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgZXZlbnQpO1xuICAgIH1cbiAgICAvLyBJbW1lZGlhdGUgZGVsZXRpb24gYWN0aW9uXG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCB0cnVlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrQ2FuY2VsQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQsIHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBBbGVydHMuYXNrQ29uZmlybWF0aW9uKHJvd3M/Lmxlbmd0aCA9PT0gMSA/ICdDT05GSVJNLkNBTkNFTF9ST1cnIDogJ0NPTkZJUk0uQ0FOQ0VMX1JPV1MnLCB0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tSZXN0b3JlQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0FjdGlvbkNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGZhbHNlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudFxcJ3MgY29uc3RydWN0b3InKTtcbiAgICByZXR1cm4gVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEVycm9yKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjt9KSB7XG4gICAgdGhpcy5zZXRFcnJvcih1bmRlZmluZWQsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJvd0Vycm9yKHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXRoaXMuZm9ybUVycm9yQWRhcHRlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmZvcm1FcnJvckFkYXB0ZXIudHJhbnNsYXRlRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCB7XG4gICAgICAuLi50aGlzLmVycm9yVHJhbnNsYXRvck9wdGlvbnMsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RXJyb3IodmFsdWU6IHN0cmluZywgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuO30pIHtcbiAgICBpZiAodGhpcy5lcnJvclN1YmplY3QudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBkYXRhIGVxdWFsaXR5IChkZWZhdWx0IGJ5IGlkLCB1c2luZyBFbnRpdHlVdGlscy5lcXVhbHMoKSlcbiAgICogQ2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBjb21wYXJlXG4gICAqXG4gICAqIEBwYXJhbSBkMVxuICAgKiBAcGFyYW0gZDJcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGVxdWFscyhkMTogVCwgZDI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRW50aXR5VXRpbHMuZXF1YWxzKGQxLCBkMiwgJ2lkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya1Jvd0FzRGlydHkocm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFVmVudD86IGJvb2xlYW47IH0pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKHJvdykgcm93LnZhbGlkYXRvcj8ubWFya0FzRGlydHkob3B0cyk7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Tb3J0QW5kUGFnaW5hdGlvbkV2ZW50cygpIHtcblxuICAgIGlmICghdGhpcy50YWJsZSkge1xuXG4gICAgICAvLyBERUJVRyBvbmx5IC0tIGFsZXJ0IHVzZXIgdGhhdCB0YWJsZSBub3QgZm91bmQgaW4gdGVtcGxhdGVcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gIXRoaXMudGFibGUgJiYgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgPG1hdC10YWJsZT4gaW4gdGhlIEhUTUwgdGVtcGxhdGUgKGFmdGVyIHdhaXRpbmcgNTAwbXMpISBDb21wb25lbnQ6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApLCA1MDApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIHN1cmUgdG8gd2FpdCB0aGUgdGFibGVcbiAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gISF0aGlzLnRhYmxlLCB7c3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCwgc3RvcEVycm9yOiBmYWxzZS8qYXZvaWQgZXJyb3Igd2hlbiBkZXN0b3J5aW5nIHRoZSB0YWJsZSovfSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICAvLyBMaXN0ZW4gc29ydCBldmVudHNcbiAgICAgICAgdGhpcy5zb3J0ICYmIHRoaXMuc29ydC5zb3J0Q2hhbmdlXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgICBtZXJnZU1hcChhc3luYyAoKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgICBmaWx0ZXIocmVzID0+IHJlcyA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHNvcnQgaW4gc2V0dGluZ3NcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gW3RoaXMuc29ydC5hY3RpdmUsIHRoaXMuc29ydC5kaXJlY3Rpb24gfHwgJ2FzYyddLmpvaW4oJzonKTtcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5zYXZlUGFnZVNldHRpbmcodGhpcy5zZXR0aW5nc0lkLCB2YWx1ZSwgU0VUVElOR1NfU09SVEVEX0NPTFVNTik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfHwgRU1QVFksXG5cbiAgICAgICAgLy8gTGlzdGVuIHBhZ2luYXRvciBldmVudHNcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0b3IucGFnZVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKF8pID0+IHRoaXMuc2F2ZUJlZm9yZUFjdGlvbignc29ydCcpKSxcbiAgICAgICAgICAgIGZpbHRlcihzYXZlZCA9PiBzYXZlZCA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHBhZ2Ugc2l6ZSBpbiBzZXR0aW5nc1xuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0dGluZ3Muc2F2ZVBhZ2VTZXR0aW5nKHRoaXMuc2V0dGluZ3NJZCwgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsIFNFVFRJTkdTX1BBR0VfU0laRSkpXG4gICAgICAgICAgKSB8fCBFTVBUWVxuICAgICAgKVxuICAgICAgLy8gUmVmcmVzaCBvbiBhbnkgc29ydCBvciBwYWdpbmF0b3IgZXZlbnRzXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5vblNvcnQuZW1pdCh2YWx1ZSk7XG4gICAgICAgIHRoaXMub25SZWZyZXNoLmVtaXQodmFsdWUpXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBzb3J0IG9yZGVyLCByZXNldCBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlLlxuICAgIGlmICh0aGlzLnNvcnQgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlZGl0Um93QnlJZChldmVudDogRXZlbnR8dW5kZWZpbmVkLCBpZDogbnVtYmVyLCBvcHRzPzoge2ZvY3VzQ29sdW1uPzogc3RyaW5nfSkge1xuICAgIGlmIChpZCA8IDApIHJldHVybjtcbiAgICBpZiAoaWQgPj0gdGhpcy52aXNpYmxlUm93Q291bnQpIHtcbiAgICAgIHRoaXMuYWRkUm93KGV2ZW50LCB1bmRlZmluZWQsIHsuLi5vcHRzLCBlZGl0aW5nOiB0cnVlfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nKHZhbHVlOiBib29sZWFuLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IHZhbHVlKSAge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlTmV3Um93KGV2ZW50OiBFdmVudHx1bmRlZmluZWQsIHJvdzogVGFibGVFbGVtZW50PFQ+KSB7Ly8gTWFrZSBzdXJlIHJvdyB3aWxsIGJlIGNhbmNlbGxlZCwgYW5kIE5PVCBkZWxldGVkXG4gICAgaWYgKHJvdy5pZCAhPT0gLTEpIHRocm93IG5ldyBFcnJvcignUm93IG11c3QgaGF2ZSBpZCA9IC0xJyk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDsgLy8gdW5zZWxlY3Qgcm93XG4gICAgdGhpcy5fZGF0YVNvdXJjZS5jYW5jZWxPckRlbGV0ZShyb3cpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93Lm5leHQocm93KTtcbiAgICB0aGlzLnRvdGFsUm93Q291bnQtLTtcbiAgICB0aGlzLnZpc2libGVSb3dDb3VudC0tO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVFeGlzdGluZ1JvdyhldmVudDogRXZlbnR8bnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7aW50ZXJhY3RpdmU/OiBib29sZWFuO30pIHtcbiAgICAvLyBNYWtlIHN1cmUgcm93IHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgTk9UIGRlbGV0ZWRcbiAgICBpZiAocm93LmlkID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdSb3cgbXVzdCBoYXZlIGFuIGlkJyk7XG5cbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiAwOyAvLyBTS2lwXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLmRlbGV0ZVJvdyhudWxsLCByb3csIG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxFeGlzdGluZ1JvdyhldmVudDogRXZlbnR8dW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHtpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbjt9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHJvdyB3aWxsIGJlIGNhbmNlbGxlZCwgYW5kIE5PVCBkZWxldGVkXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEgfHwgIXJvdy5lZGl0aW5nKSB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBjYW5ub3QgYmUgY2FuY2VsaW5nLCBidXQgb25seSBkZWxldGluZycpO1xuXG4gICAgY29uc3QgY29uZmlybWVkID0gKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvbiwgaWYgY2FuY2VsXG4gICAgaWYgKCFjb25maXJtZWQgJiYgcm93LmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZXJzLmxlbmd0aCA+IDApKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2FuQ2FuY2VsUm93cyhbcm93XSwgb3B0cylcbiAgICAgICAgLnRoZW4oY29uZmlybSA9PiB7XG4gICAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgICAgaWYgKGNvbmZpcm0pIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywge2ludGVyYWN0aXZlOiBmYWxzZX0pO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBrZWVwRWRpdGluZyA9IHJvdy5lZGl0aW5nICYmICghb3B0cyB8fCBvcHRzLmtlZXBFZGl0aW5nICE9PSBmYWxzZSk7XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IHJvd1xuICAgIHRoaXMuX2RhdGFTb3VyY2UuY2FuY2VsT3JEZWxldGUocm93KTtcbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cubmV4dChyb3cpO1xuXG4gICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICB0aGlzLmNoZWNrSWZSb3dQcmlzdGluZShyb3cpO1xuXG4gICAgLy8gUmVzdG9yZSBlZGl0aW5nIHN0YXRlXG4gICAgaWYgKGtlZXBFZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRSb3codW5kZWZpbmVkLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlJvd1ByaXN0aW5lKHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47IG9ubHlTZWxmPzogYm9vbGVhbn0pIHtcbiAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZVxuICAgIGNvbnN0IG1hcmtSb3dBc1ByaXN0aW5lID0gdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVzdG9yZU9yaWdpbmFsRGF0YU9uQ2FuY2VsID09PSB0cnVlO1xuICAgIGlmIChtYXJrUm93QXNQcmlzdGluZSkge1xuICAgICAgcm93LnZhbGlkYXRvcj8ubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgaXMgbm93IHByaXN0aW5lXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5vbmx5U2VsZiAhPT0gdHJ1ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSWZQcmlzdGluZShvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSWZQcmlzdGluZShvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47fSkge1xuICAgIGlmICghdGhpcy5kaXJ0eSkgcmV0dXJuOyAvLyBBbHJlYWR5IHByaXN0aW5lXG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgY29uc3QgcHJpc3RpbmUgPSAocm93cyB8fCBbXSkuZmluZEluZGV4KHJvdyA9PiByb3cuZGlydHkpID09PSAtMTtcbiAgICBpZiAocHJpc3RpbmUpIHRoaXMubWFya0FzUHJpc3RpbmUob3B0cyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyKGZpbHRlcjogRiwgb3B0czogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyB9KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQXBwbHlpbmcgZmlsdGVyJywgZmlsdGVyKTtcbiAgICB0aGlzLl9maWx0ZXIgPSBmaWx0ZXI7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5lbWl0RXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPiAwKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5EYXRhc291cmNlTG9hZGluZyhkYXRhU291cmNlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICBpZiAoIWRhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIG5vdCBzZXQgIScpO1xuXG4gICAgLy8gQ2xlYW5pbmcgcHJldmlvdXMgc3Vic2NyaXB0aW9uIG9uIGRhdGFzb3VyY2VcbiAgICBpZiAoaXNOb3ROaWwodGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBNYW55IGNhbGwgdG8gbGlzdGVuRGF0YXNvdXJjZSgpOiBDbGVhbmluZyBwcmV2aW91cyBzdWJzY3JpcHRpb25zLi4uJyk7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBQcm9wYWdlIGxvYWRpbmcgdG8gdGFibGVcbiAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbiA9IHRoaXMuX2RhdGFTb3VyY2UubG9hZGluZ1N1YmplY3RcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXG4gICAgICAgICAgICAvLyBJZiBjaGFuZ2VkIHRvIFRydWU6IHByb3BhZ2F0ZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gICAgICAgICAgICB0YXAoKGxvYWRpbmcpID0+IGxvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKHRydWUpKSxcblxuICAgICAgICAgICAgLy8gSWYgY2hhbmdlZCB0byBGYWxzZTogd2FpdCAyNTBtcyBiZWZvcmUgcHJvcGFnYXRlICh0byBtYWtlIHN1cmUgdGhlIHNwaW5uZXIgaGFzIGJlZW4gZGlzcGxheWVkKVxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgICB0YXAobG9hZGluZyA9PiAhbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcoZmFsc2UpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBzdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gTGlzdGVuZXIgd2l0aCBuYW1lIHsnICsgbmFtZSArICd9IG5vdCByZWdpc3RlcmVkISBQbGVhc2UgY2FsbCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMoKSBiZWZvcmU7Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBTdGFydCB2YWx1ZXMgY2hhbmdlcyBvbiByb3cgcGF0aCB7JHtkZWYuZm9ybVBhdGh9fWApO1xuICAgIH1cblxuICAgIC8vIExpc3RlbiB2YWx1ZSBjaGFuZ2VzLCBhbmQgcmVkaXJlY3QgdG8gZXZlbnQgZW1pdHRlclxuICAgIGNvbnN0IGNvbnRyb2wgPSByb3cudmFsaWRhdG9yICYmIEFwcEZvcm1VdGlscy5nZXRDb250cm9sRnJvbVBhdGgocm93LnZhbGlkYXRvciwgZGVmLmZvcm1QYXRoKTtcbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlXSBDb3VsZCBub3QgbGlzdGVuIGNlbGwgY2hhbmdlczogbm8gdmFsaWRhdG9yIG9yIGludmFsaWQgZm9ybSBwYXRoIHske2RlZi5mb3JtUGF0aH19YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBkb24ndCBlbWl0IGlmIGNvbnRyb2wgaXMgZGlzYWJsZWRcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiBkZWYuc3ViamVjdC5uZXh0KHZhbHVlKSk7XG5cbiAgICAgIC8vIEVtaXQgdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAgaWYgKGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICBkZWYuc3ViamVjdC5uZXh0KGNvbnRyb2wudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBkZXN0cm95PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFN0b3AgdmFsdWUgY2hhbmdlcyBvbiByb3cgcGF0aCB7JyArIGRlZi5mb3JtUGF0aCArICd9Jyk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRlc3Ryb3kgJiYgZGVmLnN1YmplY3QpIHtcbiAgICAgIGRlZi5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICBkZWYuc3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBwZXJtYW5lbnQgc2VsZWN0aW9uIG1vZGVsXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBpbml0UGVybWFuZW50U2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnBlcm1hbmVudFNlbGVjdGlvbikgdGhyb3cgbmV3IEVycm9yKCdpbml0UGVybWFuZW50U2VsZWN0aW9uKCkgYWxyZWFkeSBjYWxsZWQhJyk7XG5cbiAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSk7XG4gICAgbGV0IHNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcblxuICAgIC8vIExpc3RlbiBzb3J0IGNoYW5nZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uU29ydC5zdWJzY3JpYmUoKCkgPT4gKHNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0cnVlKSkgLy8gcHJldmVudCBzZWxlY3Rpb24gY2hhbmdlIG9uIHNvcnRcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGRhdGFzb3VyY2UgdXBkYXRlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5yb3dzU3ViamVjdFxuICAgICAgICAvLyByZXN0b3JlIHRoZSAnYWRkaW5nJyBzZWxlY3Rpb24gKGZvciBleGFtcGxlIGFmdGVyIGEgcGFnZSBvciBzb3J0IGNoYW5nZSlcbiAgICAgICAgLnN1YnNjcmliZSgocm93cykgPT4ge1xuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwZXJtYW5lbnRTZWxlY3Rpb25JZHMgPSAodGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pLm1hcChFbnRpdHlVdGlscy5nZXRJZCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oLi4ucm93cy5maWx0ZXIoKHJvdykgPT4gcGVybWFuZW50U2VsZWN0aW9uSWRzLmluY2x1ZGVzKEFwcFRhYmxlVXRpbHMuZ2V0RW50aXR5SWQocm93KSkpKTtcbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gc2VsZWN0aW9uIGNoYW5nZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkXG4gICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhc2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGlvbkNoYW5nZSkgPT4ge1xuICAgICAgICAgIC8vIGFkZCB0byBzZWxlY3Rpb25cbiAgICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlLmFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFxuICAgICAgICAgICAgICAuLi4odGhpcy5wZXJtYW5lbnRTZWxlY3Rpb24uc2VsZWN0ZWQgfHwgW10pXG4gICAgICAgICAgICAgICAgLy8gQWRkIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAgICAgIC5jb25jYXQoLi4uQXBwVGFibGVVdGlscy5nZXRFbnRpdGllcyhzZWxlY3Rpb25DaGFuZ2UuYWRkZWQpLmZpbHRlcihFbnRpdHlVdGlscy5oYXNJZCkpXG4gICAgICAgICAgICAgICAgLy8gQXZvaWQgZHVwbGljYXRlZCBlbnRpdGllcyAoTWFudGlzICM1NTM1MSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKEVudGl0eVV0aWxzLmFycmF5RGlzdGluY3RGaWx0ZXJGbilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHNlbGVjdGlvblxuICAgICAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2UucmVtb3ZlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRJZHMgPSBBcHBUYWJsZVV0aWxzLmdldEVudGl0eUlkcyhzZWxlY3Rpb25DaGFuZ2UucmVtb3ZlZCk7XG4gICAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAgIC4uLih0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZWxlY3RlZCB8fCBbXSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRpdHkpID0+IEVudGl0eVV0aWxzLmhhc0lkKGVudGl0eSkgJiYgIXJlbW92ZWRJZHMuaW5jbHVkZXMoZW50aXR5LmlkKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG59XG5cbiJdfQ==
|
|
1716
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBOEIsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRy9JLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFXLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFjLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFV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S0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydGFibGUsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgRW50aXRpZXNUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2UuY2xhc3MnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMsIElFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29sdW1uSXRlbSwgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMsIElBcHBGb3JtLCBPblJlYWR5IH0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXIsIE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucywgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHsgQ29tcGxldGFibGVFdmVudCwgY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlciwgZW1pdFByb21pc2VFdmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudHMnO1xuaW1wb3J0IHsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3ROaWwsIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgd2FpdEZvciwgd2FpdEZvckZhbHNlLCBXYWl0Rm9yT3B0aW9ucywgd2FpdEZvclRydWUgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBBbGVydHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWxlcnRzJztcbmltcG9ydCB7IENka0NvbHVtbkRlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQgeyBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEZvcm1FcnJvclRyYW5zbGF0b3IsIEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zLCBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvciB9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIENlbGxWYWx1ZUNoYW5nZUxpc3RlbmVyLFxuICBERUZBVUxUX1BBR0VfU0laRSxcbiAgREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgREVGQVVMVF9SRVFVSVJFRF9DT0xVTU5TLFxuICBSRVNFUlZFRF9FTkRfQ09MVU1OUyxcbiAgUkVTRVJWRURfU1RBUlRfQ09MVU1OUyxcbiAgU2F2ZUFjdGlvblR5cGUsXG4gIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyxcbiAgU0VUVElOR1NfUEFHRV9TSVpFLFxuICBTRVRUSU5HU19TT1JURURfQ09MVU1OXG59IGZyb20gJy4vdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwVGFibGVVdGlscyB9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBUYWJsZTxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIEYgPSBhbnksXG4gIElEID0gbnVtYmVyPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBJQXBwRm9ybSwgSUZvcm1Db250cm9sUGF0aFRyYW5zbGF0b3Ige1xuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIF9jZWxsVmFsdWVDaGFuZ2VzRGVmczoge1xuICAgIFtrZXk6IHN0cmluZ106IENlbGxWYWx1ZUNoYW5nZUxpc3RlbmVyO1xuICB9ID0ge307XG5cbiAgcHJvdGVjdGVkIF9lbmFibGVkID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVDb25maWdIb2xkZXI6IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcjtcbiAgcHJvdGVjdGVkIGFsbG93Um93RGV0YWlsID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuICBwcm90ZWN0ZWQgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIGxvY2F0aW9uOiBMb2NhdGlvbjtcbiAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZTtcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgYWxlcnRDdHJsOiBBbGVydENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIHByZXZpb3VzbHlFZGl0ZWRSb3dJZDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgZm9ybUVycm9yQWRhcHRlcjogRm9ybUVycm9yVHJhbnNsYXRvcjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBleGNsdWRlc0NvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xuICB0b3RhbFJvd0NvdW50OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdmlzaWJsZVJvd0NvdW50OiBudW1iZXI7XG4gIGVycm9yVHJhbnNsYXRvck9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zO1xuXG4gIHJlYWRvbmx5IHJlYWR5U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHNhdmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdG91Y2hlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZGlydHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGVycm9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuXG4gIGdldCBlcnJvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0IGVycm9yJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG5cbiAgc2V0IGVycm9yKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUYWJsZUVsZW1lbnQ8VD4+KHRydWUsIFtdKTtcbiAgcGVybWFuZW50U2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxUPiA9IG51bGw7XG4gIGVkaXRlZFJvdzogVGFibGVFbGVtZW50PFQ+ID0gdW5kZWZpbmVkO1xuICBhdXRvY29tcGxldGVGaWVsZHM6IHtba2V5OiBzdHJpbmddOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZ307XG4gIHJlYWRvbmx5IG1vYmlsZTogYm9vbGVhbjtcblxuICAvLyBUYWJsZSBvcHRpb25zXG4gIEBJbnB1dCgpIHNldHRpbmdzSWQ6IHN0cmluZztcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5QcmVmaXggPSAnQ09NTU9OLic7XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5TdWZmaXg6IHN0cmluZztcbiAgQElucHV0KCkgYXV0b0xvYWQgPSB0cnVlO1xuICBASW5wdXQoKSByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5saW5lRWRpdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgZm9jdXNGaXJzdENvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlRGVsZXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpcm1CZWZvcmVDYW5jZWwgPSBmYWxzZTtcbiAgQElucHV0KCkgdW5kb2FibGVEZWxldGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlRGVsZXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBrZWVwRWRpdGVkUm93T25TYXZlOiBib29sZWFuO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlU29ydDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZUZpbHRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgcHJvcGFnYXRlUm93RXJyb3IgPSBmYWxzZTtcblxuICBASW5wdXQoKSBkZWZhdWx0U29ydEJ5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuICBASW5wdXQoKSBkZWZhdWx0UGFnZVNpemUgPSBERUZBVUxUX1BBR0VfU0laRTtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlM7XG5cbiAgLy8gRm9jdXMgbWFuYWdlclxuICBASW5wdXQoKSBmb2N1c0NvbHVtbjogc3RyaW5nO1xuXG4gIGdldCBmaXJzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW1JFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoXTtcbiAgfVxuXG4gIGdldCBsYXN0VXNlckNvbHVtbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNbdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCAtIFJFU0VSVkVEX0VORF9DT0xVTU5TLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPikge1xuICAgIHRoaXMuc2V0RGF0YXNvdXJjZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGF0YVNvdXJjZSgpOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogRikge1xuICAgIHRoaXMuc2V0RmlsdGVyKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXIoKTogRiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgfVxuXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nIHx8IHRoaXMudG90YWxSb3dDb3VudCA9PT0gMDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZEVudGl0aWVzKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMucGVybWFuZW50U2VsZWN0aW9uPy5zZWxlY3RlZFxuICAgICAgfHwgQXBwVGFibGVVdGlscy5nZXRFbnRpdGllcyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25SZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWxlbWVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uTmV3Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvblN0YXJ0RWRpdGluZ1JvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Db25maXJtRWRpdENyZWF0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWxPckRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7cm93czogVGFibGVFbGVtZW50PFQ+W119PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVDYW5jZWxSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7cm93czogVGFibGVFbGVtZW50PFQ+W119PigpO1xuICBAT3V0cHV0KCkgb25CZWZvcmVTYXZlID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjx7Y29uZmlybWVkOiBib29sZWFuOyBzYXZlOiBib29sZWFufSwge2FjdGlvbjogU2F2ZUFjdGlvblR5cGU7IHZhbGlkOiBib29sZWFufT4oKTtcbiAgQE91dHB1dCgpIG9uQWZ0ZXJEZWxldGVkUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+W10+KCk7XG4gIEBPdXRwdXQoKSBvblNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uRGlydHkgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpcnR5U3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8udmFsaWQgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LmludmFsaWQgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy5wZW5kaW5nIDogZmFsc2U7XG4gIH1cblxuICBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b3VjaGVkU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCB1bnRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZGlzYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuc29ydCkgdGhpcy5zb3J0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZW5hYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIC8vIEZJWE1FOiBuZWVkIHRvIGhpZGRlbiBidXR0b25zIChpbiBIVE1MKSwgZXRjLiB3aGVuIGRpc2FibGVkXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIGlmICh2YWx1ZSkgdGhpcy5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBlbHNlIHRoaXMuZW5hYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5kaXJ0eVN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmRpcnR5U3ViamVjdC52YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgbGV0IG5lZWRFbWl0RXZlbnQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50b3VjaGVkU3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy50b3VjaGVkU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXJ0eSB8fCAodGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuaWQgIT09IHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkKSkge1xuICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IGVkaXRpbmcgcm93IG9ubHkgaWYgZWRpdGluZyBhbmQgaWYgaXQgd2FzIG5vdCBwcmV2aW91c2x5IHNhdmVkXG4gICAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHRoaXMuZWRpdGVkUm93KTtcblxuICAgICAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZVxuICAgICAgICB0aGlzLmNoZWNrSWZSb3dQcmlzdGluZSh0aGlzLmVkaXRlZFJvdywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGVkUm93ID0gbnVsbDtcbiAgICAgIG5lZWRFbWl0RXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAobmVlZEVtaXRFdmVudCAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBwcmVmZXIgdG8gdXNlIG1hcmtBbGxBc1RvdWNoZWQoKVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgbWFya0FzVG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgY29uc29sZS53YXJuKCdUT0RPOiBSZXBsYWNlIHRoaXMgY2FsbCBieSBtYXJrQWxsQXNUb3VjaGVkKCkgLSBiZWNhdXNlIG9mIGNoYW5nZXMgaW4gbmd4LWNvbXBvbmVudHMgPj0gMC4xNi4wJyk7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/Lm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnRvdWNoZWRTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLnRvdWNoZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCBmb2N1cyBjb2x1bW5cbiAgICAgIHRoaXMuc2F2aW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pIHtcbiAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgb3B0cyk7XG4gIH1cblxuICBtYXJrQXNMb2FkZWQob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgb3B0cyk7XG4gIH1cblxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5yZWFkeVN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMucmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgIC8vIElmIHN1YmNsYXNzZXMgaW1wbGVtZW50cyBPblJlYWR5XG4gICAgICBpZiAodHlwZW9mIHRoaXNbJ25nT25SZWFkeSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICh0aGlzIGFzIGFueSBhcyBPblJlYWR5KS5uZ09uUmVhZHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZW5hYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGRpc2FibGVTb3J0KCkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZGVmYXVsdFBhZ2VTaXplID0gdmFsdWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgfVxuXG4gIGdldCBwYWdlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIHx8IDA7XG4gIH1cblxuICBnZXQgc29ydEFjdGl2ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmFjdGl2ZTtcbiAgfVxuXG4gIGdldCBzb3J0RGlyZWN0aW9uKCk6ICdhc2MnIHwgJ2Rlc2MnIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0ICYmIHRoaXMuc29ydC5kaXJlY3Rpb24gJiYgKHRoaXMuc29ydC5kaXJlY3Rpb24gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF9wYWdpbmF0b3I6IE1hdFBhZ2luYXRvciB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHNldCBwYWdpbmF0b3IodmFsdWU6IE1hdFBhZ2luYXRvcikge1xuICAgIHRoaXMuX3BhZ2luYXRvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3IgfHwgdGhpcy5jaGlsZFBhZ2luYXRvcjtcbiAgfVxuXG4gIGdldCBkZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveVN1YmplY3Q/LmNsb3NlZCAhPT0gZmFsc2U7XG4gIH1cblxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7c3RhdGljOiBmYWxzZX0pIHRhYmxlOiBNYXRUYWJsZTxUPjtcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHtzdGF0aWM6IGZhbHNlfSkgY2hpbGRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0LCB7c3RhdGljOiBmYWxzZX0pIHNvcnQ6IE1hdFNvcnQ7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgY29sdW1uczogc3RyaW5nW10sXG4gICAgcHJvdGVjdGVkIF9kYXRhU291cmNlPzogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+LFxuICAgIHByaXZhdGUgX2ZpbHRlcj86IEZcbiAgKSB7XG4gICAgdGhpcy5yb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5yb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoTmF2Q29udHJvbGxlcik7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGluamVjdG9yLmdldChMb2NhdGlvbik7XG4gICAgdGhpcy5zZXR0aW5ncyA9IGluamVjdG9yLmdldChMb2NhbFNldHRpbmdzU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5tb2RhbEN0cmwgPSBpbmplY3Rvci5nZXQoTW9kYWxDb250cm9sbGVyKTtcbiAgICB0aGlzLmFsZXJ0Q3RybCA9IGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpO1xuICAgIHRoaXMudG9hc3RDb250cm9sbGVyID0gaW5qZWN0b3IuZ2V0KFRvYXN0Q29udHJvbGxlcik7XG4gICAgdGhpcy5mb3JtRXJyb3JBZGFwdGVyID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMubW9iaWxlID0gdGhpcy5zZXR0aW5ncy5tb2JpbGU7XG5cbiAgICAvLyBBdXRvY29tcGxldGUgZmllbGRzXG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyID0gbmV3IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcih7XG4gICAgICBnZXRVc2VyQXR0cmlidXRlczogKGEsIGIpID0+IHRoaXMuc2V0dGluZ3MuZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhhLCBiKVxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVhZE9ubHkgfHwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zID0gdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zIHx8IHsgc2VwYXJhdG9yOiAnLCAnLCBjb250cm9sUGF0aFRyYW5zbGF0b3I6IHRoaXMgfTsgLy8gQ2FuIGJlIG92ZXJyaWRlIGluIHN1YmNsYXNzZXMgY29uc3RydWN0b3JzXG5cbiAgICAvLyBDaGVjayBhc2sgdXNlciBjb25maXJtYXRpb24gaXMgcG9zc2libGVcbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICF0aGlzLmFsZXJ0Q3RybCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgXFwnYWxlcnRDdHJsXFwnIG9yIFxcJ2luamVjdG9yXFwnIGluIGNvbXBvbmVudFxcJ3MgY29uc3RydWN0b3IuJyk7XG5cbiAgICAvLyBEZWZpbmVkIHVuaXF1ZSBpZCBmb3Igc2V0dGluZ3MgZm9yIHRoZSBwYWdlXG4gICAgdGhpcy5zZXR0aW5nc0lkID0gdGhpcy5zZXR0aW5nc0lkIHx8IHRoaXMuZ2VuZXJhdGVUYWJsZUlkKCk7XG5cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmdldERpc3BsYXlDb2x1bW5zKCk7XG5cbiAgICAvLyBMb2FkIHRoZSBzb3J0ZWQgY29sdW1ucywgZnJvbSBzZXR0aW5nc1xuICAgIHtcbiAgICAgIGNvbnN0IHNvcnRlZENvbHVtbiA9IHRoaXMuZ2V0U29ydGVkQ29sdW1uKCk7XG4gICAgICB0aGlzLmRlZmF1bHRTb3J0QnkgPSBzb3J0ZWRDb2x1bW4uaWQ7XG4gICAgICB0aGlzLmRlZmF1bHRTb3J0RGlyZWN0aW9uID0gc29ydGVkQ29sdW1uLnN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMuZGVmYXVsdFBhZ2VTaXplID0gdGhpcy5nZXRQYWdlU2l6ZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIGVycm9yIHRvIGV2ZW50IGVtaXR0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuZXJyb3JTdWJqZWN0XG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25FcnJvci5lbWl0KHZhbHVlKSkpO1xuXG4gICAgLy8gUHJvcGFnYXRlIGRpcnR5IHRvIGV2ZW50IGVtaXR0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuZGlydHlTdWJqZWN0XG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMub25EaXJ0eS5lbWl0KHZhbHVlKSkpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHJvdyBkaXJ0eSBzdGF0ZSB0byB0YWJsZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93XG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcihyb3cgPT4gcm93Py52YWxpZGF0b3IgJiYgdHJ1ZSksXG4gICAgICAgICAgbWVyZ2VNYXAocm93ID0+IHJvdy52YWxpZGF0b3IudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKHJvdyA9PiByb3cuZGlydHkpLFxuICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgICAvL3RhcCgoKSA9PiBjb25zb2xlLmRlYnVnKFwiUHJvcGFnYXRlIHJvdydzIGRpcnR5IHRvIHRhYmxlLi4uXCIpKVxuXG4gICAgICAgICAgICAgIC8vIFN0b3AgaWYgbmV4dCBhbm90aGVyIHJvdywgb3IgZGVzdHJveWluZ1xuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vblN0YXJ0RWRpdGluZ1JvdyksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0KVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubWFya0FzRGlydHkoKSlcbiAgICApO1xuXG4gICAgLy8gQ2FsbCBkYXRhc291cmNlIHJlZnJlc2gsIG9uIGVhY2ggcmVmcmVzaCBldmVudHNcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5vblJlZnJlc2hcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoPGFueSwgYW55PigodGhpcy5hdXRvTG9hZCA/IHt9IDogJ3NraXAnKSBhcyBhbnkpLFxuICAgICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAgIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgICBpZiAoZXZlbnQgPT09ICdza2lwJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghdGhpcy5fZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFNraXBwaW5nIGRhdGEgbG9hZDogbm8gZGF0YVNvdXJjZSBkZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQ2FsbGluZyBkYXRhU291cmNlLndhdGNoQWxsKCkuLi4nKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2Uud2F0Y2hBbGwoXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0QWN0aXZlLFxuICAgICAgICAgICAgICAgIHRoaXMuc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLnNldEVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7IC8vIENvbnRpbnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB0aGlzLnVwZGF0ZVZpZXcocmVzIGFzIExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQpKSk7XG5cbiAgICAvLyBMaXN0ZW4gZGF0YVNvdXJjZSBsb2FkaW5nIGV2ZW50c1xuICAgIGlmICh0aGlzLl9kYXRhU291cmNlKSB0aGlzLmxpc3RlbkRhdGFzb3VyY2VMb2FkaW5nKHRoaXMuX2RhdGFTb3VyY2UpO1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gRGV0ZWN0IHdoZW4gcGFyZW50IG5nT25Jbml0KCkgbm90IGNhbGxcbiAgICBpZiAodGhpcy5kZWJ1ZyAmJiAhdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKSBjb25zb2xlLndhcm4oYFt0YWJsZV0gTWlzc2luZyAnZGlzcGxheWVkQ29sdW1ucycuIERpZCB5b3UgY2FsbCBwYXJlbnQgbmdPbkluaXQoKSBpbiBjb21wb25lbnQgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9ID9gKTtcblxuICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBzb3J0IGFuZCBwYWdpbmF0b3IgZXZlbnRzXG4gICAgLy8gbm9pbnNwZWN0aW9uIEpTSWdub3JlZFByb21pc2VGcm9tQ2FsbFxuICAgIHRoaXMubGlzdGVuU29ydEFuZFBhZ2luYXRpb25FdmVudHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgLy8gVW5zdWJzY3JpYmUgY29sdW1uIHZhbHVlIGNoYW5nZXNcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcykuZm9yRWFjaChjb2wgPT4gdGhpcy5zdG9wQ2VsbFZhbHVlQ2hhbmdlcyhjb2wsIHRydWUpKTtcbiAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmcyA9IHt9O1xuXG4gICAgdGhpcy5yZWFkeVN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhyZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsIG9wdHM/OiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcmVzKSByZXR1cm47IC8vIFNraXAgKGUuZyBlcnJvcilcbiAgICBpZiAocmVzICYmIHJlcy5kYXRhKSB7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IHJlcy5kYXRhLmxlbmd0aDtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IGlzTm90TmlsKHJlcy50b3RhbCkgPyByZXMudG90YWwgOiAoKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqICh0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRSkgfHwgMCkgKyB0aGlzLnZpc2libGVSb3dDb3VudCk7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSAke3Jlcy5kYXRhLmxlbmd0aH0gcm93cyBsb2FkZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBOTyByb3dzIGxvYWRlZCcpO1xuICAgICAgdGhpcy50b3RhbFJvd0NvdW50ID0gMDtcbiAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc1VudG91Y2hlZCh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0RGF0YXNvdXJjZShkYXRhc291cmNlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZSkgdGhyb3cgbmV3IEVycm9yKCdbdGFibGVdIGRhdGFTb3VyY2UgYWxyZWFkeSBzZXQgIScpO1xuICAgIGlmIChkYXRhc291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UgIT09IGRhdGFzb3VyY2UpIHtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhc291cmNlO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB0aGlzLmxpc3RlbkRhdGFzb3VyY2VMb2FkaW5nKGRhdGFzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RGF0YVNvdXJjZSgpIHtcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgLy90aGlzLl9kYXRhU291cmNlPy5jbG9zZSgpO1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBudWxsO1xuICB9XG5cbiAgYWRkQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5hZGRDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHJlbW92ZUNvbHVtbkRlZihjb2x1bW46IENka0NvbHVtbkRlZikge1xuICAgIHRoaXMudGFibGUucmVtb3ZlQ29sdW1uRGVmKGNvbHVtbik7XG4gIH1cblxuICBzZXRGaWx0ZXIoZmlsdGVyOiBGLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyB9KSB7XG4gICAgb3B0cyA9IG9wdHMgfHwgeyBlbWl0RXZlbnQ6IHRydWUgfTtcblxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVGaWx0ZXIpIHtcblxuICAgICAgLy8gaWYgYSBkaXJ0eSB0YWJsZSBpcyB0byBiZSBzYXZlZCBiZWZvcmUgZmlsdGVyXG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuXG4gICAgICAgIC8vIFNhdmVcbiAgICAgICAgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdmaWx0ZXInKS50aGVuKHNhdmVkID0+IHtcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb25seSBpZiB1c2VyIGRpZG4ndCBjYW5jZWwgdGhlIHNhdmUgb3IgdGhlIHNhdmUgaXMgb2tcbiAgICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgb24gbm9uLWRpcnR5IHRhYmxlXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGFwcGx5IGZpbHRlciBkaXJlY3RseVxuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1BbmRBZGQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG4gICAgLy8gQWRkIHJvd1xuICAgIHJldHVybiB0aGlzLmFkZFJvdyhldmVudCk7XG4gIH1cblxuICBjb25maXJtQW5kQmFja3dhcmQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KTogYm9vbGVhbiB7XG5cbiAgICAvLyBEZWxldGluZyBlZGl0ZWQgcm93LCBpZiBlbXB0eSBhbmQgbm90IGRpcnR5XG4gICAgY29uc3QgcHJldmlvdXNSb3cgPSB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAocHJldmlvdXNSb3cgJiYgKHByZXZpb3VzUm93LmlkID09PSAtMSkgJiYgcHJldmlvdXNSb3cudmFsaWRhdG9yPy5pbnZhbGlkICYmICEocHJldmlvdXNSb3cudmFsaWRhdG9yPy5kaXJ0eSkpIHtcbiAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCBwcmV2aW91c1Jvdyk7XG5cbiAgICAgIC8vIFdhaXQgZGVsZXRpb24gaXMgZG9uZSwgdGhlbiBlZGl0IHByZXZpb3VzIHJvdyAoYnkgaWQsIGJlY2F1c2Ugb2YgcmVsb2FkaW5nKVxuICAgICAgdGhpcy53YWl0SWRsZSgpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuZWRpdFJvd0J5SWQoZXZlbnQsIHJvdy5pZCwge2ZvY3VzQ29sdW1uOiB0aGlzLmxhc3RVc2VyQ29sdW1ufSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRWRpdCBwcmV2aW91cyByb3dcbiAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywge2ZvY3VzQ29sdW1uOiB0aGlzLmxhc3RVc2VyQ29sdW1ufSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25maXJtQW5kRm9yd2FyZChldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHJldHVybiBmYWxzZTtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICAvLyBJZiBwZW5kaW5nOiBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uLCB0aGVuIGxvb3BcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgIHJldHVybiBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyhyb3cudmFsaWRhdG9yKS50aGVuKCgpID0+IHRoaXMuY29uZmlybUFuZEZvcndhcmQoZXZlbnQsIHJvdykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICB0aGlzLmVkaXRSb3dCeUlkKGV2ZW50LCByb3cuaWQgKyAxLCB7Zm9jdXNDb2x1bW46IHRoaXMuZmlyc3RVc2VyQ29sdW1ufSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybSB0aGUgY3JlYXRpb24gb2YgdGhlIGdpdmVuIHJvdywgb3IgaWYgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudGx5IGVkaXRlZCByb3dcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIGNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybiB0cnVlOyAvLyBubyByb3cgdG8gY29uZmlybVxuXG4gICAgLy8gU3RvcCBldmVudFxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgLy8gVE9ETzogYWRkIGF3YWl0ID9cbiAgICBjb25zdCBjb25maXJtZWQgPSByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIC8vIElmIGVkaXQgZmluaXNoZWQsIGZvcmdldCBlZGl0ZWQgcm93XG4gICAgICBpZiAocm93ID09PSB0aGlzLmVkaXRlZFJvdykge1xuICAgICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gTWFyayB0YWJsZSBhcyBkaXJ0eSAoaWYgcm93IGlzIGRpcnR5KVxuICAgICAgaWYgKHJvdy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHsgZW1pdEV2ZW50OiBmYWxzZSAvKiBiZWNhdXNlIG9mIHJlc2V0RXJyb3IoKSAqLyB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgZXJyb3JcbiAgICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgICAvLyBFbWl0IHRoZSBjb25maXJtIGV2ZW50XG4gICAgICB0aGlzLm9uQ29uZmlybUVkaXRDcmVhdGVSb3cubmV4dChyb3cpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgLy8gSWYgcGVuZGluZzogV2FpdCBlbmQgb2YgdmFsaWRhdGlvbiwgdGhlbiBsb29wXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiB1c2luZyBhc3luYyBpc1ZhbGlkKCkgZnVuY3Rpb25cbiAgICAgIGlmIChyb3cudmFsaWRhdG9yLnBlbmRpbmcpIHtcbiAgICAgICAgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcocm93LnZhbGlkYXRvcikudGhlbigoKSA9PiB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBOT1QgY29uZmlybWVkID0gcm93IGhhcyBlcnJvclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIENhbm5vdCBjb25maXJtIHJvdywgYmVjYXVzZSBpbnZhbGlkJyk7XG4gICAgICAgIEFwcEZvcm1VdGlscy5sb2dGb3JtRXJyb3JzKHJvdy52YWxpZGF0b3IsICdbdGFibGVdICcpO1xuICAgICAgfVxuXG4gICAgICAvLyBmaXg6IG1hcmsgYWxsIGNvbnRyb2xzIGFzIHRvdWNoZWQgdG8gc2hvdyBlcnJvcnNcbiAgICAgIHJvdy52YWxpZGF0b3IubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICAvLyBDb21wdXRlIHJvdyBlcnJvciwgYW5kIHByb3BhZ2F0ZSB0byB0YWJsZSdzIGVycm9yXG4gICAgICBpZiAodGhpcy5wcm9wYWdhdGVSb3dFcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0Um93RXJyb3Iocm93KTtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm90IGNvbmZpcm1lZFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNhbmNlbE9yRGVsZXRlKGV2ZW50OiBFdmVudCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsga2VlcEVkaXRpbmc/OiBib29sZWFuOyB9KSB7XG4gICAgLy8gRGVsZXRlIG5ldyByb3dcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgfVxuICAgIC8vIERlbGV0ZSBleGlzdGluZyAoYnV0IG5vdCBlZGl0aW5nKSByb3dcbiAgICBlbHNlIGlmICghcm93LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZGVsZXRlRXhpc3RpbmdSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICAgIC8vIENhbmNlbCBleGlzdGluZyAoYW5kIGVkaXRpbmcpIHJvd1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRSb3coZXZlbnQ/OiBFdmVudCwgaW5zZXJ0QXQ/OiBudW1iZXIsIG9wdHM/OiB7Zm9jdXNDb2x1bW4/OiBzdHJpbmc7IGVkaXRpbmc/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBc2tpbmcgZm9yIG5ldyByb3cuLi4nKTtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSBtb2RhbCBpZiBpbmxpbmUgZWRpdGlvbiBpcyBkaXNhYmxlZFxuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5OZXdSb3dEZXRhaWwoZXZlbnQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyByb3dcbiAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmFkZFJvd1RvVGFibGUoaW5zZXJ0QXQsIG9wdHMpO1xuICAgIHJldHVybiAhIXJvdztcbiAgfVxuXG4gIGFzeW5jIHNhdmUob3B0cz86IHsga2VlcEVkaXRpbmc/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBvcHRzID0ge1xuICAgICAga2VlcEVkaXRpbmc6IHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSxcbiAgICAgIC4uLm9wdHNcbiAgICB9O1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknfTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgIC8vIEtlZXAgZWRpdGVkIHJvdyBpZCAoc2hvdWxkIGJlIGRvbmUgQkVGT1JFIGNvbmZpcm1FZGl0Q3JlYXRlKCkgKVxuICAgIHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkID0gb3B0cy5rZWVwRWRpdGluZyA/ICgodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy5pZCA6IHVuZGVmaW5lZCkgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdz8uaWQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZXZpb3VzbHlFZGl0ZWREYXRhID0gb3B0cy5rZWVwRWRpdGluZyA/IChpc05vdE5pbCh0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCkgJiYgdGhpcy5lZGl0ZWRSb3c/LmN1cnJlbnREYXRhIHx8IHRoaXMuc2luZ2xlU2VsZWN0ZWRSb3c/LmN1cnJlbnREYXRhKSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5UQUJMRV9JTlZBTElEX1JPV19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SJ307XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBzYXZpbmdcbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuXG4gICAgdHJ5IHtcblxuICAgICAgLy8gQ2FsbGluZyBzZXJ2aWNlIHNhdmUoKVxuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQ2FsbGluZyBkYXRhU291cmNlLnNhdmUoKS4uLicpO1xuICAgICAgY29uc3QgaXNPSyA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2Uuc2F2ZSgpO1xuXG4gICAgICBpZiAoaXNPSykgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICByZXR1cm4gaXNPSztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcblxuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyByb3dcbiAgICAgIGlmIChpc05vdE5pbCh0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkT3JEYXRhKHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkLCBwcmV2aW91c2x5RWRpdGVkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKGV2ZW50PzogRXZlbnQsIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsgfSkge1xuXG4gICAgLy8gQ2hlY2sgY29uZmlybWF0aW9uXG4gICAgaWYgKCghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkgJiYgdGhpcy5kaXJ0eSAmJiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsIHx8IHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLm9ic2VydmVycy5sZW5ndGggPiAwKSkge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jYW5DYW5jZWxSb3dzKCkudGhlbihjb25maXJtID0+IHtcbiAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbChudWxsLCB7aW50ZXJhY3RpdmU6IGZhbHNlfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVSb3coZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzoge1xuICAgIHNraXBQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gIH0pIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICByb3cgPSByb3cgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1JvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZShyb3cuaWQgKyAxKTtcbiAgICBpZiAoIW5ld1JvdykgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIG5ldyByb3cgdG8gdGFibGUnKTtcbiAgICBjb25zdCBqc29uID0gey4uLnJvdy5jdXJyZW50RGF0YSwgaWQ6IG51bGx9O1xuXG4gICAgLy8gUmVzZXQgc29tZSBwcm9wZXJ0aWVzIChlLmcuIHJhbmtPcmRlciwgZXRjKVxuICAgIGlmIChvcHRzICYmIG9wdHMuc2tpcFByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXdSb3cuY3VycmVudERhdGE7XG4gICAgICBvcHRzLnNraXBQcm9wZXJ0aWVzLmZvckVhY2goa2V5ID0+IGpzb25ba2V5XSA9IG5ld0RhdGFba2V5XSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Jvdy52YWxpZGF0b3IpIHtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZShqc29uKTtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IubWFya0FzRGlydHkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5ld1Jvdy5jdXJyZW50RGF0YT8uZnJvbU9iamVjdCkge1xuICAgICAgICBuZXdSb3cuY3VycmVudERhdGEuZnJvbU9iamVjdChqc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YSA9IGpzb247XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0XG4gICAgdGhpcy5jbGlja1Jvdyh1bmRlZmluZWQsIG5ld1Jvdyk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdpc0FsbFNlbGVjdGVkLiBsZW5ndGhzJywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy52aXNpYmxlUm93Q291bnQ7XG4gIH1cblxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBhc3luYyBtYXN0ZXJUb2dnbGUoKSB7XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgICByb3dzLmZvckVhY2gocm93ID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZWxlY3Rpb24oZXZlbnQ6IEV2ZW50LCBvcHRzPzoge2ludGVyYWN0aXZlPzogYm9vbGVhbn0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gYXdhaXQgdGhpcy5kZWxldGVSb3dzKGV2ZW50LCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCwgb3B0cyk7XG4gICAgaWYgKGRlbGV0ZUNvdW50ID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBvcHRzIFVzZSBpbnRlcmFjdGl2ZT1mYWxzZSB0byBhdm9pZCB1c2VyIGludGVyYWN0aW9uIChlLmcuIHVzZXIgY29uZmlybWF0aW9uKVxuICAgKiAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93KGV2ZW50OiBFdmVudHxudWxsLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHtpbnRlcmFjdGl2ZT86IGJvb2xlYW47fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdyk7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSBhd2FpdCB0aGlzLmRlbGV0ZVJvd3MoZXZlbnQsIFtyb3ddLCBvcHRzKTtcblxuICAgIC8vIFVuc2VsZWN0IHRoZSBkZWxldGVkIHJvd1xuICAgIGlmIChkZWxldGVDb3VudCAmJiBpc1NlbGVjdGVkKSB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xuXG4gICAgcmV0dXJuIGRlbGV0ZUNvdW50ID09PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gcm93c1xuICAgKiBAcGFyYW0gb3B0cyBVc2UgaW50ZXJhY3RpdmU9ZmFsc2UgdG8gYXZvaWQgdXNlciBpbnRlcmFjdGlvbiAoZS5nLiB1c2VyIGNvbmZpcm1hdGlvbilcbiAgICogICAgQW5kIHRvIGZvcmNlIGRlbGV0aW9uIGV2ZW4gaWYgdGFibGUgaXMgYnVzeVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUm93cyhldmVudDogRXZlbnR8bnVsbCwgcm93czogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7aW50ZXJhY3RpdmU/OiBib29sZWFuO30pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB0aHJvdyB7Y29kZTogRXJyb3JDb2Rlcy5UQUJMRV9SRUFEX09OTFksIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9SRUFEX09OTFknfTtcbiAgICB9XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gMDsgLy8gU0tpcFxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkIHx8IGlzRW1wdHlBcnJheShyb3dzKSkgcmV0dXJuIDA7IC8vIFNraXAgaXMgZGlzYWJsZWQsIG9yIG5vIHJvd3MgdG8gZGVsZXRlXG5cbiAgICBpZiAodGhpcy5sb2FkaW5nICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW2FwcC10YWJsZV0gU2tpcCBkZWxldGVSb3dzKCkgYmVjYXVzZSB0YWJsZSBpcyBidXN5IChsb2FkaW5nKS4gVXNlIG9wdHMuaW50ZXJhY3RpdmUgPSBmYWxzZSB0byBmb3JjZSBkZWxldGlvbicpO1xuICAgICAgcmV0dXJuIDA7IC8vIFNraXAgaWYgbG9hZGluZ1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0byBrZWVwIG5ld2x5IGNyZWF0ZWQgcm93XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93Py5pZCA9PT0gLTEgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyAmJiAhcm93cy5pbmNsdWRlcyh0aGlzLmVkaXRlZFJvdykpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IHRoaXMuY29uZmlybUVkaXRDcmVhdGUoKTtcbiAgICAgIGlmICghY29uZmlybWVkKSByZXR1cm4gMDsgLy8gQ2Fubm90IGRlbGV0ZSAoZS5nLiBlZGl0ZWQgcm93IGlzIGludmFsaWQpXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgY2FuIGRlbGV0ZVxuICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IHRoaXMuY2FuRGVsZXRlUm93cyhyb3dzLCBvcHRzKTtcbiAgICBpZiAoIWNhbkRlbGV0ZSkgcmV0dXJuIDA7IC8vIENhbm5vdCBkZWxldGVcblxuICAgIC8vIFJldmVyc2Ugcm93IG9yZGVyIChvbiBhIGNvcHkpXG4gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQsIG5lZWQgYmVjYXVzZSByb3cuZGVsZXRlKCkgaGFzIGFzeW5jIGV4ZWN1dGlvblxuICAgIC8vIGFuZCBpbmRleCBjYWNoZSBpcyB1cGRhdGVkIHdpdGggYSBkZWxheVxuICAgIGxldCB0ZW1wUm93cyA9IHJvd3Muc2xpY2UoKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaWQgPiBiLmlkID8gLTEgOiAxKTtcblxuICAgIGxldCBkZWxldGVkUm93czogVGFibGVFbGVtZW50PFQ+W10gPSBbXTtcblxuICAgIC8vIElmIGRhdGEgbmVlZCB0byBiZSBzYXZlZCBmaXJzdFxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVEZWxldGUpIHtcbiAgICAgIC8vIEV4Y2x1ZGUgaW52YWxpZCByb3dzIChiZWNhdXNlIG9mIHNhdmUoKSB3aWxsIGZhaWwsIHdoZW4gZXhpc3RzIHNvbWUgaW52YWxpZCByb3dzKVxuICAgICAgdGVtcFJvd3MgPSB0ZW1wUm93cy5maWx0ZXIocm93ID0+IHtcbiAgICAgICAgLy8gRGVsZXRlIHRoZSByb3cgOlxuICAgICAgICAvLyAtIGlmIG5ld2x5IGNyZWF0ZWQgcm93IChpZCA9IC0xKSxcbiAgICAgICAgLy8gLSBvciBpZiBpbnZhbGlkIGFuZCBub3QgZWRpdGluZyAoPSBub3QgY2FuY2VsbGFibGUpXG4gICAgICAgIGlmIChyb3cuaWQgPT09IC0xIHx8ICghcm93LmVkaXRpbmcgJiYgcm93LmludmFsaWQgLypkbyBub3QgdXNlICF2YWxpZCBiZWNhdXNlIGlmIHJvdyBpcyBkaXNhYmxlZCwgaXQgd2lsbCBiZSBhbHdheXMgIXZhbGlkICovKSkge1xuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIERlbGV0ZSByb3cgIyR7cm93LmlkfWApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgICAgICAgcm93LmRlbGV0ZSgpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LS07XG4gICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgICAgICAgZGVsZXRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgICAgIGlmICh0aGlzLmVkaXRlZFJvdyA9PT0gcm93KSB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEV4Y2x1ZGUgZnJvbSB0aGUgbGlzdCB0byBkZWxldGUgdXNpbmcgdGhlIHNlcnZpY2VcbiAgICAgICAgfVxuICAgICAgICAvLyBDYW5jZWwgdGhlIHJvdyAoYW5kIG1hcmsgYXMgcHJpc3RpbmUpLCB3aGVuIG5vdCB2YWxpZCBidXQgaW4gZWRpdGlvblxuICAgICAgICBlbHNlIGlmIChyb3cuZWRpdGluZyAmJiAhcm93LnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcbiAgICAgICAgICByb3cuY2FuY2VsKCk7XG4gICAgICAgICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmUgKGlmIHBvc3NpYmxlKVxuICAgICAgICAgIHRoaXMuY2hlY2tJZlJvd1ByaXN0aW5lKHJvdywge2VtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIC8qYXZvaWQgcHJvcGFnYXRpb24gdG8gdGFibGUqL30pO1xuICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIHRoZSByb3cuIHRoZSByb3cgd2lsbCBiZSBkZWxldGVkIGFmdGVyIHRoZSBzYXZlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBcHBseSBzYXZlLCBvbmx5IGlmIHRoZXJlIGlzIHN0aWxsIHNvbWUgcm93cyB0byBkZWxldGVcbiAgICAgIC8vIFdBUk46IElmIG5vIG1vcmUgcm93cyAoZS5nLiBiZWNhdXNlIGFsbCBoYXMgYmVlbiBjYW5jZWxsZWQpIHRoZW4gY29udGludWUgYW55d2F5IHRvIGNsZWFyIGVkaXRlZFJvdyBhbmQgc2VsZWN0aW9uIChpc3N1ZSBJTUFHSU5FLTY2OSlcbiAgICAgIGlmIChkZWxldGVkUm93cy5sZW5ndGggfHwgdGVtcFJvd3MubGVuZ3RoKSB7XG5cbiAgICAgICAgLy8gU2F2ZSBkYXRhIChlLmcuIHdoZW4gdXNpbmcgbWVtb3J5IHNlcnZpY2UpXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdkZWxldGUnKTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIC8vIFN0b3AgaWYgc2F2ZSBjYW5jZWxsZWQgb3Igc2F2ZSBmYWlsZWRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuXG4gICAgICAvLyBBcHBseSBkZWxldGlvbiBvbiBkYXRhc291cmNlXG4gICAgICAvLyBJZiBubyBtb3JlIHJvd3MgdG8gZGVsZXRlLCBjb250aW51ZSBhbnl3YXkgdG8gY2xlYXIgZWRpdGVkUm93IGFuZCBzZWxlY3Rpb24gKGlzc3VlIElNQUdJTkUtNjY5KVxuICAgICAgaWYgKHRlbXBSb3dzLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBEZWxldGUgJHt0ZW1wUm93cy5sZW5ndGh9IHJvd3MuLi5gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5kZWxldGVBbGwodGVtcFJvd3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBETyBub3QgdXBkYXRlIG1hbnVhbGx5LCBiZWNhdXNlIHdhdGNoQUxsKCkuc3Vic2NyaWJlKCkgd2lsbCB1cGRhdGUgdGhpcyBjb3VudFxuICAgICAgLy90aGlzLnRvdGFsUm93Q291bnQgLT0gZGVsZXRlQ291bnQ7XG4gICAgICAvL3RoaXMudmlzaWJsZVJvd0NvdW50IC09IGRlbGV0ZUNvdW50O1xuXG4gICAgICAvLyBEZXNlbGVjdCBkZWxldGVkIHJvd3NcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJvd3MpO1xuXG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubWFya0FzRGlydHkoe2VtaXRFdmVudDogZmFsc2UgLyptYXJrRm9yQ2hlY2soKSBpcyBjYWxsZWQganVzdCBhZnRlciovfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICB0aGlzLm9uQWZ0ZXJEZWxldGVkUm93cy5uZXh0KHJvd3MpO1xuXG4gICAgICByZXR1cm4gcm93cy5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbGVjdFJvd0J5SWQoaWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy53YWl0SWRsZSgpO1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVNvdXJjZS5nZXRSb3coaWQpO1xuICAgIGlmICghcm93KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY2xpY2tSb3cobnVsbCwgcm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IHJvdyBieSBkYXRhLiBXaWxsIHVzZSBlcXVhbHMoKSB0byBmaW5kIHNhbWUgcm93J3MgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgYXN5bmMgc2VsZWN0Um93QnlEYXRhKGRhdGE6IFQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhU291cmNlLmdldFJvd3MoKVxuICAgICAgLmZpbmQocm93ID0+IHRoaXMuZXF1YWxzKHJvdy5jdXJyZW50RGF0YSwgZGF0YSkpO1xuICAgIGlmICghcm93KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY2xpY2tSb3cobnVsbCwgcm93KTtcbiAgfVxuXG4gIGNsaWNrUm93KGV2ZW50OiBFdmVudHx1bmRlZmluZWQsIHJvdzogVGFibGVFbGVtZW50PFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgLy8gV2FpdCB3aGlsZSBsb2FkaW5nLCBhbmQgbG9vcFxuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoXCJbdGFibGVdIFdhaXRpbmcgYmVmb3JlIGFwcGx5IGNsaWNrUm93KCkgKGRhdGFzb3VyY2UgaXMgYnVzeSkuLi5cIik7XG4gICAgICB0aGlzLndhaXRJZGxlKHt0aW1lb3V0OiAyMDAwfSkudGhlbigoKSA9PiB0aGlzLmNsaWNrUm93KGV2ZW50LCByb3cpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlt0YWJsZV0gRGV0ZWN0IGNsaWNrIG9uIHJvd1wiKTtcblxuICAgIC8vIENhbmNlbGxlZCBieSBldmVudFxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoXCJbdGFibGVdIGNsaWNrUm93IGV2ZW50IGlzIGRlZmF1bHRQcmV2ZW50ZWRcIik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWxyZWFkeSBpbiBlZGl0aW9uXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEgfHwgcm93LmVkaXRpbmcpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiW3RhYmxlXSBSb3cgYWxyZWFkeSBlZGl0aW5nLiBTa2lwIGNsaWNrUm93IGV2ZW50XCIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gT3BlbiB0aGUgZGV0YWlsIHBhZ2UgKGlmIG5vdCBpbmxpbmUgZWRpdGluZylcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdGlvbikge1xuXG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgICB0aGlzLm9wZW5Sb3cocm93LmN1cnJlbnREYXRhLmlkLCByb3cpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMubWFya0FzTG9hZGVkKCkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLm1hcmtBc0xvYWRlZCgpKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgZWRpdGluZyByb3dcbiAgICByZXR1cm4gdGhpcy5lZGl0Um93KGV2ZW50LCByb3csIHtmb2N1c0NvbHVtbjogdW5kZWZpbmVkIC8qZm9yY2UgdG8gdXNlIHRoZSBjbGljayB0YXJnZXQqL30pO1xuICB9XG5cbiAgbW92ZVJvdyhpZDogbnVtYmVyLCBkaXJlY3Rpb246IG51bWJlcikge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5tb3ZlKGlkLCBkaXJlY3Rpb24pO1xuICB9XG5cbiAgcmVhZHkob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHdhaXRGb3JUcnVlKHRoaXMucmVhZHlTdWJqZWN0LCBvcHRzKTtcbiAgfVxuXG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB3YWl0Rm9yRmFsc2UodGhpcy5sb2FkaW5nU3ViamVjdCwgb3B0cyk7XG4gIH1cblxuICBhc3luYyBvcGVuU2VsZWN0Q29sdW1uc01vZGFsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGFueT4ge1xuXG4gICAgLy8gQ29weSBjdXJyZW50IGNvbHVtbnMgKGRlZXAgY29weSlcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDdXJyZW50Q29sdW1ucygpO1xuXG4gICAgY29uc3QgaGFzVG9wTW9kYWwgPSAhIShhd2FpdCB0aGlzLm1vZGFsQ3RybC5nZXRUb3AoKSk7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUYWJsZVNlbGVjdENvbHVtbnNDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge2NvbHVtbnN9LFxuICAgICAgY3NzQ2xhc3M6IGhhc1RvcE1vZGFsICYmICdzdGFjay1tb2RhbCdcbiAgICB9KTtcblxuICAgIC8vIE9wZW4gdGhlIG1vZGFsXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgLy8gT24gZGlzbWlzc1xuICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IG1vZGFsLm9uRGlkRGlzbWlzcygpO1xuICAgIGlmICghZGF0YSkgcmV0dXJuOyAvLyBDQU5DRUxMRURcblxuICAgIC8vIEFwcGx5IGNvbHVtbnNcbiAgICBjb25zdCB1c2VyQ29sdW1ucyA9IChkYXRhIHx8IFtdKS5maWx0ZXIoYyA9PiBjLmNhbkhpZGUgPT09IGZhbHNlIHx8IGMudmlzaWJsZSkubWFwKGMgPT4gYy5uYW1lKSB8fCBbXTtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmNvbmNhdCh1c2VyQ29sdW1ucykuY29uY2F0KFJFU0VSVkVEX0VORF9DT0xVTU5TKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gVXBkYXRlIHVzZXIgc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZyh0aGlzLnNldHRpbmdzSWQsIHVzZXJDb2x1bW5zLCBTRVRUSU5HU19ESVNQTEFZX0NPTFVNTlMpO1xuICB9XG5cbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfVxuXG4gIGRvUmVmcmVzaChldmVudD86IENvbXBsZXRhYmxlRXZlbnQpIHtcbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KGV2ZW50KTtcblxuICAgIC8vIFdoZW4gdGFyZ2V0IHdhaXQgZm9yIGEgY29tcGxldGUgKGUuZy4gSW9uUmVmcmVzaGVyKVxuICAgIGlmIChldmVudD8udGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5jb21wbGV0ZSkge1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdElkbGUoKTtcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRDdXJyZW50Q29sdW1ucygpOiBDb2x1bW5JdGVtW10ge1xuICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuc2xpY2UoUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5sZW5ndGgpXG4gICAgICAgIC5maWx0ZXIobmFtZSA9PiB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKSA9PT0gLTEpO1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNcbiAgICAgICAgLmNvbmNhdChoaWRkZW5Db2x1bW5zKVxuICAgICAgICAuZmlsdGVyKG5hbWUgPT4gIVJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMobmFtZSkgJiYgIVJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpXG4gICAgICAgICAgICAmJiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMobmFtZSkpXG4gICAgICAgIC5tYXAobmFtZSA9PiAoe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUobmFtZSksXG4gICAgICAgICAgdmlzaWJsZTogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YobmFtZSkgIT09IC0xLFxuICAgICAgICAgIGNhbkhpZGU6IHRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuaW5kZXhPZihuYW1lKSA9PT0gLTFcbiAgICAgICAgfSkpO1xuICB9XG5cbiAgZXNjYXBlRWRpdGluZ1JvdyhldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5lZGl0aW5nKSByZXR1cm47XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW2FwcC10YWJsZV0gQ2FuY2VsIHRoZSByb3cgKGtleWRvd24uZXNjYXBlKScpO1xuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICAvLyBBdm9pZCB0byBjYW5jZWwgdGhlIGVkaXRvclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8vIElmIG5ldyByb3cgKG5vIGlkKVxuICAgIGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICBpZiAocm93LnZhbGlkYXRvcikge1xuICAgICAgICAvLyBJZiBwZW5kaW5nOiBXYWl0IGVuZCBvZiB2YWxpZGF0aW9uLCB0aGVuIGxvb3BcbiAgICAgICAgaWYgKHJvdy52YWxpZGF0b3IucGVuZGluZykge1xuICAgICAgICAgIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHJvdy52YWxpZGF0b3IpLnRoZW4oKCkgPT4gdGhpcy5lc2NhcGVFZGl0aW5nUm93KGV2ZW50LCByb3cpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSb3cgaXMgaW52YWxpZDogZGVsZXRlIHRoZSByb3dcbiAgICAgICAgaWYgKHJvdy52YWxpZGF0b3IuaW52YWxpZCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlTmV3Um93KGV2ZW50LCByb3cpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgcm93IGV4aXN0cyAoaGFzIGFuIGlkKVxuICAgIGVsc2Uge1xuICAgICAgLy8gbmVlZCB0byBjYWxsIGNhbmNlbCBmdW5jdGlvbiAoaWYgY29uZmlybWF0aW9uIHdpbGwgYmUgY2FsbCBiZWZvcmUgYmVmb3JlKVxuICAgICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCkge1xuICAgICAgICB0aGlzLmNhbmNlbEV4aXN0aW5nUm93KGV2ZW50LCByb3csIHtrZWVwRWRpdGluZzogZmFsc2V9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIHRyeSB0byBjb25maXJtIHRoZSByb3dcbiAgICB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpO1xuICB9XG5cbiAgdHJhbnNsYXRlQ29udHJvbFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBDYW4gYmUgb3ZlcnJpZGUgYnkgc3ViY2xhc3NlcywgdG8gcmVzb2x2ZSBhbGwgZmllbGQgbmFtZVxuXG4gICAgLy8gVXNlIGNvbHVtbnMga2V5LCBoYXMgZGVmYXVsdCBuYW1lXG4gICAgY29uc3QgaTE4bkNvbHVtbktleSA9IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlPy5pbnN0YW50KGkxOG5Db2x1bW5LZXkpIHx8IGkxOG5Db2x1bW5LZXk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cblxuICBwcm90ZWN0ZWQgZWRpdFJvdyhldmVudDogRXZlbnR8dW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHtmb2N1c0NvbHVtbj86IHN0cmluZ30pOiBib29sZWFuIHtcblxuICAgIGlmICghdGhpcy5fZW5hYmxlZCB8fCAhdGhpcy5pbmxpbmVFZGl0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93ID09PSByb3cpIHJldHVybiB0cnVlOyAvLyBBbHJlYWR5IHRoZSBlZGl0ZWQgcm93XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSB0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghcm93LmVkaXRpbmcgJiYgIXRoaXMubG9hZGluZykge1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHMgJiYgb3B0cy5mb2N1c0NvbHVtbiB8fCB0aGlzLmZvY3VzQ29sdW1uO1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zdGFydEVkaXQocm93KTtcbiAgICB9XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSByb3c7XG4gICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5lbWl0KHJvdyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHNlbGVjdCByb3csIGJ5IHJvdy5pZCwgb3IgYnkgZGF0YS4gV0lsbCB1c2UgRW50aXR5VXRpbHMuZXF1YWxzKClcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzZWxlY3RSb3dCeUlkT3JEYXRhKGlkOiBudW1iZXIsIGRhdGE/OiBUKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICB0cnkge1xuXG4gICAgICAvLyBTZWxlY3QgYnkgcm93IGlkIChpZiBOT1QgYSBuZXcgcm93KVxuICAgICAgaWYgKGlzTm90TmlsKGlkKSB8fCBpZCAhPT0gLTEpIHtcbiAgICAgICAgZG9uZSA9IGF3YWl0IHRoaXMuc2VsZWN0Um93QnlJZChpZCk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IHJvdy5pZDogJywgaWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgYnkgZGF0YVxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgZG9uZSA9IGF3YWl0IHRoaXMuc2VsZWN0Um93QnlEYXRhKGRhdGEpO1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnNvbGUud2FybignW2FwcC10YWJsZV0gU2F2ZTogQ2Fubm90IHJlc2VsZWN0IHJvdyBieSBkYXRhOiAnLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjYXRjaChlcnIpIHtcbiAgICAgIC8vIExvZywgYnV0IGNvbnRpbnVlXG4gICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIHNlbGVjdGVkIHJvdyBpZiB1bmlxdWUgaW4gc2VsZWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHNpbmdsZVNlbGVjdGVkUm93KCk6IFRhYmxlRWxlbWVudDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkPy5sZW5ndGggPT09IDEgPyB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFswXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5EZWxldGVSb3dzKHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW47IH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3Mub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MsICdjYW5EZWxldGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7cm93c31cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlRGVsZXRlICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FuQ2FuY2VsUm93cyhyb3dzPzogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgLy8gR2V0IGRpcnR5IHJvd3NcbiAgICByb3dzID0gcm93cyB8fCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpLmZpbHRlcihyb3cgPT4gcm93LnZhbGlkYXRvcj8uZGlydHkpO1xuXG4gICAgaWYgKGlzRW1wdHlBcnJheShyb3dzKSkgcmV0dXJuIHRydWU7IC8vIE5vIGRpcnR5OiBPS1xuXG4gICAgLy8gQ2hlY2sgdXNpbmcgZW1pdHRlclxuICAgIGlmICh0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXNDYW5jZWwgPSBhd2FpdCBlbWl0UHJvbWlzZUV2ZW50KHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLCAnY2FuQ2FuY2VsJywge1xuICAgICAgICAgIGRldGFpbDoge3Jvd3N9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWlzQ2FuY2VsKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBjYW5jZWwgcm93cycsIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsICYmICghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFza0NhbmNlbENvbmZpcm1hdGlvbihudWxsLCByb3dzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZUJlZm9yZUFjdGlvbihzYXZlQWN0aW9uOiBTYXZlQWN0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgaWYgKCF0aGlzLmRpcnR5KSB7XG4gICAgICAvLyBDb250aW51ZSB3aXRob3V0IHNhdmVcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBzYXZlOiBib29sZWFuO1xuICAgIHN3aXRjaCAoc2F2ZUFjdGlvbikge1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZURlbGV0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmaWx0ZXInOlxuICAgICAgICBzYXZlID0gdGhpcy5zYXZlQmVmb3JlRmlsdGVyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICBzYXZlID0gdGhpcy5zYXZlQmVmb3JlU29ydDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzYXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yXG4gICAgbGV0IGNvbmZpcm1lZCA9IHRydWU7XG5cbiAgICBpZiAoc2F2ZSkge1xuICAgICAgaWYgKHRoaXMub25CZWZvcmVTYXZlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFzayBjb25maXJtYXRpb25cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBlbWl0UHJvbWlzZUV2ZW50KHRoaXMub25CZWZvcmVTYXZlLCAnYmVmb3JlU2F2ZScsIHtcbiAgICAgICAgICAgIGRldGFpbDoge2FjdGlvbjogc2F2ZUFjdGlvbiwgdmFsaWQ6IHRoaXMudmFsaWR9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uZmlybWVkID0gcmVzLmNvbmZpcm1lZDtcbiAgICAgICAgICBzYXZlID0gcmVzLnNhdmU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gZmFsc2U7IC8vIFVzZXIgY2FuY2VsXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIGlmIChzYXZlKSB7XG4gICAgICAgIC8vIFVzZXIgY29uZmlybWVkIHNhdmVcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpOyAvLyBSZXN0b3JlIGRpcnR5IGZsYWdcbiAgICAgICAgcmV0dXJuIHNhdmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7IC8vIE5vIHNhdmUgYnV0IGNvbnRpbnVlIGFjdGlvblxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWwgdGhlIGFjdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSByb3cgZGV0YWlsIHZpZXcuIEJ5IGRlZmF1bHQsIHdpbGwgdG8gb3BlbiByb3cgZGV0YWlsIHBhZ2UuXG4gICAqIENhbiBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzLCBCVVQgcHJlZmVyIHRvIHN1YnNjcmliZSBvbiBvbk9wZW5Sb3dcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9wZW5Sb3coaWQ6IElELCByb3c6IFRhYmxlRWxlbWVudDxUPik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmFsbG93Um93RGV0YWlsKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZyAmJiB0aGlzLmRpcnR5KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBPcGVuaW5nIHJvdyBkZXRhaWxzLCBidXQgdGFibGUgaGFzIHVuc2F2ZWQgY2hhbmdlcyEnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub25PcGVuUm93Lm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vbk9wZW5Sb3cuZW1pdChyb3cpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTm8gSUQgZGVmaW5lZDogdW5hYmxlIHRvIG9wZW4gZGV0YWlsc1xuICAgICAgaWYgKGlzTmlsKGlkKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gT3BlbmluZyByb3cgZGV0YWlscywgYnV0IGRhdGEgaGFzIG5vIGlkIScpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKGAke3RoaXMucm91dGVyLnVybH0vJHtpZC50b1N0cmluZygpfWAsIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHt9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9wZW5OZXdSb3dEZXRhaWwoZXZlbnQ/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuYWxsb3dSb3dEZXRhaWwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0aGlzLm9uTmV3Um93Lm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9uTmV3Um93LmVtaXQoZXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUZvcndhcmQoYCR7dGhpcy5yb3V0ZXIudXJsfS9uZXdgKTtcbiAgfVxuXG4gIC8vIGNhbiBiZSBvdmVycmlkZGVuIHRvIGFkZCBtb3JlIHJlcXVpcmVkIGNvbHVtbnNcbiAgcHJvdGVjdGVkIGdldFJlcXVpcmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gREVGQVVMVF9SRVFVSVJFRF9DT0xVTU5TO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFVzZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5nZXRQYWdlU2V0dGluZ3ModGhpcy5zZXR0aW5nc0lkLCBTRVRUSU5HU19ESVNQTEFZX0NPTFVNTlMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvcnRlZENvbHVtbigpOiBNYXRTb3J0YWJsZSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc2V0dGluZ3MuZ2V0UGFnZVNldHRpbmdzKHRoaXMuc2V0dGluZ3NJZCwgU0VUVElOR1NfU09SVEVEX0NPTFVNTik7XG4gICAgY29uc3QgcGFydHMgPSBkYXRhICYmIGRhdGEuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMgJiYgcGFydHMubGVuZ3RoID09PSAyICYmIHRoaXMuY29sdW1ucy5pbmNsdWRlcyhwYXJ0c1swXSkpIHtcbiAgICAgIHJldHVybiB7aWQ6IHBhcnRzWzBdLCBzdGFydDogcGFydHNbMV0gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVmYXVsdFNvcnRCeSkge1xuICAgICAgIHJldHVybiB7aWQ6IHRoaXMuZGVmYXVsdFNvcnRCeSwgc3RhcnQ6IHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gfHwgJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2V9O1xuICAgIH1cbiAgICByZXR1cm4ge2lkOiAnaWQnLCBzdGFydDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2V9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5nczxudW1iZXI+KHRoaXMuc2V0dGluZ3NJZCwgU0VUVElOR1NfUEFHRV9TSVpFKTtcbiAgICByZXR1cm4gcGFnZVNpemUgfHwgdGhpcy5kZWZhdWx0UGFnZVNpemU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGxldCB1c2VyQ29sdW1ucyA9IHRoaXMuZ2V0VXNlckNvbHVtbnMoKTtcblxuICAgIC8vIE5vIHVzZXIgb3ZlcnJpZGVcbiAgICBpZiAoIXVzZXJDb2x1bW5zKSB7XG4gICAgICAvLyBSZXR1cm4gZGVmYXVsdCwgd2l0aG91dCBjb2x1bW5zIHRvIGhpZGVcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZpeGVkIHN0YXJ0IGNvbHVtbnNcbiAgICBjb25zdCBmaXhlZFN0YXJ0Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFJlbW92ZSBlbmQgY29sdW1uc1xuICAgIGNvbnN0IGZpeGVkRW5kQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBSRVNFUlZFRF9FTkRfQ09MVU1OUy5pbmNsdWRlcyhjKSk7XG5cbiAgICAvLyBSZW1vdmUgZml4ZWQgY29sdW1ucyBmcm9tIHVzZXIgY29sdW1uc1xuICAgIHVzZXJDb2x1bW5zID0gdXNlckNvbHVtbnMuZmlsdGVyKGMgPT4gIWZpeGVkU3RhcnRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICFmaXhlZEVuZENvbHVtbnMuaW5jbHVkZXMoYykgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIEFkZCByZXF1aXJlZCBjb2x1bW5zIGlmIG1pc3NpbmdcbiAgICB1c2VyQ29sdW1ucy5wdXNoKC4uLnRoaXMuZ2V0UmVxdWlyZWRDb2x1bW5zKCkuZmlsdGVyKGMgPT4gIWZpeGVkU3RhcnRDb2x1bW5zLmluY2x1ZGVzKGMpICYmICFmaXhlZEVuZENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIXVzZXJDb2x1bW5zLmluY2x1ZGVzKGMpKSk7XG5cbiAgICByZXR1cm4gZml4ZWRTdGFydENvbHVtbnNcbiAgICAgIC5jb25jYXQodXNlckNvbHVtbnMpXG4gICAgICAuY29uY2F0KGZpeGVkRW5kQ29sdW1ucylcbiAgICAgIC8vIFJlbW92ZSBjb2x1bW5zIHRvIGhpZGVcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+ICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5zKCkge1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZ2V0RGlzcGxheUNvbHVtbnMoKTtcbiAgICBpZiAoIXRoaXMubG9hZGluZykgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlclN1YnNjcmlwdGlvbihzdWI6IFN1YnNjcmlwdGlvbikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3ViKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZShzdWIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQXV0b2NvbXBsZXRlRmllbGQ8RSA9IGFueSwgRUYgPSBhbnk+KGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25zPzogTWF0QXV0b2NvbXBsZXRlRmllbGRBZGRPcHRpb25zPEUsIEVGPik6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPEUsIEVGPiB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlci5hZGQoZmllbGROYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJMThuQ29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKHRoaXMuaTE4bkNvbHVtblByZWZpeCB8fCAnJykgKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGNvbHVtbk5hbWUpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVUYWJsZUlkKCkge1xuICAgIGNvbnN0IGlkID0gdGhpcy5sb2NhdGlvbi5wYXRoKHRydWUpXG4gICAgICAucmVwbGFjZSgvWz9dLiokL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1xcL1tcXGRdKy9nLCAnX2lkJylcbiAgICAgICsgJ18nXG4gICAgICAvLyBHZXQgYSBjb21wb25lbnQgdW5pcXVlIG5hbWUgLSBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAxMTQ2ODIvaG93LXRvLWFjY2Vzcy1jb21wb25lbnRzLXVuaXF1ZS1lbmNhcHN1bGF0aW9uLWlkLWluLWFuZ3VsYXItOVxuICAgICAgKyAodGhpcy5jb25zdHJ1Y3RvclsnybVjbXAnXT8uaWQgfHwgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiW3RhYmxlXSBpZCA9IFwiICsgaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRSb3dUb1RhYmxlKGluc2VydEF0PzogbnVtYmVyLCBvcHRzPzoge2ZvY3VzQ29sdW1uPzogc3RyaW5nOyBlZGl0aW5nPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjsgfSk6IFByb21pc2U8VGFibGVFbGVtZW50PFQ+fHVuZGVmaW5lZD4ge1xuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gQ2Fubm90IGFkZCBuZXcgcm93LCBiZWNhdXNlIHRoZSBwcmV2aW91cyBlZGl0ZWQgcm93IGNhbm5vdCBiZSBjb25maXJtZWQnKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZWRpdGluZyA9IHRoaXMuaW5saW5lRWRpdGlvbiAmJiAoIW9wdHMgfHwgb3B0cy5lZGl0aW5nICE9PSBmYWxzZSk7IC8vIHRydWUgYnkgZGVmYXVsdCwgaWYgaW5saW5lRWRpdGlvblxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5jcmVhdGVOZXcoaW5zZXJ0QXQsIHtlZGl0aW5nfSk7XG4gICAgaWYgKCFyb3cpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgIC8vIFVwZGF0ZSBmb2N1c2VkIGNvbHVtblxuICAgICAgdGhpcy5mb2N1c0ZpcnN0Q29sdW1uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9jdXNDb2x1bW4gPSBvcHRzPy5mb2N1c0NvbHVtbiB8fCB0aGlzLmZpcnN0VXNlckNvbHVtbjtcblxuICAgICAgLy8gRW1pdCBzdGFydCBlZGl0aW5nIGV2ZW50XG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IHJvdztcbiAgICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cuZW1pdChyb3cpO1xuICAgIH1cblxuICAgIHRoaXMudG90YWxSb3dDb3VudCsrO1xuICAgIHRoaXMudmlzaWJsZVJvd0NvdW50Kys7XG5cbiAgICB0aGlzLm1hcmtBc0RpcnR5KHtlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqL30pO1xuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQ2VsbFZhbHVlQ2hhbmdlcyhuYW1lOiBzdHJpbmcsIGZvcm1QYXRoPzogc3RyaW5nLCBlbWl0SW5pdGlhbFZhbHVlPzogYm9vbGVhbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgZm9ybVBhdGggPSBmb3JtUGF0aCB8fCBuYW1lO1xuICAgIGVtaXRJbml0aWFsVmFsdWUgPSBlbWl0SW5pdGlhbFZhbHVlIHx8IGZhbHNlO1xuICAgIGxldCBkZWYgPSB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXTtcbiAgICBpZiAoZGVmICYmIChkZWYuZm9ybVBhdGggIT09IGZvcm1QYXRoIHx8IGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBlbWl0SW5pdGlhbFZhbHVlKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FscmVhZHkgcmVnaXN0ZXIgYSBjZWxsIHZhbHVlIGNoYW5nZSBmb3IgdGhpcyBuYW1lLCB3aXRoIGRpZmZlcmVudCBcXCdmb3JtUGF0aFxcJyBvciBcXCdlbWl0SW5pdGlhbFZhbHVlXFwnLiBQbGVhc2UgdXNlIHNhbWUgYXJndW1lbnRzLicpO1xuICAgIH1cblxuICAgIC8vIE5vdCBleGlzdHM6IHJlZ2lzdGVyIG5ldyBkZWZpbml0aW9uXG4gICAgaWYgKCFkZWYpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIE5ldyBsaXN0ZW5lciB7JHtuYW1lfX0gZm9yIHZhbHVlIGNoYW5nZXMgb24gcGF0aCAke2Zvcm1QYXRofWApO1xuICAgICAgZGVmID0ge1xuICAgICAgICBzdWJqZWN0OiBuZXcgU3ViamVjdDxhbnk+KCksXG4gICAgICAgIHN1YnNjcmlwdGlvbjogbnVsbCxcbiAgICAgICAgZm9ybVBhdGgsXG4gICAgICAgIGVtaXRJbml0aWFsVmFsdWVcbiAgICAgIH07XG4gICAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXSA9IGRlZjtcblxuICAgICAgLy8gU3RhcnQgdGhlIGxpc3RlbmVyLCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnN1YnNjcmliZShyb3cgPT4gdGhpcy5zdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZSwgcm93KSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWYuc3ViamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKSAhPT0gc2hvdykge1xuICAgICAgaWYgKCFzaG93KSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnB1c2goY29sdW1uTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZXhjbHVkZXNDb2x1bW5zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zICYmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRzV2l0aFVwcGVyQ2FzZShpbnB1dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbnB1dCAmJiBpbnB1dC50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgLy8gU2hvdWxkIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMsIGRlcGVuZGluZyBvbiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza0RlbGV0ZUNvbmZpcm1hdGlvbihldmVudD86IEV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy51bmRvYWJsZURlbGV0aW9uKSB7XG4gICAgICAvLyBTcGVjaWFsIG1lc3NhZ2UsIGZvciB1bmRvYWJsZSBkZWxldGlvblxuICAgICAgcmV0dXJuIEFsZXJ0cy5hc2tDb25maXJtYXRpb24ocm93cz8ubGVuZ3RoID09PSAxID8gJ0NPTkZJUk0uREVMRVRFX1JPVycgOiAnQ09ORklSTS5ERUxFVEVfUk9XUycsIHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgZXZlbnQpO1xuICAgIH1cbiAgICAvLyBJbW1lZGlhdGUgZGVsZXRpb24gYWN0aW9uXG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCB0cnVlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrQ2FuY2VsQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQsIHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBBbGVydHMuYXNrQ29uZmlybWF0aW9uKHJvd3M/Lmxlbmd0aCA9PT0gMSA/ICdDT05GSVJNLkNBTkNFTF9ST1cnIDogJ0NPTkZJUk0uQ0FOQ0VMX1JPV1MnLCB0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tSZXN0b3JlQ29uZmlybWF0aW9uKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0FjdGlvbkNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGZhbHNlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudFxcJ3MgY29uc3RydWN0b3InKTtcbiAgICByZXR1cm4gVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEVycm9yKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjt9KSB7XG4gICAgdGhpcy5zZXRFcnJvcih1bmRlZmluZWQsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJvd0Vycm9yKHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXRoaXMuZm9ybUVycm9yQWRhcHRlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmZvcm1FcnJvckFkYXB0ZXIudHJhbnNsYXRlRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCB7XG4gICAgICAuLi50aGlzLmVycm9yVHJhbnNsYXRvck9wdGlvbnMsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RXJyb3IodmFsdWU6IHN0cmluZywgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuO30pIHtcbiAgICBpZiAodGhpcy5lcnJvclN1YmplY3QudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBkYXRhIGVxdWFsaXR5IChkZWZhdWx0IGJ5IGlkLCB1c2luZyBFbnRpdHlVdGlscy5lcXVhbHMoKSlcbiAgICogQ2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBjb21wYXJlXG4gICAqXG4gICAqIEBwYXJhbSBkMVxuICAgKiBAcGFyYW0gZDJcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGVxdWFscyhkMTogVCwgZDI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRW50aXR5VXRpbHMuZXF1YWxzKGQxLCBkMiwgJ2lkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya1Jvd0FzRGlydHkocm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFVmVudD86IGJvb2xlYW47IH0pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKHJvdykgcm93LnZhbGlkYXRvcj8ubWFya0FzRGlydHkob3B0cyk7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0ZW5Tb3J0QW5kUGFnaW5hdGlvbkV2ZW50cygpIHtcblxuICAgIGlmICghdGhpcy50YWJsZSkge1xuXG4gICAgICAvLyBERUJVRyBvbmx5IC0tIGFsZXJ0IHVzZXIgdGhhdCB0YWJsZSBub3QgZm91bmQgaW4gdGVtcGxhdGVcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gIXRoaXMudGFibGUgJiYgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgPG1hdC10YWJsZT4gaW4gdGhlIEhUTUwgdGVtcGxhdGUgKGFmdGVyIHdhaXRpbmcgNTAwbXMpISBDb21wb25lbnQ6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApLCA1MDApO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIHN1cmUgdG8gd2FpdCB0aGUgdGFibGVcbiAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gISF0aGlzLnRhYmxlLCB7c3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCwgc3RvcEVycm9yOiBmYWxzZS8qYXZvaWQgZXJyb3Igd2hlbiBkZXN0b3J5aW5nIHRoZSB0YWJsZSovfSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICAvLyBMaXN0ZW4gc29ydCBldmVudHNcbiAgICAgICAgdGhpcy5zb3J0ICYmIHRoaXMuc29ydC5zb3J0Q2hhbmdlXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgICBtZXJnZU1hcChhc3luYyAoKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgICBmaWx0ZXIocmVzID0+IHJlcyA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHNvcnQgaW4gc2V0dGluZ3NcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gW3RoaXMuc29ydC5hY3RpdmUsIHRoaXMuc29ydC5kaXJlY3Rpb24gfHwgJ2FzYyddLmpvaW4oJzonKTtcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5zYXZlUGFnZVNldHRpbmcodGhpcy5zZXR0aW5nc0lkLCB2YWx1ZSwgU0VUVElOR1NfU09SVEVEX0NPTFVNTik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfHwgRU1QVFksXG5cbiAgICAgICAgLy8gTGlzdGVuIHBhZ2luYXRvciBldmVudHNcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0b3IucGFnZVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKF8pID0+IHRoaXMuc2F2ZUJlZm9yZUFjdGlvbignc29ydCcpKSxcbiAgICAgICAgICAgIGZpbHRlcihzYXZlZCA9PiBzYXZlZCA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAvLyBTYXZlIHBhZ2Ugc2l6ZSBpbiBzZXR0aW5nc1xuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0dGluZ3Muc2F2ZVBhZ2VTZXR0aW5nKHRoaXMuc2V0dGluZ3NJZCwgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsIFNFVFRJTkdTX1BBR0VfU0laRSkpXG4gICAgICAgICAgKSB8fCBFTVBUWVxuICAgICAgKVxuICAgICAgLy8gUmVmcmVzaCBvbiBhbnkgc29ydCBvciBwYWdpbmF0b3IgZXZlbnRzXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5vblNvcnQuZW1pdCh2YWx1ZSk7XG4gICAgICAgIHRoaXMub25SZWZyZXNoLmVtaXQodmFsdWUpXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBzb3J0IG9yZGVyLCByZXNldCBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlLlxuICAgIGlmICh0aGlzLnNvcnQgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlZGl0Um93QnlJZChldmVudDogRXZlbnR8dW5kZWZpbmVkLCBpZDogbnVtYmVyLCBvcHRzPzoge2ZvY3VzQ29sdW1uPzogc3RyaW5nfSkge1xuICAgIGlmIChpZCA8IDApIHJldHVybjtcbiAgICBpZiAoaWQgPj0gdGhpcy52aXNpYmxlUm93Q291bnQpIHtcbiAgICAgIHRoaXMuYWRkUm93KGV2ZW50LCB1bmRlZmluZWQsIHsuLi5vcHRzLCBlZGl0aW5nOiB0cnVlfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywgb3B0cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nKHZhbHVlOiBib29sZWFuLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IHZhbHVlKSAge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlTmV3Um93KGV2ZW50OiBFdmVudHx1bmRlZmluZWQsIHJvdzogVGFibGVFbGVtZW50PFQ+KSB7Ly8gTWFrZSBzdXJlIHJvdyB3aWxsIGJlIGNhbmNlbGxlZCwgYW5kIE5PVCBkZWxldGVkXG4gICAgaWYgKHJvdy5pZCAhPT0gLTEpIHRocm93IG5ldyBFcnJvcignUm93IG11c3QgaGF2ZSBpZCA9IC0xJyk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDsgLy8gdW5zZWxlY3Qgcm93XG4gICAgdGhpcy5fZGF0YVNvdXJjZS5jYW5jZWxPckRlbGV0ZShyb3cpO1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93Lm5leHQocm93KTtcbiAgICB0aGlzLnRvdGFsUm93Q291bnQtLTtcbiAgICB0aGlzLnZpc2libGVSb3dDb3VudC0tO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVFeGlzdGluZ1JvdyhldmVudDogRXZlbnR8bnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7aW50ZXJhY3RpdmU/OiBib29sZWFuO30pIHtcbiAgICAvLyBNYWtlIHN1cmUgcm93IHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgTk9UIGRlbGV0ZWRcbiAgICBpZiAocm93LmlkID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdSb3cgbXVzdCBoYXZlIGFuIGlkJyk7XG5cbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiAwOyAvLyBTS2lwXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLmRlbGV0ZVJvdyhudWxsLCByb3csIG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxFeGlzdGluZ1JvdyhldmVudDogRXZlbnR8dW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHtpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbjt9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHJvdyB3aWxsIGJlIGNhbmNlbGxlZCwgYW5kIE5PVCBkZWxldGVkXG4gICAgaWYgKHJvdy5pZCA9PT0gLTEgfHwgIXJvdy5lZGl0aW5nKSB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBjYW5ub3QgYmUgY2FuY2VsaW5nLCBidXQgb25seSBkZWxldGluZycpO1xuXG4gICAgY29uc3QgY29uZmlybWVkID0gKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvbiwgaWYgY2FuY2VsXG4gICAgaWYgKCFjb25maXJtZWQgJiYgcm93LmRpcnR5ICYmICh0aGlzLmNvbmZpcm1CZWZvcmVDYW5jZWwgfHwgdGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZXJzLmxlbmd0aCA+IDApKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY2FuQ2FuY2VsUm93cyhbcm93XSwgb3B0cylcbiAgICAgICAgLnRoZW4oY29uZmlybSA9PiB7XG4gICAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgICAgaWYgKGNvbmZpcm0pIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywge2ludGVyYWN0aXZlOiBmYWxzZX0pO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBrZWVwRWRpdGluZyA9IHJvdy5lZGl0aW5nICYmICghb3B0cyB8fCBvcHRzLmtlZXBFZGl0aW5nICE9PSBmYWxzZSk7XG4gICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7IC8vIHVuc2VsZWN0IHJvd1xuICAgIHRoaXMuX2RhdGFTb3VyY2UuY2FuY2VsT3JEZWxldGUocm93KTtcbiAgICB0aGlzLm9uQ2FuY2VsT3JEZWxldGVSb3cubmV4dChyb3cpO1xuXG4gICAgLy8gTWFyayByb3cgYXMgcHJpc3RpbmVcbiAgICB0aGlzLmNoZWNrSWZSb3dQcmlzdGluZShyb3cpO1xuXG4gICAgLy8gUmVzdG9yZSBlZGl0aW5nIHN0YXRlXG4gICAgaWYgKGtlZXBFZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRSb3codW5kZWZpbmVkLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlJvd1ByaXN0aW5lKHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47IG9ubHlTZWxmPzogYm9vbGVhbn0pIHtcbiAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZVxuICAgIGNvbnN0IG1hcmtSb3dBc1ByaXN0aW5lID0gdGhpcy5kYXRhU291cmNlPy5jb25maWcucmVzdG9yZU9yaWdpbmFsRGF0YU9uQ2FuY2VsID09PSB0cnVlO1xuICAgIGlmIChtYXJrUm93QXNQcmlzdGluZSkge1xuICAgICAgcm93LnZhbGlkYXRvcj8ubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgaXMgbm93IHByaXN0aW5lXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5vbmx5U2VsZiAhPT0gdHJ1ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSWZQcmlzdGluZShvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSWZQcmlzdGluZShvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47fSkge1xuICAgIGlmICghdGhpcy5kaXJ0eSkgcmV0dXJuOyAvLyBBbHJlYWR5IHByaXN0aW5lXG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgY29uc3QgcHJpc3RpbmUgPSAocm93cyB8fCBbXSkuZmluZEluZGV4KHJvdyA9PiByb3cuZGlydHkpID09PSAtMTtcbiAgICBpZiAocHJpc3RpbmUpIHRoaXMubWFya0FzUHJpc3RpbmUob3B0cyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyKGZpbHRlcjogRiwgb3B0czogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyB9KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gQXBwbHlpbmcgZmlsdGVyJywgZmlsdGVyKTtcbiAgICB0aGlzLl9maWx0ZXIgPSBmaWx0ZXI7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5lbWl0RXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPiAwKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5EYXRhc291cmNlTG9hZGluZyhkYXRhU291cmNlOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4pIHtcbiAgICBpZiAoIWRhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIG5vdCBzZXQgIScpO1xuXG4gICAgLy8gQ2xlYW5pbmcgcHJldmlvdXMgc3Vic2NyaXB0aW9uIG9uIGRhdGFzb3VyY2VcbiAgICBpZiAoaXNOb3ROaWwodGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBNYW55IGNhbGwgdG8gbGlzdGVuRGF0YXNvdXJjZSgpOiBDbGVhbmluZyBwcmV2aW91cyBzdWJzY3JpcHRpb25zLi4uJyk7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBQcm9wYWdlIGxvYWRpbmcgdG8gdGFibGVcbiAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbiA9IHRoaXMuX2RhdGFTb3VyY2UubG9hZGluZ1N1YmplY3RcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXG4gICAgICAgICAgICAvLyBJZiBjaGFuZ2VkIHRvIFRydWU6IHByb3BhZ2F0ZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gICAgICAgICAgICB0YXAoKGxvYWRpbmcpID0+IGxvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKHRydWUpKSxcblxuICAgICAgICAgICAgLy8gSWYgY2hhbmdlZCB0byBGYWxzZTogd2FpdCAyNTBtcyBiZWZvcmUgcHJvcGFnYXRlICh0byBtYWtlIHN1cmUgdGhlIHNwaW5uZXIgaGFzIGJlZW4gZGlzcGxheWVkKVxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgICB0YXAobG9hZGluZyA9PiAhbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcoZmFsc2UpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBzdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gTGlzdGVuZXIgd2l0aCBuYW1lIHsnICsgbmFtZSArICd9IG5vdCByZWdpc3RlcmVkISBQbGVhc2UgY2FsbCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMoKSBiZWZvcmU7Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBTdGFydCB2YWx1ZXMgY2hhbmdlcyBvbiByb3cgcGF0aCB7JHtkZWYuZm9ybVBhdGh9fWApO1xuICAgIH1cblxuICAgIC8vIExpc3RlbiB2YWx1ZSBjaGFuZ2VzLCBhbmQgcmVkaXJlY3QgdG8gZXZlbnQgZW1pdHRlclxuICAgIGNvbnN0IGNvbnRyb2wgPSByb3cudmFsaWRhdG9yICYmIEFwcEZvcm1VdGlscy5nZXRDb250cm9sRnJvbVBhdGgocm93LnZhbGlkYXRvciwgZGVmLmZvcm1QYXRoKTtcbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlXSBDb3VsZCBub3QgbGlzdGVuIGNlbGwgY2hhbmdlczogbm8gdmFsaWRhdG9yIG9yIGludmFsaWQgZm9ybSBwYXRoIHske2RlZi5mb3JtUGF0aH19YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBkb24ndCBlbWl0IGlmIGNvbnRyb2wgaXMgZGlzYWJsZWRcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiBkZWYuc3ViamVjdC5uZXh0KHZhbHVlKSk7XG5cbiAgICAgIC8vIEVtaXQgdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAgaWYgKGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICBkZWYuc3ViamVjdC5uZXh0KGNvbnRyb2wudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBkZXN0cm95PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFN0b3AgdmFsdWUgY2hhbmdlcyBvbiByb3cgcGF0aCB7JyArIGRlZi5mb3JtUGF0aCArICd9Jyk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRlc3Ryb3kgJiYgZGVmLnN1YmplY3QpIHtcbiAgICAgIGRlZi5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICBkZWYuc3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBwZXJtYW5lbnQgc2VsZWN0aW9uIG1vZGVsXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBpbml0UGVybWFuZW50U2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnBlcm1hbmVudFNlbGVjdGlvbikgdGhyb3cgbmV3IEVycm9yKCdpbml0UGVybWFuZW50U2VsZWN0aW9uKCkgYWxyZWFkeSBjYWxsZWQhJyk7XG5cbiAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSk7XG4gICAgbGV0IHNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSBmYWxzZTtcblxuICAgIC8vIExpc3RlbiBzb3J0IGNoYW5nZVxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uU29ydC5zdWJzY3JpYmUoKCkgPT4gKHNlbGVjdGlvbkNoYW5nZWRQcmV2ZW50ZWQgPSB0cnVlKSkgLy8gcHJldmVudCBzZWxlY3Rpb24gY2hhbmdlIG9uIHNvcnRcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGRhdGFzb3VyY2UgdXBkYXRlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5yb3dzU3ViamVjdFxuICAgICAgICAvLyByZXN0b3JlIHRoZSAnYWRkaW5nJyBzZWxlY3Rpb24gKGZvciBleGFtcGxlIGFmdGVyIGEgcGFnZSBvciBzb3J0IGNoYW5nZSlcbiAgICAgICAgLnN1YnNjcmliZSgocm93cykgPT4ge1xuICAgICAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50ID0gcm93cy5sZW5ndGg7XG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZFByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1hbmVudFNlbGVjdGlvbklkcyA9ICh0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZWxlY3RlZCB8fCBbXSkubWFwKEVudGl0eVV0aWxzLmdldElkKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvbiguLi5yb3dzLmZpbHRlcigocm93KSA9PiBwZXJtYW5lbnRTZWxlY3Rpb25JZHMuaW5jbHVkZXMoQXBwVGFibGVVdGlscy5nZXRFbnRpdHlJZChyb3cpKSkpO1xuICAgICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIC8vIExpc3RlbiBzZWxlY3Rpb24gY2hhbmdlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZWRcbiAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+ICFzZWxlY3Rpb25DaGFuZ2VkUHJldmVudGVkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoc2VsZWN0aW9uQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgLy8gYWRkIHRvIHNlbGVjdGlvblxuICAgICAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2UuYWRkZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgICAgIC4uLih0aGlzLnBlcm1hbmVudFNlbGVjdGlvbi5zZWxlY3RlZCB8fCBbXSlcbiAgICAgICAgICAgICAgICAvLyBBZGQgbmV3IGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgLmNvbmNhdCguLi5BcHBUYWJsZVV0aWxzLmdldEVudGl0aWVzKHNlbGVjdGlvbkNoYW5nZS5hZGRlZCkuZmlsdGVyKEVudGl0eVV0aWxzLmhhc0lkKSlcbiAgICAgICAgICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGVudGl0aWVzIChNYW50aXMgIzU1MzUxKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoRW50aXR5VXRpbHMuYXJyYXlEaXN0aW5jdEZpbHRlckZuKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVtb3ZlIGZyb20gc2VsZWN0aW9uXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZElkcyA9IEFwcFRhYmxlVXRpbHMuZ2V0RW50aXR5SWRzKHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkKTtcbiAgICAgICAgICAgIHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNldFNlbGVjdGlvbihcbiAgICAgICAgICAgICAgLi4uKHRoaXMucGVybWFuZW50U2VsZWN0aW9uLnNlbGVjdGVkIHx8IFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVudGl0eSkgPT4gRW50aXR5VXRpbHMuaGFzSWQoZW50aXR5KSAmJiAhcmVtb3ZlZElkcy5pbmNsdWRlcyhlbnRpdHkuaWQpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbn1cblxuIl19
|