barsa-novin-ray-core 1.0.250 → 1.0.251

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.
@@ -40,6 +40,7 @@ export class PortalService {
40
40
  this._navigationEnd$ = new BehaviorSubject(null);
41
41
  this._userPortalSettings$ = new BehaviorSubject(null);
42
42
  this._notifications$ = new BehaviorSubject([]);
43
+ this._notificationCount$ = new BehaviorSubject(0);
43
44
  this._notificationLoading$ = new BehaviorSubject(false);
44
45
  this._cssUrlSource = new BehaviorSubject(null);
45
46
  this._cssCustomUrlSource = new BehaviorSubject(null);
@@ -51,15 +52,15 @@ export class PortalService {
51
52
  get windowResize$() {
52
53
  return this._windowResize$.asObservable();
53
54
  }
55
+ get notificationCount$() {
56
+ return this._notificationCount$.asObservable();
57
+ }
54
58
  get notifications$() {
55
59
  return this._notifications$.asObservable();
56
60
  }
57
61
  get notificationLoading$() {
58
62
  return this._notificationLoading$.asObservable();
59
63
  }
60
- get notificationsCount$() {
61
- return this._notifications$.asObservable().pipe(map((items) => items.filter((c) => c.Unread).length));
62
- }
63
64
  get portalData() {
64
65
  return this.portalDataSource.getValue();
65
66
  }
@@ -90,15 +91,34 @@ export class PortalService {
90
91
  get navigationStart$() {
91
92
  return this._navigationStart$.asObservable();
92
93
  }
94
+ IncreaseNotifcationCount(count) {
95
+ const sum = this._notificationCount$.getValue() + count;
96
+ this._notificationCount$.next(sum);
97
+ }
98
+ loadNotificationCount() {
99
+ BarsaApi.Bw.RunBlMethodAsync({
100
+ Parameters: [],
101
+ Method: 'GetShellbarNotificationCount',
102
+ SuccessFn: (count) => {
103
+ this._notificationCount$.next(+count);
104
+ },
105
+ FailFn: (e) => {
106
+ this.logService.error(e);
107
+ }
108
+ });
109
+ }
93
110
  loadNotifications() {
111
+ this.notificationLoading(true);
94
112
  BarsaApi.Bw.RunBlMethodAsync({
95
113
  Parameters: [],
96
114
  Method: 'GetShellbarNotifications',
97
115
  SuccessFn: (moList) => {
98
116
  this._notifications$.next(moList);
117
+ this.notificationLoading(false);
99
118
  },
100
119
  FailFn: (e) => {
101
120
  this.logService.error(e);
121
+ this.notificationLoading(false);
102
122
  }
103
123
  });
104
124
  }
@@ -661,4 +681,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
661
681
  providedIn: 'root'
662
682
  }]
663
683
  }], ctorParameters: function () { return [{ type: i1.DynamicComponentService }, { type: i2.ApiService }, { type: i3.LogService }, { type: i4.BarsaDialogService }, { type: i0.Compiler }, { type: i5.Router }, { type: i6.Location }]; } });
