barsa-novin-ray-core 2.0.81 → 2.0.83
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/esm2022/lib/abstract-classes/report-view-base.component.mjs +4 -2
- package/esm2022/lib/root-portal/root-portal.component.mjs +11 -3
- package/esm2022/lib/services/ulvmain.service.mjs +6 -1
- package/fesm2022/barsa-novin-ray-core.mjs +18 -3
- package/fesm2022/barsa-novin-ray-core.mjs.map +1 -1
- package/lib/abstract-classes/report-view-base.component.d.ts +2 -1
- package/lib/root-portal/root-portal.component.d.ts +1 -0
- package/lib/services/ulvmain.service.d.ts +3 -0
- package/package.json +1 -1
|
@@ -39,6 +39,7 @@ export class UlvMainService {
|
|
|
39
39
|
text: '',
|
|
40
40
|
image: ''
|
|
41
41
|
});
|
|
42
|
+
this._hideUlvPageTitle$ = new BehaviorSubject(false);
|
|
42
43
|
this._searchPanelUiSource = new BehaviorSubject(null);
|
|
43
44
|
this._pagingSettingSource = new BehaviorSubject(null);
|
|
44
45
|
this._toolbarButtonsSource = new BehaviorSubject([]);
|
|
@@ -68,6 +69,7 @@ export class UlvMainService {
|
|
|
68
69
|
this.visible$ = this._visibleSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
69
70
|
this.enable$ = this._enableSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
70
71
|
this.readonly$ = this._readonlySource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
72
|
+
this.hideUlvPageTitle$ = this._hideUlvPageTitle$.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
71
73
|
this.menuItems$ = this._menuItemsSource.asObservable().pipe(takeUntil(this._onDestroy$), filter((items) => items?.length > 0), map((items) => items.filter((c) => c.itemId !== 'ExportToExcel' && c.itemId !== 'Delete')));
|
|
72
74
|
this.title$ = this._titleSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
73
75
|
this.searchPanelUi$ = this._searchPanelUiSource.asObservable().pipe(takeUntil(this._onDestroy$), tap((searchPanel) => this._addDefaultSearchPanelSettings(searchPanel)));
|
|
@@ -149,6 +151,9 @@ export class UlvMainService {
|
|
|
149
151
|
get hideSearchpanel() {
|
|
150
152
|
return this._hideSearchapanelSource.getValue();
|
|
151
153
|
}
|
|
154
|
+
hideUlvTitlePage() {
|
|
155
|
+
this._hideUlvPageTitle$.next(true);
|
|
156
|
+
}
|
|
152
157
|
setCanSaveGridSettings(val) {
|
|
153
158
|
this._canSaveGridSetting$.next(val);
|
|
154
159
|
}
|
|
@@ -788,4 +793,4 @@ export class UlvMainService {
|
|
|
788
793
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UlvMainService, decorators: [{
|
|
789
794
|
type: Injectable
|
|
790
795
|
}], ctorParameters: () => [{ type: i1.BbbTranslatePipe }, { type: i2.ApiService }] });
|
|
791
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2bWFpbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy91bHZtYWluLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEgsT0FBTyxFQUNILFFBQVEsRUFFUixtQkFBbUIsRUFRdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0gsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNyQixNQUFNLGNBQWMsQ0FBQzs7OztBQUl0QixNQUFNLE9BQU8sY0FBYztJQWlGdkIsWUFBb0IsUUFBMEIsRUFBVSxXQUF1QjtRQUEzRCxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBaEYvRSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7UUErQmxFLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFpQyxFQUFFLENBQUMsQ0FBQztRQUM5RSx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0QsRUFBRSxDQUFDLENBQUM7UUFHcEYsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUN2Qyxt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QyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDM0IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1lBQ0gsaUJBQWlCLEdBQUcsRUFBRSxHQUFHLGlCQUFpQixFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0ExNEJRLGNBQWM7a0hBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIEJhcnNhQXBpLFxuICAgIE1lbnVJdGVtLFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUGFnaW5nU2V0dGluZyxcbiAgICBTZWFyY2hQYW5lbFNldHRpbmdzLFxuICAgIEdlbmVyYWxDb250cm9sSW5mb01vZGVsLFxuICAgIENvbHVtbkluZm9UeXBlLFxuICAgIEZvcm1TZXR0aW5nLFxuICAgIFNoYXJlQnV0dG9uc0Nob2ljZURlZixcbiAgICBDYXJ0YWJsZVRlbXBsYXRlS2V5XG59IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMnO1xuaW1wb3J0IHtcbiAgICBleGVjdXRlVWx2Q29tbWFuZEhhbmRsZXIsXG4gICAgZ2VucmF0ZUlubGluZU1vSWQsXG4gICAgZ2V0Q29udHJvbExpc3QsXG4gICAgR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyxcbiAgICBnZXROZXdNb0dyaWRFZGl0b3Jcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJiYlRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi9waXBlcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVWx2TWFpblNlcnZpY2Uge1xuICAgIG1vRGF0YUxpc3RTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oW10pO1xuICAgIGNvbnRleHQkOiBTdWJzY3JpcHRpb247XG4gICAgdmlld2VyJDogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIGNvbmRpdGlvbmFsRm9ybWF0cyQ6IE9ic2VydmFibGU8YW55PjtcbiAgICBoaWRlVG9vbGJhciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgbWFzayQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgdml3ZXJNYXNrJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICB2aXNpYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBlbmFibGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHJlYWRvbmx5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBtZW51SXRlbXMkOiBPYnNlcnZhYmxlPE1lbnVJdGVtW10+O1xuICAgIHRpdGxlJDogT2JzZXJ2YWJsZTx7IHRleHQ6IHN0cmluZzsgaW1hZ2U6IHN0cmluZyB9PjtcblxuICAgIHNlYXJjaFBhbmVsVWkkOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcGFnaW5nU2V0dGluZyQ6IE9ic2VydmFibGU8UGFnaW5nU2V0dGluZyB8IG51bGw+O1xuICAgIHRvb2xiYXJCdXR0b25zJDogT2JzZXJ2YWJsZTxhbnlbXT47XG4gICAgZGVzdHJveSQ6IE9ic2VydmFibGU8dm9pZD47XG4gICAgbW9EYXRhTGlzdCQ6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbFtdPjtcbiAgICByZXBvcnRJZCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBhbGxvd0lubGluZUVkaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGlubGluZUVkaXRNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBvbmx5SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgY29udGV4dDogYW55O1xuICAgIG9wZW5TZWFyY2hQYW5lbEhpZGRlblNldHRpbmdzJDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgICBvcGVuU2VhcmNoRmlsZXNNYW5hZ2UkOiBPYnNlcnZhYmxlPHZvaWQ+O1xuICAgIHNlYXJjaFBhbmVsTW9DaGFuZ2VkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBhbGxTZWFyY2hQYW5lbFNldHRpbmdzJDogT2JzZXJ2YWJsZTxTZWFyY2hQYW5lbFNldHRpbmdzW10+O1xuICAgIGxheW91dEluZm8kOiBPYnNlcnZhYmxlPGFueT47XG4gICAgc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzJDogT2JzZXJ2YWJsZTxTZWFyY2hQYW5lbFNldHRpbmdzIHwgdW5kZWZpbmVkPjtcbiAgICBuZXdJbmxpbmVFZGl0TW8kOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsPjtcbiAgICBfY2FydGFibGVUZW1wbGF0ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtrZXk6IHN0cmluZ106IEZvcm1TZXR0aW5nIH0+KHt9KTtcbiAgICBfY2FydGFibGVDaGlsZHNNbyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2tleTogc3RyaW5nXTogTWV0YW9iamVjdERhdGFNb2RlbCB9IHwgbnVsbD4oe30pO1xuICAgIHNlbGVjdGVkQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgICBwcml2YXRlIF9ncmlkRnJlZUNvbHVtblNpemluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9sYXlvdXRJbmZvU291cmNlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByaXZhdGUgX2NvbnRleHRTb3VyY2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJpdmF0ZSBfY2FuU2F2ZUdyaWRTZXR0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX2luRGlhbG9nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX2lzTXVsdGlTZWxlY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfZnVsbHNjcmVlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9jb25kaXRpb25hbEZvcm1hdHNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gICAgcHJpdmF0ZSBfcmVwb3J0U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICAgIHByaXZhdGUgX3ZpZXdlckNvbnRyb2xTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gICAgcHJpdmF0ZSBfaGlkZVRvb2xiYXJTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHByaXZhdGUgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX21hc2tTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF92aWV3ZXJNYXNrU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfdmlzaWJsZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcHJpdmF0ZSBfZW5hYmxlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICBwcml2YXRlIF9yZWFkb25seVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX21lbnVJdGVtc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pO1xuICAgIHByaXZhdGUgX29ubHlJbmxpbmVFZGl0U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfaW5saW5lRWRpdE1vZGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9hbGxvd0lubGluZUVkaXRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9jYXJ0YWJsZUtleVNlcGVyYXRvciA9ICdAJztcbiAgICBwcml2YXRlIF90aXRsZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyB0ZXh0OiBzdHJpbmc7IGltYWdlOiBzdHJpbmcgfT4oe1xuICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgaW1hZ2U6ICcnXG4gICAgfSk7XG5cbiAgICBwcml2YXRlIF9zZWFyY2hQYW5lbFVpU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gICAgcHJpdmF0ZSBfcGFnaW5nU2V0dGluZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5nU2V0dGluZyB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgX3Rvb2xiYXJCdXR0b25zU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByaXZhdGUgX3Rvb2xiYXJCdXR0b25zV29ya2Zsb3dCdXR0b25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByaXZhdGUgX2Rlc3Ryb3lTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX2ZpcnN0QXBwbHlBdXRvbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9jb250cm9sSW5mb3NNZXRhb2JqZWN0OiBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdID0gW107XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlID0gbmV3IFN1YmplY3Q8U2VhcmNoUGFuZWxTZXR0aW5ncz4oKTtcbiAgICBwcml2YXRlIF9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hQYW5lbFNldHRpbmdzW10+KFtdKTtcbiAgICBwcml2YXRlIF9vcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5nc1NvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfb3BlblNlYXJjaEZpbGVzTWFuYWdlU291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF9zZWFyY2hQYW5lbE1vQ2hhbmdlZFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX25ld0lubGluZUVkaXRNb1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF93b3JrZmxvd1NoYXJlQnV0dG9uczogU2hhcmVCdXR0b25zQ2hvaWNlRGVmW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2JiYlBpcGU6IEJiYlRyYW5zbGF0ZVBpcGUsIHByaXZhdGUgX2FwaVNlcnZpY2U6IEFwaVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0JCA9IHRoaXMuX2NvbnRleHRTb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIHRhcCgoY29udGV4dCkgPT4gKHRoaXMuY29udGV4dCA9IGNvbnRleHQpKSxcbiAgICAgICAgICAgICAgICB0YXAoKGNvbnRleHQpID0+IHRoaXMuX2luaXRpYWxpemUoY29udGV4dCkpLFxuICAgICAgICAgICAgICAgIHRhcCgoY29udGV4dCkgPT4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcihjb250ZXh0KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5uZXdJbmxpbmVFZGl0TW8kID0gdGhpcy5fbmV3SW5saW5lRWRpdE1vU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcbiAgICAgICAgdGhpcy52aWV3ZXIkID0gdGhpcy5fdmlld2VyQ29udHJvbFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uYWxGb3JtYXRzJCA9IHRoaXMuX2NvbmRpdGlvbmFsRm9ybWF0c1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMuaGlkZVRvb2xiYXIkID0gdGhpcy5faGlkZVRvb2xiYXJTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICAgICAgICB0aGlzLm1hc2skID0gdGhpcy5fbWFza1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMudml3ZXJNYXNrJCA9IHRoaXMuX3ZpZXdlck1hc2tTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICAgICAgICB0aGlzLnZpc2libGUkID0gdGhpcy5fdmlzaWJsZVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMuZW5hYmxlJCA9IHRoaXMuX2VuYWJsZVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMucmVhZG9ubHkkID0gdGhpcy5fcmVhZG9ubHlTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcyQgPSB0aGlzLl9tZW51SXRlbXNTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgIGZpbHRlcigoaXRlbXMpID0+IGl0ZW1zPy5sZW5ndGggPiAwKSxcbiAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+IGl0ZW1zLmZpbHRlcigoYykgPT4gYy5pdGVtSWQgIT09ICdFeHBvcnRUb0V4Y2VsJyAmJiBjLml0ZW1JZCAhPT0gJ0RlbGV0ZScpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRpdGxlJCA9IHRoaXMuX3RpdGxlU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcblxuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsVWkkID0gdGhpcy5fc2VhcmNoUGFuZWxVaVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgdGFwKChzZWFyY2hQYW5lbCkgPT4gdGhpcy5fYWRkRGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3Moc2VhcmNoUGFuZWwpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9wZW5TZWFyY2hQYW5lbEhpZGRlblNldHRpbmdzJCA9IHRoaXMuX29wZW5TZWFyY2hQYW5lbEhpZGRlblNldHRpbmdzU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnBhZ2luZ1NldHRpbmckID0gdGhpcy5fcGFnaW5nU2V0dGluZ1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMudG9vbGJhckJ1dHRvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl90b29sYmFyQnV0dG9uc1dvcmtmbG93QnV0dG9ucy5hc09ic2VydmFibGUoKSxcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zU291cmNlLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXG4gICAgICAgICAgICBtYXAoKFt3ZkJ0bnMsIGNdKSA9PlxuICAgICAgICAgICAgICAgICFjXG4gICAgICAgICAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndmQnRucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5tYXAoKGQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZVRleHQ6IGQuQ29tbWFuZD8uSXNCdWlsdGluICYmIGQuaXRlbUlkICE9PSAnTmV3JyA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWFwKChjKSA9PlxuICAgICAgICAgICAgICAgICFjID8gW10gOiBbLi4uYy5maWx0ZXIoKGQpID0+ICFkLkNvbW1hbmQ/LklzQnVpbHRpbiksIC4uLmMuZmlsdGVyKChkKSA9PiBkLkNvbW1hbmQ/LklzQnVpbHRpbildXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWFwKChjKSA9PlxuICAgICAgICAgICAgICAgIGMucmVkdWNlKChhY2MsIGIpID0+IChhY2MubGVuZ3RoID4gMCAmJiBhY2NbYWNjLmxlbmd0aCAtIDFdWycwJ10gJiYgYlsnMCddID8gYWNjIDogWy4uLmFjYywgYl0pLCBbXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JCA9IHRoaXMuX2Rlc3Ryb3lTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YXAoKCkgPT4gdGhpcy5fdW5zY3Vic2NyaWJlQ29udGV4dCgpKSk7XG4gICAgICAgIHRoaXMubW9EYXRhTGlzdCQgPSB0aGlzLm1vRGF0YUxpc3RTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnQkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgoaXRlbXMpID0+IGl0ZW1zLmZpbHRlcigoZCkgPT4gZC4kSXNDaGVja2VkKS5sZW5ndGgpKTtcbiAgICAgICAgdGhpcy5yZXBvcnRJZCQgPSB0aGlzLl9yZXBvcnRTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShtYXAoKHJlcG9ydCkgPT4gcmVwb3J0Py5JZCkpO1xuXG4gICAgICAgIHRoaXMuYWxsb3dJbmxpbmVFZGl0JCA9IHRoaXMuX2FsbG93SW5saW5lRWRpdFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5pbmxpbmVFZGl0TW9kZSQgPSB0aGlzLl9pbmxpbmVFZGl0TW9kZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5vbmx5SW5saW5lRWRpdCQgPSB0aGlzLl9vbmx5SW5saW5lRWRpdFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5vcGVuU2VhcmNoRmlsZXNNYW5hZ2UkID0gdGhpcy5fb3BlblNlYXJjaEZpbGVzTWFuYWdlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsTW9DaGFuZ2VkJCA9IHRoaXMuX3NlYXJjaFBhbmVsTW9DaGFuZ2VkU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgIHRoaXMubGF5b3V0SW5mbyQgPSB0aGlzLl9sYXlvdXRJbmZvU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICAgICAgICB0aGlzLmFsbFNlYXJjaFBhbmVsU2V0dGluZ3MkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLmFzT2JzZXJ2YWJsZSgpLFxuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW2FsbFNldHRpbmdzLCBkZWZhdWx0U2V0dGluZ3NdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTZXR0aW5ncyAmJiBhbGxTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U2V0dGluZ3MuSXNEZWZhdWx0ID0gIWFsbFNldHRpbmdzLnNvbWUoKGMpID0+IGMuSXNEZWZhdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgYWxsU2V0dGluZ3MgPSBbZGVmYXVsdFNldHRpbmdzLCAuLi5hbGxTZXR0aW5nc107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhbGxTZXR0aW5ncztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZGVsYXkoMCksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkJCA9IHRoaXMuX3NlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkU291cmNlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWQkLFxuICAgICAgICAgICAgdGhpcy5hbGxTZWFyY2hQYW5lbFNldHRpbmdzJFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbaWQsIHNldHRpbmdzXSkgPT4gc2V0dGluZ3M/LmZpbmQoKGMpID0+IGMuSWQgPT09IGlkKSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXQgZ3JpZEZyZWVDb2x1bW5TaXppbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JpZEZyZWVDb2x1bW5TaXppbmckLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgY2FuU2F2ZUdyaWRTZXR0aW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhblNhdmVHcmlkU2V0dGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBpbkRpYWxvZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbkRpYWxvZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBpc011bHRpU2VsZWN0JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3QkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgZnVsbHNjcmVlbiQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mdWxsc2NyZWVuJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGNhcnRhYmxlQ2hpbGRzTW8kKCk6IE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBNZXRhb2JqZWN0RGF0YU1vZGVsIH0gfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJ0YWJsZUNoaWxkc01vJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGNhcnRhYmxlVGVtcGxhdGVzJCgpOiBPYnNlcnZhYmxlPHsgW2tleTogc3RyaW5nXTogRm9ybVNldHRpbmcgfSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnRhYmxlVGVtcGxhdGVzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IHNlYXJjaFBhbmVsVWkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFBhbmVsVWlTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IHJlcG9ydElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBvcnRTb3VyY2UuZ2V0VmFsdWUoKT8uSWQ7XG4gICAgfVxuICAgIGdldCBhbGxTZWFyY2hQYW5lbFNldHRpbmdzKCk6IFNlYXJjaFBhbmVsU2V0dGluZ3NbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBoaWRlU2VhcmNocGFuZWwkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZVNlYXJjaGFwYW5lbFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cbiAgICBnZXQgaGlkZVNlYXJjaHBhbmVsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZVNlYXJjaGFwYW5lbFNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBzZXRDYW5TYXZlR3JpZFNldHRpbmdzKHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYW5TYXZlR3JpZFNldHRpbmckLm5leHQodmFsKTtcbiAgICB9XG4gICAgZXhlY3V0ZVRvb2xiYXJCdXR0b24oaXRlbUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMuX3Rvb2xiYXJCdXR0b25zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGlmICghYnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidG4gPSBidXR0b25zLmZpbmQoKGMpID0+IGMuaXRlbUlkID09PSBpdGVtSWQpO1xuICAgICAgICBpZiAoYnRuKSB7XG4gICAgICAgICAgICBleGVjdXRlVWx2Q29tbWFuZEhhbmRsZXIoYnRuLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRXb3JrZmxvd0J1dHRvbnNJblRvb2xiYXIoZTogU2hhcmVCdXR0b25zQ2hvaWNlRGVmKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFyck9mU2hhcmVCdXR0b25zID0gdGhpcy5fY3JlYXRlV29ya2Zsb3dTaGFyZUJ1dHRvbnMoZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXJyT2ZTaGFyZUJ1dHRvbnMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgaWNvbjogJycsXG4gICAgICAgICAgICB0ZXh0OiBjLFxuICAgICAgICAgICAgaXRlbUlkOiBjLFxuICAgICAgICAgICAgRGF0YTogbnVsbCxcbiAgICAgICAgICAgICRTaGFyZVdvcmtmbG93QnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICAgIENvbW1hbmQ6IHsgX2lzVmlzaWJsZTogdHJ1ZSwgX2lzRW5hYmxlOiB0cnVlLCBKc29uRXh0cmFQcm9wOiB7IERlc2lnbjogJ2F0dGVudGlvbicgfSB9LFxuICAgICAgICAgICAgaGFuZGxlcjogKGQpID0+IHRoaXMub25Xb3JrZmxvd0J1dHRvbkluVG9vbGJhckNsaWNrKGQpLFxuICAgICAgICAgICAgSXNCdWlsdGluOiBmYWxzZVxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zV29ya2Zsb3dCdXR0b25zLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBfZXhjbHVkZVdyYXBwZXJGcm9tTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICAgICAgY29uc3QgeyAkV3JhcHBlciwgLi4ubmV3TW8gfSA9IG1vO1xuICAgICAgICByZXR1cm4gbmV3TW87XG4gICAgfVxuICAgIG9uV29ya2Zsb3dCdXR0b25JblRvb2xiYXJDbGljayhzaGFyZUJ1dHRvbjogeyB0ZXh0OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgICAgICBCYXJzYUFwaS5Cdy5Nc2cuT0tDYW5jZWwoJ9ii24zYpyDYp9iyINiq2KfbjNuM2K8g2YXZiNin2LHYryDaqdin2LHYqtin2KjZhCDZhdi32YXYptmGINmH2LPYqtuM2K/YnycsICfYqtin24zbjNivJywgKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyA9PT0gJ29rJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hvaWNlRGVmID0gYy5jaG9pY2VMaXN0LmZpbmQoKGQpID0+IGQuVGl0bGUgPT09IHNoYXJlQnV0dG9uLnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hvaWNlRGVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLmZvcm1QYW5lbEN0cmxyLldvcmtmbG93VHJhbnNpdGlvbihjaG9pY2VEZWYsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXRXb3JrZmxvd1N0YXRlKCdGaW5pc2gnLCBbYy5tb10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXRXb3JrZmxvd1N0YXRlKFxuICAgICAgICAgICAgICAgIC8vICAgICAnUGVuZGluZycsXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLm1hcCgoYykgPT4gYy5tbylcbiAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAgICAgICAvLyAgICAgbW86IHRoaXMuX2V4Y2x1ZGVXcmFwcGVyRnJvbU1vKGMubW8uUmVsYXRlZE1vKSxcbiAgICAgICAgICAgICAgICAvLyAgICAgY2hvaWNlRGVmOiBjLmNob2ljZUxpc3QuZmluZCgoZCkgPT4gZC5UaXRsZSA9PT0gc2hhcmVCdXR0b24udGV4dClcbiAgICAgICAgICAgICAgICAvLyB9KSk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fc2V0V29ya2Zsb3dTdGF0ZSgnUGVuZGluZycsIHBhcmFtcyk7XG5cbiAgICAgICAgICAgICAgICAvLyBCYXJzYUFwaS5Db21tb24uQWpheC5HZXRTZXJ2ZXJEYXRhKFxuICAgICAgICAgICAgICAgIC8vICAgICAnV29ya2Zsb3c5NC5Pbkdyb3VwT2ZDaG9pY2VEZWZzU2VsZWN0JyxcbiAgICAgICAgICAgICAgICAvLyAgICAgeyBwYXJhbWV0ZXI6IHsgRGF0YUxpc3Q6IHBhcmFtcyB9IH0sXG4gICAgICAgICAgICAgICAgLy8gICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuX3NldFdvcmtmbG93U3RhdGUoJ1N1Y2Nlc3MnLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9LCAvLyBzdWNjZXNzXG4gICAgICAgICAgICAgICAgLy8gICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuX3NldFdvcmtmbG93U3RhdGUoJ0ZhaWxlZCcsIHBhcmFtcywgJ9mF2KrYp9iz2YHYp9mG2Ycg2LnZhdmE24zYp9iqINmG2KfZhdmI2YHZgiDYqNmI2K8uJyk7XG4gICAgICAgICAgICAgICAgLy8gICAgIH0sIC8vIGZhaWx1cmVcbiAgICAgICAgICAgICAgICAvLyAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpc1xuICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGl0bGVTb3VyY2UubmV4dCh7IHRleHQ6IHRpdGxlLCBpbWFnZTogJycgfSk7XG4gICAgfVxuICAgIHRvZ2dsZUhpZGVTZWFyY2hwYW5lbCh2YWw/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UubmV4dCh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJyA/IHZhbCA6ICF0aGlzLl9oaWRlU2VhcmNoYXBhbmVsU291cmNlLmdldFZhbHVlKCkpO1xuICAgIH1cbiAgICBzZXRDb250ZXh0KGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29udGV4dFNvdXJjZS5uZXh0KGNvbnRleHQpO1xuICAgIH1cbiAgICBzZXRJbkRpYWxvZyh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5EaWFsb2ckLm5leHQodmFsKTtcbiAgICB9XG4gICAgc2V0SXNNdWx0aVNlbGVjdCh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdCQubmV4dCh2YWwpO1xuICAgIH1cbiAgICBzZXRGdWxsc2NyZWVuKHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuJC5uZXh0KHZhbCk7XG4gICAgfVxuXG4gICAgY3JlYXRlTmV3SW5saW5lTW8oaXNDaGVja2VkOiBib29sZWFuKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGZvcm1TZXR0aW5nID0gY29udGV4dC5TZXR0aW5nLkZvcm1UZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgdHlwZURlZklkID0gY29udGV4dC5TZXR0aW5nLkV4dHJhLlJlcG9ydC5UeXBlRGVmSWQ7XG4gICAgICAgIGNvbnN0IG5ld01vID0gZ2V0TmV3TW9HcmlkRWRpdG9yKGZvcm1TZXR0aW5nLCB0eXBlRGVmSWQpIGFzIE1ldGFvYmplY3REYXRhTW9kZWw7XG4gICAgICAgIG5ld01vLklkID0gZ2VucmF0ZUlubGluZU1vSWQoKTtcbiAgICAgICAgbmV3TW8uJElzQ2hlY2tlZCA9IGlzQ2hlY2tlZDtcbiAgICAgICAgbmV3TW8uJE5ld0lubGluZU1vID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29tcG9zaXRlKGNvbnRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbiA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHRoaXMuY29udGV4dC5TZXR0aW5nLCAnRXh0cmEuUmVsYXRpb24nKTtcbiAgICAgICAgICAgIG5ld01vW3JlbGF0aW9uLlBhcmVudEZkTmFtZV0gPSByZWxhdGlvbi5QYXJlbnRNb0lkO1xuICAgICAgICB9XG4gICAgICAgIC8vICB0aGlzLl9uZXdJbmxpbmVFZGl0TW9Tb3VyY2UubmV4dChuZXdNbyk7XG4gICAgICAgIHJldHVybiBuZXdNbztcbiAgICB9XG4gICAgc2V0TGF5b3V0SW5mbyhsYXlvdXRJbmZvKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xheW91dEluZm9Tb3VyY2UubmV4dChsYXlvdXRJbmZvKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fdW5zY3Vic2NyaWJlQ29udGV4dCgpO1xuICAgIH1cblxuICAgIHBhZ2VTaXplQ2hhbmdlZChwYWdlSW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnUGFnZUNoYW5nZScsIHRoaXMuY29udGV4dCwgcGFnZUluZGV4KTtcbiAgICB9XG5cbiAgICBwYWdlQ2hhbmdlZChwYWdlSW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmN1cnJlbnRQYWdlID0gcGFnZUluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdQYWdlQ2hhbmdlJywgdGhpcy5jb250ZXh0LCBwYWdlSW5kZXgpO1xuICAgIH1cblxuICAgIHJlU2V0TW9EYXRhTGlzdChtb0RhdGFMaXN0PzogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBtb0RhdGFMaXN0ID8/IHRoaXMubW9EYXRhTGlzdFNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLl9tb0RhdGFMaXN0Q2hhbmdlZChbLi4ubmV3TW9EYXRhTGlzdF0pO1xuICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5TZXR0aW5nPy5Jc0NhcnRhYmxlUmVwb3J0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5T2ZDYXRhYmxlVGVtcGxhdGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIG5ld01vRGF0YUxpc3QuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHBkZklkID0gYy5SZWxhdGVkTW8/LiRUeXBlRGVmSWQ7XG4gICAgICAgICAgICBpZiAodHBkZklkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7dHBkZklkfSR7dGhpcy5fY2FydGFibGVLZXlTZXBlcmF0b3J9JHtjLkNhcnRhYmxlU2V0dGluZ3M/LklkIHx8ICcwJ31gO1xuICAgICAgICAgICAgICAgIGtleU9mQ2F0YWJsZVRlbXBsYXRlcy5hZGQoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChrZXlPZkNhdGFibGVUZW1wbGF0ZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRDYXJ0YWJsZVRlbXBsYXRlKGtleU9mQ2F0YWJsZVRlbXBsYXRlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2VhcmNoIFNldHRpbmcgTWFuYWdlclxuICAgIGNsZWFyU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWFyY2hQYW5lbFVpID0gdGhpcy5zZWFyY2hQYW5lbFVpO1xuICAgICAgICBpZiAoIXNlYXJjaFBhbmVsVWkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZFVpID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWkuJFNlYXJjaCA/PyBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaS7YrNiz2KrYrNmIO1xuICAgICAgICBmaWVsZFVpLmZpcmVFdmVudCgnQ2xlYXJDbGljaycpO1xuICAgIH1cbiAgICBzZWFyY2goKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhbmVsVWkgPSB0aGlzLnNlYXJjaFBhbmVsVWk7XG4gICAgICAgIGlmICghc2VhcmNoUGFuZWxVaSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWVsZFVpID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWkuJFNlYXJjaCA/PyBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaS7YrNiz2KrYrNmIO1xuICAgICAgICBpZiAoIWZpZWxkVWkpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZSA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpW2NdO1xuICAgICAgICAgICAgICAgIGlmIChlLm9yaWdpbmFsWHR5cGUgPT09ICdVaS5TZWFyY2hDb21tYW5kSW5mb1VpJykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFVpID0gZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRVaSkge1xuICAgICAgICAgICAgZmllbGRVaS5maXJlRXZlbnQoJ1NlYXJjaENsaWNrJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWYWx1ZUlubGluZUVkaXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVFZGl0TW9kZVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIGdldEFsbG93SW5saW5lRWRpdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FsbG93SW5saW5lRWRpdFNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBzZXRJbmxpbmVFZGl0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lubGluZUVkaXRNb2RlU291cmNlLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIG9wZW5TZWFyY2hGaWVsZHNIaWRkZW5TZXR0aW5ncygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlblNlYXJjaFBhbmVsSGlkZGVuU2V0dGluZ3NTb3VyY2UubmV4dCgpO1xuICAgIH1cblxuICAgIG9wZW5TZWFyY2hGaWxlc01hbmFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb3BlblNlYXJjaEZpbGVzTWFuYWdlU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICBzZWFyY2hQYW5lbE1vQ2hhbmdlZChjaGFuZ2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFuZWxNb0NoYW5nZWRTb3VyY2UubmV4dChjaGFuZ2UpO1xuICAgIH1cblxuICAgIGxvYWRTZWFyY2hQYW5lbFNldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LkZvcm1QYW5lbFVpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXBvcnRJZCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICB0YXAoKHJlcG9ydElkKSA9PiB0aGlzLl9sb2FkU2VhcmNoUGFuZWxTZXR0aW5ncyhyZXBvcnRJZCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgYWRkU2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbFNldHRpbmdzOiBTZWFyY2hQYW5lbFNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MgPSB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MucHVzaChzZWFyY2hQYW5lbFNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5uZXh0KGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpO1xuICAgIH1cbiAgICBzYXZlU2VhcmNoUGFuZWxTZXR0aW5nKHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nczogU2VhcmNoUGFuZWxTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWFyY2hNbyA9IHRoaXMuZ2V0U2VhcmNoUGFuZWxNbygpO1xuICAgICAgICBjb25zdCBmaWVsZHNTZXR0aW5nID0gdGhpcy5nZXRTZWFyY2hQYW5lbEZpZWxkc1NldHRpbmcoKTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuU2VhcmNoTW8gPSBKU09OLnN0cmluZ2lmeShzZWFyY2hNbyk7XG4gICAgICAgIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5GaWVsZHNTZXR0aW5nID0gSlNPTi5zdHJpbmdpZnkoZmllbGRzU2V0dGluZyk7XG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kKFxuICAgICAgICAgICAgJ1NhdmVTZWFyY2hQYW5lbFNldHRpbmdzJyxcbiAgICAgICAgICAgIG5ldyBCYXJzYUFwaS5Db21tb24uTWV0YU9iamVjdFdlYih7XG4gICAgICAgICAgICAgICAgSWQ6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5JZCxcbiAgICAgICAgICAgICAgICAkQ2FwdGlvbjogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLlRpdGxlLFxuICAgICAgICAgICAgICAgIFJlcG9ydElkOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuUmVwb3J0Py5JZCxcbiAgICAgICAgICAgICAgICBUaXRsZTogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLlRpdGxlLFxuICAgICAgICAgICAgICAgIElzRGVmYXVsdDogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLklzRGVmYXVsdCxcbiAgICAgICAgICAgICAgICBJc1B1YmxpYzogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLklzUHVibGljLFxuICAgICAgICAgICAgICAgIEFwcGx5QXV0b21hdGljYWxseTogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLkFwcGx5QXV0b21hdGljYWxseSxcbiAgICAgICAgICAgICAgICBIaWRlU2VhcmNoUGFuZWw6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5IaWRlU2VhcmNoUGFuZWwsXG4gICAgICAgICAgICAgICAgU2VhcmNoTW86IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5TZWFyY2hNbyxcbiAgICAgICAgICAgICAgICBGaWVsZHNTZXR0aW5nOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuRmllbGRzU2V0dGluZ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VhcmNoUGFuZWxNb0NoYW5nZWQoZmFsc2UpO1xuICAgIH1cblxuICAgIGFwcGx5U2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbFNldHRpbmdzOiBTZWFyY2hQYW5lbFNldHRpbmdzIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhbmVsVWkgPSB0aGlzLnNlYXJjaFBhbmVsVWk7XG4gICAgICAgIGlmICghc2VhcmNoUGFuZWxTZXR0aW5ncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9maXJzdEFwcGx5QXV0b21hdGljYWxseSAmJiBzZWFyY2hQYW5lbFNldHRpbmdzLklzUHJpbWFyeSkge1xuICAgICAgICAgICAgdGhpcy5fZmlyc3RBcHBseUF1dG9tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maXJzdEFwcGx5QXV0b21hdGljYWxseSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsVWkpO1xuICAgICAgICBpZiAoc2VhcmNoUGFuZWxTZXR0aW5ncy5TZWFyY2hNbykge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoTW8gPSBKU09OLnBhcnNlKHNlYXJjaFBhbmVsU2V0dGluZ3MuU2VhcmNoTW8pO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoc2VhcmNoTW8pLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpW2NdO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZCAmJiBjLmluZGV4T2YoJyQnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuU2V0VmFsdWUoc2VhcmNoTW9bY10pO1xuICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYW5lbFVpLk1vLlNldEZWYWx1ZShjLCBzZWFyY2hNb1tjXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc2VhcmNoUGFuZWxTZXR0aW5ncy5Jc1ByaW1hcnkgJiYgIXNlYXJjaFBhbmVsVWkuU2V0dGluZy5JbW1lZGlhdGVFeGVjdXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hQYW5lbE1vQ2hhbmdlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlYXJjaFBhbmVsU2V0dGluZ3MuQXBwbHlBdXRvbWF0aWNhbGx5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIHNldCBoaWRkZW4gZmllbGRzXG4gICAgICAgIGlmIChzZWFyY2hQYW5lbFNldHRpbmdzLkZpZWxkc1NldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShzZWFyY2hQYW5lbFNldHRpbmdzLkZpZWxkc1NldHRpbmcpO1xuICAgICAgICAgICAgdGhpcy5zZXRBbmRBcHBseVNlYXJjaFBhbmVsU2V0dGluZ0ZpZWxkc1NldHRpbmcoXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hQYW5lbE1vQ2hhbmdlZChmYWxzZSk7XG4gICAgfVxuICAgIGdldFNlYXJjaFBhbmVsTW8oKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFBhbmVsVWkuTW87XG4gICAgfVxuICAgIGdldFNlYXJjaFBhbmVsRmllbGRzU2V0dGluZygpOiBBcnJheTxQYXJ0aWFsPEdlbmVyYWxDb250cm9sSW5mb01vZGVsPj4ge1xuICAgICAgICBjb25zdCBzZWFyY2hQYW5lbFVpID0gdGhpcy5zZWFyY2hQYW5lbFVpO1xuICAgICAgICBjb25zdCBmaWVsZHM6IEFycmF5PEdlbmVyYWxDb250cm9sSW5mb01vZGVsPiA9IHNlYXJjaFBhbmVsVWkuU2V0dGluZy5WaWV3LkNvbnRyb2xJbmZvLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PiBjLkNvbnRyb2xOYW1lICE9PSAnJFNlYXJjaCcgJiYgYy5Db250cm9sTmFtZSAhPT0gJ9is2LPYqtis2YgnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZpZWxkc1NldHRpbmcgPSBmaWVsZHMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgTmFtZTogYy5Db250cm9sTmFtZSxcbiAgICAgICAgICAgIENhcHRpb246IGMuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQsXG4gICAgICAgICAgICBIaWRkZW46IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpW2MuQ29udHJvbE5hbWVdLlNldHRpbmcuSXNWaXNpYmxlID09PSBmYWxzZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIElzTWFuZGF0b3J5OiBjLklzTWFuZGF0b3J5XG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkc1NldHRpbmc7XG4gICAgfVxuICAgIHNldEFuZEFwcGx5U2VhcmNoUGFuZWxTZXR0aW5nRmllbGRzU2V0dGluZyhmaWVsZHNTZXR0aW5nOiBDb2x1bW5JbmZvVHlwZVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhbmVsVWkgPSB0aGlzLnNlYXJjaFBhbmVsVWk7XG4gICAgICAgIGZpZWxkc1NldHRpbmcuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaVtjLk5hbWVdO1xuICAgICAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUGFuZWxVaS5maXJlRXZlbnQoJ0NoYW5nZUZpZWxkVmlzaWJsZScsIGZpZWxkLlNldHRpbmcuQ29udHJvbEZpZWxkQ2FwdGlvbiwgIWMuSGlkZGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZVNlYXJjaFBhbmVsU2V0dGluZ3MoYWxsU2VhcmNoUGFuZWxTZXR0aW5nczogU2VhcmNoUGFuZWxTZXR0aW5nc1tdKTogdm9pZCB7XG4gICAgICAgIGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MgPSBhbGxTZWFyY2hQYW5lbFNldHRpbmdzLmZpbHRlcigoYykgPT4gIWMuSXNQcmltYXJ5ICYmICFjLklzRGVsZXRlZCk7XG4gICAgICAgIHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UubmV4dChhbGxTZWFyY2hQYW5lbFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICByZW1vdmVTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsU2V0dGluZ3NJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MgPSB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MuZmlsdGVyKChjKSA9PiBjLklkICE9PSBzZWFyY2hQYW5lbFNldHRpbmdzSWQpO1xuICAgICAgICB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLm5leHQoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgY2hhbmdlU2VsZWN0ZWRTZWFyY2hQYW5lbChzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkU291cmNlLm5leHQoc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWQpO1xuICAgIH1cblxuICAgIGxvYWRNZXRhQ29uZGl0aW9uc0NvbnRyb2xJbmZvcyh0eXBlRGVmSWQ6IHN0cmluZywgZmllbGREYk5hbWVzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4ge1xuICAgICAgICBjb25zdCBtbyA9IEdldERlZmF1bHRNb09iamVjdEluZm8odHlwZURlZklkKTtcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbnRyb2xJbmZvc01ldGFvYmplY3QpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGNvbnRyb2xzSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sc0luZm8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY29udHJvbHNJbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbnRyb2xMaXN0KG1vLCBmaWVsZERiTmFtZXMsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKChjb250cm9sc0luZm86IEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10pID0+ICh0aGlzLl9jb250cm9sSW5mb3NNZXRhb2JqZWN0ID0gY29udHJvbHNJbmZvKSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9jcmVhdGVXb3JrZmxvd1NoYXJlQnV0dG9ucyhlOiBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYpOiBzdHJpbmdbXSB7XG4gICAgICAgIGxldCBzaGFyZUJ1dHRvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmIChlLmFkZCkge1xuICAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMucHVzaChlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zID0gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMuZmlsdGVyKChjKSA9PiBjLm1vLklkICE9PSBlLm1vLklkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zID0gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMuZmlsdGVyKChjKSA9PiBjLm1vPy4kSXNDaGVja2VkKTtcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNoYXJlQnV0dG9ucyA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zWzBdLmNob2ljZUxpc3QubWFwKChkKSA9PiBkLlRpdGxlKTtcbiAgICAgICAgICAgIGNvbnN0IHVuU2hhcmVCdXR0b25zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9uc1tpXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoYXJlQnV0dG9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaG9pY2VMaXN0Lm1hcCgoZCkgPT4gZC5UaXRsZSkuaW5kZXhPZihzaGFyZUJ1dHRvbnNbal0pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5TaGFyZUJ1dHRvbnMucHVzaChzaGFyZUJ1dHRvbnNbal0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hhcmVCdXR0b25zID0gc2hhcmVCdXR0b25zLmZpbHRlcigoYykgPT4gdW5TaGFyZUJ1dHRvbnMuaW5kZXhPZihjKSA9PT0gLTEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaGFyZUJ1dHRvbnM7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaW5pdENyZWF0ZU5ld0lubGluZU1vKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybVNldHRpbmcgPSBjb250ZXh0LlNldHRpbmcuRm9ybVRlbXBsYXRlO1xuICAgICAgICBpZiAoZm9ybVNldHRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTmV3SW5saW5lTW8oZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pc0NvbXBvc2l0ZShjb250ZXh0KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uVHlwZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQuU2V0dGluZywgJ0V4dHJhLlJlbGF0aW9uLlJlbGF0aW9uVHlwZScpO1xuICAgICAgICByZXR1cm4gcmVsYXRpb25UeXBlID09PSBCYXJzYUFwaS5Db21tb24uRW51bXMuUmVsYXRpb25UeXBlLkNvbXBvc2l0aW9uO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2FkZEV2ZW50TGlzdGVuZXIoY29udGV4dDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnRleHQub24oe1xuICAgICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgICBNYXNrQ2hhbmdlZDogdGhpcy5fbWFza0NoYW5nZWQsXG4gICAgICAgICAgICBWaWV3ZXJNYXNrQ2hhbmdlZDogdGhpcy5fdmlld2VyTWFza0NoYW5nZWQsXG4gICAgICAgICAgICBWaWV3ZXJDb250cm9sQ2hhbmdlZDogdGhpcy5fdmlld2VyQ29udHJvbENoYW5nZWQsXG4gICAgICAgICAgICBWaXNpYmxlQ2hhbmdlZDogdGhpcy5fdmlzaWJsZUNoYW5nZWQsXG4gICAgICAgICAgICBSZWFkb25seUNoYW5nZWQ6IHRoaXMuX3JlYWRvbmx5Q2hhbmdlZCxcbiAgICAgICAgICAgIE1lbnVJdGVtc0NoYW5nZWQ6IHRoaXMuX21lbnVJdGVtc0NoYW5nZWQsXG4gICAgICAgICAgICBUaXRsZUNoYW5nZWQ6IHRoaXMuX3RpdGxlQ2hhbmdlZCxcbiAgICAgICAgICAgIFNlYXJjaFBhbmVsQ2hhbmdlZDogdGhpcy5fc2VhcmNoUGFuZWxDaGFuZ2VkLFxuICAgICAgICAgICAgUGFnaW5nU2V0dGluZ0NoYW5nZWQ6IHRoaXMuX3BhZ2luZ1NldHRpbmdDaGFuZ2VkLFxuICAgICAgICAgICAgVG9vbGJhckJ1dHRvbnNDaGFuZ2VkOiB0aGlzLl90b29sYmFyQnV0dG9uc0NoYW5nZWQsXG4gICAgICAgICAgICBFbmFibGVDaGFuZ2VkOiB0aGlzLl9lbmFibGVDaGFuZ2VkLFxuICAgICAgICAgICAgRGVzdHJveTogdGhpcy5fZGVzdHJveUNoYW5nZWQsXG4gICAgICAgICAgICBFeGl0SW5saW5lRWRpdDogdGhpcy5fZXhpc3RJbmxpbmVFZGl0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdGlhbGl6ZShjb250ZXh0OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdENhcnRhYmxlc0Zvcm1UZW1wbGF0ZShjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdENvbmRpdGlvbmFsRm9ybWF0cyhjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdEFsbG93SW5saW5lRWRpdChjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdE9ubHlJbmxpbmVFZGl0KGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0SW5saW5lRWRpdE1vZGUoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRSZXBvcnQoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRWaWV3ZXJDb250cm9sKGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0SGlkZVRvb2xiYXIoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRUb29sYmFyQnV0dG9ucyhjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdFZpc2libGUoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRFbmFibGUoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRUaXRsZShjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdFJlYWRvbmx5KGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0TW9EYXRhTGlzdChjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdFBhZ2luZ1NldHRpbmcoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRNZW51SXRlbXMoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRTZWFyY2hwYW5lbChjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdENyZWF0ZU5ld0lubGluZU1vKGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0R3JpZEZyZWVDb2x1bW5TaXppbmcoY29udGV4dCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaW5pdEdyaWRGcmVlQ29sdW1uU2l6aW5nKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5TZXR0aW5nLlZpZXc/LkdyaWRfRnJlZUNvbHVtblNpemluZykge1xuICAgICAgICAgICAgdGhpcy5fZ3JpZEZyZWVDb2x1bW5TaXppbmckLm5leHQoY29udGV4dC5TZXR0aW5nLlZpZXc/LkdyaWRfRnJlZUNvbHVtblNpemluZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbml0Q2FydGFibGVzRm9ybVRlbXBsYXRlKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FydGFibGVUZW1wbGF0ZXMgPSBjb250ZXh0LlNldHRpbmcuQ2FydGFibGVUZW1wbGF0ZXM7XG4gICAgICAgIGlmIChjYXJ0YWJsZVRlbXBsYXRlcykge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNhcnRhYmxlVGVtcGxhdGVzKTtcbiAgICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXJ0YWJsZVRlbXBsYXRlc1trZXldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBjYXJ0YWJsZVRlbXBsYXRlc1trZXldID0gQmFyc2FBcGkuRXh0LmRlY29kZShjYXJ0YWJsZVRlbXBsYXRlc1trZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NhcnRhYmxlVGVtcGxhdGVzJC5uZXh0KGNhcnRhYmxlVGVtcGxhdGVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYXJ0YWJsZUNoaWxkc01vKGNvbnRleHQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2luaXRTZWFyY2hwYW5lbChjb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3NlYXJjaFBhbmVsQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoUGFuZWxDaGFuZ2VkKGNvbnRleHQuX3NlYXJjaFBhbmVsQ29udHJvbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2luaXRDb25kaXRpb25hbEZvcm1hdHMoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LlNldHRpbmcuVmlldz8uQ29uZGl0aW9uYWxGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25kaXRpb25hbEZvcm1hdHNDaGFuZ2VkKGNvbnRleHQuU2V0dGluZy5WaWV3Py5Db25kaXRpb25hbEZvcm1hdHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0TWVudUl0ZW1zKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5tZW51SXRlbXMpIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IG5ld0l0ZW1zID0gY29udGV4dC5tZW51SXRlbXM7XG4gICAgICAgICAgICB0aGlzLl9tZW51SXRlbXNDaGFuZ2VkKGNvbnRleHQubWVudUl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdFJlcG9ydChjb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcG9ydCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkV4dHJhLlJlcG9ydCcsIFtdKTtcbiAgICAgICAgdGhpcy5fcmVwb3J0U291cmNlLm5leHQocmVwb3J0KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2luaXRNb0RhdGFMaXN0KGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkRhdGEuTW9EYXRhTGlzdCcsIFtdKTtcbiAgICAgICAgdGhpcy5fbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY2FydGFibGVDaGlsZHNNbyhjb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGlmIChjb250ZXh0LlNldHRpbmcuQ2FydGFibGVDaGlsZHNNbykge1xuICAgICAgICAgICAgdGhpcy5fY2FydGFibGVDaGlsZHNNbyQubmV4dChjb250ZXh0LlNldHRpbmcuQ2FydGFibGVDaGlsZHNNbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2luaXRQYWdpbmdTZXR0aW5nKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnaW5nU2V0dGluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkRhdGEuUGFnaW5nJywgbnVsbCk7XG4gICAgICAgIHRoaXMuX3BhZ2luZ1NldHRpbmdDaGFuZ2VkKHBhZ2luZ1NldHRpbmcpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdFRpdGxlKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHRpdGxlID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ3RpdGxlJywgbnVsbCk7XG4gICAgICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGl0bGUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5FeHRyYS5SZXBvcnQuQ2FwdGlvbicsICcnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aXRsZUNoYW5nZWQoeyB0ZXh0OiB0aXRsZSwgaW1hZ2U6ICcnIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdFJlYWRvbmx5KGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVhZG9ubHkgPSBjb250ZXh0LnJlYWRvbmx5ID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZWFkb25seUNoYW5nZWQocmVhZG9ubHkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdEVuYWJsZShjb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVuYWJsZSA9IGNvbnRleHQuZW5hYmxlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5fZW5hYmxlQ2hhbmdlZChlbmFibGUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdFZpc2libGUoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2aXNpYmxlID0gY29udGV4dC5TZXR0aW5nLklzVmlzaWJsZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDaGFuZ2VkKHZpc2libGUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdFRvb2xiYXJCdXR0b25zKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYnV0dG9ucyA9IGNvbnRleHQudGxiQnV0dG9ucztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnV0dG9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zQ2hhbmdlZChidXR0b25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdElubGluZUVkaXRNb2RlKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5saW5lRWRpdE1vZGU6IGJvb2xlYW4gPSBjb250ZXh0LlNldHRpbmc/LlZpZXc/LkF1dG9JbmxpbmVFZGl0O1xuICAgICAgICB0aGlzLl9pbmxpbmVFZGl0TW9kZVNvdXJjZS5uZXh0KGlubGluZUVkaXRNb2RlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2luaXRBbGxvd0lubGluZUVkaXQoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxvd0lubGluZUVkaXQ6IGJvb2xlYW4gPSBjb250ZXh0LlNldHRpbmc/LlZpZXc/LkFsbG93SW5saW5lRWRpdDtcbiAgICAgICAgY29uc3QgYWxsb3dFZGl0ID0gY29udGV4dC5TZXR0aW5nLkV4dHJhPy5EZWZhdWx0Q29tbWFuZHNBY2Nlc3M/LkVkaXQ7XG4gICAgICAgIHRoaXMuX2FsbG93SW5saW5lRWRpdFNvdXJjZS5uZXh0KGFsbG93SW5saW5lRWRpdCAmJiBhbGxvd0VkaXQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdE9ubHlJbmxpbmVFZGl0KGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb25seUlubGluZUVkaXQ6IGJvb2xlYW4gPSBjb250ZXh0LlNldHRpbmc/LlZpZXc/Lk9ubHlJbmxpbmVFZGl0O1xuICAgICAgICB0aGlzLl9vbmx5SW5saW5lRWRpdFNvdXJjZS5uZXh0KG9ubHlJbmxpbmVFZGl0KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2luaXRWaWV3ZXJDb250cm9sKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgdmlld2VyQ29udHJvbCA9IGNvbnRleHQudmlld2VyQ29udHJvbDtcbiAgICAgICAgaWYgKHZpZXdlckNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdlckNvbnRyb2xDaGFuZ2VkKHZpZXdlckNvbnRyb2wpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0SGlkZVRvb2xiYXIoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBoaWRlVG9vbGJhciA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkV4dHJhLlJlcG9ydC5IaWRlVG9vbGJhcicsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5faGlkZVRvb2xiYXJTb3VyY2UubmV4dChoaWRlVG9vbGJhcik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF91bnNjdWJzY3JpYmVDb250ZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ01hc2tDaGFuZ2VkJywgdGhpcy5fbWFza0NoYW5nZWQpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1ZpZXdlckNvbnRyb2xDaGFuZ2VkJywgdGhpcy5fdmlld2VyQ29udHJvbENoYW5nZWQpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1ZpZXdlck1hc2tDaGFuZ2VkJywgdGhpcy5fdmlld2VyTWFza0NoYW5nZWQpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1Zpc2libGVDaGFuZ2VkJywgdGhpcy5fdmlzaWJsZUNoYW5nZWQpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1JlYWRvbmx5Q2hhbmdlZCcsIHRoaXMuX3JlYWRvbmx5Q2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignTWVudUl0ZW1zQ2hhbmdlZCcsIHRoaXMuX21lbnVJdGVtc0NoYW5nZWQpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1RpdGxlQ2hhbmdlZCcsIHRoaXMuX3RpdGxlQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignUGFnaW5nU2V0dGluZ0NoYW5nZWQnLCB0aGlzLl9wYWdpbmdTZXR0aW5nQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignVG9vbGJhckJ1dHRvbnNDaGFuZ2VkJywgdGhpcy5fdG9vbGJhckJ1dHRvbnNDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdFbmFibGVDaGFuZ2VkJywgdGhpcy5fZW5hYmxlQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignRGVzdHJveScsIHRoaXMuX2Rlc3Ryb3lDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdFeGl0SW5saW5lRWRpdCcsIHRoaXMuX2V4aXN0SW5saW5lRWRpdCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY29uZGl0aW9uYWxGb3JtYXRzQ2hhbmdlZChjb25kaXRpb25hbEZvcm1hdHM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25kaXRpb25hbEZvcm1hdHNTb3VyY2UubmV4dChjb25kaXRpb25hbEZvcm1hdHMpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX21vRGF0YUxpc3RDaGFuZ2VkKG1vRGF0YUxpc3QpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb0RhdGFMaXN0U291cmNlLm5leHQobW9EYXRhTGlzdCk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhcnRhYmxlQ2hpbGRzTW8odGhpcy5jb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRDYXJ0YWJsZXNGb3JtVGVtcGxhdGUodGhpcy5jb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2FydGFibGVXb3JrZmxvd1NoYXJlQnV0dG9ucyhtb0RhdGFMaXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2NoZWNrQ2FydGFibGVXb3JrZmxvd1NoYXJlQnV0dG9ucyhtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWQgPSBtb0RhdGFMaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCk7XG4gICAgICAgIGNvbnN0IG1vSWRzID0gbW9EYXRhTGlzdC5tYXAoKGMpID0+IGMuSWQpO1xuICAgICAgICB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucyA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmZpbHRlcigoYykgPT4gbW9JZHMuaW5kZXhPZihjLm1vLklkKSA+IC0xKTtcbiAgICAgICAgaWYgKCFoYXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fdG9vbGJhckJ1dHRvbnNXb3JrZmxvd0J1dHRvbnMubmV4dChbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3ZpZXdlckNvbnRyb2xDaGFuZ2VkKHZpZXdlckNvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlld2VyQ29udHJvbFNvdXJjZS5uZXh0KHZpZXdlckNvbnRyb2wpO1xuICAgICAgICB0aGlzLl9pbml0Q29uZGl0aW9uYWxGb3JtYXRzKHRoaXMuY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRJbmxpbmVFZGl0TW9kZSh0aGlzLmNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0QWxsb3dJbmxpbmVFZGl0KHRoaXMuY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRPbmx5SW5saW5lRWRpdCh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfbWFza0NoYW5nZWQobWFzazogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXNrU291cmNlLm5leHQobWFzayk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF92aWV3ZXJNYXNrQ2hhbmdlZCh2aWV3ZXJNYXNrOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ZpZXdlck1hc2tTb3VyY2UubmV4dCh2aWV3ZXJNYXNrKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JlYWRvbmx5Q2hhbmdlZChyZWFkb25seTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZWFkb25seVNvdXJjZS5uZXh0KHJlYWRvbmx5KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3Zpc2libGVDaGFuZ2VkKHZpZXdlck1hc2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZVNvdXJjZS5uZXh0KHZpZXdlck1hc2spO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3JlbW92ZUV4dHJhTWVudUl0ZW1zKG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE1lbnVJdGVtW10ge1xuICAgICAgICBpZiAoIW1lbnVJdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gbWVudUl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PiBjLml0ZW1JZCAhPT0gJ0RlbGV0ZScgJiYgYy5pdGVtSWQgIT09ICdBZGRUb0xpc3QnICYmIGMuaXRlbUlkICE9PSAnUmVtb3ZlRnJvbUxpc3QnXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXdJdGVtcztcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9tZW51SXRlbXNDaGFuZ2VkKG1lbnVJdGVtczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TWVudUl0ZW1zID0gdGhpcy5fcmVtb3ZlRXh0cmFNZW51SXRlbXMobWVudUl0ZW1zKTtcbiAgICAgICAgdGhpcy5fbWVudUl0ZW1zU291cmNlLm5leHQobmV3TWVudUl0ZW1zKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3RpdGxlQ2hhbmdlZCh0aXRsZU9iajogeyB0ZXh0OiBzdHJpbmc7IGltYWdlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90aXRsZVNvdXJjZS5uZXh0KHRpdGxlT2JqKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3NlYXJjaFBhbmVsQ2hhbmdlZChzZWFyY2hQYW5lbDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlYXJjaFBhbmVsVWlTb3VyY2UubmV4dChzZWFyY2hQYW5lbCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9wYWdpbmdTZXR0aW5nQ2hhbmdlZChwYWdlaW5nU2V0dGluZzogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BhZ2luZ1NldHRpbmdTb3VyY2UubmV4dChwYWdlaW5nU2V0dGluZyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF90b29sYmFyQnV0dG9uc0NoYW5nZWQoYnV0dG9uczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG9vbGJhckJ1dHRvbnNTb3VyY2UubmV4dChidXR0b25zKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2VuYWJsZUNoYW5nZWQoZW5hYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VuYWJsZVNvdXJjZS5uZXh0KGVuYWJsZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZXN0cm95Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveVNvdXJjZS5uZXh0KCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZXhpc3RJbmxpbmVFZGl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmxpbmVFZGl0TW9kZVNvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2FkZERlZmF1bHRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoTW8gPSBKU09OLnN0cmluZ2lmeShzZWFyY2hQYW5lbD8uTW8gPz8gbmV3IE1ldGFvYmplY3REYXRhTW9kZWwoKSk7XG4gICAgICAgIGNvbnN0IFN0YW5kYXJkVGV4dCA9IHRoaXMuX2JiYlBpcGUudHJhbnNmb3JtKCdTdGFuZGFyZCcpO1xuICAgICAgICBjb25zdCBzdGFuZGFyZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgICAgJENhcHRpb246IFN0YW5kYXJkVGV4dCxcbiAgICAgICAgICAgIElzU3RhbmRhcmQ6IHRydWUsXG4gICAgICAgICAgICBJc0RlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICBJc1B1YmxpYzogdHJ1ZSxcbiAgICAgICAgICAgIElzUHJpbWFyeTogdHJ1ZSxcbiAgICAgICAgICAgIEFwcGx5QXV0b21hdGljYWxseTogdHJ1ZSxcbiAgICAgICAgICAgIEhpZGVTZWFyY2hQYW5lbDogZmFsc2UsXG4gICAgICAgICAgICBUaXRsZTogU3RhbmRhcmRUZXh0LFxuICAgICAgICAgICAgU2VhcmNoTW86IHNlYXJjaE1vLFxuICAgICAgICAgICAgUmVwb3J0SWQ6ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2RlZmF1bHRTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLm5leHQoc3RhbmRhcmRTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9sb2FkU2VhcmNoUGFuZWxTZXR0aW5ncyhyZXBvcnRJZCk6IHZvaWQge1xuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtyZXBvcnRJZF0sXG4gICAgICAgICAgICBNZXRob2Q6ICdMb2FkQWxsVXNlclNlYXJjaFBhbmVsU2V0dGluZ3MnLFxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MgPSBCYXJzYUFwaS5Cdy5fdW53cmFwKGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLm5leHQoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTZWFyY2ggPSBhbGxTZWFyY2hQYW5lbFNldHRpbmdzLmZpbmQoKGMpID0+IGMuSXNEZWZhdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkU291cmNlLm5leHQoZGVmYXVsdFNlYXJjaC5JZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRmFpbEZuOiAoKSA9PiB7fVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHJlc2V0U2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbFVpKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcbiAgICAgICAgY29uc3QgZmllbGRVaSA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpO1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0gc2VhcmNoUGFuZWxVaS5Nby5HZXRDaGFuZ2VkT2JqZWN0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZWQpLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWlbY107XG4gICAgICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5TZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgICAgICBzZWFyY2hQYW5lbFVpLk1vLlNldEZWYWx1ZShjLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuTW8uU2V0U3RhdGUoJ05ldycpO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRVaSkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGMgIT09ICckU2VhcmNoJyAmJiBmaWVsZFVpW2NdLkxheW91dENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hQYW5lbFVpLmZpcmVFdmVudCgnQ2hhbmdlRmllbGRWaXNpYmxlJywgZmllbGRVaVtjXS5TZXR0aW5nLkNvbnRyb2xGaWVsZENhcHRpb24sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9sb2FkQ2FydGFibGVUZW1wbGF0ZShrZXlPZkNhcnRhYmxlVGVtcGxhdGVzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICBsZXQgY2FydGFibGVUZW1wbGF0ZXMgPSB0aGlzLl9jYXJ0YWJsZVRlbXBsYXRlcyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKCFjYXJ0YWJsZVRlbXBsYXRlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleXM6IENhcnRhYmxlVGVtcGxhdGVLZXlbXSA9IFtdO1xuXG4gICAgICAgIGtleU9mQ2FydGFibGVUZW1wbGF0ZXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBrZXkuc3BsaXQodGhpcy5fY2FydGFibGVLZXlTZXBlcmF0b3IpO1xuICAgICAgICAgICAgaWYgKCFjYXJ0YWJsZVRlbXBsYXRlc1trZXldKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKHsgVHlwZURlZklkOiB2YWx1ZXNbMF0sIFNldHRpbmdzSWQ6IHZhbHVlc1sxXSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwaVNlcnZpY2UuR2V0Q2FydGFibGVUZW1wbGF0ZShrZXlzKS5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiBGb3JtU2V0dGluZyB9ID0ge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjKS5mb3JFYWNoKChjSWQpID0+IHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNbY0lkXSA9IEJhcnNhQXBpLkV4dC5kZWNvZGUoY1tjSWRdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FydGFibGVUZW1wbGF0ZXMgPSB7IC4uLmNhcnRhYmxlVGVtcGxhdGVzLCAuLi50ZW1wbGF0ZXMgfTtcbiAgICAgICAgICAgIHRoaXMuX2NhcnRhYmxlVGVtcGxhdGVzJC5uZXh0KGNhcnRhYmxlVGVtcGxhdGVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
796
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2bWFpbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy91bHZtYWluLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEgsT0FBTyxFQUNILFFBQVEsRUFFUixtQkFBbUIsRUFRdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0gsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNyQixNQUFNLGNBQWMsQ0FBQzs7OztBQUl0QixNQUFNLE9BQU8sY0FBYztJQW1GdkIsWUFBb0IsUUFBMEIsRUFBVSxXQUF1QjtRQUEzRCxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBbEYvRSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7UUErQmxFLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFpQyxFQUFFLENBQUMsQ0FBQztRQUM5RSx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0QsRUFBRSxDQUFDLENBQUM7UUFJcEYsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDN0Qsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUN2Qyxt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QUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0wsT0FBTztZQUNYLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBbUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzNCLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUNILGlCQUFpQixHQUFHLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBajVCUSxjQUFjO2tIQUFkLGNBQWM7OzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBCYXJzYUFwaSxcbiAgICBNZW51SXRlbSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFBhZ2luZ1NldHRpbmcsXG4gICAgU2VhcmNoUGFuZWxTZXR0aW5ncyxcbiAgICBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbCxcbiAgICBDb2x1bW5JbmZvVHlwZSxcbiAgICBGb3JtU2V0dGluZyxcbiAgICBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYsXG4gICAgQ2FydGFibGVUZW1wbGF0ZUtleVxufSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzJztcbmltcG9ydCB7XG4gICAgZXhlY3V0ZVVsdkNvbW1hbmRIYW5kbGVyLFxuICAgIGdlbnJhdGVJbmxpbmVNb0lkLFxuICAgIGdldENvbnRyb2xMaXN0LFxuICAgIEdldERlZmF1bHRNb09iamVjdEluZm8sXG4gICAgZ2V0TmV3TW9HcmlkRWRpdG9yXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCYmJUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vcGlwZXMnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVsdk1haW5TZXJ2aWNlIHtcbiAgICBtb0RhdGFMaXN0U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsW10+KFtdKTtcbiAgICBjb250ZXh0JDogU3Vic2NyaXB0aW9uO1xuICAgIHZpZXdlciQ6IE9ic2VydmFibGU8YW55PjtcbiAgICBjb25kaXRpb25hbEZvcm1hdHMkOiBPYnNlcnZhYmxlPGFueT47XG4gICAgaGlkZVRvb2xiYXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIG1hc2skOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHZpd2VyTWFzayQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgdmlzaWJsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZW5hYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICByZWFkb25seSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgbWVudUl0ZW1zJDogT2JzZXJ2YWJsZTxNZW51SXRlbVtdPjtcbiAgICB0aXRsZSQ6IE9ic2VydmFibGU8eyB0ZXh0OiBzdHJpbmc7IGltYWdlOiBzdHJpbmcgfT47XG5cbiAgICBzZWFyY2hQYW5lbFVpJDogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHBhZ2luZ1NldHRpbmckOiBPYnNlcnZhYmxlPFBhZ2luZ1NldHRpbmcgfCBudWxsPjtcbiAgICB0b29sYmFyQnV0dG9ucyQ6IE9ic2VydmFibGU8YW55W10+O1xuICAgIGRlc3Ryb3kkOiBPYnNlcnZhYmxlPHZvaWQ+O1xuICAgIG1vRGF0YUxpc3QkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT47XG4gICAgcmVwb3J0SWQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgYWxsb3dJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBpbmxpbmVFZGl0TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgb25seUlubGluZUVkaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGNvbnRleHQ6IGFueTtcbiAgICBvcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5ncyQ6IE9ic2VydmFibGU8dm9pZD47XG4gICAgb3BlblNlYXJjaEZpbGVzTWFuYWdlJDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgICBzZWFyY2hQYW5lbE1vQ2hhbmdlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyQ6IE9ic2VydmFibGU8U2VhcmNoUGFuZWxTZXR0aW5nc1tdPjtcbiAgICBsYXlvdXRJbmZvJDogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncyQ6IE9ic2VydmFibGU8U2VhcmNoUGFuZWxTZXR0aW5ncyB8IHVuZGVmaW5lZD47XG4gICAgbmV3SW5saW5lRWRpdE1vJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbD47XG4gICAgX2NhcnRhYmxlVGVtcGxhdGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBba2V5OiBzdHJpbmddOiBGb3JtU2V0dGluZyB9Pih7fSk7XG4gICAgX2NhcnRhYmxlQ2hpbGRzTW8kID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtrZXk6IHN0cmluZ106IE1ldGFvYmplY3REYXRhTW9kZWwgfSB8IG51bGw+KHt9KTtcbiAgICBzZWxlY3RlZENvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIGhpZGVVbHZQYWdlVGl0bGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgcHJpdmF0ZSBfZ3JpZEZyZWVDb2x1bW5TaXppbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfbGF5b3V0SW5mb1NvdXJjZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICBwcml2YXRlIF9jb250ZXh0U291cmNlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByaXZhdGUgX2NhblNhdmVHcmlkU2V0dGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9pbkRpYWxvZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9pc011bHRpU2VsZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX2Z1bGxzY3JlZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfY29uZGl0aW9uYWxGb3JtYXRzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByaXZhdGUgX3JlcG9ydFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgICBwcml2YXRlIF92aWV3ZXJDb250cm9sU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICAgIHByaXZhdGUgX2hpZGVUb29sYmFyU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICBwcml2YXRlIF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF9tYXNrU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfdmlld2VyTWFza1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX3Zpc2libGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHByaXZhdGUgX2VuYWJsZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcHJpdmF0ZSBfcmVhZG9ubHlTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9tZW51SXRlbXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lbnVJdGVtW10+KFtdKTtcbiAgICBwcml2YXRlIF9vbmx5SW5saW5lRWRpdFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX2lubGluZUVkaXRNb2RlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfYWxsb3dJbmxpbmVFZGl0U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfY2FydGFibGVLZXlTZXBlcmF0b3IgPSAnQCc7XG4gICAgcHJpdmF0ZSBfdGl0bGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgdGV4dDogc3RyaW5nOyBpbWFnZTogc3RyaW5nIH0+KHtcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIGltYWdlOiAnJ1xuICAgIH0pO1xuICAgIHByaXZhdGUgX2hpZGVVbHZQYWdlVGl0bGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIF9zZWFyY2hQYW5lbFVpU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gICAgcHJpdmF0ZSBfcGFnaW5nU2V0dGluZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5nU2V0dGluZyB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgX3Rvb2xiYXJCdXR0b25zU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByaXZhdGUgX3Rvb2xiYXJCdXR0b25zV29ya2Zsb3dCdXR0b25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByaXZhdGUgX2Rlc3Ryb3lTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgX2ZpcnN0QXBwbHlBdXRvbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9jb250cm9sSW5mb3NNZXRhb2JqZWN0OiBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdID0gW107XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAgIHByaXZhdGUgX2RlZmF1bHRTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlID0gbmV3IFN1YmplY3Q8U2VhcmNoUGFuZWxTZXR0aW5ncz4oKTtcbiAgICBwcml2YXRlIF9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hQYW5lbFNldHRpbmdzW10+KFtdKTtcbiAgICBwcml2YXRlIF9vcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5nc1NvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBfb3BlblNlYXJjaEZpbGVzTWFuYWdlU291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF9zZWFyY2hQYW5lbE1vQ2hhbmdlZFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX25ld0lubGluZUVkaXRNb1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF93b3JrZmxvd1NoYXJlQnV0dG9uczogU2hhcmVCdXR0b25zQ2hvaWNlRGVmW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2JiYlBpcGU6IEJiYlRyYW5zbGF0ZVBpcGUsIHByaXZhdGUgX2FwaVNlcnZpY2U6IEFwaVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0JCA9IHRoaXMuX2NvbnRleHRTb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIHRhcCgoY29udGV4dCkgPT4gKHRoaXMuY29udGV4dCA9IGNvbnRleHQpKSxcbiAgICAgICAgICAgICAgICB0YXAoKGNvbnRleHQpID0+IHRoaXMuX2luaXRpYWxpemUoY29udGV4dCkpLFxuICAgICAgICAgICAgICAgIHRhcCgoY29udGV4dCkgPT4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcihjb250ZXh0KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5uZXdJbmxpbmVFZGl0TW8kID0gdGhpcy5fbmV3SW5saW5lRWRpdE1vU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcbiAgICAgICAgdGhpcy52aWV3ZXIkID0gdGhpcy5fdmlld2VyQ29udHJvbFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uYWxGb3JtYXRzJCA9IHRoaXMuX2NvbmRpdGlvbmFsRm9ybWF0c1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMuaGlkZVRvb2xiYXIkID0gdGhpcy5faGlkZVRvb2xiYXJTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICAgICAgICB0aGlzLm1hc2skID0gdGhpcy5fbWFza1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMudml3ZXJNYXNrJCA9IHRoaXMuX3ZpZXdlck1hc2tTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICAgICAgICB0aGlzLnZpc2libGUkID0gdGhpcy5fdmlzaWJsZVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMuZW5hYmxlJCA9IHRoaXMuX2VuYWJsZVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XG4gICAgICAgIHRoaXMucmVhZG9ubHkkID0gdGhpcy5fcmVhZG9ubHlTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuICAgICAgICB0aGlzLmhpZGVVbHZQYWdlVGl0bGUkID0gdGhpcy5faGlkZVVsdlBhZ2VUaXRsZSQuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuXG4gICAgICAgIHRoaXMubWVudUl0ZW1zJCA9IHRoaXMuX21lbnVJdGVtc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgZmlsdGVyKChpdGVtcykgPT4gaXRlbXM/Lmxlbmd0aCA+IDApLFxuICAgICAgICAgICAgbWFwKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChjKSA9PiBjLml0ZW1JZCAhPT0gJ0V4cG9ydFRvRXhjZWwnICYmIGMuaXRlbUlkICE9PSAnRGVsZXRlJykpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudGl0bGUkID0gdGhpcy5fdGl0bGVTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoUGFuZWxVaSQgPSB0aGlzLl9zZWFyY2hQYW5lbFVpU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXG4gICAgICAgICAgICB0YXAoKHNlYXJjaFBhbmVsKSA9PiB0aGlzLl9hZGREZWZhdWx0U2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3BlblNlYXJjaFBhbmVsSGlkZGVuU2V0dGluZ3MkID0gdGhpcy5fb3BlblNlYXJjaFBhbmVsSGlkZGVuU2V0dGluZ3NTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucGFnaW5nU2V0dGluZyQgPSB0aGlzLl9wYWdpbmdTZXR0aW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcbiAgICAgICAgdGhpcy50b29sYmFyQnV0dG9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zV29ya2Zsb3dCdXR0b25zLmFzT2JzZXJ2YWJsZSgpLFxuICAgICAgICAgICAgdGhpcy5fdG9vbGJhckJ1dHRvbnNTb3VyY2UuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgIG1hcCgoW3dmQnRucywgY10pID0+XG4gICAgICAgICAgICAgICAgIWNcbiAgICAgICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2ZCdG5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLm1hcCgoZCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlVGV4dDogZC5Db21tYW5kPy5Jc0J1aWx0aW4gJiYgZC5pdGVtSWQgIT09ICdOZXcnID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgIWMgPyBbXSA6IFsuLi5jLmZpbHRlcigoZCkgPT4gIWQuQ29tbWFuZD8uSXNCdWlsdGluKSwgLi4uYy5maWx0ZXIoKGQpID0+IGQuQ29tbWFuZD8uSXNCdWlsdGluKV1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgYy5yZWR1Y2UoKGFjYywgYikgPT4gKGFjYy5sZW5ndGggPiAwICYmIGFjY1thY2MubGVuZ3RoIC0gMV1bJzAnXSAmJiBiWycwJ10gPyBhY2MgOiBbLi4uYWNjLCBiXSksIFtdKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkID0gdGhpcy5fZGVzdHJveVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRhcCgoKSA9PiB0aGlzLl91bnNjdWJzY3JpYmVDb250ZXh0KCkpKTtcbiAgICAgICAgdGhpcy5tb0RhdGFMaXN0JCA9IHRoaXMubW9EYXRhTGlzdFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudCQgPSB0aGlzLm1vRGF0YUxpc3QkLnBpcGUobWFwKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChkKSA9PiBkLiRJc0NoZWNrZWQpLmxlbmd0aCkpO1xuICAgICAgICB0aGlzLnJlcG9ydElkJCA9IHRoaXMuX3JlcG9ydFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKG1hcCgocmVwb3J0KSA9PiByZXBvcnQ/LklkKSk7XG5cbiAgICAgICAgdGhpcy5hbGxvd0lubGluZUVkaXQkID0gdGhpcy5fYWxsb3dJbmxpbmVFZGl0U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLmlubGluZUVkaXRNb2RlJCA9IHRoaXMuX2lubGluZUVkaXRNb2RlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLm9ubHlJbmxpbmVFZGl0JCA9IHRoaXMuX29ubHlJbmxpbmVFZGl0U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLm9wZW5TZWFyY2hGaWxlc01hbmFnZSQgPSB0aGlzLl9vcGVuU2VhcmNoRmlsZXNNYW5hZ2VTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoUGFuZWxNb0NoYW5nZWQkID0gdGhpcy5fc2VhcmNoUGFuZWxNb0NoYW5nZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICAgICAgdGhpcy5sYXlvdXRJbmZvJCA9IHRoaXMuX2xheW91dEluZm9Tb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gICAgICAgIHRoaXMuYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UuYXNPYnNlcnZhYmxlKCksXG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0U2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5hc09ic2VydmFibGUoKVxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbYWxsU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5nc10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFNldHRpbmdzICYmIGFsbFNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTZXR0aW5ncy5Jc0RlZmF1bHQgPSAhYWxsU2V0dGluZ3Muc29tZSgoYykgPT4gYy5Jc0RlZmF1bHQpO1xuICAgICAgICAgICAgICAgICAgICBhbGxTZXR0aW5ncyA9IFtkZWZhdWx0U2V0dGluZ3MsIC4uLmFsbFNldHRpbmdzXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsbFNldHRpbmdzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWQkID0gdGhpcy5fc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2VcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZCQsXG4gICAgICAgICAgICB0aGlzLmFsbFNlYXJjaFBhbmVsU2V0dGluZ3MkXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtpZCwgc2V0dGluZ3NdKSA9PiBzZXR0aW5ncz8uZmluZCgoYykgPT4gYy5JZCA9PT0gaWQpKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICk7XG4gICAgfVxuICAgIGdldCBncmlkRnJlZUNvbHVtblNpemluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmlkRnJlZUNvbHVtblNpemluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBjYW5TYXZlR3JpZFNldHRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FuU2F2ZUdyaWRTZXR0aW5nJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGluRGlhbG9nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luRGlhbG9nJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGlzTXVsdGlTZWxlY3QkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNNdWx0aVNlbGVjdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBmdWxsc2NyZWVuJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW4kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgY2FydGFibGVDaGlsZHNNbyQoKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IE1ldGFvYmplY3REYXRhTW9kZWwgfSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnRhYmxlQ2hpbGRzTW8kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgY2FydGFibGVUZW1wbGF0ZXMkKCk6IE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBGb3JtU2V0dGluZyB9IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FydGFibGVUZW1wbGF0ZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgc2VhcmNoUGFuZWxVaSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUGFuZWxVaVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgcmVwb3J0SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcG9ydFNvdXJjZS5nZXRWYWx1ZSgpPy5JZDtcbiAgICB9XG4gICAgZ2V0IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MoKTogU2VhcmNoUGFuZWxTZXR0aW5nc1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IGhpZGVTZWFyY2hwYW5lbCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlU2VhcmNoYXBhbmVsU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuICAgIGdldCBoaWRlU2VhcmNocGFuZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlU2VhcmNoYXBhbmVsU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGhpZGVVbHZUaXRsZVBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hpZGVVbHZQYWdlVGl0bGUkLm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHNldENhblNhdmVHcmlkU2V0dGluZ3ModmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhblNhdmVHcmlkU2V0dGluZyQubmV4dCh2YWwpO1xuICAgIH1cbiAgICBleGVjdXRlVG9vbGJhckJ1dHRvbihpdGVtSWQ6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBidXR0b25zID0gdGhpcy5fdG9vbGJhckJ1dHRvbnNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKCFidXR0b25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ0biA9IGJ1dHRvbnMuZmluZCgoYykgPT4gYy5pdGVtSWQgPT09IGl0ZW1JZCk7XG4gICAgICAgIGlmIChidG4pIHtcbiAgICAgICAgICAgIGV4ZWN1dGVVbHZDb21tYW5kSGFuZGxlcihidG4sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFdvcmtmbG93QnV0dG9uc0luVG9vbGJhcihlOiBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJyT2ZTaGFyZUJ1dHRvbnMgPSB0aGlzLl9jcmVhdGVXb3JrZmxvd1NoYXJlQnV0dG9ucyhlKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhcnJPZlNoYXJlQnV0dG9ucy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICBpY29uOiAnJyxcbiAgICAgICAgICAgIHRleHQ6IGMsXG4gICAgICAgICAgICBpdGVtSWQ6IGMsXG4gICAgICAgICAgICBEYXRhOiBudWxsLFxuICAgICAgICAgICAgJFNoYXJlV29ya2Zsb3dCdXR0b25zOiB0cnVlLFxuICAgICAgICAgICAgQ29tbWFuZDogeyBfaXNWaXNpYmxlOiB0cnVlLCBfaXNFbmFibGU6IHRydWUsIEpzb25FeHRyYVByb3A6IHsgRGVzaWduOiAnYXR0ZW50aW9uJyB9IH0sXG4gICAgICAgICAgICBoYW5kbGVyOiAoZCkgPT4gdGhpcy5vbldvcmtmbG93QnV0dG9uSW5Ub29sYmFyQ2xpY2soZCksXG4gICAgICAgICAgICBJc0J1aWx0aW46IGZhbHNlXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5fdG9vbGJhckJ1dHRvbnNXb3JrZmxvd0J1dHRvbnMubmV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIF9leGNsdWRlV3JhcHBlckZyb21NbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgICAgICBjb25zdCB7ICRXcmFwcGVyLCAuLi5uZXdNbyB9ID0gbW87XG4gICAgICAgIHJldHVybiBuZXdNbztcbiAgICB9XG4gICAgb25Xb3JrZmxvd0J1dHRvbkluVG9vbGJhckNsaWNrKHNoYXJlQnV0dG9uOiB7IHRleHQ6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgICAgIEJhcnNhQXBpLkJ3Lk1zZy5PS0NhbmNlbCgn2KLbjNinINin2LIg2KrYp9uM24zYryDZhdmI2KfYsdivINqp2KfYsdiq2KfYqNmEINmF2LfZhdim2YYg2YfYs9iq24zYr9ifJywgJ9iq2KfbjNuM2K8nLCAocmVzKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzID09PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaG9pY2VEZWYgPSBjLmNob2ljZUxpc3QuZmluZCgoZCkgPT4gZC5UaXRsZSA9PT0gc2hhcmVCdXR0b24udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaG9pY2VEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZm9ybVBhbmVsQ3RybHIuV29ya2Zsb3dUcmFuc2l0aW9uKGNob2ljZURlZiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFdvcmtmbG93U3RhdGUoJ0ZpbmlzaCcsIFtjLm1vXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFdvcmtmbG93U3RhdGUoXG4gICAgICAgICAgICAgICAgLy8gICAgICdQZW5kaW5nJyxcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMubWFwKChjKSA9PiBjLm1vKVxuICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAgICAgLy8gY29uc3QgcGFyYW1zID0gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgICAgIC8vICAgICBtbzogdGhpcy5fZXhjbHVkZVdyYXBwZXJGcm9tTW8oYy5tby5SZWxhdGVkTW8pLFxuICAgICAgICAgICAgICAgIC8vICAgICBjaG9pY2VEZWY6IGMuY2hvaWNlTGlzdC5maW5kKChkKSA9PiBkLlRpdGxlID09PSBzaGFyZUJ1dHRvbi50ZXh0KVxuICAgICAgICAgICAgICAgIC8vIH0pKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXRXb3JrZmxvd1N0YXRlKCdQZW5kaW5nJywgcGFyYW1zKTtcblxuICAgICAgICAgICAgICAgIC8vIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXG4gICAgICAgICAgICAgICAgLy8gICAgICdXb3JrZmxvdzk0Lk9uR3JvdXBPZkNob2ljZURlZnNTZWxlY3QnLFxuICAgICAgICAgICAgICAgIC8vICAgICB7IHBhcmFtZXRlcjogeyBEYXRhTGlzdDogcGFyYW1zIH0gfSxcbiAgICAgICAgICAgICAgICAvLyAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5fc2V0V29ya2Zsb3dTdGF0ZSgnU3VjY2VzcycsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgLy8gICAgIH0sIC8vIHN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAvLyAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5fc2V0V29ya2Zsb3dTdGF0ZSgnRmFpbGVkJywgcGFyYW1zLCAn2YXYqtin2LPZgdin2YbZhyDYudmF2YTbjNin2Kog2YbYp9mF2YjZgdmCINio2YjYry4nKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfSwgLy8gZmFpbHVyZVxuICAgICAgICAgICAgICAgIC8vICAgICBudWxsLFxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzXG4gICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90aXRsZVNvdXJjZS5uZXh0KHsgdGV4dDogdGl0bGUsIGltYWdlOiAnJyB9KTtcbiAgICB9XG4gICAgdG9nZ2xlSGlkZVNlYXJjaHBhbmVsKHZhbD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGlkZVNlYXJjaGFwYW5lbFNvdXJjZS5uZXh0KHR5cGVvZiB2YWwgIT09ICd1bmRlZmluZWQnID8gdmFsIDogIXRoaXMuX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UuZ2V0VmFsdWUoKSk7XG4gICAgfVxuICAgIHNldENvbnRleHQoY29udGV4dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb250ZXh0U291cmNlLm5leHQoY29udGV4dCk7XG4gICAgfVxuICAgIHNldEluRGlhbG9nKHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbkRpYWxvZyQubmV4dCh2YWwpO1xuICAgIH1cbiAgICBzZXRJc011bHRpU2VsZWN0KHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc011bHRpU2VsZWN0JC5uZXh0KHZhbCk7XG4gICAgfVxuICAgIHNldEZ1bGxzY3JlZW4odmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW4kLm5leHQodmFsKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOZXdJbmxpbmVNbyhpc0NoZWNrZWQ6IGJvb2xlYW4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgY29uc3QgZm9ybVNldHRpbmcgPSBjb250ZXh0LlNldHRpbmcuRm9ybVRlbXBsYXRlO1xuICAgICAgICBjb25zdCB0eXBlRGVmSWQgPSBjb250ZXh0LlNldHRpbmcuRXh0cmEuUmVwb3J0LlR5cGVEZWZJZDtcbiAgICAgICAgY29uc3QgbmV3TW8gPSBnZXROZXdNb0dyaWRFZGl0b3IoZm9ybVNldHRpbmcsIHR5cGVEZWZJZCkgYXMgTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICAgICAgbmV3TW8uSWQgPSBnZW5yYXRlSW5saW5lTW9JZCgpO1xuICAgICAgICBuZXdNby4kSXNDaGVja2VkID0gaXNDaGVja2VkO1xuICAgICAgICBuZXdNby4kTmV3SW5saW5lTW8gPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5faXNDb21wb3NpdGUoY29udGV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LlNldHRpbmcsICdFeHRyYS5SZWxhdGlvbicpO1xuICAgICAgICAgICAgbmV3TW9bcmVsYXRpb24uUGFyZW50RmROYW1lXSA9IHJlbGF0aW9uLlBhcmVudE1vSWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gIHRoaXMuX25ld0lubGluZUVkaXRNb1NvdXJjZS5uZXh0KG5ld01vKTtcbiAgICAgICAgcmV0dXJuIG5ld01vO1xuICAgIH1cbiAgICBzZXRMYXlvdXRJbmZvKGxheW91dEluZm8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGF5b3V0SW5mb1NvdXJjZS5uZXh0KGxheW91dEluZm8pO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl91bnNjdWJzY3JpYmVDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgcGFnZVNpemVDaGFuZ2VkKHBhZ2VJbmRleCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdQYWdlQ2hhbmdlJywgdGhpcy5jb250ZXh0LCBwYWdlSW5kZXgpO1xuICAgIH1cblxuICAgIHBhZ2VDaGFuZ2VkKHBhZ2VJbmRleCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHQuY3VycmVudFBhZ2UgPSBwYWdlSW5kZXg7XG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1BhZ2VDaGFuZ2UnLCB0aGlzLmNvbnRleHQsIHBhZ2VJbmRleCk7XG4gICAgfVxuXG4gICAgcmVTZXRNb0RhdGFMaXN0KG1vRGF0YUxpc3Q/OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IG1vRGF0YUxpc3QgPz8gdGhpcy5tb0RhdGFMaXN0U291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIHRoaXMuX21vRGF0YUxpc3RDaGFuZ2VkKFsuLi5uZXdNb0RhdGFMaXN0XSk7XG4gICAgICAgIGlmICghdGhpcy5jb250ZXh0LlNldHRpbmc/LklzQ2FydGFibGVSZXBvcnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlPZkNhdGFibGVUZW1wbGF0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgbmV3TW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cGRmSWQgPSBjLlJlbGF0ZWRNbz8uJFR5cGVEZWZJZDtcbiAgICAgICAgICAgIGlmICh0cGRmSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBgJHt0cGRmSWR9JHt0aGlzLl9jYXJ0YWJsZUtleVNlcGVyYXRvcn0ke2MuQ2FydGFibGVTZXR0aW5ncz8uSWQgfHwgJzAnfWA7XG4gICAgICAgICAgICAgICAga2V5T2ZDYXRhYmxlVGVtcGxhdGVzLmFkZChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGtleU9mQ2F0YWJsZVRlbXBsYXRlcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZENhcnRhYmxlVGVtcGxhdGUoa2V5T2ZDYXRhYmxlVGVtcGxhdGVzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTZWFyY2ggU2V0dGluZyBNYW5hZ2VyXG4gICAgY2xlYXJTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhbmVsVWkgPSB0aGlzLnNlYXJjaFBhbmVsVWk7XG4gICAgICAgIGlmICghc2VhcmNoUGFuZWxVaSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpZWxkVWkgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaS4kU2VhcmNoID8/IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpLtis2LPYqtis2Yg7XG4gICAgICAgIGZpZWxkVWkuZmlyZUV2ZW50KCdDbGVhckNsaWNrJyk7XG4gICAgfVxuICAgIHNlYXJjaCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFuZWxVaSA9IHRoaXMuc2VhcmNoUGFuZWxVaTtcbiAgICAgICAgaWYgKCFzZWFyY2hQYW5lbFVpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpZWxkVWkgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaS4kU2VhcmNoID8/IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpLtis2LPYqtis2Yg7XG4gICAgICAgIGlmICghZmllbGRVaSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWkpLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWlbY107XG4gICAgICAgICAgICAgICAgaWYgKGUub3JpZ2luYWxYdHlwZSA9PT0gJ1VpLlNlYXJjaENvbW1hbmRJbmZvVWknKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVWkgPSBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZFVpKSB7XG4gICAgICAgICAgICBmaWVsZFVpLmZpcmVFdmVudCgnU2VhcmNoQ2xpY2snKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFZhbHVlSW5saW5lRWRpdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZUVkaXRNb2RlU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgZ2V0QWxsb3dJbmxpbmVFZGl0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxsb3dJbmxpbmVFZGl0U291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIHNldElubGluZUVkaXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5saW5lRWRpdE1vZGVTb3VyY2UubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgb3BlblNlYXJjaEZpZWxkc0hpZGRlblNldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5nc1NvdXJjZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgb3BlblNlYXJjaEZpbGVzTWFuYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuU2VhcmNoRmlsZXNNYW5hZ2VTb3VyY2UubmV4dCgpO1xuICAgIH1cblxuICAgIHNlYXJjaFBhbmVsTW9DaGFuZ2VkKGNoYW5nZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWFyY2hQYW5lbE1vQ2hhbmdlZFNvdXJjZS5uZXh0KGNoYW5nZSk7XG4gICAgfVxuXG4gICAgbG9hZFNlYXJjaFBhbmVsU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuRm9ybVBhbmVsVWkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcG9ydElkJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIHRhcCgocmVwb3J0SWQpID0+IHRoaXMuX2xvYWRTZWFyY2hQYW5lbFNldHRpbmdzKHJlcG9ydElkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBhZGRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsU2V0dGluZ3M6IFNlYXJjaFBhbmVsU2V0dGluZ3MpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyA9IHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncy5wdXNoKHNlYXJjaFBhbmVsU2V0dGluZ3MpO1xuICAgICAgICB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLm5leHQoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyk7XG4gICAgfVxuICAgIHNhdmVTZWFyY2hQYW5lbFNldHRpbmcoc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzOiBTZWFyY2hQYW5lbFNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlYXJjaE1vID0gdGhpcy5nZXRTZWFyY2hQYW5lbE1vKCk7XG4gICAgICAgIGNvbnN0IGZpZWxkc1NldHRpbmcgPSB0aGlzLmdldFNlYXJjaFBhbmVsRmllbGRzU2V0dGluZygpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5TZWFyY2hNbyA9IEpTT04uc3RyaW5naWZ5KHNlYXJjaE1vKTtcbiAgICAgICAgc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLkZpZWxkc1NldHRpbmcgPSBKU09OLnN0cmluZ2lmeShmaWVsZHNTZXR0aW5nKTtcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2QoXG4gICAgICAgICAgICAnU2F2ZVNlYXJjaFBhbmVsU2V0dGluZ3MnLFxuICAgICAgICAgICAgbmV3IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViKHtcbiAgICAgICAgICAgICAgICBJZDogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLklkLFxuICAgICAgICAgICAgICAgICRDYXB0aW9uOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuVGl0bGUsXG4gICAgICAgICAgICAgICAgUmVwb3J0SWQ6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5SZXBvcnQ/LklkLFxuICAgICAgICAgICAgICAgIFRpdGxlOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuVGl0bGUsXG4gICAgICAgICAgICAgICAgSXNEZWZhdWx0OiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuSXNEZWZhdWx0LFxuICAgICAgICAgICAgICAgIElzUHVibGljOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuSXNQdWJsaWMsXG4gICAgICAgICAgICAgICAgQXBwbHlBdXRvbWF0aWNhbGx5OiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuQXBwbHlBdXRvbWF0aWNhbGx5LFxuICAgICAgICAgICAgICAgIEhpZGVTZWFyY2hQYW5lbDogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLkhpZGVTZWFyY2hQYW5lbCxcbiAgICAgICAgICAgICAgICBTZWFyY2hNbzogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLlNlYXJjaE1vLFxuICAgICAgICAgICAgICAgIEZpZWxkc1NldHRpbmc6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5GaWVsZHNTZXR0aW5nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZWFyY2hQYW5lbE1vQ2hhbmdlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgYXBwbHlTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsU2V0dGluZ3M6IFNlYXJjaFBhbmVsU2V0dGluZ3MgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFuZWxVaSA9IHRoaXMuc2VhcmNoUGFuZWxVaTtcbiAgICAgICAgaWYgKCFzZWFyY2hQYW5lbFNldHRpbmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2ZpcnN0QXBwbHlBdXRvbWF0aWNhbGx5ICYmIHNlYXJjaFBhbmVsU2V0dGluZ3MuSXNQcmltYXJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9maXJzdEFwcGx5QXV0b21hdGljYWxseSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpcnN0QXBwbHlBdXRvbWF0aWNhbGx5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaFBhbmVsU2V0dGluZ3Moc2VhcmNoUGFuZWxVaSk7XG4gICAgICAgIGlmIChzZWFyY2hQYW5lbFNldHRpbmdzLlNlYXJjaE1vKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hNbyA9IEpTT04ucGFyc2Uoc2VhcmNoUGFuZWxTZXR0aW5ncy5TZWFyY2hNbyk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzZWFyY2hNbykuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWlbY107XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkICYmIGMuaW5kZXhPZignJCcpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5TZXRWYWx1ZShzZWFyY2hNb1tjXSk7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuTW8uU2V0RlZhbHVlKGMsIHNlYXJjaE1vW2NdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzZWFyY2hQYW5lbFNldHRpbmdzLklzUHJpbWFyeSAmJiAhc2VhcmNoUGFuZWxVaS5TZXR0aW5nLkltbWVkaWF0ZUV4ZWN1dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFBhbmVsTW9DaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VhcmNoUGFuZWxTZXR0aW5ncy5BcHBseUF1dG9tYXRpY2FsbHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gc2V0IGhpZGRlbiBmaWVsZHNcbiAgICAgICAgaWYgKHNlYXJjaFBhbmVsU2V0dGluZ3MuRmllbGRzU2V0dGluZykge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKHNlYXJjaFBhbmVsU2V0dGluZ3MuRmllbGRzU2V0dGluZyk7XG4gICAgICAgICAgICB0aGlzLnNldEFuZEFwcGx5U2VhcmNoUGFuZWxTZXR0aW5nRmllbGRzU2V0dGluZyhcbiAgICAgICAgICAgICAgICB0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzZXR0aW5ncykgOiBzZXR0aW5nc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsTW9DaGFuZ2VkKGZhbHNlKTtcbiAgICB9XG4gICAgZ2V0U2VhcmNoUGFuZWxNbygpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoUGFuZWxVaS5NbztcbiAgICB9XG4gICAgZ2V0U2VhcmNoUGFuZWxGaWVsZHNTZXR0aW5nKCk6IEFycmF5PFBhcnRpYWw8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhbmVsVWkgPSB0aGlzLnNlYXJjaFBhbmVsVWk7XG4gICAgICAgIGNvbnN0IGZpZWxkczogQXJyYXk8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+ID0gc2VhcmNoUGFuZWxVaS5TZXR0aW5nLlZpZXcuQ29udHJvbEluZm8uZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+IGMuQ29udHJvbE5hbWUgIT09ICckU2VhcmNoJyAmJiBjLkNvbnRyb2xOYW1lICE9PSAn2KzYs9iq2KzZiCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZmllbGRzU2V0dGluZyA9IGZpZWxkcy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICBOYW1lOiBjLkNvbnRyb2xOYW1lLFxuICAgICAgICAgICAgQ2FwdGlvbjogYy5Db250cm9sRmllbGRDYXB0aW9uVHJhbnNsYXRlZCxcbiAgICAgICAgICAgIEhpZGRlbjogc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWlbYy5Db250cm9sTmFtZV0uU2V0dGluZy5Jc1Zpc2libGUgPT09IGZhbHNlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgSXNNYW5kYXRvcnk6IGMuSXNNYW5kYXRvcnlcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gZmllbGRzU2V0dGluZztcbiAgICB9XG4gICAgc2V0QW5kQXBwbHlTZWFyY2hQYW5lbFNldHRpbmdGaWVsZHNTZXR0aW5nKGZpZWxkc1NldHRpbmc6IENvbHVtbkluZm9UeXBlW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFuZWxVaSA9IHRoaXMuc2VhcmNoUGFuZWxVaTtcbiAgICAgICAgZmllbGRzU2V0dGluZy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpW2MuTmFtZV07XG4gICAgICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hQYW5lbFVpLmZpcmVFdmVudCgnQ2hhbmdlRmllbGRWaXNpYmxlJywgZmllbGQuU2V0dGluZy5Db250cm9sRmllbGRDYXB0aW9uLCAhYy5IaWRkZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXBkYXRlU2VhcmNoUGFuZWxTZXR0aW5ncyhhbGxTZWFyY2hQYW5lbFNldHRpbmdzOiBTZWFyY2hQYW5lbFNldHRpbmdzW10pOiB2b2lkIHtcbiAgICAgICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyA9IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MuZmlsdGVyKChjKSA9PiAhYy5Jc1ByaW1hcnkgJiYgIWMuSXNEZWxldGVkKTtcbiAgICAgICAgdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5uZXh0KGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHJlbW92ZVNlYXJjaFBhbmVsU2V0dGluZ3Moc2VhcmNoUGFuZWxTZXR0aW5nc0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyA9IHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncy5maWx0ZXIoKGMpID0+IGMuSWQgIT09IHNlYXJjaFBhbmVsU2V0dGluZ3NJZCk7XG4gICAgICAgIHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UubmV4dChhbGxTZWFyY2hQYW5lbFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VTZWxlY3RlZFNlYXJjaFBhbmVsKHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2UubmV4dChzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZCk7XG4gICAgfVxuXG4gICAgbG9hZE1ldGFDb25kaXRpb25zQ29udHJvbEluZm9zKHR5cGVEZWZJZDogc3RyaW5nLCBmaWVsZERiTmFtZXM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPiB7XG4gICAgICAgIGNvbnN0IG1vID0gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQpO1xuICAgICAgICByZXR1cm4gb2YodGhpcy5fY29udHJvbEluZm9zTWV0YW9iamVjdCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoY29udHJvbHNJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xzSW5mby5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjb250cm9sc0luZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29udHJvbExpc3QobW8sIGZpZWxkRGJOYW1lcywgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSkgPT4gKHRoaXMuX2NvbnRyb2xJbmZvc01ldGFvYmplY3QgPSBjb250cm9sc0luZm8pKVxuICAgICAgICApO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZVdvcmtmbG93U2hhcmVCdXR0b25zKGU6IFNoYXJlQnV0dG9uc0Nob2ljZURlZik6IHN0cmluZ1tdIHtcbiAgICAgICAgbGV0IHNoYXJlQnV0dG9uczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKGUuYWRkKSB7XG4gICAgICAgICAgICB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5wdXNoKGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMgPSB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5maWx0ZXIoKGMpID0+IGMubW8uSWQgIT09IGUubW8uSWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMgPSB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5maWx0ZXIoKGMpID0+IGMubW8/LiRJc0NoZWNrZWQpO1xuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2hhcmVCdXR0b25zID0gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnNbMF0uY2hvaWNlTGlzdC5tYXAoKGQpID0+IGQuVGl0bGUpO1xuICAgICAgICAgICAgY29uc3QgdW5TaGFyZUJ1dHRvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zW2ldO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hhcmVCdXR0b25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNob2ljZUxpc3QubWFwKChkKSA9PiBkLlRpdGxlKS5pbmRleE9mKHNoYXJlQnV0dG9uc1tqXSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1blNoYXJlQnV0dG9ucy5wdXNoKHNoYXJlQnV0dG9uc1tqXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFyZUJ1dHRvbnMgPSBzaGFyZUJ1dHRvbnMuZmlsdGVyKChjKSA9PiB1blNoYXJlQnV0dG9ucy5pbmRleE9mKGMpID09PSAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNoYXJlQnV0dG9ucztcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbml0Q3JlYXRlTmV3SW5saW5lTW8oY29udGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtU2V0dGluZyA9IGNvbnRleHQuU2V0dGluZy5Gb3JtVGVtcGxhdGU7XG4gICAgICAgIGlmIChmb3JtU2V0dGluZykge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVOZXdJbmxpbmVNbyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2lzQ29tcG9zaXRlKGNvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcmVsYXRpb25UeXBlID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dC5TZXR0aW5nLCAnRXh0cmEuUmVsYXRpb24uUmVsYXRpb25UeXBlJyk7XG4gICAgICAgIHJldHVybiByZWxhdGlvblR5cGUgPT09IEJhcnNhQXBpLkNvbW1vbi5FbnVtcy5SZWxhdGlvblR5cGUuQ29tcG9zaXRpb247XG4gICAgfVxuICAgIHByb3RlY3RlZCBfYWRkRXZlbnRMaXN0ZW5lcihjb250ZXh0OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29udGV4dC5vbih7XG4gICAgICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgICAgICAgIE1hc2tDaGFuZ2VkOiB0aGlzLl9tYXNrQ2hhbmdlZCxcbiAgICAgICAgICAgIFZpZXdlck1hc2tDaGFuZ2VkOiB0aGlzLl92aWV3ZXJNYXNrQ2hhbmdlZCxcbiAgICAgICAgICAgIFZpZXdlckNvbnRyb2xDaGFuZ2VkOiB0aGlzLl92aWV3ZXJDb250cm9sQ2hhbmdlZCxcbiAgICAgICAgICAgIFZpc2libGVDaGFuZ2VkOiB0aGlzLl92aXNpYmxlQ2hhbmdlZCxcbiAgICAgICAgICAgIFJlYWRvbmx5Q2hhbmdlZDogdGhpcy5fcmVhZG9ubHlDaGFuZ2VkLFxuICAgICAgICAgICAgTWVudUl0ZW1zQ2hhbmdlZDogdGhpcy5fbWVudUl0ZW1zQ2hhbmdlZCxcbiAgICAgICAgICAgIFRpdGxlQ2hhbmdlZDogdGhpcy5fdGl0bGVDaGFuZ2VkLFxuICAgICAgICAgICAgU2VhcmNoUGFuZWxDaGFuZ2VkOiB0aGlzLl9zZWFyY2hQYW5lbENoYW5nZWQsXG4gICAgICAgICAgICBQYWdpbmdTZXR0aW5nQ2hhbmdlZDogdGhpcy5fcGFnaW5nU2V0dGluZ0NoYW5nZWQsXG4gICAgICAgICAgICBUb29sYmFyQnV0dG9uc0NoYW5nZWQ6IHRoaXMuX3Rvb2xiYXJCdXR0b25zQ2hhbmdlZCxcbiAgICAgICAgICAgIEVuYWJsZUNoYW5nZWQ6IHRoaXMuX2VuYWJsZUNoYW5nZWQsXG4gICAgICAgICAgICBEZXN0cm95OiB0aGlzLl9kZXN0cm95Q2hhbmdlZCxcbiAgICAgICAgICAgIEV4aXRJbmxpbmVFZGl0OiB0aGlzLl9leGlzdElubGluZUVkaXRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0aWFsaXplKGNvbnRleHQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0Q2FydGFibGVzRm9ybVRlbXBsYXRlKGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0Q29uZGl0aW9uYWxGb3JtYXRzKGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0QWxsb3dJbmxpbmVFZGl0KGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0T25seUlubGluZUVkaXQoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRJbmxpbmVFZGl0TW9kZShjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdFJlcG9ydChjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdFZpZXdlckNvbnRyb2woY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRIaWRlVG9vbGJhcihjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdFRvb2xiYXJCdXR0b25zKGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0VmlzaWJsZShjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdEVuYWJsZShjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdFRpdGxlKGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0UmVhZG9ubHkoY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRNb0RhdGFMaXN0KGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0UGFnaW5nU2V0dGluZyhjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdE1lbnVJdGVtcyhjb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdFNlYXJjaHBhbmVsKGNvbnRleHQpO1xuICAgICAgICB0aGlzLl9pbml0Q3JlYXRlTmV3SW5saW5lTW8oY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRHcmlkRnJlZUNvbHVtblNpemluZyhjb250ZXh0KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbml0R3JpZEZyZWVDb2x1bW5TaXppbmcoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LlNldHRpbmcuVmlldz8uR3JpZF9GcmVlQ29sdW1uU2l6aW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9ncmlkRnJlZUNvbHVtblNpemluZyQubmV4dChjb250ZXh0LlNldHRpbmcuVmlldz8uR3JpZF9GcmVlQ29sdW1uU2l6aW5nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2luaXRDYXJ0YWJsZXNGb3JtVGVtcGxhdGUoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYXJ0YWJsZVRlbXBsYXRlcyA9IGNvbnRleHQuU2V0dGluZy5DYXJ0YWJsZVRlbXBsYXRlcztcbiAgICAgICAgaWYgKGNhcnRhYmxlVGVtcGxhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY2FydGFibGVUZW1wbGF0ZXMpO1xuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhcnRhYmxlVGVtcGxhdGVzW2tleV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcnRhYmxlVGVtcGxhdGVzW2tleV0gPSBCYXJzYUFwaS5FeHQuZGVjb2RlKGNhcnRhYmxlVGVtcGxhdGVzW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2FydGFibGVUZW1wbGF0ZXMkLm5leHQoY2FydGFibGVUZW1wbGF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhcnRhYmxlQ2hpbGRzTW8oY29udGV4dCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaW5pdFNlYXJjaHBhbmVsKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fc2VhcmNoUGFuZWxDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hQYW5lbENoYW5nZWQoY29udGV4dC5fc2VhcmNoUGFuZWxDb250cm9sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdENvbmRpdGlvbmFsRm9ybWF0cyhjb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuU2V0dGluZy5WaWV3Py5Db25kaXRpb25hbEZvcm1hdHMpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbmFsRm9ybWF0c0NoYW5nZWQoY29udGV4dC5TZXR0aW5nLlZpZXc/LkNvbmRpdGlvbmFsRm9ybWF0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2luaXRNZW51SXRlbXMoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Lm1lbnVJdGVtcykge1xuICAgICAgICAgICAgLy8gY29uc3QgbmV3SXRlbXMgPSBjb250ZXh0Lm1lbnVJdGVtcztcbiAgICAgICAgICAgIHRoaXMuX21lbnVJdGVtc0NoYW5nZWQoY29udGV4dC5tZW51SXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0UmVwb3J0KGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVwb3J0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuRXh0cmEuUmVwb3J0JywgW10pO1xuICAgICAgICB0aGlzLl9yZXBvcnRTb3VyY2UubmV4dChyZXBvcnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdE1vRGF0YUxpc3QoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuRGF0YS5Nb0RhdGFMaXN0JywgW10pO1xuICAgICAgICB0aGlzLl9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9jYXJ0YWJsZUNoaWxkc01vKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbnRleHQuU2V0dGluZy5DYXJ0YWJsZUNoaWxkc01vKSB7XG4gICAgICAgICAgICB0aGlzLl9jYXJ0YWJsZUNoaWxkc01vJC5uZXh0KGNvbnRleHQuU2V0dGluZy5DYXJ0YWJsZUNoaWxkc01vKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdFBhZ2luZ1NldHRpbmcoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYWdpbmdTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuRGF0YS5QYWdpbmcnLCBudWxsKTtcbiAgICAgICAgdGhpcy5fcGFnaW5nU2V0dGluZ0NoYW5nZWQocGFnaW5nU2V0dGluZyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0VGl0bGUoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBsZXQgdGl0bGUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAndGl0bGUnLCBudWxsKTtcbiAgICAgICAgaWYgKHRpdGxlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aXRsZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkV4dHJhLlJlcG9ydC5DYXB0aW9uJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RpdGxlQ2hhbmdlZCh7IHRleHQ6IHRpdGxlLCBpbWFnZTogJycgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0UmVhZG9ubHkoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWFkb25seSA9IGNvbnRleHQucmVhZG9ubHkgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIHRoaXMuX3JlYWRvbmx5Q2hhbmdlZChyZWFkb25seSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0RW5hYmxlKGNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW5hYmxlID0gY29udGV4dC5lbmFibGUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLl9lbmFibGVDaGFuZ2VkKGVuYWJsZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0VmlzaWJsZShjb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZpc2libGUgPSBjb250ZXh0LlNldHRpbmcuSXNWaXNpYmxlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5fdmlzaWJsZUNoYW5nZWQodmlzaWJsZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0VG9vbGJhckJ1dHRvbnMoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBidXR0b25zID0gY29udGV4dC50bGJCdXR0b25zO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidXR0b25zKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9vbGJhckJ1dHRvbnNDaGFuZ2VkKGJ1dHRvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0SW5saW5lRWRpdE1vZGUoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmxpbmVFZGl0TW9kZTogYm9vbGVhbiA9IGNvbnRleHQuU2V0dGluZz8uVmlldz8uQXV0b0lubGluZUVkaXQ7XG4gICAgICAgIHRoaXMuX2lubGluZUVkaXRNb2RlU291cmNlLm5leHQoaW5saW5lRWRpdE1vZGUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdEFsbG93SW5saW5lRWRpdChjb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbG93SW5saW5lRWRpdDogYm9vbGVhbiA9IGNvbnRleHQuU2V0dGluZz8uVmlldz8uQWxsb3dJbmxpbmVFZGl0O1xuICAgICAgICBjb25zdCBhbGxvd0VkaXQgPSBjb250ZXh0LlNldHRpbmcuRXh0cmE/LkRlZmF1bHRDb21tYW5kc0FjY2Vzcz8uRWRpdDtcbiAgICAgICAgdGhpcy5fYWxsb3dJbmxpbmVFZGl0U291cmNlLm5leHQoYWxsb3dJbmxpbmVFZGl0ICYmIGFsbG93RWRpdCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbml0T25seUlubGluZUVkaXQoY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbmx5SW5saW5lRWRpdDogYm9vbGVhbiA9IGNvbnRleHQuU2V0dGluZz8uVmlldz8uT25seUlubGluZUVkaXQ7XG4gICAgICAgIHRoaXMuX29ubHlJbmxpbmVFZGl0U291cmNlLm5leHQob25seUlubGluZUVkaXQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5pdFZpZXdlckNvbnRyb2woY29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2aWV3ZXJDb250cm9sID0gY29udGV4dC52aWV3ZXJDb250cm9sO1xuICAgICAgICBpZiAodmlld2VyQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5fdmlld2VyQ29udHJvbENoYW5nZWQodmlld2VyQ29udHJvbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2luaXRIaWRlVG9vbGJhcihjb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhpZGVUb29sYmFyID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuRXh0cmEuUmVwb3J0LkhpZGVUb29sYmFyJywgZmFsc2UpO1xuICAgICAgICB0aGlzLl9oaWRlVG9vbGJhclNvdXJjZS5uZXh0KGhpZGVUb29sYmFyKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3Vuc2N1YnNjcmliZUNvbnRleHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignTWFza0NoYW5nZWQnLCB0aGlzLl9tYXNrQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignVmlld2VyQ29udHJvbENoYW5nZWQnLCB0aGlzLl92aWV3ZXJDb250cm9sQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignVmlld2VyTWFza0NoYW5nZWQnLCB0aGlzLl92aWV3ZXJNYXNrQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignVmlzaWJsZUNoYW5nZWQnLCB0aGlzLl92aXNpYmxlQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignUmVhZG9ubHlDaGFuZ2VkJywgdGhpcy5fcmVhZG9ubHlDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdNZW51SXRlbXNDaGFuZ2VkJywgdGhpcy5fbWVudUl0ZW1zQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuY29udGV4dC51bignVGl0bGVDaGFuZ2VkJywgdGhpcy5fdGl0bGVDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdQYWdpbmdTZXR0aW5nQ2hhbmdlZCcsIHRoaXMuX3BhZ2luZ1NldHRpbmdDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdUb29sYmFyQnV0dG9uc0NoYW5nZWQnLCB0aGlzLl90b29sYmFyQnV0dG9uc0NoYW5nZWQpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ0VuYWJsZUNoYW5nZWQnLCB0aGlzLl9lbmFibGVDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdEZXN0cm95JywgdGhpcy5fZGVzdHJveUNoYW5nZWQpO1xuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ0V4aXRJbmxpbmVFZGl0JywgdGhpcy5fZXhpc3RJbmxpbmVFZGl0KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9jb25kaXRpb25hbEZvcm1hdHNDaGFuZ2VkKGNvbmRpdGlvbmFsRm9ybWF0czogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbmFsRm9ybWF0c1NvdXJjZS5uZXh0KGNvbmRpdGlvbmFsRm9ybWF0cyk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vRGF0YUxpc3RTb3VyY2UubmV4dChtb0RhdGFMaXN0KTtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5fY2FydGFibGVDaGlsZHNNbyh0aGlzLmNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5faW5pdENhcnRhYmxlc0Zvcm1UZW1wbGF0ZSh0aGlzLmNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tDYXJ0YWJsZVdvcmtmbG93U2hhcmVCdXR0b25zKG1vRGF0YUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY2hlY2tDYXJ0YWJsZVdvcmtmbG93U2hhcmVCdXR0b25zKG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBoYXNTZWxlY3RlZCA9IG1vRGF0YUxpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKTtcbiAgICAgICAgY29uc3QgbW9JZHMgPSBtb0RhdGFMaXN0Lm1hcCgoYykgPT4gYy5JZCk7XG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zID0gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMuZmlsdGVyKChjKSA9PiBtb0lkcy5pbmRleE9mKGMubW8uSWQpID4gLTEpO1xuICAgICAgICBpZiAoIWhhc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl90b29sYmFyQnV0dG9uc1dvcmtmbG93QnV0dG9ucy5uZXh0KFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfdmlld2VyQ29udHJvbENoYW5nZWQodmlld2VyQ29udHJvbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3ZXJDb250cm9sU291cmNlLm5leHQodmlld2VyQ29udHJvbCk7XG4gICAgICAgIHRoaXMuX2luaXRDb25kaXRpb25hbEZvcm1hdHModGhpcy5jb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdElubGluZUVkaXRNb2RlKHRoaXMuY29udGV4dCk7XG4gICAgICAgIHRoaXMuX2luaXRBbGxvd0lubGluZUVkaXQodGhpcy5jb250ZXh0KTtcbiAgICAgICAgdGhpcy5faW5pdE9ubHlJbmxpbmVFZGl0KHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9tYXNrQ2hhbmdlZChtYXNrOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21hc2tTb3VyY2UubmV4dChtYXNrKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3ZpZXdlck1hc2tDaGFuZ2VkKHZpZXdlck1hc2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlld2VyTWFza1NvdXJjZS5uZXh0KHZpZXdlck1hc2spO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmVhZG9ubHlDaGFuZ2VkKHJlYWRvbmx5OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlYWRvbmx5U291cmNlLm5leHQocmVhZG9ubHkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfdmlzaWJsZUNoYW5nZWQodmlld2VyTWFzazogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl92aXNpYmxlU291cmNlLm5leHQodmlld2VyTWFzayk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfcmVtb3ZlRXh0cmFNZW51SXRlbXMobWVudUl0ZW1zOiBNZW51SXRlbVtdKTogTWVudUl0ZW1bXSB7XG4gICAgICAgIGlmICghbWVudUl0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBtZW51SXRlbXMuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+IGMuaXRlbUlkICE9PSAnRGVsZXRlJyAmJiBjLml0ZW1JZCAhPT0gJ0FkZFRvTGlzdCcgJiYgYy5pdGVtSWQgIT09ICdSZW1vdmVGcm9tTGlzdCdcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG5ld0l0ZW1zO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX21lbnVJdGVtc0NoYW5nZWQobWVudUl0ZW1zOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNZW51SXRlbXMgPSB0aGlzLl9yZW1vdmVFeHRyYU1lbnVJdGVtcyhtZW51SXRlbXMpO1xuICAgICAgICB0aGlzLl9tZW51SXRlbXNTb3VyY2UubmV4dChuZXdNZW51SXRlbXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfdGl0bGVDaGFuZ2VkKHRpdGxlT2JqOiB7IHRleHQ6IHN0cmluZzsgaW1hZ2U6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RpdGxlU291cmNlLm5leHQodGl0bGVPYmopO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfc2VhcmNoUGFuZWxDaGFuZ2VkKHNlYXJjaFBhbmVsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFuZWxVaVNvdXJjZS5uZXh0KHNlYXJjaFBhbmVsKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3BhZ2luZ1NldHRpbmdDaGFuZ2VkKHBhZ2VpbmdTZXR0aW5nOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcGFnaW5nU2V0dGluZ1NvdXJjZS5uZXh0KHBhZ2VpbmdTZXR0aW5nKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3Rvb2xiYXJCdXR0b25zQ2hhbmdlZChidXR0b25zOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90b29sYmFyQnV0dG9uc1NvdXJjZS5uZXh0KGJ1dHRvbnMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZW5hYmxlQ2hhbmdlZChlbmFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlU291cmNlLm5leHQoZW5hYmxlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2Rlc3Ryb3lDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95U291cmNlLm5leHQoKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9leGlzdElubGluZUVkaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lubGluZUVkaXRNb2RlU291cmNlLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfYWRkRGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3Moc2VhcmNoUGFuZWw6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWFyY2hNbyA9IEpTT04uc3RyaW5naWZ5KHNlYXJjaFBhbmVsPy5NbyA/PyBuZXcgTWV0YW9iamVjdERhdGFNb2RlbCgpKTtcbiAgICAgICAgY29uc3QgU3RhbmRhcmRUZXh0ID0gdGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oJ1N0YW5kYXJkJyk7XG4gICAgICAgIGNvbnN0IHN0YW5kYXJkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgICAkQ2FwdGlvbjogU3RhbmRhcmRUZXh0LFxuICAgICAgICAgICAgSXNTdGFuZGFyZDogdHJ1ZSxcbiAgICAgICAgICAgIElzRGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICAgIElzUHVibGljOiB0cnVlLFxuICAgICAgICAgICAgSXNQcmltYXJ5OiB0cnVlLFxuICAgICAgICAgICAgQXBwbHlBdXRvbWF0aWNhbGx5OiB0cnVlLFxuICAgICAgICAgICAgSGlkZVNlYXJjaFBhbmVsOiBmYWxzZSxcbiAgICAgICAgICAgIFRpdGxlOiBTdGFuZGFyZFRleHQsXG4gICAgICAgICAgICBTZWFyY2hNbzogc2VhcmNoTW8sXG4gICAgICAgICAgICBSZXBvcnRJZDogJydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UubmV4dChzdGFuZGFyZFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2xvYWRTZWFyY2hQYW5lbFNldHRpbmdzKHJlcG9ydElkKTogdm9pZCB7XG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xuICAgICAgICAgICAgUGFyYW1ldGVyczogW3JlcG9ydElkXSxcbiAgICAgICAgICAgIE1ldGhvZDogJ0xvYWRBbGxVc2VyU2VhcmNoUGFuZWxTZXR0aW5ncycsXG4gICAgICAgICAgICBTdWNjZXNzRm46IChhbGxTZWFyY2hQYW5lbFNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyA9IEJhcnNhQXBpLkJ3Ll91bndyYXAoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UubmV4dChhbGxTZWFyY2hQYW5lbFNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFNlYXJjaCA9IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MuZmluZCgoYykgPT4gYy5Jc0RlZmF1bHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2UubmV4dChkZWZhdWx0U2VhcmNoLklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBGYWlsRm46ICgpID0+IHt9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsVWkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgICAgICBjb25zdCBmaWVsZFVpID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBzZWFyY2hQYW5lbFVpLk1vLkdldENoYW5nZWRPYmplY3QoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlZCkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaVtjXTtcbiAgICAgICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLlNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuTW8uU2V0RlZhbHVlKGMsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VhcmNoUGFuZWxVaS5Nby5TZXRTdGF0ZSgnTmV3Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZFVpKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYyAhPT0gJyRTZWFyY2gnICYmIGZpZWxkVWlbY10uTGF5b3V0Q29udHJvbCkge1xuICAgICAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuZmlyZUV2ZW50KCdDaGFuZ2VGaWVsZFZpc2libGUnLCBmaWVsZFVpW2NdLlNldHRpbmcuQ29udHJvbEZpZWxkQ2FwdGlvbiwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2xvYWRDYXJ0YWJsZVRlbXBsYXRlKGtleU9mQ2FydGFibGVUZW1wbGF0ZXM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGxldCBjYXJ0YWJsZVRlbXBsYXRlcyA9IHRoaXMuX2NhcnRhYmxlVGVtcGxhdGVzJC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIWNhcnRhYmxlVGVtcGxhdGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5czogQ2FydGFibGVUZW1wbGF0ZUtleVtdID0gW107XG5cbiAgICAgICAga2V5T2ZDYXJ0YWJsZVRlbXBsYXRlcy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGtleS5zcGxpdCh0aGlzLl9jYXJ0YWJsZUtleVNlcGVyYXRvcik7XG4gICAgICAgICAgICBpZiAoIWNhcnRhYmxlVGVtcGxhdGVzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goeyBUeXBlRGVmSWQ6IHZhbHVlc1swXSwgU2V0dGluZ3NJZDogdmFsdWVzWzFdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBpU2VydmljZS5HZXRDYXJ0YWJsZVRlbXBsYXRlKGtleXMpLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1TZXR0aW5nIH0gPSB7fTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGMpLmZvckVhY2goKGNJZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlc1tjSWRdID0gQmFyc2FBcGkuRXh0LmRlY29kZShjW2NJZF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXJ0YWJsZVRlbXBsYXRlcyA9IHsgLi4uY2FydGFibGVUZW1wbGF0ZXMsIC4uLnRlbXBsYXRlcyB9O1xuICAgICAgICAgICAgdGhpcy5fY2FydGFibGVUZW1wbGF0ZXMkLm5leHQoY2FydGFibGVUZW1wbGF0ZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -5209,6 +5209,7 @@ class UlvMainService {
|
|
|
5209
5209
|
text: '',
|
|
5210
5210
|
image: ''
|
|
5211
5211
|
});
|
|
5212
|
+
this._hideUlvPageTitle$ = new BehaviorSubject(false);
|
|
5212
5213
|
this._searchPanelUiSource = new BehaviorSubject(null);
|
|
5213
5214
|
this._pagingSettingSource = new BehaviorSubject(null);
|
|
5214
5215
|
this._toolbarButtonsSource = new BehaviorSubject([]);
|
|
@@ -5238,6 +5239,7 @@ class UlvMainService {
|
|
|
5238
5239
|
this.visible$ = this._visibleSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
5239
5240
|
this.enable$ = this._enableSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
5240
5241
|
this.readonly$ = this._readonlySource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
5242
|
+
this.hideUlvPageTitle$ = this._hideUlvPageTitle$.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
5241
5243
|
this.menuItems$ = this._menuItemsSource.asObservable().pipe(takeUntil(this._onDestroy$), filter((items) => items?.length > 0), map((items) => items.filter((c) => c.itemId !== 'ExportToExcel' && c.itemId !== 'Delete')));
|
|
5242
5244
|
this.title$ = this._titleSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
5243
5245
|
this.searchPanelUi$ = this._searchPanelUiSource.asObservable().pipe(takeUntil(this._onDestroy$), tap((searchPanel) => this._addDefaultSearchPanelSettings(searchPanel)));
|
|
@@ -5319,6 +5321,9 @@ class UlvMainService {
|
|
|
5319
5321
|
get hideSearchpanel() {
|
|
5320
5322
|
return this._hideSearchapanelSource.getValue();
|
|
5321
5323
|
}
|
|
5324
|
+
hideUlvTitlePage() {
|
|
5325
|
+
this._hideUlvPageTitle$.next(true);
|
|
5326
|
+
}
|
|
5322
5327
|
setCanSaveGridSettings(val) {
|
|
5323
5328
|
this._canSaveGridSetting$.next(val);
|
|
5324
5329
|
}
|
|
@@ -8895,7 +8900,7 @@ class ReportViewBaseComponent extends BaseComponent {
|
|
|
8895
8900
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8896
8901
|
_containerWidthChanged(_) { }
|
|
8897
8902
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ReportViewBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: FindColumnByDbNamePipe }, { token: UlvMainService }, { token: PortalService }, { token: UploadService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8898
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: ReportViewBaseComponent, selector: "bnrc-report-view-base", inputs: { contextView: "contextView", viewSetting: "viewSetting", allColumns: "allColumns", isCheckList: "isCheckList", simpleInlineEdit: "simpleInlineEdit", hideToolbar: "hideToolbar", toolbarButtons: "toolbarButtons", allChecked: "allChecked", moDataList: "moDataList", UlvMainCtrlr: "UlvMainCtrlr", access: "access", groupby: "groupby", selectedCount: "selectedCount", conditionalFormats: "conditionalFormats", parentHeight: "parentHeight", deviceName: "deviceName", deviceSize: "deviceSize", contextMenuItems: "contextMenuItems", columns: "columns", allowInlineEdit: "allowInlineEdit", secondaryColumns: "secondaryColumns", popin: "popin", customFieldInfo: "customFieldInfo", hasSummary: "hasSummary", hasSelected: "hasSelected", hideIcon: "hideIcon", columnsCount: "columnsCount", hideOpenIcon: "hideOpenIcon", openOnClick: "openOnClick", typeDefId: "typeDefId", reportId: "reportId", listEditViewId: "listEditViewId", typeViewId: "typeViewId", extraRelation: "extraRelation", relationList: "relationList", disableResponsive: "disableResponsive", rowItem: "rowItem", mobileOrTablet: "mobileOrTablet", inDialog: "inDialog", isMultiSelect: "isMultiSelect", fullscreen: "fullscreen", hideSearchpanel: "hideSearchpanel", newInlineEditMo: "newInlineEditMo", selectedMo: "selectedMo", inlineEditMode: "inlineEditMode", onlyInlineEdit: "onlyInlineEdit", rowHoverable: "rowHoverable", groupSummary: "groupSummary", tlbButtons: "tlbButtons", formSetting: "formSetting", disableOverflowContextMenu: "disableOverflowContextMenu", rowActivable: "rowActivable", contentDensity: "contentDensity", rtl: "rtl", showOkCancelButtons: "showOkCancelButtons", title: "title", hasInlineDeleteButton: "hasInlineDeleteButton", hasInlineEditButton: "hasInlineEditButton", contextSetting: "contextSetting", gridFreeColumnSizing: "gridFreeColumnSizing", navigationArrow: "navigationArrow", cartableTemplates: "cartableTemplates", cartableChildsMo: "cartableChildsMo", pagingSetting: "pagingSetting", containerWidth: "containerWidth" }, outputs: { columnSummary: "columnSummary", escapeKey: "escapeKey", resetWorkflowState: "resetWorkflowState", deselectAll: "deselectAll", editFormPanelCancel: "editFormPanelCancel", editFormPanelSave: "editFormPanelSave", selectNextInlineRecord: "selectNextInlineRecord", editFormPanelValueChange: "editFormPanelValueChange", ulvCommandClick: "ulvCommandClick", sortAscending: "sortAscending", workflowShareButtons: "workflowShareButtons", sortDescending: "sortDescending", filter: "filter", executeToolbarButton: "executeToolbarButton", resetGridSettings: "resetGridSettings", rowCheck: "rowCheck", rowClick: "rowClick", cartableFormClosed: "cartableFormClosed", createNewMo: "createNewMo", updateMo: "updateMo", expandClick: "expandClick", trackBySelectedFn: "trackBySelectedFn", allCheckbox: "allCheckbox", mandatory: "mandatory", columnResized: "columnResized", hasDetailsInRow: "hasDetailsInRow" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8903
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: ReportViewBaseComponent, selector: "bnrc-report-view-base", inputs: { contextView: "contextView", viewSetting: "viewSetting", allColumns: "allColumns", isCheckList: "isCheckList", simpleInlineEdit: "simpleInlineEdit", hideToolbar: "hideToolbar", hideTitle: "hideTitle", toolbarButtons: "toolbarButtons", allChecked: "allChecked", moDataList: "moDataList", UlvMainCtrlr: "UlvMainCtrlr", access: "access", groupby: "groupby", selectedCount: "selectedCount", conditionalFormats: "conditionalFormats", parentHeight: "parentHeight", deviceName: "deviceName", deviceSize: "deviceSize", contextMenuItems: "contextMenuItems", columns: "columns", allowInlineEdit: "allowInlineEdit", secondaryColumns: "secondaryColumns", popin: "popin", customFieldInfo: "customFieldInfo", hasSummary: "hasSummary", hasSelected: "hasSelected", hideIcon: "hideIcon", columnsCount: "columnsCount", hideOpenIcon: "hideOpenIcon", openOnClick: "openOnClick", typeDefId: "typeDefId", reportId: "reportId", listEditViewId: "listEditViewId", typeViewId: "typeViewId", extraRelation: "extraRelation", relationList: "relationList", disableResponsive: "disableResponsive", rowItem: "rowItem", mobileOrTablet: "mobileOrTablet", inDialog: "inDialog", isMultiSelect: "isMultiSelect", fullscreen: "fullscreen", hideSearchpanel: "hideSearchpanel", newInlineEditMo: "newInlineEditMo", selectedMo: "selectedMo", inlineEditMode: "inlineEditMode", onlyInlineEdit: "onlyInlineEdit", rowHoverable: "rowHoverable", groupSummary: "groupSummary", tlbButtons: "tlbButtons", formSetting: "formSetting", disableOverflowContextMenu: "disableOverflowContextMenu", rowActivable: "rowActivable", contentDensity: "contentDensity", rtl: "rtl", showOkCancelButtons: "showOkCancelButtons", title: "title", hasInlineDeleteButton: "hasInlineDeleteButton", hasInlineEditButton: "hasInlineEditButton", contextSetting: "contextSetting", gridFreeColumnSizing: "gridFreeColumnSizing", navigationArrow: "navigationArrow", cartableTemplates: "cartableTemplates", cartableChildsMo: "cartableChildsMo", pagingSetting: "pagingSetting", containerWidth: "containerWidth" }, outputs: { columnSummary: "columnSummary", escapeKey: "escapeKey", resetWorkflowState: "resetWorkflowState", deselectAll: "deselectAll", editFormPanelCancel: "editFormPanelCancel", editFormPanelSave: "editFormPanelSave", selectNextInlineRecord: "selectNextInlineRecord", editFormPanelValueChange: "editFormPanelValueChange", ulvCommandClick: "ulvCommandClick", sortAscending: "sortAscending", workflowShareButtons: "workflowShareButtons", sortDescending: "sortDescending", filter: "filter", executeToolbarButton: "executeToolbarButton", resetGridSettings: "resetGridSettings", rowCheck: "rowCheck", rowClick: "rowClick", cartableFormClosed: "cartableFormClosed", createNewMo: "createNewMo", updateMo: "updateMo", expandClick: "expandClick", trackBySelectedFn: "trackBySelectedFn", allCheckbox: "allCheckbox", mandatory: "mandatory", columnResized: "columnResized", hasDetailsInRow: "hasDetailsInRow" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8899
8904
|
}
|
|
8900
8905
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ReportViewBaseComponent, decorators: [{
|
|
8901
8906
|
type: Component,
|
|
@@ -8918,6 +8923,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
8918
8923
|
type: Input
|
|
8919
8924
|
}], hideToolbar: [{
|
|
8920
8925
|
type: Input
|
|
8926
|
+
}], hideTitle: [{
|
|
8927
|
+
type: Input
|
|
8921
8928
|
}], toolbarButtons: [{
|
|
8922
8929
|
type: Input
|
|
8923
8930
|
}], allChecked: [{
|
|
@@ -11234,9 +11241,13 @@ class RootPortalComponent extends PageBaseComponent {
|
|
|
11234
11241
|
constructor() {
|
|
11235
11242
|
super(...arguments);
|
|
11236
11243
|
this.isRoot = true;
|
|
11244
|
+
this.inLocalMode = true;
|
|
11237
11245
|
}
|
|
11238
11246
|
ngOnInit() {
|
|
11239
11247
|
super.ngOnInit();
|
|
11248
|
+
const offlinceActive = BarsaApi.Common.TryGetValue(BarsaApi.Offline, 'Settings.IsActive', false);
|
|
11249
|
+
const offlineTrue = BarsaApi.Common.TryGetValue(BarsaApi.Offline, 'Settings.IsOffline', false);
|
|
11250
|
+
this.inLocalMode = offlinceActive && offlineTrue;
|
|
11240
11251
|
this._router.events.subscribe((event) => {
|
|
11241
11252
|
if (event instanceof NavigationStart && event instanceof RouterEvent) {
|
|
11242
11253
|
this._portalService.naviationStart(event);
|
|
@@ -11297,7 +11308,9 @@ class RootPortalComponent extends PageBaseComponent {
|
|
|
11297
11308
|
}
|
|
11298
11309
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RootPortalComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
11299
11310
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: RootPortalComponent, selector: "bnrc-root-portal", viewQueries: [{ propertyName: "sectionRef", first: true, predicate: ["sectionRef"], descendants: true }, { propertyName: "footerRefVcr", first: true, predicate: ["footerRef"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: `
|
|
11300
|
-
@if
|
|
11311
|
+
@if(inLocalMode){
|
|
11312
|
+
<div style="height:100px;background:red"></div>
|
|
11313
|
+
} @if (imageUrl) {
|
|
11301
11314
|
<div id="headerSpaceHolder" #headerSpaceHolder>
|
|
11302
11315
|
<div id="bgOuterHolder" #bgOuterHolder>
|
|
11303
11316
|
<div id="bgInnerHolder" style="height: 100vh">
|
|
@@ -11324,7 +11337,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
11324
11337
|
args: [{
|
|
11325
11338
|
selector: 'bnrc-root-portal',
|
|
11326
11339
|
template: `
|
|
11327
|
-
@if
|
|
11340
|
+
@if(inLocalMode){
|
|
11341
|
+
<div style="height:100px;background:red"></div>
|
|
11342
|
+
} @if (imageUrl) {
|
|
11328
11343
|
<div id="headerSpaceHolder" #headerSpaceHolder>
|
|
11329
11344
|
<div id="bgOuterHolder" #bgOuterHolder>
|
|
11330
11345
|
<div id="bgInnerHolder" style="height: 100vh">
|