@smartbit4all/ng-client 3.3.164 → 3.3.165
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/smart-client/smart-component-api-client.mjs +5 -2
- package/fesm2015/smartbit4all-ng-client.mjs +5 -3
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
- package/fesm2020/smartbit4all-ng-client.mjs +4 -2
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-client/smart-component-api-client.d.ts +2 -1
- package/package.json +1 -1
- package/smartbit4all-ng-client-3.3.165.tgz +0 -0
- package/smartbit4all-ng-client-3.3.164.tgz +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ChangeDetectorRef, } from '@angular/core';
|
|
1
2
|
import { Subject, takeUntil } from 'rxjs';
|
|
2
3
|
import { SmarttreeGenericService } from '../smart-tree/projects';
|
|
3
4
|
import { DataChangeKind, SmartViewContextService, UiActionDescriptorService, UiActionService, } from '../view-context/projects';
|
|
@@ -32,6 +33,7 @@ export class SmartComponentApiClient {
|
|
|
32
33
|
throw new Error('pageName or componentName must be specified!');
|
|
33
34
|
}
|
|
34
35
|
this.viewContext = inject.get(SmartViewContextService);
|
|
36
|
+
this.changeDetector = inject.get(ChangeDetectorRef);
|
|
35
37
|
if (this._componentName) {
|
|
36
38
|
let pageNameForComponent = this.viewContext.getPageNameOfComponent(this._componentName);
|
|
37
39
|
if (!this.pageName) {
|
|
@@ -210,7 +212,6 @@ export class SmartComponentApiClient {
|
|
|
210
212
|
SmartStyleUtility.applyStyle(this.model?.style, this.element, this.renderer);
|
|
211
213
|
SmartStyleUtility.applyStyle(this.model?.parentStyle, this.element, this.renderer, true);
|
|
212
214
|
this.initData();
|
|
213
|
-
this.initActions();
|
|
214
215
|
if (this.useQueryLists) {
|
|
215
216
|
this.getAllSmartFormComponents()?.forEach((form) => {
|
|
216
217
|
if (form.smartForm) {
|
|
@@ -220,6 +221,8 @@ export class SmartComponentApiClient {
|
|
|
220
221
|
}
|
|
221
222
|
});
|
|
222
223
|
}
|
|
224
|
+
this.changeDetector?.detectChanges();
|
|
225
|
+
this.initActions();
|
|
223
226
|
// TODO: layout, widgets
|
|
224
227
|
}
|
|
225
228
|
getAllSmartFormComponents() {
|
|
@@ -683,4 +686,4 @@ export class SmartComponentApiClient {
|
|
|
683
686
|
this.model.constraints = changes[changeKey];
|
|
684
687
|
}
|
|
685
688
|
}
|
|
686
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFJTCxjQUFjLEVBR2QsdUJBQXVCLEVBR3ZCLHlCQUF5QixFQUd6QixlQUFlLEdBSWhCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBMEIsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRixPQUFPLEVBS0wsZUFBZSxHQUNoQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFFTCwyQkFBMkIsR0FDNUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixNQUFNLE9BQWdCLHVCQUF1QjtJQTBHM0MsWUFDWSxNQUFnQixFQUNoQixJQUF5QyxFQUN6QyxRQUFpQixFQUNqQixjQUF1QixFQUN2QixPQUFvQixFQUNwQixRQUFvQjtRQUxwQixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQXFDO1FBQ3pDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsbUJBQWMsR0FBZCxjQUFjLENBQVM7UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFZ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QUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFNLENBQUMsU0FBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsT0FBK0IsRUFBRSxTQUFpQjtRQUMzRSxJQUFJLENBQUMsS0FBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxPQUErQixFQUFFLFNBQWlCO1FBQy9FLElBQUksQ0FBQyxLQUFNLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIEluamVjdG9yLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdHJlZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50TW9kZWwsXHJcbiAgQ29tcG9uZW50TW9kZWxDaGFuZ2UsXHJcbiAgRGF0YUNoYW5nZSxcclxuICBEYXRhQ2hhbmdlS2luZCxcclxuICBFeGVjdXRlVWlBY3Rpb25PcHRpb25zLFxyXG4gIFNtYXJ0VHJhbnNsYXRlU2VydmljZSxcclxuICBTbWFydFZpZXdDb250ZXh0U2VydmljZSxcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSxcclxuICBVaUFjdGlvbk1vZGVsLFxyXG4gIFVpQWN0aW9uUmVxdWVzdCxcclxuICBVaUFjdGlvblNlcnZpY2UsXHJcbiAgVWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlLFxyXG4gIFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCxcclxuICBVc2VVaUFjdGlvbjIsXHJcbn0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRBdXRoZW50aWNhdGlvblNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuL3NtYXJ0LWF1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydFN1YmplY3QgfSBmcm9tICcuLi9zbWFydC1zdWJqZWN0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgR3JpZE9wdGlvbnMsIFNtYXJ0R3JpZCwgU21hcnRHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vc21hcnQtZ3JpZC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRGb3JtLFxyXG4gIFNtYXJ0Rm9ybUludmFsaWRGaWVsZHMsXHJcbiAgU21hcnRmb3JtQ29tcG9uZW50LFxyXG4gIFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSxcclxuICBWYWx1ZUNoYW5nZU1vZGUsXHJcbn0gZnJvbSAnLi4vc21hcnQtZm9ybS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQsXHJcbiAgU21hcnRDb21wb25lbnRMYXlvdXRVdGlsaXR5LFxyXG59IGZyb20gJy4uL3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC1maWx0ZXItZWRpdG9yL3Byb2plY3QnO1xyXG5pbXBvcnQgeyBTbWFydFN0eWxlVXRpbGl0eSB9IGZyb20gJy4uL3ZpZXctY29udGV4dC91dGlsaXR5L3NtYXJ0LXN0eWxlLXV0aWxpdHknO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNtYXJ0Q29tcG9uZW50QXBpQ2xpZW50PFQ+IGltcGxlbWVudHMgVXNlVWlBY3Rpb24yIHtcclxuICBwcm90ZWN0ZWQgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxDb21wb25lbnRNb2RlbENoYW5nZT4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgcHJpdmF0ZSBfdXVpZD86IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSB1dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHByaXZhdGUgX25nQWZ0ZXJWaWV3SW5pdFBlcmZvcm1lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnZXQgdXVpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3V1aWQ7XHJcbiAgfVxyXG4gIHNldCB1dWlkKHV1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX3V1aWQgPT09IHV1aWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0VXVpZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIHRoaXMudmlld0NvbnRleHQudW5mb2xsb3codGhpcy51dWlkKTtcclxuICAgICAgZmlyc3RVdWlkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91dWlkID0gdXVpZDtcclxuICAgIGlmICh1dWlkKSB7XHJcbiAgICAgIHRoaXMuZ2V0V2lkZ2V0cygpLmZvckVhY2goKHJlZiwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgcmVmLnV1aWQgPSB1dWlkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVmIGluc3RhbmNlb2YgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlKSB7XHJcbiAgICAgICAgICByZWYuY29uZmlnLnV1aWQgPSB1dWlkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJlZiAmJiAhZmlyc3RVdWlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQgb24gdXVpZCBjaGFuZ2UuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCF0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy52aWV3Q29udGV4dC51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChwYWdlTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFnZU5hbWUgPT09IHRoaXMucGFnZU5hbWUhKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ydW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmlld0NvbnRleHQuZm9sbG93KHRoaXMuX3V1aWQhLCB0aGlzLmRldGVjdENoYW5nZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tb2RlbDogQ29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGdldCBtb2RlbCgpOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XHJcbiAgfVxyXG4gIHNldCBtb2RlbChtb2RlbDogQ29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50QnlNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0YT86IFQ7XHJcblxyXG4gIGdldCBkYXRhKCk6IFQgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG4gIHNldCBkYXRhKG1vZGVsOiBUIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9kYXRhID0gbW9kZWw7XHJcbiAgICB0aGlzLmRhdGFDaGFuZ2VkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1aUFjdGlvbk1vZGVsczogVWlBY3Rpb25Nb2RlbFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBkYXRhQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICAvLyBHcmlkXHJcbiAgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG5cclxuICAvLyBTZXJ2aWNlc1xyXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dDogU21hcnRWaWV3Q29udGV4dFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHVpQWN0aW9uU2VydmljZTogVWlBY3Rpb25TZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB0cmFuc2xhdGU/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XHJcblxyXG4gIC8vIFRyZWVcclxuICBwcml2YXRlIF9zbWFydFRyZWVTZXJ2aWNlPzogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2U7XHJcblxyXG4gIHB1YmxpYyBnZXQgc21hcnRUcmVlU2VydmljZSgpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc21hcnRUcmVlU2VydmljZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBzbWFydFRyZWVTZXJ2aWNlKHNtYXJ0VHJlZVNlcnZpY2U6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fc21hcnRUcmVlU2VydmljZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgZGVmYXVsdCB0cmVlIGhhcyBhbHJlYWR5IHNldCB1cCEnKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2UgPSBzbWFydFRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udGFpbmVkIFdpZGdldHNcclxuICB3aWRnZXRzOiBNYXA8c3RyaW5nLCBTbWFydEdyaWRDb21wb25lbnQgfCBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZD4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGZvcm1XaWRnZXRzOiBNYXA8c3RyaW5nLCBTbWFydGZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IE1hcCgpO1xyXG5cclxuICB1c2VRdWVyeUxpc3RzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNlbmRNb2RlbE9uV2lkZ2V0QWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGRhdGFDaGFuZ2VLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBkYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMgPSBuZXcgTWFwPFNtYXJ0Zm9ybUNvbXBvbmVudCwgU3Vic2NyaXB0aW9uPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBpbmplY3Q6IEluamVjdG9yLFxyXG4gICAgcHJvdGVjdGVkIGF1dGg6IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJvdGVjdGVkIHBhZ2VOYW1lPzogc3RyaW5nLFxyXG4gICAgcHJvdGVjdGVkIF9jb21wb25lbnROYW1lPzogc3RyaW5nLFxyXG4gICAgcHJvdGVjdGVkIGVsZW1lbnQ/OiBFbGVtZW50UmVmLFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyPzogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICAvLyBjaGVjayBhbmQgY2FsY3VsYXRlIHBhZ2VOYW1lXHJcbiAgICBpZiAoIXRoaXMucGFnZU5hbWUgJiYgIXRoaXMuX2NvbXBvbmVudE5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYWdlTmFtZSBvciBjb21wb25lbnROYW1lIG11c3QgYmUgc3BlY2lmaWVkIScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld0NvbnRleHQgPSBpbmplY3QuZ2V0KFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlKTtcclxuICAgIGlmICh0aGlzLl9jb21wb25lbnROYW1lKSB7XHJcbiAgICAgIGxldCBwYWdlTmFtZUZvckNvbXBvbmVudCA9IHRoaXMudmlld0NvbnRleHQuZ2V0UGFnZU5hbWVPZkNvbXBvbmVudCh0aGlzLl9jb21wb25lbnROYW1lKTtcclxuICAgICAgaWYgKCF0aGlzLnBhZ2VOYW1lKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlTmFtZSA9IHBhZ2VOYW1lRm9yQ29tcG9uZW50O1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZU5hbWUgIT09IHBhZ2VOYW1lRm9yQ29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYHBhZ2VOYW1lICgke3BhZ2VOYW1lfSkgYW5kIGNvbXBvbmVudE5hbWUgKCR7X2NvbXBvbmVudE5hbWV9KSBkb2Vzbid0IG1hdGNoIWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBmcm9tIHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGlzLnBhZ2VOYW1lXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKGNoYW5nZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25TZXJ2aWNlKTtcclxuICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBfbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJ1bigpO1xyXG4gIH1cclxuICBfbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0LnVuZm9sbG93KHRoaXMudXVpZCEpO1xyXG4gICAgdGhpcy53aWRnZXRzLmNsZWFyKCk7XHJcblxyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIF9uZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIGlmICghdGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdTbWFydENvbXBvbmVudExheW91dHNRTCBub3QgYXZhaWxhYmxlIScpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlMaXN0KHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKSEsIChjb21wKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29tcC5zbWFydENvbXBvbmVudExheW91dCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy51dWlkICYmIHRoaXMudXVpZCAhPT0gY29tcC51dWlkKSBjb21wLnV1aWQgPSB0aGlzLnV1aWQ7XHJcbiAgICAgICAgICBTbWFydENvbXBvbmVudExheW91dFV0aWxpdHkuZ2V0R3JpZHMoY29tcCkuZm9yRWFjaCgoZ3JpZCkgPT5cclxuICAgICAgICAgICAgdGhpcy5zZXR1cEdyaWRTZXJ2aWNlcyhncmlkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBmb3IgaGFuZGxpbmcgZW1iZWRkZWQgZm9ybXNcclxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5TGlzdCh0aGlzLmdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCkhLCAoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVEYXRhQ2hhbmdlU3Vic2NyaXB0aW9ucygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5nZXRTbWFydEZvcm1zUUwoKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignZ2V0U21hcnRGb3Jtc1FMIG5vdCBhdmFpbGFibGUhJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUxpc3QodGhpcy5nZXRTbWFydEZvcm1zUUwoKSEsIChmb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2VTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmdldFNtYXJ0R3JpZHNRTCgpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdTbWFydEdyaWRzUUwgbm90IGF2YWlsYWJsZSEnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5TGlzdCh0aGlzLmdldFNtYXJ0R3JpZHNRTCgpISwgKGdyaWQpID0+IHtcclxuICAgICAgICAgIGlmIChncmlkKSB7XHJcbiAgICAgICAgICAgIGlmIChncmlkLnNtYXJ0R3JpZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0dXBHcmlkU2VydmljZXMoZ3JpZCk7XHJcbiAgICAgICAgICAgICAgZ3JpZC5zZXR1cFRvb2xiYXIoKTtcclxuICAgICAgICAgICAgICBpZiAoZ3JpZC50b29sYmFyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV1aWQgJiYgdGhpcy51dWlkICE9PSBncmlkLnV1aWQpIGdyaWQudXVpZCA9IHRoaXMudXVpZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRTZXJ2aWNlcyhncmlkOiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgIGlmIChncmlkLnNtYXJ0R3JpZCkge1xyXG4gICAgICBpZiAoIWdyaWQuc21hcnRHcmlkLnVpQWN0aW9uU2VydmljZSkge1xyXG4gICAgICAgIGdyaWQuc21hcnRHcmlkLnVpQWN0aW9uU2VydmljZSA9IHRoaXMudWlBY3Rpb25TZXJ2aWNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghZ3JpZC5zbWFydEdyaWQudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSkge1xyXG4gICAgICAgIGdyaWQuc21hcnRHcmlkLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFncmlkLnNtYXJ0R3JpZC5zZXJ2aWNlVG9Vc2UpIHtcclxuICAgICAgICBncmlkLnNtYXJ0R3JpZC5zZXJ2aWNlVG9Vc2UgPSB0aGlzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghZ3JpZC5zbWFydEdyaWQudmlld0NvbnRleHRTZXJ2aWNlKSB7XHJcbiAgICAgICAgZ3JpZC5zbWFydEdyaWQudmlld0NvbnRleHRTZXJ2aWNlID0gdGhpcy52aWV3Q29udGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZVF1ZXJ5TGlzdFNpbXBsZTxUPihxbDogUXVlcnlMaXN0PFQ+LCBoYW5kbGVyOiAoKSA9PiB2b2lkKSB7XHJcbiAgICBoYW5kbGVyKCk7XHJcbiAgICBxbC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IGhhbmRsZXIoKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaGFuZGxlUXVlcnlMaXN0PFQ+KHFsOiBRdWVyeUxpc3Q8VD4sIGhhbmRsZXI6IChlbDogVCkgPT4gdm9pZCkge1xyXG4gICAgcWwuZm9yRWFjaCgoZWwpID0+IGhhbmRsZXIoZWwpKTtcclxuICAgIHFsLmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdCkgPT4gKGxpc3QgYXMgUXVlcnlMaXN0PFQ+KS5mb3JFYWNoKChlbCkgPT4gaGFuZGxlcihlbCkpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydEZvcm1zUUwoKTogUXVlcnlMaXN0PFNtYXJ0Zm9ybUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydEdyaWRzUUwoKTogUXVlcnlMaXN0PFNtYXJ0R3JpZENvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydFRyZWVzUUwoKTogUXVlcnlMaXN0PFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0RmlsdGVyU2VydmljZXNRTCgpOiBRdWVyeUxpc3Q8U21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0VWlBY3Rpb25Ub29sYmFyc1FMKCk6IFF1ZXJ5TGlzdDxVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKTpcclxuICAgIHwgUXVlcnlMaXN0PFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50PlxyXG4gICAgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBnZXRXaWRnZXRzKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIFNtYXJ0R3JpZENvbXBvbmVudCB8IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIHwgdW5kZWZpbmVkXHJcbiAgPiB7XHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIGxldCB3aWRnZXRzOiBNYXA8XHJcbiAgICAgICAgc3RyaW5nLFxyXG4gICAgICAgIFNtYXJ0R3JpZENvbXBvbmVudCB8IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIHwgdW5kZWZpbmVkXHJcbiAgICAgID4gPSBuZXcgTWFwKCk7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRHcmlkQ29tcG9uZW50cygpXHJcbiAgICAgICAgLmZpbHRlcigoZ3JpZCkgPT4gKGdyaWQ/LnNtYXJ0R3JpZD8uZ3JpZElkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKChncmlkKSA9PiB3aWRnZXRzLnNldChncmlkLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsIGdyaWQpKTtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydFRyZWVDb21wb25lbnRzKClcclxuICAgICAgICAuZmlsdGVyKCh0cmVlKSA9PiAodHJlZT8uc21hcnRUcmVlTW9kZWw/LmlkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKCh0cmVlKSA9PiB3aWRnZXRzLnNldCh0cmVlIS5zbWFydFRyZWVNb2RlbCEuaWRlbnRpZmllciEsIHRyZWUpKTtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZpbHRlckVkaXRvclNlcnZpY2VzKClcclxuICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IChmaWx0ZXIuY29uZmlnLmlkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKChmaWx0ZXIpID0+IHdpZGdldHMuc2V0KGZpbHRlci5jb25maWcuaWRlbnRpZmllciwgZmlsdGVyKSk7XHJcbiAgICAgIHJldHVybiB3aWRnZXRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0cztcclxuICB9XHJcblxyXG4gIGluaXRDb21wb25lbnRCeU1vZGVsKCk6IHZvaWQge1xyXG4gICAgU21hcnRTdHlsZVV0aWxpdHkuYXBwbHlTdHlsZSh0aGlzLm1vZGVsPy5zdHlsZSwgdGhpcy5lbGVtZW50LCB0aGlzLnJlbmRlcmVyKTtcclxuICAgIFNtYXJ0U3R5bGVVdGlsaXR5LmFwcGx5U3R5bGUodGhpcy5tb2RlbD8ucGFyZW50U3R5bGUsIHRoaXMuZWxlbWVudCwgdGhpcy5yZW5kZXJlciwgdHJ1ZSk7XHJcbiAgICB0aGlzLmluaXREYXRhKCk7XHJcbiAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcblxyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtLnNtYXJ0Rm9ybSkge1xyXG4gICAgICAgICAgZm9ybS5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwgPSB0aGlzLm1vZGVsO1xyXG4gICAgICAgICAgLy8gdXNlcyBkYXRhLCB2YWx1ZVNldHMsIGNvbnN0cmFpbnRzXHJcbiAgICAgICAgICBmb3JtLmNvbnN0cnVjdEZvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogbGF5b3V0LCB3aWRnZXRzXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpOiBTbWFydGZvcm1Db21wb25lbnRbXSB7XHJcbiAgICBsZXQgZm9ybXM6IFNtYXJ0Zm9ybUNvbXBvbmVudFtdID0gdGhpcy5nZXRTbWFydEZvcm1zUUwoKT8udG9BcnJheSgpID8/IFtdO1xyXG4gICAgdGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpPy5mb3JFYWNoKChjb21wKSA9PiB7XHJcbiAgICAgIGZvcm1zLnB1c2goLi4uU21hcnRDb21wb25lbnRMYXlvdXRVdGlsaXR5LmdldEZvcm1zKGNvbXApKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm1zO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0R3JpZENvbXBvbmVudHMoKTogU21hcnRHcmlkQ29tcG9uZW50W10ge1xyXG4gICAgbGV0IGdyaWRzOiBTbWFydEdyaWRDb21wb25lbnRbXSA9IHRoaXMuZ2V0U21hcnRHcmlkc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICBncmlkcy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRHcmlkcyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncmlkcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxTbWFydFRyZWVDb21wb25lbnRzKCk6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlW10ge1xyXG4gICAgbGV0IHRyZWVzOiBTbWFydHRyZWVHZW5lcmljU2VydmljZVtdID0gdGhpcy5nZXRTbWFydFRyZWVzUUwoKT8udG9BcnJheSgpID8/IFtdO1xyXG4gICAgdGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpPy5mb3JFYWNoKChjb21wKSA9PiB7XHJcbiAgICAgIHRyZWVzLnB1c2goLi4uU21hcnRDb21wb25lbnRMYXlvdXRVdGlsaXR5LmdldFRyZWVzKGNvbXApKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRyZWVzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZXMoKTogU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlW10ge1xyXG4gICAgbGV0IGZpbHRlcnM6IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZVtdID0gdGhpcy5nZXRTbWFydEZpbHRlclNlcnZpY2VzUUwoKT8udG9BcnJheSgpID8/IFtdO1xyXG4gICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QWxsU21hcnRVaUFjdGlvblRvb2xiYXJzKCk6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudFtdIHtcclxuICAgIGxldCB0b29sYmFyczogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50W10gPSB0aGlzLmdldFNtYXJ0VWlBY3Rpb25Ub29sYmFyc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0QWxsU21hcnRHcmlkQ29tcG9uZW50cygpPy5mb3JFYWNoKChncmlkKSA9PiB7XHJcbiAgICAgIGlmIChncmlkLnRvb2xiYXIpIHtcclxuICAgICAgICB0b29sYmFycy5wdXNoKGdyaWQudG9vbGJhcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpPy5mb3JFYWNoKChjb21wKSA9PiB7XHJcbiAgICAgIHRvb2xiYXJzLnB1c2goLi4uU21hcnRDb21wb25lbnRMYXlvdXRVdGlsaXR5LmdldFRvb2xiYXJzKGNvbXApKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRBbGxTbWFydEZvcm1Db21wb25lbnRzKClcclxuICAgICAgPy5mbGF0TWFwKChmb3JtKSA9PiBmb3JtLmdldFRvb2xiYXJzKCkpXHJcbiAgICAgIC5maWx0ZXIoKHRvb2xiYXIpID0+IHRvb2xiYXIgIT09IHVuZGVmaW5lZCB8fCB0b29sYmFyICE9PSBudWxsKVxyXG4gICAgICAuZm9yRWFjaCgodG9vbGJhcikgPT4gdG9vbGJhcnMucHVzaCh0b29sYmFyIGFzIFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCkpO1xyXG5cclxuICAgIHJldHVybiB0b29sYmFycztcclxuICB9XHJcblxyXG4gIGluaXREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9kZWw/LmRhdGEpIHtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5tb2RlbD8uZGF0YSBhcyBhbnk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0QWN0aW9ucygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGVsPy5hY3Rpb25zKSB7XHJcbiAgICAgIGxldCB1aUFjdGlvbk1vZGVscyA9IHRoaXMubW9kZWw/LmFjdGlvbnMubWFwKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICAgICAgdWlBY3Rpb24sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCB0b29sYmFycyA9IHRoaXMuZ2V0QWxsU21hcnRVaUFjdGlvblRvb2xiYXJzKCkuZmlsdGVyKCh0b29sYmFyKSA9PiB0b29sYmFyLmlkKTtcclxuICAgICAgbGV0IHRvb2xiYXJNb2RlbHMgPSBuZXcgTWFwPHN0cmluZywgVWlBY3Rpb25Nb2RlbFtdPigpO1xyXG4gICAgICB0b29sYmFycy5mb3JFYWNoKCh0b29sYmFyKSA9PiB7XHJcbiAgICAgICAgdG9vbGJhck1vZGVscy5zZXQodG9vbGJhci5pZCEsIFtdKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBnbG9iYWxVaUFjdGlvbk1vZGVsczogVWlBY3Rpb25Nb2RlbFtdID0gW107XHJcbiAgICAgIHVpQWN0aW9uTW9kZWxzLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGxldCBhY3Rpb25Nb2RlbDogVWlBY3Rpb25Nb2RlbFtdIHwgdW5kZWZpbmVkID0gZ2xvYmFsVWlBY3Rpb25Nb2RlbHM7XHJcbiAgICAgICAgbGV0IHRvb2xiYXJJZCA9IGFjdGlvbi51aUFjdGlvbi50b29sYmFyO1xyXG4gICAgICAgIGlmICh0b29sYmFySWQgJiYgdG9vbGJhck1vZGVscy5oYXModG9vbGJhcklkKSkge1xyXG4gICAgICAgICAgYWN0aW9uTW9kZWwgPSB0b29sYmFyTW9kZWxzLmdldCh0b29sYmFySWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFjdGlvbk1vZGVsKSB7XHJcbiAgICAgICAgICBhY3Rpb25Nb2RlbCA9IGdsb2JhbFVpQWN0aW9uTW9kZWxzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhY3Rpb25Nb2RlbC5wdXNoKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gZ2xvYmFsVWlBY3Rpb25Nb2RlbHM7XHJcblxyXG4gICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICB0b29sYmFycy5tYXAoKHRvb2xiYXIpID0+IHtcclxuICAgICAgICAgIHRvb2xiYXIudWlBY3Rpb25Nb2RlbHMgPSB0b29sYmFyTW9kZWxzLmdldCh0b29sYmFyLmlkISk7XHJcbiAgICAgICAgICByZXR1cm4gdG9vbGJhci5zZXRVcCgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb250aW51ZSBjb2RlIGhlcmUgaWYgbmVlZGVkXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdG9vbGJhciBzZXR1cDonLCBlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBydW4oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdXRoLmJmZkFwaXNIYXZlQmVlblNldFVwKSB7XHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hdXRoLmhlYWRlcnNVcGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcbiAgICAvLyB0aGlzLm1vZGVsID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5sb2FkKHRoaXMudXVpZCk7XHJcbiAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmxvYWQyKHRoaXMudXVpZCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBleGVjdXRlVWlBY3Rpb24odWlBY3Rpb246IFVpQWN0aW9uLCBvcHRpb25zPzogRXhlY3V0ZVVpQWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHtcclxuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICB1aUFjdGlvbjogdWlBY3Rpb24sXHJcbiAgICB9O1xyXG4gICAgYXdhaXQgdGhpcy51aUFjdGlvblNlcnZpY2UuZXhlY3V0ZSh1aUFjdGlvbiwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBhZGREYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcihrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmRhdGFDaGFuZ2VLZXlzLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgdGhpcy5kYXRhQ2hhbmdlS2V5cy5wdXNoKGtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVEYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcihrZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGlkeCA9IHRoaXMuZGF0YUNoYW5nZUtleXMuaW5kZXhPZihrZXkpO1xyXG4gICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZGF0YUNoYW5nZUtleXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoZXZlbnQ6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YUNoYW5nZUtleXMuaW5jbHVkZXMoZXZlbnQua2V5KSkge1xyXG4gICAgICB0aGlzLmV4ZWN1dGVVaUFjdGlvbih7XHJcbiAgICAgICAgY29kZTogZXZlbnQua2V5LFxyXG4gICAgICAgIG1vZGVsOiB0cnVlLFxyXG4gICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgaXRlbTogZXZlbnQudmFsdWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaGFuZGxlRGF0YUNoYW5nZVN1YnNjcmlwdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIGxldCBmb3JtcyA9IHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpO1xyXG4gICAgICAvLyBhZGQgZWxlbWVudHMgdG8gZGF0YUNoYW5nZUtleXNcclxuICAgICAgZm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGZvcm0uc21hcnRGb3JtPy53aWRnZXRzLmZvckVhY2goKHdpZGdldCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHdpZGdldC5rZXkpIHtcclxuICAgICAgICAgICAgaWYgKHdpZGdldC52YWx1ZUNoYW5nZU1vZGUgPT09IFZhbHVlQ2hhbmdlTW9kZS5JTU1FRElBVEVfQUNUSU9OKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGREYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcih3aWRnZXQua2V5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZURhdGFDaGFuZ2VBY3Rpb25IYW5kbGVyKHdpZGdldC5rZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBzdWJzY3JpYmUgdG8gbmV3IGZvcm1zXHJcbiAgICAgIGZvcm1zLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuaGFzKGNvbXBvbmVudCkpIHtcclxuICAgICAgICAgIGxldCBzdWJzID0gY29tcG9uZW50LnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcihldmVudCkpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuc2V0KGNvbXBvbmVudCwgc3Vicyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIHVuc3Vic2NyaWJlIGZyb20gcmVtb3ZlZCBmb3Jtc1xyXG4gICAgICB0aGlzLmRhdGFDaGFuZ2VBY3Rpb25IYW5kbGVycy5mb3JFYWNoKChzdWJzLCBmb3JtKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmb3Jtcy5maW5kKChjKSA9PiBjID09PSBmb3JtKSkge1xyXG4gICAgICAgICAgc3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuZGVsZXRlKGZvcm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJbnZhbGlkRmllbGRzKCk6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHMge1xyXG4gICAgbGV0IGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzID0ge1xyXG4gICAgICBpbnZhbGlkRmllbGRLZXlzOiBbXSxcclxuICAgICAgaW52YWxpZEZpZWxkTmFtZXM6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpPy5mb3JFYWNoKChmb3JtKSA9PlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVGb3JtKGZvcm0sIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtV2lkZ2V0cz8uZm9yRWFjaCgoZm9ybSkgPT4gdGhpcy52YWxpZGF0ZUZvcm0oZm9ybSwgYWdncmVnYXRlZEludmFsaWRGaWVsZHMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWdncmVnYXRlZEludmFsaWRGaWVsZHM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdmFsaWRhdGVGb3JtKFxyXG4gICAgZm9ybTogU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkLFxyXG4gICAgYWdncmVnYXRlZEludmFsaWRGaWVsZHM6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHNcclxuICApIHtcclxuICAgIGxldCBpbnZhbGlkRmllbGRzT2ZGb3JtID0gZm9ybT8uZ2V0SW52YWxpZEZpZWxkcygpO1xyXG4gICAgaWYgKGludmFsaWRGaWVsZHNPZkZvcm0pIHtcclxuICAgICAgaW52YWxpZEZpZWxkc09mRm9ybS5pbnZhbGlkRmllbGRLZXlzLmZvckVhY2goKGtleSkgPT5cclxuICAgICAgICBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkcy5pbnZhbGlkRmllbGRLZXlzLnB1c2goa2V5KVxyXG4gICAgICApO1xyXG4gICAgICBpbnZhbGlkRmllbGRzT2ZGb3JtLmludmFsaWRGaWVsZE5hbWVzLmZvckVhY2goKGtleSkgPT5cclxuICAgICAgICBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkcy5pbnZhbGlkRmllbGROYW1lcy5wdXNoKGtleSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBVc2VVaUFjdGlvblxyXG4gIGdldEFkZGl0aW9uYWxQYXJhbXModWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvclRleHRBcmVhOiAnJyxcclxuICAgICAgZm9yVGV4dEZpZWxkOiAnJyxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdEZvcm0odmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWl0Rm9ybXModmFsaWRhdGUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGVyZm9ybVVpQWN0aW9uUmVxdWVzdChcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgd2lkZ2V0SWQ/OiBzdHJpbmcsXHJcbiAgICBub2RlSWQ/OiBzdHJpbmdcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ19maWxlcyddKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1sncGFyYW0nXTtcclxuICAgICAgY29uc3QgZmlsZXMgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXTtcclxuICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ2lzTXVsdGlwbGUnXTtcclxuICAgICAgZGVsZXRlIHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ3BhcmFtJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXTtcclxuICAgICAgZGVsZXRlIHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ2lzTXVsdGlwbGUnXTtcclxuXHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgaWYgKCFpc011bHRpcGxlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtVXBsb2FkQWN0aW9uKHRoaXMudXVpZCEsIHVpQWN0aW9uUmVxdWVzdCwgcGFyYW0sIGZpbGVzWzBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbihcclxuICAgICAgICAgIHRoaXMudXVpZCEsXHJcbiAgICAgICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgICBwYXJhbSxcclxuICAgICAgICAgIGZpbGVzXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh3aWRnZXRJZCAmJiBub2RlSWQpIHtcclxuICAgICAgLy8gYXdhaXQgdGhpcy5zZW5kTW9kZWxUb1NlcnZlcigpO1xyXG4gICAgICB0aGlzLmFkZE1vZGVsVG9XaWRnZXRBY3Rpb24odWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtV2lkZ2V0QWN0aW9uKHRoaXMudXVpZCEsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9IGVsc2UgaWYgKHdpZGdldElkKSB7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgdGhpcy5hZGRNb2RlbFRvV2lkZ2V0QWN0aW9uKHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVdpZGdldE1haW5BY3Rpb24odGhpcy51dWlkISwgd2lkZ2V0SWQsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1BY3Rpb24odGhpcy51dWlkISwgdWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhZGRNb2RlbFRvV2lkZ2V0QWN0aW9uKHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KSB7XHJcbiAgICBpZiAodGhpcy5zZW5kTW9kZWxPbldpZGdldEFjdGlvbikge1xyXG4gICAgICB0aGlzLnN1Ym1pdEZvcm0oZmFsc2UpO1xyXG4gICAgICAvLyBtaW1pYyBDb21wb25lbnRNb2RlbFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydjbGllbnRQYWdlTW9kZWwnXSA9IHsgZGF0YTogdGhpcy5nZXRNb2RlbCgpIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIGFzeW5jIHNlbmRNb2RlbFRvU2VydmVyKCkge1xyXG4gIC8vICAgdGhpcy5zdWJtaXRGb3JtcyhmYWxzZSk7XHJcbiAgLy8gICBsZXQgZGF0YUNoYW5nZSA9IHtcclxuICAvLyAgICAga2luZDogRGF0YUNoYW5nZUtpbmQuV2lkZ2V0LFxyXG4gIC8vICAgICBzb3VyY2U6ICcnLFxyXG4gIC8vICAgICB2YWx1ZXM6IFtbJycsIHRoaXMuZ2V0TW9kZWwoKV1dLFxyXG4gIC8vICAgfTtcclxuICAvLyAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQuZGF0YUNoYW5nZWQodGhpcy51dWlkISwgZGF0YUNoYW5nZSk7XHJcbiAgLy8gfVxyXG5cclxuICBoYW5kbGVTcGVjaWZpY0RlbWFuZHNBc3luY2hyb25vdXNseShcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTxVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2U+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkgbWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdHMgYWxsIHRoZSByZWdpc3RlcmVkIGZvcm1zIGluIHRoZSBTbWFydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdWJtaXRGb3Jtcyh2YWxpZGF0ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGZvcm0/LnN1Ym1pdEZvcm0odmFsaWRhdGUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybVdpZGdldHM/LmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBmb3JtPy5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkR3JpZChcclxuICAgIHNtYXJ0R3JpZDogU21hcnRHcmlkLFxyXG4gICAgb3B0aW9uczogR3JpZE9wdGlvbnMsXHJcbiAgICB1c2VBc0RlZmF1bHRHcmlkPzogYm9vbGVhbixcclxuICAgIGNvbXBvbmVudFJlZmVyZW5jZT86IFNtYXJ0R3JpZENvbXBvbmVudFxyXG4gICk6IFNtYXJ0R3JpZCB7XHJcbiAgICBzbWFydEdyaWQub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICBzbWFydEdyaWQudWlBY3Rpb25TZXJ2aWNlID0gdGhpcy51aUFjdGlvblNlcnZpY2U7XHJcbiAgICBzbWFydEdyaWQudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTtcclxuICAgIHNtYXJ0R3JpZC5zZXJ2aWNlVG9Vc2UgPSB0aGlzO1xyXG4gICAgc21hcnRHcmlkLnZpZXdDb250ZXh0U2VydmljZSA9IHRoaXMudmlld0NvbnRleHQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy53aWRnZXRzLnNldChzbWFydEdyaWQuZ3JpZElkZW50aWZpZXIsIGNvbXBvbmVudFJlZmVyZW5jZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEFkZGVkIHNtYXJ0R3JpZCB3aGVuIHVzZVF1ZXJ5TGlzdHMgPT09IHRydWUgKCR7c21hcnRHcmlkLmdyaWRJZGVudGlmaWVyfSlgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodXNlQXNEZWZhdWx0R3JpZCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHNtYXJ0R3JpZDtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRHcmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzbWFydEdyaWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRm9ybShcclxuICAgIHNtYXJ0Rm9ybUlkOiBzdHJpbmcsXHJcbiAgICBzbWFydEZvcm06IFNtYXJ0Rm9ybSxcclxuICAgIGNvbXBvbmVudFJlZmVyZW5jZT86IFNtYXJ0Zm9ybUNvbXBvbmVudFxyXG4gICk6IFNtYXJ0Rm9ybSB7XHJcbiAgICBpZiAoIXRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmZvcm1XaWRnZXRzLnNldChzbWFydEZvcm1JZCwgY29tcG9uZW50UmVmZXJlbmNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgQWRkZWQgc21hcnRGb3JtIHdoZW4gdXNlUXVlcnlMaXN0cyA9PT0gdHJ1ZSAoJHtzbWFydEZvcm1JZH0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuc2VuZERhdGFDaGFuZ2VzICYmIGNvbXBvbmVudFJlZmVyZW5jZSkge1xyXG4gICAgLy8gICBzbWFydEZvcm0udXNlT25WYWx1ZUNoYW5nZUV2ZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyAgIGNvbXBvbmVudFJlZmVyZW5jZS5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2VcclxuICAgIC8vICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgLy8gICAgIC5zdWJzY3JpYmUoKHZhbHVlQ2hhbmdlOiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UpID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2VzKHZhbHVlQ2hhbmdlKTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICByZXR1cm4gc21hcnRGb3JtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFVwRGVmYXVsdFRyZWUodHJlZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRUcmVlU2VydmljZSA9IHRoaXMuY3JlYXRlVHJlZVNlcnZpY2UodHJlZUlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVUcmVlU2VydmljZSh0cmVlSWQ6IHN0cmluZyk6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHtcclxuICAgIGNvbnN0IHRyZWVTZXJ2aWNlID0gbmV3IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlKHRoaXMuaW5qZWN0LCB0aGlzLnBhZ2VOYW1lISwgdHJlZUlkKTtcclxuICAgIGlmICghdGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cy5zZXQodHJlZUlkLCB0cmVlU2VydmljZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEFkZGVkIHNtYXJ0VHJlZSB3aGVuIHVzZVF1ZXJ5TGlzdHMgPT09IHRydWUgKCR7dHJlZUlkfSlgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJlZVNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRmlsZVVwbG9hZGVyKFxyXG4gICAgdWlBY3Rpb25Db2RlOiBzdHJpbmcsXHJcbiAgICBmaWxlRm9ybWF0cz86IHN0cmluZ1tdLFxyXG4gICAgbWF4U2l6ZU1iPzogbnVtYmVyLFxyXG4gICAgaXNNdWx0aXBsZT86IGJvb2xlYW5cclxuICApOiBTbWFydENvbXBvbmVudEZpbGVVcGxvYWRlciB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB1aUFjdGlvbkNvZGUsXHJcbiAgICAgIHNtYXJ0Q29tcG9uZW50OiB0aGlzLFxyXG4gICAgICBmaWxlRm9ybWF0cyxcclxuICAgICAgaXNNdWx0aXBsZSxcclxuICAgICAgbWF4U2l6ZU1iLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gaGFuZGxlIGNoYW5nZXNcclxuICBwcml2YXRlIGhhbmRsZVZhbHVlQ2hhbmdlcyh2YWx1ZUNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0YUNoYW5nZTogRGF0YUNoYW5nZTtcclxuICAgIGlmICh2YWx1ZUNoYW5nZS5rZXkuaW5jbHVkZXMoJy4nKSkge1xyXG4gICAgICBjb25zdCBzb3VyY2UgPSB2YWx1ZUNoYW5nZS5rZXkuc3BsaXQoJy4nKVswXTtcclxuICAgICAgY29uc3QgdmFsdWVLZXkgPSB2YWx1ZUNoYW5nZS5rZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgZGF0YUNoYW5nZSA9IHtcclxuICAgICAgICBraW5kOiB2YWx1ZUNoYW5nZS5raW5kID09PSAnYmFzaWMnID8gRGF0YUNoYW5nZUtpbmQuV0lER0VUIDogRGF0YUNoYW5nZUtpbmQuU0VMRUNUSU9OLFxyXG4gICAgICAgIHNvdXJjZSxcclxuICAgICAgICB2YWx1ZXM6IFtbdmFsdWVLZXksIHZhbHVlQ2hhbmdlLnZhbHVlXV0sXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRhQ2hhbmdlID0ge1xyXG4gICAgICAgIGtpbmQ6IHZhbHVlQ2hhbmdlLmtpbmQgPT09ICdiYXNpYycgPyBEYXRhQ2hhbmdlS2luZC5XSURHRVQgOiBEYXRhQ2hhbmdlS2luZC5TRUxFQ1RJT04sXHJcbiAgICAgICAgc291cmNlOiB2YWx1ZUNoYW5nZS5rZXksXHJcbiAgICAgICAgdmFsdWVzOiBbW3ZhbHVlQ2hhbmdlLmtleSwgdmFsdWVDaGFuZ2UudmFsdWVdXSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0LmRhdGFDaGFuZ2VkKHRoaXMudXVpZCEsIGRhdGFDaGFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZUNoYW5nZXMoY2hhbmdlOiBDb21wb25lbnRNb2RlbENoYW5nZSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cykge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlV2lkZ2V0cyhjaGFuZ2UuY2hhbmdlZFdpZGdldHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VzKSB7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGNoYW5nZS5jaGFuZ2VzO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMpLm1hcCgoY2hhbmdlS2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnZGF0YS4nKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5LnN0YXJ0c1dpdGgoJ2xheW91dHMuJykgJiYgdGhpcy5tb2RlbD8ubGF5b3V0cykge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUxheW91dENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnY29tcG9uZW50TGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcG9uZW50TGF5b3V0Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCd2YWx1ZVNldHMuJykgJiYgdGhpcy5tb2RlbD8udmFsdWVTZXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWVTZXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5ID09PSAnYWN0aW9ucycpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5ID09PSAnY29uc3RyYWludHMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29uc3RyYWludENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2VzWycnXSBhcyBDb21wb25lbnRNb2RlbDtcclxuICAgICAgICAgICAgZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWRhdGFDaGFuZ2VIYXNCZWVuTmV4dGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkLm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2hhbmdlLnZhbHVlIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY2hhbmdlLmNoYW5nZWRXaWRnZXRzICYmICFjaGFuZ2UuY2hhbmdlcyAmJiBjaGFuZ2UudmFsdWUpIHtcclxuICAgICAgdGhpcy5tb2RlbCA9IGNoYW5nZS52YWx1ZSBhcyBDb21wb25lbnRNb2RlbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlV2lkZ2V0cyhjaGFuZ2VkV2lkZ2V0czogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGxldCB3aWRnZXRzID0gdGhpcy5nZXRXaWRnZXRzKCk7XHJcbiAgICBjaGFuZ2VkV2lkZ2V0cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSB3aWRnZXRzLmdldChrZXkpO1xyXG5cclxuICAgICAgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0dXBHcmlkU2VydmljZXMocmVmZXJlbmNlKTtcclxuICAgICAgICByZWZlcmVuY2UucmVmcmVzaCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlLmluaXRpYWxpemUoKTtcclxuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgaW5zdGFuY2VvZiBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UpIHtcclxuICAgICAgICByZWZlcmVuY2UubG9hZCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXTtcclxuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICcnICYmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGVuIGRvbid0IGNoYW5nZSB2YWx1ZS5cclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnIHx8IChvbGRWYWx1ZSAhPT0gbnVsbCAmJiBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZURhdGFDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VmFsdWVEZWVwbHkodGhpcy5tb2RlbCwgY2hhbmdlS2V5LCBjaGFuZ2VzW2NoYW5nZUtleV0pO1xyXG5cclxuICAgIGlmICh0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZvcm1Db21wb25lbnRzKCk/LmZvckVhY2goKGZvcm0pID0+IGZvcm0ucmVmcmVzaCgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybVdpZGdldHMuZm9yRWFjaCgoZm9ybUNvbXBvbmVudDogU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtQ29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFByb3ZpZGVkIGZvcm0gcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMYXlvdXRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBsYXlvdXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIHRoaXMubW9kZWwhLmxheW91dHNbbGF5b3V0S2V5XSA9IGNoYW5nZXNbY2hhbmdlS2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ29tcG9uZW50TGF5b3V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgbGF5b3V0S2V5ID0gY2hhbmdlS2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICBsZXQgY29tcG9uZW50TGF5b3V0czogeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfSA9IHRoaXMubW9kZWwhLmNvbXBvbmVudExheW91dHMgYXMge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiBPYmplY3Q7XHJcbiAgICB9O1xyXG4gICAgY29tcG9uZW50TGF5b3V0c1tsYXlvdXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZVNldENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IHZhbHVlU2V0S2V5ID0gY2hhbmdlS2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICB0aGlzLm1vZGVsIS52YWx1ZVNldHMhW3ZhbHVlU2V0S2V5XSA9IGNoYW5nZXNbY2hhbmdlS2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQWN0aW9uQ2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGVsIS5hY3Rpb25zID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gICAgdGhpcy5pbml0QWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDb25zdHJhaW50Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGVsIS5jb25zdHJhaW50cyA9IGNoYW5nZXNbY2hhbmdlS2V5XTtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTbWFydENvbXBvbmVudEZpbGVVcGxvYWRlciB7XHJcbiAgdWlBY3Rpb25Db2RlOiBzdHJpbmc7XHJcbiAgbWF4U2l6ZU1iPzogbnVtYmVyO1xyXG4gIGZpbGVGb3JtYXRzPzogc3RyaW5nW107XHJcbiAgaXNNdWx0aXBsZT86IGJvb2xlYW47XHJcbiAgc21hcnRDb21wb25lbnQ6IFNtYXJ0Q29tcG9uZW50QXBpQ2xpZW50PGFueT47XHJcbn1cclxuIl19
|
|
689
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixHQVFsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUlMLGNBQWMsRUFHZCx1QkFBdUIsRUFHdkIseUJBQXlCLEVBR3pCLGVBQWUsR0FJaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BGLE9BQU8sRUFLTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUVMLDJCQUEyQixHQUM1QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRWhGLE1BQU0sT0FBZ0IsdUJBQXVCO0lBNEczQyxZQUNZLE1BQWdCLEVBQ2hCLElBQXlDLEVBQ3pDLFFBQWlCLEVBQ2pCLGNBQXVCLEVBQ3ZCLE9BQW9CLEVBQ3BCLFFBQW9CO1FBTHBCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBcUM7UUFDekMsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQUN2QixZ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LENBQUMsZ0JBRTdELENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE9BQStCLEVBQUUsU0FBaUI7UUFDN0UsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBTSxDQUFDLFNBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQStCLEVBQUUsU0FBaUI7UUFDM0UsSUFBSSxDQUFDLEtBQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsT0FBK0IsRUFBRSxTQUFpQjtRQUMvRSxJQUFJLENBQUMsS0FBTSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbmplY3RvcixcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVHZW5lcmljU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXRyZWUvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudE1vZGVsLFxyXG4gIENvbXBvbmVudE1vZGVsQ2hhbmdlLFxyXG4gIERhdGFDaGFuZ2UsXHJcbiAgRGF0YUNoYW5nZUtpbmQsXHJcbiAgRXhlY3V0ZVVpQWN0aW9uT3B0aW9ucyxcclxuICBTbWFydFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgU21hcnRWaWV3Q29udGV4dFNlcnZpY2UsXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgVWlBY3Rpb25Nb2RlbCxcclxuICBVaUFjdGlvblJlcXVlc3QsXHJcbiAgVWlBY3Rpb25TZXJ2aWNlLFxyXG4gIFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZSxcclxuICBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQsXHJcbiAgVXNlVWlBY3Rpb24yLFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9zbWFydC1hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnLi4vc21hcnQtc3ViamVjdC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEdyaWRPcHRpb25zLCBTbWFydEdyaWQsIFNtYXJ0R3JpZENvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LWdyaWQvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Rm9ybSxcclxuICBTbWFydEZvcm1JbnZhbGlkRmllbGRzLFxyXG4gIFNtYXJ0Zm9ybUNvbXBvbmVudCxcclxuICBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UsXHJcbiAgVmFsdWVDaGFuZ2VNb2RlLFxyXG59IGZyb20gJy4uL3NtYXJ0LWZvcm0vcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50LFxyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eSxcclxufSBmcm9tICcuLi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyLWVkaXRvci9wcm9qZWN0JztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvdXRpbGl0eS9zbWFydC1zdHlsZS11dGlsaXR5JztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbWFydENvbXBvbmVudEFwaUNsaWVudDxUPiBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uMiB7XHJcbiAgcHJvdGVjdGVkIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8Q29tcG9uZW50TW9kZWxDaGFuZ2U+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHByaXZhdGUgX3V1aWQ/OiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgdXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBwcml2YXRlIF9uZ0FmdGVyVmlld0luaXRQZXJmb3JtZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IHV1aWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl91dWlkO1xyXG4gIH1cclxuICBzZXQgdXVpZCh1dWlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLl91dWlkID09PSB1dWlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmaXJzdFV1aWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMudXVpZCkge1xyXG4gICAgICB0aGlzLnZpZXdDb250ZXh0LnVuZm9sbG93KHRoaXMudXVpZCk7XHJcbiAgICAgIGZpcnN0VXVpZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXVpZCA9IHV1aWQ7XHJcbiAgICBpZiAodXVpZCkge1xyXG4gICAgICB0aGlzLmdldFdpZGdldHMoKS5mb3JFYWNoKChyZWYsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChyZWYgaW5zdGFuY2VvZiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgICAgICAgIHJlZi51dWlkID0gdXVpZDtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlZiBpbnN0YW5jZW9mIFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZSkge1xyXG4gICAgICAgICAgcmVmLmNvbmZpZy51dWlkID0gdXVpZDtcclxuICAgICAgICB9IGVsc2UgaWYgKCFyZWYgJiYgIWZpcnN0VXVpZCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkIG9uIHV1aWQgY2hhbmdlLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghdGhpcy51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWRTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRleHQudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocGFnZU5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHBhZ2VOYW1lID09PSB0aGlzLnBhZ2VOYW1lISkge1xyXG4gICAgICAgICAgICAgIHRoaXMucnVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0LmZvbGxvdyh0aGlzLl91dWlkISwgdGhpcy5kZXRlY3RDaGFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbW9kZWw6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkO1xyXG5cclxuICBnZXQgbW9kZWwoKTogQ29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGVsO1xyXG4gIH1cclxuICBzZXQgbW9kZWwobW9kZWw6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xyXG5cclxuICAgIHRoaXMuaW5pdENvbXBvbmVudEJ5TW9kZWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RhdGE/OiBUO1xyXG5cclxuICBnZXQgZGF0YSgpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuICBzZXQgZGF0YShtb2RlbDogVCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZGF0YSA9IG1vZGVsO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlZC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdWlBY3Rpb25Nb2RlbHM6IFVpQWN0aW9uTW9kZWxbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgZGF0YUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgLy8gR3JpZFxyXG4gIHNtYXJ0R3JpZD86IFNtYXJ0R3JpZDtcclxuXHJcbiAgLy8gU2VydmljZXNcclxuICBwcm90ZWN0ZWQgdmlld0NvbnRleHQ6IFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB1aUFjdGlvblNlcnZpY2U6IFVpQWN0aW9uU2VydmljZTtcclxuICBwcm90ZWN0ZWQgdWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTogVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTtcclxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlPzogU21hcnRUcmFuc2xhdGVTZXJ2aWNlO1xyXG5cclxuICAvLyBUcmVlXHJcbiAgcHJpdmF0ZSBfc21hcnRUcmVlU2VydmljZT86IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlO1xyXG5cclxuICBwdWJsaWMgZ2V0IHNtYXJ0VHJlZVNlcnZpY2UoKTogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgc21hcnRUcmVlU2VydmljZShzbWFydFRyZWVTZXJ2aWNlOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIGRlZmF1bHQgdHJlZSBoYXMgYWxyZWFkeSBzZXQgdXAhJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zbWFydFRyZWVTZXJ2aWNlID0gc21hcnRUcmVlU2VydmljZTtcclxuICB9XHJcblxyXG4gIC8vIENvbnRhaW5lZCBXaWRnZXRzXHJcbiAgd2lkZ2V0czogTWFwPHN0cmluZywgU21hcnRHcmlkQ29tcG9uZW50IHwgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCB1bmRlZmluZWQ+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBmb3JtV2lkZ2V0czogTWFwPHN0cmluZywgU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgdXNlUXVlcnlMaXN0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzZW5kTW9kZWxPbldpZGdldEFjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBkYXRhQ2hhbmdlS2V5czogc3RyaW5nW10gPSBbXTtcclxuICBwcm90ZWN0ZWQgZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzID0gbmV3IE1hcDxTbWFydGZvcm1Db21wb25lbnQsIFN1YnNjcmlwdGlvbj4oKTtcclxuXHJcbiAgY2hhbmdlRGV0ZWN0b3I/OiBDaGFuZ2VEZXRlY3RvclJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgaW5qZWN0OiBJbmplY3RvcixcclxuICAgIHByb3RlY3RlZCBhdXRoOiBTbWFydEF1dGhlbnRpY2F0aW9uU2VydmljZUludGVyZmFjZSxcclxuICAgIHByb3RlY3RlZCBwYWdlTmFtZT86IHN0cmluZyxcclxuICAgIHByb3RlY3RlZCBfY29tcG9uZW50TmFtZT86IHN0cmluZyxcclxuICAgIHByb3RlY3RlZCBlbGVtZW50PzogRWxlbWVudFJlZixcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcj86IFJlbmRlcmVyMlxyXG4gICkge1xyXG4gICAgLy8gY2hlY2sgYW5kIGNhbGN1bGF0ZSBwYWdlTmFtZVxyXG4gICAgaWYgKCF0aGlzLnBhZ2VOYW1lICYmICF0aGlzLl9jb21wb25lbnROYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGFnZU5hbWUgb3IgY29tcG9uZW50TmFtZSBtdXN0IGJlIHNwZWNpZmllZCEnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gaW5qZWN0LmdldChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICBpZiAodGhpcy5fY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBsZXQgcGFnZU5hbWVGb3JDb21wb25lbnQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFBhZ2VOYW1lT2ZDb21wb25lbnQodGhpcy5fY29tcG9uZW50TmFtZSk7XHJcbiAgICAgIGlmICghdGhpcy5wYWdlTmFtZSkge1xyXG4gICAgICAgIHRoaXMucGFnZU5hbWUgPSBwYWdlTmFtZUZvckNvbXBvbmVudDtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VOYW1lICE9PSBwYWdlTmFtZUZvckNvbXBvbmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBwYWdlTmFtZSAoJHtwYWdlTmFtZX0pIGFuZCBjb21wb25lbnROYW1lICgke19jb21wb25lbnROYW1lfSkgZG9lc24ndCBtYXRjaCFgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZnJvbSB0aGlzIHBvaW50IHdlIGhhdmUgdGhpcy5wYWdlTmFtZVxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKSA9PiB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlcyhjaGFuZ2UpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgX25nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydW4oKTtcclxuICB9XHJcbiAgX25nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dC51bmZvbGxvdyh0aGlzLnV1aWQhKTtcclxuICAgIHRoaXMud2lkZ2V0cy5jbGVhcigpO1xyXG5cclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBfbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICBpZiAoIXRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignU21hcnRDb21wb25lbnRMYXlvdXRzUUwgbm90IGF2YWlsYWJsZSEnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5TGlzdCh0aGlzLmdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCkhLCAoY29tcCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbXAuc21hcnRDb21wb25lbnRMYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0QWN0aW9ucygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMudXVpZCAmJiB0aGlzLnV1aWQgIT09IGNvbXAudXVpZCkgY29tcC51dWlkID0gdGhpcy51dWlkO1xyXG4gICAgICAgICAgU21hcnRDb21wb25lbnRMYXlvdXRVdGlsaXR5LmdldEdyaWRzKGNvbXApLmZvckVhY2goKGdyaWQpID0+XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBHcmlkU2VydmljZXMoZ3JpZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gZm9yIGhhbmRsaW5nIGVtYmVkZGVkIGZvcm1zXHJcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUxpc3QodGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpISwgKGZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZVN1YnNjcmlwdGlvbnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuZ2V0U21hcnRGb3Jtc1FMKCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ2dldFNtYXJ0Rm9ybXNRTCBub3QgYXZhaWxhYmxlIScpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlMaXN0KHRoaXMuZ2V0U21hcnRGb3Jtc1FMKCkhLCAoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVEYXRhQ2hhbmdlU3Vic2NyaXB0aW9ucygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5nZXRTbWFydEdyaWRzUUwoKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignU21hcnRHcmlkc1FMIG5vdCBhdmFpbGFibGUhJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUxpc3QodGhpcy5nZXRTbWFydEdyaWRzUUwoKSEsIChncmlkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZ3JpZCkge1xyXG4gICAgICAgICAgICBpZiAoZ3JpZC5zbWFydEdyaWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldHVwR3JpZFNlcnZpY2VzKGdyaWQpO1xyXG4gICAgICAgICAgICAgIGdyaWQuc2V0dXBUb29sYmFyKCk7XHJcbiAgICAgICAgICAgICAgaWYgKGdyaWQudG9vbGJhcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0QWN0aW9ucygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy51dWlkICYmIHRoaXMudXVpZCAhPT0gZ3JpZC51dWlkKSBncmlkLnV1aWQgPSB0aGlzLnV1aWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkU2VydmljZXMoZ3JpZDogU21hcnRHcmlkQ29tcG9uZW50KSB7XHJcbiAgICBpZiAoZ3JpZC5zbWFydEdyaWQpIHtcclxuICAgICAgaWYgKCFncmlkLnNtYXJ0R3JpZC51aUFjdGlvblNlcnZpY2UpIHtcclxuICAgICAgICBncmlkLnNtYXJ0R3JpZC51aUFjdGlvblNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uU2VydmljZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWdyaWQuc21hcnRHcmlkLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpIHtcclxuICAgICAgICBncmlkLnNtYXJ0R3JpZC51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghZ3JpZC5zbWFydEdyaWQuc2VydmljZVRvVXNlKSB7XHJcbiAgICAgICAgZ3JpZC5zbWFydEdyaWQuc2VydmljZVRvVXNlID0gdGhpcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWdyaWQuc21hcnRHcmlkLnZpZXdDb250ZXh0U2VydmljZSkge1xyXG4gICAgICAgIGdyaWQuc21hcnRHcmlkLnZpZXdDb250ZXh0U2VydmljZSA9IHRoaXMudmlld0NvbnRleHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBoYW5kbGVRdWVyeUxpc3RTaW1wbGU8VD4ocWw6IFF1ZXJ5TGlzdDxUPiwgaGFuZGxlcjogKCkgPT4gdm9pZCkge1xyXG4gICAgaGFuZGxlcigpO1xyXG4gICAgcWwuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiBoYW5kbGVyKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZVF1ZXJ5TGlzdDxUPihxbDogUXVlcnlMaXN0PFQ+LCBoYW5kbGVyOiAoZWw6IFQpID0+IHZvaWQpIHtcclxuICAgIHFsLmZvckVhY2goKGVsKSA9PiBoYW5kbGVyKGVsKSk7XHJcbiAgICBxbC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3QpID0+IChsaXN0IGFzIFF1ZXJ5TGlzdDxUPikuZm9yRWFjaCgoZWwpID0+IGhhbmRsZXIoZWwpKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U21hcnRGb3Jtc1FMKCk6IFF1ZXJ5TGlzdDxTbWFydGZvcm1Db21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U21hcnRHcmlkc1FMKCk6IFF1ZXJ5TGlzdDxTbWFydEdyaWRDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U21hcnRUcmVlc1FMKCk6IFF1ZXJ5TGlzdDxTbWFydHRyZWVHZW5lcmljU2VydmljZT4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydEZpbHRlclNlcnZpY2VzUUwoKTogUXVlcnlMaXN0PFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZT4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydFVpQWN0aW9uVG9vbGJhcnNRTCgpOiBRdWVyeUxpc3Q8VWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCk6XHJcbiAgICB8IFF1ZXJ5TGlzdDxTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudD5cclxuICAgIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgZ2V0V2lkZ2V0cygpOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBTbWFydEdyaWRDb21wb25lbnQgfCBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZSB8IHVuZGVmaW5lZFxyXG4gID4ge1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICBsZXQgd2lkZ2V0czogTWFwPFxyXG4gICAgICAgIHN0cmluZyxcclxuICAgICAgICBTbWFydEdyaWRDb21wb25lbnQgfCBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZSB8IHVuZGVmaW5lZFxyXG4gICAgICA+ID0gbmV3IE1hcCgpO1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0R3JpZENvbXBvbmVudHMoKVxyXG4gICAgICAgIC5maWx0ZXIoKGdyaWQpID0+IChncmlkPy5zbWFydEdyaWQ/LmdyaWRJZGVudGlmaWVyID8gdHJ1ZSA6IGZhbHNlKSlcclxuICAgICAgICAuZm9yRWFjaCgoZ3JpZCkgPT4gd2lkZ2V0cy5zZXQoZ3JpZC5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLCBncmlkKSk7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRUcmVlQ29tcG9uZW50cygpXHJcbiAgICAgICAgLmZpbHRlcigodHJlZSkgPT4gKHRyZWU/LnNtYXJ0VHJlZU1vZGVsPy5pZGVudGlmaWVyID8gdHJ1ZSA6IGZhbHNlKSlcclxuICAgICAgICAuZm9yRWFjaCgodHJlZSkgPT4gd2lkZ2V0cy5zZXQodHJlZSEuc21hcnRUcmVlTW9kZWwhLmlkZW50aWZpZXIhLCB0cmVlKSk7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlcygpXHJcbiAgICAgICAgLmZpbHRlcigoZmlsdGVyKSA9PiAoZmlsdGVyLmNvbmZpZy5pZGVudGlmaWVyID8gdHJ1ZSA6IGZhbHNlKSlcclxuICAgICAgICAuZm9yRWFjaCgoZmlsdGVyKSA9PiB3aWRnZXRzLnNldChmaWx0ZXIuY29uZmlnLmlkZW50aWZpZXIsIGZpbHRlcikpO1xyXG4gICAgICByZXR1cm4gd2lkZ2V0cztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLndpZGdldHM7XHJcbiAgfVxyXG5cclxuICBpbml0Q29tcG9uZW50QnlNb2RlbCgpOiB2b2lkIHtcclxuICAgIFNtYXJ0U3R5bGVVdGlsaXR5LmFwcGx5U3R5bGUodGhpcy5tb2RlbD8uc3R5bGUsIHRoaXMuZWxlbWVudCwgdGhpcy5yZW5kZXJlcik7XHJcbiAgICBTbWFydFN0eWxlVXRpbGl0eS5hcHBseVN0eWxlKHRoaXMubW9kZWw/LnBhcmVudFN0eWxlLCB0aGlzLmVsZW1lbnQsIHRoaXMucmVuZGVyZXIsIHRydWUpO1xyXG4gICAgdGhpcy5pbml0RGF0YSgpO1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtLnNtYXJ0Rm9ybSkge1xyXG4gICAgICAgICAgZm9ybS5zbWFydEZvcm0uY29tcG9uZW50TW9kZWwgPSB0aGlzLm1vZGVsO1xyXG4gICAgICAgICAgLy8gdXNlcyBkYXRhLCB2YWx1ZVNldHMsIGNvbnN0cmFpbnRzXHJcbiAgICAgICAgICBmb3JtLmNvbnN0cnVjdEZvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvcj8uZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5pbml0QWN0aW9ucygpO1xyXG4gICAgLy8gVE9ETzogbGF5b3V0LCB3aWRnZXRzXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpOiBTbWFydGZvcm1Db21wb25lbnRbXSB7XHJcbiAgICBsZXQgZm9ybXM6IFNtYXJ0Zm9ybUNvbXBvbmVudFtdID0gdGhpcy5nZXRTbWFydEZvcm1zUUwoKT8udG9BcnJheSgpID8/IFtdO1xyXG4gICAgdGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpPy5mb3JFYWNoKChjb21wKSA9PiB7XHJcbiAgICAgIGZvcm1zLnB1c2goLi4uU21hcnRDb21wb25lbnRMYXlvdXRVdGlsaXR5LmdldEZvcm1zKGNvbXApKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm1zO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0R3JpZENvbXBvbmVudHMoKTogU21hcnRHcmlkQ29tcG9uZW50W10ge1xyXG4gICAgbGV0IGdyaWRzOiBTbWFydEdyaWRDb21wb25lbnRbXSA9IHRoaXMuZ2V0U21hcnRHcmlkc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICBncmlkcy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRHcmlkcyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncmlkcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxTbWFydFRyZWVDb21wb25lbnRzKCk6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlW10ge1xyXG4gICAgbGV0IHRyZWVzOiBTbWFydHRyZWVHZW5lcmljU2VydmljZVtdID0gdGhpcy5nZXRTbWFydFRyZWVzUUwoKT8udG9BcnJheSgpID8/IFtdO1xyXG4gICAgdGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpPy5mb3JFYWNoKChjb21wKSA9PiB7XHJcbiAgICAgIHRyZWVzLnB1c2goLi4uU21hcnRDb21wb25lbnRMYXlvdXRVdGlsaXR5LmdldFRyZWVzKGNvbXApKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRyZWVzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZXMoKTogU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlW10ge1xyXG4gICAgbGV0IGZpbHRlcnM6IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZVtdID0gdGhpcy5nZXRTbWFydEZpbHRlclNlcnZpY2VzUUwoKT8udG9BcnJheSgpID8/IFtdO1xyXG4gICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QWxsU21hcnRVaUFjdGlvblRvb2xiYXJzKCk6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudFtdIHtcclxuICAgIGxldCB0b29sYmFyczogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50W10gPSB0aGlzLmdldFNtYXJ0VWlBY3Rpb25Ub29sYmFyc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0QWxsU21hcnRHcmlkQ29tcG9uZW50cygpPy5mb3JFYWNoKChncmlkKSA9PiB7XHJcbiAgICAgIGlmIChncmlkLnRvb2xiYXIpIHtcclxuICAgICAgICB0b29sYmFycy5wdXNoKGdyaWQudG9vbGJhcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpPy5mb3JFYWNoKChjb21wKSA9PiB7XHJcbiAgICAgIHRvb2xiYXJzLnB1c2goLi4uU21hcnRDb21wb25lbnRMYXlvdXRVdGlsaXR5LmdldFRvb2xiYXJzKGNvbXApKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRBbGxTbWFydEZvcm1Db21wb25lbnRzKClcclxuICAgICAgPy5mbGF0TWFwKChmb3JtKSA9PiBmb3JtLmdldFRvb2xiYXJzKCkpXHJcbiAgICAgIC5maWx0ZXIoKHRvb2xiYXIpID0+IHRvb2xiYXIgIT09IHVuZGVmaW5lZCB8fCB0b29sYmFyICE9PSBudWxsKVxyXG4gICAgICAuZm9yRWFjaCgodG9vbGJhcikgPT4gdG9vbGJhcnMucHVzaCh0b29sYmFyIGFzIFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCkpO1xyXG5cclxuICAgIHJldHVybiB0b29sYmFycztcclxuICB9XHJcblxyXG4gIGluaXREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9kZWw/LmRhdGEpIHtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5tb2RlbD8uZGF0YSBhcyBhbnk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0QWN0aW9ucygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGVsPy5hY3Rpb25zKSB7XHJcbiAgICAgIGxldCB1aUFjdGlvbk1vZGVscyA9IHRoaXMubW9kZWw/LmFjdGlvbnMubWFwKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICAgICAgdWlBY3Rpb24sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCB0b29sYmFycyA9IHRoaXMuZ2V0QWxsU21hcnRVaUFjdGlvblRvb2xiYXJzKCkuZmlsdGVyKCh0b29sYmFyKSA9PiB0b29sYmFyLmlkKTtcclxuICAgICAgbGV0IHRvb2xiYXJNb2RlbHMgPSBuZXcgTWFwPHN0cmluZywgVWlBY3Rpb25Nb2RlbFtdPigpO1xyXG4gICAgICB0b29sYmFycy5mb3JFYWNoKCh0b29sYmFyKSA9PiB7XHJcbiAgICAgICAgdG9vbGJhck1vZGVscy5zZXQodG9vbGJhci5pZCEsIFtdKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBnbG9iYWxVaUFjdGlvbk1vZGVsczogVWlBY3Rpb25Nb2RlbFtdID0gW107XHJcbiAgICAgIHVpQWN0aW9uTW9kZWxzLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGxldCBhY3Rpb25Nb2RlbDogVWlBY3Rpb25Nb2RlbFtdIHwgdW5kZWZpbmVkID0gZ2xvYmFsVWlBY3Rpb25Nb2RlbHM7XHJcbiAgICAgICAgbGV0IHRvb2xiYXJJZCA9IGFjdGlvbi51aUFjdGlvbi50b29sYmFyO1xyXG4gICAgICAgIGlmICh0b29sYmFySWQgJiYgdG9vbGJhck1vZGVscy5oYXModG9vbGJhcklkKSkge1xyXG4gICAgICAgICAgYWN0aW9uTW9kZWwgPSB0b29sYmFyTW9kZWxzLmdldCh0b29sYmFySWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFjdGlvbk1vZGVsKSB7XHJcbiAgICAgICAgICBhY3Rpb25Nb2RlbCA9IGdsb2JhbFVpQWN0aW9uTW9kZWxzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhY3Rpb25Nb2RlbC5wdXNoKGFjdGlvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gZ2xvYmFsVWlBY3Rpb25Nb2RlbHM7XHJcblxyXG4gICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICB0b29sYmFycy5tYXAoKHRvb2xiYXIpID0+IHtcclxuICAgICAgICAgIHRvb2xiYXIudWlBY3Rpb25Nb2RlbHMgPSB0b29sYmFyTW9kZWxzLmdldCh0b29sYmFyLmlkISk7XHJcbiAgICAgICAgICByZXR1cm4gdG9vbGJhci5zZXRVcCgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb250aW51ZSBjb2RlIGhlcmUgaWYgbmVlZGVkXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdG9vbGJhciBzZXR1cDonLCBlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBydW4oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdXRoLmJmZkFwaXNIYXZlQmVlblNldFVwKSB7XHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hdXRoLmhlYWRlcnNVcGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcbiAgICAvLyB0aGlzLm1vZGVsID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5sb2FkKHRoaXMudXVpZCk7XHJcbiAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmxvYWQyKHRoaXMudXVpZCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBleGVjdXRlVWlBY3Rpb24odWlBY3Rpb246IFVpQWN0aW9uLCBvcHRpb25zPzogRXhlY3V0ZVVpQWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHtcclxuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICB1aUFjdGlvbjogdWlBY3Rpb24sXHJcbiAgICB9O1xyXG4gICAgYXdhaXQgdGhpcy51aUFjdGlvblNlcnZpY2UuZXhlY3V0ZSh1aUFjdGlvbiwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBhZGREYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcihrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLmRhdGFDaGFuZ2VLZXlzLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgdGhpcy5kYXRhQ2hhbmdlS2V5cy5wdXNoKGtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVEYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcihrZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGlkeCA9IHRoaXMuZGF0YUNoYW5nZUtleXMuaW5kZXhPZihrZXkpO1xyXG4gICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuZGF0YUNoYW5nZUtleXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoZXZlbnQ6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YUNoYW5nZUtleXMuaW5jbHVkZXMoZXZlbnQua2V5KSkge1xyXG4gICAgICB0aGlzLmV4ZWN1dGVVaUFjdGlvbih7XHJcbiAgICAgICAgY29kZTogZXZlbnQua2V5LFxyXG4gICAgICAgIG1vZGVsOiB0cnVlLFxyXG4gICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgaXRlbTogZXZlbnQudmFsdWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaGFuZGxlRGF0YUNoYW5nZVN1YnNjcmlwdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIGxldCBmb3JtcyA9IHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpO1xyXG4gICAgICAvLyBhZGQgZWxlbWVudHMgdG8gZGF0YUNoYW5nZUtleXNcclxuICAgICAgZm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGZvcm0uc21hcnRGb3JtPy53aWRnZXRzLmZvckVhY2goKHdpZGdldCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHdpZGdldC5rZXkpIHtcclxuICAgICAgICAgICAgaWYgKHdpZGdldC52YWx1ZUNoYW5nZU1vZGUgPT09IFZhbHVlQ2hhbmdlTW9kZS5JTU1FRElBVEVfQUNUSU9OKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGREYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcih3aWRnZXQua2V5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZURhdGFDaGFuZ2VBY3Rpb25IYW5kbGVyKHdpZGdldC5rZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBzdWJzY3JpYmUgdG8gbmV3IGZvcm1zXHJcbiAgICAgIGZvcm1zLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuaGFzKGNvbXBvbmVudCkpIHtcclxuICAgICAgICAgIGxldCBzdWJzID0gY29tcG9uZW50LnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcihldmVudCkpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuc2V0KGNvbXBvbmVudCwgc3Vicyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIHVuc3Vic2NyaWJlIGZyb20gcmVtb3ZlZCBmb3Jtc1xyXG4gICAgICB0aGlzLmRhdGFDaGFuZ2VBY3Rpb25IYW5kbGVycy5mb3JFYWNoKChzdWJzLCBmb3JtKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmb3Jtcy5maW5kKChjKSA9PiBjID09PSBmb3JtKSkge1xyXG4gICAgICAgICAgc3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuZGVsZXRlKGZvcm0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJbnZhbGlkRmllbGRzKCk6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHMge1xyXG4gICAgbGV0IGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzID0ge1xyXG4gICAgICBpbnZhbGlkRmllbGRLZXlzOiBbXSxcclxuICAgICAgaW52YWxpZEZpZWxkTmFtZXM6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpPy5mb3JFYWNoKChmb3JtKSA9PlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVGb3JtKGZvcm0sIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtV2lkZ2V0cz8uZm9yRWFjaCgoZm9ybSkgPT4gdGhpcy52YWxpZGF0ZUZvcm0oZm9ybSwgYWdncmVnYXRlZEludmFsaWRGaWVsZHMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWdncmVnYXRlZEludmFsaWRGaWVsZHM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdmFsaWRhdGVGb3JtKFxyXG4gICAgZm9ybTogU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkLFxyXG4gICAgYWdncmVnYXRlZEludmFsaWRGaWVsZHM6IFNtYXJ0Rm9ybUludmFsaWRGaWVsZHNcclxuICApIHtcclxuICAgIGxldCBpbnZhbGlkRmllbGRzT2ZGb3JtID0gZm9ybT8uZ2V0SW52YWxpZEZpZWxkcygpO1xyXG4gICAgaWYgKGludmFsaWRGaWVsZHNPZkZvcm0pIHtcclxuICAgICAgaW52YWxpZEZpZWxkc09mRm9ybS5pbnZhbGlkRmllbGRLZXlzLmZvckVhY2goKGtleSkgPT5cclxuICAgICAgICBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkcy5pbnZhbGlkRmllbGRLZXlzLnB1c2goa2V5KVxyXG4gICAgICApO1xyXG4gICAgICBpbnZhbGlkRmllbGRzT2ZGb3JtLmludmFsaWRGaWVsZE5hbWVzLmZvckVhY2goKGtleSkgPT5cclxuICAgICAgICBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkcy5pbnZhbGlkRmllbGROYW1lcy5wdXNoKGtleSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBVc2VVaUFjdGlvblxyXG4gIGdldEFkZGl0aW9uYWxQYXJhbXModWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvclRleHRBcmVhOiAnJyxcclxuICAgICAgZm9yVGV4dEZpZWxkOiAnJyxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdEZvcm0odmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWl0Rm9ybXModmFsaWRhdGUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGVyZm9ybVVpQWN0aW9uUmVxdWVzdChcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgd2lkZ2V0SWQ/OiBzdHJpbmcsXHJcbiAgICBub2RlSWQ/OiBzdHJpbmdcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ19maWxlcyddKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1sncGFyYW0nXTtcclxuICAgICAgY29uc3QgZmlsZXMgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXTtcclxuICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ2lzTXVsdGlwbGUnXTtcclxuICAgICAgZGVsZXRlIHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ3BhcmFtJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXTtcclxuICAgICAgZGVsZXRlIHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ2lzTXVsdGlwbGUnXTtcclxuXHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgaWYgKCFpc011bHRpcGxlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtVXBsb2FkQWN0aW9uKHRoaXMudXVpZCEsIHVpQWN0aW9uUmVxdWVzdCwgcGFyYW0sIGZpbGVzWzBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbihcclxuICAgICAgICAgIHRoaXMudXVpZCEsXHJcbiAgICAgICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgICBwYXJhbSxcclxuICAgICAgICAgIGZpbGVzXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh3aWRnZXRJZCAmJiBub2RlSWQpIHtcclxuICAgICAgLy8gYXdhaXQgdGhpcy5zZW5kTW9kZWxUb1NlcnZlcigpO1xyXG4gICAgICB0aGlzLmFkZE1vZGVsVG9XaWRnZXRBY3Rpb24odWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtV2lkZ2V0QWN0aW9uKHRoaXMudXVpZCEsIHdpZGdldElkLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9IGVsc2UgaWYgKHdpZGdldElkKSB7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgdGhpcy5hZGRNb2RlbFRvV2lkZ2V0QWN0aW9uKHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVdpZGdldE1haW5BY3Rpb24odGhpcy51dWlkISwgd2lkZ2V0SWQsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1BY3Rpb24odGhpcy51dWlkISwgdWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhZGRNb2RlbFRvV2lkZ2V0QWN0aW9uKHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KSB7XHJcbiAgICBpZiAodGhpcy5zZW5kTW9kZWxPbldpZGdldEFjdGlvbikge1xyXG4gICAgICB0aGlzLnN1Ym1pdEZvcm0oZmFsc2UpO1xyXG4gICAgICAvLyBtaW1pYyBDb21wb25lbnRNb2RlbFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydjbGllbnRQYWdlTW9kZWwnXSA9IHsgZGF0YTogdGhpcy5nZXRNb2RlbCgpIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIGFzeW5jIHNlbmRNb2RlbFRvU2VydmVyKCkge1xyXG4gIC8vICAgdGhpcy5zdWJtaXRGb3JtcyhmYWxzZSk7XHJcbiAgLy8gICBsZXQgZGF0YUNoYW5nZSA9IHtcclxuICAvLyAgICAga2luZDogRGF0YUNoYW5nZUtpbmQuV2lkZ2V0LFxyXG4gIC8vICAgICBzb3VyY2U6ICcnLFxyXG4gIC8vICAgICB2YWx1ZXM6IFtbJycsIHRoaXMuZ2V0TW9kZWwoKV1dLFxyXG4gIC8vICAgfTtcclxuICAvLyAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQuZGF0YUNoYW5nZWQodGhpcy51dWlkISwgZGF0YUNoYW5nZSk7XHJcbiAgLy8gfVxyXG5cclxuICBoYW5kbGVTcGVjaWZpY0RlbWFuZHNBc3luY2hyb25vdXNseShcclxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0XHJcbiAgKTogUHJvbWlzZTxVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2U+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkgbWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdHMgYWxsIHRoZSByZWdpc3RlcmVkIGZvcm1zIGluIHRoZSBTbWFydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdWJtaXRGb3Jtcyh2YWxpZGF0ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGZvcm0/LnN1Ym1pdEZvcm0odmFsaWRhdGUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybVdpZGdldHM/LmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBmb3JtPy5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkR3JpZChcclxuICAgIHNtYXJ0R3JpZDogU21hcnRHcmlkLFxyXG4gICAgb3B0aW9uczogR3JpZE9wdGlvbnMsXHJcbiAgICB1c2VBc0RlZmF1bHRHcmlkPzogYm9vbGVhbixcclxuICAgIGNvbXBvbmVudFJlZmVyZW5jZT86IFNtYXJ0R3JpZENvbXBvbmVudFxyXG4gICk6IFNtYXJ0R3JpZCB7XHJcbiAgICBzbWFydEdyaWQub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICBzbWFydEdyaWQudWlBY3Rpb25TZXJ2aWNlID0gdGhpcy51aUFjdGlvblNlcnZpY2U7XHJcbiAgICBzbWFydEdyaWQudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTtcclxuICAgIHNtYXJ0R3JpZC5zZXJ2aWNlVG9Vc2UgPSB0aGlzO1xyXG4gICAgc21hcnRHcmlkLnZpZXdDb250ZXh0U2VydmljZSA9IHRoaXMudmlld0NvbnRleHQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy53aWRnZXRzLnNldChzbWFydEdyaWQuZ3JpZElkZW50aWZpZXIsIGNvbXBvbmVudFJlZmVyZW5jZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEFkZGVkIHNtYXJ0R3JpZCB3aGVuIHVzZVF1ZXJ5TGlzdHMgPT09IHRydWUgKCR7c21hcnRHcmlkLmdyaWRJZGVudGlmaWVyfSlgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodXNlQXNEZWZhdWx0R3JpZCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHNtYXJ0R3JpZDtcclxuICAgICAgcmV0dXJuIHRoaXMuc21hcnRHcmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzbWFydEdyaWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRm9ybShcclxuICAgIHNtYXJ0Rm9ybUlkOiBzdHJpbmcsXHJcbiAgICBzbWFydEZvcm06IFNtYXJ0Rm9ybSxcclxuICAgIGNvbXBvbmVudFJlZmVyZW5jZT86IFNtYXJ0Zm9ybUNvbXBvbmVudFxyXG4gICk6IFNtYXJ0Rm9ybSB7XHJcbiAgICBpZiAoIXRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmZvcm1XaWRnZXRzLnNldChzbWFydEZvcm1JZCwgY29tcG9uZW50UmVmZXJlbmNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgQWRkZWQgc21hcnRGb3JtIHdoZW4gdXNlUXVlcnlMaXN0cyA9PT0gdHJ1ZSAoJHtzbWFydEZvcm1JZH0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuc2VuZERhdGFDaGFuZ2VzICYmIGNvbXBvbmVudFJlZmVyZW5jZSkge1xyXG4gICAgLy8gICBzbWFydEZvcm0udXNlT25WYWx1ZUNoYW5nZUV2ZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyAgIGNvbXBvbmVudFJlZmVyZW5jZS5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2VcclxuICAgIC8vICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgLy8gICAgIC5zdWJzY3JpYmUoKHZhbHVlQ2hhbmdlOiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UpID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2VzKHZhbHVlQ2hhbmdlKTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICByZXR1cm4gc21hcnRGb3JtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFVwRGVmYXVsdFRyZWUodHJlZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc21hcnRUcmVlU2VydmljZSA9IHRoaXMuY3JlYXRlVHJlZVNlcnZpY2UodHJlZUlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVUcmVlU2VydmljZSh0cmVlSWQ6IHN0cmluZyk6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHtcclxuICAgIGNvbnN0IHRyZWVTZXJ2aWNlID0gbmV3IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlKHRoaXMuaW5qZWN0LCB0aGlzLnBhZ2VOYW1lISwgdHJlZUlkKTtcclxuICAgIGlmICghdGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cy5zZXQodHJlZUlkLCB0cmVlU2VydmljZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEFkZGVkIHNtYXJ0VHJlZSB3aGVuIHVzZVF1ZXJ5TGlzdHMgPT09IHRydWUgKCR7dHJlZUlkfSlgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJlZVNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkRmlsZVVwbG9hZGVyKFxyXG4gICAgdWlBY3Rpb25Db2RlOiBzdHJpbmcsXHJcbiAgICBmaWxlRm9ybWF0cz86IHN0cmluZ1tdLFxyXG4gICAgbWF4U2l6ZU1iPzogbnVtYmVyLFxyXG4gICAgaXNNdWx0aXBsZT86IGJvb2xlYW5cclxuICApOiBTbWFydENvbXBvbmVudEZpbGVVcGxvYWRlciB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB1aUFjdGlvbkNvZGUsXHJcbiAgICAgIHNtYXJ0Q29tcG9uZW50OiB0aGlzLFxyXG4gICAgICBmaWxlRm9ybWF0cyxcclxuICAgICAgaXNNdWx0aXBsZSxcclxuICAgICAgbWF4U2l6ZU1iLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gaGFuZGxlIGNoYW5nZXNcclxuICBwcml2YXRlIGhhbmRsZVZhbHVlQ2hhbmdlcyh2YWx1ZUNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0YUNoYW5nZTogRGF0YUNoYW5nZTtcclxuICAgIGlmICh2YWx1ZUNoYW5nZS5rZXkuaW5jbHVkZXMoJy4nKSkge1xyXG4gICAgICBjb25zdCBzb3VyY2UgPSB2YWx1ZUNoYW5nZS5rZXkuc3BsaXQoJy4nKVswXTtcclxuICAgICAgY29uc3QgdmFsdWVLZXkgPSB2YWx1ZUNoYW5nZS5rZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgZGF0YUNoYW5nZSA9IHtcclxuICAgICAgICBraW5kOiB2YWx1ZUNoYW5nZS5raW5kID09PSAnYmFzaWMnID8gRGF0YUNoYW5nZUtpbmQuV0lER0VUIDogRGF0YUNoYW5nZUtpbmQuU0VMRUNUSU9OLFxyXG4gICAgICAgIHNvdXJjZSxcclxuICAgICAgICB2YWx1ZXM6IFtbdmFsdWVLZXksIHZhbHVlQ2hhbmdlLnZhbHVlXV0sXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRhQ2hhbmdlID0ge1xyXG4gICAgICAgIGtpbmQ6IHZhbHVlQ2hhbmdlLmtpbmQgPT09ICdiYXNpYycgPyBEYXRhQ2hhbmdlS2luZC5XSURHRVQgOiBEYXRhQ2hhbmdlS2luZC5TRUxFQ1RJT04sXHJcbiAgICAgICAgc291cmNlOiB2YWx1ZUNoYW5nZS5rZXksXHJcbiAgICAgICAgdmFsdWVzOiBbW3ZhbHVlQ2hhbmdlLmtleSwgdmFsdWVDaGFuZ2UudmFsdWVdXSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0LmRhdGFDaGFuZ2VkKHRoaXMudXVpZCEsIGRhdGFDaGFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZUNoYW5nZXMoY2hhbmdlOiBDb21wb25lbnRNb2RlbENoYW5nZSk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cykge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlV2lkZ2V0cyhjaGFuZ2UuY2hhbmdlZFdpZGdldHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VzKSB7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGNoYW5nZS5jaGFuZ2VzO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMpLm1hcCgoY2hhbmdlS2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnZGF0YS4nKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5LnN0YXJ0c1dpdGgoJ2xheW91dHMuJykgJiYgdGhpcy5tb2RlbD8ubGF5b3V0cykge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUxheW91dENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnY29tcG9uZW50TGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcG9uZW50TGF5b3V0Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCd2YWx1ZVNldHMuJykgJiYgdGhpcy5tb2RlbD8udmFsdWVTZXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWVTZXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5ID09PSAnYWN0aW9ucycpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5ID09PSAnY29uc3RyYWludHMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29uc3RyYWludENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2VzWycnXSBhcyBDb21wb25lbnRNb2RlbDtcclxuICAgICAgICAgICAgZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWRhdGFDaGFuZ2VIYXNCZWVuTmV4dGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkLm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2hhbmdlLnZhbHVlIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY2hhbmdlLmNoYW5nZWRXaWRnZXRzICYmICFjaGFuZ2UuY2hhbmdlcyAmJiBjaGFuZ2UudmFsdWUpIHtcclxuICAgICAgdGhpcy5tb2RlbCA9IGNoYW5nZS52YWx1ZSBhcyBDb21wb25lbnRNb2RlbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlV2lkZ2V0cyhjaGFuZ2VkV2lkZ2V0czogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGxldCB3aWRnZXRzID0gdGhpcy5nZXRXaWRnZXRzKCk7XHJcbiAgICBjaGFuZ2VkV2lkZ2V0cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSB3aWRnZXRzLmdldChrZXkpO1xyXG5cclxuICAgICAgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0dXBHcmlkU2VydmljZXMocmVmZXJlbmNlKTtcclxuICAgICAgICByZWZlcmVuY2UucmVmcmVzaCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlLmluaXRpYWxpemUoKTtcclxuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgaW5zdGFuY2VvZiBTbWFydEZpbHRlckVkaXRvclNlcnZpY2UpIHtcclxuICAgICAgICByZWZlcmVuY2UubG9hZCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGxldCBzcGxpdHRlZEtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuXHJcbiAgICBsZXQgZGVlcE1vZGVsOiBhbnlbXSA9IFttb2RlbF07XHJcbiAgICBsZXQgdGVtcE1vZGVsOiBhbnk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNwbGl0dGVkS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdGVtcE1vZGVsID0gZGVlcE1vZGVsW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVlcE1vZGVsLnB1c2godGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID09PSBzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXTtcclxuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICcnICYmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGVuIGRvbid0IGNoYW5nZSB2YWx1ZS5cclxuICAgICAgICBpZiAodmFsdWUgIT09ICcnIHx8IChvbGRWYWx1ZSAhPT0gbnVsbCAmJiBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZURhdGFDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VmFsdWVEZWVwbHkodGhpcy5tb2RlbCwgY2hhbmdlS2V5LCBjaGFuZ2VzW2NoYW5nZUtleV0pO1xyXG5cclxuICAgIGlmICh0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZvcm1Db21wb25lbnRzKCk/LmZvckVhY2goKGZvcm0pID0+IGZvcm0ucmVmcmVzaCgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybVdpZGdldHMuZm9yRWFjaCgoZm9ybUNvbXBvbmVudDogU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtQ29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFByb3ZpZGVkIGZvcm0gcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkLmApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMYXlvdXRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBsYXlvdXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIHRoaXMubW9kZWwhLmxheW91dHNbbGF5b3V0S2V5XSA9IGNoYW5nZXNbY2hhbmdlS2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ29tcG9uZW50TGF5b3V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgbGF5b3V0S2V5ID0gY2hhbmdlS2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICBsZXQgY29tcG9uZW50TGF5b3V0czogeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfSA9IHRoaXMubW9kZWwhLmNvbXBvbmVudExheW91dHMgYXMge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiBPYmplY3Q7XHJcbiAgICB9O1xyXG4gICAgY29tcG9uZW50TGF5b3V0c1tsYXlvdXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZVNldENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IHZhbHVlU2V0S2V5ID0gY2hhbmdlS2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICB0aGlzLm1vZGVsIS52YWx1ZVNldHMhW3ZhbHVlU2V0S2V5XSA9IGNoYW5nZXNbY2hhbmdlS2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQWN0aW9uQ2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGVsIS5hY3Rpb25zID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gICAgdGhpcy5pbml0QWN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDb25zdHJhaW50Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGVsIS5jb25zdHJhaW50cyA9IGNoYW5nZXNbY2hhbmdlS2V5XTtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTbWFydENvbXBvbmVudEZpbGVVcGxvYWRlciB7XHJcbiAgdWlBY3Rpb25Db2RlOiBzdHJpbmc7XHJcbiAgbWF4U2l6ZU1iPzogbnVtYmVyO1xyXG4gIGZpbGVGb3JtYXRzPzogc3RyaW5nW107XHJcbiAgaXNNdWx0aXBsZT86IGJvb2xlYW47XHJcbiAgc21hcnRDb21wb25lbnQ6IFNtYXJ0Q29tcG9uZW50QXBpQ2xpZW50PGFueT47XHJcbn1cclxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Injectable, Optional, Inject, PLATFORM_ID, NgModule, SkipSelf, Component, RendererStyleFlags2, Input, Directive, HostBinding, HostListener, ViewChild, forwardRef, EventEmitter, Output, Pipe, ViewContainerRef, ViewEncapsulation, ChangeDetectionStrategy, ViewChildren, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
|
|
2
|
+
import { InjectionToken, Injectable, Optional, Inject, PLATFORM_ID, NgModule, SkipSelf, Component, RendererStyleFlags2, Input, Directive, HostBinding, HostListener, ViewChild, forwardRef, EventEmitter, Output, Pipe, ViewContainerRef, ViewEncapsulation, ChangeDetectionStrategy, ViewChildren, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, ChangeDetectorRef } from '@angular/core';
|
|
3
3
|
import { __awaiter } from 'tslib';
|
|
4
4
|
import { Subject, takeUntil, startWith, map, distinctUntilChanged, catchError, throwError, from, lastValueFrom } from 'rxjs';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
@@ -15313,6 +15313,7 @@ class SmartComponentApiClient {
|
|
|
15313
15313
|
throw new Error('pageName or componentName must be specified!');
|
|
15314
15314
|
}
|
|
15315
15315
|
this.viewContext = inject.get(SmartViewContextService);
|
|
15316
|
+
this.changeDetector = inject.get(ChangeDetectorRef);
|
|
15316
15317
|
if (this._componentName) {
|
|
15317
15318
|
let pageNameForComponent = this.viewContext.getPageNameOfComponent(this._componentName);
|
|
15318
15319
|
if (!this.pageName) {
|
|
@@ -15488,11 +15489,10 @@ class SmartComponentApiClient {
|
|
|
15488
15489
|
return this.widgets;
|
|
15489
15490
|
}
|
|
15490
15491
|
initComponentByModel() {
|
|
15491
|
-
var _a, _b, _c;
|
|
15492
|
+
var _a, _b, _c, _d;
|
|
15492
15493
|
SmartStyleUtility.applyStyle((_a = this.model) === null || _a === void 0 ? void 0 : _a.style, this.element, this.renderer);
|
|
15493
15494
|
SmartStyleUtility.applyStyle((_b = this.model) === null || _b === void 0 ? void 0 : _b.parentStyle, this.element, this.renderer, true);
|
|
15494
15495
|
this.initData();
|
|
15495
|
-
this.initActions();
|
|
15496
15496
|
if (this.useQueryLists) {
|
|
15497
15497
|
(_c = this.getAllSmartFormComponents()) === null || _c === void 0 ? void 0 : _c.forEach((form) => {
|
|
15498
15498
|
if (form.smartForm) {
|
|
@@ -15502,6 +15502,8 @@ class SmartComponentApiClient {
|
|
|
15502
15502
|
}
|
|
15503
15503
|
});
|
|
15504
15504
|
}
|
|
15505
|
+
(_d = this.changeDetector) === null || _d === void 0 ? void 0 : _d.detectChanges();
|
|
15506
|
+
this.initActions();
|
|
15505
15507
|
// TODO: layout, widgets
|
|
15506
15508
|
}
|
|
15507
15509
|
getAllSmartFormComponents() {
|