@tsi-developpement/tsi-shared-ui 1.7.21 → 1.7.23

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tZXh0ZXJuYWwtc2VsZWN0aW9uLW91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi9tb2RlbHMvZHJvcGRvd24vZHJvcGRvd24tZXh0ZXJuYWwtc2VsZWN0aW9uLW91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bkV4dGVybmFsU2VsZWN0aW9uT3V0cHV0IHtcclxuICAgIGl0ZW1LZXlQcm9wZXJ0eU5hbWU6IGFueTtcclxuICAgIGl0ZW1zOiBhbnlbXTtcclxufSJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { Component, HostListener, inject, Renderer2, ViewChild, ViewChildren, ViewContainerRef } from '@angular/core';
2
2
  import { AppBaseComponent } from '../app-base/app-base.component';
3
3
  import { LocalizationKeys } from '../../../consts/localization-key';
4
- import { ModalSizeEnum, GridSelectionMode } from '../../../enums';
4
+ import { ModalSizeEnum } from '../../../enums';
5
5
  import { PresentationSetting } from '../../../models';
6
6
  import { PresentationSettingService, LayoutHelperService, TsiNotificationService, ErrorResponseManagerService, PresentationDesignerService } from '../../../services';
7
7
  import { TsiButtonComponent } from '../../../tsi-components/button-components/tsi-button/tsi-button.component';
@@ -204,18 +204,7 @@ export class TsiListBaseComponent extends AppBaseComponent {
204
204
  this.viewGrid.showExportButton = false;
205
205
  this.viewGrid.showConsultButton = false;
206
206
  this.viewGrid.showCalenderView = false;
207
- // TODO : @by: Hassen,
208
- // @why: Keep all search criteria => usefull for advanced search
209
- //this.viewGrid.showFilterButton = false;
210
- //this.viewGrid.showGlobalSearch = false;
211
- //this.viewGrid.showHeaderFilters = false;
212
- //this.viewGrid.showSearchField = false;
213
207
  }
214
- //init row selection
215
- // this.viewGrid.selectKeyOnly = this.selectKeyOnly;
216
- // this.viewGrid.selectionMode = this.selectionMode;
217
- // this.viewGrid.selectedItems = this.selectedItems;
218
- // this.viewGrid.key = this.key;
219
208
  this._rowsSelectionSubscription =
220
209
  this.viewGrid.selectedItemsChange.subscribe((items) => this._handleSelectedItemsChangeEvent(items));
221
210
  }
