@netgrif/components-core 7.0.0-rc.11 → 7.0.0-rc.13

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.
@@ -223,6 +223,7 @@ export class DoubleDrawerNavigationService {
223
223
  * */
224
224
  onItemClick(item) {
225
225
  if (item.resource === undefined) {
226
+ this._currentNavigationItem = null;
226
227
  // custom view represented only in nae.json
227
228
  if (item.processUri === this.currentPath) {
228
229
  this._pathService.activePath = this.currentPath;
@@ -233,6 +234,7 @@ export class DoubleDrawerNavigationService {
233
234
  this.itemClicked.emit({ path: this._pathService.activePath, isHome: false });
234
235
  }
235
236
  else {
237
+ this._currentNavigationItem = item;
236
238
  const path = item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value;
237
239
  if (DoubleDrawerUtils.hasItemChildren(item) && !this.leftLoading$.isActive && !this.rightLoading$.isActive) {
238
240
  this._pathService.activePath = path;
@@ -252,12 +254,20 @@ export class DoubleDrawerNavigationService {
252
254
  }
253
255
  }
254
256
  /**
255
- * Opens a view of the current right items in the menu by defined rule. The rule is: On first check for default
256
- * view in children. On second check if the clicked item has a view. On third, pick any other children's view, else
257
+ * Opens a view of the current right items in the menu by defined rule. The rule is: First, it checks whether a navigation
258
+ * item was clicked. Second, check for default view in children.
259
+ * Third check if the clicked item has a view. Fourth, pick any other children's view, else
257
260
  * show nothing.
258
261
  * */
259
262
  openAvailableView() {
260
263
  let allItems = this.rightItems.concat(this.moreItems);
264
+ if (this._currentNavigationItem) {
265
+ let alreadyClickedItem = allItems.find(item => item.id === this._currentNavigationItem.id);
266
+ if (!!alreadyClickedItem) {
267
+ // when the folder has not changed and a menu item is clicked.
268
+ return;
269
+ }
270
+ }
261
271
  let autoOpenItems = allItems.filter(item => DoubleDrawerUtils.hasItemAutoOpenView(item));
262
272
  if (autoOpenItems.length > 0) {
263
273
  this._redirectService.redirect(autoOpenItems[0].routing.path);
@@ -538,4 +548,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
538
548
  providedIn: 'root',
539
549
  }]
540
550
  }], ctorParameters: () => [{ type: i1.LoggerService }, { type: i2.ConfigurationService }, { type: i3.ActivatedRoute }, { type: i4.CaseResourceService }, { type: i5.AccessService }, { type: i6.TranslateService }, { type: i7.DynamicNavigationRouteProviderService }, { type: i8.RedirectService }, { type: i9.PathService }, { type: i10.UserService }] });
541
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlLWRyYXdlci1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL25hdmlnYXRpb24vbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyL3NlcnZpY2UvZG91YmxlLWRyYXdlci1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUMvRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFZbEUsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBRVQseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDekIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd4QyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7OztBQUd2RDs7S0FFSztBQUlMLE1BQU0sT0FBTyw2QkFBNkI7SUEyQ3hCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNB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LFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRTthQUM1QixHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQzthQUNsQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBWTtRQUM5QixJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDZCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPLEdBQUcsQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQzt3R0FsaUJRLDZCQUE2Qjs0R0FBN0IsNkJBQTZCLGNBRjFCLE1BQU07OzRGQUVULDZCQUE2QjtrQkFIekMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gXCIuLi8uLi8uLi91dGlsaXR5L2xvYWRpbmctZW1pdHRlclwiO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcCwgdGFrZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge0Nhc2V9IGZyb20gXCIuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2VcIjtcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZVwiO1xuaW1wb3J0IHtEb3VibGVEcmF3ZXJVdGlsc30gZnJvbSBcIi4uL3V0aWwvZG91YmxlLWRyYXdlci11dGlsc1wiO1xuaW1wb3J0IHtQYWdlfSBmcm9tIFwiLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlXCI7XG5pbXBvcnQge0Nhc2VTZWFyY2hSZXF1ZXN0Qm9keSwgUGV0cmlOZXRTZWFyY2hSZXF1ZXN0fSBmcm9tIFwiLi4vLi4vLi4vZmlsdGVyL21vZGVscy9jYXNlLXNlYXJjaC1yZXF1ZXN0LWJvZHlcIjtcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge1BhZ2luYXRpb25QYXJhbXN9IGZyb20gXCIuLi8uLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnaW5hdGlvbi1wYXJhbXNcIjtcbmltcG9ydCB7U2ltcGxlRmlsdGVyfSBmcm9tIFwiLi4vLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyXCI7XG5pbXBvcnQge0Nhc2VSZXNvdXJjZVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZVwiO1xuaW1wb3J0IHtJMThuRmllbGRWYWx1ZX0gZnJvbSBcIi4uLy4uLy4uL2RhdGEtZmllbGRzL2kxOG4tZmllbGQvbW9kZWxzL2kxOG4tZmllbGQtdmFsdWVcIjtcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgRHluYW1pY05hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyU2VydmljZVxufSBmcm9tIFwiLi4vLi4vLi4vcm91dGluZy9keW5hbWljLW5hdmlnYXRpb24tcm91dGUtcHJvdmlkZXIvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7UmVkaXJlY3RTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vcm91dGluZy9yZWRpcmVjdC1zZXJ2aWNlL3JlZGlyZWN0LnNlcnZpY2VcIjtcbmltcG9ydCB7QWNjZXNzU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2F1dGhvcml6YXRpb24vcGVybWlzc2lvbi9hY2Nlc3Muc2VydmljZVwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge1ZpZXd9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb25zL3NjaGVtYVwiO1xuaW1wb3J0IHtcbiAgICBNRU5VX0lERU5USUZJRVJTLFxuICAgIE1lbnVPcmRlcixcbiAgICBOYXZpZ2F0aW9uSXRlbSxcbiAgICBSSUdIVF9TSURFX0lOSVRfUEFHRV9TSVpFLFxuICAgIFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSxcbiAgICBTRVRUSU5HU19UUkFOU0lUSU9OX0lEXG59IGZyb20gJy4uLy4uL21vZGVsL25hdmlnYXRpb24tY29uZmlncyc7XG5pbXBvcnQge1VyaU5vZGVSZXNvdXJjZX0gZnJvbSAnLi4vLi4vbW9kZWwvdXJpLXJlc291cmNlJztcbmltcG9ydCB7TWVudUl0ZW1DbGlja0V2ZW50LCBNZW51SXRlbUxvYWRlZEV2ZW50fSBmcm9tICcuLi8uLi9tb2RlbC9uYXZpZ2F0aW9uLW1lbnUtZXZlbnRzJztcbmltcG9ydCB7R3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzfSBmcm9tIFwiLi4vLi4vbW9kZWwvZ3JvdXAtbmF2aWdhdGlvbi1jb25zdGFudHNcIjtcbmltcG9ydCB7UGF0aFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL3BhdGguc2VydmljZVwiO1xuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlXCI7XG5cbi8qKlxuICogU2VydmljZSBmb3IgbWFuYWdpbmcgbmF2aWdhdGlvbiBpbiBkb3VibGUtZHJhd2VyXG4gKiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRG91YmxlRHJhd2VyTmF2aWdhdGlvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBkaXNwbGF5ZWQgaXRlbXMgb24gdGhlIGxlZnQgc2lkZVxuICAgICAqICovXG4gICAgcHJvdGVjdGVkIF9sZWZ0SXRlbXMkOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8TmF2aWdhdGlvbkl0ZW0+PjtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGRpc3BsYXllZCBpdGVtcyBvbiB0aGUgcmlnaHQgc2lkZVxuICAgICAqICovXG4gICAgcHJvdGVjdGVkIF9yaWdodEl0ZW1zJDogQmVoYXZpb3JTdWJqZWN0PEFycmF5PE5hdmlnYXRpb25JdGVtPj47XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBoaWRkZW4gaXRlbXNcbiAgICAgKiAqL1xuICAgIHByb3RlY3RlZCBfbW9yZUl0ZW1zJDogQmVoYXZpb3JTdWJqZWN0PEFycmF5PE5hdmlnYXRpb25JdGVtPj47XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBjdXN0b20gaXRlbXMgaW4gbW9yZSBtZW51XG4gICAgICogKi9cbiAgICBwcm90ZWN0ZWQgX2hpZGRlbkN1c3RvbUl0ZW1zJDogQmVoYXZpb3JTdWJqZWN0PEFycmF5PE5hdmlnYXRpb25JdGVtPj47XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBjdXN0b20gaXRlbXNcbiAgICAgKiAqL1xuICAgIHByb3RlY3RlZCBfY2hpbGRDdXN0b21WaWV3czogeyBbdXJpOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IE5hdmlnYXRpb25JdGVtIH0gfTtcbiAgICBwcm90ZWN0ZWQgaXRlbXNPcmRlcjogTWVudU9yZGVyO1xuICAgIHByb3RlY3RlZCBfbGVmdExvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcbiAgICBwcm90ZWN0ZWQgX3JpZ2h0TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHByb3RlY3RlZCBfbm9kZUxvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnRQYXRoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgLyoqXG4gICAgICogQ3VycmVudGx5IGRpc3BsYXkgdXJpXG4gICAgICogU2libGluZ3Mgb2YgdGhlIG5vZGUgYXJlIG9uIHRoZSBsZWZ0LCBjaGlsZHJlbiBhcmUgb24gdGhlIHJpZ2h0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9jdXJyZW50UGF0aDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEN1cnJlbnRseSBzZWxlY3RlZCBuYXZpZ2F0aW9uIGl0ZW1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnROYXZpZ2F0aW9uSXRlbTogTmF2aWdhdGlvbkl0ZW07XG4gICAgcHJvdGVjdGVkIGRlZmF1bHRWaWV3SWNvbjogc3RyaW5nID0gJ2ZpbHRlcl9hbHQnO1xuICAgIHByb3RlY3RlZCBjdXN0b21JdGVtc0luaXRpYWxpemVkOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBoaWRkZW5DdXN0b21JdGVtc0luaXRpYWxpemVkOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBpdGVtQ2xpY2tlZDogRXZlbnRFbWl0dGVyPE1lbnVJdGVtQ2xpY2tFdmVudD47XG4gICAgcHJvdGVjdGVkIGl0ZW1Mb2FkZWQ6IEV2ZW50RW1pdHRlcjxNZW51SXRlbUxvYWRlZEV2ZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9jb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2FjY2Vzc1NlcnZpY2U6IEFjY2Vzc1NlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9keW5hbWljUm91dGluZ1NlcnZpY2U6IER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfcmVkaXJlY3RTZXJ2aWNlOiBSZWRpcmVjdFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfcGF0aFNlcnZpY2U6IFBhdGhTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5fbGVmdEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICAgICAgICB0aGlzLl9yaWdodEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICAgICAgICB0aGlzLl9tb3JlSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gICAgICAgIHRoaXMuX2hpZGRlbkN1c3RvbUl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICAgICAgICB0aGlzLl9jaGlsZEN1c3RvbVZpZXdzID0ge307XG4gICAgICAgIHRoaXMuX2xlZnRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9yaWdodExvYWRpbmckID0gbmV3IExvYWRpbmdFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX25vZGVMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9jdXJyZW50TmF2aWdhdGlvbkl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLml0ZW1zT3JkZXIgPSBNZW51T3JkZXIuQXNjZW5kaW5nO1xuICAgICAgICB0aGlzLmN1c3RvbUl0ZW1zSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oaWRkZW5DdXN0b21JdGVtc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtQ2xpY2tFdmVudD4oKTtcbiAgICAgICAgdGhpcy5pdGVtTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbUxvYWRlZEV2ZW50PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFBhdGhTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2xlZnRMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9yaWdodExvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX25vZGVMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLml0ZW1DbGlja2VkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuaXRlbUxvYWRlZC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2FuR29CYWNrTG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlTG9hZGluZyQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50UGF0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBjdXJyZW50UGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHBhdGggPT09IHRoaXMuX2N1cnJlbnRQYXRoIHx8IHRoaXMubGVmdExvYWRpbmckLmlzQWN0aXZlIHx8IHRoaXMucmlnaHRMb2FkaW5nJC5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQYXRoID0gcGF0aDtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubm9kZUxvYWRpbmckLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZU1lbnVJdGVtcyhwYXRoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVNZW51SXRlbXMocGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZU1lbnVJdGVtcyhwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHBhdGggPT09IFBhdGhTZXJ2aWNlLlNFUEFSQVRPUikge1xuICAgICAgICAgICAgdGhpcy5fbGVmdEl0ZW1zJC5uZXh0KFtdKVxuICAgICAgICAgICAgdGhpcy5sb2FkUmlnaHRTaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGVmdEl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnJlc291cmNlPy5pbW1lZGlhdGVEYXRhLmZpbmQoZiA9PiBmLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9OT0RFX1BBVEgpPy52YWx1ZSA9PT0gcGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRMZWZ0U2lkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2FkUmlnaHRTaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1DbGlja2VkJCgpOiBFdmVudEVtaXR0ZXI8TWVudUl0ZW1DbGlja0V2ZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1DbGlja2VkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbUxvYWRlZCQoKTogRXZlbnRFbWl0dGVyPE1lbnVJdGVtTG9hZGVkRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUxvYWRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJpZ2h0SXRlbXMkKCk6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxOYXZpZ2F0aW9uSXRlbT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0SXRlbXMkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGVmdEl0ZW1zJCgpOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8TmF2aWdhdGlvbkl0ZW0+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0SXRlbXMkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9yZUl0ZW1zJCgpOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8TmF2aWdhdGlvbkl0ZW0+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb3JlSXRlbXMkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZGVuQ3VzdG9tSXRlbXMkKCk6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxOYXZpZ2F0aW9uSXRlbT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbkN1c3RvbUl0ZW1zJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJpZ2h0SXRlbXMoKTogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0SXRlbXMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsZWZ0SXRlbXMoKTogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRJdGVtcyQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vcmVJdGVtcygpOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9yZUl0ZW1zJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZGVuQ3VzdG9tSXRlbXMoKTogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbkN1c3RvbUl0ZW1zJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGVmdExvYWRpbmckKCk6IExvYWRpbmdFbWl0dGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRMb2FkaW5nJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJpZ2h0TG9hZGluZyQoKTogTG9hZGluZ0VtaXR0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHRMb2FkaW5nJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5vZGVMb2FkaW5nJCgpOiBMb2FkaW5nRW1pdHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlTG9hZGluZyQ7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWROYXZpZ2F0aW9uSXRlbXMobm9kZTogVXJpTm9kZVJlc291cmNlKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoID09PSBQYXRoU2VydmljZS5TRVBBUkFUT1IpIHtcbiAgICAgICAgICAgIHRoaXMuX2xlZnRJdGVtcyQubmV4dChbXSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRSaWdodFNpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGVmdEl0ZW1zJC5nZXRWYWx1ZSgpLmZpbmQoaXRlbSA9PiBEb3VibGVEcmF3ZXJVdGlscy5pc05vZGVDb3JyZXNwb25kaW5nVG9JdGVtKG5vZGUsIGl0ZW0pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZExlZnRTaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRSaWdodFNpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGhvbWUgY2xpY2ssIHRoZSBjdXJyZW50IGxldmVsIGlzIHNldCB0byAwLCBhbmQgY3VycmVudCBwYXJlbnQgaXNcbiAgICAgKiBzZXQgdG8gcm9vdCBub2RlLlxuICAgICAqICovXG4gICAgcHVibGljIG9uSG9tZUNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wYXRoU2VydmljZS5hY3RpdmVQYXRoID0gUGF0aFNlcnZpY2UuU0VQQVJBVE9SO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGJhY2sgY2xpY2ssIHRoZSBwYXJlbnQgaXMgc2V0IHRvIHBhcmVudCBvZiBsZWZ0IG5vZGVzLCB0aGF0IHdpbGwgc29sdmVcbiAgICAgKiB0aGUgcmlnaHQgc2lkZSBtZW51IChlbGVtZW50cyB0aGF0IHdlcmUgaW4gbGVmdCBzaWRlLCBhZnRlciBiYWNrd2FyZFxuICAgICAqIG5hdmlnYXRpb24gd2lsbCBiZSBvbiB0aGUgcmlnaHQgc2lkZSkuXG4gICAgICogQ3VycmVudCBsZXZlbCBpcyBzZXQgdG8gYSBsb3dlciBudW1iZXIgaW4gb3JkZXIgdG8gc2V0IHRoZSBsZWZ0IHNpZGUgbWVudS5cbiAgICAgKiAqL1xuICAgIHB1YmxpYyBvbkJhY2tDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGVmdExvYWRpbmckLmlzQWN0aXZlIHx8IHRoaXMucmlnaHRMb2FkaW5nJC5pc0FjdGl2ZSB8fCB0aGlzLmN1cnJlbnRQYXRoID09PSBQYXRoU2VydmljZS5TRVBBUkFUT1IpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhdGhTZXJ2aWNlLmFjdGl2ZVBhdGggPSB0aGlzLmV4dHJhY3RQYXJlbnQodGhpcy5jdXJyZW50UGF0aCk7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdCh7cGF0aDogdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCwgaXNIb21lOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGl0ZW0gY2xpY2ssIHRoZSBzZWxlY3RlZCBpdGVtJ3MgdmlldyBpcyByZW5kZXJlZCAoYnkgcm91dGVyTGluaykuIElmIHRoZSBzZWxlY3RlZCBpdGVtIGhhcyBjaGlsZHJlbiBpdGVtcywgdGhlIG1lbnUgaXMgdXBkYXRlZFxuICAgICAqIGFuZCB2aWV3LCB0aGF0IGlzIHJlbmRlcmVkIGlzIHNlbGVjdGVkIGJ5IHRoZSBkZWZpbmVkIHJ1bGUuIFRoZSBydWxlIGlzOiBPbiBmaXJzdCBjaGVjayBmb3IgZGVmYXVsdCB2aWV3IGluIGNoaWxkcmVuLlxuICAgICAqIE9uIHNlY29uZCBjaGVjayBpZiB0aGUgY2xpY2tlZCBpdGVtIGhhcyBhIHZpZXcuIE9uIHRoaXJkLCBwaWNrIGFueSBvdGhlciBjaGlsZHJlbidzIHZpZXcsIGVsc2Ugc2hvdyBub3RoaW5nLlxuICAgICAqICovXG4gICAgcHVibGljIG9uSXRlbUNsaWNrKGl0ZW06IE5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIGlmIChpdGVtLnJlc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGN1c3RvbSB2aWV3IHJlcHJlc2VudGVkIG9ubHkgaW4gbmFlLmpzb25cbiAgICAgICAgICAgIGlmIChpdGVtLnByb2Nlc3NVcmkgPT09IHRoaXMuY3VycmVudFBhdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXRoU2VydmljZS5hY3RpdmVQYXRoID0gdGhpcy5jdXJyZW50UGF0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCA9IHRoaXMuZXh0cmFjdFBhcmVudCh0aGlzLmN1cnJlbnRQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdCh7cGF0aDogdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCwgaXNIb21lOiBmYWxzZX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IGl0ZW0ucmVzb3VyY2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIKT8udmFsdWVcblxuICAgICAgICAgICAgaWYgKERvdWJsZURyYXdlclV0aWxzLmhhc0l0ZW1DaGlsZHJlbihpdGVtKSAmJiAhdGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgJiYgIXRoaXMucmlnaHRMb2FkaW5nJC5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhdGhTZXJ2aWNlLmFjdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdCh7cGF0aDogdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCwgaXNIb21lOiBmYWxzZX0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0TG9hZGluZyQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGlzUmlnaHRMb2FkaW5nID0+IGlzUmlnaHRMb2FkaW5nID09PSBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkF2YWlsYWJsZVZpZXcoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICghcGF0aC5pbmNsdWRlcyh0aGlzLmN1cnJlbnRQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhdGhTZXJ2aWNlLmFjdGl2ZVBhdGggPSB0aGlzLmV4dHJhY3RQYXJlbnQodGhpcy5jdXJyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZC5lbWl0KHtwYXRoOiB0aGlzLl9wYXRoU2VydmljZS5hY3RpdmVQYXRoLCBpc0hvbWU6IGZhbHNlfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCA9IHRoaXMuY3VycmVudFBhdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZC5lbWl0KHtwYXRoOiB0aGlzLl9wYXRoU2VydmljZS5hY3RpdmVQYXRoLCBpc0hvbWU6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgdmlldyBvZiB0aGUgY3VycmVudCByaWdodCBpdGVtcyBpbiB0aGUgbWVudSBieSBkZWZpbmVkIHJ1bGUuIFRoZSBydWxlIGlzOiBPbiBmaXJzdCBjaGVjayBmb3IgZGVmYXVsdFxuICAgICAqIHZpZXcgaW4gY2hpbGRyZW4uIE9uIHNlY29uZCBjaGVjayBpZiB0aGUgY2xpY2tlZCBpdGVtIGhhcyBhIHZpZXcuIE9uIHRoaXJkLCBwaWNrIGFueSBvdGhlciBjaGlsZHJlbidzIHZpZXcsIGVsc2VcbiAgICAgKiBzaG93IG5vdGhpbmcuXG4gICAgICogKi9cbiAgICBwdWJsaWMgb3BlbkF2YWlsYWJsZVZpZXcoKSB7XG4gICAgICAgIGxldCBhbGxJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+ID0gdGhpcy5yaWdodEl0ZW1zLmNvbmNhdCh0aGlzLm1vcmVJdGVtcyk7XG5cbiAgICAgICAgbGV0IGF1dG9PcGVuSXRlbXM6IEFycmF5PE5hdmlnYXRpb25JdGVtPiA9IGFsbEl0ZW1zLmZpbHRlcihpdGVtID0+IERvdWJsZURyYXdlclV0aWxzLmhhc0l0ZW1BdXRvT3BlblZpZXcoaXRlbSkpO1xuICAgICAgICBpZiAoYXV0b09wZW5JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWRpcmVjdFNlcnZpY2UucmVkaXJlY3QoYXV0b09wZW5JdGVtc1swXS5yb3V0aW5nLnBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKERvdWJsZURyYXdlclV0aWxzLmhhc0l0ZW1WaWV3KHRoaXMuX2N1cnJlbnROYXZpZ2F0aW9uSXRlbSkpIHtcbiAgICAgICAgICAgIC8vIGlzIHJvdXRlZCBieSByb3V0ZXJMaW5rIG9uIGl0ZW0gY2xpY2tcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpdGVtc1dpdGhWaWV3OiBBcnJheTxOYXZpZ2F0aW9uSXRlbT4gPSBhbGxJdGVtcy5maWx0ZXIoaXRlbSA9PiBEb3VibGVEcmF3ZXJVdGlscy5oYXNJdGVtVmlldyhpdGVtKSk7XG4gICAgICAgIGlmIChpdGVtc1dpdGhWaWV3Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZGlyZWN0U2VydmljZS5yZWRpcmVjdChhdXRvT3Blbkl0ZW1zWzBdLnJvdXRpbmcucGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZE1vcmVJdGVtcygpIHtcbiAgICAgICAgaWYgKHRoaXMubW9yZUl0ZW1zLmxlbmd0aCA+IFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRSaWdodEl0ZW1zID0gdGhpcy5yaWdodEl0ZW1zO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRNb3JlSXRlbXMgPSB0aGlzLm1vcmVJdGVtcztcbiAgICAgICAgICAgIGN1cnJlbnRSaWdodEl0ZW1zLnB1c2goLi4uY3VycmVudE1vcmVJdGVtcy5zcGxpY2UoMCwgUklHSFRfU0lERV9ORVdfUEFHRV9TSVpFKSk7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMkLm5leHQoY3VycmVudFJpZ2h0SXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5tb3JlSXRlbXMkLm5leHQoY3VycmVudE1vcmVJdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudFJpZ2h0SXRlbXMgPSB0aGlzLnJpZ2h0SXRlbXM7XG4gICAgICAgICAgICBjdXJyZW50UmlnaHRJdGVtcy5wdXNoKC4uLnRoaXMubW9yZUl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcyQubmV4dChjdXJyZW50UmlnaHRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyQubmV4dChbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZUN1c3RvbVZpZXdzT2ZWaWV3KHZpZXc6IFZpZXcsIHZpZXdDb25maWdQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF2aWV3IHx8IHRoaXMuY3VzdG9tSXRlbXNJbml0aWFsaXplZCB8fCB0aGlzLmhpZGRlbkN1c3RvbUl0ZW1zSW5pdGlhbGl6ZWQpIHJldHVybjtcblxuICAgICAgICBPYmplY3QuZW50cmllcyh2aWV3LmNoaWxkcmVuKS5mb3JFYWNoKChba2V5LCBjaGlsZFZpZXddKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFZpZXdDb25maWdQYXRoOiBzdHJpbmcgPSB2aWV3Q29uZmlnUGF0aCArICcvJyArIGtleTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVVyaUZvckNoaWxkVmlld3MoY2hpbGRWaWV3Q29uZmlnUGF0aCwgY2hpbGRWaWV3KTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUhpZGRlbk1lbnVJdGVtRnJvbUNoaWxkVmlld3MoY2hpbGRWaWV3Q29uZmlnUGF0aCwgY2hpbGRWaWV3KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpO1xuICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luTGVmdFNpZGUoKTtcblxuICAgICAgICB0aGlzLmN1c3RvbUl0ZW1zSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhpZGRlbkN1c3RvbUl0ZW1zSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzd2l0Y2hPcmRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtc09yZGVyID0gKHRoaXMuaXRlbXNPcmRlciArIDEpICUgMjtcbiAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAxO1xuICAgICAgICBpZiAodGhpcy5pdGVtc09yZGVyID09PSBNZW51T3JkZXIuRGVzY2VuZGluZykge1xuICAgICAgICAgICAgbXVsdGlwbGllciA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdXJyZW50UmlnaHRJdGVtcyA9IHRoaXMucmlnaHRJdGVtcztcbiAgICAgICAgbGV0IGN1cnJlbnRMZWZ0SXRlbXMgPSB0aGlzLmxlZnRJdGVtcztcbiAgICAgICAgY3VycmVudFJpZ2h0SXRlbXMuc29ydCgoYSwgYikgPT4gbXVsdGlwbGllciAqIChhPy5uYXZpZ2F0aW9uIGFzIE5hdmlnYXRpb25JdGVtKT8udGl0bGUubG9jYWxlQ29tcGFyZSgoYj8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlKSk7XG4gICAgICAgIGN1cnJlbnRMZWZ0SXRlbXMuc29ydCgoYSwgYikgPT4gbXVsdGlwbGllciAqIChhPy5uYXZpZ2F0aW9uIGFzIE5hdmlnYXRpb25JdGVtKT8udGl0bGUubG9jYWxlQ29tcGFyZSgoYj8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlKSk7XG4gICAgICAgIHRoaXMucmlnaHRJdGVtcyQubmV4dChjdXJyZW50UmlnaHRJdGVtcyk7XG4gICAgICAgIHRoaXMubGVmdEl0ZW1zJC5uZXh0KGN1cnJlbnRMZWZ0SXRlbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FzY2VuZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNPcmRlciA9PT0gTWVudU9yZGVyLkFzY2VuZGluZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZExlZnRTaWRlKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGF0aCA9PT0gUGF0aFNlcnZpY2UuU0VQQVJBVE9SKSB7XG4gICAgICAgICAgICB0aGlzLl9sZWZ0SXRlbXMkLm5leHQoW10pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub24oKTtcblxuICAgICAgICB0aGlzLmdldEl0ZW1DYXNlQnlQYXRoKHRoaXMuZXh0cmFjdFBhcmVudCh0aGlzLmN1cnJlbnRQYXRoKSkuc3Vic2NyaWJlKHBhZ2UgPT4ge1xuICAgICAgICAgICAgbGV0IGNoaWxkQ2FzZXMkO1xuICAgICAgICAgICAgbGV0IHRhcmdldEl0ZW07XG4gICAgICAgICAgICBsZXQgb3JkZXJlZENoaWxkQ2FzZUlkcztcblxuICAgICAgICAgICAgaWYgKHBhZ2U/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjaGlsZENhc2VzJCA9IG9mKFtdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0SXRlbSA9IHBhZ2UuY29udGVudFswXTtcbiAgICAgICAgICAgICAgICBvcmRlcmVkQ2hpbGRDYXNlSWRzID0gRG91YmxlRHJhd2VyVXRpbHMuZXh0cmFjdENoaWxkQ2FzZUlkcyh0YXJnZXRJdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAob3JkZXJlZENoaWxkQ2FzZUlkcyA9PSB1bmRlZmluZWQgfHwgb3JkZXJlZENoaWxkQ2FzZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSBvZihbXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSB0aGlzLmdldEl0ZW1DYXNlc0J5SWRzSW5PbmVQYWdlKG9yZGVyZWRDaGlsZENhc2VJZHMpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAocCA9PiBwLmNvbnRlbnQpLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRDYXNlcyQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm1hcChmb2xkZXIgPT4gdGhpcy5yZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGZvbGRlcikpLmZpbHRlcihpID0+ICEhaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVmdEl0ZW1zJC5uZXh0KHJlc3VsdC5zb3J0KChhLCBiKSA9PiBvcmRlcmVkQ2hpbGRDYXNlSWRzLmluZGV4T2YoYS5yZXNvdXJjZS5zdHJpbmdJZCkgLSBvcmRlcmVkQ2hpbGRDYXNlSWRzLmluZGV4T2YoYi5yZXNvdXJjZS5zdHJpbmdJZCkpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luTGVmdFNpZGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtTG9hZGVkLmVtaXQoe21lbnU6ICdsZWZ0JywgaXRlbXM6IHRoaXMubGVmdEl0ZW1zfSk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWZ0SXRlbXMkLm5leHQoW10pXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLl9sZWZ0SXRlbXMkLm5leHQoW10pXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luTGVmdFNpZGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2xlZnRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRSaWdodFNpZGUoKSB7XG4gICAgICAgIHRoaXMuX3JpZ2h0TG9hZGluZyQub24oKTtcbiAgICAgICAgdGhpcy5fbW9yZUl0ZW1zJC5uZXh0KFtdKVxuXG4gICAgICAgIHRoaXMuZ2V0SXRlbUNhc2VCeVBhdGgodGhpcy5jdXJyZW50UGF0aCkuc3Vic2NyaWJlKHBhZ2UgPT4ge1xuICAgICAgICAgICAgbGV0IGNoaWxkQ2FzZXMkO1xuICAgICAgICAgICAgbGV0IHRhcmdldEl0ZW07XG4gICAgICAgICAgICBsZXQgb3JkZXJlZENoaWxkQ2FzZUlkcztcblxuICAgICAgICAgICAgaWYgKHBhZ2U/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjaGlsZENhc2VzJCA9IG9mKFtdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0SXRlbSA9IHBhZ2U/LmNvbnRlbnRbMF07XG4gICAgICAgICAgICAgICAgb3JkZXJlZENoaWxkQ2FzZUlkcyA9IERvdWJsZURyYXdlclV0aWxzLmV4dHJhY3RDaGlsZENhc2VJZHModGFyZ2V0SXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKG9yZGVyZWRDaGlsZENhc2VJZHMgPT09IHVuZGVmaW5lZCB8fCBvcmRlcmVkQ2hpbGRDYXNlSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZENhc2VzJCA9IG9mKFtdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZENhc2VzJCA9IHRoaXMuZ2V0SXRlbUNhc2VzQnlJZHNJbk9uZVBhZ2Uob3JkZXJlZENoaWxkQ2FzZUlkcykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcChwID0+IHAuY29udGVudCksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZENhc2VzJC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IGFzIENhc2VbXSkuc29ydCgoYSwgYikgPT4gb3JkZXJlZENoaWxkQ2FzZUlkcy5pbmRleE9mKGEuc3RyaW5nSWQpIC0gb3JkZXJlZENoaWxkQ2FzZUlkcy5pbmRleE9mKGIuc3RyaW5nSWQpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IFJJR0hUX1NJREVfSU5JVF9QQUdFX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3UmlnaHRJdGVtczogQ2FzZVtdID0gcmVzdWx0LnNwbGljZSgwLCBSSUdIVF9TSURFX0lOSVRfUEFHRV9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRJdGVtcyQubmV4dChyYXdSaWdodEl0ZW1zLm1hcChmb2xkZXIgPT4gdGhpcy5yZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGZvbGRlcikpLmZpbHRlcihpID0+ICEhaSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3JlSXRlbXMkLm5leHQocmVzdWx0Lm1hcChmb2xkZXIgPT4gdGhpcy5yZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGZvbGRlcikpLmZpbHRlcihpID0+ICEhaSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0SXRlbXMkLm5leHQocmVzdWx0Lm1hcChmb2xkZXIgPT4gdGhpcy5yZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGZvbGRlcikpLmZpbHRlcihpID0+ICEhaSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luUmlnaHRTaWRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Mb2FkZWQuZW1pdCh7bWVudTogJ3JpZ2h0JywgaXRlbXM6IHRoaXMucmlnaHRJdGVtc30pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQXZhaWxhYmxlVmlldygpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRJdGVtcyQubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9yZUl0ZW1zJC5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVDdXN0b21WaWV3c0luUmlnaHRTaWRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fcmlnaHRJdGVtcyQubmV4dChbXSk7XG4gICAgICAgICAgICB0aGlzLl9tb3JlSXRlbXMkLm5leHQoW10pO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1DYXNlc0J5SWRzSW5PbmVQYWdlKGNhc2VJZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxQYWdlPENhc2U+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1DYXNlc0J5SWRzKGNhc2VJZHMsIDAsIGNhc2VJZHMubGVuZ3RoKTtcbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtQ2FzZXNCeUlkcyhjYXNlSWRzOiBzdHJpbmdbXSwgcGFnZU51bWJlcjogbnVtYmVyLCBwYWdlU2l6ZTogc3RyaW5nIHwgbnVtYmVyKTogT2JzZXJ2YWJsZTxQYWdlPENhc2U+PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaEJvZHk6IENhc2VTZWFyY2hSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIGlkOiBjYXNlSWRzLFxuICAgICAgICAgICAgcHJvY2VzczogTUVOVV9JREVOVElGSUVSUy5tYXAoaWQgPT4gKHtpZGVudGlmaWVyOiBpZH0gYXMgUGV0cmlOZXRTZWFyY2hSZXF1ZXN0KSksXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgICAgICAuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9TSVpFLCBwYWdlU2l6ZSlcbiAgICAgICAgICAgIC5zZXQoUGFnaW5hdGlvblBhcmFtcy5QQUdFX05VTUJFUiwgcGFnZU51bWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLnNlYXJjaENhc2VzKFNpbXBsZUZpbHRlci5mcm9tQ2FzZVF1ZXJ5KHNlYXJjaEJvZHkpLCBodHRwUGFyYW1zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShpdGVtQ2FzZTogQ2FzZSk6IE5hdmlnYXRpb25JdGVtIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKERvdWJsZURyYXdlclV0aWxzLnJlcHJlc2VudHNSb290Tm9kZShpdGVtQ2FzZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtOiBOYXZpZ2F0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgIGFjY2Vzczoge30sXG4gICAgICAgICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgaWNvbjogaXRlbUNhc2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTUVOVV9JQ09OKT8udmFsdWUgfHwgdGhpcy5kZWZhdWx0Vmlld0ljb24sXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0VHJhbnNsYXRpb24oaXRlbUNhc2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTUVOVV9OQU1FKT8udmFsdWUpIHx8IGl0ZW1DYXNlLnRpdGxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJvdXRpbmc6IHtcbiAgICAgICAgICAgICAgICBwYXRoOiB0aGlzLmdldEl0ZW1Sb3V0aW5nUGF0aChpdGVtQ2FzZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWQ6IGl0ZW1DYXNlLnN0cmluZ0lkLFxuICAgICAgICAgICAgcmVzb3VyY2U6IGl0ZW1DYXNlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNvbHZlZFJvbGVzID0gRG91YmxlRHJhd2VyVXRpbHMucmVzb2x2ZUFjY2Vzc1JvbGVzKGl0ZW1DYXNlLCBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9BTExPV0VEX1JPTEVTKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRCYW5uZWRSb2xlcyA9IERvdWJsZURyYXdlclV0aWxzLnJlc29sdmVBY2Nlc3NSb2xlcyhpdGVtQ2FzZSwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfQkFOTkVEX1JPTEVTKTtcbiAgICAgICAgaWYgKCEhcmVzb2x2ZWRSb2xlcykgaXRlbS5hY2Nlc3NbJ3JvbGUnXSA9IHJlc29sdmVkUm9sZXM7XG4gICAgICAgIGlmICghIXJlc29sdmVkQmFubmVkUm9sZXMpIGl0ZW0uYWNjZXNzWydiYW5uZWRSb2xlJ10gPSByZXNvbHZlZEJhbm5lZFJvbGVzO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzc1NlcnZpY2UuY2FuQWNjZXNzVmlldyhpdGVtLCBpdGVtLnJvdXRpbmc/LnBhdGgpKSByZXR1cm47XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKCkge1xuICAgICAgICBpZiAoISF0aGlzLmV4dHJhY3RQYXJlbnQodGhpcy5jdXJyZW50UGF0aCkgJiYgISF0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW3RoaXMuZXh0cmFjdFBhcmVudCh0aGlzLmN1cnJlbnRQYXRoKV0pIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50TGVmdEl0ZW1zID0gdGhpcy5fbGVmdEl0ZW1zJC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgY3VycmVudExlZnRJdGVtcy5wdXNoKC4uLk9iamVjdC52YWx1ZXModGhpcy5fY2hpbGRDdXN0b21WaWV3c1t0aGlzLmV4dHJhY3RQYXJlbnQodGhpcy5jdXJyZW50UGF0aCldKSk7XG4gICAgICAgICAgICB0aGlzLl9sZWZ0SXRlbXMkLm5leHQoY3VycmVudExlZnRJdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUN1c3RvbVZpZXdzSW5SaWdodFNpZGUoKSB7XG4gICAgICAgIGlmICghIXRoaXMuX2N1cnJlbnRQYXRoICYmICEhdGhpcy5fY2hpbGRDdXN0b21WaWV3c1t0aGlzLl9jdXJyZW50UGF0aF0pIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UmlnaHRJdGVtcyA9IHRoaXMuX3JpZ2h0SXRlbXMkLmdldFZhbHVlKCk7XG4gICAgICAgICAgICBjdXJyZW50UmlnaHRJdGVtcy5wdXNoKC4uLk9iamVjdC52YWx1ZXModGhpcy5fY2hpbGRDdXN0b21WaWV3c1t0aGlzLl9jdXJyZW50UGF0aF0pKTtcbiAgICAgICAgICAgIHRoaXMuX3JpZ2h0SXRlbXMkLm5leHQoY3VycmVudFJpZ2h0SXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVVcmlGb3JDaGlsZFZpZXdzKGNvbmZpZ1BhdGg6IHN0cmluZywgY2hpbGRWaWV3OiBWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICghY2hpbGRWaWV3LnByb2Nlc3NVcmkpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcoY2hpbGRWaWV3LCBjb25maWdQYXRoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbY2hpbGRWaWV3LnByb2Nlc3NVcmldKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW2NoaWxkVmlldy5wcm9jZXNzVXJpXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbY2hpbGRWaWV3LnByb2Nlc3NVcmldW2NvbmZpZ1BhdGhdID0ge1xuICAgICAgICAgICAgaWQ6IGNvbmZpZ1BhdGgsXG4gICAgICAgICAgICAuLi5jaGlsZFZpZXcsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVIaWRkZW5NZW51SXRlbUZyb21DaGlsZFZpZXdzKGNvbmZpZ1BhdGg6IHN0cmluZywgY2hpbGRWaWV3OiBWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICghY2hpbGRWaWV3Lm5hdmlnYXRpb24pIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcoY2hpbGRWaWV3LCBjb25maWdQYXRoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoISEoKGNoaWxkVmlldz8ubmF2aWdhdGlvbiBhcyBhbnkpPy5oaWRkZW4pKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudEhpZGRlbkN1c3RvbUl0ZW1zID0gdGhpcy5faGlkZGVuQ3VzdG9tSXRlbXMkLmdldFZhbHVlKCk7XG4gICAgICAgICAgICBjdXJyZW50SGlkZGVuQ3VzdG9tSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IGNvbmZpZ1BhdGgsXG4gICAgICAgICAgICAgICAgLi4uY2hpbGRWaWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9oaWRkZW5DdXN0b21JdGVtcyQubmV4dChjdXJyZW50SGlkZGVuQ3VzdG9tSXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRyYW5zbGF0aW9uKHZhbHVlOiBJMThuRmllbGRWYWx1ZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZSBpbiB2YWx1ZS50cmFuc2xhdGlvbnMgPyB2YWx1ZS50cmFuc2xhdGlvbnNbbG9jYWxlXSA6IHZhbHVlLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SXRlbVJvdXRpbmdQYXRoKGl0ZW1DYXNlOiBDYXNlKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZCA9IERvdWJsZURyYXdlclV0aWxzLmZpbmRUYXNrSWRJbkNhc2UoaXRlbUNhc2UsIFNFVFRJTkdTX1RSQU5TSVRJT05fSUQpO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9keW5hbWljUm91dGluZ1NlcnZpY2Uucm91dGU7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHVybC5zdGFydHNXaXRoKCcvJykgPyAnJyA6ICcvJztcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke3VybH0vJHt0YXNrSWR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NMZWZ0SXRlbXMoY2FzZXM6IENhc2VbXSwgb3JkZXJlZENoaWxkQ2FzZUlkczogc3RyaW5nW10pOiBOYXZpZ2F0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FzZXNcbiAgICAgICAgICAgIC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKVxuICAgICAgICAgICAgLmZpbHRlcihpID0+ICEhaSk7XG4gICAgICAgIHJldHVybiByZXN1bHQuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgIG9yZGVyZWRDaGlsZENhc2VJZHMuaW5kZXhPZihhLnJlc291cmNlLnN0cmluZ0lkKSAtIG9yZGVyZWRDaGlsZENhc2VJZHMuaW5kZXhPZihiLnJlc291cmNlLnN0cmluZ0lkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGNhc2UgaXRlbSBiYXNlZCBvbiB0aGUgZ2l2ZW4gcGF0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhdIC0gVGhlIGlkZW50aWZpZXIgcGF0aCB0byBsb2NhdGUgdGhlIHNwZWNpZmljIGNhc2UgaXRlbS4gSWYgdW5kZWZpbmVkLCBpdCBkZWZhdWx0cyB0byBzZWFyY2hpbmcgd2l0aG91dCBhIHNwZWNpZmljIHBhdGguXG4gICAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYWdlPENhc2U+Pn0gQW4gb2JzZXJ2YWJsZSBzdHJlYW0gY29udGFpbmluZyB0aGUgcGFnZSBvZiBjYXNlIGl0ZW1zIHdoaWNoIG1hdGNoIHRoZSBwcm92aWRlZCBwYXRoLlxuICAgICAqL1xuICAgIGdldEl0ZW1DYXNlQnlQYXRoKHBhdGg/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFBhZ2U8Q2FzZT4+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoQm9keTogQ2FzZVNlYXJjaFJlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIFtHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9OT0RFX1BBVEhdOiBwYXRoXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2Vzczoge2lkZW50aWZpZXI6IFwibWVudV9pdGVtXCJ9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgICAgICAuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9TSVpFLCAxKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfTlVNQkVSLCAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nhc2VSZXNvdXJjZVNlcnZpY2Uuc2VhcmNoQ2FzZXMoU2ltcGxlRmlsdGVyLmZyb21DYXNlUXVlcnkoc2VhcmNoQm9keSksIGh0dHBQYXJhbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdFBhcmVudChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAocGF0aCA9PT0gJy8nKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC5sYXN0SW5kZXhPZignLycpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJy8nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKCcvJykpO1xuICAgIH1cblxuXG59XG4iXX0=
551
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlLWRyYXdlci1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL25hdmlnYXRpb24vbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyL3NlcnZpY2UvZG91YmxlLWRyYXdlci1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUMvRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFZbEUsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBRVQseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDekIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUd4QyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7OztBQUd2RDs7S0FFSztBQUlMLE1BQU0sT0FBTyw2QkFBNkI7SUEyQ3hCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNB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cG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMb2FkaW5nRW1pdHRlcn0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyXCI7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCB0YWtlfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7Q2FzZX0gZnJvbSBcIi4uLy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvY2FzZVwiO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0RvdWJsZURyYXdlclV0aWxzfSBmcm9tIFwiLi4vdXRpbC9kb3VibGUtZHJhd2VyLXV0aWxzXCI7XG5pbXBvcnQge1BhZ2V9IGZyb20gXCIuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL3BhZ2VcIjtcbmltcG9ydCB7Q2FzZVNlYXJjaFJlcXVlc3RCb2R5LCBQZXRyaU5ldFNlYXJjaFJlcXVlc3R9IGZyb20gXCIuLi8uLi8uLi9maWx0ZXIvbW9kZWxzL2Nhc2Utc2VhcmNoLXJlcXVlc3QtYm9keVwiO1xuaW1wb3J0IHtIdHRwUGFyYW1zfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7UGFnaW5hdGlvblBhcmFtc30gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdHkvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLXBhcmFtc1wiO1xuaW1wb3J0IHtTaW1wbGVGaWx0ZXJ9IGZyb20gXCIuLi8uLi8uLi9maWx0ZXIvbW9kZWxzL3NpbXBsZS1maWx0ZXJcIjtcbmltcG9ydCB7Q2FzZVJlc291cmNlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvY2FzZS1yZXNvdXJjZS5zZXJ2aWNlXCI7XG5pbXBvcnQge0kxOG5GaWVsZFZhbHVlfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS1maWVsZHMvaTE4bi1maWVsZC9tb2RlbHMvaTE4bi1maWVsZC12YWx1ZVwiO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlXG59IGZyb20gXCIuLi8uLi8uLi9yb3V0aW5nL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci9keW5hbWljLW5hdmlnYXRpb24tcm91dGUtcHJvdmlkZXIuc2VydmljZVwiO1xuaW1wb3J0IHtSZWRpcmVjdFNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9yb3V0aW5nL3JlZGlyZWN0LXNlcnZpY2UvcmVkaXJlY3Quc2VydmljZVwiO1xuaW1wb3J0IHtBY2Nlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uL2FjY2Vzcy5zZXJ2aWNlXCI7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7Vmlld30gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbnMvc2NoZW1hXCI7XG5pbXBvcnQge1xuICAgIE1FTlVfSURFTlRJRklFUlMsXG4gICAgTWVudU9yZGVyLFxuICAgIE5hdmlnYXRpb25JdGVtLFxuICAgIFJJR0hUX1NJREVfSU5JVF9QQUdFX1NJWkUsXG4gICAgUklHSFRfU0lERV9ORVdfUEFHRV9TSVpFLFxuICAgIFNFVFRJTkdTX1RSQU5TSVRJT05fSURcbn0gZnJvbSAnLi4vLi4vbW9kZWwvbmF2aWdhdGlvbi1jb25maWdzJztcbmltcG9ydCB7VXJpTm9kZVJlc291cmNlfSBmcm9tICcuLi8uLi9tb2RlbC91cmktcmVzb3VyY2UnO1xuaW1wb3J0IHtNZW51SXRlbUNsaWNrRXZlbnQsIE1lbnVJdGVtTG9hZGVkRXZlbnR9IGZyb20gJy4uLy4uL21vZGVsL25hdmlnYXRpb24tbWVudS1ldmVudHMnO1xuaW1wb3J0IHtHcm91cE5hdmlnYXRpb25Db25zdGFudHN9IGZyb20gXCIuLi8uLi9tb2RlbC9ncm91cC1uYXZpZ2F0aW9uLWNvbnN0YW50c1wiO1xuaW1wb3J0IHtQYXRoU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvcGF0aC5zZXJ2aWNlXCI7XG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vdXNlci9zZXJ2aWNlcy91c2VyLnNlcnZpY2VcIjtcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBtYW5hZ2luZyBuYXZpZ2F0aW9uIGluIGRvdWJsZS1kcmF3ZXJcbiAqICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEb3VibGVEcmF3ZXJOYXZpZ2F0aW9uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGRpc3BsYXllZCBpdGVtcyBvbiB0aGUgbGVmdCBzaWRlXG4gICAgICogKi9cbiAgICBwcm90ZWN0ZWQgX2xlZnRJdGVtcyQ6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxOYXZpZ2F0aW9uSXRlbT4+O1xuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgZGlzcGxheWVkIGl0ZW1zIG9uIHRoZSByaWdodCBzaWRlXG4gICAgICogKi9cbiAgICBwcm90ZWN0ZWQgX3JpZ2h0SXRlbXMkOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8TmF2aWdhdGlvbkl0ZW0+PjtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGhpZGRlbiBpdGVtc1xuICAgICAqICovXG4gICAgcHJvdGVjdGVkIF9tb3JlSXRlbXMkOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8TmF2aWdhdGlvbkl0ZW0+PjtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGN1c3RvbSBpdGVtcyBpbiBtb3JlIG1lbnVcbiAgICAgKiAqL1xuICAgIHByb3RlY3RlZCBfaGlkZGVuQ3VzdG9tSXRlbXMkOiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8TmF2aWdhdGlvbkl0ZW0+PjtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGN1c3RvbSBpdGVtc1xuICAgICAqICovXG4gICAgcHJvdGVjdGVkIF9jaGlsZEN1c3RvbVZpZXdzOiB7IFt1cmk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogTmF2aWdhdGlvbkl0ZW0gfSB9O1xuICAgIHByb3RlY3RlZCBpdGVtc09yZGVyOiBNZW51T3JkZXI7XG4gICAgcHJvdGVjdGVkIF9sZWZ0TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHByb3RlY3RlZCBfcmlnaHRMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgcHJvdGVjdGVkIF9ub2RlTG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHByb3RlY3RlZCBfY3VycmVudFBhdGhTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICAvKipcbiAgICAgKiBDdXJyZW50bHkgZGlzcGxheSB1cmlcbiAgICAgKiBTaWJsaW5ncyBvZiB0aGUgbm9kZSBhcmUgb24gdGhlIGxlZnQsIGNoaWxkcmVuIGFyZSBvbiB0aGUgcmlnaHRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnRQYXRoOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQ3VycmVudGx5IHNlbGVjdGVkIG5hdmlnYXRpb24gaXRlbVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfY3VycmVudE5hdmlnYXRpb25JdGVtOiBOYXZpZ2F0aW9uSXRlbTtcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFZpZXdJY29uOiBzdHJpbmcgPSAnZmlsdGVyX2FsdCc7XG4gICAgcHJvdGVjdGVkIGN1c3RvbUl0ZW1zSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIGhpZGRlbkN1c3RvbUl0ZW1zSW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIGl0ZW1DbGlja2VkOiBFdmVudEVtaXR0ZXI8TWVudUl0ZW1DbGlja0V2ZW50PjtcbiAgICBwcm90ZWN0ZWQgaXRlbUxvYWRlZDogRXZlbnRFbWl0dGVyPE1lbnVJdGVtTG9hZGVkRXZlbnQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2NvbmZpZzogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcm90ZWN0ZWQgX2Nhc2VSZXNvdXJjZVNlcnZpY2U6IENhc2VSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfYWNjZXNzU2VydmljZTogQWNjZXNzU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2R5bmFtaWNSb3V0aW5nU2VydmljZTogRHluYW1pY05hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9yZWRpcmVjdFNlcnZpY2U6IFJlZGlyZWN0U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9wYXRoU2VydmljZTogUGF0aFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICB0aGlzLl9sZWZ0SXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gICAgICAgIHRoaXMuX3JpZ2h0SXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gICAgICAgIHRoaXMuX21vcmVJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgICAgICAgdGhpcy5faGlkZGVuQ3VzdG9tSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gICAgICAgIHRoaXMuX2NoaWxkQ3VzdG9tVmlld3MgPSB7fTtcbiAgICAgICAgdGhpcy5fbGVmdExvYWRpbmckID0gbmV3IExvYWRpbmdFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX3JpZ2h0TG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5fbm9kZUxvYWRpbmckID0gbmV3IExvYWRpbmdFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnROYXZpZ2F0aW9uSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMuaXRlbXNPcmRlciA9IE1lbnVPcmRlci5Bc2NlbmRpbmc7XG4gICAgICAgIHRoaXMuY3VzdG9tSXRlbXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhpZGRlbkN1c3RvbUl0ZW1zSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudUl0ZW1DbGlja0V2ZW50PigpO1xuICAgICAgICB0aGlzLml0ZW1Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtTG9hZGVkRXZlbnQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50UGF0aFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fbGVmdExvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3JpZ2h0TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fbm9kZUxvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5pdGVtTG9hZGVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjYW5Hb0JhY2tMb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVMb2FkaW5nJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGF0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGN1cnJlbnRQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBpZiAocGF0aCA9PT0gdGhpcy5fY3VycmVudFBhdGggfHwgdGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudFBhdGggPSBwYXRoO1xuICAgICAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ub2RlTG9hZGluZyQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZUxvYWRpbmckLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTWVudUl0ZW1zKHBhdGgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZU1lbnVJdGVtcyhwYXRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlTWVudUl0ZW1zKHBhdGg6IHN0cmluZykge1xuICAgICAgICBpZiAocGF0aCA9PT0gUGF0aFNlcnZpY2UuU0VQQVJBVE9SKSB7XG4gICAgICAgICAgICB0aGlzLl9sZWZ0SXRlbXMkLm5leHQoW10pXG4gICAgICAgICAgICB0aGlzLmxvYWRSaWdodFNpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5sZWZ0SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucmVzb3VyY2U/LmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCk/LnZhbHVlID09PSBwYXRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZExlZnRTaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRSaWdodFNpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbUNsaWNrZWQkKCk6IEV2ZW50RW1pdHRlcjxNZW51SXRlbUNsaWNrRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUNsaWNrZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtTG9hZGVkJCgpOiBFdmVudEVtaXR0ZXI8TWVudUl0ZW1Mb2FkZWRFdmVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtTG9hZGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmlnaHRJdGVtcyQoKTogQmVoYXZpb3JTdWJqZWN0PEFycmF5PE5hdmlnYXRpb25JdGVtPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHRJdGVtcyQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsZWZ0SXRlbXMkKCk6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxOYXZpZ2F0aW9uSXRlbT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRJdGVtcyQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb3JlSXRlbXMkKCk6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxOYXZpZ2F0aW9uSXRlbT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vcmVJdGVtcyQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRkZW5DdXN0b21JdGVtcyQoKTogQmVoYXZpb3JTdWJqZWN0PEFycmF5PE5hdmlnYXRpb25JdGVtPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuQ3VzdG9tSXRlbXMkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmlnaHRJdGVtcygpOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHRJdGVtcyQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxlZnRJdGVtcygpOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVmdEl0ZW1zJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9yZUl0ZW1zKCk6IEFycmF5PE5hdmlnYXRpb25JdGVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb3JlSXRlbXMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRkZW5DdXN0b21JdGVtcygpOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuQ3VzdG9tSXRlbXMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsZWZ0TG9hZGluZyQoKTogTG9hZGluZ0VtaXR0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVmdExvYWRpbmckO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmlnaHRMb2FkaW5nJCgpOiBMb2FkaW5nRW1pdHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yaWdodExvYWRpbmckO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbm9kZUxvYWRpbmckKCk6IExvYWRpbmdFbWl0dGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVMb2FkaW5nJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZE5hdmlnYXRpb25JdGVtcyhub2RlOiBVcmlOb2RlUmVzb3VyY2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGggPT09IFBhdGhTZXJ2aWNlLlNFUEFSQVRPUikge1xuICAgICAgICAgICAgdGhpcy5fbGVmdEl0ZW1zJC5uZXh0KFtdKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFJpZ2h0U2lkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9sZWZ0SXRlbXMkLmdldFZhbHVlKCkuZmluZChpdGVtID0+IERvdWJsZURyYXdlclV0aWxzLmlzTm9kZUNvcnJlc3BvbmRpbmdUb0l0ZW0obm9kZSwgaXRlbSkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTGVmdFNpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZFJpZ2h0U2lkZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gaG9tZSBjbGljaywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgc2V0IHRvIDAsIGFuZCBjdXJyZW50IHBhcmVudCBpc1xuICAgICAqIHNldCB0byByb290IG5vZGUuXG4gICAgICogKi9cbiAgICBwdWJsaWMgb25Ib21lQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxlZnRMb2FkaW5nJC5pc0FjdGl2ZSB8fCB0aGlzLnJpZ2h0TG9hZGluZyQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BhdGhTZXJ2aWNlLmFjdGl2ZVBhdGggPSBQYXRoU2VydmljZS5TRVBBUkFUT1I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gYmFjayBjbGljaywgdGhlIHBhcmVudCBpcyBzZXQgdG8gcGFyZW50IG9mIGxlZnQgbm9kZXMsIHRoYXQgd2lsbCBzb2x2ZVxuICAgICAqIHRoZSByaWdodCBzaWRlIG1lbnUgKGVsZW1lbnRzIHRoYXQgd2VyZSBpbiBsZWZ0IHNpZGUsIGFmdGVyIGJhY2t3YXJkXG4gICAgICogbmF2aWdhdGlvbiB3aWxsIGJlIG9uIHRoZSByaWdodCBzaWRlKS5cbiAgICAgKiBDdXJyZW50IGxldmVsIGlzIHNldCB0byBhIGxvd2VyIG51bWJlciBpbiBvcmRlciB0byBzZXQgdGhlIGxlZnQgc2lkZSBtZW51LlxuICAgICAqICovXG4gICAgcHVibGljIG9uQmFja0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sZWZ0TG9hZGluZyQuaXNBY3RpdmUgfHwgdGhpcy5yaWdodExvYWRpbmckLmlzQWN0aXZlIHx8IHRoaXMuY3VycmVudFBhdGggPT09IFBhdGhTZXJ2aWNlLlNFUEFSQVRPUikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCA9IHRoaXMuZXh0cmFjdFBhcmVudCh0aGlzLmN1cnJlbnRQYXRoKTtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZC5lbWl0KHtwYXRoOiB0aGlzLl9wYXRoU2VydmljZS5hY3RpdmVQYXRoLCBpc0hvbWU6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gaXRlbSBjbGljaywgdGhlIHNlbGVjdGVkIGl0ZW0ncyB2aWV3IGlzIHJlbmRlcmVkIChieSByb3V0ZXJMaW5rKS4gSWYgdGhlIHNlbGVjdGVkIGl0ZW0gaGFzIGNoaWxkcmVuIGl0ZW1zLCB0aGUgbWVudSBpcyB1cGRhdGVkXG4gICAgICogYW5kIHZpZXcsIHRoYXQgaXMgcmVuZGVyZWQgaXMgc2VsZWN0ZWQgYnkgdGhlIGRlZmluZWQgcnVsZS4gVGhlIHJ1bGUgaXM6IE9uIGZpcnN0IGNoZWNrIGZvciBkZWZhdWx0IHZpZXcgaW4gY2hpbGRyZW4uXG4gICAgICogT24gc2Vjb25kIGNoZWNrIGlmIHRoZSBjbGlja2VkIGl0ZW0gaGFzIGEgdmlldy4gT24gdGhpcmQsIHBpY2sgYW55IG90aGVyIGNoaWxkcmVuJ3MgdmlldywgZWxzZSBzaG93IG5vdGhpbmcuXG4gICAgICogKi9cbiAgICBwdWJsaWMgb25JdGVtQ2xpY2soaXRlbTogTmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW0ucmVzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudE5hdmlnYXRpb25JdGVtID0gbnVsbDtcbiAgICAgICAgICAgIC8vIGN1c3RvbSB2aWV3IHJlcHJlc2VudGVkIG9ubHkgaW4gbmFlLmpzb25cbiAgICAgICAgICAgIGlmIChpdGVtLnByb2Nlc3NVcmkgPT09IHRoaXMuY3VycmVudFBhdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXRoU2VydmljZS5hY3RpdmVQYXRoID0gdGhpcy5jdXJyZW50UGF0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCA9IHRoaXMuZXh0cmFjdFBhcmVudCh0aGlzLmN1cnJlbnRQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdCh7cGF0aDogdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCwgaXNIb21lOiBmYWxzZX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudE5hdmlnYXRpb25JdGVtID0gaXRlbTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBpdGVtLnJlc291cmNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCk/LnZhbHVlXG5cbiAgICAgICAgICAgIGlmIChEb3VibGVEcmF3ZXJVdGlscy5oYXNJdGVtQ2hpbGRyZW4oaXRlbSkgJiYgIXRoaXMubGVmdExvYWRpbmckLmlzQWN0aXZlICYmICF0aGlzLnJpZ2h0TG9hZGluZyQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXRoU2VydmljZS5hY3RpdmVQYXRoID0gcGF0aDtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkLmVtaXQoe3BhdGg6IHRoaXMuX3BhdGhTZXJ2aWNlLmFjdGl2ZVBhdGgsIGlzSG9tZTogZmFsc2V9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yaWdodExvYWRpbmckLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihpc1JpZ2h0TG9hZGluZyA9PiBpc1JpZ2h0TG9hZGluZyA9PT0gZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5BdmFpbGFibGVWaWV3KCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXBhdGguaW5jbHVkZXModGhpcy5jdXJyZW50UGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXRoU2VydmljZS5hY3RpdmVQYXRoID0gdGhpcy5leHRyYWN0UGFyZW50KHRoaXMuY3VycmVudFBhdGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdCh7cGF0aDogdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCwgaXNIb21lOiBmYWxzZX0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhdGhTZXJ2aWNlLmFjdGl2ZVBhdGggPSB0aGlzLmN1cnJlbnRQYXRoO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdCh7cGF0aDogdGhpcy5fcGF0aFNlcnZpY2UuYWN0aXZlUGF0aCwgaXNIb21lOiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIHZpZXcgb2YgdGhlIGN1cnJlbnQgcmlnaHQgaXRlbXMgaW4gdGhlIG1lbnUgYnkgZGVmaW5lZCBydWxlLiBUaGUgcnVsZSBpczogRmlyc3QsIGl0IGNoZWNrcyB3aGV0aGVyIGEgbmF2aWdhdGlvblxuICAgICAqIGl0ZW0gd2FzIGNsaWNrZWQuIFNlY29uZCwgY2hlY2sgZm9yIGRlZmF1bHQgdmlldyBpbiBjaGlsZHJlbi5cbiAgICAgKiBUaGlyZCBjaGVjayBpZiB0aGUgY2xpY2tlZCBpdGVtIGhhcyBhIHZpZXcuIEZvdXJ0aCwgcGljayBhbnkgb3RoZXIgY2hpbGRyZW4ncyB2aWV3LCBlbHNlXG4gICAgICogc2hvdyBub3RoaW5nLlxuICAgICAqICovXG4gICAgcHVibGljIG9wZW5BdmFpbGFibGVWaWV3KCkge1xuICAgICAgICBsZXQgYWxsSXRlbXM6IEFycmF5PE5hdmlnYXRpb25JdGVtPiA9IHRoaXMucmlnaHRJdGVtcy5jb25jYXQodGhpcy5tb3JlSXRlbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50TmF2aWdhdGlvbkl0ZW0pIHtcbiAgICAgICAgICAgIGxldCBhbHJlYWR5Q2xpY2tlZEl0ZW06IE5hdmlnYXRpb25JdGVtID0gYWxsSXRlbXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IHRoaXMuX2N1cnJlbnROYXZpZ2F0aW9uSXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAoISFhbHJlYWR5Q2xpY2tlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBmb2xkZXIgaGFzIG5vdCBjaGFuZ2VkIGFuZCBhIG1lbnUgaXRlbSBpcyBjbGlja2VkLlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhdXRvT3Blbkl0ZW1zOiBBcnJheTxOYXZpZ2F0aW9uSXRlbT4gPSBhbGxJdGVtcy5maWx0ZXIoaXRlbSA9PiBEb3VibGVEcmF3ZXJVdGlscy5oYXNJdGVtQXV0b09wZW5WaWV3KGl0ZW0pKTtcbiAgICAgICAgaWYgKGF1dG9PcGVuSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fcmVkaXJlY3RTZXJ2aWNlLnJlZGlyZWN0KGF1dG9PcGVuSXRlbXNbMF0ucm91dGluZy5wYXRoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChEb3VibGVEcmF3ZXJVdGlscy5oYXNJdGVtVmlldyh0aGlzLl9jdXJyZW50TmF2aWdhdGlvbkl0ZW0pKSB7XG4gICAgICAgICAgICAvLyBpcyByb3V0ZWQgYnkgcm91dGVyTGluayBvbiBpdGVtIGNsaWNrXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXRlbXNXaXRoVmlldzogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+ID0gYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gRG91YmxlRHJhd2VyVXRpbHMuaGFzSXRlbVZpZXcoaXRlbSkpO1xuICAgICAgICBpZiAoaXRlbXNXaXRoVmlldy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWRpcmVjdFNlcnZpY2UucmVkaXJlY3QoYXV0b09wZW5JdGVtc1swXS5yb3V0aW5nLnBhdGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRNb3JlSXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vcmVJdGVtcy5sZW5ndGggPiBSSUdIVF9TSURFX05FV19QQUdFX1NJWkUpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UmlnaHRJdGVtcyA9IHRoaXMucmlnaHRJdGVtcztcbiAgICAgICAgICAgIGxldCBjdXJyZW50TW9yZUl0ZW1zID0gdGhpcy5tb3JlSXRlbXM7XG4gICAgICAgICAgICBjdXJyZW50UmlnaHRJdGVtcy5wdXNoKC4uLmN1cnJlbnRNb3JlSXRlbXMuc3BsaWNlKDAsIFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSkpO1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zJC5uZXh0KGN1cnJlbnRSaWdodEl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMubW9yZUl0ZW1zJC5uZXh0KGN1cnJlbnRNb3JlSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRSaWdodEl0ZW1zID0gdGhpcy5yaWdodEl0ZW1zO1xuICAgICAgICAgICAgY3VycmVudFJpZ2h0SXRlbXMucHVzaCguLi50aGlzLm1vcmVJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMkLm5leHQoY3VycmVudFJpZ2h0SXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5tb3JlSXRlbXMkLm5leHQoW10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRpYWxpemVDdXN0b21WaWV3c09mVmlldyh2aWV3OiBWaWV3LCB2aWV3Q29uZmlnUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdmlldyB8fCB0aGlzLmN1c3RvbUl0ZW1zSW5pdGlhbGl6ZWQgfHwgdGhpcy5oaWRkZW5DdXN0b21JdGVtc0luaXRpYWxpemVkKSByZXR1cm47XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXModmlldy5jaGlsZHJlbikuZm9yRWFjaCgoW2tleSwgY2hpbGRWaWV3XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRWaWV3Q29uZmlnUGF0aDogc3RyaW5nID0gdmlld0NvbmZpZ1BhdGggKyAnLycgKyBrZXk7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVVcmlGb3JDaGlsZFZpZXdzKGNoaWxkVmlld0NvbmZpZ1BhdGgsIGNoaWxkVmlldyk7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVIaWRkZW5NZW51SXRlbUZyb21DaGlsZFZpZXdzKGNoaWxkVmlld0NvbmZpZ1BhdGgsIGNoaWxkVmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzb2x2ZUN1c3RvbVZpZXdzSW5SaWdodFNpZGUoKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKCk7XG5cbiAgICAgICAgdGhpcy5jdXN0b21JdGVtc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oaWRkZW5DdXN0b21JdGVtc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3dpdGNoT3JkZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbXNPcmRlciA9ICh0aGlzLml0ZW1zT3JkZXIgKyAxKSAlIDI7XG4gICAgICAgIGxldCBtdWx0aXBsaWVyID0gMTtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNPcmRlciA9PT0gTWVudU9yZGVyLkRlc2NlbmRpbmcpIHtcbiAgICAgICAgICAgIG11bHRpcGxpZXIgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3VycmVudFJpZ2h0SXRlbXMgPSB0aGlzLnJpZ2h0SXRlbXM7XG4gICAgICAgIGxldCBjdXJyZW50TGVmdEl0ZW1zID0gdGhpcy5sZWZ0SXRlbXM7XG4gICAgICAgIGN1cnJlbnRSaWdodEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICBjdXJyZW50TGVmdEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICB0aGlzLnJpZ2h0SXRlbXMkLm5leHQoY3VycmVudFJpZ2h0SXRlbXMpO1xuICAgICAgICB0aGlzLmxlZnRJdGVtcyQubmV4dChjdXJyZW50TGVmdEl0ZW1zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBc2NlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zT3JkZXIgPT09IE1lbnVPcmRlci5Bc2NlbmRpbmc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRMZWZ0U2lkZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhdGggPT09IFBhdGhTZXJ2aWNlLlNFUEFSQVRPUikge1xuICAgICAgICAgICAgdGhpcy5fbGVmdEl0ZW1zJC5uZXh0KFtdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9uKCk7XG5cbiAgICAgICAgdGhpcy5nZXRJdGVtQ2FzZUJ5UGF0aCh0aGlzLmV4dHJhY3RQYXJlbnQodGhpcy5jdXJyZW50UGF0aCkpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIGxldCBjaGlsZENhc2VzJDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRJdGVtO1xuICAgICAgICAgICAgbGV0IG9yZGVyZWRDaGlsZENhc2VJZHM7XG5cbiAgICAgICAgICAgIGlmIChwYWdlPy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSBvZihbXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldEl0ZW0gPSBwYWdlLmNvbnRlbnRbMF07XG4gICAgICAgICAgICAgICAgb3JkZXJlZENoaWxkQ2FzZUlkcyA9IERvdWJsZURyYXdlclV0aWxzLmV4dHJhY3RDaGlsZENhc2VJZHModGFyZ2V0SXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKG9yZGVyZWRDaGlsZENhc2VJZHMgPT0gdW5kZWZpbmVkIHx8IG9yZGVyZWRDaGlsZENhc2VJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkQ2FzZXMkID0gb2YoW10pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkQ2FzZXMkID0gdGhpcy5nZXRJdGVtQ2FzZXNCeUlkc0luT25lUGFnZShvcmRlcmVkQ2hpbGRDYXNlSWRzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHAgPT4gcC5jb250ZW50KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkQ2FzZXMkLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlZnRJdGVtcyQubmV4dChyZXN1bHQuc29ydCgoYSwgYikgPT4gb3JkZXJlZENoaWxkQ2FzZUlkcy5pbmRleE9mKGEucmVzb3VyY2Uuc3RyaW5nSWQpIC0gb3JkZXJlZENoaWxkQ2FzZUlkcy5pbmRleE9mKGIucmVzb3VyY2Uuc3RyaW5nSWQpKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbUxvYWRlZC5lbWl0KHttZW51OiAnbGVmdCcsIGl0ZW1zOiB0aGlzLmxlZnRJdGVtc30pO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVmdEl0ZW1zJC5uZXh0KFtdKVxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUN1c3RvbVZpZXdzSW5MZWZ0U2lkZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlZnRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fbGVmdEl0ZW1zJC5uZXh0KFtdKVxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJbkxlZnRTaWRlKCk7XG4gICAgICAgICAgICB0aGlzLl9sZWZ0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkUmlnaHRTaWRlKCkge1xuICAgICAgICB0aGlzLl9yaWdodExvYWRpbmckLm9uKCk7XG4gICAgICAgIHRoaXMuX21vcmVJdGVtcyQubmV4dChbXSlcblxuICAgICAgICB0aGlzLmdldEl0ZW1DYXNlQnlQYXRoKHRoaXMuY3VycmVudFBhdGgpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIGxldCBjaGlsZENhc2VzJDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRJdGVtO1xuICAgICAgICAgICAgbGV0IG9yZGVyZWRDaGlsZENhc2VJZHM7XG5cbiAgICAgICAgICAgIGlmIChwYWdlPy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSBvZihbXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldEl0ZW0gPSBwYWdlPy5jb250ZW50WzBdO1xuICAgICAgICAgICAgICAgIG9yZGVyZWRDaGlsZENhc2VJZHMgPSBEb3VibGVEcmF3ZXJVdGlscy5leHRyYWN0Q2hpbGRDYXNlSWRzKHRhcmdldEl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChvcmRlcmVkQ2hpbGRDYXNlSWRzID09PSB1bmRlZmluZWQgfHwgb3JkZXJlZENoaWxkQ2FzZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSBvZihbXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRDYXNlcyQgPSB0aGlzLmdldEl0ZW1DYXNlc0J5SWRzSW5PbmVQYWdlKG9yZGVyZWRDaGlsZENhc2VJZHMpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAocCA9PiBwLmNvbnRlbnQpLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRDYXNlcyQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCBhcyBDYXNlW10pLnNvcnQoKGEsIGIpID0+IG9yZGVyZWRDaGlsZENhc2VJZHMuaW5kZXhPZihhLnN0cmluZ0lkKSAtIG9yZGVyZWRDaGlsZENhc2VJZHMuaW5kZXhPZihiLnN0cmluZ0lkKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiBSSUdIVF9TSURFX0lOSVRfUEFHRV9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhd1JpZ2h0SXRlbXM6IENhc2VbXSA9IHJlc3VsdC5zcGxpY2UoMCwgUklHSFRfU0lERV9JTklUX1BBR0VfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0SXRlbXMkLm5leHQocmF3UmlnaHRJdGVtcy5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9yZUl0ZW1zJC5uZXh0KHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yaWdodEl0ZW1zJC5uZXh0KHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtTG9hZGVkLmVtaXQoe21lbnU6ICdyaWdodCcsIGl0ZW1zOiB0aGlzLnJpZ2h0SXRlbXN9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkF2YWlsYWJsZVZpZXcoKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0SXRlbXMkLm5leHQoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vcmVJdGVtcyQubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ3VzdG9tVmlld3NJblJpZ2h0U2lkZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX3JpZ2h0SXRlbXMkLm5leHQoW10pO1xuICAgICAgICAgICAgdGhpcy5fbW9yZUl0ZW1zJC5uZXh0KFtdKTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUN1c3RvbVZpZXdzSW5SaWdodFNpZGUoKTtcbiAgICAgICAgICAgIHRoaXMuX3JpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtQ2FzZXNCeUlkc0luT25lUGFnZShjYXNlSWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8UGFnZTxDYXNlPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtQ2FzZXNCeUlkcyhjYXNlSWRzLCAwLCBjYXNlSWRzLmxlbmd0aCk7XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgZ2V0SXRlbUNhc2VzQnlJZHMoY2FzZUlkczogc3RyaW5nW10sIHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8UGFnZTxDYXNlPj4ge1xuICAgICAgICBjb25zdCBzZWFyY2hCb2R5OiBDYXNlU2VhcmNoUmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBpZDogY2FzZUlkcyxcbiAgICAgICAgICAgIHByb2Nlc3M6IE1FTlVfSURFTlRJRklFUlMubWFwKGlkID0+ICh7aWRlbnRpZmllcjogaWR9IGFzIFBldHJpTmV0U2VhcmNoUmVxdWVzdCkpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgcGFnZVNpemUpXG4gICAgICAgICAgICAuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9OVU1CRVIsIHBhZ2VOdW1iZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FzZVJlc291cmNlU2VydmljZS5zZWFyY2hDYXNlcyhTaW1wbGVGaWx0ZXIuZnJvbUNhc2VRdWVyeShzZWFyY2hCb2R5KSwgaHR0cFBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVJdGVtQ2FzZVRvTmF2aWdhdGlvbkl0ZW0oaXRlbUNhc2U6IENhc2UpOiBOYXZpZ2F0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChEb3VibGVEcmF3ZXJVdGlscy5yZXByZXNlbnRzUm9vdE5vZGUoaXRlbUNhc2UpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbTogTmF2aWdhdGlvbkl0ZW0gPSB7XG4gICAgICAgICAgICBhY2Nlc3M6IHt9LFxuICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgICAgICAgIGljb246IGl0ZW1DYXNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX01FTlVfSUNPTik/LnZhbHVlIHx8IHRoaXMuZGVmYXVsdFZpZXdJY29uLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRyYW5zbGF0aW9uKGl0ZW1DYXNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX01FTlVfTkFNRSk/LnZhbHVlKSB8fCBpdGVtQ2FzZS50aXRsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByb3V0aW5nOiB7XG4gICAgICAgICAgICAgICAgcGF0aDogdGhpcy5nZXRJdGVtUm91dGluZ1BhdGgoaXRlbUNhc2UpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkOiBpdGVtQ2FzZS5zdHJpbmdJZCxcbiAgICAgICAgICAgIHJlc291cmNlOiBpdGVtQ2FzZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRSb2xlcyA9IERvdWJsZURyYXdlclV0aWxzLnJlc29sdmVBY2Nlc3NSb2xlcyhpdGVtQ2FzZSwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfQUxMT1dFRF9ST0xFUyk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkQmFubmVkUm9sZXMgPSBEb3VibGVEcmF3ZXJVdGlscy5yZXNvbHZlQWNjZXNzUm9sZXMoaXRlbUNhc2UsIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX0JBTk5FRF9ST0xFUyk7XG4gICAgICAgIGlmICghIXJlc29sdmVkUm9sZXMpIGl0ZW0uYWNjZXNzWydyb2xlJ10gPSByZXNvbHZlZFJvbGVzO1xuICAgICAgICBpZiAoISFyZXNvbHZlZEJhbm5lZFJvbGVzKSBpdGVtLmFjY2Vzc1snYmFubmVkUm9sZSddID0gcmVzb2x2ZWRCYW5uZWRSb2xlcztcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcoaXRlbSwgaXRlbS5yb3V0aW5nPy5wYXRoKSkgcmV0dXJuO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUN1c3RvbVZpZXdzSW5MZWZ0U2lkZSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5leHRyYWN0UGFyZW50KHRoaXMuY3VycmVudFBhdGgpICYmICEhdGhpcy5fY2hpbGRDdXN0b21WaWV3c1t0aGlzLmV4dHJhY3RQYXJlbnQodGhpcy5jdXJyZW50UGF0aCldKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudExlZnRJdGVtcyA9IHRoaXMuX2xlZnRJdGVtcyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGN1cnJlbnRMZWZ0SXRlbXMucHVzaCguLi5PYmplY3QudmFsdWVzKHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbdGhpcy5leHRyYWN0UGFyZW50KHRoaXMuY3VycmVudFBhdGgpXSkpO1xuICAgICAgICAgICAgdGhpcy5fbGVmdEl0ZW1zJC5uZXh0KGN1cnJlbnRMZWZ0SXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVDdXN0b21WaWV3c0luUmlnaHRTaWRlKCkge1xuICAgICAgICBpZiAoISF0aGlzLl9jdXJyZW50UGF0aCAmJiAhIXRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbdGhpcy5fY3VycmVudFBhdGhdKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudFJpZ2h0SXRlbXMgPSB0aGlzLl9yaWdodEl0ZW1zJC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgY3VycmVudFJpZ2h0SXRlbXMucHVzaCguLi5PYmplY3QudmFsdWVzKHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbdGhpcy5fY3VycmVudFBhdGhdKSk7XG4gICAgICAgICAgICB0aGlzLl9yaWdodEl0ZW1zJC5uZXh0KGN1cnJlbnRSaWdodEl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlVXJpRm9yQ2hpbGRWaWV3cyhjb25maWdQYXRoOiBzdHJpbmcsIGNoaWxkVmlldzogVmlldyk6IHZvaWQge1xuICAgICAgICBpZiAoIWNoaWxkVmlldy5wcm9jZXNzVXJpKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5fYWNjZXNzU2VydmljZS5jYW5BY2Nlc3NWaWV3KGNoaWxkVmlldywgY29uZmlnUGF0aCkpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW2NoaWxkVmlldy5wcm9jZXNzVXJpXSkge1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRDdXN0b21WaWV3c1tjaGlsZFZpZXcucHJvY2Vzc1VyaV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW2NoaWxkVmlldy5wcm9jZXNzVXJpXVtjb25maWdQYXRoXSA9IHtcbiAgICAgICAgICAgIGlkOiBjb25maWdQYXRoLFxuICAgICAgICAgICAgLi4uY2hpbGRWaWV3LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlSGlkZGVuTWVudUl0ZW1Gcm9tQ2hpbGRWaWV3cyhjb25maWdQYXRoOiBzdHJpbmcsIGNoaWxkVmlldzogVmlldyk6IHZvaWQge1xuICAgICAgICBpZiAoIWNoaWxkVmlldy5uYXZpZ2F0aW9uKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5fYWNjZXNzU2VydmljZS5jYW5BY2Nlc3NWaWV3KGNoaWxkVmlldywgY29uZmlnUGF0aCkpIHJldHVybjtcbiAgICAgICAgaWYgKCEhKChjaGlsZFZpZXc/Lm5hdmlnYXRpb24gYXMgYW55KT8uaGlkZGVuKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRIaWRkZW5DdXN0b21JdGVtcyA9IHRoaXMuX2hpZGRlbkN1c3RvbUl0ZW1zJC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgY3VycmVudEhpZGRlbkN1c3RvbUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBjb25maWdQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmNoaWxkVmlldyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5faGlkZGVuQ3VzdG9tSXRlbXMkLm5leHQoY3VycmVudEhpZGRlbkN1c3RvbUl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRUcmFuc2xhdGlvbih2YWx1ZTogSTE4bkZpZWxkVmFsdWUpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nLnNwbGl0KCctJylbMF07XG4gICAgICAgIHJldHVybiBsb2NhbGUgaW4gdmFsdWUudHJhbnNsYXRpb25zID8gdmFsdWUudHJhbnNsYXRpb25zW2xvY2FsZV0gOiB2YWx1ZS5kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZW1Sb3V0aW5nUGF0aChpdGVtQ2FzZTogQ2FzZSkge1xuICAgICAgICBjb25zdCB0YXNrSWQgPSBEb3VibGVEcmF3ZXJVdGlscy5maW5kVGFza0lkSW5DYXNlKGl0ZW1DYXNlLCBTRVRUSU5HU19UUkFOU0lUSU9OX0lEKTtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZHluYW1pY1JvdXRpbmdTZXJ2aWNlLnJvdXRlO1xuICAgICAgICBjb25zdCBwcmVmaXggPSB1cmwuc3RhcnRzV2l0aCgnLycpID8gJycgOiAnLyc7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHt1cmx9LyR7dGFza0lkfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzTGVmdEl0ZW1zKGNhc2VzOiBDYXNlW10sIG9yZGVyZWRDaGlsZENhc2VJZHM6IHN0cmluZ1tdKTogTmF2aWdhdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VzXG4gICAgICAgICAgICAubWFwKGZvbGRlciA9PiB0aGlzLnJlc29sdmVJdGVtQ2FzZVRvTmF2aWdhdGlvbkl0ZW0oZm9sZGVyKSlcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICBvcmRlcmVkQ2hpbGRDYXNlSWRzLmluZGV4T2YoYS5yZXNvdXJjZS5zdHJpbmdJZCkgLSBvcmRlcmVkQ2hpbGRDYXNlSWRzLmluZGV4T2YoYi5yZXNvdXJjZS5zdHJpbmdJZClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBjYXNlIGl0ZW0gYmFzZWQgb24gdGhlIGdpdmVuIHBhdGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXSAtIFRoZSBpZGVudGlmaWVyIHBhdGggdG8gbG9jYXRlIHRoZSBzcGVjaWZpYyBjYXNlIGl0ZW0uIElmIHVuZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8gc2VhcmNoaW5nIHdpdGhvdXQgYSBzcGVjaWZpYyBwYXRoLlxuICAgICAqIEByZXR1cm4ge09ic2VydmFibGU8UGFnZTxDYXNlPj59IEFuIG9ic2VydmFibGUgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIHBhZ2Ugb2YgY2FzZSBpdGVtcyB3aGljaCBtYXRjaCB0aGUgcHJvdmlkZWQgcGF0aC5cbiAgICAgKi9cbiAgICBnZXRJdGVtQ2FzZUJ5UGF0aChwYXRoPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxQYWdlPENhc2U+PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaEJvZHk6IENhc2VTZWFyY2hSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBbR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIXTogcGF0aFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHtpZGVudGlmaWVyOiBcIm1lbnVfaXRlbVwifVxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgMSlcbiAgICAgICAgICAgIC5zZXQoUGFnaW5hdGlvblBhcmFtcy5QQUdFX05VTUJFUiwgMCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLnNlYXJjaENhc2VzKFNpbXBsZUZpbHRlci5mcm9tQ2FzZVF1ZXJ5KHNlYXJjaEJvZHkpLCBodHRwUGFyYW1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RQYXJlbnQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHBhdGggPT09ICcvJykge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgubGFzdEluZGV4T2YoJy8nKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcvJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sYXN0SW5kZXhPZignLycpKTtcbiAgICB9XG5cblxufVxuIl19
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const NAE_NEW_CASE_CREATION_CONFIGURATION_DATA = new InjectionToken('NewCaseCreationConfigurationData');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWNhc2UtaW5qZWN0aW9uLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3NpZGUtbWVudS9jb250ZW50LWNvbXBvbmVudHMvbmV3LWNhc2UvbW9kZWwvbmV3LWNhc2UtaW5qZWN0aW9uLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQU03QyxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBRyxJQUFJLGNBQWMsQ0FBbUMsa0NBQWtDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2lkZU1lbnVJbmplY3Rpb25EYXRhfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2lkZS1tZW51LWluamVjdGlvbi1kYXRhJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1BldHJpTmV0UmVmZXJlbmNlfSBmcm9tICcuLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL3BldHJpLW5ldC1yZWZlcmVuY2UnO1xuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV3Q2FzZUluamVjdGlvbkRhdGEgZXh0ZW5kcyBTaWRlTWVudUluamVjdGlvbkRhdGEge1xuICAgIGFsbG93ZWROZXRzJDogT2JzZXJ2YWJsZTxBcnJheTxQZXRyaU5ldFJlZmVyZW5jZT4+O1xufVxuXG5leHBvcnQgY29uc3QgTkFFX05FV19DQVNFX0NSRUFUSU9OX0NPTkZJR1VSQVRJT05fREFUQSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZXdDYXNlQ3JlYXRpb25Db25maWd1cmF0aW9uRGF0YT4oJ05ld0Nhc2VDcmVhdGlvbkNvbmZpZ3VyYXRpb25EYXRhJyk7XG5cbi8qKlxuICogaW5qZWN0aW9uIHRva2VuIHVzZWQgZm9yIG5ldyBjYXNlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXdDYXNlQ3JlYXRpb25Db25maWd1cmF0aW9uRGF0YSB7XG5cbiAgICBlbmFibGVDYXNlVGl0bGU6IGJvb2xlYW47XG5cbiAgICBpc0Nhc2VUaXRsZVJlcXVpcmVkOiBib29sZWFuO1xuXG4gICAgbmV3Q2FzZUJ1dHRvbkNvbmZpZz86IE5ld0Nhc2VCdXR0b25Db25maWd1cmF0aW9uO1xuXG4gICAgYmxvY2tOZXRzPzogc3RyaW5nW107XG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXdDYXNlQnV0dG9uQ29uZmlndXJhdGlvbiB7XG5cbiAgICBjcmVhdGVDYXNlQnV0dG9uVGl0bGU/OiBzdHJpbmc7XG5cbiAgICBjcmVhdGVDYXNlQnV0dG9uSWNvbj86IHN0cmluZztcblxuICAgIHNob3dDcmVhdGVDYXNlQnV0dG9uPzogYm9vbGVhbjtcblxufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWNhc2UtaW5qZWN0aW9uLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3NpZGUtbWVudS9jb250ZW50LWNvbXBvbmVudHMvbmV3LWNhc2UvbW9kZWwvbmV3LWNhc2UtaW5qZWN0aW9uLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQU83QyxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBRyxJQUFJLGNBQWMsQ0FBbUMsa0NBQWtDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2lkZU1lbnVJbmplY3Rpb25EYXRhfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2lkZS1tZW51LWluamVjdGlvbi1kYXRhJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1BldHJpTmV0UmVmZXJlbmNlfSBmcm9tICcuLi8uLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL3BldHJpLW5ldC1yZWZlcmVuY2UnO1xuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0kxOG5GaWVsZFZhbHVlfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGF0YS1maWVsZHMvaTE4bi1maWVsZC9tb2RlbHMvaTE4bi1maWVsZC12YWx1ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ld0Nhc2VJbmplY3Rpb25EYXRhIGV4dGVuZHMgU2lkZU1lbnVJbmplY3Rpb25EYXRhIHtcbiAgICBhbGxvd2VkTmV0cyQ6IE9ic2VydmFibGU8QXJyYXk8UGV0cmlOZXRSZWZlcmVuY2U+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IE5BRV9ORVdfQ0FTRV9DUkVBVElPTl9DT05GSUdVUkFUSU9OX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48TmV3Q2FzZUNyZWF0aW9uQ29uZmlndXJhdGlvbkRhdGE+KCdOZXdDYXNlQ3JlYXRpb25Db25maWd1cmF0aW9uRGF0YScpO1xuXG4vKipcbiAqIGluamVjdGlvbiB0b2tlbiB1c2VkIGZvciBuZXcgY2FzZSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV3Q2FzZUNyZWF0aW9uQ29uZmlndXJhdGlvbkRhdGEge1xuXG4gICAgZW5hYmxlQ2FzZVRpdGxlOiBib29sZWFuO1xuXG4gICAgaXNDYXNlVGl0bGVSZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIG5ld0Nhc2VCdXR0b25Db25maWc/OiBOZXdDYXNlQnV0dG9uQ29uZmlndXJhdGlvbjtcblxuICAgIGJsb2NrTmV0cz86IHN0cmluZ1tdO1xuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV3Q2FzZUJ1dHRvbkNvbmZpZ3VyYXRpb24ge1xuXG4gICAgY3JlYXRlQ2FzZUJ1dHRvblRpdGxlPzogSTE4bkZpZWxkVmFsdWU7XG5cbiAgICBjcmVhdGVDYXNlQnV0dG9uSWNvbj86IHN0cmluZztcblxuICAgIHNob3dDcmVhdGVDYXNlQnV0dG9uPzogYm9vbGVhbjtcblxufVxuIl19
@@ -30168,6 +30168,7 @@ class DoubleDrawerNavigationService {
30168
30168
  * */
30169
30169
  onItemClick(item) {
30170
30170
  if (item.resource === undefined) {
30171
+ this._currentNavigationItem = null;
30171
30172
  // custom view represented only in nae.json
30172
30173
  if (item.processUri === this.currentPath) {
30173
30174
  this._pathService.activePath = this.currentPath;
@@ -30178,6 +30179,7 @@ class DoubleDrawerNavigationService {
30178
30179
  this.itemClicked.emit({ path: this._pathService.activePath, isHome: false });
30179
30180
  }
30180
30181
  else {
30182
+ this._currentNavigationItem = item;
30181
30183
  const path = item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value;
30182
30184
  if (DoubleDrawerUtils.hasItemChildren(item) && !this.leftLoading$.isActive && !this.rightLoading$.isActive) {
30183
30185
  this._pathService.activePath = path;
@@ -30197,12 +30199,20 @@ class DoubleDrawerNavigationService {
30197
30199
  }
30198
30200
  }
30199
30201
  /**
30200
- * Opens a view of the current right items in the menu by defined rule. The rule is: On first check for default
30201
- * view in children. On second check if the clicked item has a view. On third, pick any other children's view, else
30202
+ * Opens a view of the current right items in the menu by defined rule. The rule is: First, it checks whether a navigation
30203
+ * item was clicked. Second, check for default view in children.
30204
+ * Third check if the clicked item has a view. Fourth, pick any other children's view, else
30202
30205
  * show nothing.
30203
30206
  * */
30204
30207
  openAvailableView() {
30205
30208
  let allItems = this.rightItems.concat(this.moreItems);
30209
+ if (this._currentNavigationItem) {
30210
+ let alreadyClickedItem = allItems.find(item => item.id === this._currentNavigationItem.id);
30211
+ if (!!alreadyClickedItem) {
30212
+ // when the folder has not changed and a menu item is clicked.
30213
+ return;
30214
+ }
30215
+ }
30206
30216
  let autoOpenItems = allItems.filter(item => DoubleDrawerUtils.hasItemAutoOpenView(item));
30207
30217
  if (autoOpenItems.length > 0) {
30208
30218
  this._redirectService.redirect(autoOpenItems[0].routing.path);