ng-virtual-list 18.7.2 → 18.7.3
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/README.md +4 -0
- package/esm2022/lib/components/ng-virtual-list-item.component.mjs +80 -10
- package/esm2022/lib/const/index.mjs +6 -5
- package/esm2022/lib/models/render-item-config.model.mjs +1 -1
- package/esm2022/lib/ng-virtual-list.component.mjs +4 -1
- package/esm2022/lib/ng-virtual-list.service.mjs +2 -1
- package/esm2022/lib/utils/trackBox.mjs +8 -2
- package/fesm2022/ng-virtual-list.mjs +94 -13
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-virtual-list-item.component.d.ts +7 -0
- package/lib/const/index.d.ts +5 -4
- package/lib/models/render-item-config.model.d.ts +4 -0
- package/lib/ng-virtual-list.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -274,6 +274,9 @@ export class NgVirtualListComponent {
|
|
|
274
274
|
this._initialized = signal(false);
|
|
275
275
|
this.$initialized = toObservable(this._initialized);
|
|
276
276
|
this._trackBox.displayComponents = this._displayComponents;
|
|
277
|
+
toObservable(this._list).pipe(takeUntilDestroyed(), filter(v => !!v), tap(v => {
|
|
278
|
+
this._service.listElement = v.nativeElement;
|
|
279
|
+
})).subscribe();
|
|
277
280
|
const $trackBy = toObservable(this.trackBy), $selectByClick = toObservable(this.selectByClick);
|
|
278
281
|
$selectByClick.pipe(takeUntilDestroyed(), tap(v => {
|
|
279
282
|
this._service.selectByClick = v;
|
|
@@ -647,4 +650,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
647
650
|
type: ViewChild,
|
|
648
651
|
args: ['snapRendererContainer', { read: ViewContainerRef }]
|
|
649
652
|
}] } });
|
|
650
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNVLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQ3ZFLE1BQU0sRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsR0FFMUcsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUNwSCxtQ0FBbUMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQ3JJLGdCQUFnQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUMxSSx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLHVCQUF1QixHQUN4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Q0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzt3R0F0MUJVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLHVnRkFGdEIsQ0FBQyxvQkFBb0IsQ0FBQyx1YkFhUSxnQkFBZ0IscUhBR2IsZ0JBQWdCLDZCQ2pFOUQsOFlBU007OzRGRDBDTyxzQkFBc0I7a0JBVGxDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsS0FBSyxtQkFHQSx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxTQUFTLGFBQy9CLENBQUMsb0JBQW9CLENBQUM7d0RBY3pCLGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJbkQsaUJBQWlCO3NCQUR4QixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsXHJcbiAgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCB2aWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9BVVRPLCBCRUhBVklPUl9JTlNUQU5ULCBDTEFTU19MSVNUX0hPUklaT05UQUwsIENMQVNTX0xJU1RfVkVSVElDQUwsIERFRkFVTFRfRElSRUNUSU9OLCBERUZBVUxUX0RZTkFNSUNfU0laRSxcclxuICBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTiwgREVGQVVMVF9JVEVNX1NJWkUsIERFRkFVTFRfQlVGRkVSX1NJWkUsIERFRkFVTFRfTElTVF9TSVpFLCBERUZBVUxUX1NOQVAsIERFRkFVTFRfU05BUFBJTkdfTUVUSE9ELFxyXG4gIEhFSUdIVF9QUk9QX05BTUUsIExFRlRfUFJPUF9OQU1FLCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIFBYLCBTQ1JPTEwsIFNDUk9MTF9FTkQsIFRPUF9QUk9QX05BTUUsIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSxcclxuICBERUZBVUxUX01BWF9CVUZGRVJfU0laRSxcclxuICBERUZBVUxUX1NFTEVDVF9NRVRIT0QsXHJcbiAgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0sIElTY3JvbGxFdmVudCwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgSWQsIElTaXplIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9ucywgTWV0aG9kRm9yU2VsZWN0aW5nLCBNZXRob2RzRm9yU2VsZWN0aW5nLCBTbmFwcGluZ01ldGhvZCB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxFdmVudCwgdG9nZ2xlQ2xhc3NOYW1lIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnMsIFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgVHJhY2tCb3ggfSBmcm9tICcuL3V0aWxzL3RyYWNrQm94JztcclxuaW1wb3J0IHsgaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkIH0gZnJvbSAnLi91dGlscy9zbmFwcGluZy1tZXRob2QnO1xyXG5pbXBvcnQgeyBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkUsIElTX0ZJUkVGT1ggfSBmcm9tICcuL3V0aWxzL2Jyb3dzZXInO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RlbHMvYmFzZS12aXJ0dWFsLWxpc3QtaXRlbS1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQkMSB9IGZyb20gJy4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IGlzRGlyZWN0aW9uIH0gZnJvbSAnLi91dGlscy9pc0RpcmVjdGlvbic7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IGlzTWV0aG9kRm9yU2VsZWN0aW5nIH0gZnJvbSAnLi91dGlscy9pc01ldGhvZEZvclNlbGVjdGluZyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5cclxuY29uc3QgUk9MRV9MSVNUID0gJ2xpc3QnLFxyXG4gIFJPTEVfTElTVF9CT1ggPSAnbGlzdGJveCc7XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0JyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXHJcbiAgcHJvdmlkZXJzOiBbTmdWaXJ0dWFsTGlzdFNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBfX25leHRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZSA9IGluamVjdChOZ1ZpcnR1YWxMaXN0U2VydmljZSk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyc0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX2xpc3RDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NuYXBSZW5kZXJlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX3NuYXBDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwZWRDb250YWluZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdzbmFwcGVkJyk7XHJcblxyXG4gIHByaXZhdGUgX2NvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NvbnRhaW5lcicpO1xyXG5cclxuICBwcml2YXRlIF9saXN0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD4+KCdsaXN0Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGJlZW4gc2Nyb2xsZWQuXHJcbiAgICovXHJcbiAgb25TY3JvbGwgPSBvdXRwdXQ8SVNjcm9sbEV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBjb21wbGV0ZWQgc2Nyb2xsaW5nLlxyXG4gICAqL1xyXG4gIG9uU2Nyb2xsRW5kID0gb3V0cHV0PElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgdmlld3BvcnQgc2l6ZSBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIG9uVmlld3BvcnRDaGFuZ2UgPSBvdXRwdXQ8SVNpemU+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gYW4gZWxlbWVudCBpcyBjbGlja2VkLlxyXG4gICAqL1xyXG4gIG9uSXRlbUNsaWNrID0gb3V0cHV0PElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IHVuZGVmaW5lZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBhbiBlbGVtZW50cyBhcmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgb25TZWxlY3QgPSBvdXRwdXQ8QXJyYXk8SWQ+IHwgSWQgfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1zT3B0aW9ucyA9IHtcclxuICAgIHRyYW5zZm9ybTogKHY6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKHYsIHRoaXMuaXRlbVNpemUoKSk7XHJcbiAgICAgIHJldHVybiB2O1xyXG4gICAgfSxcclxuICB9IGFzIGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29sbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqL1xyXG4gIGl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oe1xyXG4gICAgLi4udGhpcy5faXRlbXNPcHRpb25zLFxyXG4gIH0pO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBpdGVtcy5cclxuICAgKi9cclxuICBzZWxlY3RlZElkcyA9IGlucHV0PEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBJZiBmYWxzZSwgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGNvbmZpZy5zZWxlY3QgbWV0aG9kIHBhc3NlZCB0byB0aGUgdGVtcGxhdGU7IFxyXG4gICAqIGlmIHRydWUsIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IGNsaWNraW5nIG9uIGl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIHNlbGVjdEJ5Q2xpY2sgPSBpbnB1dDxib29sZWFuPihERUZBVUxUX1NFTEVDVF9CWV9DTElDSyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciBlbGVtZW50cyB3aWxsIHNuYXAuIERlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICovXHJcbiAgc25hcCA9IGlucHV0PGJvb2xlYW4+KERFRkFVTFRfU05BUCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGVyaW1lbnRhbCFcclxuICAgKiBFbmFibGVzIGJ1ZmZlciBvcHRpbWl6YXRpb24uXHJcbiAgICogQ2FuIG9ubHkgYmUgdXNlZCBpZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbiBhcmUgbm90IGFkZGVkIG9yIHVwZGF0ZWQuIE90aGVyd2lzZSwgYXJ0aWZhY3RzIGluIHRoZSBmb3JtIG9mIHR3aXRjaGluZyBvZiB0aGUgc2Nyb2xsIGFyZWEgYXJlIHBvc3NpYmxlLlxyXG4gICAqIFdvcmtzIG9ubHkgaWYgdGhlIHByb3BlcnR5IGR5bmFtaWMgPSB0cnVlXHJcbiAgICovXHJcbiAgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IGlucHV0PGJvb2xlYW4+KERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgICovXHJcbiAgaXRlbVJlbmRlcmVyID0gaW5wdXQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVJlbmRlcmVyID0gc2lnbmFsPFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVXNlIGBpdGVtQ29uZmlnTWFwYCBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIHN0aWNreU1hcCA9IGlucHV0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgc3RpY2t5IHBvc2l0aW9uIGFuZCBzZWxlY3RhYmxlIGZvciB0aGUgbGlzdCBpdGVtIGVsZW1lbnQuIElmIHN0aWNreSBwb3NpdGlvbiBpcyBncmVhdGVyIHRoYW4gMCwgdGhlbiBzdGlja3kgcG9zaXRpb24gaXMgYXBwbGllZC4gXHJcbiAgICogSWYgdGhlIHN0aWNreSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gYDBgLCB0aGVuIHRoZSBzdGlja3kgcG9zaXRpb24gbW9kZSBpcyBlbmFibGVkIGZvciB0aGUgZWxlbWVudC4gYDFgIC0gcG9zaXRpb24gc3RhcnQsIGAyYCAtIHBvc2l0aW9uIGVuZC4gRGVmYXVsdCB2YWx1ZSBpcyBgMGAuXHJcbiAgICogc2VsZWN0YWJsZSBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQgb3Igbm90LiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xOC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL21vZGVscy9pdGVtLWNvbmZpZy1tYXAubW9kZWwudHNcclxuICAgKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICAgKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICAgKi9cclxuICBpdGVtQ29uZmlnTWFwID0gaW5wdXQ8SVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcD4oe30pO1xyXG5cclxuICBwcml2YXRlIF9pdGVtU2l6ZU9wdGlvbnMgPSB7XHJcbiAgICB0cmFuc2Zvcm06ICh2OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX0lURU1fU0laRTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2YWwgPSBOdW1iZXIodik7XHJcbiAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsKSB8fCB2YWwgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdmFsO1xyXG4gICAgfSxcclxuICB9IGFzIGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJywgdGhlbiB0aGUgaGVpZ2h0IG9mIGEgdHlwaWNhbCBlbGVtZW50LiBJZiBkaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCcsIHRoZW4gdGhlIHdpZHRoIG9mIGEgdHlwaWNhbCBlbGVtZW50LlxyXG4gICAqIElnbm9yZWQgaWYgdGhlIGR5bmFtaWNTaXplIHByb3BlcnR5IGlzIHRydWUuXHJcbiAgICovXHJcbiAgaXRlbVNpemUgPSBpbnB1dDxudW1iZXI+KERFRkFVTFRfSVRFTV9TSVpFLCB7IC4uLnRoaXMuX2l0ZW1TaXplT3B0aW9ucyB9KTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSB0aGVuIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBjYW4gaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBpcyBpZ25vcmVkLlxyXG4gICAqIElmIGZhbHNlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGhhdmUgYSBmaXhlZCBzaXplIHNwZWNpZmllZCBieSB0aGUgaXRlbVNpemUgcHJvcGVydHkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIGR5bmFtaWNTaXplID0gaW5wdXQoREVGQVVMVF9EWU5BTUlDX1NJWkUpO1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZWxlbWVudHMgYXJlIHBsYWNlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcInZlcnRpY2FsXCIuXHJcbiAgICovXHJcbiAgZGlyZWN0aW9uID0gaW5wdXQ8RGlyZWN0aW9uPihERUZBVUxUX0RJUkVDVElPTik7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1PZmZzZXRUcmFuc2Zvcm0gPSB7XHJcbiAgICB0cmFuc2Zvcm06ICh2OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1wiaXRlbU9mZnNldFwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiBVc2UgXCJidWZmZXJTaXplXCIgYW5kIFwibWF4QnVmZmVyU2l6ZVwiLicpO1xyXG4gICAgfVxyXG4gIH0gYXMgYW55O1xyXG5cclxuICAvKipcclxuICAgKiBOdW1iZXIgb2YgZWxlbWVudHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdmlzaWJpbGl0eS4gRGVmYXVsdCB2YWx1ZSBpcyAyLlxyXG4gICAqIEBkZXByZWNhdGVkIFwiaXRlbU9mZnNldFwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiBVc2UgXCJidWZmZXJTaXplXCIgYW5kIFwibWF4QnVmZmVyU2l6ZVwiLlxyXG4gICAqL1xyXG4gIGl0ZW1zT2Zmc2V0ID0gaW5wdXQ8bnVtYmVyPihERUZBVUxUX0JVRkZFUl9TSVpFLCB7IC4uLnRoaXMuX2l0ZW1PZmZzZXRUcmFuc2Zvcm0gfSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgYnVmZmVyU2l6ZSA9IGlucHV0PG51bWJlcj4oREVGQVVMVF9CVUZGRVJfU0laRSk7XHJcblxyXG4gIHByaXZhdGUgX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0gPSB7XHJcbiAgICB0cmFuc2Zvcm06ICh2OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9IHRoaXMuYnVmZmVyU2l6ZSgpO1xyXG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPD0gYnVmZmVyU2l6ZSkge1xyXG4gICAgICAgIHJldHVybiBidWZmZXJTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gIH0gYXMgYW55O1xyXG5cclxuICAvKipcclxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDEwMC5cclxuICAgKiBJZiBtYXhCdWZmZXJTaXplIGlzIHNldCB0byBiZSBncmVhdGVyIHRoYW4gYnVmZmVyU2l6ZSwgdGhlbiBhZGFwdGl2ZSBidWZmZXIgbW9kZSBpcyBlbmFibGVkLlxyXG4gICAqIFRoZSBncmVhdGVyIHRoZSBzY3JvbGwgc2l6ZSwgdGhlIG1vcmUgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCBmb3IgcmVuZGVyaW5nLlxyXG4gICAqL1xyXG4gIG1heEJ1ZmZlclNpemUgPSBpbnB1dDxudW1iZXI+KERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFLCB7IC4uLnRoaXMuX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0gfSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIG1ldGhvZC5cclxuICAgKiAnZGVmYXVsdCcgLSBOb3JtYWwgZ3JvdXAgcmVuZGVyaW5nLlxyXG4gICAqICdhZHZhbmNlZCcgLSBUaGUgZ3JvdXAgaXMgcmVuZGVyZWQgb24gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLiBMaXN0IGl0ZW1zIGJlbG93IHRoZSBncm91cCBhcmUgbm90IHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIHNuYXBwaW5nTWV0aG9kID0gaW5wdXQ8U25hcHBpbmdNZXRob2Q+KERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKTtcclxuXHJcbiAgLyoqXHJcbiAgICogIE1ldGhvZCBmb3Igc2VsZWN0aW5nIGxpc3QgaXRlbXMuIERlZmF1bHQgdmFsdWUgaXMgJ25vbmUnLlxyXG4gICAqICdzZWxlY3QnIC0gTGlzdCBpdGVtcyBhcmUgc2VsZWN0ZWQgb25lIGJ5IG9uZS5cclxuICAgKiAnbXVsdGktc2VsZWN0JyAtIE11bHRpcGxlIHNlbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqICdub25lJyAtIExpc3QgaXRlbXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxyXG4gICAqL1xyXG4gIG1ldGhvZEZvclNlbGVjdGluZyA9IGlucHV0PE1ldGhvZEZvclNlbGVjdGluZz4oREVGQVVMVF9TRUxFQ1RfTUVUSE9EKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNOb3RTZWxlY3RpbmcgPSB0aGlzLmdldElzTm90U2VsZWN0aW5nKCk7XHJcbiAgZ2V0IGlzTm90U2VsZWN0aW5nKCkgeyByZXR1cm4gdGhpcy5faXNOb3RTZWxlY3Rpbmc7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTaW5nbGVTZWxlY3RpbmcgPSB0aGlzLmdldElzU2luZ2xlU2VsZWN0aW5nKCk7XHJcbiAgZ2V0IGlzU2luZ2xlU2VsZWN0aW5nKCkgeyByZXR1cm4gdGhpcy5faXNTaW5nbGVTZWxlY3Rpbmc7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNNdWx0aVNlbGVjdGluZyA9IHRoaXMuZ2V0SXNNdWx0aVNlbGVjdGluZygpO1xyXG4gIGdldCBpc011bHRpU2VsZWN0aW5nKCkgeyByZXR1cm4gdGhpcy5faXNNdWx0aVNlbGVjdGluZzsgfVxyXG5cclxuICBwcml2YXRlIF9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ6IGJvb2xlYW4gPSB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCgpO1xyXG4gIGdldCBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQoKSB7IHJldHVybiB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWZXJ0aWNhbCA9IHRoaXMuZ2V0SXNWZXJ0aWNhbCgpO1xyXG5cclxuICBnZXQgb3JpZW50YXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNWZXJ0aWNhbCA/IERpcmVjdGlvbnMuVkVSVElDQUwgOiBEaXJlY3Rpb25zLkhPUklaT05UQUw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9zbmFwZWREaXNwbGF5Q29tcG9uZW50OiBDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX2JvdW5kcyA9IHNpZ25hbDxJU2l6ZSB8IG51bGw+KG51bGwpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxTaXplID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLl9saXN0KCksIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcigpLCBzbmFwcGVkQ29tcG9uZW50ID0gdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudD8uaW5zdGFuY2U7XHJcbiAgICBpZiAobGlzdCAmJiBjb250YWluZXIgJiYgc25hcHBlZENvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgbGlzdEJvdW5kcyA9IGxpc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbGlzdEVsZW1lbnQgPSBsaXN0Py5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIHsgd2lkdGg6IGxXaWR0aCwgaGVpZ2h0OiBsSGVpZ2h0IH0gPSBsaXN0RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9ib3VuZHMoKSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICBpc1Njcm9sbGFibGUgPSBpc1ZlcnRpY2FsID8gY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gMCA6IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID4gMDtcclxuXHJcbiAgICAgIGxldCBzY3JvbGxCYXJTaXplID0gaXNWZXJ0aWNhbCA/IHdpZHRoIC0gbFdpZHRoIDogaGVpZ2h0IC0gbEhlaWdodCwgaXNTY3JvbGxCYXJPdmVybGFwID0gdHJ1ZSwgb3ZlcmxhcFNjcm9sbEJhclNpemUgPSAwO1xyXG4gICAgICBpZiAoc2Nyb2xsQmFyU2l6ZSA9PT0gMCAmJiBpc1Njcm9sbGFibGUpIHtcclxuICAgICAgICBpc1Njcm9sbEJhck92ZXJsYXAgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNTY3JvbGxCYXJPdmVybGFwICYmIElTX0ZJUkVGT1gpIHtcclxuICAgICAgICBzY3JvbGxCYXJTaXplID0gb3ZlcmxhcFNjcm9sbEJhclNpemUgPSBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNuYXBwZWRDb21wb25lbnQuZWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldEhlaWdodH0gTCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRXaWR0aCAtIG92ZXJsYXBTY3JvbGxCYXJTaXplfSAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGggLSBvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gMCBaXCIpYDtcclxuXHJcbiAgICAgIHNuYXBwZWRDb21wb25lbnQucmVndWxhckxlbmd0aCA9IGAke2lzVmVydGljYWwgPyBsaXN0Qm91bmRzLndpZHRoIDogbGlzdEJvdW5kcy5oZWlnaHR9JHtQWH1gO1xyXG4gICAgICBjb25zdCB7IHdpZHRoOiBzV2lkdGgsIGhlaWdodDogc0hlaWdodCB9ID0gc25hcHBlZENvbXBvbmVudC5nZXRCb3VuZHMoKSA/PyB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICBjb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIGRlbHRhID0gc25hcHBlZENvbXBvbmVudC5pdGVtPy5tZWFzdXJlcy5kZWx0YSA/PyAwO1xyXG5cclxuICAgICAgbGV0IGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgdG9wOiBudW1iZXIsIGJvdHRvbTogbnVtYmVyO1xyXG4gICAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgIGxlZnQgPSAwO1xyXG4gICAgICAgIHJpZ2h0ID0gd2lkdGggLSBzY3JvbGxCYXJTaXplO1xyXG4gICAgICAgIHRvcCA9IHNIZWlnaHQ7XHJcbiAgICAgICAgYm90dG9tID0gaGVpZ2h0O1xyXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAke3RvcCArIGRlbHRhfSBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gMCBMICR7cmlnaHR9IDAgTCAke3JpZ2h0fSAke3RvcCArIGRlbHRhfSBaXCIpYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZWZ0ID0gc1dpZHRoO1xyXG4gICAgICAgIHJpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgdG9wID0gMDtcclxuICAgICAgICBib3R0b20gPSBoZWlnaHQgLSBzY3JvbGxCYXJTaXplO1xyXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gJHtsZWZ0ICsgZGVsdGF9IDAgTCAke2xlZnQgKyBkZWx0YX0gJHtib3R0b219IEwgMCAke2JvdHRvbX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgWlwiKWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVTbmFwcGVkT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XHJcbiAgICB0aGlzLl90cmFja0JveC5jaGFuZ2VzKCk7XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgX29uUmVzaXplSGFuZGxlciA9ICgpID0+IHtcclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuX2NvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGlmIChib3VuZHMpIHtcclxuICAgICAgdGhpcy5fYm91bmRzLnNldCh7IHdpZHRoOiBib3VuZHMud2lkdGgsIGhlaWdodDogYm91bmRzLmhlaWdodCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2JvdW5kcy5zZXQoeyB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25TY3JvbGxIYW5kbGVyID0gKGU/OiBFdmVudCkgPT4ge1xyXG4gICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXIuc2Nyb2xsVG9wIDogY29udGFpbmVyLnNjcm9sbExlZnQpLFxyXG4gICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplO1xyXG4gICAgICB0aGlzLl9zY3JvbGxTaXplLnNldChhY3R1YWxTY3JvbGxTaXplKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4pO1xyXG5cclxuICBwcml2YXRlIF9pbml0aWFsaXplZCE6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xyXG5cclxuICByZWFkb25seSAkaW5pdGlhbGl6ZWQhOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYnkgd2hpY2ggdHJhY2tpbmcgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgdHJhY2tCeSA9IGlucHV0PHN0cmluZz4oVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgY2xhc3Mgb2YgdGhlIGVsZW1lbnQgY29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaXRlbUNvbXBvbmVudENsYXNzOiBDb21wb25lbnQkMTxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PiA9IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50O1xyXG5cclxuICAvKipcclxuICAgKiBCYXNlIGNsYXNzIHRyYWNrQm94XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3hDbGFzczogQ29tcG9uZW50JDE8VHJhY2tCb3g+ID0gVHJhY2tCb3g7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpY3Rpb25hcnkgb2YgZWxlbWVudCBzaXplcyBieSB0aGVpciBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94OiBUcmFja0JveCA9IG5ldyB0aGlzLl90cmFja0JveENsYXNzKHRoaXMudHJhY2tCeSgpKTtcclxuXHJcbiAgcHJpdmF0ZSBfb25UcmFja0JveENoYW5nZUhhbmRsZXIgPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICB0aGlzLl9jYWNoZVZlcnNpb24uc2V0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FjaGVWZXJzaW9uID0gc2lnbmFsPG51bWJlcj4oLTEpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMSA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDE7XHJcbiAgICB0aGlzLl9pZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS5pbml0aWFsaXplKHRoaXMuX3RyYWNrQm94KTtcclxuXHJcbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgICB0aGlzLiRpbml0aWFsaXplZCA9IHRvT2JzZXJ2YWJsZSh0aGlzLl9pbml0aWFsaXplZCk7XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guZGlzcGxheUNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBjb25zdCAkdHJhY2tCeSA9IHRvT2JzZXJ2YWJsZSh0aGlzLnRyYWNrQnkpLFxyXG4gICAgICAkc2VsZWN0QnlDbGljayA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdEJ5Q2xpY2spO1xyXG5cclxuICAgICRzZWxlY3RCeUNsaWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3RCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRvT2JzZXJ2YWJsZSh0aGlzLl9ib3VuZHMpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLCAkaXRlbXMgPSB0b09ic2VydmFibGUodGhpcy5pdGVtcykucGlwZShcclxuICAgICAgbWFwKGkgPT4gIWkgPyBbXSA6IGkpLFxyXG4gICAgKSwgJHNjcm9sbFNpemUgPSB0b09ic2VydmFibGUodGhpcy5fc2Nyb2xsU2l6ZSksXHJcbiAgICAgICRpdGVtU2l6ZSA9IHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW1TaXplKS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRidWZmZXJTaXplID0gdG9PYnNlcnZhYmxlKHRoaXMuYnVmZmVyU2l6ZSkucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfQlVGRkVSX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJG1heEJ1ZmZlclNpemUgPSB0b09ic2VydmFibGUodGhpcy5tYXhCdWZmZXJTaXplKS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPCAwID8gREVGQVVMVF9CVUZGRVJfU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkaXRlbUNvbmZpZ01hcCA9IHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW1Db25maWdNYXApLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gIXYgPyB7fSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkc25hcCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNuYXApLFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmRpcmVjdGlvbikucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzVmVydGljYWwodiB8fCBERUZBVUxUX0RJUkVDVElPTikpLFxyXG4gICAgICApLFxyXG4gICAgICAkZHluYW1pY1NpemUgPSB0b09ic2VydmFibGUodGhpcy5keW5hbWljU2l6ZSksXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiksXHJcbiAgICAgICRzbmFwcGluZ01ldGhvZCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNuYXBwaW5nTWV0aG9kKS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSxcclxuICAgICAgKSxcclxuICAgICAgJG1ldGhvZEZvclNlbGVjdGluZyA9IHRvT2JzZXJ2YWJsZSh0aGlzLm1ldGhvZEZvclNlbGVjdGluZyksXHJcbiAgICAgICRzZWxlY3RlZElkcyA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkSWRzKSxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLl9jYWNoZVZlcnNpb24pO1xyXG5cclxuICAgICRpc1ZlcnRpY2FsLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNWZXJ0aWNhbCA9IHY7XHJcbiAgICAgICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRvZ2dsZUNsYXNzTmFtZShlbCwgdiA/IENMQVNTX0xJU1RfVkVSVElDQUwgOiBDTEFTU19MSVNUX0hPUklaT05UQUwsIHYgPyBDTEFTU19MSVNUX0hPUklaT05UQUwgOiBDTEFTU19MSVNUX1ZFUlRJQ0FMKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHRoaXMuX3RyYWNrQm94LmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkbWV0aG9kRm9yU2VsZWN0aW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl9saXN0KCk/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNNdWx0aVNlbGVjdGluZyh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgZWwucm9sZSA9IFJPTEVfTElTVF9CT1g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgIGVsLnJvbGUgPSBST0xFX0xJU1RfQk9YO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzTm90U2VsZWN0aW5nKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZyA9IHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICBlbC5yb2xlID0gUk9MRV9MSVNUO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5OT05FO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkeW5hbWljU2l6ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKGR5bmFtaWNTaXplID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RlbkNhY2hlQ2hhbmdlc0lmTmVlZChkeW5hbWljU2l6ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGluaXRpYWxpemVkLCAkYm91bmRzLCAkaXRlbXMsICRpdGVtQ29uZmlnTWFwLCAkc2Nyb2xsU2l6ZSwgJGl0ZW1TaXplLFxyXG4gICAgICAkYnVmZmVyU2l6ZSwgJG1heEJ1ZmZlclNpemUsICRzbmFwLCAkaXNWZXJ0aWNhbCwgJGR5bmFtaWNTaXplLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGNhY2hlVmVyc2lvbixcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIoKFtpbml0aWFsaXplZF0pID0+ICEhaW5pdGlhbGl6ZWQpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFssXHJcbiAgICAgICAgYm91bmRzLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc25hcCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGNhY2hlVmVyc2lvbixcclxuICAgICAgXSkgPT4ge1xyXG4gICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyB0aGlzLl9jb250YWluZXIoKT8ubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPz8gMCA6IHRoaXMuX2NvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpID8/IDA7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMgYXMgSVNpemUsXHJcbiAgICAgICAgICBvcHRzOiBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgc25hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBvcHRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgdG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YTtcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBhY3R1YWxTY3JvbGxTaXplICsgZGVsdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgIGlmIChzY3JvbGxTaXplICE9PSBhY3R1YWxTY3JvbGxTaXplKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogU2Nyb2xsVG9PcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIFt0aGlzLl9pc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogYWN0dWFsU2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvZihkaXNwbGF5SXRlbXMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGl0ZW1SZW5kZXJlciA9IHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW1SZW5kZXJlcik7XHJcblxyXG4gICAgJGl0ZW1SZW5kZXJlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1SZW5kZXJlci5zZXQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkYm91bmRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMub25WaWV3cG9ydENoYW5nZS5lbWl0KHZhbHVlIGFzIElTaXplKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGl0ZW1DbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMub25JdGVtQ2xpY2suZW1pdCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGxldCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW5nIHx8ICh0aGlzLmlzTXVsdGlTZWxlY3RpbmcgJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuc2VsZWN0ZWRJZHMoKTtcclxuICAgICAgICAgIGlmICgodGhpcy5pc1NpbmdsZVNlbGVjdGluZyAmJiBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpIHx8IChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID09PSAyICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHwgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+IDIpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA8IDMpIHtcclxuICAgICAgICAgIGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNldFNlbGVjdGVkSWRzKHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm9uSW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkluaXQoKSB7XHJcbiAgICB0aGlzLl9pbml0aWFsaXplZC5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlbkNhY2hlQ2hhbmdlc0lmTmVlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICghdGhpcy5fdHJhY2tCb3guaGFzRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKSkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmFkZEV2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl90cmFja0JveC5oYXNFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVtb3ZlRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQobT86IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMuc25hcHBpbmdNZXRob2QoKTtcclxuICAgIHJldHVybiBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQobWV0aG9kKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNOb3RTZWxlY3RpbmcobT86IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLm1ldGhvZEZvclNlbGVjdGluZygpO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5OT05FKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTaW5nbGVTZWxlY3RpbmcobT86IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLm1ldGhvZEZvclNlbGVjdGluZygpO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc011bHRpU2VsZWN0aW5nKG0/OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5tZXRob2RGb3JTZWxlY3RpbmcoKTtcclxuICAgIHJldHVybiBpc01ldGhvZEZvclNlbGVjdGluZyhtZXRob2QsIE1ldGhvZHNGb3JTZWxlY3RpbmcuTVVMVElfU0VMRUNUKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNWZXJ0aWNhbChkPzogRGlyZWN0aW9uKSB7XHJcbiAgICBjb25zdCBkaXIgPSBkIHx8IHRoaXMuZGlyZWN0aW9uKCk7XHJcbiAgICByZXR1cm4gaXNEaXJlY3Rpb24oZGlyLCBEaXJlY3Rpb25zLlZFUlRJQ0FMKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCkge1xyXG4gICAgaWYgKCFkaXNwbGF5SXRlbXMgfHwgIXRoaXMuX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh7fSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuc25hcCgpKSB7XHJcbiAgICAgIGlmICghdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ID0gY29tcDtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5zbmFwZWREaXNwbGF5Q29tcG9uZW50ID0gdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guaXRlbXMgPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgY29uc3QgX2xpc3RDb250YWluZXJSZWYgPSB0aGlzLl9saXN0Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGNvbnN0IG1heExlbmd0aCA9IGRpc3BsYXlJdGVtcy5sZW5ndGgsIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICB3aGlsZSAoY29tcG9uZW50cy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcclxuICAgICAgaWYgKF9saXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IF9saXN0Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3MpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzZXRSZW5kZXJlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUmVndWxhclJlbmRlcmVyKCkge1xyXG4gICAgdGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRSZW5kZXJlcnMoaXRlbVJlbmRlcmVyPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+KSB7XHJcbiAgICBjb25zdCBkb01hcDogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9ID0ge30sIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IGNvbXBvbmVudHNbaV07XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtLmluc3RhbmNlLmlkO1xyXG4gICAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5faXRlbVJlbmRlcmVyKCk7XHJcbiAgICAgICAgZG9NYXBbaWRdID0gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zbmFwKCkgJiYgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50O1xyXG4gICAgICBjb21wLmluc3RhbmNlLnJlbmRlcmVyID0gaXRlbVJlbmRlcmVyIHx8IHRoaXMuX2l0ZW1SZW5kZXJlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LnNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoZG9NYXApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tpbmcgYnkgaWRcclxuICAgKi9cclxuICBwcml2YXRlIHRyYWNraW5nKCkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3gudHJhY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWw6IGJvb2xlYW4sIHRvdGFsU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsID0gdGhpcy5fbGlzdCgpO1xyXG4gICAgaWYgKGwpIHtcclxuICAgICAgbC5uYXRpdmVFbGVtZW50LnN0eWxlW2lzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FXSA9IGAke3RvdGFsU2l6ZX0ke1BYfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveC5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICogQmVoYXZpb3IgYWNjZXB0cyB0aGUgdmFsdWVzIOKAi+KAi1wiYXV0b1wiLCBcImluc3RhbnRcIiBhbmQgXCJzbW9vdGhcIi5cclxuICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8pIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG9FeGVjdXRvcihpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciwgaXRlcmF0aW9uOiBudW1iZXIgPSAwLCBpc0xhc3RJdGVyYXRpb24gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zKCk7XHJcbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNTaXplID0gdGhpcy5keW5hbWljU2l6ZSgpLCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIoKSwgaXRlbVNpemUgPSB0aGlzLml0ZW1TaXplKCk7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuXHJcbiAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9ib3VuZHMoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCgpLCBpdGVtcyA9IHRoaXMuaXRlbXMoKSwgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICBvcHRzOiBJR2V0SXRlbVBvc2l0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgICAgYm91bmRzOiB7IHdpZHRoLCBoZWlnaHQgfSwgY29sbGVjdGlvbjogaXRlbXMsIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyU2l6ZTogdGhpcy5idWZmZXJTaXplKCksIG1heEJ1ZmZlclNpemU6IHRoaXMubWF4QnVmZmVyU2l6ZSgpLFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpICsgZGVsdGEsXHJcbiAgICAgICAgICAgIHNuYXA6IHRoaXMuc25hcCgpLCBmcm9tSXRlbUlkOiBpZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogdGhpcy5lbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgb3B0cyksXHJcbiAgICAgICAgICBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHsgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvciB9O1xyXG5cclxuICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgIC4uLm9wdHMsIHNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlzTGFzdEl0ZXJhdGlvbiA/IHVuZGVmaW5lZCA6IGlkLFxyXG4gICAgICAgICAgfSksIGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZSArIGRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBfc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoX3Njcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGFjdHVhbFNjcm9sbFNpemUgPT09IF9zY3JvbGxTaXplXHJcblxyXG4gICAgICAgICAgaWYgKCFub3RDaGFuZ2VkIHx8IGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgQkVIQVZJT1JfSU5TVEFOVCwgaXRlcmF0aW9uICsgMSwgbm90Q2hhbmdlZCk7XHJcbiAgICAgICAgICAgIH0pIGFzIHVua25vd24gYXMgbnVtYmVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsU2l6ZS5zZXQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHBhcmFtcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX3Njcm9sbFNpemUuc2V0KHNjcm9sbFNpemUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBzY3JvbGxTaXplID0gaW5kZXggKiB0aGlzLml0ZW1TaXplKCk7XHJcbiAgICAgICAgICBjb25zdCBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHsgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvciB9O1xyXG4gICAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBkZXNpcmVkIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvRW5kKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0lOU1RBTlQpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcygpLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIHRoaXMuc2Nyb2xsVG8obGF0SXRlbS5pZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25Db250YWluZXJTY3JvbGxIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcigpO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIDogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSB0aGlzLl9zY3JvbGxTaXplKCkgPiBzY3JvbGxTaXplID8gLTEgOiB0aGlzLl9zY3JvbGxTaXplKCkgPCBzY3JvbGxTaXplID8gMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBsaXN0OiB0aGlzLl9saXN0KCkhLm5hdGl2ZUVsZW1lbnQsIGRlbHRhOiB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICBzY3JvbGxEZWx0YTogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGVsdGEsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vblNjcm9sbC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXIoKTtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gdGhpcy5fc2Nyb2xsU2l6ZSgpID4gc2Nyb2xsU2l6ZSA/IC0xIDogMDtcclxuXHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiwgY29udGFpbmVyOiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIGxpc3Q6IHRoaXMuX2xpc3QoKSEubmF0aXZlRWxlbWVudCwgZGVsdGE6IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgIHNjcm9sbERlbHRhOiB0aGlzLl90cmFja0JveC5zY3JvbGxEZWx0YSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm9uU2Nyb2xsRW5kLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlclZpZXdJbml0KCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXIoKTtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICAvLyBmb3IgZGlyZWN0aW9uIGNhbGN1bGF0aW9uXHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTExfRU5ELCB0aGlzLl9vbkNvbnRhaW5lclNjcm9sbEVuZEhhbmRsZXIpO1xyXG5cclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuXHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX29uUmVzaXplSGFuZGxlcik7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgICB0aGlzLl9vblJlc2l6ZUhhbmRsZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl90cmFja0JveCkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyKCk7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTF9FTkQsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudC5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLnBvcCgpO1xyXG4gICAgICAgIGNvbXA/LmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaWYgKHNuYXAoKSkge1xyXG4gIDxkaXYgI3NuYXBwZWQgcGFydD1cInNuYXBwZWQtaXRlbVwiIGNsYXNzPVwibmd2bF9fbGlzdC1zbmFwcGVyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICNzbmFwUmVuZGVyZXJDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbn1cclxuPGRpdiAjY29udGFpbmVyIHBhcnQ9XCJzY3JvbGxlclwiIGNsYXNzPVwibmd2bF9fc2Nyb2xsZXJcIj5cclxuICA8ZGl2IFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwib3JpZW50YXRpb25cIiAjbGlzdCBwYXJ0PVwibGlzdFwiIGNsYXNzPVwibmd2bF9fbGlzdFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAjcmVuZGVyZXJzQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
653
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNVLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQ3ZFLE1BQU0sRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsR0FFMUcsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUNwSCxtQ0FBbUMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQ3JJLGdCQUFnQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUMxSSx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLHVCQUF1QixHQUN4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Q0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzt3R0E5MUJVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLHVnRkFGdEIsQ0FBQyxvQkFBb0IsQ0FBQyx1YkFhUSxnQkFBZ0IscUhBR2IsZ0JBQWdCLDZCQ2pFOUQsOFlBU007OzRGRDBDTyxzQkFBc0I7a0JBVGxDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsS0FBSyxtQkFHQSx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxTQUFTLGFBQy9CLENBQUMsb0JBQW9CLENBQUM7d0RBY3pCLGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJbkQsaUJBQWlCO3NCQUR4QixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsXHJcbiAgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCB2aWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9BVVRPLCBCRUhBVklPUl9JTlNUQU5ULCBDTEFTU19MSVNUX0hPUklaT05UQUwsIENMQVNTX0xJU1RfVkVSVElDQUwsIERFRkFVTFRfRElSRUNUSU9OLCBERUZBVUxUX0RZTkFNSUNfU0laRSxcclxuICBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTiwgREVGQVVMVF9JVEVNX1NJWkUsIERFRkFVTFRfQlVGRkVSX1NJWkUsIERFRkFVTFRfTElTVF9TSVpFLCBERUZBVUxUX1NOQVAsIERFRkFVTFRfU05BUFBJTkdfTUVUSE9ELFxyXG4gIEhFSUdIVF9QUk9QX05BTUUsIExFRlRfUFJPUF9OQU1FLCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIFBYLCBTQ1JPTEwsIFNDUk9MTF9FTkQsIFRPUF9QUk9QX05BTUUsIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSxcclxuICBERUZBVUxUX01BWF9CVUZGRVJfU0laRSxcclxuICBERUZBVUxUX1NFTEVDVF9NRVRIT0QsXHJcbiAgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0sIElTY3JvbGxFdmVudCwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgSWQsIElTaXplIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9ucywgTWV0aG9kRm9yU2VsZWN0aW5nLCBNZXRob2RzRm9yU2VsZWN0aW5nLCBTbmFwcGluZ01ldGhvZCB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxFdmVudCwgdG9nZ2xlQ2xhc3NOYW1lIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnMsIFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgVHJhY2tCb3ggfSBmcm9tICcuL3V0aWxzL3RyYWNrQm94JztcclxuaW1wb3J0IHsgaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkIH0gZnJvbSAnLi91dGlscy9zbmFwcGluZy1tZXRob2QnO1xyXG5pbXBvcnQgeyBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkUsIElTX0ZJUkVGT1ggfSBmcm9tICcuL3V0aWxzL2Jyb3dzZXInO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RlbHMvYmFzZS12aXJ0dWFsLWxpc3QtaXRlbS1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQkMSB9IGZyb20gJy4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IGlzRGlyZWN0aW9uIH0gZnJvbSAnLi91dGlscy9pc0RpcmVjdGlvbic7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IGlzTWV0aG9kRm9yU2VsZWN0aW5nIH0gZnJvbSAnLi91dGlscy9pc01ldGhvZEZvclNlbGVjdGluZyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4vZW51bXMvbWV0aG9kLWZvci1zZWxlY3RpbmctdHlwZXMnO1xyXG5cclxuY29uc3QgUk9MRV9MSVNUID0gJ2xpc3QnLFxyXG4gIFJPTEVfTElTVF9CT1ggPSAnbGlzdGJveCc7XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0JyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXHJcbiAgcHJvdmlkZXJzOiBbTmdWaXJ0dWFsTGlzdFNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBfX25leHRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZSA9IGluamVjdChOZ1ZpcnR1YWxMaXN0U2VydmljZSk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyc0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX2xpc3RDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NuYXBSZW5kZXJlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX3NuYXBDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwZWRDb250YWluZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdzbmFwcGVkJyk7XHJcblxyXG4gIHByaXZhdGUgX2NvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NvbnRhaW5lcicpO1xyXG5cclxuICBwcml2YXRlIF9saXN0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignbGlzdCcpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIHNjcm9sbGVkLlxyXG4gICAqL1xyXG4gIG9uU2Nyb2xsID0gb3V0cHV0PElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgbGlzdCBoYXMgY29tcGxldGVkIHNjcm9sbGluZy5cclxuICAgKi9cclxuICBvblNjcm9sbEVuZCA9IG91dHB1dDxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIHZpZXdwb3J0IHNpemUgaXMgY2hhbmdlZC5cclxuICAgKi9cclxuICBvblZpZXdwb3J0Q2hhbmdlID0gb3V0cHV0PElTaXplPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGFuIGVsZW1lbnQgaXMgY2xpY2tlZC5cclxuICAgKi9cclxuICBvbkl0ZW1DbGljayA9IG91dHB1dDxJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gYW4gZWxlbWVudHMgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIG9uU2VsZWN0ID0gb3V0cHV0PEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtc09wdGlvbnMgPSB7XHJcbiAgICB0cmFuc2Zvcm06ICh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q29sbGVjdGlvbih2LCB0aGlzLml0ZW1TaXplKCkpO1xyXG4gICAgICByZXR1cm4gdjtcclxuICAgIH0sXHJcbiAgfSBhcyBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgbGlzdCBpdGVtcy5cclxuICAgKi9cclxuICBpdGVtcyA9IGlucHV0LnJlcXVpcmVkPElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+KHtcclxuICAgIC4uLnRoaXMuX2l0ZW1zT3B0aW9ucyxcclxuICB9KTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgc2VsZWN0ZWRJZHMgPSBpbnB1dDxBcnJheTxJZD4gfCBJZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZmFsc2UsIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIHVzaW5nIHRoZSBjb25maWcuc2VsZWN0IG1ldGhvZCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlOyBcclxuICAgKiBpZiB0cnVlLCB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCBieSBjbGlja2luZyBvbiBpdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cclxuICAgKi9cclxuICBzZWxlY3RCeUNsaWNrID0gaW5wdXQ8Ym9vbGVhbj4oREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0spO1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgZWxlbWVudHMgd2lsbCBzbmFwLiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIHNuYXAgPSBpbnB1dDxib29sZWFuPihERUZBVUxUX1NOQVApO1xyXG5cclxuICAvKipcclxuICAgKiBFeHBlcmltZW50YWwhXHJcbiAgICogRW5hYmxlcyBidWZmZXIgb3B0aW1pemF0aW9uLlxyXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgaWYgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gYXJlIG5vdCBhZGRlZCBvciB1cGRhdGVkLiBPdGhlcndpc2UsIGFydGlmYWN0cyBpbiB0aGUgZm9ybSBvZiB0d2l0Y2hpbmcgb2YgdGhlIHNjcm9sbCBhcmVhIGFyZSBwb3NzaWJsZS5cclxuICAgKiBXb3JrcyBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBkeW5hbWljID0gdHJ1ZVxyXG4gICAqL1xyXG4gIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSBpbnB1dDxib29sZWFuPihERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTik7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmRlcmluZyBlbGVtZW50IHRlbXBsYXRlLlxyXG4gICAqL1xyXG4gIGl0ZW1SZW5kZXJlciA9IGlucHV0LnJlcXVpcmVkPFRlbXBsYXRlUmVmPGFueT4+KCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1SZW5kZXJlciA9IHNpZ25hbDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIFVzZSBgaXRlbUNvbmZpZ01hcGAgaW5zdGVhZC5cclxuICAgKi9cclxuICBzdGlja3lNYXAgPSBpbnB1dCgpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHN0aWNreSBwb3NpdGlvbiBhbmQgc2VsZWN0YWJsZSBmb3IgdGhlIGxpc3QgaXRlbSBlbGVtZW50LiBJZiBzdGlja3kgcG9zaXRpb24gaXMgZ3JlYXRlciB0aGFuIDAsIHRoZW4gc3RpY2t5IHBvc2l0aW9uIGlzIGFwcGxpZWQuIFxyXG4gICAqIElmIHRoZSBzdGlja3kgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIGAwYCwgdGhlbiB0aGUgc3RpY2t5IHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuIGAxYCAtIHBvc2l0aW9uIHN0YXJ0LCBgMmAgLSBwb3NpdGlvbiBlbmQuIERlZmF1bHQgdmFsdWUgaXMgYDBgLlxyXG4gICAqIHNlbGVjdGFibGUgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgY2FuIGJlIHNlbGVjdGVkIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaXRlbS1jb25maWctbWFwLm1vZGVsLnRzXHJcbiAgICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAgICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAgICovXHJcbiAgaXRlbUNvbmZpZ01hcCA9IGlucHV0PElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA+KHt9KTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVPcHRpb25zID0ge1xyXG4gICAgdHJhbnNmb3JtOiAodjogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFsID0gTnVtYmVyKHYpO1xyXG4gICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHZhbCkgfHwgdmFsIDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHZhbDtcclxuICAgIH0sXHJcbiAgfSBhcyBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsIHRoZW4gdGhlIGhlaWdodCBvZiBhIHR5cGljYWwgZWxlbWVudC4gSWYgZGlyZWN0aW9uID0gJ2hvcml6b250YWwnLCB0aGVuIHRoZSB3aWR0aCBvZiBhIHR5cGljYWwgZWxlbWVudC5cclxuICAgKiBJZ25vcmVkIGlmIHRoZSBkeW5hbWljU2l6ZSBwcm9wZXJ0eSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIGl0ZW1TaXplID0gaW5wdXQ8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSwgeyAuLi50aGlzLl9pdGVtU2l6ZU9wdGlvbnMgfSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgY2FuIGhhdmUgZGlmZmVyZW50IHNpemVzIGFuZCB0aGUgaXRlbVNpemUgcHJvcGVydHkgaXMgaWdub3JlZC5cclxuICAgKiBJZiBmYWxzZSB0aGVuIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBoYXZlIGEgZml4ZWQgc2l6ZSBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1TaXplIHByb3BlcnR5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS5cclxuICAgKi9cclxuICBkeW5hbWljU2l6ZSA9IGlucHV0KERFRkFVTFRfRFlOQU1JQ19TSVpFKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIGVsZW1lbnRzIGFyZSBwbGFjZWQuIERlZmF1bHQgdmFsdWUgaXMgXCJ2ZXJ0aWNhbFwiLlxyXG4gICAqL1xyXG4gIGRpcmVjdGlvbiA9IGlucHV0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG5cclxuICBwcml2YXRlIF9pdGVtT2Zmc2V0VHJhbnNmb3JtID0ge1xyXG4gICAgdHJhbnNmb3JtOiAodjogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIHRocm93IEVycm9yKCdcIml0ZW1PZmZzZXRcIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gVXNlIFwiYnVmZmVyU2l6ZVwiIGFuZCBcIm1heEJ1ZmZlclNpemVcIi4nKTtcclxuICAgIH1cclxuICB9IGFzIGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogTnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMi5cclxuICAgKiBAZGVwcmVjYXRlZCBcIml0ZW1PZmZzZXRcIiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gVXNlIFwiYnVmZmVyU2l6ZVwiIGFuZCBcIm1heEJ1ZmZlclNpemVcIi5cclxuICAgKi9cclxuICBpdGVtc09mZnNldCA9IGlucHV0PG51bWJlcj4oREVGQVVMVF9CVUZGRVJfU0laRSwgeyAuLi50aGlzLl9pdGVtT2Zmc2V0VHJhbnNmb3JtIH0pO1xyXG5cclxuICAvKipcclxuICAgKiBOdW1iZXIgb2YgZWxlbWVudHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdmlzaWJpbGl0eS4gRGVmYXVsdCB2YWx1ZSBpcyAyLlxyXG4gICAqL1xyXG4gIGJ1ZmZlclNpemUgPSBpbnB1dDxudW1iZXI+KERFRkFVTFRfQlVGRkVSX1NJWkUpO1xyXG5cclxuICBwcml2YXRlIF9tYXhCdWZmZXJTaXplVHJhbnNmb3JtID0ge1xyXG4gICAgdHJhbnNmb3JtOiAodjogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSB0aGlzLmJ1ZmZlclNpemUoKTtcclxuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2IDw9IGJ1ZmZlclNpemUpIHtcclxuICAgICAgICByZXR1cm4gYnVmZmVyU2l6ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuICB9IGFzIGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdmlzaWJpbGl0eS4gRGVmYXVsdCB2YWx1ZSBpcyAxMDAuXHJcbiAgICogSWYgbWF4QnVmZmVyU2l6ZSBpcyBzZXQgdG8gYmUgZ3JlYXRlciB0aGFuIGJ1ZmZlclNpemUsIHRoZW4gYWRhcHRpdmUgYnVmZmVyIG1vZGUgaXMgZW5hYmxlZC5cclxuICAgKiBUaGUgZ3JlYXRlciB0aGUgc2Nyb2xsIHNpemUsIHRoZSBtb3JlIGVsZW1lbnRzIGFyZSBhbGxvY2F0ZWQgZm9yIHJlbmRlcmluZy5cclxuICAgKi9cclxuICBtYXhCdWZmZXJTaXplID0gaW5wdXQ8bnVtYmVyPihERUZBVUxUX01BWF9CVUZGRVJfU0laRSwgeyAuLi50aGlzLl9tYXhCdWZmZXJTaXplVHJhbnNmb3JtIH0pO1xyXG5cclxuICAvKipcclxuICAgKiBTbmFwcGluZyBtZXRob2QuXHJcbiAgICogJ2RlZmF1bHQnIC0gTm9ybWFsIGdyb3VwIHJlbmRlcmluZy5cclxuICAgKiAnYWR2YW5jZWQnIC0gVGhlIGdyb3VwIGlzIHJlbmRlcmVkIG9uIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4gTGlzdCBpdGVtcyBiZWxvdyB0aGUgZ3JvdXAgYXJlIG5vdCByZW5kZXJlZC5cclxuICAgKi9cclxuICBzbmFwcGluZ01ldGhvZCA9IGlucHV0PFNuYXBwaW5nTWV0aG9kPihERUZBVUxUX1NOQVBQSU5HX01FVEhPRCk7XHJcblxyXG4gIC8qKlxyXG4gICAqICBNZXRob2QgZm9yIHNlbGVjdGluZyBsaXN0IGl0ZW1zLiBEZWZhdWx0IHZhbHVlIGlzICdub25lJy5cclxuICAgKiAnc2VsZWN0JyAtIExpc3QgaXRlbXMgYXJlIHNlbGVjdGVkIG9uZSBieSBvbmUuXHJcbiAgICogJ211bHRpLXNlbGVjdCcgLSBNdWx0aXBsZSBzZWxlY3Rpb24gb2YgbGlzdCBpdGVtcy5cclxuICAgKiAnbm9uZScgLSBMaXN0IGl0ZW1zIGFyZSBub3Qgc2VsZWN0YWJsZS5cclxuICAgKi9cclxuICBtZXRob2RGb3JTZWxlY3RpbmcgPSBpbnB1dDxNZXRob2RGb3JTZWxlY3Rpbmc+KERFRkFVTFRfU0VMRUNUX01FVEhPRCk7XHJcblxyXG4gIHByaXZhdGUgX2lzTm90U2VsZWN0aW5nID0gdGhpcy5nZXRJc05vdFNlbGVjdGluZygpO1xyXG4gIGdldCBpc05vdFNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuX2lzTm90U2VsZWN0aW5nOyB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2luZ2xlU2VsZWN0aW5nID0gdGhpcy5nZXRJc1NpbmdsZVNlbGVjdGluZygpO1xyXG4gIGdldCBpc1NpbmdsZVNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nOyB9XHJcblxyXG4gIHByaXZhdGUgX2lzTXVsdGlTZWxlY3RpbmcgPSB0aGlzLmdldElzTXVsdGlTZWxlY3RpbmcoKTtcclxuICBnZXQgaXNNdWx0aVNlbGVjdGluZygpIHsgcmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3Rpbmc7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gdGhpcy5nZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQoKTtcclxuICBnZXQgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCkgeyByZXR1cm4gdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOyB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmVydGljYWwgPSB0aGlzLmdldElzVmVydGljYWwoKTtcclxuXHJcbiAgZ2V0IG9yaWVudGF0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWwgPyBEaXJlY3Rpb25zLlZFUlRJQ0FMIDogRGlyZWN0aW9ucy5IT1JJWk9OVEFMO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGlzcGxheUNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudFJlZjxCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50Pj4gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcGVkRGlzcGxheUNvbXBvbmVudDogQ29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9ib3VuZHMgPSBzaWduYWw8SVNpemUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsU2l6ZSA9IHNpZ25hbDxudW1iZXI+KDApO1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5fbGlzdCgpLCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIoKSwgc25hcHBlZENvbXBvbmVudCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ/Lmluc3RhbmNlO1xyXG4gICAgaWYgKGxpc3QgJiYgY29udGFpbmVyICYmIHNuYXBwZWRDb21wb25lbnQpIHtcclxuICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIGxpc3RCb3VuZHMgPSBsaXN0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpc3RFbGVtZW50ID0gbGlzdD8ubmF0aXZlRWxlbWVudCxcclxuICAgICAgICB7IHdpZHRoOiBsV2lkdGgsIGhlaWdodDogbEhlaWdodCB9ID0gbGlzdEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fYm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgaXNTY3JvbGxhYmxlID0gaXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IDAgOiBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+IDA7XHJcblxyXG4gICAgICBsZXQgc2Nyb2xsQmFyU2l6ZSA9IGlzVmVydGljYWwgPyB3aWR0aCAtIGxXaWR0aCA6IGhlaWdodCAtIGxIZWlnaHQsIGlzU2Nyb2xsQmFyT3ZlcmxhcCA9IHRydWUsIG92ZXJsYXBTY3JvbGxCYXJTaXplID0gMDtcclxuICAgICAgaWYgKHNjcm9sbEJhclNpemUgPT09IDAgJiYgaXNTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgaXNTY3JvbGxCYXJPdmVybGFwID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzU2Nyb2xsQmFyT3ZlcmxhcCAmJiBJU19GSVJFRk9YKSB7XHJcbiAgICAgICAgc2Nyb2xsQmFyU2l6ZSA9IG92ZXJsYXBTY3JvbGxCYXJTaXplID0gRklSRUZPWF9TQ1JPTExCQVJfT1ZFUkxBUF9TSVpFO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAwIEwgMCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGggLSBvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9IDAgWlwiKWA7XHJcblxyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LnJlZ3VsYXJMZW5ndGggPSBgJHtpc1ZlcnRpY2FsID8gbGlzdEJvdW5kcy53aWR0aCA6IGxpc3RCb3VuZHMuaGVpZ2h0fSR7UFh9YDtcclxuICAgICAgY29uc3QgeyB3aWR0aDogc1dpZHRoLCBoZWlnaHQ6IHNIZWlnaHQgfSA9IHNuYXBwZWRDb21wb25lbnQuZ2V0Qm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBkZWx0YSA9IHNuYXBwZWRDb21wb25lbnQuaXRlbT8ubWVhc3VyZXMuZGVsdGEgPz8gMDtcclxuXHJcbiAgICAgIGxldCBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcjtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBsZWZ0ID0gMDtcclxuICAgICAgICByaWdodCA9IHdpZHRoIC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICB0b3AgPSBzSGVpZ2h0O1xyXG4gICAgICAgIGJvdHRvbSA9IGhlaWdodDtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgJHt0b3AgKyBkZWx0YX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgTCAke3JpZ2h0fSAwIEwgJHtyaWdodH0gJHt0b3AgKyBkZWx0YX0gWlwiKWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVmdCA9IHNXaWR0aDtcclxuICAgICAgICByaWdodCA9IHdpZHRoO1xyXG4gICAgICAgIHRvcCA9IDA7XHJcbiAgICAgICAgYm90dG9tID0gaGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNICR7bGVmdCArIGRlbHRhfSAwIEwgJHtsZWZ0ICsgZGVsdGF9ICR7Ym90dG9tfSBMIDAgJHtib3R0b219IEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAwIFpcIilgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgdGhpcy5fdHJhY2tCb3guY2hhbmdlcygpO1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIF9vblJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl9jb250YWluZXIoKT8ubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBpZiAoYm91bmRzKSB7XHJcbiAgICAgIHRoaXMuX2JvdW5kcy5zZXQoeyB3aWR0aDogYm91bmRzLndpZHRoLCBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9ib3VuZHMuc2V0KHsgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVSZWd1bGFyUmVuZGVyZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uU2Nyb2xsSGFuZGxlciA9IChlPzogRXZlbnQpID0+IHtcclxuICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gY29udGFpbmVyLnNjcm9sbFRvcCA6IGNvbnRhaW5lci5zY3JvbGxMZWZ0KSxcclxuICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgdGhpcy5fc2Nyb2xsU2l6ZS5zZXQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+KTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQhOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcclxuXHJcbiAgcmVhZG9ubHkgJGluaXRpYWxpemVkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJ5IHdoaWNoIHRyYWNraW5nIGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIHRyYWNrQnkgPSBpbnB1dDxzdHJpbmc+KFRSQUNLX0JZX1BST1BFUlRZX05BTUUpO1xyXG5cclxuICAvKipcclxuICAgKiBCYXNlIGNsYXNzIG9mIHRoZSBlbGVtZW50IGNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2l0ZW1Db21wb25lbnRDbGFzczogQ29tcG9uZW50JDE8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4gPSBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudDtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyB0cmFja0JveFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94Q2xhc3M6IENvbXBvbmVudCQxPFRyYWNrQm94PiA9IFRyYWNrQm94O1xyXG5cclxuICAvKipcclxuICAgKiBEaWN0aW9uYXJ5IG9mIGVsZW1lbnQgc2l6ZXMgYnkgdGhlaXIgaWRcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggPSBuZXcgdGhpcy5fdHJhY2tCb3hDbGFzcyh0aGlzLnRyYWNrQnkoKSk7XHJcblxyXG4gIHByaXZhdGUgX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgdGhpcy5fY2FjaGVWZXJzaW9uLnNldCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhY2hlVmVyc2lvbiA9IHNpZ25hbDxudW1iZXI+KC0xKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDEgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgID8gMCA6IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxO1xyXG4gICAgdGhpcy5faWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLl90cmFja0JveCk7XHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgdGhpcy4kaW5pdGlhbGl6ZWQgPSB0b09ic2VydmFibGUodGhpcy5faW5pdGlhbGl6ZWQpO1xyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LmRpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuX2xpc3QpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5saXN0RWxlbWVudCA9IHYhLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdHJhY2tCeSA9IHRvT2JzZXJ2YWJsZSh0aGlzLnRyYWNrQnkpLFxyXG4gICAgICAkc2VsZWN0QnlDbGljayA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdEJ5Q2xpY2spO1xyXG5cclxuICAgICRzZWxlY3RCeUNsaWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3RCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRvT2JzZXJ2YWJsZSh0aGlzLl9ib3VuZHMpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLCAkaXRlbXMgPSB0b09ic2VydmFibGUodGhpcy5pdGVtcykucGlwZShcclxuICAgICAgbWFwKGkgPT4gIWkgPyBbXSA6IGkpLFxyXG4gICAgKSwgJHNjcm9sbFNpemUgPSB0b09ic2VydmFibGUodGhpcy5fc2Nyb2xsU2l6ZSksXHJcbiAgICAgICRpdGVtU2l6ZSA9IHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW1TaXplKS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRidWZmZXJTaXplID0gdG9PYnNlcnZhYmxlKHRoaXMuYnVmZmVyU2l6ZSkucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfQlVGRkVSX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJG1heEJ1ZmZlclNpemUgPSB0b09ic2VydmFibGUodGhpcy5tYXhCdWZmZXJTaXplKS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPCAwID8gREVGQVVMVF9CVUZGRVJfU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkaXRlbUNvbmZpZ01hcCA9IHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW1Db25maWdNYXApLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gIXYgPyB7fSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkc25hcCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNuYXApLFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmRpcmVjdGlvbikucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzVmVydGljYWwodiB8fCBERUZBVUxUX0RJUkVDVElPTikpLFxyXG4gICAgICApLFxyXG4gICAgICAkZHluYW1pY1NpemUgPSB0b09ic2VydmFibGUodGhpcy5keW5hbWljU2l6ZSksXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiksXHJcbiAgICAgICRzbmFwcGluZ01ldGhvZCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNuYXBwaW5nTWV0aG9kKS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSxcclxuICAgICAgKSxcclxuICAgICAgJG1ldGhvZEZvclNlbGVjdGluZyA9IHRvT2JzZXJ2YWJsZSh0aGlzLm1ldGhvZEZvclNlbGVjdGluZyksXHJcbiAgICAgICRzZWxlY3RlZElkcyA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkSWRzKSxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLl9jYWNoZVZlcnNpb24pO1xyXG5cclxuICAgICRpc1ZlcnRpY2FsLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNWZXJ0aWNhbCA9IHY7XHJcbiAgICAgICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRvZ2dsZUNsYXNzTmFtZShlbCwgdiA/IENMQVNTX0xJU1RfVkVSVElDQUwgOiBDTEFTU19MSVNUX0hPUklaT05UQUwsIHYgPyBDTEFTU19MSVNUX0hPUklaT05UQUwgOiBDTEFTU19MSVNUX1ZFUlRJQ0FMKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHRoaXMuX3RyYWNrQm94LmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkbWV0aG9kRm9yU2VsZWN0aW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl9saXN0KCk/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNNdWx0aVNlbGVjdGluZyh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgZWwucm9sZSA9IFJPTEVfTElTVF9CT1g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLm1ldGhvZE9mU2VsZWN0aW5nID0gTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNTaW5nbGVTZWxlY3RpbmcodiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzTm90U2VsZWN0aW5nID0gdGhpcy5faXNNdWx0aVNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgIGVsLnJvbGUgPSBST0xFX0xJU1RfQk9YO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzTm90U2VsZWN0aW5nKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc05vdFNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdGluZyA9IHRoaXMuX2lzTXVsdGlTZWxlY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICBlbC5yb2xlID0gUk9MRV9MSVNUO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5tZXRob2RPZlNlbGVjdGluZyA9IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5OT05FO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkeW5hbWljU2l6ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKGR5bmFtaWNTaXplID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RlbkNhY2hlQ2hhbmdlc0lmTmVlZChkeW5hbWljU2l6ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGluaXRpYWxpemVkLCAkYm91bmRzLCAkaXRlbXMsICRpdGVtQ29uZmlnTWFwLCAkc2Nyb2xsU2l6ZSwgJGl0ZW1TaXplLFxyXG4gICAgICAkYnVmZmVyU2l6ZSwgJG1heEJ1ZmZlclNpemUsICRzbmFwLCAkaXNWZXJ0aWNhbCwgJGR5bmFtaWNTaXplLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGNhY2hlVmVyc2lvbixcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIoKFtpbml0aWFsaXplZF0pID0+ICEhaW5pdGlhbGl6ZWQpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFssXHJcbiAgICAgICAgYm91bmRzLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc25hcCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGNhY2hlVmVyc2lvbixcclxuICAgICAgXSkgPT4ge1xyXG4gICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyB0aGlzLl9jb250YWluZXIoKT8ubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPz8gMCA6IHRoaXMuX2NvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpID8/IDA7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMgYXMgSVNpemUsXHJcbiAgICAgICAgICBvcHRzOiBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSwgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgc25hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBvcHRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgdG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YTtcclxuICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBhY3R1YWxTY3JvbGxTaXplICsgZGVsdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgIGlmIChzY3JvbGxTaXplICE9PSBhY3R1YWxTY3JvbGxTaXplKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogU2Nyb2xsVG9PcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIFt0aGlzLl9pc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogYWN0dWFsU2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvZihkaXNwbGF5SXRlbXMpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGl0ZW1SZW5kZXJlciA9IHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW1SZW5kZXJlcik7XHJcblxyXG4gICAgJGl0ZW1SZW5kZXJlci5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1SZW5kZXJlci5zZXQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkYm91bmRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMub25WaWV3cG9ydENoYW5nZS5lbWl0KHZhbHVlIGFzIElTaXplKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGl0ZW1DbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMub25JdGVtQ2xpY2suZW1pdCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGxldCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW5nIHx8ICh0aGlzLmlzTXVsdGlTZWxlY3RpbmcgJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuc2VsZWN0ZWRJZHMoKTtcclxuICAgICAgICAgIGlmICgodGhpcy5pc1NpbmdsZVNlbGVjdGluZyAmJiBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpIHx8IChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID09PSAyICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHwgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+IDIpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KHYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA8IDMpIHtcclxuICAgICAgICAgIGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNldFNlbGVjdGVkSWRzKHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm9uSW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkluaXQoKSB7XHJcbiAgICB0aGlzLl9pbml0aWFsaXplZC5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlbkNhY2hlQ2hhbmdlc0lmTmVlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICghdGhpcy5fdHJhY2tCb3guaGFzRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKSkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmFkZEV2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl90cmFja0JveC5oYXNFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVtb3ZlRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQobT86IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSBtIHx8IHRoaXMuc25hcHBpbmdNZXRob2QoKTtcclxuICAgIHJldHVybiBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQobWV0aG9kKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNOb3RTZWxlY3RpbmcobT86IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLm1ldGhvZEZvclNlbGVjdGluZygpO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5OT05FKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTaW5nbGVTZWxlY3RpbmcobT86IE1ldGhvZEZvclNlbGVjdGluZykge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLm1ldGhvZEZvclNlbGVjdGluZygpO1xyXG4gICAgcmV0dXJuIGlzTWV0aG9kRm9yU2VsZWN0aW5nKG1ldGhvZCwgTWV0aG9kc0ZvclNlbGVjdGluZy5TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc011bHRpU2VsZWN0aW5nKG0/OiBNZXRob2RGb3JTZWxlY3RpbmcpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5tZXRob2RGb3JTZWxlY3RpbmcoKTtcclxuICAgIHJldHVybiBpc01ldGhvZEZvclNlbGVjdGluZyhtZXRob2QsIE1ldGhvZHNGb3JTZWxlY3RpbmcuTVVMVElfU0VMRUNUKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNWZXJ0aWNhbChkPzogRGlyZWN0aW9uKSB7XHJcbiAgICBjb25zdCBkaXIgPSBkIHx8IHRoaXMuZGlyZWN0aW9uKCk7XHJcbiAgICByZXR1cm4gaXNEaXJlY3Rpb24oZGlyLCBEaXJlY3Rpb25zLlZFUlRJQ0FMKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCkge1xyXG4gICAgaWYgKCFkaXNwbGF5SXRlbXMgfHwgIXRoaXMuX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh7fSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuc25hcCgpKSB7XHJcbiAgICAgIGlmICghdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ID0gY29tcDtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5zbmFwZWREaXNwbGF5Q29tcG9uZW50ID0gdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIub2JzZXJ2ZShjb21wLmluc3RhbmNlLmVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guaXRlbXMgPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgY29uc3QgX2xpc3RDb250YWluZXJSZWYgPSB0aGlzLl9saXN0Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGNvbnN0IG1heExlbmd0aCA9IGRpc3BsYXlJdGVtcy5sZW5ndGgsIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICB3aGlsZSAoY29tcG9uZW50cy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcclxuICAgICAgaWYgKF9saXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IF9saXN0Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3MpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzZXRSZW5kZXJlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUmVndWxhclJlbmRlcmVyKCkge1xyXG4gICAgdGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRSZW5kZXJlcnMoaXRlbVJlbmRlcmVyPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+KSB7XHJcbiAgICBjb25zdCBkb01hcDogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9ID0ge30sIGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IGNvbXBvbmVudHNbaV07XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtLmluc3RhbmNlLmlkO1xyXG4gICAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5faXRlbVJlbmRlcmVyKCk7XHJcbiAgICAgICAgZG9NYXBbaWRdID0gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zbmFwKCkgJiYgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50O1xyXG4gICAgICBjb21wLmluc3RhbmNlLnJlbmRlcmVyID0gaXRlbVJlbmRlcmVyIHx8IHRoaXMuX2l0ZW1SZW5kZXJlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LnNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoZG9NYXApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tpbmcgYnkgaWRcclxuICAgKi9cclxuICBwcml2YXRlIHRyYWNraW5nKCkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3gudHJhY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWw6IGJvb2xlYW4sIHRvdGFsU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsID0gdGhpcy5fbGlzdCgpO1xyXG4gICAgaWYgKGwpIHtcclxuICAgICAgbC5uYXRpdmVFbGVtZW50LnN0eWxlW2lzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FXSA9IGAke3RvdGFsU2l6ZX0ke1BYfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveC5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICogQmVoYXZpb3IgYWNjZXB0cyB0aGUgdmFsdWVzIOKAi+KAi1wiYXV0b1wiLCBcImluc3RhbnRcIiBhbmQgXCJzbW9vdGhcIi5cclxuICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8pIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG9FeGVjdXRvcihpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciwgaXRlcmF0aW9uOiBudW1iZXIgPSAwLCBpc0xhc3RJdGVyYXRpb24gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zKCk7XHJcbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNTaXplID0gdGhpcy5keW5hbWljU2l6ZSgpLCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIoKSwgaXRlbVNpemUgPSB0aGlzLml0ZW1TaXplKCk7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuXHJcbiAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl9ib3VuZHMoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCgpLCBpdGVtcyA9IHRoaXMuaXRlbXMoKSwgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICBvcHRzOiBJR2V0SXRlbVBvc2l0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgICAgYm91bmRzOiB7IHdpZHRoLCBoZWlnaHQgfSwgY29sbGVjdGlvbjogaXRlbXMsIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyU2l6ZTogdGhpcy5idWZmZXJTaXplKCksIG1heEJ1ZmZlclNpemU6IHRoaXMubWF4QnVmZmVyU2l6ZSgpLFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpICsgZGVsdGEsXHJcbiAgICAgICAgICAgIHNuYXA6IHRoaXMuc25hcCgpLCBmcm9tSXRlbUlkOiBpZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogdGhpcy5lbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKCksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgb3B0cyksXHJcbiAgICAgICAgICBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHsgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvciB9O1xyXG5cclxuICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgIC4uLm9wdHMsIHNjcm9sbFNpemUsIGZyb21JdGVtSWQ6IGlzTGFzdEl0ZXJhdGlvbiA/IHVuZGVmaW5lZCA6IGlkLFxyXG4gICAgICAgICAgfSksIGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZSArIGRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBfc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoX3Njcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGFjdHVhbFNjcm9sbFNpemUgPT09IF9zY3JvbGxTaXplXHJcblxyXG4gICAgICAgICAgaWYgKCFub3RDaGFuZ2VkIHx8IGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgQkVIQVZJT1JfSU5TVEFOVCwgaXRlcmF0aW9uICsgMSwgbm90Q2hhbmdlZCk7XHJcbiAgICAgICAgICAgIH0pIGFzIHVua25vd24gYXMgbnVtYmVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsU2l6ZS5zZXQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHBhcmFtcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX3Njcm9sbFNpemUuc2V0KHNjcm9sbFNpemUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBzY3JvbGxTaXplID0gaW5kZXggKiB0aGlzLml0ZW1TaXplKCk7XHJcbiAgICAgICAgICBjb25zdCBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHsgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvciB9O1xyXG4gICAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBkZXNpcmVkIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvRW5kKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0lOU1RBTlQpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcygpLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIHRoaXMuc2Nyb2xsVG8obGF0SXRlbS5pZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25Db250YWluZXJTY3JvbGxIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcigpO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIDogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSB0aGlzLl9zY3JvbGxTaXplKCkgPiBzY3JvbGxTaXplID8gLTEgOiB0aGlzLl9zY3JvbGxTaXplKCkgPCBzY3JvbGxTaXplID8gMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBsaXN0OiB0aGlzLl9saXN0KCkhLm5hdGl2ZUVsZW1lbnQsIGRlbHRhOiB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICBzY3JvbGxEZWx0YTogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGVsdGEsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vblNjcm9sbC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXIoKTtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gdGhpcy5fc2Nyb2xsU2l6ZSgpID4gc2Nyb2xsU2l6ZSA/IC0xIDogMDtcclxuXHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiwgY29udGFpbmVyOiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIGxpc3Q6IHRoaXMuX2xpc3QoKSEubmF0aXZlRWxlbWVudCwgZGVsdGE6IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgIHNjcm9sbERlbHRhOiB0aGlzLl90cmFja0JveC5zY3JvbGxEZWx0YSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm9uU2Nyb2xsRW5kLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlclZpZXdJbml0KCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXIoKTtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICAvLyBmb3IgZGlyZWN0aW9uIGNhbGN1bGF0aW9uXHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTExfRU5ELCB0aGlzLl9vbkNvbnRhaW5lclNjcm9sbEVuZEhhbmRsZXIpO1xyXG5cclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuXHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX29uUmVzaXplSGFuZGxlcik7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgICB0aGlzLl9vblJlc2l6ZUhhbmRsZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl90cmFja0JveCkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyKCk7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTF9FTkQsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudC5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLnBvcCgpO1xyXG4gICAgICAgIGNvbXA/LmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaWYgKHNuYXAoKSkge1xyXG4gIDxkaXYgI3NuYXBwZWQgcGFydD1cInNuYXBwZWQtaXRlbVwiIGNsYXNzPVwibmd2bF9fbGlzdC1zbmFwcGVyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICNzbmFwUmVuZGVyZXJDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbn1cclxuPGRpdiAjY29udGFpbmVyIHBhcnQ9XCJzY3JvbGxlclwiIGNsYXNzPVwibmd2bF9fc2Nyb2xsZXJcIj5cclxuICA8ZGl2IFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwib3JpZW50YXRpb25cIiAjbGlzdCBwYXJ0PVwibGlzdFwiIGNsYXNzPVwibmd2bF9fbGlzdFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAjcmVuZGVyZXJzQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
@@ -18,6 +18,7 @@ export class NgVirtualListService {
|
|
|
18
18
|
}
|
|
19
19
|
selectByClick = DEFAULT_SELECT_BY_CLICK;
|
|
20
20
|
_trackBox;
|
|
21
|
+
listElement = null;
|
|
21
22
|
constructor() {
|
|
22
23
|
this._$methodOfSelecting.pipe(takeUntilDestroyed(), tap(v => {
|
|
23
24
|
switch (v) {
|
|
@@ -124,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
124
125
|
providedIn: 'root'
|
|
125
126
|
}]
|
|
126
127
|
}], ctorParameters: () => [] });
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBS2xELE1BQU0sT0FBTyxvQkFBb0I7SUFDdkIsZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0lBRTdCLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMkMsQ0FBQztJQUM3RSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVyQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQTZCLFNBQVMsQ0FBQyxDQUFDO0lBQ25GLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXpDLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUEyQixDQUFDLENBQUMsQ0FBQztJQUMvRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFN0QsSUFBSSxpQkFBaUIsQ0FBQyxDQUEyQjtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxhQUFhLEdBQVksdUJBQXVCLENB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QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2hDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsUUFBa0I7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFDLGdCQUFnQjtZQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7d0dBdEhVLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFja0JveCB9IGZyb20gJy4vdXRpbHMvdHJhY2tCb3gnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9tZXRob2QtZm9yLXNlbGVjdGluZy10eXBlcyc7XHJcbmltcG9ydCB7IERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLIH0gZnJvbSAnLi9jb25zdCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfbmV4dENvbXBvbmVudElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kaXRlbUNsaWNrID0gbmV3IFN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkPigpO1xyXG4gICRpdGVtQ2xpY2sgPSB0aGlzLl8kaXRlbUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJG1ldGhvZE9mU2VsZWN0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXM+KDApO1xyXG4gICRtZXRob2RPZlNlbGVjdGluZyA9IHRoaXMuXyRtZXRob2RPZlNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IG1ldGhvZE9mU2VsZWN0aW5nKHY6IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcykge1xyXG4gICAgdGhpcy5fJG1ldGhvZE9mU2VsZWN0aW5nLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcblxyXG4gIHByaXZhdGUgX3RyYWNrQm94OiBUcmFja0JveCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl8kbWV0aG9kT2ZTZWxlY3RpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHYpIHtcclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciAhPT0gJ251bWJlcicgJiYgdHlwZW9mIGN1cnIgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZElkcyhpZHM6IEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShpZHMpKSB7XHJcbiAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGlkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpdGVtQ2xpY2soZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fJGl0ZW1DbGljay5uZXh0KGRhdGEpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0QnlDbGljaykge1xyXG4gICAgICB0aGlzLnNlbGVjdChkYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdHMgYSBsaXN0IGl0ZW1cclxuICAgKiBAcGFyYW0gZGF0YSBcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAqL1xyXG4gIHNlbGVjdChkYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBzZWxlY3RlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5jb25maWcuc2VsZWN0YWJsZSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuXyRtZXRob2RPZlNlbGVjdGluZy5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgYXMgKElkIHwgdW5kZWZpbmVkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIgIT09IGRhdGE/LmlkID8gZGF0YT8uaWQgOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoc2VsZWN0ZWQgPyBkYXRhPy5pZCA6IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTVVMVElfU0VMRUNUOiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gWy4uLih0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSB8fCBbXSkgYXMgQXJyYXk8SWQ+XSwgaW5kZXggPSBjdXJyLmluZGV4T2YoZGF0YS5pZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIGN1cnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChbLi4uY3VyciwgZGF0YS5pZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGRhdGEuaWRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5OT05FOlxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKHRyYWNrQm94OiBUcmFja0JveCkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3ggPSB0cmFja0JveDtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQ29tcG9uZW50SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV4dENvbXBvbmVudElkID0gdGhpcy5fbmV4dENvbXBvbmVudElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgKyAxO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBS2xELE1BQU0sT0FBTyxvQkFBb0I7SUFDdkIsZ0JBQWdCLEdBQVcsQ0FBQyxDQUFDO0lBRTdCLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMkMsQ0FBQztJQUM3RSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVyQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQTZCLFNBQVMsQ0FBQyxDQUFDO0lBQ25GLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXpDLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUEyQixDQUFDLENBQUMsQ0FBQztJQUMvRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFN0QsSUFBSSxpQkFBaUIsQ0FBQyxDQUEyQjtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxhQUFhLEdBQVksdUJBQXVCLENB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QUM7NEJBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2hDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsUUFBa0I7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFDLGdCQUFnQjtZQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7d0dBeEhVLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFja0JveCB9IGZyb20gJy4vdXRpbHMvdHJhY2tCb3gnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9tZXRob2QtZm9yLXNlbGVjdGluZy10eXBlcyc7XHJcbmltcG9ydCB7IERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLIH0gZnJvbSAnLi9jb25zdCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfbmV4dENvbXBvbmVudElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kaXRlbUNsaWNrID0gbmV3IFN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgdW5kZWZpbmVkPigpO1xyXG4gICRpdGVtQ2xpY2sgPSB0aGlzLl8kaXRlbUNsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJG1ldGhvZE9mU2VsZWN0aW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXM+KDApO1xyXG4gICRtZXRob2RPZlNlbGVjdGluZyA9IHRoaXMuXyRtZXRob2RPZlNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IG1ldGhvZE9mU2VsZWN0aW5nKHY6IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcykge1xyXG4gICAgdGhpcy5fJG1ldGhvZE9mU2VsZWN0aW5nLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcblxyXG4gIHByaXZhdGUgX3RyYWNrQm94OiBUcmFja0JveCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgbGlzdEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fJG1ldGhvZE9mU2VsZWN0aW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgIT09ICdudW1iZXInICYmIHR5cGVvZiBjdXJyICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5NVUxUSV9TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk5PTkU6XHJcbiAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRJZHMoaWRzOiBBcnJheTxJZD4gfCBJZCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoaWRzKSkge1xyXG4gICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChpZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXRlbUNsaWNrKGRhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuXyRpdGVtQ2xpY2submV4dChkYXRhKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdEJ5Q2xpY2spIHtcclxuICAgICAgdGhpcy5zZWxlY3QoZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3RzIGEgbGlzdCBpdGVtXHJcbiAgICogQHBhcmFtIGRhdGEgXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgKi9cclxuICBzZWxlY3QoZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgc2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcclxuICAgIGlmIChkYXRhICYmIGRhdGEuY29uZmlnLnNlbGVjdGFibGUpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLl8kbWV0aG9kT2ZTZWxlY3RpbmcuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpIGFzIChJZCB8IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyICE9PSBkYXRhPy5pZCA/IGRhdGE/LmlkIDogdW5kZWZpbmVkKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHNlbGVjdGVkID8gZGF0YT8uaWQgOiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IFsuLi4odGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sIGluZGV4ID0gY3Vyci5pbmRleE9mKGRhdGEuaWQpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGRhdGEuaWRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFsuLi5jdXJyLCBkYXRhLmlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZSh0cmFja0JveDogVHJhY2tCb3gpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94ID0gdHJhY2tCb3g7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUNvbXBvbmVudElkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX25leHRDb21wb25lbnRJZCA9IHRoaXMuX25leHRDb21wb25lbnRJZCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogdGhpcy5fbmV4dENvbXBvbmVudElkICsgMTtcclxuICB9XHJcbn1cclxuIl19
|