@@ -223,19 +212,9 @@ export class TsiListBaseComponent extends AppBaseComponent {
223
212
  _initGenericGridIfExist() {
224
213
  if (this.genericGrid) {
225
214
  if (this.isAdvancedSearchMode) {
226
- this.genericGrid.selectionMode = GridSelectionMode.Single;
227
215
  this.genericGrid.showActionColumn = false;
228
216
  this.genericGrid.showCalenderView = false;
229
217
  this.genericGrid.showExportButton = false;
230
- this.genericGrid.selectKeyOnly = true;
231
- // TODO : @by: Hassen,
232
- // @why: Keep all search criteria => usefull for advanced search
233
- //this.genericGrid.showFilterButton = false;
234
- //this.genericGrid.showGlobalSearch = false;
235
- //this.genericGrid.showHeaderFilters = false;
236
- //this.genericGrid.showSearchBox = false;
237
- //this.genericGrid.showSearchField = false;
238
- //this.genericGrid.ShowFilterColumns = false;
239
218
  }
240
219
  this._rowsSelectionSubscription =
241
220
  this.genericGrid.selectedItemsChange.subscribe((items) => this._handleSelectedItemsChangeEvent(items));
@@ -245,7 +224,6 @@ export class TsiListBaseComponent extends AppBaseComponent {
245
224
  if (this.genericCrud) {
246
225
  //init reporting
247
226
  if (this.isAdvancedSearchMode) {
248
- this.genericCrud.selectionMode = GridSelectionMode.Single;
249
227
  this.genericCrud.showAddButton = false;
250
228
  this.genericCrud.showDeleteButton = false;
251
229
  this.genericCrud.showConsultButton = false;
@@ -255,12 +233,6 @@ export class TsiListBaseComponent extends AppBaseComponent {
255
233
  this.genericCrud.showDownloadButton = false;
256
234
  this.genericCrud.showReporting = false;
257
235
  this.genericCrud.showUploadButton = false;
258
- this.genericCrud.selectKeyOnly = true;
259
- // TODO : @by: Hassen,
260
- // @why: Keep all search criteria => usefull for advanced search
261
- //this.genericCrud.showGlobalSearch = false;
262
- //this.genericCrud.showSearchField = false;
263
- //this.genericCrud.showHeaderFilters = false;
264
236
  this.genericCrud.ngOnInit();
265
237
  }
266
238
  this.genericCrud.formEndpoint = this.formEndpoint;
@@ -269,17 +241,6 @@ export class TsiListBaseComponent extends AppBaseComponent {
269
241
  this.presentationRequest =
270
242
  this._presentationSettingService.getPresentationSettingByComponentIdentifierSync(this.getComponentIdentifier(), this.descriminatorValue) ?? new PresentationSetting();
271
243
  this.genericCrud.presentationSettings = this.presentationRequest;
272
- // if (this.presentationRequest
273
- // && this.presentationRequest.presentationSettingDetails.length > 0
274
- // && this.genericCrud.genericGridComponent) {
275
- // this.genericCrud.genericGridComponent.presentationSettings = this.presentationRequest;
276
- // this.genericCrud.genericGridComponent.search()
277
- // }
278
- //init row selection
279
- // this.genericCrud.selectKeyOnly = this.selectKeyOnly;
280
- // this.genericCrud.selectionMode = this.selectionMode;
281
- // this.genericCrud.selectedItems = this.selectedItems;
282
- // this.genericCrud.key = this.key;
283
244
  this._rowsSelectionSubscription =
284
245
  this.genericCrud.selectedItemsChange.subscribe((items) => this._handleSelectedItemsChangeEvent(items));
285
246
  }
@@ -514,4 +475,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
514
475
  type: HostListener,
515
476
  args: ['dblclick', ['$event']]
516
477
  }] } });
517
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWxpc3QtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktbGlzdC1iYXNlL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWxpc3QtYmFzZS90c2ktbGlzdC1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFHTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBdUMsbUJBQW1CLEVBQTZCLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUE4QixNQUFNLG1CQUFtQixDQUFDO0FBQ2xNLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlGQUFpRixDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFD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QkFBQyxvQkFBb0I7Z0JBNlVsQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbmplY3QsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBwLWJhc2UvYXBwLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSwgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEdyaWRDb2x1bW4sIElNb2RhbFNpemUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RGVzY3JpbWluYXRvciwgU2VhcmNoRmllbGQsIFByZXNlbnRhdGlvblNldHRpbmcsIFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSwgTGF5b3V0SGVscGVyU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UsIEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9idXR0b24tY29tcG9uZW50cy90c2ktYnV0dG9uL3RzaS1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpVmlld0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcy9wcmVzZW50YXRpb24tZGVzaWduZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2VudGF0aW9uLXNldHRpbmcvcHJlc2VudGF0aW9uLWRlc2lnbmVyLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdHNpLWxpc3QtYmFzZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1saXN0LWJhc2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRzaUxpc3RCYXNlQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuICBwcml2YXRlIF9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gJ2NvbmZnLW1vZGUtYnV0dG9uLWZyb20tbGlzdCc7XHJcbiAgc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWUgPSAnY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0LXNhdmUtcHJvcGVydGllcyc7XHJcbiAgc2F2ZVByb3BlcnR5QnRuSWQgPSAnc2F2ZS1wcm9wZXJ0eS1idG4nO1xyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGZvcm1FbmRwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN1cGVyLmZvcm1FbmRwb2ludDtcclxuICB9XHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBmb3JtRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG4gICAgc3VwZXIuZm9ybUVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVzaW5lc3NDbGFzcztcclxuICB9XHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBidXNpbmVzc0NsYXNzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHN1cGVyLmJ1c2luZXNzQ2xhc3MgPSB2YWx1ZVxyXG4gICAgdGhpcy5mb3JtRW5kcG9pbnQgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAvLyBAVE9ETyBNZWRBbGkgOiDDoCB0ZXN0ZXJcclxuICAgIC8vdGhpcy5nZXRFbnRpdHlJbmZvcm1hdGlvbih0aGlzLl9idXNpbmVzc0NsYXNzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbXBvbmVudERlc2NyaW1pbmF0b3I/OiBDb21wb25lbnREZXNjcmltaW5hdG9yO1xyXG4gIHNldCBjb21wb25lbnREZXNjcmltaW5hdG9yKHZhbHVlOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yID0gdmFsdWU7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3IgJiZcclxuICAgICAgdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvci5wcm9wZXJ0eVZhbHVlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmJ1c2luZXNzQ2xhc3MgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgaWYgKHZhbHVlPy5wcm9wZXJ0eVZhbHVlICE9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZT8ucHJvcGVydHlWYWx1ZTtcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IoKTogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvcjtcclxuICB9XHJcblxyXG4gIGNvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgdGl0bGVDb21wb25lbnQ6IHN0cmluZyA9ICcnO1xyXG4gIG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTWVkaXVtO1xyXG4gIGNvbXA6IGFueTtcclxuICBzZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPiA9IFtdO1xyXG4gIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG5cclxuICBwcml2YXRlIGdldCBpc0FkdmFuY2VkU2VhcmNoTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29uZmlnPy5kYXRhICYmXHJcbiAgICAgIHRoaXMuY29uZmlnLmRhdGEuaGFzT3duUHJvcGVydHkoJ2lzQWR2YW5jZWRTZWFyY2gnKSAmJlxyXG4gICAgICB0aGlzLmNvbmZpZy5kYXRhLmlzQWR2YW5jZWRTZWFyY2ggPT09IHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBrZXk6IHN0cmluZyA9ICd1aWQnO1xyXG4gIC8vIHNlbGVjdEtleU9ubHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8vIHNlbGVjdGlvbk1vZGU6IEdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTm9uZTtcclxuICAvLyBzZWxlY3RlZEl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0NydWRDb21wb25lbnQpIGdlbmVyaWNDcnVkPzogVHNpR2VuZXJpY0NydWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkPzogVHNpR2VuZXJpY0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkPzogVHNpVmlld0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpXHJcbiAgZ2VuZXJpY0dyaWRzOiBUc2lHZW5lcmljR3JpZENvbXBvbmVudFtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0NydWRDb21wb25lbnQpXHJcbiAgZ2VuZXJpY0NydWRzOiBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudFtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkczogVHNpVmlld0dyaWRDb21wb25lbnRbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgX2xheW91dEhlbHBlclNlcnZpY2UgPSBpbmplY3QoTGF5b3V0SGVscGVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfbWVzc2FnZUluZm9TZXJ2aWNlID0gaW5qZWN0KFRzaU5vdGlmaWNhdGlvblNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyID0gaW5qZWN0KEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlKTtcclxuXHJcbiAgc2hvd0hpZGVDb25maWdCdG5SZWY6IE5vZGUgfCB1bmRlZmluZWQ7XHJcbiAgc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWY6IE5vZGUgfCB1bmRlZmluZWQgfCBudWxsO1xyXG4gIF9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIF9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIF9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBjb25maWdBcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gW107XHJcbiAgcHJpdmF0ZSBkZXNjcmltaW5hdG9yVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHB1YmxpYyBfZGlhbG9nUmVmZXJlbmNlPzogRHluYW1pY0RpYWxvZ1JlZlxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG5cclxuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWN0aXZlU3Vic2NyaXB0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgLy8gbGV0IG5ld0FkZGVkRGlyZWN0aXZlcyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCkuZmlsdGVyKHggPT4geC50cmVhdGVkID09IGZhbHNlKVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJuZXdBZGRlZERpcmVjdGl2ZXMgOiBcIiwgbmV3QWRkZWREaXJlY3RpdmVzKVxyXG4gICAgLy8gaWYgKG5ld0FkZGVkRGlyZWN0aXZlcy5sZW5ndGggPiAwICYmICghdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lIHx8ICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUpKSB7XHJcbiAgICAvLyAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSBpZiAobmV3QWRkZWREaXJlY3RpdmVzLmxlbmd0aCA+IDAgJiYgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgIC8vICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKG5ld0FkZGVkRGlyZWN0aXZlcyk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKG5ld0FkZGVkRGlyZWN0aXZlcylcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAnTGlzdCBiYXNlIDogdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA6ICcsXHJcbiAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHNcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lIHx8XHJcbiAgICAgICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPVxyXG4gICAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgICAgICBpbnB1dC5leGVjdXRlKHRydWUsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pbml0R2VuZXJpY0NydWRJZkV4aXN0KCk7XHJcblxyXG4gICAgdGhpcy5faW5pdEdlbmVyaWNHcmlkSWZFeGlzdCgpO1xyXG5cclxuICAgIHRoaXMuX2luaXRWaWV3R3JpZElmRXhpc3QoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpO1xyXG4gICAgdGhpcy5fcmVmcmVzaFZpZXdHcmlkSW5mb3JtYXRpb25JZkV4aXN0KCk7XHJcbiAgICB0aGlzLl9yZWZyZXNoR2VuZXJpY0NydWRJbmZvcm1hdGlvbklmRXhpc3QoKTtcclxuICAgIHRoaXMuX3JlZnJlc2hHZW5lcmljR3JpZEluZm9ybWF0aW9uSWZFeGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5pbml0RGVzaWduTW9kZVN1YnNjcmlwdGlvbigpO1xyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBnZXRDb21wb25lbnRJZGVudGlmaWVyKCkge1xyXG4gICAgLy8gaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAvLyAgIHJldHVybiBgJHt0aGlzLl9teU5hbWUoKX1fJHt0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZX1gXHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gdGhpcy5fbXlOYW1lKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNb2RhbFNpemUobW9kYWxTaXplOiBJTW9kYWxTaXplKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vZGFsU2l6ZSA9IG1vZGFsU2l6ZTtcclxuICB9XHJcblxyXG4gIGRlc2NyaW1pbmF0b3JWYWx1ZUNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPVxyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyhcclxuICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICApID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgY29uc3QgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9XHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZChcclxuICAgICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBpbnB1dC5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsICYmXHJcbiAgICAgICAgIXByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRWxlbWVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlucHV0LmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmdlbmVyaWNDcnVkKSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWU7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQucHJlc2VudGF0aW9uU2V0dGluZ3MgPSB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgJiZcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgICAgaW5wdXQuZXhlY3V0ZSh0cnVlLCB1bmRlZmluZWQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaFZpZXdHcmlkSW5mb3JtYXRpb25JZkV4aXN0KCkge1xyXG4gICAgaWYgKHRoaXMudmlld0dyaWQpIHtcclxuICAgICAgaWYgKHRoaXMudmlld0dyaWQuZm9ybUVuZHBvaW50ICE9IHRoaXMuZm9ybUVuZHBvaW50KSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudmlld0dyaWQuZm9ybU5hbWUgIT0gdGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy52aWV3R3JpZC5idXNpbmVzc0NsYXNzICE9IHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuYnVzaW5lc3NDbGFzcyA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaEdlbmVyaWNHcmlkSW5mb3JtYXRpb25JZkV4aXN0KCkge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWQpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZnJlc2hHZW5lcmljQ3J1ZEluZm9ybWF0aW9uSWZFeGlzdCgpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNDcnVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmdlbmVyaWNDcnVkLmZvcm1FbmRwb2ludCAhPSB0aGlzLmZvcm1FbmRwb2ludCkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmdlbmVyaWNDcnVkLmZvcm1OYW1lICE9IHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQuYnVzaW5lc3NDbGFzcyAhPSB0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5pdFZpZXdHcmlkSWZFeGlzdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZpZXdHcmlkKSB7XHJcbiAgICAgIC8vaW5pdCByZXBvcnRpbmdcclxuICAgICAgdGhpcy52aWV3R3JpZC5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgdGhpcy52aWV3R3JpZC5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIHRoaXMudmlld0dyaWQuYnVzaW5lc3NDbGFzcyA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZFNlYXJjaE1vZGUpIHtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLnNob3dFeHBvcnRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gOiBAYnk6IEhhc3NlbixcclxuICAgICAgICAvLyBAd2h5OiBLZWVwIGFsbCBzZWFyY2ggY3JpdGVyaWEgPT4gdXNlZnVsbCBmb3IgYWR2YW5jZWQgc2VhcmNoXHJcbiAgICAgICAgLy90aGlzLnZpZXdHcmlkLnNob3dGaWx0ZXJCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMudmlld0dyaWQuc2hvd0dsb2JhbFNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy52aWV3R3JpZC5zaG93SGVhZGVyRmlsdGVycyA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy52aWV3R3JpZC5zaG93U2VhcmNoRmllbGQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICAvL2luaXQgcm93IHNlbGVjdGlvblxyXG4gICAgICAvLyB0aGlzLnZpZXdHcmlkLnNlbGVjdEtleU9ubHkgPSB0aGlzLnNlbGVjdEtleU9ubHk7XHJcbiAgICAgIC8vIHRoaXMudmlld0dyaWQuc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcclxuICAgICAgLy8gdGhpcy52aWV3R3JpZC5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAvLyB0aGlzLnZpZXdHcmlkLmtleSA9IHRoaXMua2V5O1xyXG5cclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbiA9XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRJdGVtc0NoYW5nZUV2ZW50KGl0ZW1zKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0R2VuZXJpY0dyaWRJZkV4aXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZFNlYXJjaE1vZGUpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNlbGVjdGlvbk1vZGUgPSBHcmlkU2VsZWN0aW9uTW9kZS5TaW5nbGU7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljR3JpZC5zaG93QWN0aW9uQ29sdW1uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljR3JpZC5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljR3JpZC5zaG93RXhwb3J0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljR3JpZC5zZWxlY3RLZXlPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyA6IEBieTogSGFzc2VuLFxyXG4gICAgICAgIC8vIEB3aHk6IEtlZXAgYWxsIHNlYXJjaCBjcml0ZXJpYSA9PiB1c2VmdWxsIGZvciBhZHZhbmNlZCBzZWFyY2hcclxuICAgICAgICAvL3RoaXMuZ2VuZXJpY0dyaWQuc2hvd0ZpbHRlckJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIC8vdGhpcy5nZW5lcmljR3JpZC5zaG93R2xvYmFsU2VhcmNoID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmdlbmVyaWNHcmlkLnNob3dIZWFkZXJGaWx0ZXJzID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmdlbmVyaWNHcmlkLnNob3dTZWFyY2hCb3ggPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuZ2VuZXJpY0dyaWQuc2hvd1NlYXJjaEZpZWxkID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmdlbmVyaWNHcmlkLlNob3dGaWx0ZXJDb2x1bW5zID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbiA9XHJcbiAgICAgICAgdGhpcy5nZW5lcmljR3JpZC5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRJdGVtc0NoYW5nZUV2ZW50KGl0ZW1zKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0R2VuZXJpY0NydWRJZkV4aXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQpIHtcclxuICAgICAgLy9pbml0IHJlcG9ydGluZ1xyXG4gICAgICBpZiAodGhpcy5pc0FkdmFuY2VkU2VhcmNoTW9kZSkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2VsZWN0aW9uTW9kZSA9IEdyaWRTZWxlY3Rpb25Nb2RlLlNpbmdsZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dEZWxldGVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RWRpdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0V4cG9ydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0luZm9CdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dEb3dubG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd1JlcG9ydGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd1VwbG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2VsZWN0S2V5T25seSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gOiBAYnk6IEhhc3NlbixcclxuICAgICAgICAvLyBAd2h5OiBLZWVwIGFsbCBzZWFyY2ggY3JpdGVyaWEgPT4gdXNlZnVsbCBmb3IgYWR2YW5jZWQgc2VhcmNoXHJcbiAgICAgICAgLy90aGlzLmdlbmVyaWNDcnVkLnNob3dHbG9iYWxTZWFyY2ggPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMuZ2VuZXJpY0NydWQuc2hvd1NlYXJjaEZpZWxkID0gZmFsc2U7XHJcbiAgICAgICAgLy90aGlzLmdlbmVyaWNDcnVkLnNob3dIZWFkZXJGaWx0ZXJzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5uZ09uSW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcblxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPVxyXG4gICAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5wcmVzZW50YXRpb25TZXR0aW5ncyA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdDtcclxuXHJcbiAgICAgIC8vIGlmICh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3RcclxuICAgICAgLy8gICAmJiB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID4gMFxyXG4gICAgICAvLyAgICYmIHRoaXMuZ2VuZXJpY0NydWQuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgLy8gICB0aGlzLmdlbmVyaWNDcnVkLmdlbmVyaWNHcmlkQ29tcG9uZW50LnByZXNlbnRhdGlvblNldHRpbmdzID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0O1xyXG4gICAgICAvLyAgIHRoaXMuZ2VuZXJpY0NydWQuZ2VuZXJpY0dyaWRDb21wb25lbnQuc2VhcmNoKClcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy9pbml0IHJvdyBzZWxlY3Rpb25cclxuICAgICAgLy8gdGhpcy5nZW5lcmljQ3J1ZC5zZWxlY3RLZXlPbmx5ID0gdGhpcy5zZWxlY3RLZXlPbmx5O1xyXG4gICAgICAvLyB0aGlzLmdlbmVyaWNDcnVkLnNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XHJcbiAgICAgIC8vIHRoaXMuZ2VuZXJpY0NydWQuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcztcclxuICAgICAgLy8gdGhpcy5nZW5lcmljQ3J1ZC5rZXkgPSB0aGlzLmtleTtcclxuXHJcbiAgICAgIHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24gPVxyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2VsZWN0ZWRJdGVtc0NoYW5nZS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT5cclxuICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdGVkSXRlbXNDaGFuZ2VFdmVudChpdGVtcylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBY3RpdmVTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb24pIHtcclxuICAgICAgdGhpcy5fYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSBpdGVtcztcclxuICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBpdGVtcyBhcmUgOiAnLCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuICBoYW5kbGVSb3dEYmxDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgdWlkID0gdGhpcy5nZW5lcmljQ3J1ZD8uc2VsZWN0ZWRJdGVtc1swXTtcclxuICAgIGlmICh1aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbFdpdGhJZCh1aWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjbG9zZU1vZGFsV2l0aElkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWZlcmVuY2UpIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5jbG9zZShpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvdWJsZUNsaWNrZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVSb3dEYmxDbGljayhldmVudCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBpbml0RGVzaWduTW9kZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMuX2Rlc2lnbk1vZGVMaXN0U3Vic2NyaXB0aW9uID1cclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5kZXNpZ25Nb2RlTGlzdE9ic2VydmFibGUuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZURlc2lnbk1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmICghZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGUuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gUHJlc2VudGF0aW9uIFNldHRpbmdzXHJcblxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50KGRpcmVjdGl2ZTogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKSkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgKTtcclxuICAgIGlmIChcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgKSB7XHJcbiAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCkge1xyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID1cclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29uZmlnQXBwbGllZCA9IHRydWU7XHJcblxyXG4gICAgLy8gbGV0IGlucHV0c1RvQWRkID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50c1xyXG4gICAgLy8gICAuZmlsdGVyKHggPT4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uc29tZSh5ID0+IHkuYmxvY2tOYW1lID09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgeS5pc0Jsb2NrVmlzaWJsZSkpXHJcblxyXG4gICAgLy8gaW5wdXRzVG9BZGQuZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAvLyAgIGxldCBjb25maWd1cmF0aW9uID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGlucHV0LnByZXNlbnRhdGlvbkRlc2lnbmVyKT8uY29uZmlndXJhdGlvblxyXG4gICAgLy8gICBpbnB1dC5leGVjdXRlKHRydWUsIGNvbmZpZ3VyYXRpb24pXHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoKSB7XHJcbiAgICBsZXQgc2hvd0hpZGVDb25maWdCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbmZpZ01vZGVCdXR0b25JZCk7XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHNob3dIaWRlQ29uZmlnQnRuKSB7XHJcbiAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5SZWYgPSBzaG93SGlkZUNvbmZpZ0J0bj8uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmID0gc2hvd0hpZGVDb25maWdCdG4/LnBhcmVudE5vZGU7XHJcblxyXG4gICAgICBjb25zdCBvbGRCdXR0b25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICB0aGlzLnNhdmVQcm9wZXJ0aWVzQnV0dG9uQ2xhc3NOYW1lXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAob2xkQnV0dG9ucykge1xyXG4gICAgICAgIEFycmF5LmZyb20ob2xkQnV0dG9ucykuZm9yRWFjaCgob2xkQnV0dG9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKHNob3dIaWRlQ29uZmlnQnRuPy5wYXJlbnROb2RlLCBvbGRCdXR0b24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gc2hvd0hpZGVDb25maWdCdG4ucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyPy5yZW1vdmVDaGlsZChwYXJlbnRFbGVtZW50LCBzaG93SGlkZUNvbmZpZ0J0bik7XHJcblxyXG4gICAgICBjb25zdCB0c2lCdXR0b25SZWYgPVxyXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWY/LmNyZWF0ZUNvbXBvbmVudChUc2lCdXR0b25Db21wb25lbnQpO1xyXG5cclxuICAgICAgaWYgKHRzaUJ1dHRvblJlZikge1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dChcclxuICAgICAgICAgICd0ZXh0JyxcclxuICAgICAgICAgICdzaGFyZWRfdHNpX2NvbXBvbmVudF9zYXZlX2NvbmZpZ19zaG93X2hpZGUnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0c2lCdXR0b25SZWYuc2V0SW5wdXQoJ2ljb24nLCAnc2F2ZScpO1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dCgnaWQnLCB0aGlzLnNhdmVQcm9wZXJ0eUJ0bklkKTtcclxuXHJcbiAgICAgICAgdHNpQnV0dG9uUmVmLmluc3RhbmNlLm9uQ2xpY2suc3Vic2NyaWJlKCgpID0+IHRoaXMuc2F2ZVByb3BlcnRpZXMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShcclxuICAgICAgICAgIHRzaUJ1dHRvblJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAgIHRoaXMuc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyPy5hcHBlbmRDaGlsZChcclxuICAgICAgICAgIHBhcmVudEVsZW1lbnQsXHJcbiAgICAgICAgICB0c2lCdXR0b25SZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyhcclxuICAgICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgICApID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgICAgICBpbnB1dC5pbnNlcnRFbGVtZW50KCk7XHJcbiAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICBpbnB1dC5zZWxlY3RBcHByb3JpYXRlQ29sdW1ucyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW5wdXQuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChibG9ja05hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBibG9ja05hbWVcclxuICAgICk/LnVpZDtcclxuICB9XHJcblxyXG4gIHNhdmVQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKCF0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdO1xyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgY29uc3Qgc291cmNlcyA9IFtcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkcyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNDcnVkcyxcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkcyxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGNvbnN0IG1hdGNoZWRTb3VyY2UgPSBzb3VyY2VzLmZpbmQoXHJcbiAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICB4LmZvcm1OYW1lID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgfHxcclxuICAgICAgICAgIHguaWQgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKG1hdGNoZWRTb3VyY2UpIHtcclxuICAgICAgICBjb25zdCBncmlkU3RhdGUgPSBtYXRjaGVkU291cmNlLmdldFN0YXRlKCk7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbiA9IGdyaWRTdGF0ZSA/IEpTT04uc3RyaW5naWZ5KGdyaWRTdGF0ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvYmplY3Q6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB7XHJcbiAgICAgICAgYmxvY2tOYW1lOiBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIsXHJcbiAgICAgICAgaXNCbG9ja1Zpc2libGU6XHJcbiAgICAgICAgICAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKFxyXG4gICAgICAgICAgZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyID8/ICcnXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5wdXNoKG9iamVjdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QuY29tcG9uZW50SWRlbnRpZmVyID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCk7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMgPVxyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscztcclxuXHJcbiAgICAvL3RoaXMubG9hZGluZyA9IHRydWVcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QuZGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWU7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkICE9IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLnVwZGF0ZVByZXNlbnRhdGlvblNldHRpbmcoXHJcbiAgICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsXHJcbiAgICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5sb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5sb2FkUHJlc2VudGF0aW9uU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RhdGUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2VcclxuICAgICAgICAuY3JlYXRlUHJlc2VudGF0aW9uU2V0dGluZyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmxvYWRQcmVzZW50YXRpb25TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdGF0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzU3RhdGUoKSB7XHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUxpc3RTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG5cclxuICAgIGxldCBzYXZlUHJvcGVydGllc0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2F2ZVByb3BlcnR5QnRuSWQpO1xyXG5cclxuICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKFxyXG4gICAgICBzYXZlUHJvcGVydGllc0J0bj8ucGFyZW50Tm9kZSxcclxuICAgICAgc2F2ZVByb3BlcnRpZXNCdG5cclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWYgJiYgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZikge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChcclxuICAgICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmLFxyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5SZWZcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICBpbnB1dC5yZW1vdmVTaG93SGlkZUNoZWNrYm94KCk7XHJcbiAgICAgIGNvbnN0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5ibG9ja05hbWUgPT0gaW5wdXQucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgICApO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCAmJlxyXG4gICAgICAgICFwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlucHV0LnJlbW92ZUVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kIHJlZ2lvblxyXG59XHJcbiIsIjxwPnRzaS1saXN0LWJhc2Ugd29ya3MhPC9wPiJdfQ==
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWxpc3QtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktbGlzdC1iYXNlL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWxpc3QtYmFzZS90c2ktbGlzdC1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFHTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBdUMsbUJBQW1CLEVBQTZCLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUE4QixNQUFNLG1CQUFtQixDQUFDO0FBQ2xNLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlGQUFpRixDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlHLE9BQU8s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dUhBaUVPLFdBQVc7c0JBQTlDLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUVFLFdBQVc7c0JBQTlDLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUVELFFBQVE7c0JBQXhDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUcvQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUlyQyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUdELFNBQVM7c0JBQTVDLFlBQVk7dUJBQUMsb0JBQW9CO2dCQWtTbEMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5qZWN0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2FwcC1iYXNlL2FwcC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IE1vZGFsU2l6ZUVudW0gfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEdyaWRDb2x1bW4sIElNb2RhbFNpemUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RGVzY3JpbWluYXRvciwgU2VhcmNoRmllbGQsIFByZXNlbnRhdGlvblNldHRpbmcsIFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSwgTGF5b3V0SGVscGVyU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UsIEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9idXR0b24tY29tcG9uZW50cy90c2ktYnV0dG9uL3RzaS1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpVmlld0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcy9wcmVzZW50YXRpb24tZGVzaWduZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2VudGF0aW9uLXNldHRpbmcvcHJlc2VudGF0aW9uLWRlc2lnbmVyLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdHNpLWxpc3QtYmFzZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1saXN0LWJhc2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRzaUxpc3RCYXNlQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuICBwcml2YXRlIF9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gJ2NvbmZnLW1vZGUtYnV0dG9uLWZyb20tbGlzdCc7XHJcbiAgc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWUgPSAnY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0LXNhdmUtcHJvcGVydGllcyc7XHJcbiAgc2F2ZVByb3BlcnR5QnRuSWQgPSAnc2F2ZS1wcm9wZXJ0eS1idG4nO1xyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGZvcm1FbmRwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN1cGVyLmZvcm1FbmRwb2ludDtcclxuICB9XHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBmb3JtRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG4gICAgc3VwZXIuZm9ybUVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVzaW5lc3NDbGFzcztcclxuICB9XHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBidXNpbmVzc0NsYXNzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHN1cGVyLmJ1c2luZXNzQ2xhc3MgPSB2YWx1ZVxyXG4gICAgdGhpcy5mb3JtRW5kcG9pbnQgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAvLyBAVE9ETyBNZWRBbGkgOiDDoCB0ZXN0ZXJcclxuICAgIC8vdGhpcy5nZXRFbnRpdHlJbmZvcm1hdGlvbih0aGlzLl9idXNpbmVzc0NsYXNzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbXBvbmVudERlc2NyaW1pbmF0b3I/OiBDb21wb25lbnREZXNjcmltaW5hdG9yO1xyXG4gIHNldCBjb21wb25lbnREZXNjcmltaW5hdG9yKHZhbHVlOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yID0gdmFsdWU7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3IgJiZcclxuICAgICAgdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvci5wcm9wZXJ0eVZhbHVlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmJ1c2luZXNzQ2xhc3MgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgaWYgKHZhbHVlPy5wcm9wZXJ0eVZhbHVlICE9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZT8ucHJvcGVydHlWYWx1ZTtcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IoKTogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvcjtcclxuICB9XHJcblxyXG4gIGNvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgdGl0bGVDb21wb25lbnQ6IHN0cmluZyA9ICcnO1xyXG4gIG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTWVkaXVtO1xyXG4gIGNvbXA6IGFueTtcclxuICBzZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPiA9IFtdO1xyXG4gIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG5cclxuICBwcml2YXRlIGdldCBpc0FkdmFuY2VkU2VhcmNoTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29uZmlnPy5kYXRhICYmXHJcbiAgICAgIHRoaXMuY29uZmlnLmRhdGEuaGFzT3duUHJvcGVydHkoJ2lzQWR2YW5jZWRTZWFyY2gnKSAmJlxyXG4gICAgICB0aGlzLmNvbmZpZy5kYXRhLmlzQWR2YW5jZWRTZWFyY2ggPT09IHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50KSBnZW5lcmljQ3J1ZD86IFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50KSBnZW5lcmljR3JpZD86IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKFRzaVZpZXdHcmlkQ29tcG9uZW50KSB2aWV3R3JpZD86IFRzaVZpZXdHcmlkQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50KVxyXG4gIGdlbmVyaWNHcmlkczogVHNpR2VuZXJpY0dyaWRDb21wb25lbnRbXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50KVxyXG4gIGdlbmVyaWNDcnVkczogVHNpR2VuZXJpY0NydWRDb21wb25lbnRbXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaVZpZXdHcmlkQ29tcG9uZW50KSB2aWV3R3JpZHM6IFRzaVZpZXdHcmlkQ29tcG9uZW50W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlKTtcclxuICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlID0gaW5qZWN0KExheW91dEhlbHBlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX21lc3NhZ2VJbmZvU2VydmljZSA9IGluamVjdChUc2lOb3RpZmljYXRpb25TZXJ2aWNlKTtcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSk7XHJcblxyXG4gIHNob3dIaWRlQ29uZmlnQnRuUmVmOiBOb2RlIHwgdW5kZWZpbmVkO1xyXG4gIHNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmOiBOb2RlIHwgdW5kZWZpbmVkIHwgbnVsbDtcclxuICBfZGVzaWduTW9kZUxpc3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgY29uZmlnQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IFtdO1xyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwdWJsaWMgX2RpYWxvZ1JlZmVyZW5jZT86IER5bmFtaWNEaWFsb2dSZWZcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGxpZmVjeWNsZSBob29rc1xyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICB0aGlzLl91bnN1YnNjcmliZUFjdGl2ZVN1YnNjcmlwdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIC8vIGxldCBuZXdBZGRlZERpcmVjdGl2ZXMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLmZpbHRlcih4ID0+IHgudHJlYXRlZCA9PSBmYWxzZSlcclxuICAgIC8vIGNvbnNvbGUubG9nKFwibmV3QWRkZWREaXJlY3RpdmVzIDogXCIsIG5ld0FkZGVkRGlyZWN0aXZlcylcclxuICAgIC8vIGlmIChuZXdBZGRlZERpcmVjdGl2ZXMubGVuZ3RoID4gMCAmJiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSB8fCAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSkge1xyXG4gICAgLy8gICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMobmV3QWRkZWREaXJlY3RpdmVzKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2UgaWYgKG5ld0FkZGVkRGlyZWN0aXZlcy5sZW5ndGggPiAwICYmIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAvLyAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcclxuICAgICAgJ0xpc3QgYmFzZSA6IHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgOiAnLFxyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSB8fFxyXG4gICAgICAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyhcclxuICAgICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLFxyXG4gICAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgICApID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgJiZcclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICAgICAgaW5wdXQuZXhlY3V0ZSh0cnVlLCB1bmRlZmluZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faW5pdEdlbmVyaWNDcnVkSWZFeGlzdCgpO1xyXG5cclxuICAgIHRoaXMuX2luaXRHZW5lcmljR3JpZElmRXhpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9pbml0Vmlld0dyaWRJZkV4aXN0KCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ0FmdGVyQ29udGVudENoZWNrZWQoKTtcclxuICAgIHRoaXMuX3JlZnJlc2hWaWV3R3JpZEluZm9ybWF0aW9uSWZFeGlzdCgpO1xyXG4gICAgdGhpcy5fcmVmcmVzaEdlbmVyaWNDcnVkSW5mb3JtYXRpb25JZkV4aXN0KCk7XHJcbiAgICB0aGlzLl9yZWZyZXNoR2VuZXJpY0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuaW5pdERlc2lnbk1vZGVTdWJzY3JpcHRpb24oKTtcclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpIHtcclxuICAgIC8vIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgLy8gICByZXR1cm4gYCR7dGhpcy5fbXlOYW1lKCl9XyR7dGhpcy5kZXNjcmltaW5hdG9yVmFsdWV9YFxyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIHRoaXMuX215TmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TW9kYWxTaXplKG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RhbFNpemUgPSBtb2RhbFNpemU7XHJcbiAgfVxyXG5cclxuICBkZXNjcmltaW5hdG9yVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5ibG9ja05hbWUgPT0gaW5wdXQucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgICApO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCAmJlxyXG4gICAgICAgICFwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlucHV0LnJlbW92ZUVsZW1lbnQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnB1dC5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZCkge1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlO1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLnByZXNlbnRhdGlvblNldHRpbmdzID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ICYmXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICAgIGlucHV0LmV4ZWN1dGUodHJ1ZSwgdW5kZWZpbmVkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcblxyXG4gIHByaXZhdGUgX3JlZnJlc2hWaWV3R3JpZEluZm9ybWF0aW9uSWZFeGlzdCgpIHtcclxuICAgIGlmICh0aGlzLnZpZXdHcmlkKSB7XHJcbiAgICAgIGlmICh0aGlzLnZpZXdHcmlkLmZvcm1FbmRwb2ludCAhPSB0aGlzLmZvcm1FbmRwb2ludCkge1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnZpZXdHcmlkLmZvcm1OYW1lICE9IHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudmlld0dyaWQuYnVzaW5lc3NDbGFzcyAhPSB0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZnJlc2hHZW5lcmljR3JpZEluZm9ybWF0aW9uSWZFeGlzdCgpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoR2VuZXJpY0NydWRJbmZvcm1hdGlvbklmRXhpc3QoKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZCkge1xyXG4gICAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZC5mb3JtRW5kcG9pbnQgIT0gdGhpcy5mb3JtRW5kcG9pbnQpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZC5mb3JtTmFtZSAhPSB0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmdlbmVyaWNDcnVkLmJ1c2luZXNzQ2xhc3MgIT0gdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5idXNpbmVzc0NsYXNzID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luaXRWaWV3R3JpZElmRXhpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy52aWV3R3JpZCkge1xyXG4gICAgICAvL2luaXQgcmVwb3J0aW5nXHJcbiAgICAgIHRoaXMudmlld0dyaWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMudmlld0dyaWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLnZpZXdHcmlkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAgIGlmICh0aGlzLmlzQWR2YW5jZWRTZWFyY2hNb2RlKSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zaG93RXhwb3J0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uID1cclxuICAgICAgICB0aGlzLnZpZXdHcmlkLnNlbGVjdGVkSXRlbXNDaGFuZ2Uuc3Vic2NyaWJlKChpdGVtczogYW55W10pID0+XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXMpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRHZW5lcmljR3JpZElmRXhpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZCkge1xyXG4gICAgICBpZiAodGhpcy5pc0FkdmFuY2VkU2VhcmNoTW9kZSkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0dyaWQuc2hvd0FjdGlvbkNvbHVtbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0dyaWQuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0dyaWQuc2hvd0V4cG9ydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24gPVxyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0dyaWQuc2VsZWN0ZWRJdGVtc0NoYW5nZS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT5cclxuICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdGVkSXRlbXNDaGFuZ2VFdmVudChpdGVtcylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdEdlbmVyaWNDcnVkSWZFeGlzdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNDcnVkKSB7XHJcbiAgICAgIC8vaW5pdCByZXBvcnRpbmdcclxuICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZFNlYXJjaE1vZGUpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dBZGRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dEZWxldGVCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dDb25zdWx0QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RWRpdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0V4cG9ydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0luZm9CdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dEb3dubG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd1JlcG9ydGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd1VwbG9hZEJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLm5nT25Jbml0KCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuYnVzaW5lc3NDbGFzcyA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLnByZXNlbnRhdGlvblNldHRpbmdzID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0O1xyXG5cclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbiA9XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRJdGVtc0NoYW5nZUV2ZW50KGl0ZW1zKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91bnN1YnNjcmliZUFjdGl2ZVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rlc2lnbk1vZGVMaXN0U3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2Rlc2lnbk1vZGVMaXN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uKSB7XHJcbiAgICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkQmFzZURpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdGVkSXRlbXNDaGFuZ2VFdmVudChpdGVtczogYW55W10pOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGl0ZW1zO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ1NlbGVjdGVkIGl0ZW1zIGFyZSA6ICcsIHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG4gIGhhbmRsZVJvd0RibENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCB1aWQgPSB0aGlzLmdlbmVyaWNDcnVkPy5zZWxlY3RlZEl0ZW1zWzBdO1xyXG4gICAgaWYgKHVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jbG9zZU1vZGFsV2l0aElkKHVpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNsb3NlTW9kYWxXaXRoSWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZmVyZW5jZSkge1xyXG4gICAgICB0aGlzLl9kaWFsb2dSZWZlcmVuY2U/LmNsb3NlKGlkKTtcclxuICAgIH1cclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uRG91YmxlQ2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZVJvd0RibENsaWNrKGV2ZW50KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGluaXREZXNpZ25Nb2RlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5fZGVzaWduTW9kZUxpc3RTdWJzY3JpcHRpb24gPVxyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmRlc2lnbk1vZGVMaXN0T2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMudG9nZ2xlRGVzaWduTW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24gPVxyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuYWRkZWREaXJlY3RpdmVPYnNlcnZhYmxlLnN1YnNjcmliZShcclxuICAgICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFkYXRhLnRyZWF0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLl9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb24gPVxyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmICghZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQcmVzZW50YXRpb24gU2V0dGluZ3NcclxuXHJcbiAgcHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGlyZWN0aXZlOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpKSB7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPVxyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyhcclxuICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICApID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9XHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICApO1xyXG4gICAgaWYgKFxyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlXHJcbiAgICApIHtcclxuICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMoKSB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuICAgICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICApIHtcclxuICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb25maWdBcHBsaWVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBsZXQgaW5wdXRzVG9BZGQgPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzXHJcbiAgICAvLyAgIC5maWx0ZXIoeCA9PiB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5zb21lKHkgPT4geS5ibG9ja05hbWUgPT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiB5LmlzQmxvY2tWaXNpYmxlKSlcclxuXHJcbiAgICAvLyBpbnB1dHNUb0FkZC5mb3JFYWNoKGlucHV0ID0+IHtcclxuICAgIC8vICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gaW5wdXQucHJlc2VudGF0aW9uRGVzaWduZXIpPy5jb25maWd1cmF0aW9uXHJcbiAgICAvLyAgIGlucHV0LmV4ZWN1dGUodHJ1ZSwgY29uZmlndXJhdGlvbilcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRGVzaWduTW9kZSgpIHtcclxuICAgIGxldCBzaG93SGlkZUNvbmZpZ0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY29uZmlnTW9kZUJ1dHRvbklkKTtcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoc2hvd0hpZGVDb25maWdCdG4pIHtcclxuICAgICAgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZiA9IHNob3dIaWRlQ29uZmlnQnRuPy5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWYgPSBzaG93SGlkZUNvbmZpZ0J0bj8ucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgIGNvbnN0IG9sZEJ1dHRvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgIHRoaXMuc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChvbGRCdXR0b25zKSB7XHJcbiAgICAgICAgQXJyYXkuZnJvbShvbGRCdXR0b25zKS5mb3JFYWNoKChvbGRCdXR0b246IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQoc2hvd0hpZGVDb25maWdCdG4/LnBhcmVudE5vZGUsIG9sZEJ1dHRvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBzaG93SGlkZUNvbmZpZ0J0bi5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgdGhpcy5fcmVuZGVyZXI/LnJlbW92ZUNoaWxkKHBhcmVudEVsZW1lbnQsIHNob3dIaWRlQ29uZmlnQnRuKTtcclxuXHJcbiAgICAgIGNvbnN0IHRzaUJ1dHRvblJlZiA9XHJcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZj8uY3JlYXRlQ29tcG9uZW50KFRzaUJ1dHRvbkNvbXBvbmVudCk7XHJcblxyXG4gICAgICBpZiAodHNpQnV0dG9uUmVmKSB7XHJcbiAgICAgICAgdHNpQnV0dG9uUmVmLnNldElucHV0KFxyXG4gICAgICAgICAgJ3RleHQnLFxyXG4gICAgICAgICAgJ3NoYXJlZF90c2lfY29tcG9uZW50X3NhdmVfY29uZmlnX3Nob3dfaGlkZSdcclxuICAgICAgICApO1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dCgnaWNvbicsICdzYXZlJyk7XHJcbiAgICAgICAgdHNpQnV0dG9uUmVmLnNldElucHV0KCdpZCcsIHRoaXMuc2F2ZVByb3BlcnR5QnRuSWQpO1xyXG5cclxuICAgICAgICB0c2lCdXR0b25SZWYuaW5zdGFuY2Uub25DbGljay5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zYXZlUHJvcGVydGllcygpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgdHNpQnV0dG9uUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICAgdGhpcy5zYXZlUHJvcGVydGllc0J1dHRvbkNsYXNzTmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXI/LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgcGFyZW50RWxlbWVudCxcclxuICAgICAgICAgIHRzaUJ1dHRvblJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgICAgIGlucHV0Lmluc2VydEVsZW1lbnQoKTtcclxuICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGlucHV0LnNlbGVjdEFwcHJvcmlhdGVDb2x1bW5zKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnB1dC5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGJsb2NrTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZChcclxuICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGJsb2NrTmFtZVxyXG4gICAgKT8udWlkO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsczogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbFtdID0gW107XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICBjb25zdCBzb3VyY2VzID0gW1xyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0dyaWRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0NydWRzLFxyXG4gICAgICAgIC4uLnRoaXMudmlld0dyaWRzLFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgY29uc3QgbWF0Y2hlZFNvdXJjZSA9IHNvdXJjZXMuZmluZChcclxuICAgICAgICAoeCkgPT5cclxuICAgICAgICAgIHguZm9ybU5hbWUgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciB8fFxyXG4gICAgICAgICAgeC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAobWF0Y2hlZFNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IGdyaWRTdGF0ZSA9IG1hdGNoZWRTb3VyY2UuZ2V0U3RhdGUoKTtcclxuICAgICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG9iamVjdDogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHtcclxuICAgICAgICBibG9ja05hbWU6IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcixcclxuICAgICAgICBpc0Jsb2NrVmlzaWJsZTpcclxuICAgICAgICAgICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoXHJcbiAgICAgICAgICBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgPz8gJydcclxuICAgICAgICApLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5jb21wb25lbnRJZGVudGlmZXIgPSB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKTtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzO1xyXG5cclxuICAgIC8vdGhpcy5sb2FkaW5nID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2VcclxuICAgICAgICAudXBkYXRlUHJlc2VudGF0aW9uU2V0dGluZyhcclxuICAgICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCxcclxuICAgICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWRcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmxvYWRQcmVzZW50YXRpb25TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdGF0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZVxyXG4gICAgICAgIC5jcmVhdGVQcmVzZW50YXRpb25TZXR0aW5nKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UubG9hZFByZXNlbnRhdGlvblNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0YXRlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NTdGF0ZSgpIHtcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlTGlzdFN1YmplY3QubmV4dChmYWxzZSk7XHJcblxyXG4gICAgbGV0IHNhdmVQcm9wZXJ0aWVzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zYXZlUHJvcGVydHlCdG5JZCk7XHJcblxyXG4gICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQoXHJcbiAgICAgIHNhdmVQcm9wZXJ0aWVzQnRuPy5wYXJlbnROb2RlLFxyXG4gICAgICBzYXZlUHJvcGVydGllc0J0blxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93SGlkZUNvbmZpZ0J0blBhcmVudFJlZiAmJiB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUmVmKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWYsXHJcbiAgICAgICAgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZlxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUmVmID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgIGlucHV0LnJlbW92ZVNob3dIaWRlQ2hlY2tib3goKTtcclxuICAgICAgY29uc3QgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9XHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZChcclxuICAgICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBpbnB1dC5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsICYmXHJcbiAgICAgICAgIXByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRWxlbWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMoKTtcclxuICB9XHJcblxyXG4gIC8vICNlbmQgcmVnaW9uXHJcbn1cclxuIiwiPHA+dHNpLWxpc3QtYmFzZSB3b3JrcyE8L3A+Il19