664
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL3BvcnRhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMEIsVUFBVSxFQUFZLGVBQWUsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFHdEgsT0FBTyxFQUFjLGVBQWUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNGLE9BQU8sRUFDSCxHQUFHLEVBQ0gsR0FBRyxFQUNILFNBQVMsRUFDVCxRQUFRLEVBQ1IsYUFBYSxFQUNiLFFBQVEsRUFDUixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQWF4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTMUMsTUFBTSxPQUFPLGFBQWE7SUFtQ3RCLFlBQ1ksR0FBNEIsRUFDNUIsVUFBc0IsRUFDdEIsVUFBc0IsRUFDdEIsYUFBaUMsRUFDakMsUUFBa0IsRUFDbEIsT0FBZSxFQUNmLFNBQW1CO1FBTm5CLFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7UUFDakMsYUFB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QUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksT0FBTyxPQUFPLEtBQUssT0FBTyxTQUFTLEVBQUU7b0JBQ3JDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3hCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNoQztRQUNELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxFQUFFO1lBQ2hDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDOzswR0FqeEJRLGFBQWE7OEdBQWIsYUFBYSxjQUZWLE1BQU07MkZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21waWxlciwgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdNb2R1bGVGYWN0b3J5LCBUeXBlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgb2YsIGZyb20sIGZvcmtKb2luLCBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIHRhcCxcclxuICAgIG1hcCxcclxuICAgIGNvbmNhdE1hcCxcclxuICAgIGZpbmFsaXplLFxyXG4gICAgcHVibGlzaFJlcGxheSxcclxuICAgIHJlZkNvdW50LFxyXG4gICAgZXhoYXVzdE1hcCxcclxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gICAgc3RhcnRXaXRoLFxyXG4gICAgZGVib3VuY2VUaW1lXHJcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcclxuICAgIExvZ2luUmVzdWx0LFxyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIE1vRm9yUmVwb3J0TW9kZWwsXHJcbiAgICBQYWdlRGF0YU1vZGVsLFxyXG4gICAgUG9ydGFsRGF0YU1vZGVsLFxyXG4gICAgUmVwb3J0TW9kZWxcclxufSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXJzYUFwaSB9IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMvYmFyc2EtYXBpJztcclxuaW1wb3J0IHsgQmFyc2FEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9iYXJzYS1kaWFsb2cuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBnZXRDb21wb25lbnREZWZpbmVkLCBnZXREZXZpY2VJc01vYmlsZSwgZ2V0RGV2aWNlSXNUYWJsZXQsIGdldEhlYWRlclZhbHVlLCBnZXRVbmlxdWVJZCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IFBvcnRhbFBhZ2VSZXNvbHZlciB9IGZyb20gJy4uL3Jlc29sdmVycy9wb3J0YWwtcGFnZS5yZXNvbHZlcic7XHJcbmltcG9ydCB7IEF1dGhHdWFyZCB9IGZyb20gJy4uL2F1dGgtZ3VhcmQnO1xyXG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuZGVjbGFyZSBsZXQgQWpheEhlbHBlcjogYW55O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3J0YWxTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBvZmZzZXRUb3AgPSAwO1xyXG5cclxuICAgIGxvZ2luTG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgbG9hZGVkID0gZmFsc2U7XHJcbiAgICBmb3JtUGFuZWxzOiBhbnkgPSB7fTtcclxuICAgIGNhY2hlZEltYWdlczogYW55ID0ge307XHJcbiAgICBkYXRlVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIGRlZmF1bHRSb3V0ZTogc3RyaW5nO1xyXG4gICAgY2FjaGVkUGFnZURhdGE6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxQYWdlRGF0YU1vZGVsPiB9ID0ge307XHJcbiAgICBwYWdlczogUGFnZURhdGFNb2RlbFtdID0gW107XHJcbiAgICBydGxTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNSdGwpO1xyXG4gICAgdXNlckxvZ2dlZEluJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGRpY3Rpb25hcnk6IHsgW2tleTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PGFueT4gfSA9IHt9O1xyXG4gICAgcG9ydGFsRGF0YVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UG9ydGFsRGF0YU1vZGVsIHwgbnVsbD4obnVsbCk7XHJcbiAgICBwb3J0YWxTZXR0aW5ncyQ6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbD47XHJcbiAgICBwb3J0YWxEYXRhJDogT2JzZXJ2YWJsZTxQb3J0YWxEYXRhTW9kZWwgfCBudWxsPjtcclxuICAgIGRldmljZVNpemUkOiBPYnNlcnZhYmxlPEFiYnJldmF0aW9uRGV2aWNlU2l6ZT47XHJcbiAgICBydGwkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgZGlyVmFsdWUkOiBPYnNlcnZhYmxlPCdydGwnIHwgJ2x0cic+O1xyXG4gICAgcm91dGVJbml0aWFsaXplZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBfaXNBbm9udW1vdXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgcHJpdmF0ZSBfZGV2aWNlU2l6ZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWJicmV2YXRpb25EZXZpY2VTaXplPih0aGlzLl9pbml0YWxpemVEZXZpY2VTaXplKCkpO1xyXG4gICAgcHJpdmF0ZSBfbG9nZ2VkSW5Tb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgcm91dGVJbml0aWFsaXplZFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBkYXRlVGV4dFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uU3RhcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOYXZpZ2F0aW9uU3RhcnQgfCBudWxsPihudWxsKTtcclxuICAgIHByaXZhdGUgX25hdmlnYXRpb25FbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOYXZpZ2F0aW9uRW5kIHwgbnVsbD4obnVsbCk7XHJcbiAgICBwcml2YXRlIF91c2VyUG9ydGFsU2V0dGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbD4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbFtdPihbXSk7XHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25Mb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfY3NzVXJsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlUmVzb3VyY2VVcmwgfCBudWxsPihudWxsKTtcclxuICAgIHByaXZhdGUgX2Nzc0N1c3RvbVVybFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9zZWFyY2hUZXJtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgICBwcml2YXRlIF93aW5kb3dSZXNpemUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGNtOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogQmFyc2FEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29tcGlsZXI6IENvbXBpbGVyLFxyXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvblxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgdGhpcy5faXNBbm9udW1vdXNTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzQW5vbnltb3VzKTtcclxuICAgIH1cclxuICAgIGdldCB3aW5kb3dSZXNpemUkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dSZXNpemUkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IG5vdGlmaWNhdGlvbnMkKCk6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbnMkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IG5vdGlmaWNhdGlvbkxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25Mb2FkaW5nJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBub3RpZmljYXRpb25zQ291bnQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbnMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChjKSA9PiBjLlVucmVhZCkubGVuZ3RoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBvcnRhbERhdGEoKTogUG9ydGFsRGF0YU1vZGVsIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9ydGFsRGF0YVNvdXJjZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNlYXJjaFRlcm0kKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFRlcm0kLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNzc1VybCQoKTogT2JzZXJ2YWJsZTxTYWZlUmVzb3VyY2VVcmwgfCBudWxsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nzc1VybFNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBjc3NDdXN0b21VcmwkKCk6IE9ic2VydmFibGU8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jc3NDdXN0b21VcmxTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgdXNlclBvcnRhbFNldHRpbmdzKCk6IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZXJQb3J0YWxTZXR0aW5ncyQoKTogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGRldmljZVNpemUoKTogQWJicmV2YXRpb25EZXZpY2VTaXplIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlU2l6ZVNvdXJjZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlzQW5vbnltb3VzJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNBbm9udW1vdXNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgbmF2aWdhdGlvbkVuZCQoKTogT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kIHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uRW5kJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBuYXZpZ2F0aW9uU3RhcnQkKCk6IE9ic2VydmFibGU8TmF2aWdhdGlvblN0YXJ0IHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uU3RhcnQkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWROb3RpZmljYXRpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbXSxcclxuICAgICAgICAgICAgTWV0aG9kOiAnR2V0U2hlbGxiYXJOb3RpZmljYXRpb25zJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAobW9MaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQobW9MaXN0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBub3RpZmljYXRpb25Mb2FkaW5nKGxvYWRpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25Mb2FkaW5nJC5uZXh0KGxvYWRpbmcpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRNbyhpZDogc3RyaW5nLCB0eXBlZGVmSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5sb2FkUG9ydGFsUGFnZURhdGEoaWQsIHR5cGVkZWZJZCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcmVtb3ZlTm90aWZpY2F0aW9uKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25Mb2FkaW5nKHRydWUpO1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbbW8uSWRdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdSZW1vdmVTaGVsbGJhck5vdGlmaWNhdGlvbicsXHJcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9MaXN0ID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKS5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQobW9MaXN0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNldFNlYXJjaFRlcm0odGVybTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoVGVybSQubmV4dCh0ZXJtKTtcclxuICAgIH1cclxuICAgIHdpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl93aW5kb3dSZXNpemUkLm5leHQoKTtcclxuICAgIH1cclxuICAgIG5hdmlhdGlvbkVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25FbmQkLm5leHQoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgbmF2aWF0aW9uU3RhcnQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25TdGFydCQubmV4dChldmVudCk7XHJcbiAgICB9XHJcbiAgICBzZXRVc2VyUG9ydGFsU2V0dGluZ3ModXNlclBvcnRhbFNldHRpbmdzOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5uZXh0KHVzZXJQb3J0YWxTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICBzZXRUaGVtZSh0aGVtZVVybDogU2FmZVJlc291cmNlVXJsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY3NzVXJsU291cmNlLm5leHQodGhlbWVVcmwpO1xyXG4gICAgICAgIHRoaXMuX2Nzc0N1c3RvbVVybFNvdXJjZS5uZXh0KHRoZW1lVXJsKTtcclxuICAgIH1cclxuICAgIHNldERhdGEoa2V5LCBkYXRhKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25hcnlba2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5W2tleV0ubmV4dChkYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRWYWwgPSB0aGlzLmRpY3Rpb25hcnlba2V5XS5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAob2xkVmFsICE9PSBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XS5uZXh0KGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0RGF0YShrZXksIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25hcnlba2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlba2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihkZWZhdWx0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5W2tleV0uYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXREYXRhU3luYzxUPihrZXksIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IFQgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGljdGlvbmFyeVtrZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRpY3Rpb25hcnlba2V5XS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlRm9yUmVwb3J0KG5hdkl0ZW0pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5VbC5VbHZNYWluQ3RybHIuQ3JlYXRlRm9yUmVwb3J0KHt9LCBuYXZJdGVtLCAoZXJyLCByZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyVWx2TWFpblVpKFxyXG4gICAgICAgIG5hdkl0ZW0sXHJcbiAgICAgICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBpc1JlcG9ydFBhZ2U6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGb3JSZXBvcnQobmF2SXRlbSkucGlwZShcclxuICAgICAgICAgICAgZXhoYXVzdE1hcCgodWx2TWFpbkN0cmxyKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVbHZNYWluVWlDb21wb25lbnQodWx2TWFpbkN0cmxyLkFkYXB0ZXIuQ29udHJvbCwgaW5qZWN0b3IsIGlzUmVwb3J0UGFnZSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICB0YXAoKHVsdk1hbmlVaUNvbXBvbmVudCkgPT4gdmNyLmluc2VydCh1bHZNYW5pVWlDb21wb25lbnQuaG9zdFZpZXcpKSxcclxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdWx2TWFpbkN0cmxyKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGdldFVsdk1haW5VaUNvbXBvbmVudChjdXN0b21VbHZNYWluVWksIGluamVjdG9yOiBJbmplY3RvciwgaXNSZXBvcnRQYWdlKTogT2JzZXJ2YWJsZTxDb21wb25lbnRSZWY8YW55Pj4ge1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbVVpU2V0dGluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGN1c3RvbVVsdk1haW5VaS5TZXR0aW5nLCAnQ3VzdG9tVWknLCBudWxsKTtcclxuICAgICAgICBjb25zdCB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH0gPSBnZXRDb21wb25lbnREZWZpbmVkKFxyXG4gICAgICAgICAgICBjdXN0b21VbHZNYWluVWksXHJcbiAgICAgICAgICAgIGN1c3RvbVVpU2V0dGluZ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50KG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yLCBpbmplY3RvcikucGlwZShcclxuICAgICAgICAgICAgbWFwKChjb21wb25lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50Lmluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaWQgPSBjdXN0b21VbHZNYWluVWkuaWQ7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5jb250ZXh0ID0gY3VzdG9tVWx2TWFpblVpO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaXNSZXBvcnRQYWdlID0gaXNSZXBvcnRQYWdlO1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tVWx2TWFpblVpLmNvbnRyb2xVaSA9IGNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRldmljZVNpemUkID0gdGhpcy5fZGV2aWNlU2l6ZVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xyXG4gICAgICAgIHRoaXMucG9ydGFsRGF0YSQgPSB0aGlzLnBvcnRhbERhdGFTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5ydGwkID0gdGhpcy5ydGxTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgICAgICB0aGlzLmRpclZhbHVlJCA9IHRoaXMucnRsJC5waXBlKG1hcCgoaXNSdGwpID0+IChpc1J0bCA/ICdydGwnIDogJ2x0cicpKSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZUluaXRpYWxpemVkJCA9IHRoaXMucm91dGVJbml0aWFsaXplZFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGVUZXh0JCA9IHRoaXMuZGF0ZVRleHRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5wb3J0YWxTZXR0aW5ncyQgPSB0aGlzLnBvcnRhbERhdGFTb3VyY2VcclxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgIC5waXBlKG1hcCgocG9ydGFsRGF0YSkgPT4gKHBvcnRhbERhdGEgPyBwb3J0YWxEYXRhLlBvcnRhbFNldHRpbmdzIDogKHt9IGFzIGFueSkpKSk7XHJcbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxyXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLFxyXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX2luaXRhbGl6ZURldmljZVNpemUoKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93aW5kb3dSZXNpemUkLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZVNpemVTb3VyY2UubmV4dChjKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VXNlckxvZ2luU3RhdHVzKEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNVc2VyTG9nZ2VkSW4pO1xyXG5cclxuICAgICAgICB0aGlzLnVzZXJMb2dnZWRJbiQgPSB0aGlzLl9sb2dnZWRJblNvdXJjZVxyXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgLnBpcGUobWFwKChpc0xvZ2dlZEluKSA9PiBpc0xvZ2dlZEluICYmIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNBbm9ueW1vdXMgPT09IGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBfc2V0RGV2aWNlU2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkZXZpY2VTaXplID0gdGhpcy5faW5pdGFsaXplRGV2aWNlU2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuX2RldmljZVNpemVTb3VyY2UubmV4dChkZXZpY2VTaXplKTtcclxuICAgIH1cclxuICAgIF9pbml0YWxpemVEZXZpY2VTaXplKCk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XHJcbiAgICAgICAgY29uc3QgX2lzbW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcclxuICAgICAgICBjb25zdCBfaXNUYWJsZXQgPSBnZXREZXZpY2VJc1RhYmxldCgpO1xyXG4gICAgICAgIGxldCBfd2luZG9XU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplID0gJ3MnO1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA2MDApIHtcclxuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAncyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDYwMCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA5OTIpIHtcclxuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAnbSc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDk5MiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMjAwKSB7XHJcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ2wnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ3hsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF9pc21vYmlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3MnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoX2lzVGFibGV0ICYmIF93aW5kb1dTaXplICE9PSAnbCcgJiYgX3dpbmRvV1NpemUgIT09ICd4bCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdtJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF93aW5kb1dTaXplO1xyXG4gICAgfVxyXG4gICAgY29tcGlsZU1vZHVsZShkZXBlbmRlbmN5OiBMaWJyYXJ5RGVwZW5lY3kpOiBPYnNlcnZhYmxlPE5nTW9kdWxlRmFjdG9yeTxhbnk+PiB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlJCA9IHRoaXMuZ2V0TW9kdWxlKGRlcGVuZGVuY3kpO1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUkLnBpcGUoXHJcbiAgICAgICAgICAgIGNvbmNhdE1hcCgobW9kdWxlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlRmFjdG9yeSA9IHRoaXMuZ2V0TmdNb2R1bGVGYWN0b3J5KG1vZHVsZXMsIGRlcGVuZGVuY3kubmFtZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YobW9kdWxlRmFjdG9yeSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGdldE1vZHVsZShkZXBlbmRlbmN5OiBMaWJyYXJ5RGVwZW5lY3kpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHsgbmFtZSwga2ViYWJOYW1lLCB1bWQsIGV4cG9ydEFzIH0gPSBkZXBlbmRlbmN5O1xyXG4gICAgICAgIGNvbnN0IGJhc2UgPSBgL2Fzc2V0cy9tb2R1bGVzLyR7a2ViYWJOYW1lfS9idW5kbGVzYDtcclxuICAgICAgICBjb25zdCBkYXRlID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5hYmM7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IGAke2Jhc2V9LyR7a2ViYWJOYW1lfS51bWQuanM/dD0ke2RhdGV9YDtcclxuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShcclxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSB0aGlzLmdldFJlZ2lzdGVyZWRNb2R1bGVzKHVtZCwgZXhwb3J0QXMsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobW9kdWxlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkSnMkKHBhdGgpLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0UmVnaXN0ZXJlZE1vZHVsZXModW1kLCBleHBvcnRBcywgbmFtZSkpKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlT25PYmplY3QocGF0aCwgaW5kZXgsIG1vZHVsZXMsIG9iamVjdCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNwbGl0ZWQgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgY29uc3QgcHJvcCA9IHNwbGl0ZWRbaW5kZXhdO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIG9iamVjdFtwcm9wXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kZXggPT09IHNwbGl0ZWQubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBvYmplY3RbcHJvcF0gPSBtb2R1bGVzO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVPbk9iamVjdChwYXRoLCBpbmRleCArIDEsIG1vZHVsZXMsIG9iamVjdFtwcm9wXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50KFxyXG4gICAgICAgIG1vZHVsZU5hbWU6IHN0cmluZyxcclxuICAgICAgICBtb2R1bGVQYXRoOiBzdHJpbmcsXHJcbiAgICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxyXG4gICAgICAgIHNlbGVjdG9yOiBzdHJpbmcsXHJcbiAgICAgICAgcGFyZW50SW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApOiBPYnNlcnZhYmxlPENvbXBvbmVudFJlZjxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGNtLmdldENvbXBvbmVudEJ5U2VsZWN0b3Ioc2VsZWN0b3IsIG1vZHVsZU5hbWUsIHBhcmVudEluamVjdG9yKTtcclxuICAgIH1cclxuICAgIGxvYWRKcyQocGF0aCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJywgcGF0aCk7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIFJlcG9ydEV4ZWN1dGUocmVwb3J0TmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxNb0ZvclJlcG9ydE1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5SZXBvcnRFeGVjdXRlUHJvbWlzZShyZXBvcnROYW1lKSk7XHJcbiAgICB9XHJcbiAgICBSZXBvcnRFeGVjdXRlUHJvbWlzZShyZXBvcnROYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1vRm9yUmVwb3J0TW9kZWw+IHtcclxuICAgICAgICBjb25zdCB1bHZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIEZsYWdzOiB7XHJcbiAgICAgICAgICAgICAgICBEYXRhOiAnVHJ1ZScsXHJcbiAgICAgICAgICAgICAgICBFeHRyYTogJ0ZhbHNlJyxcclxuICAgICAgICAgICAgICAgIFNlYXJjaDogJ0ZhbHNlJyxcclxuICAgICAgICAgICAgICAgIFZpZXc6ICdGYWxzZSdcclxuICAgICAgICAgICAgICAgIC8vIEdlbmVyYWw6XCJGYWxzZVwiLCAvLyB1bHZtYWluY3RybCBkb2VzIG5vdCBjcmFldGUgdWkgY29udHJvbCByYWlzZSBlcnJvclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBSZXBvcnROYW1lOiByZXBvcnROYW1lLFxyXG4gICAgICAgICAgICBVc2FnZUVudW06ICdTeXN0ZW1Db250YWluZXInXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8TW9Gb3JSZXBvcnRNb2RlbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5Cdy5FeGVjdXRlUmVwb3J0KFxyXG4gICAgICAgICAgICAgICAgeyB1bHZQYXJhbXMgfSxcclxuICAgICAgICAgICAgICAgIChyZXN1bHQ6IFJlcG9ydE1vZGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYWRkRm9ybVBhbmVsQ3RybHIoaWQsIGZvcm1wYW5lbEN0cmxyOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1QYW5lbHNbaWRdID0gZm9ybXBhbmVsQ3RybHI7XHJcbiAgICB9XHJcbiAgICBzZXRVc2VyTG9naW5TdGF0dXMoc3RhdHVzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbG9nZ2VkSW5Tb3VyY2UubmV4dChzdGF0dXMpO1xyXG4gICAgfVxyXG4gICAgZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGE6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXBvcnRhbERhdGEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb3J0YWxEYXRhLkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5mb3JFYWNoKChwYWdlRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZURhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZXh0cmFjdEFsbFBhZ2VzX09sZChwb3J0YWxEYXRhOiBQb3J0YWxEYXRhTW9kZWwgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFwb3J0YWxEYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XHJcbiAgICAgICAgcG9ydGFsRGF0YS5DaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgocGFnZURhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGF0aCA9IHBhZ2VEYXRhLlJvdXRlLnJlcGxhY2UoJy8nLCAnJyk7XHJcbiAgICAgICAgICAgIGNvbmZpZy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSb3V0ZShwYWdlRGF0YSwgcGF0aCwgcGFnZURhdGEuSGFzQXV0aG9yaXplLCBwYWdlRGF0YS5QYWdlTW9kdWxlPy4kQ2FwdGlvbiwgbnVsbCwgbnVsbClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2VEYXRhLklzRGVmYXVsdFJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRSb3V0ZSA9IHBhdGg7XHJcbiAgICAgICAgICAgICAgICBjb25maWcucHVzaCh0aGlzLmNyZWF0ZVJvdXRlKHBhZ2VEYXRhLCAnJywgZmFsc2UsIHBvcnRhbERhdGEuUGFnZU1vZHVsZT8uJENhcHRpb24sIHBhdGgsIG51bGwpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKHBhZ2VEYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIucmVzZXRDb25maWcoY29uZmlnKTtcclxuICAgICAgICBpZiAodGhpcy5fbG9jYXRpb24ucGF0aCgpID09PSAnJykge1xyXG4gICAgICAgICAgICAvLyB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGVmYXVsdFJvdXRlXSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJyddKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5yb3V0ZUluaXRpYWxpemVkKCk7XHJcbiAgICB9XHJcbiAgICBzc29Mb2dpbigpOiB2b2lkIHtcclxuICAgICAgICBBamF4SGVscGVyLkFqYXhSZXF1ZXN0KFxyXG4gICAgICAgICAgICAnL2FwaS9iYXNlL3Nzb2xvZ2luJyxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ2Vycm9yIGluIHNzbyBsb2dpbi4nKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBzc29Mb2dvdXQoKTogdm9pZCB7XHJcbiAgICAgICAgQWpheEhlbHBlci5BamF4UmVxdWVzdChcclxuICAgICAgICAgICAgJy9hcGkvYmFzZS9zc29sb2dvdXQnLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnZXJyb3IgaW4gc3NvIGxvZ291dC4nKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBhZGRDaGlsZFBhZ2VzKHBhZ2VEYXRhOiBQYWdlRGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYWdlcy5wdXNoKHBhZ2VEYXRhKTtcclxuICAgICAgICBpZiAoIXBhZ2VEYXRhLkNoaWxkUGFnZUxpc3Q/Lk1vRGF0YUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhZ2VEYXRhLkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5mb3JFYWNoKChjaGlsZFBhZ2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKGNoaWxkUGFnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgY3JlYXRlUm91dGUocGFnZURhdGEsIHBhdGgsIGhhc0F1dGhvcml6ZWQsIG1vZHVsZU5hbWUsIHJlZGlyZWN0VG8sIGlzRHluYW1pY1JvdXRlKTogUm91dGUge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNyZWF0ZVJvdXRlMihcclxuICAgICAgICBwYWdlRGF0YSxcclxuICAgICAgICBwYXRoLFxyXG4gICAgICAgIGhhc0F1dGhvcml6ZWQsXHJcbiAgICAgICAgbW9kdWxlTmFtZSxcclxuICAgICAgICByZWRpcmVjdFRvOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcclxuICAgICAgICBpc0R5bmFtaWNSb3V0ZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgICApOiBSb3V0ZSB7XHJcbiAgICAgICAgbGV0IG1vZHVsZVBhdGg6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcclxuICAgICAgICBjb25zdCB1bWQgPSBtb2R1bGVOYW1lO1xyXG4gICAgICAgIG1vZHVsZVBhdGggPSBtb2R1bGVQYXRoLnN1YnN0cmluZygxLCBtb2R1bGVQYXRoLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgZHluYW1pY1JvdXRlOiBSb3V0ZSA9IHt9O1xyXG4gICAgICAgIGR5bmFtaWNSb3V0ZS5wYXRoID0gcGF0aDtcclxuICAgICAgICBkeW5hbWljUm91dGUuZGF0YSA9IHsgcGFnZURhdGEgfTtcclxuICAgICAgICBpZiAoIWlzRHluYW1pY1JvdXRlKSB7XHJcbiAgICAgICAgICAgIGR5bmFtaWNSb3V0ZS5yZXNvbHZlID0ge1xyXG4gICAgICAgICAgICAgICAgcGFnZURhdGE6IFBvcnRhbFBhZ2VSZXNvbHZlclxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGF0aCA9PT0gJycpIHtcclxuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnBhdGhNYXRjaCA9ICdmdWxsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlZGlyZWN0VG8pIHtcclxuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChoYXNBdXRob3JpemVkKSB7XHJcbiAgICAgICAgICAgICAgICBkeW5hbWljUm91dGUuY2FuQWN0aXZhdGUgPSBbQXV0aEd1YXJkXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkeW5hbWljUm91dGUubG9hZENoaWxkcmVuID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzOiBMaWJyYXJ5RGVwZW5lY3lbXSA9IEpTT04ucGFyc2UocGFnZURhdGEuRGVwZW5kZW5jaWVzKTsgLy8gZXZhbChwYWdlRGF0YS5EZXBlbmRlbmNpZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZUxpYnJhcnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbW9kdWxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBrZWJhYk5hbWU6IG1vZHVsZVBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgdW1kLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydEFzOiBbbW9kdWxlTmFtZV1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMkID0gZnJvbShkZXBlbmRlbmNpZXMpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKChkZXBlbmRlbmN5OiBMaWJyYXJ5RGVwZW5lY3kpID0+IHRoaXMuY29tcGlsZU1vZHVsZShkZXBlbmRlbmN5KSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4oW2RlcGVuZGVuY2llcyRdKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmdldE1vZHVsZShwYWdlTGlicmFyeSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcCgobW9kdWxlcykgPT4gbW9kdWxlc1ttb2R1bGVOYW1lICsgJ01vZHVsZSddKSxcclxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5yb3V0ZUluaXRpYWxpemVkKCkpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGR5bmFtaWNSb3V0ZTtcclxuICAgIH1cclxuICAgIHJvdXRlSW5pdGlhbGl6ZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZUluaXRpYWxpemVkU291cmNlLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbG9naW5CeUFub255bW91cygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLmxvZ2luTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UubG9naW5Qb3J0YWwoKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHJlc3VsdDogTG9naW5SZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZGVidWcocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQmFyc2FBcGkuTG9naW5BY3Rpb24udG9rZW4yU3RvcmFnZUtleSwgcmVzdWx0LmRhdGEuc3RoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dpbkxvYWRpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRQYWdlRGF0YSh1cmw6IHN0cmluZywgaXNSb290OiBib29sZWFuKTogT2JzZXJ2YWJsZTxQYWdlRGF0YU1vZGVsIHwgbnVsbD4ge1xyXG4gICAgICAgIGlmIChpc1Jvb3QgfHwgdXJsID09PSAnJyB8fCB1cmwgPT09ICcvJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3J0YWxEYXRhJDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpID4gLTEpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cigwLCB1cmwuaW5kZXhPZignPycpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMuZmluZFBhZ2VCeVJvdXRlKHVybCk7XHJcbiAgICAgICAgQWpheEhlbHBlci5Vc2VDYWNoZSA9ICFwYWdlRGF0YT8uSGFzQXV0aG9yaXplO1xyXG5cclxuICAgICAgICB0aGlzLmNhY2hlZFBhZ2VEYXRhW3VybF0gPSB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgICAgICAgLmxvYWRQb3J0YWxQYWdlRGF0YShwYWdlRGF0YT8uSWQsIHRoaXMucG9ydGFsRGF0YVNvdXJjZS5nZXRWYWx1ZSgpPy5DaGlsZFBhZ2VMaXN0LlR5cGVEZWZJZClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHBhZ2VNbykgPT4gcGFnZU1vLkRhdGEuTW8pLFxyXG4gICAgICAgICAgICAgICAgdGFwKChwYWdlTW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUm91dGUocGFnZU1vLCBwYWdlTW8uQ2hpbGRQYWdlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKHBhZ2VNbyk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHB1Ymxpc2hSZXBsYXkoMSksXHJcbiAgICAgICAgICAgICAgICByZWZDb3VudCgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgLy8gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5wb3J0YWxEYXRhJC5waXBlKFxyXG4gICAgICAgIC8vICAgZmlsdGVyKChwb3J0YWxEYXRhKSA9PiBwb3J0YWxEYXRhICE9IG51bGwpLFxyXG4gICAgICAgIC8vICAgbWFwKChwb3J0YWxEYXRhKSA9PiApLFxyXG4gICAgICAgIC8vICAgY29uY2F0TWFwKChwYWdlRGF0YSkgPT4ge1xyXG4gICAgICAgIC8vICAgICByZXR1cm5cclxuICAgICAgICAvLyAgIH0pLFxyXG5cclxuICAgICAgICAvLyAgIHRhcChwYWdlRGF0YT0+e30pXHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHJlc29sdmVEYXRhKHJvdXRlUGFnZURhdGEpOiBPYnNlcnZhYmxlPFBhZ2VEYXRhTW9kZWwgfCBudWxsPiB7XHJcbiAgICAgICAgLy8gY29uc3QgcGFnZURhdGEgPSB0aGlzLnBhZ2VzLmZpbmQoKGMpID0+IGMuUm91dGUgPT09IHJvdXRlUGFnZURhdGEuUm91dGUgJiYgYy5Nb2R1bGUgPT09IHJvdXRlUGFnZURhdGEuTW9kdWxlKTtcclxuICAgICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZXMuZmluZCgoYykgPT4gYy5Sb3V0ZSA9PT0gcm91dGVQYWdlRGF0YS5Sb3V0ZSk7XHJcbiAgICAgICAgaWYgKCFwYWdlRGF0YSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gcGFnZURhdGEuSWQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVtpZF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBBamF4SGVscGVyLlVzZUNhY2hlID0gIXBhZ2VEYXRhPy5IYXNBdXRob3JpemU7XHJcbiAgICAgICAgdGhpcy5jYWNoZWRQYWdlRGF0YVtpZF0gPSB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgICAgICAgLmxvYWRQb3J0YWxQYWdlRGF0YShpZCwgdGhpcy5wb3J0YWxEYXRhU291cmNlLmdldFZhbHVlKCk/LkNoaWxkUGFnZUxpc3QuVHlwZURlZklkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocGFnZU1vKSA9PiBwYWdlTW8uRGF0YS5NbyksXHJcbiAgICAgICAgICAgICAgICB0YXAoKHBhZ2VNbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRSb3V0ZShwYWdlTW8sIHBhZ2VNby5DaGlsZFBhZ2VMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZU1vKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgcHVibGlzaFJlcGxheSgxKSxcclxuICAgICAgICAgICAgICAgIHJlZkNvdW50KClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAvLyB0aGlzLmNhY2hlZFBhZ2VEYXRhW3VybF0gPSB0aGlzLnBvcnRhbERhdGEkLnBpcGUoXHJcbiAgICAgICAgLy8gICBmaWx0ZXIoKHBvcnRhbERhdGEpID0+IHBvcnRhbERhdGEgIT0gbnVsbCksXHJcbiAgICAgICAgLy8gICBtYXAoKHBvcnRhbERhdGEpID0+ICksXHJcbiAgICAgICAgLy8gICBjb25jYXRNYXAoKHBhZ2VEYXRhKSA9PiB7XHJcbiAgICAgICAgLy8gICAgIHJldHVyblxyXG4gICAgICAgIC8vICAgfSksXHJcblxyXG4gICAgICAgIC8vICAgdGFwKHBhZ2VEYXRhPT57fSlcclxuICAgICAgICAvLyApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRDaGlsZFJvdXRlKHBhZ2VNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgQ2hpbGRQYWdlTGlzdDogTW9Gb3JSZXBvcnRNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGFkZENoaWxkUm91dGVfT2xkKHBhZ2VNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgQ2hpbGRQYWdlTGlzdDogTW9Gb3JSZXBvcnRNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghQ2hpbGRQYWdlTGlzdD8uTW9EYXRhTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XHJcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHBhZ2VNby5Sb3V0ZS5yZXBsYWNlKCcvJywgJycpO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFJvdXRlID0gY29uZmlnLmZpbmQoKGMpID0+IChjLnBhdGggPSBwYXJlbnRQYXRoKSk7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IFJvdXRlW10gPSBbXTtcclxuICAgICAgICBpZiAocGFyZW50Um91dGUpIHtcclxuICAgICAgICAgICAgQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gY2hpbGQuUm91dGUucmVwbGFjZSgnLycsICcnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcm91dGUgPSB0aGlzLmNyZWF0ZVJvdXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuSGFzQXV0aG9yaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLlBhZ2VNb2R1bGU/LiRDYXB0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGRyb3V0ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcclxuXHJcbiAgICAgICAgICAgIChwYXJlbnRSb3V0ZSBhcyBhbnkpLl9sb2FkZWRDb25maWcucm91dGVzWzBdLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIucmVzZXRDb25maWcoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWRQb3J0YWxEYXRhX09sZDEoKTogT2JzZXJ2YWJsZTxQb3J0YWxEYXRhTW9kZWw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmxvYWRQb3J0YWwoQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxJZCwgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxUeXBlRGVmSWQpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCgocG9ydGFsU2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydGFsRGF0YSA9IHBvcnRhbFNldHRpbmcuRGF0YS5NbztcclxuICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gZnJvbSh0aGlzLmxvYWRTeXN0ZW0oKSkpLFxyXG4gICAgICAgICAgICB0YXAoKGFsbCkgPT4gdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbG9hZFBvcnRhbERhdGFTeW5jX09sZDIoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcG9ydGFsU2V0dGluZyA9IHRoaXMuYXBpU2VydmljZS5sb2FkUG9ydGFsU3luYyhcclxuICAgICAgICAgICAgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxJZCxcclxuICAgICAgICAgICAgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxUeXBlRGVmSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHBvcnRhbERhdGEgPSBwb3J0YWxTZXR0aW5nLkRhdGEuTW87XHJcblxyXG4gICAgICAgIHRoaXMuZXh0cmFjdEFsbFBhZ2VzKHBvcnRhbERhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLnBvcnRhbERhdGFTb3VyY2UubmV4dChwb3J0YWxEYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkU3lzdGVtKCk7XHJcbiAgICAgICAgdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRQb3J0YWxEYXRhU3luYygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwb3J0YWxTZXR0aW5nU3RyID0gQmFyc2FBcGkuQncuUnVuQmxNZXRob2QoJ0dldFBvcnRhbCcsIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuUG9ydGFsSWQpO1xyXG4gICAgICAgIGNvbnN0IHBvcnRhbFNldHRpbmcgPSBCYXJzYUFwaS5FeHQuZGVjb2RlKHBvcnRhbFNldHRpbmdTdHIpO1xyXG4gICAgICAgIGNvbnN0IHBvcnRhbERhdGEgPSBwb3J0YWxTZXR0aW5nO1xyXG5cclxuICAgICAgICB0aGlzLmV4dHJhY3RBbGxQYWdlcyhwb3J0YWxEYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0ZVRleHRTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkRhdGVUZXh0KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkVXNlclBvcnRhbFNldHRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdHZXRVc2VyUG9ydGFsU2V0dGluZ3MnLFxyXG4gICAgICAgICAgICBTdWNjZXNzRm46ICh1c2VyUG9ydGFsU2V0dGluZzogTWV0YW9iamVjdERhdGFNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5uZXh0KHVzZXJQb3J0YWxTZXR0aW5nKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgU2hvd0Zvcm1QYW5lbENvbnRyb2woXHJcbiAgICAgICAgZm9ybXBhbmVsQ3RybHI6IGFueSxcclxuICAgICAgICByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgZGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT4sXHJcbiAgICAgICAgaXNQYWdlOiBib29sZWFuLFxyXG4gICAgICAgIGlzUmVsb2FkOiBib29sZWFuID0gZmFsc2VcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZm9ybXBhbmVsQ3RybHIpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdmb3JtIHBhbmVsIGNvbnRyb2xlciBpcyB1bmRlZmluZWQhJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW8gPSBmb3JtcGFuZWxDdHJsci5NbztcclxuICAgICAgICBjb25zdCBoZWFkZXJMYXlvdXQgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShmb3JtcGFuZWxDdHJsciwgJ1NldHRpbmcuVmlldy5IZWFkZXJMYXlvdXQnLCBudWxsKTtcclxuICAgICAgICBsZXQgaXNNb2RhbCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGZvcm1wYW5lbEN0cmxyLCAnU2V0dGluZy5WaWV3LkV4dHJhSnNvblByb3AuTW9kYWwnLCBmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgbW9kYWxTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXHJcbiAgICAgICAgICAgIGZvcm1wYW5lbEN0cmxyLFxyXG4gICAgICAgICAgICAnU2V0dGluZy5WaWV3LkN1c3RvbVVpLlBhcmFtZXRlcnMuTW9kYWxTZXR0aW5nJyxcclxuICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG1vZGFsU2V0dGluZykge1xyXG4gICAgICAgICAgICBpc01vZGFsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9ybXBhbmVsQ3RybHIuU2V0dGluZy5Jc01vZGFsID0gaXNNb2RhbDtcclxuICAgICAgICBmb3JtcGFuZWxDdHJsci5Jc01vZGFsID0gaXNNb2RhbDtcclxuICAgICAgICBjb25zdCBicmVhZENydW1iID0gZ2V0SGVhZGVyVmFsdWUoaGVhZGVyTGF5b3V0Py5CcmVhZENydW1iKTtcclxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcclxuICAgICAgICAgICAgaWQ6IG1vLiRTdGF0ZSA9PT0gJ05ldycgPyAnMCcgOiBtby5JZCxcclxuICAgICAgICAgICAgdHlpZDogbW8uJFR5cGVEZWZJZCxcclxuICAgICAgICAgICAgdHljcDogbW8uJENhcHRpb24gPyBtby4kQ2FwdGlvbiA6IG51bGwsXHJcbiAgICAgICAgICAgIHJlcGlkOiBtby4kUmVwb3J0SWQsXHJcbiAgICAgICAgICAgIHZpZDogZm9ybXBhbmVsQ3RybHI/LlNldHRpbmc/LlZpZXc/LlR5cGVWaWV3SWQsXHJcbiAgICAgICAgICAgIGJjOiBicmVhZENydW1iID8gYnJlYWRDcnVtYiA6IG1vLiRTdGF0ZSA9PT0gJ05ldycgPyBtby4kVHlwZURlZk5hbWUgOiBtby4kQ2FwdGlvblxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgaWQgPSBnZXRVbmlxdWVJZCg0KTtcclxuICAgICAgICB0aGlzLmFkZEZvcm1QYW5lbEN0cmxyKGlkLCBmb3JtcGFuZWxDdHJscik7XHJcbiAgICAgICAgaWYgKGlzTW9kYWwpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dGb3JtKGRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgLi4ucXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBmb3JtcGFuZWxDdHJsclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHsgZm9ybVBhbmVsQ3RybHJJZDogaWQgfTtcclxuICAgICAgICAgICAgaWYgKGlzUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvcm0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogWydzaG93JywgeyAuLi5xdWVyeVBhcmFtcywgZm9ybVBhbmVsQ3RybHJJZDogaWQsIGlzRmlyc3Q6IHRydWUgfV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogaXNSZWxvYWRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BvcHVwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46IFsnc2hvdycsIHsgLi4ucXVlcnlQYXJhbXMsIGZvcm1QYW5lbEN0cmxySWQ6IGlkIH1dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGlzUmVsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkU3lzdGVtKGlkOiBudW1iZXIgPSAwKTogUHJvbWlzZTxQb3J0YWxEYXRhTW9kZWw+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLl9sb2FkU3lzdGVtKFxyXG4gICAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZmluZFBhZ2VCeVJvdXRlKHVybDogc3RyaW5nKTogUGFnZURhdGFNb2RlbCB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGZpbmRlZFBhZ2UgPSB0aGlzLnBhZ2VzLmZpbmQoKGMpID0+IGMuUm91dGUgPT09IHVybCk7XHJcbiAgICAgICAgcmV0dXJuIGZpbmRlZFBhZ2UgfHwgbnVsbDtcclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0TmdNb2R1bGVGYWN0b3J5KG1vZHVsZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIG1vZHVsZU5hbWU6IHN0cmluZyk6IE5nTW9kdWxlRmFjdG9yeTxhbnk+IHtcclxuICAgICAgICBjb25zdCBtb2R1bGVDbGFzcyA9IG1vZHVsZXNbbW9kdWxlTmFtZSArICdNb2R1bGUnXTtcclxuICAgICAgICBsZXQgbW9kdWxlRmFjdG9yeTogTmdNb2R1bGVGYWN0b3J5PGFueT47XHJcbiAgICAgICAgaWYgKG1vZHVsZUNsYXNzIGluc3RhbmNlb2YgTmdNb2R1bGVGYWN0b3J5KSB7XHJcbiAgICAgICAgICAgIG1vZHVsZUZhY3RvcnkgPSBtb2R1bGVDbGFzcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb21waWxlZCA9IHRoaXMuY29tcGlsZXIuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNTeW5jKG1vZHVsZUNsYXNzKTtcclxuICAgICAgICAgICAgbW9kdWxlRmFjdG9yeSA9IGNvbXBpbGVkLm5nTW9kdWxlRmFjdG9yeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZUZhY3Rvcnk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSZWdpc3RlcmVkTW9kdWxlcyh1bWQ6IHN0cmluZywgZXhwb3J0QXM6IHN0cmluZ1tdLCBtb2R1bGVOYW1lOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgICAgICBsZXQgbW9kdWxlcztcclxuICAgICAgICBpZiAodW1kICE9PSAnJykge1xyXG4gICAgICAgICAgICBtb2R1bGVzID0gd2luZG93O1xyXG4gICAgICAgICAgICB1bWQuc3BsaXQoJy4nKS5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZXMgIT09IHR5cGVvZiB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb2R1bGVzID0gbW9kdWxlc1tjXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbW9kdWxlcyA9IHdpbmRvd1ttb2R1bGVOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4cG9ydEFzLmxlbmd0aCA+IDAgJiYgbW9kdWxlcykge1xyXG4gICAgICAgICAgICBleHBvcnRBcy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlT25PYmplY3QoYywgMCwgbW9kdWxlcywgd2luZG93KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb2R1bGVzO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgTGlicmFyeURlcGVuZWN5IHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGtlYmFiTmFtZTogc3RyaW5nO1xyXG4gICAgdW1kOiBzdHJpbmc7XHJcbiAgICBleHBvcnRBczogc3RyaW5nW107XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBCcmVhZENydW1iSW5mbyB7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgdXJsOiBzdHJpbmc7XHJcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGU7XHJcbn1cclxuIl19
684
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL3BvcnRhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMEIsVUFBVSxFQUFZLGVBQWUsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFHdEgsT0FBTyxFQUFjLGVBQWUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNGLE9BQU8sRUFDSCxHQUFHLEVBQ0gsR0FBRyxFQUNILFNBQVMsRUFDVCxRQUFRLEVBQ1IsYUFBYSxFQUNiLFFBQVEsRUFDUixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQWF4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTMUMsTUFBTSxPQUFPLGFBQWE7SUFvQ3RCLFlBQ1ksR0FBNEIsRUFDNUIsVUFBc0IsRUFDdEIsVUFBc0IsRUFDdEIsYUFBaUMsRUFDakMsUUFBa0IsRUFDbEIsT0FBZSxFQUNmLFNBQW1CO1FBTm5CLFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7UUFDakMsYUFB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LENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7OzBHQXJ5QlEsYUFBYTs4R0FBYixhQUFhLGNBRlYsTUFBTTsyRkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVyLCBDb21wb25lbnRSZWYsIEluamVjdGFibGUsIEluamVjdG9yLCBOZ01vZHVsZUZhY3RvcnksIFR5cGUsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgZnJvbSwgZm9ya0pvaW4sIGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICB0YXAsXG4gICAgbWFwLFxuICAgIGNvbmNhdE1hcCxcbiAgICBmaW5hbGl6ZSxcbiAgICBwdWJsaXNoUmVwbGF5LFxuICAgIHJlZkNvdW50LFxuICAgIGV4aGF1c3RNYXAsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgc3RhcnRXaXRoLFxuICAgIGRlYm91bmNlVGltZVxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxuICAgIExvZ2luUmVzdWx0LFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcbiAgICBQYWdlRGF0YU1vZGVsLFxuICAgIFBvcnRhbERhdGFNb2RlbCxcbiAgICBSZXBvcnRNb2RlbFxufSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi9sb2cuc2VydmljZSc7XG5pbXBvcnQgeyBCYXJzYUFwaSB9IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMvYmFyc2EtYXBpJztcbmltcG9ydCB7IEJhcnNhRGlhbG9nU2VydmljZSB9IGZyb20gJy4vYmFyc2EtZGlhbG9nLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBnZXRDb21wb25lbnREZWZpbmVkLCBnZXREZXZpY2VJc01vYmlsZSwgZ2V0RGV2aWNlSXNUYWJsZXQsIGdldEhlYWRlclZhbHVlLCBnZXRVbmlxdWVJZCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQb3J0YWxQYWdlUmVzb2x2ZXIgfSBmcm9tICcuLi9yZXNvbHZlcnMvcG9ydGFsLXBhZ2UucmVzb2x2ZXInO1xuaW1wb3J0IHsgQXV0aEd1YXJkIH0gZnJvbSAnLi4vYXV0aC1ndWFyZCc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuZGVjbGFyZSBsZXQgQWpheEhlbHBlcjogYW55O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBvcnRhbFNlcnZpY2Uge1xuICAgIHB1YmxpYyBvZmZzZXRUb3AgPSAwO1xuXG4gICAgbG9naW5Mb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgbG9hZGVkID0gZmFsc2U7XG4gICAgZm9ybVBhbmVsczogYW55ID0ge307XG4gICAgY2FjaGVkSW1hZ2VzOiBhbnkgPSB7fTtcbiAgICBkYXRlVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBkZWZhdWx0Um91dGU6IHN0cmluZztcbiAgICBjYWNoZWRQYWdlRGF0YTogeyBba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPFBhZ2VEYXRhTW9kZWw+IH0gPSB7fTtcbiAgICBwYWdlczogUGFnZURhdGFNb2RlbFtdID0gW107XG4gICAgcnRsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzUnRsKTtcbiAgICB1c2VyTG9nZ2VkSW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGRpY3Rpb25hcnk6IHsgW2tleTogc3RyaW5nXTogQmVoYXZpb3JTdWJqZWN0PGFueT4gfSA9IHt9O1xuICAgIHBvcnRhbERhdGFTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBvcnRhbERhdGFNb2RlbCB8IG51bGw+KG51bGwpO1xuICAgIHBvcnRhbFNldHRpbmdzJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsPjtcbiAgICBwb3J0YWxEYXRhJDogT2JzZXJ2YWJsZTxQb3J0YWxEYXRhTW9kZWwgfCBudWxsPjtcbiAgICBkZXZpY2VTaXplJDogT2JzZXJ2YWJsZTxBYmJyZXZhdGlvbkRldmljZVNpemU+O1xuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZGlyVmFsdWUkOiBPYnNlcnZhYmxlPCdydGwnIHwgJ2x0cic+O1xuICAgIHJvdXRlSW5pdGlhbGl6ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIF9pc0Fub251bW91c1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcHJpdmF0ZSBfZGV2aWNlU2l6ZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWJicmV2YXRpb25EZXZpY2VTaXplPih0aGlzLl9pbml0YWxpemVEZXZpY2VTaXplKCkpO1xuICAgIHByaXZhdGUgX2xvZ2dlZEluU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSByb3V0ZUluaXRpYWxpemVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBkYXRlVGV4dFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvblN0YXJ0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TmF2aWdhdGlvblN0YXJ0IHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkVuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5hdmlnYXRpb25FbmQgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIF91c2VyUG9ydGFsU2V0dGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oW10pO1xuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvbkNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25Mb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgX2Nzc1VybFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBfY3NzQ3VzdG9tVXJsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlUmVzb3VyY2VVcmwgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIF9zZWFyY2hUZXJtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgcHJpdmF0ZSBfd2luZG93UmVzaXplJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGNtOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogQmFyc2FEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbXBpbGVyOiBDb21waWxlcixcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvblxuICAgICkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5faXNBbm9udW1vdXNTb3VyY2UubmV4dChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzQW5vbnltb3VzKTtcbiAgICB9XG4gICAgZ2V0IHdpbmRvd1Jlc2l6ZSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dSZXNpemUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgbm90aWZpY2F0aW9uQ291bnQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25Db3VudCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBub3RpZmljYXRpb25zJCgpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9ucyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBub3RpZmljYXRpb25Mb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbkxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGdldCBwb3J0YWxEYXRhKCk6IFBvcnRhbERhdGFNb2RlbCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3J0YWxEYXRhU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBzZWFyY2hUZXJtJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoVGVybSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBjc3NVcmwkKCk6IE9ic2VydmFibGU8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3NzVXJsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgY3NzQ3VzdG9tVXJsJCgpOiBPYnNlcnZhYmxlPFNhZmVSZXNvdXJjZVVybCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nzc0N1c3RvbVVybFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IHVzZXJQb3J0YWxTZXR0aW5ncygpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyUG9ydGFsU2V0dGluZ3MkLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCB1c2VyUG9ydGFsU2V0dGluZ3MkKCk6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJQb3J0YWxTZXR0aW5ncyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldCBkZXZpY2VTaXplKCk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VTaXplU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBpc0Fub255bW91cyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0Fub251bW91c1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IG5hdmlnYXRpb25FbmQkKCk6IE9ic2VydmFibGU8TmF2aWdhdGlvbkVuZCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25FbmQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgbmF2aWdhdGlvblN0YXJ0JCgpOiBPYnNlcnZhYmxlPE5hdmlnYXRpb25TdGFydCB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TdGFydCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBJbmNyZWFzZU5vdGlmY2F0aW9uQ291bnQoY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdW0gPSB0aGlzLl9ub3RpZmljYXRpb25Db3VudCQuZ2V0VmFsdWUoKSArIGNvdW50O1xuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25Db3VudCQubmV4dChzdW0pO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZE5vdGlmaWNhdGlvbkNvdW50KCk6IHZvaWQge1xuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtdLFxuICAgICAgICAgICAgTWV0aG9kOiAnR2V0U2hlbGxiYXJOb3RpZmljYXRpb25Db3VudCcsXG4gICAgICAgICAgICBTdWNjZXNzRm46IChjb3VudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5uZXh0KCtjb3VudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2FkTm90aWZpY2F0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25Mb2FkaW5nKHRydWUpO1xuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtdLFxuICAgICAgICAgICAgTWV0aG9kOiAnR2V0U2hlbGxiYXJOb3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKG1vTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChtb0xpc3QpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm90aWZpY2F0aW9uTG9hZGluZyhsb2FkaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkxvYWRpbmckLm5leHQobG9hZGluZyk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2FkTW8oaWQ6IHN0cmluZywgdHlwZWRlZklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmxvYWRQb3J0YWxQYWdlRGF0YShpZCwgdHlwZWRlZklkKTtcbiAgICB9XG4gICAgcHVibGljIHJlbW92ZU5vdGlmaWNhdGlvbihtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxvYWRpbmcodHJ1ZSk7XG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xuICAgICAgICAgICAgUGFyYW1ldGVyczogW21vLklkXSxcbiAgICAgICAgICAgIE1ldGhvZDogJ1JlbW92ZVNoZWxsYmFyTm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vTGlzdCA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCkuZmlsdGVyKChjKSA9PiBjLklkICE9PSBtby5JZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChtb0xpc3QpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0U2VhcmNoVGVybSh0ZXJtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoVGVybSQubmV4dCh0ZXJtKTtcbiAgICB9XG4gICAgd2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl93aW5kb3dSZXNpemUkLm5leHQoKTtcbiAgICB9XG4gICAgbmF2aWF0aW9uRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25FbmQkLm5leHQoZXZlbnQpO1xuICAgIH1cbiAgICBuYXZpYXRpb25TdGFydChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25TdGFydCQubmV4dChldmVudCk7XG4gICAgfVxuICAgIHNldFVzZXJQb3J0YWxTZXR0aW5ncyh1c2VyUG9ydGFsU2V0dGluZ3M6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5uZXh0KHVzZXJQb3J0YWxTZXR0aW5ncyk7XG4gICAgfVxuICAgIHNldFRoZW1lKHRoZW1lVXJsOiBTYWZlUmVzb3VyY2VVcmwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3NzVXJsU291cmNlLm5leHQodGhlbWVVcmwpO1xuICAgICAgICB0aGlzLl9jc3NDdXN0b21VcmxTb3VyY2UubmV4dCh0aGVtZVVybCk7XG4gICAgfVxuICAgIHNldERhdGEoa2V5LCBkYXRhKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5W2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeVtrZXldID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5W2tleV0ubmV4dChkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbCA9IHRoaXMuZGljdGlvbmFyeVtrZXldLmdldFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAob2xkVmFsICE9PSBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5W2tleV0ubmV4dChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXREYXRhKGtleSwgZGVmYXVsdFZhbHVlOiBhbnkgPSBudWxsKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25hcnlba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5W2tleV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5W2tleV0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGdldERhdGFTeW5jPFQ+KGtleSwgZGVmYXVsdFZhbHVlOiBhbnkgPSBudWxsKTogVCB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuZGljdGlvbmFyeVtrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRpY3Rpb25hcnlba2V5XS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBjcmVhdGVGb3JSZXBvcnQobmF2SXRlbSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIEJhcnNhQXBpLlVsLlVsdk1haW5DdHJsci5DcmVhdGVGb3JSZXBvcnQoe30sIG5hdkl0ZW0sIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmVuZGVyVWx2TWFpblVpKFxuICAgICAgICBuYXZJdGVtLFxuICAgICAgICB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgaXNSZXBvcnRQYWdlOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGb3JSZXBvcnQobmF2SXRlbSkucGlwZShcbiAgICAgICAgICAgIGV4aGF1c3RNYXAoKHVsdk1haW5DdHJscikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmdldFVsdk1haW5VaUNvbXBvbmVudCh1bHZNYWluQ3RybHIuQWRhcHRlci5Db250cm9sLCBpbmplY3RvciwgaXNSZXBvcnRQYWdlKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKHVsdk1hbmlVaUNvbXBvbmVudCkgPT4gdmNyLmluc2VydCh1bHZNYW5pVWlDb21wb25lbnQuaG9zdFZpZXcpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHVsdk1haW5DdHJscilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuICAgIGdldFVsdk1haW5VaUNvbXBvbmVudChjdXN0b21VbHZNYWluVWksIGluamVjdG9yOiBJbmplY3RvciwgaXNSZXBvcnRQYWdlKTogT2JzZXJ2YWJsZTxDb21wb25lbnRSZWY8YW55Pj4ge1xuICAgICAgICBjb25zdCBjdXN0b21VaVNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjdXN0b21VbHZNYWluVWkuU2V0dGluZywgJ0N1c3RvbVVpJywgbnVsbCk7XG4gICAgICAgIGNvbnN0IHsgbW9kdWxlTmFtZSwgbW9kdWxlUGF0aCwgY29tcG9uZW50TmFtZSwgc2VsZWN0b3IgfSA9IGdldENvbXBvbmVudERlZmluZWQoXG4gICAgICAgICAgICBjdXN0b21VbHZNYWluVWksXG4gICAgICAgICAgICBjdXN0b21VaVNldHRpbmdcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50KG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yLCBpbmplY3RvcikucGlwZShcbiAgICAgICAgICAgIG1hcCgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50SW5zdGFuY2UgPSBjb21wb25lbnQuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaWQgPSBjdXN0b21VbHZNYWluVWkuaWQ7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY29udGV4dCA9IGN1c3RvbVVsdk1haW5VaTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5pc1JlcG9ydFBhZ2UgPSBpc1JlcG9ydFBhZ2U7XG4gICAgICAgICAgICAgICAgY3VzdG9tVWx2TWFpblVpLmNvbnRyb2xVaSA9IGNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRldmljZVNpemUkID0gdGhpcy5fZGV2aWNlU2l6ZVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICB0aGlzLnBvcnRhbERhdGEkID0gdGhpcy5wb3J0YWxEYXRhU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnJ0bCQgPSB0aGlzLnJ0bFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICB0aGlzLmRpclZhbHVlJCA9IHRoaXMucnRsJC5waXBlKG1hcCgoaXNSdGwpID0+IChpc1J0bCA/ICdydGwnIDogJ2x0cicpKSk7XG4gICAgICAgIHRoaXMucm91dGVJbml0aWFsaXplZCQgPSB0aGlzLnJvdXRlSW5pdGlhbGl6ZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgICAgICB0aGlzLmRhdGVUZXh0JCA9IHRoaXMuZGF0ZVRleHRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucG9ydGFsU2V0dGluZ3MkID0gdGhpcy5wb3J0YWxEYXRhU291cmNlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKG1hcCgocG9ydGFsRGF0YSkgPT4gKHBvcnRhbERhdGEgPyBwb3J0YWxEYXRhLlBvcnRhbFNldHRpbmdzIDogKHt9IGFzIGFueSkpKSk7XG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5faW5pdGFsaXplRGV2aWNlU2l6ZSgpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dpbmRvd1Jlc2l6ZSQubmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZVNpemVTb3VyY2UubmV4dChjKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0VXNlckxvZ2luU3RhdHVzKEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNVc2VyTG9nZ2VkSW4pO1xuXG4gICAgICAgIHRoaXMudXNlckxvZ2dlZEluJCA9IHRoaXMuX2xvZ2dlZEluU291cmNlXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKG1hcCgoaXNMb2dnZWRJbikgPT4gaXNMb2dnZWRJbiAmJiBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzQW5vbnltb3VzID09PSBmYWxzZSkpO1xuICAgIH1cbiAgICBfc2V0RGV2aWNlU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGV2aWNlU2l6ZSA9IHRoaXMuX2luaXRhbGl6ZURldmljZVNpemUoKTtcbiAgICAgICAgdGhpcy5fZGV2aWNlU2l6ZVNvdXJjZS5uZXh0KGRldmljZVNpemUpO1xuICAgIH1cbiAgICBfaW5pdGFsaXplRGV2aWNlU2l6ZSgpOiBBYmJyZXZhdGlvbkRldmljZVNpemUge1xuICAgICAgICBjb25zdCBfaXNtb2JpbGUgPSBnZXREZXZpY2VJc01vYmlsZSgpO1xuICAgICAgICBjb25zdCBfaXNUYWJsZXQgPSBnZXREZXZpY2VJc1RhYmxldCgpO1xuICAgICAgICBsZXQgX3dpbmRvV1NpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSA9ICdzJztcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDYwMCkge1xuICAgICAgICAgICAgX3dpbmRvV1NpemUgPSAncyc7XG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPiA2MDAgJiYgd2luZG93LmlubmVyV2lkdGggPD0gOTkyKSB7XG4gICAgICAgICAgICBfd2luZG9XU2l6ZSA9ICdtJztcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDk5MiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMjAwKSB7XG4gICAgICAgICAgICBfd2luZG9XU2l6ZSA9ICdsJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF93aW5kb1dTaXplID0gJ3hsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lzbW9iaWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3MnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfaXNUYWJsZXQgJiYgX3dpbmRvV1NpemUgIT09ICdsJyAmJiBfd2luZG9XU2l6ZSAhPT0gJ3hsJykge1xuICAgICAgICAgICAgcmV0dXJuICdtJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3dpbmRvV1NpemU7XG4gICAgfVxuICAgIGNvbXBpbGVNb2R1bGUoZGVwZW5kZW5jeTogTGlicmFyeURlcGVuZWN5KTogT2JzZXJ2YWJsZTxOZ01vZHVsZUZhY3Rvcnk8YW55Pj4ge1xuICAgICAgICBjb25zdCBtb2R1bGUkID0gdGhpcy5nZXRNb2R1bGUoZGVwZW5kZW5jeSk7XG4gICAgICAgIHJldHVybiBtb2R1bGUkLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKG1vZHVsZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVGYWN0b3J5ID0gdGhpcy5nZXROZ01vZHVsZUZhY3RvcnkobW9kdWxlcywgZGVwZW5kZW5jeS5uYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YobW9kdWxlRmFjdG9yeSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXRNb2R1bGUoZGVwZW5kZW5jeTogTGlicmFyeURlcGVuZWN5KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBrZWJhYk5hbWUsIHVtZCwgZXhwb3J0QXMgfSA9IGRlcGVuZGVuY3k7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBgL2Fzc2V0cy9tb2R1bGVzLyR7a2ViYWJOYW1lfS9idW5kbGVzYDtcbiAgICAgICAgY29uc3QgZGF0ZSA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuYWJjO1xuICAgICAgICBjb25zdCBwYXRoID0gYCR7YmFzZX0vJHtrZWJhYk5hbWV9LnVtZC5qcz90PSR7ZGF0ZX1gO1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IHRoaXMuZ2V0UmVnaXN0ZXJlZE1vZHVsZXModW1kLCBleHBvcnRBcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG1vZHVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkSnMkKHBhdGgpLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0UmVnaXN0ZXJlZE1vZHVsZXModW1kLCBleHBvcnRBcywgbmFtZSkpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWVPbk9iamVjdChwYXRoLCBpbmRleCwgbW9kdWxlcywgb2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNwbGl0ZWQgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHByb3AgPSBzcGxpdGVkW2luZGV4XTtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmplY3RbcHJvcF0gPT09IHR5cGVvZiB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9iamVjdFtwcm9wXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gc3BsaXRlZC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBvYmplY3RbcHJvcF0gPSBtb2R1bGVzO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmFsdWVPbk9iamVjdChwYXRoLCBpbmRleCArIDEsIG1vZHVsZXMsIG9iamVjdFtwcm9wXSk7XG4gICAgfVxuXG4gICAgZ2V0Q29tcG9uZW50KFxuICAgICAgICBtb2R1bGVOYW1lOiBzdHJpbmcsXG4gICAgICAgIG1vZHVsZVBhdGg6IHN0cmluZyxcbiAgICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICAgICAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgICAgICBwYXJlbnRJbmplY3RvcjogSW5qZWN0b3JcbiAgICApOiBPYnNlcnZhYmxlPENvbXBvbmVudFJlZjxhbnk+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRjbS5nZXRDb21wb25lbnRCeVNlbGVjdG9yKHNlbGVjdG9yLCBtb2R1bGVOYW1lLCBwYXJlbnRJbmplY3Rvcik7XG4gICAgfVxuICAgIGxvYWRKcyQocGF0aCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHBhdGgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgUmVwb3J0RXhlY3V0ZShyZXBvcnROYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1vRm9yUmVwb3J0TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5SZXBvcnRFeGVjdXRlUHJvbWlzZShyZXBvcnROYW1lKSk7XG4gICAgfVxuICAgIFJlcG9ydEV4ZWN1dGVQcm9taXNlKHJlcG9ydE5hbWU6IHN0cmluZyk6IFByb21pc2U8TW9Gb3JSZXBvcnRNb2RlbD4ge1xuICAgICAgICBjb25zdCB1bHZQYXJhbXMgPSB7XG4gICAgICAgICAgICBGbGFnczoge1xuICAgICAgICAgICAgICAgIERhdGE6ICdUcnVlJyxcbiAgICAgICAgICAgICAgICBFeHRyYTogJ0ZhbHNlJyxcbiAgICAgICAgICAgICAgICBTZWFyY2g6ICdGYWxzZScsXG4gICAgICAgICAgICAgICAgVmlldzogJ0ZhbHNlJ1xuICAgICAgICAgICAgICAgIC8vIEdlbmVyYWw6XCJGYWxzZVwiLCAvLyB1bHZtYWluY3RybCBkb2VzIG5vdCBjcmFldGUgdWkgY29udHJvbCByYWlzZSBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXG4gICAgICAgICAgICBVc2FnZUVudW06ICdTeXN0ZW1Db250YWluZXInXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxNb0ZvclJlcG9ydE1vZGVsPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBCYXJzYUFwaS5Cdy5FeGVjdXRlUmVwb3J0KFxuICAgICAgICAgICAgICAgIHsgdWx2UGFyYW1zIH0sXG4gICAgICAgICAgICAgICAgKHJlc3VsdDogUmVwb3J0TW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuRGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhZGRGb3JtUGFuZWxDdHJscihpZCwgZm9ybXBhbmVsQ3RybHI6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1QYW5lbHNbaWRdID0gZm9ybXBhbmVsQ3RybHI7XG4gICAgfVxuICAgIHNldFVzZXJMb2dpblN0YXR1cyhzdGF0dXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VkSW5Tb3VyY2UubmV4dChzdGF0dXMpO1xuICAgIH1cbiAgICBleHRyYWN0QWxsUGFnZXMocG9ydGFsRGF0YTogUG9ydGFsRGF0YU1vZGVsIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXBvcnRhbERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwb3J0YWxEYXRhLkNoaWxkUGFnZUxpc3QuTW9EYXRhTGlzdC5mb3JFYWNoKChwYWdlRGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKHBhZ2VEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4dHJhY3RBbGxQYWdlc19PbGQocG9ydGFsRGF0YTogUG9ydGFsRGF0YU1vZGVsIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXBvcnRhbERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XG4gICAgICAgIHBvcnRhbERhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZvckVhY2goKHBhZ2VEYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gcGFnZURhdGEuUm91dGUucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgICAgIGNvbmZpZy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUm91dGUocGFnZURhdGEsIHBhdGgsIHBhZ2VEYXRhLkhhc0F1dGhvcml6ZSwgcGFnZURhdGEuUGFnZU1vZHVsZT8uJENhcHRpb24sIG51bGwsIG51bGwpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHBhZ2VEYXRhLklzRGVmYXVsdFJvdXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Um91dGUgPSBwYXRoO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5wdXNoKHRoaXMuY3JlYXRlUm91dGUocGFnZURhdGEsICcnLCBmYWxzZSwgcG9ydGFsRGF0YS5QYWdlTW9kdWxlPy4kQ2FwdGlvbiwgcGF0aCwgbnVsbCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFnZXMocGFnZURhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcm91dGVyLnJlc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIGlmICh0aGlzLl9sb2NhdGlvbi5wYXRoKCkgPT09ICcnKSB7XG4gICAgICAgICAgICAvLyB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGVmYXVsdFJvdXRlXSk7XG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycnXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5yb3V0ZUluaXRpYWxpemVkKCk7XG4gICAgfVxuICAgIHNzb0xvZ2luKCk6IHZvaWQge1xuICAgICAgICBBamF4SGVscGVyLkFqYXhSZXF1ZXN0KFxuICAgICAgICAgICAgJy9hcGkvYmFzZS9zc29sb2dpbicsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBhbGVydCgnZXJyb3IgaW4gc3NvIGxvZ2luLicpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgc3NvTG9nb3V0KCk6IHZvaWQge1xuICAgICAgICBBamF4SGVscGVyLkFqYXhSZXF1ZXN0KFxuICAgICAgICAgICAgJy9hcGkvYmFzZS9zc29sb2dvdXQnLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYWxlcnQoJ2Vycm9yIGluIHNzbyBsb2dvdXQuJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgIH1cbiAgICBhZGRDaGlsZFBhZ2VzKHBhZ2VEYXRhOiBQYWdlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnZXMucHVzaChwYWdlRGF0YSk7XG4gICAgICAgIGlmICghcGFnZURhdGEuQ2hpbGRQYWdlTGlzdD8uTW9EYXRhTGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGFnZURhdGEuQ2hpbGRQYWdlTGlzdC5Nb0RhdGFMaXN0LmZvckVhY2goKGNoaWxkUGFnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKGNoaWxkUGFnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGNyZWF0ZVJvdXRlKHBhZ2VEYXRhLCBwYXRoLCBoYXNBdXRob3JpemVkLCBtb2R1bGVOYW1lLCByZWRpcmVjdFRvLCBpc0R5bmFtaWNSb3V0ZSk6IFJvdXRlIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjcmVhdGVSb3V0ZTIoXG4gICAgICAgIHBhZ2VEYXRhLFxuICAgICAgICBwYXRoLFxuICAgICAgICBoYXNBdXRob3JpemVkLFxuICAgICAgICBtb2R1bGVOYW1lLFxuICAgICAgICByZWRpcmVjdFRvOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICAgICAgaXNEeW5hbWljUm91dGU6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IFJvdXRlIHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGg6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICAgICAgY29uc3QgdW1kID0gbW9kdWxlTmFtZTtcbiAgICAgICAgbW9kdWxlUGF0aCA9IG1vZHVsZVBhdGguc3Vic3RyaW5nKDEsIG1vZHVsZVBhdGgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZHluYW1pY1JvdXRlOiBSb3V0ZSA9IHt9O1xuICAgICAgICBkeW5hbWljUm91dGUucGF0aCA9IHBhdGg7XG4gICAgICAgIGR5bmFtaWNSb3V0ZS5kYXRhID0geyBwYWdlRGF0YSB9O1xuICAgICAgICBpZiAoIWlzRHluYW1pY1JvdXRlKSB7XG4gICAgICAgICAgICBkeW5hbWljUm91dGUucmVzb2x2ZSA9IHtcbiAgICAgICAgICAgICAgICBwYWdlRGF0YTogUG9ydGFsUGFnZVJlc29sdmVyXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoID09PSAnJykge1xuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnBhdGhNYXRjaCA9ICdmdWxsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVkaXJlY3RUbykge1xuICAgICAgICAgICAgZHluYW1pY1JvdXRlLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhhc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgICAgICAgICBkeW5hbWljUm91dGUuY2FuQWN0aXZhdGUgPSBbQXV0aEd1YXJkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGR5bmFtaWNSb3V0ZS5sb2FkQ2hpbGRyZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzOiBMaWJyYXJ5RGVwZW5lY3lbXSA9IEpTT04ucGFyc2UocGFnZURhdGEuRGVwZW5kZW5jaWVzKTsgLy8gZXZhbChwYWdlRGF0YS5EZXBlbmRlbmNpZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VMaWJyYXJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtb2R1bGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZWJhYk5hbWU6IG1vZHVsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHVtZCxcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0QXM6IFttb2R1bGVOYW1lXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzJCA9IGZyb20oZGVwZW5kZW5jaWVzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKGRlcGVuZGVuY3k6IExpYnJhcnlEZXBlbmVjeSkgPT4gdGhpcy5jb21waWxlTW9kdWxlKGRlcGVuZGVuY3kpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtkZXBlbmRlbmNpZXMkXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuZ2V0TW9kdWxlKHBhZ2VMaWJyYXJ5KSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgobW9kdWxlcykgPT4gbW9kdWxlc1ttb2R1bGVOYW1lICsgJ01vZHVsZSddKSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucm91dGVJbml0aWFsaXplZCgpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGR5bmFtaWNSb3V0ZTtcbiAgICB9XG4gICAgcm91dGVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3V0ZUluaXRpYWxpemVkU291cmNlLm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2dpbkJ5QW5vbnltb3VzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmxvZ2luTG9hZGluZy5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmxvZ2luUG9ydGFsKCkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzdWx0OiBMb2dpblJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmRlYnVnKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShCYXJzYUFwaS5Mb2dpbkFjdGlvbi50b2tlbjJTdG9yYWdlS2V5LCByZXN1bHQuZGF0YS5zdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dpbkxvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0UGFnZURhdGEodXJsOiBzdHJpbmcsIGlzUm9vdDogYm9vbGVhbik6IE9ic2VydmFibGU8UGFnZURhdGFNb2RlbCB8IG51bGw+IHtcbiAgICAgICAgaWYgKGlzUm9vdCB8fCB1cmwgPT09ICcnIHx8IHVybCA9PT0gJy8nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3J0YWxEYXRhJDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpID4gLTEpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHIoMCwgdXJsLmluZGV4T2YoJz8nKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbdXJsXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMuZmluZFBhZ2VCeVJvdXRlKHVybCk7XG4gICAgICAgIEFqYXhIZWxwZXIuVXNlQ2FjaGUgPSAhcGFnZURhdGE/Lkhhc0F1dGhvcml6ZTtcblxuICAgICAgICB0aGlzLmNhY2hlZFBhZ2VEYXRhW3VybF0gPSB0aGlzLmFwaVNlcnZpY2VcbiAgICAgICAgICAgIC5sb2FkUG9ydGFsUGFnZURhdGEocGFnZURhdGE/LklkLCB0aGlzLnBvcnRhbERhdGFTb3VyY2UuZ2V0VmFsdWUoKT8uQ2hpbGRQYWdlTGlzdC5UeXBlRGVmSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHBhZ2VNbykgPT4gcGFnZU1vLkRhdGEuTW8pLFxuICAgICAgICAgICAgICAgIHRhcCgocGFnZU1vKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRSb3V0ZShwYWdlTW8sIHBhZ2VNby5DaGlsZFBhZ2VMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhZ2VzKHBhZ2VNbyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgcHVibGlzaFJlcGxheSgxKSxcbiAgICAgICAgICAgICAgICByZWZDb3VudCgpXG4gICAgICAgICAgICApO1xuICAgICAgICAvLyB0aGlzLmNhY2hlZFBhZ2VEYXRhW3VybF0gPSB0aGlzLnBvcnRhbERhdGEkLnBpcGUoXG4gICAgICAgIC8vICAgZmlsdGVyKChwb3J0YWxEYXRhKSA9PiBwb3J0YWxEYXRhICE9IG51bGwpLFxuICAgICAgICAvLyAgIG1hcCgocG9ydGFsRGF0YSkgPT4gKSxcbiAgICAgICAgLy8gICBjb25jYXRNYXAoKHBhZ2VEYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICByZXR1cm5cbiAgICAgICAgLy8gICB9KSxcblxuICAgICAgICAvLyAgIHRhcChwYWdlRGF0YT0+e30pXG4gICAgICAgIC8vICk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFBhZ2VEYXRhW3VybF07XG4gICAgfVxuICAgIHB1YmxpYyByZXNvbHZlRGF0YShyb3V0ZVBhZ2VEYXRhKTogT2JzZXJ2YWJsZTxQYWdlRGF0YU1vZGVsIHwgbnVsbD4ge1xuICAgICAgICAvLyBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZXMuZmluZCgoYykgPT4gYy5Sb3V0ZSA9PT0gcm91dGVQYWdlRGF0YS5Sb3V0ZSAmJiBjLk1vZHVsZSA9PT0gcm91dGVQYWdlRGF0YS5Nb2R1bGUpO1xuICAgICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZXMuZmluZCgoYykgPT4gYy5Sb3V0ZSA9PT0gcm91dGVQYWdlRGF0YS5Sb3V0ZSk7XG4gICAgICAgIGlmICghcGFnZURhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHBhZ2VEYXRhLklkO1xuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUGFnZURhdGFbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgQWpheEhlbHBlci5Vc2VDYWNoZSA9ICFwYWdlRGF0YT8uSGFzQXV0aG9yaXplO1xuICAgICAgICB0aGlzLmNhY2hlZFBhZ2VEYXRhW2lkXSA9IHRoaXMuYXBpU2VydmljZVxuICAgICAgICAgICAgLmxvYWRQb3J0YWxQYWdlRGF0YShpZCwgdGhpcy5wb3J0YWxEYXRhU291cmNlLmdldFZhbHVlKCk/LkNoaWxkUGFnZUxpc3QuVHlwZURlZklkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwYWdlTW8pID0+IHBhZ2VNby5EYXRhLk1vKSxcbiAgICAgICAgICAgICAgICB0YXAoKHBhZ2VNbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkUm91dGUocGFnZU1vLCBwYWdlTW8uQ2hpbGRQYWdlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYWdlcyhwYWdlTW8pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHB1Ymxpc2hSZXBsYXkoMSksXG4gICAgICAgICAgICAgICAgcmVmQ291bnQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5jYWNoZWRQYWdlRGF0YVt1cmxdID0gdGhpcy5wb3J0YWxEYXRhJC5waXBlKFxuICAgICAgICAvLyAgIGZpbHRlcigocG9ydGFsRGF0YSkgPT4gcG9ydGFsRGF0YSAhPSBudWxsKSxcbiAgICAgICAgLy8gICBtYXAoKHBvcnRhbERhdGEpID0+ICksXG4gICAgICAgIC8vICAgY29uY2F0TWFwKChwYWdlRGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgcmV0dXJuXG4gICAgICAgIC8vICAgfSksXG5cbiAgICAgICAgLy8gICB0YXAocGFnZURhdGE9Pnt9KVxuICAgICAgICAvLyApO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYWdlRGF0YVtpZF07XG4gICAgfVxuXG4gICAgYWRkQ2hpbGRSb3V0ZShwYWdlTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIENoaWxkUGFnZUxpc3Q6IE1vRm9yUmVwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhZGRDaGlsZFJvdXRlX09sZChwYWdlTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIENoaWxkUGFnZUxpc3Q6IE1vRm9yUmVwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFDaGlsZFBhZ2VMaXN0Py5Nb0RhdGFMaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3JvdXRlci5jb25maWc7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYWdlTW8uUm91dGUucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgY29uc3QgcGFyZW50Um91dGUgPSBjb25maWcuZmluZCgoYykgPT4gKGMucGF0aCA9IHBhcmVudFBhdGgpKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IFJvdXRlW10gPSBbXTtcbiAgICAgICAgaWYgKHBhcmVudFJvdXRlKSB7XG4gICAgICAgICAgICBDaGlsZFBhZ2VMaXN0Lk1vRGF0YUxpc3QuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gY2hpbGQuUm91dGUucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJvdXRlID0gdGhpcy5jcmVhdGVSb3V0ZShcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLkhhc0F1dGhvcml6ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuUGFnZU1vZHVsZT8uJENhcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGRyb3V0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuXG4gICAgICAgICAgICAocGFyZW50Um91dGUgYXMgYW55KS5fbG9hZGVkQ29uZmlnLnJvdXRlc1swXS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIucmVzZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUG9ydGFsRGF0YV9PbGQxKCk6IE9ic2VydmFibGU8UG9ydGFsRGF0YU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UubG9hZFBvcnRhbChCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkLCBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbFR5cGVEZWZJZCkucGlwZShcbiAgICAgICAgICAgIHRhcCgocG9ydGFsU2V0dGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnRhbERhdGEgPSBwb3J0YWxTZXR0aW5nLkRhdGEuTW87XG4gICAgICAgICAgICAgICAgdGhpcy5leHRyYWN0QWxsUGFnZXMocG9ydGFsRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiBmcm9tKHRoaXMubG9hZFN5c3RlbSgpKSksXG4gICAgICAgICAgICB0YXAoKGFsbCkgPT4gdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpKVxuICAgICAgICApO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZFBvcnRhbERhdGFTeW5jX09sZDIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvcnRhbFNldHRpbmcgPSB0aGlzLmFwaVNlcnZpY2UubG9hZFBvcnRhbFN5bmMoXG4gICAgICAgICAgICBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLlBvcnRhbElkLFxuICAgICAgICAgICAgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxUeXBlRGVmSWRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcG9ydGFsRGF0YSA9IHBvcnRhbFNldHRpbmcuRGF0YS5NbztcblxuICAgICAgICB0aGlzLmV4dHJhY3RBbGxQYWdlcyhwb3J0YWxEYXRhKTtcblxuICAgICAgICB0aGlzLnBvcnRhbERhdGFTb3VyY2UubmV4dChwb3J0YWxEYXRhKTtcblxuICAgICAgICB0aGlzLmxvYWRTeXN0ZW0oKTtcbiAgICAgICAgdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZFBvcnRhbERhdGFTeW5jKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3J0YWxTZXR0aW5nU3RyID0gQmFyc2FBcGkuQncuUnVuQmxNZXRob2QoJ0dldFBvcnRhbCcsIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuUG9ydGFsSWQpO1xuICAgICAgICBjb25zdCBwb3J0YWxTZXR0aW5nID0gQmFyc2FBcGkuRXh0LmRlY29kZShwb3J0YWxTZXR0aW5nU3RyKTtcbiAgICAgICAgY29uc3QgcG9ydGFsRGF0YSA9IHBvcnRhbFNldHRpbmc7XG5cbiAgICAgICAgdGhpcy5leHRyYWN0QWxsUGFnZXMocG9ydGFsRGF0YSk7XG5cbiAgICAgICAgdGhpcy5wb3J0YWxEYXRhU291cmNlLm5leHQocG9ydGFsRGF0YSk7XG5cbiAgICAgICAgdGhpcy5kYXRlVGV4dFNvdXJjZS5uZXh0KEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGF0ZVRleHQpO1xuICAgIH1cbiAgICBwdWJsaWMgbG9hZFVzZXJQb3J0YWxTZXR0aW5nKCk6IHZvaWQge1xuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtdLFxuICAgICAgICAgICAgTWV0aG9kOiAnR2V0VXNlclBvcnRhbFNldHRpbmdzJyxcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKHVzZXJQb3J0YWxTZXR0aW5nOiBNZXRhb2JqZWN0RGF0YU1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlclBvcnRhbFNldHRpbmdzJC5uZXh0KHVzZXJQb3J0YWxTZXR0aW5nKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBGYWlsRm46IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBTaG93Rm9ybVBhbmVsQ29udHJvbChcbiAgICAgICAgZm9ybXBhbmVsQ3RybHI6IGFueSxcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgZGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT4sXG4gICAgICAgIGlzUGFnZTogYm9vbGVhbixcbiAgICAgICAgaXNSZWxvYWQ6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIWZvcm1wYW5lbEN0cmxyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2Zvcm0gcGFuZWwgY29udHJvbGVyIGlzIHVuZGVmaW5lZCEnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtbyA9IGZvcm1wYW5lbEN0cmxyLk1vO1xuICAgICAgICBjb25zdCBoZWFkZXJMYXlvdXQgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShmb3JtcGFuZWxDdHJsciwgJ1NldHRpbmcuVmlldy5IZWFkZXJMYXlvdXQnLCBudWxsKTtcbiAgICAgICAgbGV0IGlzTW9kYWwgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShmb3JtcGFuZWxDdHJsciwgJ1NldHRpbmcuVmlldy5FeHRyYUpzb25Qcm9wLk1vZGFsJywgZmFsc2UpO1xuICAgICAgICBjb25zdCBtb2RhbFNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgICAgIGZvcm1wYW5lbEN0cmxyLFxuICAgICAgICAgICAgJ1NldHRpbmcuVmlldy5DdXN0b21VaS5QYXJhbWV0ZXJzLk1vZGFsU2V0dGluZycsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtb2RhbFNldHRpbmcpIHtcbiAgICAgICAgICAgIGlzTW9kYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1wYW5lbEN0cmxyLlNldHRpbmcuSXNNb2RhbCA9IGlzTW9kYWw7XG4gICAgICAgIGZvcm1wYW5lbEN0cmxyLklzTW9kYWwgPSBpc01vZGFsO1xuICAgICAgICBjb25zdCBicmVhZENydW1iID0gZ2V0SGVhZGVyVmFsdWUoaGVhZGVyTGF5b3V0Py5CcmVhZENydW1iKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7XG4gICAgICAgICAgICBpZDogbW8uJFN0YXRlID09PSAnTmV3JyA/ICcwJyA6IG1vLklkLFxuICAgICAgICAgICAgdHlpZDogbW8uJFR5cGVEZWZJZCxcbiAgICAgICAgICAgIHR5Y3A6IG1vLiRDYXB0aW9uID8gbW8uJENhcHRpb24gOiBudWxsLFxuICAgICAgICAgICAgcmVwaWQ6IG1vLiRSZXBvcnRJZCxcbiAgICAgICAgICAgIHZpZDogZm9ybXBhbmVsQ3RybHI/LlNldHRpbmc/LlZpZXc/LlR5cGVWaWV3SWQsXG4gICAgICAgICAgICBiYzogYnJlYWRDcnVtYiA/IGJyZWFkQ3J1bWIgOiBtby4kU3RhdGUgPT09ICdOZXcnID8gbW8uJFR5cGVEZWZOYW1lIDogbW8uJENhcHRpb25cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaWQgPSBnZXRVbmlxdWVJZCg0KTtcbiAgICAgICAgdGhpcy5hZGRGb3JtUGFuZWxDdHJscihpZCwgZm9ybXBhbmVsQ3RybHIpO1xuICAgICAgICBpZiAoaXNNb2RhbCkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dGb3JtKGRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGZvcm1wYW5lbEN0cmxyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0geyBmb3JtUGFuZWxDdHJscklkOiBpZCB9O1xuICAgICAgICAgICAgaWYgKGlzUGFnZSkge1xuICAgICAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogWydzaG93JywgeyAuLi5xdWVyeVBhcmFtcywgZm9ybVBhbmVsQ3RybHJJZDogaWQsIGlzRmlyc3Q6IHRydWUgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGlzUmVsb2FkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiBbJ3Nob3cnLCB7IC4uLnF1ZXJ5UGFyYW1zLCBmb3JtUGFuZWxDdHJscklkOiBpZCB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGlzUmVsb2FkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBsb2FkU3lzdGVtKGlkOiBudW1iZXIgPSAwKTogUHJvbWlzZTxQb3J0YWxEYXRhTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuX2xvYWRTeXN0ZW0oXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBmaW5kUGFnZUJ5Um91dGUodXJsOiBzdHJpbmcpOiBQYWdlRGF0YU1vZGVsIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZpbmRlZFBhZ2UgPSB0aGlzLnBhZ2VzLmZpbmQoKGMpID0+IGMuUm91dGUgPT09IHVybCk7XG4gICAgICAgIHJldHVybiBmaW5kZWRQYWdlIHx8IG51bGw7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0TmdNb2R1bGVGYWN0b3J5KG1vZHVsZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIG1vZHVsZU5hbWU6IHN0cmluZyk6IE5nTW9kdWxlRmFjdG9yeTxhbnk+IHtcbiAgICAgICAgY29uc3QgbW9kdWxlQ2xhc3MgPSBtb2R1bGVzW21vZHVsZU5hbWUgKyAnTW9kdWxlJ107XG4gICAgICAgIGxldCBtb2R1bGVGYWN0b3J5OiBOZ01vZHVsZUZhY3Rvcnk8YW55PjtcbiAgICAgICAgaWYgKG1vZHVsZUNsYXNzIGluc3RhbmNlb2YgTmdNb2R1bGVGYWN0b3J5KSB7XG4gICAgICAgICAgICBtb2R1bGVGYWN0b3J5ID0gbW9kdWxlQ2xhc3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb21waWxlZCA9IHRoaXMuY29tcGlsZXIuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNTeW5jKG1vZHVsZUNsYXNzKTtcbiAgICAgICAgICAgIG1vZHVsZUZhY3RvcnkgPSBjb21waWxlZC5uZ01vZHVsZUZhY3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZUZhY3Rvcnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZWdpc3RlcmVkTW9kdWxlcyh1bWQ6IHN0cmluZywgZXhwb3J0QXM6IHN0cmluZ1tdLCBtb2R1bGVOYW1lOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgbGV0IG1vZHVsZXM7XG4gICAgICAgIGlmICh1bWQgIT09ICcnKSB7XG4gICAgICAgICAgICBtb2R1bGVzID0gd2luZG93O1xuICAgICAgICAgICAgdW1kLnNwbGl0KCcuJykuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlcyAhPT0gdHlwZW9mIHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGVzID0gbW9kdWxlc1tjXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vZHVsZXMgPSB3aW5kb3dbbW9kdWxlTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cG9ydEFzLmxlbmd0aCA+IDAgJiYgbW9kdWxlcykge1xuICAgICAgICAgICAgZXhwb3J0QXMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVPbk9iamVjdChjLCAwLCBtb2R1bGVzLCB3aW5kb3cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZXM7XG4gICAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBMaWJyYXJ5RGVwZW5lY3kge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBrZWJhYk5hbWU6IHN0cmluZztcbiAgICB1bWQ6IHN0cmluZztcbiAgICBleHBvcnRBczogc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEJyZWFkQ3J1bWJJbmZvIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbn1cbiJdfQ==
@@ -2506,6 +2506,7 @@ class PortalService {
2506
2506
  this._navigationEnd$ = new BehaviorSubject(null);
2507
2507
  this._userPortalSettings$ = new BehaviorSubject(null);
2508
2508
  this._notifications$ = new BehaviorSubject([]);
2509
+ this._notificationCount$ = new BehaviorSubject(0);
2509
2510
  this._notificationLoading$ = new BehaviorSubject(false);
2510
2511
  this._cssUrlSource = new BehaviorSubject(null);
2511
2512
  this._cssCustomUrlSource = new BehaviorSubject(null);
@@ -2517,15 +2518,15 @@ class PortalService {
2517
2518
  get windowResize$() {
2518
2519
  return this._windowResize$.asObservable();
2519
2520
  }
2521
+ get notificationCount$() {
2522
+ return this._notificationCount$.asObservable();
2523
+ }
2520
2524
  get notifications$() {
2521
2525
  return this._notifications$.asObservable();
2522
2526
  }
2523
2527
  get notificationLoading$() {
2524
2528
  return this._notificationLoading$.asObservable();
2525
2529
  }
2526
- get notificationsCount$() {
2527
- return this._notifications$.asObservable().pipe(map((items) => items.filter((c) => c.Unread).length));
2528
- }
2529
2530
  get portalData() {
2530
2531
  return this.portalDataSource.getValue();
2531
2532
  }
@@ -2556,15 +2557,34 @@ class PortalService {
2556
2557
  get navigationStart$() {
2557
2558
  return this._navigationStart$.asObservable();
2558
2559
  }
2560
+ IncreaseNotifcationCount(count) {
2561
+ const sum = this._notificationCount$.getValue() + count;
2562
+ this._notificationCount$.next(sum);
2563
+ }
2564
+ loadNotificationCount() {
2565
+ BarsaApi.Bw.RunBlMethodAsync({
2566
+ Parameters: [],
2567
+ Method: 'GetShellbarNotificationCount',
2568
+ SuccessFn: (count) => {
2569
+ this._notificationCount$.next(+count);
2570
+ },
2571
+ FailFn: (e) => {
2572
+ this.logService.error(e);
2573
+ }
2574
+ });
2575
+ }
2559
2576
  loadNotifications() {
2577
+ this.notificationLoading(true);
2560
2578
  BarsaApi.Bw.RunBlMethodAsync({
2561
2579
  Parameters: [],
2562
2580
  Method: 'GetShellbarNotifications',
2563
2581
  SuccessFn: (moList) => {
2564
2582
  this._notifications$.next(moList);
2583
+ this.notificationLoading(false);
2565
2584
  },
2566
2585
  FailFn: (e) => {
2567
2586
  this.logService.error(e);
2587
+ this.notificationLoading(false);
2568
2588
  }
2569
2589
  });
2570
2590
  }