@skyux/tabs 10.0.0-alpha.2 → 10.0.0-alpha.3

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.
@@ -192,7 +192,7 @@ export class SkyTabsetComponent {
192
192
  this.#adapterService.detectOverflow();
193
193
  }
194
194
  onTabCloseClick(tabButton) {
195
- const tabComponent = this.tabs?.find((tab) => this.#tabsetService.tabIndexesEqual(tab.tabIndex, tabButton.tabIndex));
195
+ const tabComponent = this.tabs?.find((tab) => this.#tabsetService.tabIndexesEqual(tab.tabIndexValue, tabButton.tabIndex));
196
196
  tabComponent?.close.emit();
197
197
  }
198
198
  onTabButtonClick(tabButton) {
@@ -225,7 +225,7 @@ export class SkyTabsetComponent {
225
225
  #getInitialTabIndex() {
226
226
  let activeIndex = this.#getActiveTabIndexByPermalinkId();
227
227
  if (activeIndex === undefined) {
228
- activeIndex = this.#getActiveTabComponent()?.tabIndex;
228
+ activeIndex = this.#getActiveTabComponent()?.tabIndexValue;
229
229
  if (activeIndex === undefined) {
230
230
  activeIndex = this.active;
231
231
  }
@@ -256,7 +256,7 @@ export class SkyTabsetComponent {
256
256
  .subscribe(() => {
257
257
  // Wait for the tab components to render changes before finding the active one.
258
258
  setTimeout(() => {
259
- const tabIndex = this.#getActiveTabComponent()?.tabIndex;
259
+ const tabIndex = this.#getActiveTabComponent()?.tabIndexValue;
260
260
  this.#tabsetService.setActiveTabIndex({ tabIndex });
261
261
  });
262
262
  });
@@ -294,7 +294,7 @@ export class SkyTabsetComponent {
294
294
  return;
295
295
  }
296
296
  this.#initTabComponents();
297
- const activeIndex = this.#getActiveTabComponent()?.tabIndex;
297
+ const activeIndex = this.#getActiveTabComponent()?.tabIndexValue;
298
298
  this.#tabsetService.setActiveTabIndex({
299
299
  tabIndex: activeIndex,
300
300
  }, {
@@ -306,7 +306,7 @@ export class SkyTabsetComponent {
306
306
  this.tabIndexesChange.emit({
307
307
  tabs: this.tabs?.map((tab) => ({
308
308
  tabHeading: tab.tabHeading,
309
- tabIndex: tab.tabIndex,
309
+ tabIndex: tab.tabIndexValue,
310
310
  })),
311
311
  });
312
312
  }
@@ -344,7 +344,7 @@ export class SkyTabsetComponent {
344
344
  if (this.permalinkId) {
345
345
  const paramValue = this.#permalinkService.getParam(this.permalinkId);
346
346
  if (paramValue) {
347
- return this.tabs?.find((tab) => tab.permalinkValueOrDefault === paramValue)?.tabIndex;
347
+ return this.tabs?.find((tab) => tab.permalinkValueOrDefault === paramValue)?.tabIndexValue;
348
348
  }
349
349
  return undefined;
350
350
  }
@@ -363,7 +363,7 @@ export class SkyTabsetComponent {
363
363
  return [];
364
364
  }
365
365
  return this.tabs.map((tab, index) => ({
366
- active: this.#tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex),
366
+ active: this.#tabsetService.tabIndexesEqual(tab.tabIndexValue, activeIndex),
367
367
  closeable: tab.isCloseable(),
368
368
  ariaControls: tab.tabPanelId,
369
369
  disabled: tab.disabled,
@@ -373,7 +373,7 @@ export class SkyTabsetComponent {
373
373
  buttonId: tab.tabButtonId,
374
374
  buttonTextCount: tab.tabHeaderCount,
375
375
  buttonText: tab.tabHeading,
376
- tabIndex: tab.tabIndex,
376
+ tabIndex: tab.tabIndexValue,
377
377
  tabNumber: index + 1,
378
378
  totalTabsCount: this.tabs.length,
379
379
  }));
@@ -398,7 +398,7 @@ export class SkyTabsetComponent {
398
398
  #updateTabsetComponent(activeIndex, regenerateTabButtons, initial) {
399
399
  // Activate/deactivate tab components.
400
400
  this.tabs?.forEach((tab) => {
401
- this.#tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex)
401
+ this.#tabsetService.tabIndexesEqual(tab.tabIndexValue, activeIndex)
402
402
  ? tab.activate()
403
403
  : tab.deactivate();
404
404
  });
@@ -417,7 +417,7 @@ export class SkyTabsetComponent {
417
417
  // Set the query params based on active tab.
418
418
  if (this.permalinkId) {
419
419
  const activeTabComponent = this.tabs?.find((tab) => {
420
- return this.#tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex);
420
+ return this.#tabsetService.tabIndexesEqual(tab.tabIndexValue, activeIndex);
421
421
  });
422
422
  if (activeTabComponent) {
423
423
  this.#permalinkService.setParam(this.permalinkId, activeTabComponent.permalinkValueOrDefault, initial);
@@ -473,4 +473,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
473
473
  type: HostBinding,
474
474
  args: ['class']
475
475
  }] } });
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90YWJzL3NyYy9saWIvbW9kdWxlcy90YWJzL3RhYnNldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGFicy9zcmMvbGliL21vZHVsZXMvdGFicy90YWJzZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFjcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qjs7T0FFRztJQUNILElBQ1csTUFBTSxDQUFDLEtBQThCO1FBQzlDLElBQ0UsS0FBSyxLQUFLLFNBQVM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFD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QixLQUFLO2dCQXdDQyxTQUFTO3NCQURmLEtBQUs7Z0JBV0MsY0FBYztzQkFEcEIsS0FBSztnQkFXSyxXQUFXO3NCQURyQixLQUFLO2dCQW1CSyxRQUFRO3NCQURsQixLQUFLO2dCQWFDLFlBQVk7c0JBRGxCLE1BQU07Z0JBU0EsTUFBTTtzQkFEWixNQUFNO2dCQVNBLE9BQU87c0JBRGIsTUFBTTtnQkFRQSxnQkFBZ0I7c0JBRHRCLE1BQU07Z0JBYUksSUFBSTtzQkFEZCxlQUFlO3VCQUFDLGVBQWU7Z0JBaUJ6QixRQUFRO3NCQURkLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxheW91dEhvc3RTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCByYWNlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUYWJCdXR0b25WaWV3TW9kZWwgfSBmcm9tICcuL3RhYi1idXR0b24tdmlldy1tb2RlbCc7XG5pbXBvcnQgeyBTa3lUYWJJbmRleCB9IGZyb20gJy4vdGFiLWluZGV4JztcbmltcG9ydCB7IFNreVRhYkxheW91dFR5cGUgfSBmcm9tICcuL3RhYi1sYXlvdXQtdHlwZSc7XG5pbXBvcnQgeyBTa3lUYWJDb21wb25lbnQgfSBmcm9tICcuL3RhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGFic2V0QWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3RhYnNldC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGFic2V0QnV0dG9uc0Rpc3BsYXlNb2RlIH0gZnJvbSAnLi90YWJzZXQtYnV0dG9ucy1kaXNwbGF5LW1vZGUnO1xuaW1wb3J0IHsgU2t5VGFic2V0UGVybWFsaW5rU2VydmljZSB9IGZyb20gJy4vdGFic2V0LXBlcm1hbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRhYnNldFN0eWxlIH0gZnJvbSAnLi90YWJzZXQtc3R5bGUnO1xuaW1wb3J0IHsgU2t5VGFic2V0VGFiSW5kZXhlc0NoYW5nZSB9IGZyb20gJy4vdGFic2V0LXRhYi1pbmRleGVzLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lUYWJzZXRTZXJ2aWNlIH0gZnJvbSAnLi90YWJzZXQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10YWJzZXQnLFxuICBzdHlsZVVybHM6IFsnLi90YWJzZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnNldC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIFNreVRhYnNldEFkYXB0ZXJTZXJ2aWNlLFxuICAgIFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2UsXG4gICAgU2t5VGFic2V0U2VydmljZSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFNreVRhYnNldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgYSB0YWIgYnkgaXRzIGB0YWJJbmRleGAgcHJvcGVydHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGFjdGl2ZSh2YWx1ZTogU2t5VGFiSW5kZXggfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLnRhYkluZGV4ZXNFcXVhbCh2YWx1ZSwgdGhpcy4jX2FjdGl2ZSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNfYWN0aXZlID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLnNldEFjdGl2ZVRhYkluZGV4KHsgdGFiSW5kZXg6IHZhbHVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPbiBpbml0LCB3YWl0IGZvciBjaGlsZHJlbiB0YWJzIHRvIHJlbmRlciBiZWZvcmUgYnJvYWRjYXN0aW5nIHRoZSBhY3RpdmUgdGFiIGluZGV4LlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLiN0YWJzZXRTZXJ2aWNlLmlzVmFsaWRUYWJJbmRleCh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyBPbiBpbml0LCB5aWVsZCB0byB0aGUgcGVybWFsaW5rIElELCBpZiBpdCBleGlzdHMuXG4gICAgICAgICAgaWYgKHRoaXMuI2dldEFjdGl2ZVRhYkluZGV4QnlQZXJtYWxpbmtJZCgpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoeyB0YWJJbmRleDogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFjdGl2YXRlIHRoZSBmaXJzdCB0YWIgaWYgdGhlIG5ldyB0YWIgaW5kZXggaXMgaW52YWxpZC5cbiAgICAgICAgICB0aGlzLiNfYWN0aXZlID0gdGhpcy4jdGFic2V0U2VydmljZS5hY3RpdmF0ZUZpcnN0VGFiKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlKCk6IFNreVRhYkluZGV4IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2FjdGl2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJJQSBsYWJlbCBmb3IgdGhlIHRhYnNldC4gVGhpcyBzZXRzIHRoZSB0YWJzZXQncyBgYXJpYS1sYWJlbGAgYXR0cmlidXRlIHRvIHByb3ZpZGUgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIElmIHRoZSB0YWJzZXQgaW5jbHVkZXMgYSB2aXNpYmxlIGxhYmVsLCB1c2UgYGFyaWFMYWJlbGxlZEJ5YCBpbnN0ZWFkLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsKS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIEhUTUwgZWxlbWVudCBJRCBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVsc1xuICAgKiB0aGUgdGFic2V0LiBUaGlzIHNldHMgdGhlIHRhYnNldCdzIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSB0byBwcm92aWRlIGEgdGV4dCBlcXVpdmFsZW50IGZvciBzY3JlZW4gcmVhZGVyc1xuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBJZiB0aGUgdGFic2V0IGRvZXMgbm90IGluY2x1ZGUgYSB2aXNpYmxlIGxhYmVsLCB1c2UgYGFyaWFMYWJlbGAgaW5zdGVhZC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsbGVkYnkpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIERpc3Rpbmd1aXNoZXMgYSB0YWJzZXQncyB1bmlxdWUgc3RhdGUgaW4gdGhlIFVSTCBieSBnZW5lcmF0aW5nIGEgcXVlcnkgcGFyYW1ldGVyXG4gICAqIHRoYXQgaXMgd3JpdHRlbiBhcyBgPzxxdWVyeVBhcmFtPi1hY3RpdmUtdGFiPTxzYW5pdGl6ZWQtdGFiLWhlYWRpbmc+YC5cbiAgICogVGhlIHF1ZXJ5IHBhcmFtZXRlcidzIHZhbHVlIGlzIHBhcnNlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIHNlbGVjdGVkIHRhYidzIGhlYWRpbmcgdGV4dCxcbiAgICogYnV0IHlvdSBjYW4gc3VwcGx5IGEgY3VzdG9tIHF1ZXJ5IHBhcmFtZXRlciB2YWx1ZSBmb3IgZWFjaCB0YWIgd2l0aCBpdHMgYHBlcm1hbGlua1ZhbHVlYC5cbiAgICogVGhpcyBpbnB1dCBvbmx5IGFwcGxpZXMgd2hlbiBgdGFiU3R5bGVgIGlzIGBcInRhYnNcImBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcGVybWFsaW5rSWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuI19wZXJtYWxpbmtJZCA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSB0aGlzLiNwZXJtYWxpbmtTZXJ2aWNlLnVybGlmeSh2YWx1ZSk7XG4gICAgICB0aGlzLiNfcGVybWFsaW5rSWQgPSBgJHtzYW5pdGl6ZWR9LWFjdGl2ZS10YWJgO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGVybWFsaW5rSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX3Blcm1hbGlua0lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiZWhhdmlvciBmb3IgYSBzZXJpZXMgb2YgdGFicy5cbiAgICogQGRlZmF1bHQgXCJ0YWJzXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFiU3R5bGUodmFsdWU6IFNreVRhYnNldFN0eWxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3RhYlN0eWxlID0gdmFsdWUgfHwgJ3RhYnMnO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWJTdHlsZSgpOiBTa3lUYWJzZXRTdHlsZSB7XG4gICAgcmV0dXJuIHRoaXMuI190YWJTdHlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgdGFiIGNoYW5nZXMuIFRoaXMgZXZlbnQgZW1pdHMgdGhlIGluZGV4IG9mIHRoZSBhY3RpdmUgdGFiLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhY3RpdmVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreVRhYkluZGV4PigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGNsaWNrIHRoZSBidXR0b24gdG8gYWRkIGEgbmV3IHRhYi5cbiAgICogVGhlIG5ldyB0YWIgYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSB0YWIgYXJlYSB3aGVuIHlvdSBzcGVjaWZ5IGEgbGlzdGVuZXIgZm9yIHRoaXMgZXZlbnQuXG4gICAqIFRoaXMgZXZlbnQgb25seSBhcHBsaWVzIHdoZW4gYHRhYlN0eWxlYCBpcyBgXCJ0YWJzXCJgLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBuZXdUYWIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY2xpY2sgdGhlIGJ1dHRvbiB0byBvcGVuIGEgdGFiLlxuICAgKiBUaGUgb3BlbiB0YWIgYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSB0YWIgYXJlYSB3aGVuIHlvdSBzcGVjaWZ5IGEgbGlzdGVuZXIgZm9yIHRoaXMgZXZlbnQuXG4gICAqIFRoaXMgZXZlbnQgb25seSBhcHBsaWVzIHdoZW4gYHRhYlN0eWxlYCBpcyBgXCJ0YWJzXCJgLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvcGVuVGFiID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIGFueSB0YWIncyBgdGFiSW5kZXhgIHZhbHVlIGNoYW5nZXMuXG4gICAqIFRoaXMgZXZlbnQgb25seSBhcHBsaWVzIHdoZW4gYHRhYlN0eWxlYCBpcyBgXCJ0YWJzXCJgLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyB0YWJJbmRleGVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lUYWJzZXRUYWJJbmRleGVzQ2hhbmdlPigpO1xuXG4gIHB1YmxpYyBzZXQgdGFiRGlzcGxheU1vZGUodmFsdWU6IFNreVRhYnNldEJ1dHRvbnNEaXNwbGF5TW9kZSkge1xuICAgIHRoaXMuI190YWJEaXNwbGF5TW9kZSA9IHZhbHVlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWJEaXNwbGF5TW9kZSgpOiBTa3lUYWJzZXRCdXR0b25zRGlzcGxheU1vZGUge1xuICAgIHJldHVybiB0aGlzLiNfdGFiRGlzcGxheU1vZGU7XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFNreVRhYkNvbXBvbmVudClcbiAgcHVibGljIHNldCB0YWJzKHZhbHVlOiBRdWVyeUxpc3Q8U2t5VGFiQ29tcG9uZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI190YWJzID0gdmFsdWU7XG4gICAgdGhpcy4jdGFiQ29tcG9uZW50c0NoYW5nZVVuc3Vic2NyaWJlLm5leHQoKTtcblxuICAgIHZhbHVlPy5jaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jdGFiQ29tcG9uZW50c0NoYW5nZVVuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNyZXNldFRhYkNvbXBvbmVudHMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWJzKCk6IFF1ZXJ5TGlzdDxTa3lUYWJDb21wb25lbnQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3RhYnM7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHVibGljIGNzc0NsYXNzID0gJ3NreS10YWJzZXQtbGF5b3V0LW5vbmUnO1xuXG4gIHB1YmxpYyBkcm9wZG93blRyaWdnZXJCdXR0b25UZXh0ID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSB0aGUgZGVwcmVjYXRlZCB0YWJzZXQtbmF2LWJ1dHRvbiBjb21wb25lbnQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGxhc3RBY3RpdmVUYWJJbmRleDogU2t5VGFiSW5kZXggfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHRhYkJ1dHRvbnM6IFRhYkJ1dHRvblZpZXdNb2RlbFtdID0gW107XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICN0YWJDb21wb25lbnRzQ2hhbmdlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjdGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNfYWN0aXZlOiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZDtcblxuICAjX3Blcm1hbGlua0lkID0gJyc7XG5cbiAgI190YWJzOiBRdWVyeUxpc3Q8U2t5VGFiQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICAjX3RhYkRpc3BsYXlNb2RlOiBTa3lUYWJzZXRCdXR0b25zRGlzcGxheU1vZGUgPSAndGFicyc7XG5cbiAgI190YWJTdHlsZTogU2t5VGFic2V0U3R5bGUgPSAndGFicyc7XG5cbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNhZGFwdGVyU2VydmljZTogU2t5VGFic2V0QWRhcHRlclNlcnZpY2U7XG4gICNwZXJtYWxpbmtTZXJ2aWNlOiBTa3lUYWJzZXRQZXJtYWxpbmtTZXJ2aWNlO1xuICAjdGFic2V0U2VydmljZTogU2t5VGFic2V0U2VydmljZTtcblxuICAjbGF5b3V0SG9zdFN2YyA9IGluamVjdChTa3lMYXlvdXRIb3N0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBhZGFwdGVyU2VydmljZTogU2t5VGFic2V0QWRhcHRlclNlcnZpY2UsXG4gICAgcGVybWFsaW5rU2VydmljZTogU2t5VGFic2V0UGVybWFsaW5rU2VydmljZSxcbiAgICB0YWJzZXRTZXJ2aWNlOiBTa3lUYWJzZXRTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlID0gYWRhcHRlclNlcnZpY2U7XG4gICAgdGhpcy4jcGVybWFsaW5rU2VydmljZSA9IHBlcm1hbGlua1NlcnZpY2U7XG4gICAgdGhpcy4jdGFic2V0U2VydmljZSA9IHRhYnNldFNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2luaXRUYWJDb21wb25lbnRzKCk7XG5cbiAgICBjb25zdCBpbml0aWFsVGFiSW5kZXggPSB0aGlzLiNnZXRJbml0aWFsVGFiSW5kZXgoKTtcbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLnNldEFjdGl2ZVRhYkluZGV4KHtcbiAgICAgIHRhYkluZGV4OiBpbml0aWFsVGFiSW5kZXgsXG4gICAgICBpbml0aWFsOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy4jbGlzdGVuVGFiQnV0dG9uc092ZXJmbG93Q2hhbmdlKCk7XG4gICAgdGhpcy4jbGlzdGVuTG9jYXRpb25Qb3BTdGF0ZUNoYW5nZSgpO1xuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiIGlzIGdldHRpbmcgdW5yZWdpc3RlcmVkLCBhY3RpdmF0ZSB0aGUgbmV4dCBvbmUuXG4gICAgdGhpcy4jdGFic2V0U2VydmljZS5hY3RpdmVUYWJVbnJlZ2lzdGVyZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHRhYikgPT4ge1xuICAgICAgICAvLyBXYWl0IGZvciB0aGUgbmV3IHRhYnMgdG8gcmVuZGVyIGJlZm9yZSBhY3RpdmF0aW5nLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLmFjdGl2YXRlTmVhcmVzdFRhYih0YWIuYXJyYXlJbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLmFjdGl2ZVRhYkxheW91dFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGF5b3V0KSA9PiB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZUxheW91dChsYXlvdXQpO1xuICAgICAgfSk7XG5cbiAgICAvLyBMZXQgdGhlIHRhYnNldCByZW5kZXIgdGhlIGluaXRpYWwgYWN0aXZlIGluZGV4IGJlZm9yZSBsaXN0ZW5pbmcgZm9yIGNoYW5nZXMuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLiNsaXN0ZW5UYWJDb21wb25lbnRzU3RhdGVDaGFuZ2UoKTtcbiAgICAgIHRoaXMuI2xpc3RlbkFjdGl2ZUluZGV4Q2hhbmdlKCk7XG4gICAgICB0aGlzLiNwZXJtYWxpbmtTZXJ2aWNlLmluaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jdGFiQ29tcG9uZW50c0NoYW5nZVVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiN0YWJDb21wb25lbnRzQ2hhbmdlVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiN1bnN1YnNjcmliZVRhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZSgpO1xuICAgIGlmICh0aGlzLnBlcm1hbGlua0lkKSB7XG4gICAgICB0aGlzLiNwZXJtYWxpbmtTZXJ2aWNlLmNsZWFyUGFyYW0odGhpcy5wZXJtYWxpbmtJZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmRldGVjdE92ZXJmbG93KCk7XG4gIH1cblxuICBwdWJsaWMgb25UYWJDbG9zZUNsaWNrKHRhYkJ1dHRvbjogVGFiQnV0dG9uVmlld01vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgdGFiQ29tcG9uZW50ID0gdGhpcy50YWJzPy5maW5kKCh0YWIpID0+XG4gICAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLnRhYkluZGV4ZXNFcXVhbCh0YWIudGFiSW5kZXgsIHRhYkJ1dHRvbi50YWJJbmRleCksXG4gICAgKTtcblxuICAgIHRhYkNvbXBvbmVudD8uY2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uVGFiQnV0dG9uQ2xpY2sodGFiQnV0dG9uOiBUYWJCdXR0b25WaWV3TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLnNldEFjdGl2ZVRhYkluZGV4KHsgdGFiSW5kZXg6IHRhYkJ1dHRvbi50YWJJbmRleCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5ld1RhYkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMubmV3VGFiLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk9wZW5UYWJDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5UYWIuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uUmlnaHRLZXlEb3duKCk6IHZvaWQge1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2UuZm9jdXNOZXh0VGFiQnRuKHRoaXMudGFiQnV0dG9ucyk7XG4gIH1cblxuICBwdWJsaWMgb25MZWZ0S2V5RG93bigpOiB2b2lkIHtcbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLmZvY3VzUHJldlRhYkJ0bih0aGlzLnRhYkJ1dHRvbnMpO1xuICB9XG5cbiAgcHVibGljIG9uSG9tZUtleURvd24oKTogdm9pZCB7XG4gICAgdGhpcy4jdGFic2V0U2VydmljZS5mb2N1c0ZpcnN0T3JOZWFyZXN0VGFiQnRuKHRoaXMudGFiQnV0dG9ucyk7XG4gIH1cblxuICBwdWJsaWMgb25FbmRLZXlEb3duKCk6IHZvaWQge1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2UuZm9jdXNMYXN0T3JOZWFyZXN0VGFiQnRuKHRoaXMudGFiQnV0dG9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5pdGlhbCBhY3RpdmUgdGFiIGluZGV4IGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWEuXG4gICAqIDEuIERvZXMgdGhlIFVSTCBpbmNsdWRlIGEgcXVlcnkgcGFyYW0gdGhhdCByZWZsZWN0cyB0aGlzIHRhYnNldCdzIGFjdGl2ZSB0YWI/XG4gICAqIDIuIERvZXMgb25lIG9mIHRoZSB0YWIgY29tcG9uZW50cyBoYXZlIHRoZWlyIGBhY3RpdmVgIHByb3BlcnR5IHNldCB0byBgdHJ1ZWA/XG4gICAqIDMuIElzIHRoZSB0YWJzZXQgY29tcG9uZW50J3MgYGFjdGl2ZWAgcHJvcGVydHkgc2V0IHRvIGEgc3BlY2lmaWMgdGFiIGluZGV4P1xuICAgKi9cbiAgI2dldEluaXRpYWxUYWJJbmRleCgpOiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGFjdGl2ZUluZGV4OiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZCA9XG4gICAgICB0aGlzLiNnZXRBY3RpdmVUYWJJbmRleEJ5UGVybWFsaW5rSWQoKTtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgYWN0aXZlSW5kZXggPSB0aGlzLiNnZXRBY3RpdmVUYWJDb21wb25lbnQoKT8udGFiSW5kZXg7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RpdmVJbmRleCA9IHRoaXMuYWN0aXZlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhY3RpdmVJbmRleDtcbiAgfVxuXG4gICNsaXN0ZW5BY3RpdmVJbmRleENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLmFjdGl2ZVRhYkNoYW5nZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodGFiQ2hhbmdlKSA9PiB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZVRhYnNldENvbXBvbmVudChcbiAgICAgICAgICB0YWJDaGFuZ2UudGFiSW5kZXgsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdGFiQ2hhbmdlLmluaXRpYWwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHRoaXMuI2dldEFjdGl2ZVRhYkNvbXBvbmVudCgpO1xuXG4gICAgICAgIHRoaXMuI3VwZGF0ZUxheW91dChhY3RpdmVUYWI/LmxheW91dCk7XG4gICAgICB9KTtcbiAgfVxuXG4gICN1cGRhdGVMYXlvdXQobGF5b3V0PzogU2t5VGFiTGF5b3V0VHlwZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNsYXlvdXRIb3N0U3ZjICYmIGxheW91dCkge1xuICAgICAgdGhpcy4jbGF5b3V0SG9zdFN2Yy5zZXRIb3N0TGF5b3V0Rm9yQ2hpbGQoe1xuICAgICAgICBsYXlvdXQsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jc3NDbGFzcyA9IGBza3ktdGFic2V0LWxheW91dC0ke2xheW91dH1gO1xuICAgIH1cbiAgfVxuXG4gICNsaXN0ZW5UYWJDb21wb25lbnRzU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFicykge1xuICAgICAgY29tYmluZUxhdGVzdCh0aGlzLnRhYnMubWFwKCh0YWIpID0+IHRhYi5hY3RpdmVDaGFuZ2UpKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwoXG4gICAgICAgICAgICByYWNlKFxuICAgICAgICAgICAgICB0aGlzLiN0YWJDb21wb25lbnRzU3RhdGVDaGFuZ2VVbnN1YnNjcmliZSxcbiAgICAgICAgICAgICAgdGhpcy4jbmdVbnN1YnNjcmliZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgdGFiIGNvbXBvbmVudHMgdG8gcmVuZGVyIGNoYW5nZXMgYmVmb3JlIGZpbmRpbmcgdGhlIGFjdGl2ZSBvbmUuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWJJbmRleCA9IHRoaXMuI2dldEFjdGl2ZVRhYkNvbXBvbmVudCgpPy50YWJJbmRleDtcbiAgICAgICAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoeyB0YWJJbmRleCB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy50YWJzLm1hcCgodGFiKSA9PiB0YWIudGFiSW5kZXhDaGFuZ2UpKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwoXG4gICAgICAgICAgICByYWNlKFxuICAgICAgICAgICAgICB0aGlzLiN0YWJDb21wb25lbnRzU3RhdGVDaGFuZ2VVbnN1YnNjcmliZSxcbiAgICAgICAgICAgICAgdGhpcy4jbmdVbnN1YnNjcmliZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAvLyBEb24ndCBlbWl0IHRoZSBmaXJzdCBjaGFuZ2UuXG4gICAgICAgICAgaWYgKHRoaXMubGFzdEFjdGl2ZVRhYkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSB0YWIgY29tcG9uZW50cyB0byByZW5kZXIgY2hhbmdlcyBiZWZvcmUgdXBkYXRpbmcgdGhlIHZpZXcuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlVGFic2V0Q29tcG9uZW50KFxuICAgICAgICAgICAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UuY3VycmVudEFjdGl2ZVRhYkluZGV4LFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMuI2VtaXRUYWJJbmRleENoYW5nZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgY29tYmluZUxhdGVzdCh0aGlzLnRhYnMubWFwKCh0YWIpID0+IHRhYi5zdGF0ZUNoYW5nZSkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbChcbiAgICAgICAgICAgIHJhY2UoXG4gICAgICAgICAgICAgIHRoaXMuI3RhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZVVuc3Vic2NyaWJlLFxuICAgICAgICAgICAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSB0YWIgY29tcG9uZW50cyB0byByZW5kZXIgY2hhbmdlcyBiZWZvcmUgZmluZGluZyB0aGUgYWN0aXZlIG9uZS5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVRhYnNldENvbXBvbmVudChcbiAgICAgICAgICAgICAgdGhpcy4jdGFic2V0U2VydmljZS5jdXJyZW50QWN0aXZlVGFiSW5kZXgsXG4gICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjaW5pdFRhYkNvbXBvbmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy50YWJzPy5mb3JFYWNoKCh0YWIpID0+IHRhYi5pbml0KCkpO1xuICB9XG5cbiAgI3Jlc2V0VGFiQ29tcG9uZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLiN1bnN1YnNjcmliZVRhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZSgpO1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2UudW5yZWdpc3RlckFsbCgpO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRhYiBjb21wb25lbnRzLCBkbyBhIGhhcmQgcmVzZXQgb2YgdGhlIHZpZXcuXG4gICAgaWYgKHRoaXMudGFicz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLiN1cGRhdGVUYWJzZXRDb21wb25lbnQoMCwgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jaW5pdFRhYkNvbXBvbmVudHMoKTtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuI2dldEFjdGl2ZVRhYkNvbXBvbmVudCgpPy50YWJJbmRleDtcbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLnNldEFjdGl2ZVRhYkluZGV4KFxuICAgICAge1xuICAgICAgICB0YWJJbmRleDogYWN0aXZlSW5kZXgsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBlbWl0Q2hhbmdlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLiNsaXN0ZW5UYWJDb21wb25lbnRzU3RhdGVDaGFuZ2UoKTtcbiAgfVxuXG4gICNlbWl0VGFiSW5kZXhDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy50YWJJbmRleGVzQ2hhbmdlLmVtaXQoe1xuICAgICAgdGFiczogdGhpcy50YWJzPy5tYXAoKHRhYikgPT4gKHtcbiAgICAgICAgdGFiSGVhZGluZzogdGFiLnRhYkhlYWRpbmcsXG4gICAgICAgIHRhYkluZGV4OiB0YWIudGFiSW5kZXgsXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH1cblxuICAjdW5zdWJzY3JpYmVUYWJDb21wb25lbnRzU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jdGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI3RhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZVVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jdGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICB9XG5cbiAgI2xpc3RlblRhYkJ1dHRvbnNPdmVyZmxvd0NoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5yZWdpc3RlclRhYnNldCh0aGlzLiNlbGVtZW50UmVmKTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5vdmVyZmxvd0NoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoaXNPdmVyZmxvd2luZykgPT4ge1xuICAgICAgICB0aGlzLnRhYkRpc3BsYXlNb2RlID0gaXNPdmVyZmxvd2luZyA/ICdkcm9wZG93bicgOiAndGFicyc7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBiYWNrL2ZvcndhcmQgaGlzdG9yeSBidXR0b24gcHJlc3NlcyB0byBkZXRlY3QgcXVlcnkgcGFyYW0gY2hhbmdlcyBpbiB0aGUgVVJMLlxuICAgKi9cbiAgI2xpc3RlbkxvY2F0aW9uUG9wU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jcGVybWFsaW5rU2VydmljZS5wb3BTdGF0ZUNoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI3NldEFjdGl2ZVRhYkluZGV4QnlQZXJtYWxpbmtJZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICAjc2V0QWN0aXZlVGFiSW5kZXhCeVBlcm1hbGlua0lkKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy4jZ2V0QWN0aXZlVGFiSW5kZXhCeVBlcm1hbGlua0lkKCk7XG4gICAgdGhpcy4jdGFic2V0U2VydmljZS5zZXRBY3RpdmVUYWJJbmRleCh7XG4gICAgICB0YWJJbmRleDogYWN0aXZlSW5kZXgsXG4gICAgfSk7XG4gIH1cblxuICAjZ2V0QWN0aXZlVGFiSW5kZXhCeVBlcm1hbGlua0lkKCk6IFNreVRhYkluZGV4IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5wZXJtYWxpbmtJZCkge1xuICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHRoaXMuI3Blcm1hbGlua1NlcnZpY2UuZ2V0UGFyYW0odGhpcy5wZXJtYWxpbmtJZCk7XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzPy5maW5kKFxuICAgICAgICAgICh0YWIpID0+IHRhYi5wZXJtYWxpbmtWYWx1ZU9yRGVmYXVsdCA9PT0gcGFyYW1WYWx1ZSxcbiAgICAgICAgKT8udGFiSW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2dldEFjdGl2ZVRhYkNvbXBvbmVudCgpOiBTa3lUYWJDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYnNcbiAgICAgID8udG9BcnJheSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmluZCgodGFiKSA9PiB0YWIuYWN0aXZlID09PSB0cnVlKTtcbiAgfVxuXG4gICNjcmVhdGVUYWJCdXR0b25zKFxuICAgIGFjdGl2ZUluZGV4OiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZCxcbiAgKTogVGFiQnV0dG9uVmlld01vZGVsW10ge1xuICAgIC8vIFNhZmV0eSBjaGVja1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLnRhYnMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YWJzLm1hcCgodGFiLCBpbmRleCkgPT4gKHtcbiAgICAgIGFjdGl2ZTogdGhpcy4jdGFic2V0U2VydmljZS50YWJJbmRleGVzRXF1YWwodGFiLnRhYkluZGV4LCBhY3RpdmVJbmRleCksXG4gICAgICBjbG9zZWFibGU6IHRhYi5pc0Nsb3NlYWJsZSgpLFxuICAgICAgYXJpYUNvbnRyb2xzOiB0YWIudGFiUGFuZWxJZCxcbiAgICAgIGRpc2FibGVkOiB0YWIuZGlzYWJsZWQsXG4gICAgICBidXR0b25IcmVmOiB0YWIuZGlzYWJsZWRcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy4jcGVybWFsaW5rU2VydmljZS5nZXRQYXJhbUhyZWYoXG4gICAgICAgICAgICB0aGlzLnBlcm1hbGlua0lkLFxuICAgICAgICAgICAgdGFiLnBlcm1hbGlua1ZhbHVlT3JEZWZhdWx0LFxuICAgICAgICAgICksXG4gICAgICBidXR0b25JZDogdGFiLnRhYkJ1dHRvbklkLFxuICAgICAgYnV0dG9uVGV4dENvdW50OiB0YWIudGFiSGVhZGVyQ291bnQsXG4gICAgICBidXR0b25UZXh0OiB0YWIudGFiSGVhZGluZyxcbiAgICAgIHRhYkluZGV4OiB0YWIudGFiSW5kZXgsXG4gICAgICB0YWJOdW1iZXI6IGluZGV4ICsgMSxcbiAgICAgIHRvdGFsVGFic0NvdW50OiB0aGlzLnRhYnMhLmxlbmd0aCxcbiAgICB9KSk7XG4gIH1cblxuICAjdXBkYXRlVGFiQnV0dG9ucyhhY3RpdmVJbmRleDogU2t5VGFiSW5kZXggfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICBidXR0b24uYWN0aXZlID0gdGhpcy4jdGFic2V0U2VydmljZS50YWJJbmRleGVzRXF1YWwoXG4gICAgICAgIGJ1dHRvbi50YWJJbmRleCxcbiAgICAgICAgYWN0aXZlSW5kZXgsXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIFVJIGFuZCBzdGF0ZSBvZiB0aGUgdGFic2V0IGNvbXBvbmVudCBhZnRlciB0aGUgdGFiIGluZGV4IG9yXG4gICAqIHRhYiBjb21wb25lbnRzIGhhdmUgY2hhbmdlZC5cbiAgICogQHBhcmFtIGFjdGl2ZUluZGV4IFRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYiBpbmRleC5cbiAgICogQHBhcmFtIHJlZ2VuZXJhdGVUYWJCdXR0b25zIEluZGljYXRlcyBpZiB0YWIgYnV0dG9uIHZpZXcgbW9kZWxzIHNob3VsZCBiZSByZWdlbmVyYXRlZC5cbiAgICogU2V0dGluZyB0aGlzIHZhbHVlIHRvIGBmYWxzZWAgd2lsbCBzaW1wbHkgdXBkYXRlIHRoZSBleGlzdGluZyB0YWIgYnV0dG9ucy4gU2V0dGluZyB0aGlzIHZhbHVlXG4gICAqIHRvIGB0cnVlYCBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIHRoZSB1bmRlcmx5aW5nIHRhYiBjb21wb25lbnRzIGhhdmUgY2hhbmdlZCBhbmQgdGhlIHRhYlxuICAgKiBidXR0b25zIG11c3QgcmVmbGVjdCB0aG9zZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gaW5pdGlhbCBJbmRpY2F0ZXMgd2hldGhlciB0YWJzIGFyZSBiZWluZyB1cGRhdGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvZiB0aGUgdGFic2V0XG4gICAqIGNvbXBvbmVudC4gVGhpcyBpcyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcGVybWFsaW5rIHNlcnZpY2Ugd2hlcmUgaXQgcHJldmVudHMgYWRkaW5nIGFuIGV4dHJhXG4gICAqIGl0ZW0gdG8gYnJvd3NlciBoaXN0b3J5IHdoZW4gdGhlIFVSTCBpcyB1cGRhdGVkIHdpdGggdGhlIHNlbGVjdGVkIHRhYidzIHBlcm1hbGluayB2YWx1ZS5cbiAgICovXG4gICN1cGRhdGVUYWJzZXRDb21wb25lbnQoXG4gICAgYWN0aXZlSW5kZXg6IFNreVRhYkluZGV4IHwgdW5kZWZpbmVkLFxuICAgIHJlZ2VuZXJhdGVUYWJCdXR0b25zOiBib29sZWFuLFxuICAgIGluaXRpYWw/OiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICAvLyBBY3RpdmF0ZS9kZWFjdGl2YXRlIHRhYiBjb21wb25lbnRzLlxuICAgIHRoaXMudGFicz8uZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLnRhYkluZGV4ZXNFcXVhbCh0YWIudGFiSW5kZXgsIGFjdGl2ZUluZGV4KVxuICAgICAgICA/IHRhYi5hY3RpdmF0ZSgpXG4gICAgICAgIDogdGFiLmRlYWN0aXZhdGUoKTtcbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgdGFiIGJ1dHRvbiBtb2RlbHMuXG4gICAgaWYgKHJlZ2VuZXJhdGVUYWJCdXR0b25zIHx8ICF0aGlzLnRhYkJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnRhYkJ1dHRvbnMgPSB0aGlzLiNjcmVhdGVUYWJCdXR0b25zKGFjdGl2ZUluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jdXBkYXRlVGFiQnV0dG9ucyhhY3RpdmVJbmRleCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBkcm9wZG93biB0cmlnZ2VyIGJ1dHRvbiB0ZXh0LlxuICAgIHRoaXMuZHJvcGRvd25UcmlnZ2VyQnV0dG9uVGV4dCA9XG4gICAgICB0aGlzLnRhYkJ1dHRvbnMuZmluZCgoYikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jdGFic2V0U2VydmljZS50YWJJbmRleGVzRXF1YWwoYi50YWJJbmRleCwgYWN0aXZlSW5kZXgpO1xuICAgICAgfSk/LmJ1dHRvblRleHQgPz8gJyc7XG5cbiAgICAvLyBTZXQgdGhlIHF1ZXJ5IHBhcmFtcyBiYXNlZCBvbiBhY3RpdmUgdGFiLlxuICAgIGlmICh0aGlzLnBlcm1hbGlua0lkKSB7XG4gICAgICBjb25zdCBhY3RpdmVUYWJDb21wb25lbnQgPSB0aGlzLnRhYnM/LmZpbmQoKHRhYikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jdGFic2V0U2VydmljZS50YWJJbmRleGVzRXF1YWwodGFiLnRhYkluZGV4LCBhY3RpdmVJbmRleCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChhY3RpdmVUYWJDb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy4jcGVybWFsaW5rU2VydmljZS5zZXRQYXJhbShcbiAgICAgICAgICB0aGlzLnBlcm1hbGlua0lkLFxuICAgICAgICAgIGFjdGl2ZVRhYkNvbXBvbmVudC5wZXJtYWxpbmtWYWx1ZU9yRGVmYXVsdCxcbiAgICAgICAgICBpbml0aWFsLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdhaXQgZm9yIHRhYiBidXR0b24gdmlldyBtb2RlbHMgdG8gcmVuZGVyIGJlZm9yZSBnYXVnaW5nIGRpbWVuc2lvbnMuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5kZXRlY3RPdmVyZmxvdygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBFbWl0IHRoZSBuZXcgYWN0aXZlIGluZGV4IHZhbHVlIHRvIGNvbnN1bWVycy5cbiAgICBpZiAodGhpcy5sYXN0QWN0aXZlVGFiSW5kZXggIT09IGFjdGl2ZUluZGV4KSB7XG4gICAgICB0aGlzLmxhc3RBY3RpdmVUYWJJbmRleCA9IGFjdGl2ZUluZGV4O1xuICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChhY3RpdmVJbmRleCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2t5LXRhYnNldFwiXG4gIHJvbGU9XCJ0YWJsaXN0XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICBbbmdDbGFzc109XCJcbiAgICAnc2t5LXRhYnNldC1tb2RlLScgKyB0YWJEaXNwbGF5TW9kZSArICcgc2t5LXRhYnNldC1zdHlsZS0nICsgdGFiU3R5bGVcbiAgXCJcbiAgKHdpbmRvdzpyZXNpemUpPVwib25XaW5kb3dSZXNpemUoKVwiXG4gIChrZXlkb3duLmFycm93cmlnaHQpPVwib25SaWdodEtleURvd24oKVwiXG4gIChrZXlkb3duLmFycm93bGVmdCk9XCJvbkxlZnRLZXlEb3duKClcIlxuICAoa2V5ZG93bi5ob21lKT1cIm9uSG9tZUtleURvd24oKVwiXG4gIChrZXlkb3duLmVuZCk9XCJvbkVuZEtleURvd24oKVwiXG4+XG4gIDxzcGFuIGNsYXNzPVwic2t5LXRhYnNldC1kcm9wZG93blwiPlxuICAgIDxza3ktZHJvcGRvd24gKm5nSWY9XCJ0YWJEaXNwbGF5TW9kZSA9PT0gJ2Ryb3Bkb3duJ1wiIGJ1dHRvblR5cGU9XCJ0YWJcIj5cbiAgICAgIDxza3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICB7eyBkcm9wZG93blRyaWdnZXJCdXR0b25UZXh0IH19XG4gICAgICA8L3NreS1kcm9wZG93bi1idXR0b24+XG4gICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgIDxza3ktZHJvcGRvd24taXRlbVxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWJCdXR0b24gb2YgdGFiQnV0dG9uc1wiXG4gICAgICAgICAgY2xhc3M9XCJza3ktdGFiLWRyb3Bkb3duLW1lbnUtaXRlbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNreS10YWItZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdza3ktdGFiLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQnOiB0YWJCdXR0b24uYWN0aXZlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgdGFiQnV0dG9uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB0YWJCdXR0b25cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgIDwvc2t5LWRyb3Bkb3duPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwic2t5LXRhYnNldC10YWJzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiQnV0dG9uIG9mIHRhYkJ1dHRvbnNcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICB0YWJCdXR0b25UZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRhYkJ1dHRvblxuICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cInNreS10YWJzZXQtYnRuc1wiPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwibmV3VGFiLm9ic2VydmVycy5sZW5ndGggPiAwXCJcbiAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWljb24gc2t5LXRhYnNldC1idG4tbmV3IHNreS1tYXJnaW4taW5saW5lLWNvbXBhY3RcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidza3l1eF90YWJfYWRkJyB8IHNreUxpYlJlc291cmNlc1wiXG4gICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICdza3ktbWFyZ2luLWlubGluZS1zbSc6ICdtb2Rlcm4nXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJvbk5ld1RhYkNsaWNrKClcIlxuICAgID5cbiAgICAgIDxza3ktaWNvbiBpY29uPVwicGx1cy1jaXJjbGVcIiBzaXplPVwibGdcIiAvPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwib3BlblRhYi5vYnNlcnZlcnMubGVuZ3RoID4gMFwiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1pY29uIHNreS10YWJzZXQtYnRuLW9wZW4gc2t5LW1hcmdpbi1pbmxpbmUtY29tcGFjdFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3NreXV4X3RhYl9vcGVuJyB8IHNreUxpYlJlc291cmNlc1wiXG4gICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICdza3ktbWFyZ2luLWlubGluZS1zbSc6ICdtb2Rlcm4nXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJvbk9wZW5UYWJDbGljaygpXCJcbiAgICA+XG4gICAgICA8c2t5LWljb24gaWNvbj1cImZvbGRlci1vcGVuLW9cIiBzaXplPVwibGdcIiAvPlxuICAgIDwvYnV0dG9uPlxuICA8L3NwYW4+XG48L2Rpdj5cbjxuZy1jb250ZW50IC8+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtdGFiQnV0dG9uICN0YWJCdXR0b25UZW1wbGF0ZT5cbiAgPHNreS10YWItYnV0dG9uXG4gICAgW2FjdGl2ZV09XCJ0YWJCdXR0b24uYWN0aXZlXCJcbiAgICBbYXJpYUNvbnRyb2xzXT1cInRhYkJ1dHRvbi5hcmlhQ29udHJvbHNcIlxuICAgIFtidXR0b25IcmVmXT1cInRhYkJ1dHRvbi5idXR0b25IcmVmXCJcbiAgICBbYnV0dG9uSWRdPVwidGFiQnV0dG9uLmJ1dHRvbklkXCJcbiAgICBbYnV0dG9uVGV4dF09XCJ0YWJCdXR0b24uYnV0dG9uVGV4dFwiXG4gICAgW2J1dHRvblRleHRDb3VudF09XCJ0YWJCdXR0b24uYnV0dG9uVGV4dENvdW50XCJcbiAgICBbY2xvc2VhYmxlXT1cInRhYkJ1dHRvbi5jbG9zZWFibGVcIlxuICAgIFtkaXNhYmxlZF09XCJ0YWJCdXR0b24uZGlzYWJsZWRcIlxuICAgIFt0YWJJbmRleF09XCJ0YWJCdXR0b24udGFiSW5kZXhcIlxuICAgIFt0YWJTdHlsZV09XCJ0YWJTdHlsZVwiXG4gICAgW3RhYk51bWJlcl09XCJ0YWJCdXR0b24udGFiTnVtYmVyXCJcbiAgICBbdG90YWxUYWJzQ291bnRdPVwidGFiQnV0dG9uLnRvdGFsVGFic0NvdW50XCJcbiAgICAoYnV0dG9uQ2xpY2spPVwib25UYWJCdXR0b25DbGljayh0YWJCdXR0b24pXCJcbiAgICAoY2xvc2VDbGljayk9XCJvblRhYkNsb3NlQ2xpY2sodGFiQnV0dG9uKVwiXG4gID48L3NreS10YWItYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
476
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90YWJzL3NyYy9saWIvbW9kdWxlcy90YWJzL3RhYnNldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGFicy9zcmMvbGliL21vZHVsZXMvdGFicy90YWJzZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFjcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qjs7T0FFRztJQUNILElBQ1csTUFBTSxDQUFDLEtBQThCO1FBQzlDLElBQ0UsS0FBSyxLQUFLLFNBQVM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFD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c0JBRGhCLEtBQUs7Z0JBd0NDLFNBQVM7c0JBRGYsS0FBSztnQkFXQyxjQUFjO3NCQURwQixLQUFLO2dCQVdLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBbUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBYUMsWUFBWTtzQkFEbEIsTUFBTTtnQkFTQSxNQUFNO3NCQURaLE1BQU07Z0JBU0EsT0FBTztzQkFEYixNQUFNO2dCQVFBLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFhSSxJQUFJO3NCQURkLGVBQWU7dUJBQUMsZUFBZTtnQkFpQnpCLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TGF5b3V0SG9zdFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIHJhY2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFRhYkJ1dHRvblZpZXdNb2RlbCB9IGZyb20gJy4vdGFiLWJ1dHRvbi12aWV3LW1vZGVsJztcbmltcG9ydCB7IFNreVRhYkluZGV4IH0gZnJvbSAnLi90YWItaW5kZXgnO1xuaW1wb3J0IHsgU2t5VGFiTGF5b3V0VHlwZSB9IGZyb20gJy4vdGFiLWxheW91dC10eXBlJztcbmltcG9ydCB7IFNreVRhYkNvbXBvbmVudCB9IGZyb20gJy4vdGFiLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lUYWJzZXRBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vdGFic2V0LWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUYWJzZXRCdXR0b25zRGlzcGxheU1vZGUgfSBmcm9tICcuL3RhYnNldC1idXR0b25zLWRpc3BsYXktbW9kZSc7XG5pbXBvcnQgeyBTa3lUYWJzZXRQZXJtYWxpbmtTZXJ2aWNlIH0gZnJvbSAnLi90YWJzZXQtcGVybWFsaW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGFic2V0U3R5bGUgfSBmcm9tICcuL3RhYnNldC1zdHlsZSc7XG5pbXBvcnQgeyBTa3lUYWJzZXRUYWJJbmRleGVzQ2hhbmdlIH0gZnJvbSAnLi90YWJzZXQtdGFiLWluZGV4ZXMtY2hhbmdlJztcbmltcG9ydCB7IFNreVRhYnNldFNlcnZpY2UgfSBmcm9tICcuL3RhYnNldC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXRhYnNldCcsXG4gIHN0eWxlVXJsczogWycuL3RhYnNldC5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFic2V0LmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2t5VGFic2V0QWRhcHRlclNlcnZpY2UsXG4gICAgU2t5VGFic2V0UGVybWFsaW5rU2VydmljZSxcbiAgICBTa3lUYWJzZXRTZXJ2aWNlLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGFic2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEFjdGl2YXRlcyBhIHRhYiBieSBpdHMgYHRhYkluZGV4YCBwcm9wZXJ0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYWN0aXZlKHZhbHVlOiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChcbiAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UudGFiSW5kZXhlc0VxdWFsKHZhbHVlLCB0aGlzLiNfYWN0aXZlKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuI19hY3RpdmUgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoeyB0YWJJbmRleDogdmFsdWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9uIGluaXQsIHdhaXQgZm9yIGNoaWxkcmVuIHRhYnMgdG8gcmVuZGVyIGJlZm9yZSBicm9hZGNhc3RpbmcgdGhlIGFjdGl2ZSB0YWIgaW5kZXguXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuI3RhYnNldFNlcnZpY2UuaXNWYWxpZFRhYkluZGV4KHZhbHVlKSkge1xuICAgICAgICAgIC8vIE9uIGluaXQsIHlpZWxkIHRvIHRoZSBwZXJtYWxpbmsgSUQsIGlmIGl0IGV4aXN0cy5cbiAgICAgICAgICBpZiAodGhpcy4jZ2V0QWN0aXZlVGFiSW5kZXhCeVBlcm1hbGlua0lkKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy4jdGFic2V0U2VydmljZS5zZXRBY3RpdmVUYWJJbmRleCh7IHRhYkluZGV4OiB2YWx1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWN0aXZhdGUgdGhlIGZpcnN0IHRhYiBpZiB0aGUgbmV3IHRhYiBpbmRleCBpcyBpbnZhbGlkLlxuICAgICAgICAgIHRoaXMuI19hY3RpdmUgPSB0aGlzLiN0YWJzZXRTZXJ2aWNlLmFjdGl2YXRlRmlyc3RUYWIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmUoKTogU2t5VGFiSW5kZXggfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfYWN0aXZlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUklBIGxhYmVsIGZvciB0aGUgdGFic2V0LiBUaGlzIHNldHMgdGhlIHRhYnNldCdzIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgdG8gcHJvdmlkZSBhIHRleHQgZXF1aXZhbGVudCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICogSWYgdGhlIHRhYnNldCBpbmNsdWRlcyBhIHZpc2libGUgbGFiZWwsIHVzZSBgYXJpYUxhYmVsbGVkQnlgIGluc3RlYWQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtbGFiZWwpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRNTCBlbGVtZW50IElEIG9mIHRoZSBlbGVtZW50IHRoYXQgbGFiZWxzXG4gICAqIHRoZSB0YWJzZXQuIFRoaXMgc2V0cyB0aGUgdGFic2V0J3MgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlIHRvIHByb3ZpZGUgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIElmIHRoZSB0YWJzZXQgZG9lcyBub3QgaW5jbHVkZSBhIHZpc2libGUgbGFiZWwsIHVzZSBgYXJpYUxhYmVsYCBpbnN0ZWFkLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlLCBzZWUgdGhlIFtXQUktQVJJQSBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtbGFiZWxsZWRieSkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGlzdGluZ3Vpc2hlcyBhIHRhYnNldCdzIHVuaXF1ZSBzdGF0ZSBpbiB0aGUgVVJMIGJ5IGdlbmVyYXRpbmcgYSBxdWVyeSBwYXJhbWV0ZXJcbiAgICogdGhhdCBpcyB3cml0dGVuIGFzIGA/PHF1ZXJ5UGFyYW0+LWFjdGl2ZS10YWI9PHNhbml0aXplZC10YWItaGVhZGluZz5gLlxuICAgKiBUaGUgcXVlcnkgcGFyYW1ldGVyJ3MgdmFsdWUgaXMgcGFyc2VkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgc2VsZWN0ZWQgdGFiJ3MgaGVhZGluZyB0ZXh0LFxuICAgKiBidXQgeW91IGNhbiBzdXBwbHkgYSBjdXN0b20gcXVlcnkgcGFyYW1ldGVyIHZhbHVlIGZvciBlYWNoIHRhYiB3aXRoIGl0cyBgcGVybWFsaW5rVmFsdWVgLlxuICAgKiBUaGlzIGlucHV0IG9ubHkgYXBwbGllcyB3aGVuIGB0YWJTdHlsZWAgaXMgYFwidGFic1wiYFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwZXJtYWxpbmtJZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy4jX3Blcm1hbGlua0lkID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IHRoaXMuI3Blcm1hbGlua1NlcnZpY2UudXJsaWZ5KHZhbHVlKTtcbiAgICAgIHRoaXMuI19wZXJtYWxpbmtJZCA9IGAke3Nhbml0aXplZH0tYWN0aXZlLXRhYmA7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBwZXJtYWxpbmtJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNfcGVybWFsaW5rSWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9yIGZvciBhIHNlcmllcyBvZiB0YWJzLlxuICAgKiBAZGVmYXVsdCBcInRhYnNcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0YWJTdHlsZSh2YWx1ZTogU2t5VGFic2V0U3R5bGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfdGFiU3R5bGUgPSB2YWx1ZSB8fCAndGFicyc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRhYlN0eWxlKCk6IFNreVRhYnNldFN0eWxlIHtcbiAgICByZXR1cm4gdGhpcy4jX3RhYlN0eWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFjdGl2ZSB0YWIgY2hhbmdlcy4gVGhpcyBldmVudCBlbWl0cyB0aGUgaW5kZXggb2YgdGhlIGFjdGl2ZSB0YWIuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGFjdGl2ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5VGFiSW5kZXg+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY2xpY2sgdGhlIGJ1dHRvbiB0byBhZGQgYSBuZXcgdGFiLlxuICAgKiBUaGUgbmV3IHRhYiBidXR0b24gaXMgYWRkZWQgdG8gdGhlIHRhYiBhcmVhIHdoZW4geW91IHNwZWNpZnkgYSBsaXN0ZW5lciBmb3IgdGhpcyBldmVudC5cbiAgICogVGhpcyBldmVudCBvbmx5IGFwcGxpZXMgd2hlbiBgdGFiU3R5bGVgIGlzIGBcInRhYnNcImAuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG5ld1RhYiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBjbGljayB0aGUgYnV0dG9uIHRvIG9wZW4gYSB0YWIuXG4gICAqIFRoZSBvcGVuIHRhYiBidXR0b24gaXMgYWRkZWQgdG8gdGhlIHRhYiBhcmVhIHdoZW4geW91IHNwZWNpZnkgYSBsaXN0ZW5lciBmb3IgdGhpcyBldmVudC5cbiAgICogVGhpcyBldmVudCBvbmx5IGFwcGxpZXMgd2hlbiBgdGFiU3R5bGVgIGlzIGBcInRhYnNcImAuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9wZW5UYWIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gYW55IHRhYidzIGB0YWJJbmRleGAgdmFsdWUgY2hhbmdlcy5cbiAgICogVGhpcyBldmVudCBvbmx5IGFwcGxpZXMgd2hlbiBgdGFiU3R5bGVgIGlzIGBcInRhYnNcImAuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHRhYkluZGV4ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreVRhYnNldFRhYkluZGV4ZXNDaGFuZ2U+KCk7XG5cbiAgcHVibGljIHNldCB0YWJEaXNwbGF5TW9kZSh2YWx1ZTogU2t5VGFic2V0QnV0dG9uc0Rpc3BsYXlNb2RlKSB7XG4gICAgdGhpcy4jX3RhYkRpc3BsYXlNb2RlID0gdmFsdWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRhYkRpc3BsYXlNb2RlKCk6IFNreVRhYnNldEJ1dHRvbnNEaXNwbGF5TW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuI190YWJEaXNwbGF5TW9kZTtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5VGFiQ29tcG9uZW50KVxuICBwdWJsaWMgc2V0IHRhYnModmFsdWU6IFF1ZXJ5TGlzdDxTa3lUYWJDb21wb25lbnQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3RhYnMgPSB2YWx1ZTtcbiAgICB0aGlzLiN0YWJDb21wb25lbnRzQ2hhbmdlVW5zdWJzY3JpYmUubmV4dCgpO1xuXG4gICAgdmFsdWU/LmNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiN0YWJDb21wb25lbnRzQ2hhbmdlVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI3Jlc2V0VGFiQ29tcG9uZW50cygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRhYnMoKTogUXVlcnlMaXN0PFNreVRhYkNvbXBvbmVudD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfdGFicztcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwdWJsaWMgY3NzQ2xhc3MgPSAnc2t5LXRhYnNldC1sYXlvdXQtbm9uZSc7XG5cbiAgcHVibGljIGRyb3Bkb3duVHJpZ2dlckJ1dHRvblRleHQgPSAnJztcblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IHRoZSBkZXByZWNhdGVkIHRhYnNldC1uYXYtYnV0dG9uIGNvbXBvbmVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgbGFzdEFjdGl2ZVRhYkluZGV4OiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgdGFiQnV0dG9uczogVGFiQnV0dG9uVmlld01vZGVsW10gPSBbXTtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI3RhYkNvbXBvbmVudHNDaGFuZ2VVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICN0YWJDb21wb25lbnRzU3RhdGVDaGFuZ2VVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI19hY3RpdmU6IFNreVRhYkluZGV4IHwgdW5kZWZpbmVkO1xuXG4gICNfcGVybWFsaW5rSWQgPSAnJztcblxuICAjX3RhYnM6IFF1ZXJ5TGlzdDxTa3lUYWJDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xuXG4gICNfdGFiRGlzcGxheU1vZGU6IFNreVRhYnNldEJ1dHRvbnNEaXNwbGF5TW9kZSA9ICd0YWJzJztcblxuICAjX3RhYlN0eWxlOiBTa3lUYWJzZXRTdHlsZSA9ICd0YWJzJztcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgI2FkYXB0ZXJTZXJ2aWNlOiBTa3lUYWJzZXRBZGFwdGVyU2VydmljZTtcbiAgI3Blcm1hbGlua1NlcnZpY2U6IFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2U7XG4gICN0YWJzZXRTZXJ2aWNlOiBTa3lUYWJzZXRTZXJ2aWNlO1xuXG4gICNsYXlvdXRIb3N0U3ZjID0gaW5qZWN0KFNreUxheW91dEhvc3RTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIGFkYXB0ZXJTZXJ2aWNlOiBTa3lUYWJzZXRBZGFwdGVyU2VydmljZSxcbiAgICBwZXJtYWxpbmtTZXJ2aWNlOiBTa3lUYWJzZXRQZXJtYWxpbmtTZXJ2aWNlLFxuICAgIHRhYnNldFNlcnZpY2U6IFNreVRhYnNldFNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UgPSBhZGFwdGVyU2VydmljZTtcbiAgICB0aGlzLiNwZXJtYWxpbmtTZXJ2aWNlID0gcGVybWFsaW5rU2VydmljZTtcbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlID0gdGFic2V0U2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jaW5pdFRhYkNvbXBvbmVudHMoKTtcblxuICAgIGNvbnN0IGluaXRpYWxUYWJJbmRleCA9IHRoaXMuI2dldEluaXRpYWxUYWJJbmRleCgpO1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoe1xuICAgICAgdGFiSW5kZXg6IGluaXRpYWxUYWJJbmRleCxcbiAgICAgIGluaXRpYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLiNsaXN0ZW5UYWJCdXR0b25zT3ZlcmZsb3dDaGFuZ2UoKTtcbiAgICB0aGlzLiNsaXN0ZW5Mb2NhdGlvblBvcFN0YXRlQ2hhbmdlKCk7XG5cbiAgICAvLyBJZiB0aGUgY3VycmVudGx5IGFjdGl2ZSB0YWIgaXMgZ2V0dGluZyB1bnJlZ2lzdGVyZWQsIGFjdGl2YXRlIHRoZSBuZXh0IG9uZS5cbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLmFjdGl2ZVRhYlVucmVnaXN0ZXJlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodGFiKSA9PiB7XG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBuZXcgdGFicyB0byByZW5kZXIgYmVmb3JlIGFjdGl2YXRpbmcuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UuYWN0aXZhdGVOZWFyZXN0VGFiKHRhYi5hcnJheUluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuI3RhYnNldFNlcnZpY2UuYWN0aXZlVGFiTGF5b3V0XG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsYXlvdXQpID0+IHtcbiAgICAgICAgdGhpcy4jdXBkYXRlTGF5b3V0KGxheW91dCk7XG4gICAgICB9KTtcblxuICAgIC8vIExldCB0aGUgdGFic2V0IHJlbmRlciB0aGUgaW5pdGlhbCBhY3RpdmUgaW5kZXggYmVmb3JlIGxpc3RlbmluZyBmb3IgY2hhbmdlcy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuI2xpc3RlblRhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZSgpO1xuICAgICAgdGhpcy4jbGlzdGVuQWN0aXZlSW5kZXhDaGFuZ2UoKTtcbiAgICAgIHRoaXMuI3Blcm1hbGlua1NlcnZpY2UuaW5pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiN0YWJDb21wb25lbnRzQ2hhbmdlVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI3RhYkNvbXBvbmVudHNDaGFuZ2VVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3Vuc3Vic2NyaWJlVGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlKCk7XG4gICAgaWYgKHRoaXMucGVybWFsaW5rSWQpIHtcbiAgICAgIHRoaXMuI3Blcm1hbGlua1NlcnZpY2UuY2xlYXJQYXJhbSh0aGlzLnBlcm1hbGlua0lkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZGV0ZWN0T3ZlcmZsb3coKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRhYkNsb3NlQ2xpY2sodGFiQnV0dG9uOiBUYWJCdXR0b25WaWV3TW9kZWwpOiB2b2lkIHtcbiAgICBjb25zdCB0YWJDb21wb25lbnQgPSB0aGlzLnRhYnM/LmZpbmQoKHRhYikgPT5cbiAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UudGFiSW5kZXhlc0VxdWFsKFxuICAgICAgICB0YWIudGFiSW5kZXhWYWx1ZSxcbiAgICAgICAgdGFiQnV0dG9uLnRhYkluZGV4LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgdGFiQ29tcG9uZW50Py5jbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgb25UYWJCdXR0b25DbGljayh0YWJCdXR0b246IFRhYkJ1dHRvblZpZXdNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoeyB0YWJJbmRleDogdGFiQnV0dG9uLnRhYkluZGV4IH0pO1xuICB9XG5cbiAgcHVibGljIG9uTmV3VGFiQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5uZXdUYWIuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uT3BlblRhYkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub3BlblRhYi5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgb25SaWdodEtleURvd24oKTogdm9pZCB7XG4gICAgdGhpcy4jdGFic2V0U2VydmljZS5mb2N1c05leHRUYWJCdG4odGhpcy50YWJCdXR0b25zKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkxlZnRLZXlEb3duKCk6IHZvaWQge1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2UuZm9jdXNQcmV2VGFiQnRuKHRoaXMudGFiQnV0dG9ucyk7XG4gIH1cblxuICBwdWJsaWMgb25Ib21lS2V5RG93bigpOiB2b2lkIHtcbiAgICB0aGlzLiN0YWJzZXRTZXJ2aWNlLmZvY3VzRmlyc3RPck5lYXJlc3RUYWJCdG4odGhpcy50YWJCdXR0b25zKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVuZEtleURvd24oKTogdm9pZCB7XG4gICAgdGhpcy4jdGFic2V0U2VydmljZS5mb2N1c0xhc3RPck5lYXJlc3RUYWJCdG4odGhpcy50YWJCdXR0b25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbml0aWFsIGFjdGl2ZSB0YWIgaW5kZXggYmFzZWQgb24gdGhlIGZvbGxvd2luZyBjcml0ZXJpYS5cbiAgICogMS4gRG9lcyB0aGUgVVJMIGluY2x1ZGUgYSBxdWVyeSBwYXJhbSB0aGF0IHJlZmxlY3RzIHRoaXMgdGFic2V0J3MgYWN0aXZlIHRhYj9cbiAgICogMi4gRG9lcyBvbmUgb2YgdGhlIHRhYiBjb21wb25lbnRzIGhhdmUgdGhlaXIgYGFjdGl2ZWAgcHJvcGVydHkgc2V0IHRvIGB0cnVlYD9cbiAgICogMy4gSXMgdGhlIHRhYnNldCBjb21wb25lbnQncyBgYWN0aXZlYCBwcm9wZXJ0eSBzZXQgdG8gYSBzcGVjaWZpYyB0YWIgaW5kZXg/XG4gICAqL1xuICAjZ2V0SW5pdGlhbFRhYkluZGV4KCk6IFNreVRhYkluZGV4IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgYWN0aXZlSW5kZXg6IFNreVRhYkluZGV4IHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuI2dldEFjdGl2ZVRhYkluZGV4QnlQZXJtYWxpbmtJZCgpO1xuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhY3RpdmVJbmRleCA9IHRoaXMuI2dldEFjdGl2ZVRhYkNvbXBvbmVudCgpPy50YWJJbmRleFZhbHVlO1xuICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0aXZlSW5kZXggPSB0aGlzLmFjdGl2ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aXZlSW5kZXg7XG4gIH1cblxuICAjbGlzdGVuQWN0aXZlSW5kZXhDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jdGFic2V0U2VydmljZS5hY3RpdmVUYWJDaGFuZ2VcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHRhYkNoYW5nZSkgPT4ge1xuICAgICAgICB0aGlzLiN1cGRhdGVUYWJzZXRDb21wb25lbnQoXG4gICAgICAgICAgdGFiQ2hhbmdlLnRhYkluZGV4LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRhYkNoYW5nZS5pbml0aWFsLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhY3RpdmVUYWIgPSB0aGlzLiNnZXRBY3RpdmVUYWJDb21wb25lbnQoKTtcblxuICAgICAgICB0aGlzLiN1cGRhdGVMYXlvdXQoYWN0aXZlVGFiPy5sYXlvdXQpO1xuICAgICAgfSk7XG4gIH1cblxuICAjdXBkYXRlTGF5b3V0KGxheW91dD86IFNreVRhYkxheW91dFR5cGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jbGF5b3V0SG9zdFN2YyAmJiBsYXlvdXQpIHtcbiAgICAgIHRoaXMuI2xheW91dEhvc3RTdmMuc2V0SG9zdExheW91dEZvckNoaWxkKHtcbiAgICAgICAgbGF5b3V0LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY3NzQ2xhc3MgPSBgc2t5LXRhYnNldC1sYXlvdXQtJHtsYXlvdXR9YDtcbiAgICB9XG4gIH1cblxuICAjbGlzdGVuVGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy50YWJzLm1hcCgodGFiKSA9PiB0YWIuYWN0aXZlQ2hhbmdlKSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKFxuICAgICAgICAgICAgcmFjZShcbiAgICAgICAgICAgICAgdGhpcy4jdGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlVW5zdWJzY3JpYmUsXG4gICAgICAgICAgICAgIHRoaXMuI25nVW5zdWJzY3JpYmUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHRhYiBjb21wb25lbnRzIHRvIHJlbmRlciBjaGFuZ2VzIGJlZm9yZSBmaW5kaW5nIHRoZSBhY3RpdmUgb25lLlxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLiNnZXRBY3RpdmVUYWJDb21wb25lbnQoKT8udGFiSW5kZXhWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoeyB0YWJJbmRleCB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy50YWJzLm1hcCgodGFiKSA9PiB0YWIudGFiSW5kZXhDaGFuZ2UpKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwoXG4gICAgICAgICAgICByYWNlKFxuICAgICAgICAgICAgICB0aGlzLiN0YWJDb21wb25lbnRzU3RhdGVDaGFuZ2VVbnN1YnNjcmliZSxcbiAgICAgICAgICAgICAgdGhpcy4jbmdVbnN1YnNjcmliZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAvLyBEb24ndCBlbWl0IHRoZSBmaXJzdCBjaGFuZ2UuXG4gICAgICAgICAgaWYgKHRoaXMubGFzdEFjdGl2ZVRhYkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSB0YWIgY29tcG9uZW50cyB0byByZW5kZXIgY2hhbmdlcyBiZWZvcmUgdXBkYXRpbmcgdGhlIHZpZXcuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy4jdXBkYXRlVGFic2V0Q29tcG9uZW50KFxuICAgICAgICAgICAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UuY3VycmVudEFjdGl2ZVRhYkluZGV4LFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMuI2VtaXRUYWJJbmRleENoYW5nZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgY29tYmluZUxhdGVzdCh0aGlzLnRhYnMubWFwKCh0YWIpID0+IHRhYi5zdGF0ZUNoYW5nZSkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbChcbiAgICAgICAgICAgIHJhY2UoXG4gICAgICAgICAgICAgIHRoaXMuI3RhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZVVuc3Vic2NyaWJlLFxuICAgICAgICAgICAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSB0YWIgY29tcG9uZW50cyB0byByZW5kZXIgY2hhbmdlcyBiZWZvcmUgZmluZGluZyB0aGUgYWN0aXZlIG9uZS5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVRhYnNldENvbXBvbmVudChcbiAgICAgICAgICAgICAgdGhpcy4jdGFic2V0U2VydmljZS5jdXJyZW50QWN0aXZlVGFiSW5kZXgsXG4gICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjaW5pdFRhYkNvbXBvbmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy50YWJzPy5mb3JFYWNoKCh0YWIpID0+IHRhYi5pbml0KCkpO1xuICB9XG5cbiAgI3Jlc2V0VGFiQ29tcG9uZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLiN1bnN1YnNjcmliZVRhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZSgpO1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2UudW5yZWdpc3RlckFsbCgpO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRhYiBjb21wb25lbnRzLCBkbyBhIGhhcmQgcmVzZXQgb2YgdGhlIHZpZXcuXG4gICAgaWYgKHRoaXMudGFicz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLiN1cGRhdGVUYWJzZXRDb21wb25lbnQoMCwgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jaW5pdFRhYkNvbXBvbmVudHMoKTtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuI2dldEFjdGl2ZVRhYkNvbXBvbmVudCgpPy50YWJJbmRleFZhbHVlO1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoXG4gICAgICB7XG4gICAgICAgIHRhYkluZGV4OiBhY3RpdmVJbmRleCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGVtaXRDaGFuZ2U6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuI2xpc3RlblRhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZSgpO1xuICB9XG5cbiAgI2VtaXRUYWJJbmRleENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkluZGV4ZXNDaGFuZ2UuZW1pdCh7XG4gICAgICB0YWJzOiB0aGlzLnRhYnM/Lm1hcCgodGFiKSA9PiAoe1xuICAgICAgICB0YWJIZWFkaW5nOiB0YWIudGFiSGVhZGluZyxcbiAgICAgICAgdGFiSW5kZXg6IHRhYi50YWJJbmRleFZhbHVlLFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9XG5cbiAgI3Vuc3Vic2NyaWJlVGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI3RhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZVVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiN0YWJDb21wb25lbnRzU3RhdGVDaGFuZ2VVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3RhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZVVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgfVxuXG4gICNsaXN0ZW5UYWJCdXR0b25zT3ZlcmZsb3dDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UucmVnaXN0ZXJUYWJzZXQodGhpcy4jZWxlbWVudFJlZik7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uub3ZlcmZsb3dDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGlzT3ZlcmZsb3dpbmcpID0+IHtcbiAgICAgICAgdGhpcy50YWJEaXNwbGF5TW9kZSA9IGlzT3ZlcmZsb3dpbmcgPyAnZHJvcGRvd24nIDogJ3RhYnMnO1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3IgYmFjay9mb3J3YXJkIGhpc3RvcnkgYnV0dG9uIHByZXNzZXMgdG8gZGV0ZWN0IHF1ZXJ5IHBhcmFtIGNoYW5nZXMgaW4gdGhlIFVSTC5cbiAgICovXG4gICNsaXN0ZW5Mb2NhdGlvblBvcFN0YXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI3Blcm1hbGlua1NlcnZpY2UucG9wU3RhdGVDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNzZXRBY3RpdmVUYWJJbmRleEJ5UGVybWFsaW5rSWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgI3NldEFjdGl2ZVRhYkluZGV4QnlQZXJtYWxpbmtJZCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuI2dldEFjdGl2ZVRhYkluZGV4QnlQZXJtYWxpbmtJZCgpO1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoe1xuICAgICAgdGFiSW5kZXg6IGFjdGl2ZUluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgI2dldEFjdGl2ZVRhYkluZGV4QnlQZXJtYWxpbmtJZCgpOiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMucGVybWFsaW5rSWQpIHtcbiAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSB0aGlzLiNwZXJtYWxpbmtTZXJ2aWNlLmdldFBhcmFtKHRoaXMucGVybWFsaW5rSWQpO1xuICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFicz8uZmluZChcbiAgICAgICAgICAodGFiKSA9PiB0YWIucGVybWFsaW5rVmFsdWVPckRlZmF1bHQgPT09IHBhcmFtVmFsdWUsXG4gICAgICAgICk/LnRhYkluZGV4VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2dldEFjdGl2ZVRhYkNvbXBvbmVudCgpOiBTa3lUYWJDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYnNcbiAgICAgID8udG9BcnJheSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmluZCgodGFiKSA9PiB0YWIuYWN0aXZlID09PSB0cnVlKTtcbiAgfVxuXG4gICNjcmVhdGVUYWJCdXR0b25zKFxuICAgIGFjdGl2ZUluZGV4OiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZCxcbiAgKTogVGFiQnV0dG9uVmlld01vZGVsW10ge1xuICAgIC8vIFNhZmV0eSBjaGVja1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLnRhYnMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YWJzLm1hcCgodGFiLCBpbmRleCkgPT4gKHtcbiAgICAgIGFjdGl2ZTogdGhpcy4jdGFic2V0U2VydmljZS50YWJJbmRleGVzRXF1YWwoXG4gICAgICAgIHRhYi50YWJJbmRleFZhbHVlLFxuICAgICAgICBhY3RpdmVJbmRleCxcbiAgICAgICksXG4gICAgICBjbG9zZWFibGU6IHRhYi5pc0Nsb3NlYWJsZSgpLFxuICAgICAgYXJpYUNvbnRyb2xzOiB0YWIudGFiUGFuZWxJZCxcbiAgICAgIGRpc2FibGVkOiB0YWIuZGlzYWJsZWQsXG4gICAgICBidXR0b25IcmVmOiB0YWIuZGlzYWJsZWRcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy4jcGVybWFsaW5rU2VydmljZS5nZXRQYXJhbUhyZWYoXG4gICAgICAgICAgICB0aGlzLnBlcm1hbGlua0lkLFxuICAgICAgICAgICAgdGFiLnBlcm1hbGlua1ZhbHVlT3JEZWZhdWx0LFxuICAgICAgICAgICksXG4gICAgICBidXR0b25JZDogdGFiLnRhYkJ1dHRvbklkLFxuICAgICAgYnV0dG9uVGV4dENvdW50OiB0YWIudGFiSGVhZGVyQ291bnQsXG4gICAgICBidXR0b25UZXh0OiB0YWIudGFiSGVhZGluZyxcbiAgICAgIHRhYkluZGV4OiB0YWIudGFiSW5kZXhWYWx1ZSxcbiAgICAgIHRhYk51bWJlcjogaW5kZXggKyAxLFxuICAgICAgdG90YWxUYWJzQ291bnQ6IHRoaXMudGFicyEubGVuZ3RoLFxuICAgIH0pKTtcbiAgfVxuXG4gICN1cGRhdGVUYWJCdXR0b25zKGFjdGl2ZUluZGV4OiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMudGFiQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgIGJ1dHRvbi5hY3RpdmUgPSB0aGlzLiN0YWJzZXRTZXJ2aWNlLnRhYkluZGV4ZXNFcXVhbChcbiAgICAgICAgYnV0dG9uLnRhYkluZGV4LFxuICAgICAgICBhY3RpdmVJbmRleCxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgVUkgYW5kIHN0YXRlIG9mIHRoZSB0YWJzZXQgY29tcG9uZW50IGFmdGVyIHRoZSB0YWIgaW5kZXggb3JcbiAgICogdGFiIGNvbXBvbmVudHMgaGF2ZSBjaGFuZ2VkLlxuICAgKiBAcGFyYW0gYWN0aXZlSW5kZXggVGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiIGluZGV4LlxuICAgKiBAcGFyYW0gcmVnZW5lcmF0ZVRhYkJ1dHRvbnMgSW5kaWNhdGVzIGlmIHRhYiBidXR0b24gdmlldyBtb2RlbHMgc2hvdWxkIGJlIHJlZ2VuZXJhdGVkLlxuICAgKiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gYGZhbHNlYCB3aWxsIHNpbXBseSB1cGRhdGUgdGhlIGV4aXN0aW5nIHRhYiBidXR0b25zLiBTZXR0aW5nIHRoaXMgdmFsdWVcbiAgICogdG8gYHRydWVgIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gdGhlIHVuZGVybHlpbmcgdGFiIGNvbXBvbmVudHMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgdGFiXG4gICAqIGJ1dHRvbnMgbXVzdCByZWZsZWN0IHRob3NlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBpbml0aWFsIEluZGljYXRlcyB3aGV0aGVyIHRhYnMgYXJlIGJlaW5nIHVwZGF0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIHRoZSB0YWJzZXRcbiAgICogY29tcG9uZW50LiBUaGlzIGlzIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBwZXJtYWxpbmsgc2VydmljZSB3aGVyZSBpdCBwcmV2ZW50cyBhZGRpbmcgYW4gZXh0cmFcbiAgICogaXRlbSB0byBicm93c2VyIGhpc3Rvcnkgd2hlbiB0aGUgVVJMIGlzIHVwZGF0ZWQgd2l0aCB0aGUgc2VsZWN0ZWQgdGFiJ3MgcGVybWFsaW5rIHZhbHVlLlxuICAgKi9cbiAgI3VwZGF0ZVRhYnNldENvbXBvbmVudChcbiAgICBhY3RpdmVJbmRleDogU2t5VGFiSW5kZXggfCB1bmRlZmluZWQsXG4gICAgcmVnZW5lcmF0ZVRhYkJ1dHRvbnM6IGJvb2xlYW4sXG4gICAgaW5pdGlhbD86IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIC8vIEFjdGl2YXRlL2RlYWN0aXZhdGUgdGFiIGNvbXBvbmVudHMuXG4gICAgdGhpcy50YWJzPy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UudGFiSW5kZXhlc0VxdWFsKHRhYi50YWJJbmRleFZhbHVlLCBhY3RpdmVJbmRleClcbiAgICAgICAgPyB0YWIuYWN0aXZhdGUoKVxuICAgICAgICA6IHRhYi5kZWFjdGl2YXRlKCk7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHRhYiBidXR0b24gbW9kZWxzLlxuICAgIGlmIChyZWdlbmVyYXRlVGFiQnV0dG9ucyB8fCAhdGhpcy50YWJCdXR0b25zLmxlbmd0aCkge1xuICAgICAgdGhpcy50YWJCdXR0b25zID0gdGhpcy4jY3JlYXRlVGFiQnV0dG9ucyhhY3RpdmVJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI3VwZGF0ZVRhYkJ1dHRvbnMoYWN0aXZlSW5kZXgpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZHJvcGRvd24gdHJpZ2dlciBidXR0b24gdGV4dC5cbiAgICB0aGlzLmRyb3Bkb3duVHJpZ2dlckJ1dHRvblRleHQgPVxuICAgICAgdGhpcy50YWJCdXR0b25zLmZpbmQoKGIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RhYnNldFNlcnZpY2UudGFiSW5kZXhlc0VxdWFsKGIudGFiSW5kZXgsIGFjdGl2ZUluZGV4KTtcbiAgICAgIH0pPy5idXR0b25UZXh0ID8/ICcnO1xuXG4gICAgLy8gU2V0IHRoZSBxdWVyeSBwYXJhbXMgYmFzZWQgb24gYWN0aXZlIHRhYi5cbiAgICBpZiAodGhpcy5wZXJtYWxpbmtJZCkge1xuICAgICAgY29uc3QgYWN0aXZlVGFiQ29tcG9uZW50ID0gdGhpcy50YWJzPy5maW5kKCh0YWIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RhYnNldFNlcnZpY2UudGFiSW5kZXhlc0VxdWFsKFxuICAgICAgICAgIHRhYi50YWJJbmRleFZhbHVlLFxuICAgICAgICAgIGFjdGl2ZUluZGV4LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpZiAoYWN0aXZlVGFiQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuI3Blcm1hbGlua1NlcnZpY2Uuc2V0UGFyYW0oXG4gICAgICAgICAgdGhpcy5wZXJtYWxpbmtJZCxcbiAgICAgICAgICBhY3RpdmVUYWJDb21wb25lbnQucGVybWFsaW5rVmFsdWVPckRlZmF1bHQsXG4gICAgICAgICAgaW5pdGlhbCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXYWl0IGZvciB0YWIgYnV0dG9uIHZpZXcgbW9kZWxzIHRvIHJlbmRlciBiZWZvcmUgZ2F1Z2luZyBkaW1lbnNpb25zLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZGV0ZWN0T3ZlcmZsb3coKTtcbiAgICB9KTtcblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gRW1pdCB0aGUgbmV3IGFjdGl2ZSBpbmRleCB2YWx1ZSB0byBjb25zdW1lcnMuXG4gICAgaWYgKHRoaXMubGFzdEFjdGl2ZVRhYkluZGV4ICE9PSBhY3RpdmVJbmRleCkge1xuICAgICAgdGhpcy5sYXN0QWN0aXZlVGFiSW5kZXggPSBhY3RpdmVJbmRleDtcbiAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoYWN0aXZlSW5kZXgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInNreS10YWJzZXRcIlxuICByb2xlPVwidGFibGlzdFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgW25nQ2xhc3NdPVwiXG4gICAgJ3NreS10YWJzZXQtbW9kZS0nICsgdGFiRGlzcGxheU1vZGUgKyAnIHNreS10YWJzZXQtc3R5bGUtJyArIHRhYlN0eWxlXG4gIFwiXG4gICh3aW5kb3c6cmVzaXplKT1cIm9uV2luZG93UmVzaXplKClcIlxuICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cIm9uUmlnaHRLZXlEb3duKClcIlxuICAoa2V5ZG93bi5hcnJvd2xlZnQpPVwib25MZWZ0S2V5RG93bigpXCJcbiAgKGtleWRvd24uaG9tZSk9XCJvbkhvbWVLZXlEb3duKClcIlxuICAoa2V5ZG93bi5lbmQpPVwib25FbmRLZXlEb3duKClcIlxuPlxuICA8c3BhbiBjbGFzcz1cInNreS10YWJzZXQtZHJvcGRvd25cIj5cbiAgICA8c2t5LWRyb3Bkb3duICpuZ0lmPVwidGFiRGlzcGxheU1vZGUgPT09ICdkcm9wZG93bidcIiBidXR0b25UeXBlPVwidGFiXCI+XG4gICAgICA8c2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAge3sgZHJvcGRvd25UcmlnZ2VyQnV0dG9uVGV4dCB9fVxuICAgICAgPC9za3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICA8c2t5LWRyb3Bkb3duLWl0ZW1cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdGFiQnV0dG9uIG9mIHRhYkJ1dHRvbnNcIlxuICAgICAgICAgIGNsYXNzPVwic2t5LXRhYi1kcm9wZG93bi1tZW51LWl0ZW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktdGFiLWRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnc2t5LXRhYi1kcm9wZG93bi1pdGVtLXNlbGVjdGVkJzogdGFiQnV0dG9uLmFjdGl2ZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHRhYkJ1dHRvblRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogdGFiQnV0dG9uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgPC9za3ktZHJvcGRvd24tbWVudT5cbiAgICA8L3NreS1kcm9wZG93bj5cbiAgPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cInNreS10YWJzZXQtdGFic1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYkJ1dHRvbiBvZiB0YWJCdXR0b25zXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgdGFiQnV0dG9uVGVtcGxhdGU7XG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0YWJCdXR0b25cbiAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJza3ktdGFic2V0LWJ0bnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIm5ld1RhYi5vYnNlcnZlcnMubGVuZ3RoID4gMFwiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1pY29uIHNreS10YWJzZXQtYnRuLW5ldyBza3ktbWFyZ2luLWlubGluZS1jb21wYWN0XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInc2t5dXhfdGFiX2FkZCcgfCBza3lMaWJSZXNvdXJjZXNcIlxuICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAnc2t5LW1hcmdpbi1pbmxpbmUtc20nOiAnbW9kZXJuJ1xuICAgICAgfVwiXG4gICAgICAoY2xpY2spPVwib25OZXdUYWJDbGljaygpXCJcbiAgICA+XG4gICAgICA8c2t5LWljb24gaWNvbj1cInBsdXMtY2lyY2xlXCIgc2l6ZT1cImxnXCIgLz5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIm9wZW5UYWIub2JzZXJ2ZXJzLmxlbmd0aCA+IDBcIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4taWNvbiBza3ktdGFic2V0LWJ0bi1vcGVuIHNreS1tYXJnaW4taW5saW5lLWNvbXBhY3RcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidza3l1eF90YWJfb3BlbicgfCBza3lMaWJSZXNvdXJjZXNcIlxuICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAnc2t5LW1hcmdpbi1pbmxpbmUtc20nOiAnbW9kZXJuJ1xuICAgICAgfVwiXG4gICAgICAoY2xpY2spPVwib25PcGVuVGFiQ2xpY2soKVwiXG4gICAgPlxuICAgICAgPHNreS1pY29uIGljb249XCJmb2xkZXItb3Blbi1vXCIgc2l6ZT1cImxnXCIgLz5cbiAgICA8L2J1dHRvbj5cbiAgPC9zcGFuPlxuPC9kaXY+XG48bmctY29udGVudCAvPlxuXG48bmctdGVtcGxhdGUgbGV0LXRhYkJ1dHRvbiAjdGFiQnV0dG9uVGVtcGxhdGU+XG4gIDxza3ktdGFiLWJ1dHRvblxuICAgIFthY3RpdmVdPVwidGFiQnV0dG9uLmFjdGl2ZVwiXG4gICAgW2FyaWFDb250cm9sc109XCJ0YWJCdXR0b24uYXJpYUNvbnRyb2xzXCJcbiAgICBbYnV0dG9uSHJlZl09XCJ0YWJCdXR0b24uYnV0dG9uSHJlZlwiXG4gICAgW2J1dHRvbklkXT1cInRhYkJ1dHRvbi5idXR0b25JZFwiXG4gICAgW2J1dHRvblRleHRdPVwidGFiQnV0dG9uLmJ1dHRvblRleHRcIlxuICAgIFtidXR0b25UZXh0Q291bnRdPVwidGFiQnV0dG9uLmJ1dHRvblRleHRDb3VudFwiXG4gICAgW2Nsb3NlYWJsZV09XCJ0YWJCdXR0b24uY2xvc2VhYmxlXCJcbiAgICBbZGlzYWJsZWRdPVwidGFiQnV0dG9uLmRpc2FibGVkXCJcbiAgICBbdGFiSW5kZXhdPVwidGFiQnV0dG9uLnRhYkluZGV4XCJcbiAgICBbdGFiU3R5bGVdPVwidGFiU3R5bGVcIlxuICAgIFt0YWJOdW1iZXJdPVwidGFiQnV0dG9uLnRhYk51bWJlclwiXG4gICAgW3RvdGFsVGFic0NvdW50XT1cInRhYkJ1dHRvbi50b3RhbFRhYnNDb3VudFwiXG4gICAgKGJ1dHRvbkNsaWNrKT1cIm9uVGFiQnV0dG9uQ2xpY2sodGFiQnV0dG9uKVwiXG4gICAgKGNsb3NlQ2xpY2spPVwib25UYWJDbG9zZUNsaWNrKHRhYkJ1dHRvbilcIlxuICA+PC9za3ktdGFiLWJ1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -131,11 +131,11 @@ export class SkyVerticalTabsetGroupComponent {
131
131
  this.#adapterService.focusButton(this.groupHeadingButton);
132
132
  }
133
133
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyVerticalTabsetGroupComponent, deps: [{ token: i1.SkyVerticalTabsetService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
134
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: SkyVerticalTabsetGroupComponent, selector: "sky-vertical-tabset-group", inputs: { disabled: "disabled", groupHeading: "groupHeading", open: "open" }, providers: [SkyVerticalTabsetGroupService], queries: [{ propertyName: "tabs", predicate: SkyVerticalTabComponent }], viewQueries: [{ propertyName: "groupHeadingButton", first: true, predicate: ["groupHeadingButton"], descendants: true }], ngImport: i0, template: "<div class=\"sky-vertical-tabset-group\">\n <!-- [ngClass] includes font classes for both modern and default styles -->\n <div\n class=\"sky-vertical-tabset-group-header\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-active sky-font-emphasized':\n isActive(),\n 'sky-vertical-tabset-group-header-sub-open': open,\n 'sky-font-deemphasized': disabled,\n 'sky-deemphasized': disabled,\n }\"\n >\n <button\n class=\"sky-padding-even-default sky-vertical-tabset-button\"\n role=\"tab\"\n type=\"button\"\n [attr.aria-controls]=\"groupContent.id\"\n [attr.aria-disabled]=\"disabled || undefined\"\n [attr.aria-expanded]=\"!disabled && open\"\n [id]=\"groupId\"\n [ngClass]=\"{\n 'sky-vertical-tabset-button-disabled': disabled\n }\"\n [tabIndex]=\"-1\"\n (click)=\"toggleMenuOpen()\"\n (keyup.arrowleft)=\"groupButtonArrowLeft($event)\"\n (keyup.arrowright)=\"groupButtonArrowRight($event)\"\n #groupHeadingButton\n >\n {{ groupHeading }}\n <sky-expansion-indicator\n class=\"sky-vertical-tabset-group-expansion-indicator\"\n [direction]=\"!disabled && open ? 'up' : 'down'\"\n >\n </sky-expansion-indicator>\n </button>\n </div>\n <div\n class=\"sky-vertical-tabset-group-content\"\n skyId\n [attr.labelledby]=\"groupId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n (@skyAnimationSlide.done)=\"updateSlideDirection($event)\"\n #groupContent\n >\n <ng-content />\n </div>\n</div>\n", styles: [".sky-vertical-tabset-group{border-bottom:1px solid #e2e3e4;margin:5px 0 5px 5px}.sky-vertical-tabset-group-header button{cursor:pointer;display:flex;justify-content:space-between;border:none;width:100%;text-align:left;background:none}.sky-vertical-tabset-group-content{overflow:hidden;border-top:1px solid #e2e3e4}:host ::ng-deep .sky-vertical-tabset-group-expansion-indicator>button{font-size:14px!important}.sky-vertical-tabset-button-disabled{cursor:not-allowed;pointer-events:none}:host-context(.sky-theme-modern) .sky-vertical-tabset-group{border:none;margin:15px 0}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-content{border:none;padding-left:10px}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-header{position:relative}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}.sky-theme-modern .sky-vertical-tabset-group{border:none;margin:15px 0}.sky-theme-modern .sky-vertical-tabset-group-content{border:none;padding-left:10px}.sky-theme-modern .sky-vertical-tabset-group-header{position:relative}.sky-theme-modern .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "component", type: i4.λ15, selector: "sky-expansion-indicator", inputs: ["direction"] }], animations: [skyAnimationSlide], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: SkyVerticalTabsetGroupComponent, selector: "sky-vertical-tabset-group", inputs: { disabled: "disabled", groupHeading: "groupHeading", open: "open" }, providers: [SkyVerticalTabsetGroupService], queries: [{ propertyName: "tabs", predicate: SkyVerticalTabComponent }], viewQueries: [{ propertyName: "groupHeadingButton", first: true, predicate: ["groupHeadingButton"], descendants: true }], ngImport: i0, template: "<div class=\"sky-vertical-tabset-group\">\n <!-- [ngClass] includes font classes for both modern and default styles -->\n <div\n class=\"sky-vertical-tabset-group-header\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-active sky-font-emphasized': isActive(),\n 'sky-vertical-tabset-group-header-sub-open': open,\n 'sky-font-deemphasized': disabled,\n 'sky-deemphasized': disabled\n }\"\n >\n <button\n class=\"sky-padding-even-default sky-vertical-tabset-button\"\n role=\"tab\"\n type=\"button\"\n [attr.aria-controls]=\"groupContent.id\"\n [attr.aria-disabled]=\"disabled || undefined\"\n [attr.aria-expanded]=\"!disabled && open\"\n [id]=\"groupId\"\n [ngClass]=\"{\n 'sky-vertical-tabset-button-disabled': disabled\n }\"\n [tabIndex]=\"-1\"\n (click)=\"toggleMenuOpen()\"\n (keyup.arrowleft)=\"groupButtonArrowLeft($event)\"\n (keyup.arrowright)=\"groupButtonArrowRight($event)\"\n #groupHeadingButton\n >\n {{ groupHeading }}\n <sky-expansion-indicator\n class=\"sky-vertical-tabset-group-expansion-indicator\"\n [direction]=\"!disabled && open ? 'up' : 'down'\"\n >\n </sky-expansion-indicator>\n </button>\n </div>\n <div\n class=\"sky-vertical-tabset-group-content\"\n skyId\n [attr.labelledby]=\"groupId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n (@skyAnimationSlide.done)=\"updateSlideDirection($event)\"\n #groupContent\n >\n <ng-content />\n </div>\n</div>\n", styles: [".sky-vertical-tabset-group{border-bottom:1px solid #e2e3e4;margin:5px 0 5px 5px}.sky-vertical-tabset-group-header button{cursor:pointer;display:flex;justify-content:space-between;border:none;width:100%;text-align:left;background:none}.sky-vertical-tabset-group-content{overflow:hidden;border-top:1px solid #e2e3e4}:host ::ng-deep .sky-vertical-tabset-group-expansion-indicator>button{font-size:14px!important}.sky-vertical-tabset-button-disabled{cursor:not-allowed;pointer-events:none}:host-context(.sky-theme-modern) .sky-vertical-tabset-group{border:none;margin:15px 0}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-content{border:none;padding-left:10px}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-header{position:relative}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}.sky-theme-modern .sky-vertical-tabset-group{border:none;margin:15px 0}.sky-theme-modern .sky-vertical-tabset-group-content{border:none;padding-left:10px}.sky-theme-modern .sky-vertical-tabset-group-header{position:relative}.sky-theme-modern .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "component", type: i4.λ15, selector: "sky-expansion-indicator", inputs: ["direction"] }], animations: [skyAnimationSlide], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
135
135
  }
136
136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyVerticalTabsetGroupComponent, decorators: [{
137
137
  type: Component,
138
- args: [{ selector: 'sky-vertical-tabset-group', changeDetection: ChangeDetectionStrategy.OnPush, animations: [skyAnimationSlide], providers: [SkyVerticalTabsetGroupService], template: "<div class=\"sky-vertical-tabset-group\">\n <!-- [ngClass] includes font classes for both modern and default styles -->\n <div\n class=\"sky-vertical-tabset-group-header\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-active sky-font-emphasized':\n isActive(),\n 'sky-vertical-tabset-group-header-sub-open': open,\n 'sky-font-deemphasized': disabled,\n 'sky-deemphasized': disabled,\n }\"\n >\n <button\n class=\"sky-padding-even-default sky-vertical-tabset-button\"\n role=\"tab\"\n type=\"button\"\n [attr.aria-controls]=\"groupContent.id\"\n [attr.aria-disabled]=\"disabled || undefined\"\n [attr.aria-expanded]=\"!disabled && open\"\n [id]=\"groupId\"\n [ngClass]=\"{\n 'sky-vertical-tabset-button-disabled': disabled\n }\"\n [tabIndex]=\"-1\"\n (click)=\"toggleMenuOpen()\"\n (keyup.arrowleft)=\"groupButtonArrowLeft($event)\"\n (keyup.arrowright)=\"groupButtonArrowRight($event)\"\n #groupHeadingButton\n >\n {{ groupHeading }}\n <sky-expansion-indicator\n class=\"sky-vertical-tabset-group-expansion-indicator\"\n [direction]=\"!disabled && open ? 'up' : 'down'\"\n >\n </sky-expansion-indicator>\n </button>\n </div>\n <div\n class=\"sky-vertical-tabset-group-content\"\n skyId\n [attr.labelledby]=\"groupId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n (@skyAnimationSlide.done)=\"updateSlideDirection($event)\"\n #groupContent\n >\n <ng-content />\n </div>\n</div>\n", styles: [".sky-vertical-tabset-group{border-bottom:1px solid #e2e3e4;margin:5px 0 5px 5px}.sky-vertical-tabset-group-header button{cursor:pointer;display:flex;justify-content:space-between;border:none;width:100%;text-align:left;background:none}.sky-vertical-tabset-group-content{overflow:hidden;border-top:1px solid #e2e3e4}:host ::ng-deep .sky-vertical-tabset-group-expansion-indicator>button{font-size:14px!important}.sky-vertical-tabset-button-disabled{cursor:not-allowed;pointer-events:none}:host-context(.sky-theme-modern) .sky-vertical-tabset-group{border:none;margin:15px 0}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-content{border:none;padding-left:10px}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-header{position:relative}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}.sky-theme-modern .sky-vertical-tabset-group{border:none;margin:15px 0}.sky-theme-modern .sky-vertical-tabset-group-content{border:none;padding-left:10px}.sky-theme-modern .sky-vertical-tabset-group-header{position:relative}.sky-theme-modern .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}\n"] }]
138
+ args: [{ selector: 'sky-vertical-tabset-group', changeDetection: ChangeDetectionStrategy.OnPush, animations: [skyAnimationSlide], providers: [SkyVerticalTabsetGroupService], template: "<div class=\"sky-vertical-tabset-group\">\n <!-- [ngClass] includes font classes for both modern and default styles -->\n <div\n class=\"sky-vertical-tabset-group-header\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-active sky-font-emphasized': isActive(),\n 'sky-vertical-tabset-group-header-sub-open': open,\n 'sky-font-deemphasized': disabled,\n 'sky-deemphasized': disabled\n }\"\n >\n <button\n class=\"sky-padding-even-default sky-vertical-tabset-button\"\n role=\"tab\"\n type=\"button\"\n [attr.aria-controls]=\"groupContent.id\"\n [attr.aria-disabled]=\"disabled || undefined\"\n [attr.aria-expanded]=\"!disabled && open\"\n [id]=\"groupId\"\n [ngClass]=\"{\n 'sky-vertical-tabset-button-disabled': disabled\n }\"\n [tabIndex]=\"-1\"\n (click)=\"toggleMenuOpen()\"\n (keyup.arrowleft)=\"groupButtonArrowLeft($event)\"\n (keyup.arrowright)=\"groupButtonArrowRight($event)\"\n #groupHeadingButton\n >\n {{ groupHeading }}\n <sky-expansion-indicator\n class=\"sky-vertical-tabset-group-expansion-indicator\"\n [direction]=\"!disabled && open ? 'up' : 'down'\"\n >\n </sky-expansion-indicator>\n </button>\n </div>\n <div\n class=\"sky-vertical-tabset-group-content\"\n skyId\n [attr.labelledby]=\"groupId\"\n [@.disabled]=\"animationDisabled\"\n [@skyAnimationSlide]=\"slideDirection\"\n (@skyAnimationSlide.done)=\"updateSlideDirection($event)\"\n #groupContent\n >\n <ng-content />\n </div>\n</div>\n", styles: [".sky-vertical-tabset-group{border-bottom:1px solid #e2e3e4;margin:5px 0 5px 5px}.sky-vertical-tabset-group-header button{cursor:pointer;display:flex;justify-content:space-between;border:none;width:100%;text-align:left;background:none}.sky-vertical-tabset-group-content{overflow:hidden;border-top:1px solid #e2e3e4}:host ::ng-deep .sky-vertical-tabset-group-expansion-indicator>button{font-size:14px!important}.sky-vertical-tabset-button-disabled{cursor:not-allowed;pointer-events:none}:host-context(.sky-theme-modern) .sky-vertical-tabset-group{border:none;margin:15px 0}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-content{border:none;padding-left:10px}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-header{position:relative}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}.sky-theme-modern .sky-vertical-tabset-group{border:none;margin:15px 0}.sky-theme-modern .sky-vertical-tabset-group-content{border:none;padding-left:10px}.sky-theme-modern .sky-vertical-tabset-group-header{position:relative}.sky-theme-modern .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}\n"] }]
139
139
  }], ctorParameters: () => [{ type: i1.SkyVerticalTabsetService }, { type: i0.ChangeDetectorRef }], propDecorators: { disabled: [{
140
140
  type: Input
141
141
  }], groupHeading: [{
@@ -149,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
149
149
  type: ViewChild,
150
150
  args: ['groupHeadingButton']
151
151
  }] } });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwtdGFic2V0LWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90YWJzL3NyYy9saWIvbW9kdWxlcy92ZXJ0aWNhbC10YWJzZXQvdmVydGljYWwtdGFic2V0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90YWJzL3NyYy9saWIvbW9kdWxlcy92ZXJ0aWNhbC10YWJzZXQvdmVydGljYWwtdGFic2V0LWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFFZixLQUFLLEVBSUwsU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7O0FBV2hGLE1BQU0sT0FBTywrQkFBK0I7SUFDMUM7OztPQUdHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBMEI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFC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bnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNreUFuaW1hdGlvblNsaWRlIH0gZnJvbSAnQHNreXV4L2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgU2t5SWRTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVRhYklkU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC90YWItaWQuc2VydmljZSc7XG5cbmltcG9ydCB7IFNreVZlcnRpY2FsVGFiQ29tcG9uZW50IH0gZnJvbSAnLi92ZXJ0aWNhbC10YWIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVZlcnRpY2FsVGFic2V0QWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3ZlcnRpY2FsLXRhYnNldC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VmVydGljYWxUYWJzZXRHcm91cFNlcnZpY2UgfSBmcm9tICcuL3ZlcnRpY2FsLXRhYnNldC1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVZlcnRpY2FsVGFic2V0U2VydmljZSB9IGZyb20gJy4vdmVydGljYWwtdGFic2V0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdmVydGljYWwtdGFic2V0LWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZlcnRpY2FsLXRhYnNldC1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZlcnRpY2FsLXRhYnNldC1ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NreUFuaW1hdGlvblNsaWRlXSxcbiAgcHJvdmlkZXJzOiBbU2t5VmVydGljYWxUYWJzZXRHcm91cFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lWZXJ0aWNhbFRhYnNldEdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBhYmlsaXR5IHRvIGV4cGFuZCBhbmQgY29sbGFwc2UgdGhlIGdyb3VwLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZVNsaWRlRGlyZWN0aW9uKGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyIGZvciB0aGUgY29sbGFwc2libGUgZ3JvdXAgb2YgdGFicy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBncm91cEhlYWRpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29sbGFwc2libGUgZ3JvdXAgaXMgZXhwYW5kZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG9wZW4odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfb3BlbiA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZVNsaWRlRGlyZWN0aW9uKGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3BlbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX29wZW47XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFNreVZlcnRpY2FsVGFiQ29tcG9uZW50KVxuICBwdWJsaWMgdGFiczogUXVlcnlMaXN0PFNreVZlcnRpY2FsVGFiQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdncm91cEhlYWRpbmdCdXR0b24nKVxuICBwdWJsaWMgZ3JvdXBIZWFkaW5nQnV0dG9uOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBhbmltYXRpb25EaXNhYmxlZCA9IGZhbHNlO1xuICBwdWJsaWMgc2xpZGVEaXJlY3Rpb246ICdkb3duJyB8ICd1cCcgfCAndm9pZCcgPSAndXAnO1xuXG4gIHByb3RlY3RlZCBncm91cElkOiBzdHJpbmc7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICN0YWJTZXJ2aWNlOiBTa3lWZXJ0aWNhbFRhYnNldFNlcnZpY2U7XG4gICNjaGFuZ2VSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuICAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5VmVydGljYWxUYWJzZXRBZGFwdGVyU2VydmljZSk7XG4gICNpZFNlcnZpY2UgPSBpbmplY3QoU2t5SWRTZXJ2aWNlKTtcbiAgI3RhYklkU2VydmljZSA9IGluamVjdChTa3lUYWJJZFNlcnZpY2UpO1xuICAjZ3JvdXBTZXJ2aWNlID0gaW5qZWN0KFNreVZlcnRpY2FsVGFic2V0R3JvdXBTZXJ2aWNlKTtcblxuICAjX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAjX29wZW46IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGFiU2VydmljZTogU2t5VmVydGljYWxUYWJzZXRTZXJ2aWNlLFxuICAgIGNoYW5nZVJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHRoaXMuI3RhYlNlcnZpY2UgPSB0YWJTZXJ2aWNlO1xuICAgIHRoaXMuI2NoYW5nZVJlZiA9IGNoYW5nZVJlZjtcblxuICAgIHRoaXMuZ3JvdXBJZCA9IHRoaXMuI2lkU2VydmljZS5nZW5lcmF0ZUlkKCk7XG5cbiAgICB0aGlzLiNncm91cFNlcnZpY2UubWVzc2FnZVN0cmVhbS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZS5tZXNzYWdlVHlwZSkge1xuICAgICAgICBjYXNlICdmb2N1cyc6XG4gICAgICAgICAgdGhpcy4jZm9jdXNCdXR0b24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiN0YWJJZFNlcnZpY2UucmVnaXN0ZXIodGhpcy5ncm91cElkLCB0aGlzLmdyb3VwSWQpO1xuXG4gICAgdGhpcy4jdGFiU2VydmljZS5hZGRHcm91cCh0aGlzKTtcblxuICAgIHRoaXMuI3RhYlNlcnZpY2UuaGlkaW5nVGFic1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLiN0YWJzSGlkZGVuKCkpO1xuXG4gICAgdGhpcy4jdGFiU2VydmljZS5zaG93aW5nVGFic1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLiN0YWJzU2hvd24oKSk7XG5cbiAgICB0aGlzLiN0YWJTZXJ2aWNlLnRhYkNsaWNrZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy4jdGFiQ2xpY2tlZCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiN0YWJTZXJ2aWNlLmRlc3Ryb3lHcm91cCh0aGlzKTtcblxuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI3RhYklkU2VydmljZS51bnJlZ2lzdGVyKHRoaXMuZ3JvdXBJZCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU2xpZGVEaXJlY3Rpb24oZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2xpZGVEaXJlY3Rpb24gPSBldmVudC50b1N0YXRlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZU1lbnVPcGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgICB9XG5cbiAgICB0aGlzLiN1cGRhdGVTbGlkZURpcmVjdGlvbih0cnVlKTtcbiAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ3JvdXBCdXR0b25BcnJvd0xlZnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdGhpcy50b2dnbGVNZW51T3BlbigpO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ3JvdXBCdXR0b25BcnJvd1JpZ2h0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMudGFicz8uZ2V0KDApPy5mb2N1c0J1dHRvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvZ2dsZU1lbnVPcGVuKCk7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmZpbmQoKHQpID0+ICEhdC5hY3RpdmUpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAjdGFiQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjdGFic0hpZGRlbigpOiB2b2lkIHtcbiAgICAvLyBBbmd1bGFyIHdpbGwgc29tZXRpbWVzIHBsYWNlIHRoZSBhbmltYXRpb24gaW50byB0aGUgXCJ2b2lkXCIgc3RhdGUgd2hlbiB0YWJzIGFyZSBoaWRkZW4uIFVwZGF0ZSBvdXIgaW50ZXJuYWwgdmFyaWFibGUgdG8gcmVmbGVjdCB0aGF0LlxuICAgIHRoaXMuc2xpZGVEaXJlY3Rpb24gPSAndm9pZCc7XG4gICAgdGhpcy4jY2hhbmdlUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgI3RhYnNTaG93bigpOiB2b2lkIHtcbiAgICAvLyBTZXQgdGhlIGFuaW1hdGlvbiBiYWNrIHVwIHNvIHRoYXQgdGhlIFwidm9pZFwiIHN0YXRlIGlzIHJldHVybmVkIHRvIHdoZXJlIGl0IHdhcyBwcmlvciB0byB0aGUgdGFicyBiZWluZyBoaWRkZW4uXG4gICAgLy8gVGhpcyB3aWxsIGJlIGluc3RhbnRhbmVvdXMgZHVlIHRvIHRoZXJlIG5vdCBiZWluZyBhIFwidm9pZCAtPiAqXCIgc3RhdGUgb24gdGhlIHNsaWRlIGFuaW1hdGlvbi5cbiAgICB0aGlzLiN1cGRhdGVTbGlkZURpcmVjdGlvbih0cnVlKTtcbiAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjdXBkYXRlU2xpZGVEaXJlY3Rpb24oYW5pbWF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYW5pbWF0aW9uRGlzYWJsZWQgPSAhYW5pbWF0ZTtcbiAgICB0aGlzLnNsaWRlRGlyZWN0aW9uID0gdGhpcy5vcGVuICYmICF0aGlzLmRpc2FibGVkID8gJ2Rvd24nIDogJ3VwJztcbiAgfVxuXG4gICNmb2N1c0J1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0J1dHRvbih0aGlzLmdyb3VwSGVhZGluZ0J1dHRvbik7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktdmVydGljYWwtdGFic2V0LWdyb3VwXCI+XG4gIDwhLS0gW25nQ2xhc3NdIGluY2x1ZGVzIGZvbnQgY2xhc3NlcyBmb3IgYm90aCBtb2Rlcm4gYW5kIGRlZmF1bHQgc3R5bGVzIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktdmVydGljYWwtdGFic2V0LWdyb3VwLWhlYWRlclwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS12ZXJ0aWNhbC10YWJzZXQtZ3JvdXAtaGVhZGVyLWFjdGl2ZSBza3ktZm9udC1lbXBoYXNpemVkJzpcbiAgICAgICAgaXNBY3RpdmUoKSxcbiAgICAgICdza3ktdmVydGljYWwtdGFic2V0LWdyb3VwLWhlYWRlci1zdWItb3Blbic6IG9wZW4sXG4gICAgICAnc2t5LWZvbnQtZGVlbXBoYXNpemVkJzogZGlzYWJsZWQsXG4gICAgICAnc2t5LWRlZW1waGFzaXplZCc6IGRpc2FibGVkLFxuICAgIH1cIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJza3ktcGFkZGluZy1ldmVuLWRlZmF1bHQgc2t5LXZlcnRpY2FsLXRhYnNldC1idXR0b25cIlxuICAgICAgcm9sZT1cInRhYlwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiZ3JvdXBDb250ZW50LmlkXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgdW5kZWZpbmVkXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWRpc2FibGVkICYmIG9wZW5cIlxuICAgICAgW2lkXT1cImdyb3VwSWRcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnc2t5LXZlcnRpY2FsLXRhYnNldC1idXR0b24tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVwiXG4gICAgICBbdGFiSW5kZXhdPVwiLTFcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnVPcGVuKClcIlxuICAgICAgKGtleXVwLmFycm93bGVmdCk9XCJncm91cEJ1dHRvbkFycm93TGVmdCgkZXZlbnQpXCJcbiAgICAgIChrZXl1cC5hcnJvd3JpZ2h0KT1cImdyb3VwQnV0dG9uQXJyb3dSaWdodCgkZXZlbnQpXCJcbiAgICAgICNncm91cEhlYWRpbmdCdXR0b25cbiAgICA+XG4gICAgICB7eyBncm91cEhlYWRpbmcgfX1cbiAgICAgIDxza3ktZXhwYW5zaW9uLWluZGljYXRvclxuICAgICAgICBjbGFzcz1cInNreS12ZXJ0aWNhbC10YWJzZXQtZ3JvdXAtZXhwYW5zaW9uLWluZGljYXRvclwiXG4gICAgICAgIFtkaXJlY3Rpb25dPVwiIWRpc2FibGVkICYmIG9wZW4gPyAndXAnIDogJ2Rvd24nXCJcbiAgICAgID5cbiAgICAgIDwvc2t5LWV4cGFuc2lvbi1pbmRpY2F0b3I+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktdmVydGljYWwtdGFic2V0LWdyb3VwLWNvbnRlbnRcIlxuICAgIHNreUlkXG4gICAgW2F0dHIubGFiZWxsZWRieV09XCJncm91cElkXCJcbiAgICBbQC5kaXNhYmxlZF09XCJhbmltYXRpb25EaXNhYmxlZFwiXG4gICAgW0Bza3lBbmltYXRpb25TbGlkZV09XCJzbGlkZURpcmVjdGlvblwiXG4gICAgKEBza3lBbmltYXRpb25TbGlkZS5kb25lKT1cInVwZGF0ZVNsaWRlRGlyZWN0aW9uKCRldmVudClcIlxuICAgICNncm91cENvbnRlbnRcbiAgPlxuICAgIDxuZy1jb250ZW50IC8+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwtdGFic2V0LWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90YWJzL3NyYy9saWIvbW9kdWxlcy92ZXJ0aWNhbC10YWJzZXQvdmVydGljYWwtdGFic2V0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90YWJzL3NyYy9saWIvbW9kdWxlcy92ZXJ0aWNhbC10YWJzZXQvdmVydGljYWwtdGFic2V0LWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFFZixLQUFLLEVBSUwsU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7O0FBV2hGLE1BQU0sT0FBTywrQkFBK0I7SUFDMUM7OztPQUdHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBMEI7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFRRDs7O09BR0c7SUFDSCxJQUNXLElBQUksQ0FBQyxLQUEwQjtRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBYUQsY0FBYyxDQUF1QjtJQUVyQyxXQUFXLENBQTJCO0lBQ3RDLFVBQVUsQ0FBb0I7SUFDOUIsZUFBZSxDQUEyQztJQUMxRCxVQUFVLENBQXdCO0lBQ2xDLGFBQWEsQ0FBMkI7SUFDeEMsYUFBYSxDQUF5QztJQUV0RCxVQUFVLENBQXNCO0lBQ2hDLE1BQU0sQ0FBc0I7SUFFNUIsWUFDRSxVQUFvQyxFQUNwQyxTQUE0QjtRQW5CdkIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLG1CQUFjLEdBQTJCLElBQUksQ0FBQztRQUlyRCxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFJckMsb0JBQWUsR0FBRyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMxRCxlQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFTcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFFNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JELFFBQVEsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM1QixLQUFLLE9BQU87b0JBQ1YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVO2FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7YUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTthQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBVTtRQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVTLG9CQUFvQixDQUFDLEtBQVk7UUFDekMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVMscUJBQXFCLENBQUMsS0FBWTtRQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVc7UUFDVCx1SUFBdUk7UUFDdkksSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsVUFBVTtRQUNSLGlIQUFpSDtRQUNqSCxnR0FBZ0c7UUFDaEcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQWdCO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNwRSxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7OEdBaktVLCtCQUErQjtrR0FBL0IsK0JBQStCLGtJQUYvQixDQUFDLDZCQUE2QixDQUFDLCtDQXFDekIsdUJBQXVCLHVKQ3JFMUMsOGpEQWdEQSxzK0NEakJjLENBQUMsaUJBQWlCLENBQUM7OzJGQUdwQiwrQkFBK0I7a0JBUjNDLFNBQVM7K0JBQ0UsMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLENBQUMsaUJBQWlCLENBQUMsYUFDcEIsQ0FBQyw2QkFBNkIsQ0FBQzs2SEFRL0IsUUFBUTtzQkFEbEIsS0FBSztnQkFjQyxZQUFZO3NCQURsQixLQUFLO2dCQVFLLElBQUk7c0JBRGQsS0FBSztnQkFXQyxJQUFJO3NCQURWLGVBQWU7dUJBQUMsdUJBQXVCO2dCQUlqQyxrQkFBa0I7c0JBRHhCLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNreUFuaW1hdGlvblNsaWRlIH0gZnJvbSAnQHNreXV4L2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgU2t5SWRTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVRhYklkU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC90YWItaWQuc2VydmljZSc7XG5cbmltcG9ydCB7IFNreVZlcnRpY2FsVGFiQ29tcG9uZW50IH0gZnJvbSAnLi92ZXJ0aWNhbC10YWIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVZlcnRpY2FsVGFic2V0QWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3ZlcnRpY2FsLXRhYnNldC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VmVydGljYWxUYWJzZXRHcm91cFNlcnZpY2UgfSBmcm9tICcuL3ZlcnRpY2FsLXRhYnNldC1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVZlcnRpY2FsVGFic2V0U2VydmljZSB9IGZyb20gJy4vdmVydGljYWwtdGFic2V0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdmVydGljYWwtdGFic2V0LWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZlcnRpY2FsLXRhYnNldC1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZlcnRpY2FsLXRhYnNldC1ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NreUFuaW1hdGlvblNsaWRlXSxcbiAgcHJvdmlkZXJzOiBbU2t5VmVydGljYWxUYWJzZXRHcm91cFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lWZXJ0aWNhbFRhYnNldEdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBhYmlsaXR5IHRvIGV4cGFuZCBhbmQgY29sbGFwc2UgdGhlIGdyb3VwLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZVNsaWRlRGlyZWN0aW9uKGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyIGZvciB0aGUgY29sbGFwc2libGUgZ3JvdXAgb2YgdGFicy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBncm91cEhlYWRpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29sbGFwc2libGUgZ3JvdXAgaXMgZXhwYW5kZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG9wZW4odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfb3BlbiA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZVNsaWRlRGlyZWN0aW9uKGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3BlbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX29wZW47XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFNreVZlcnRpY2FsVGFiQ29tcG9uZW50KVxuICBwdWJsaWMgdGFiczogUXVlcnlMaXN0PFNreVZlcnRpY2FsVGFiQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKCdncm91cEhlYWRpbmdCdXR0b24nKVxuICBwdWJsaWMgZ3JvdXBIZWFkaW5nQnV0dG9uOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBhbmltYXRpb25EaXNhYmxlZCA9IGZhbHNlO1xuICBwdWJsaWMgc2xpZGVEaXJlY3Rpb246ICdkb3duJyB8ICd1cCcgfCAndm9pZCcgPSAndXAnO1xuXG4gIHByb3RlY3RlZCBncm91cElkOiBzdHJpbmc7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICN0YWJTZXJ2aWNlOiBTa3lWZXJ0aWNhbFRhYnNldFNlcnZpY2U7XG4gICNjaGFuZ2VSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuICAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5VmVydGljYWxUYWJzZXRBZGFwdGVyU2VydmljZSk7XG4gICNpZFNlcnZpY2UgPSBpbmplY3QoU2t5SWRTZXJ2aWNlKTtcbiAgI3RhYklkU2VydmljZSA9IGluamVjdChTa3lUYWJJZFNlcnZpY2UpO1xuICAjZ3JvdXBTZXJ2aWNlID0gaW5qZWN0KFNreVZlcnRpY2FsVGFic2V0R3JvdXBTZXJ2aWNlKTtcblxuICAjX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAjX29wZW46IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGFiU2VydmljZTogU2t5VmVydGljYWxUYWJzZXRTZXJ2aWNlLFxuICAgIGNoYW5nZVJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHRoaXMuI3RhYlNlcnZpY2UgPSB0YWJTZXJ2aWNlO1xuICAgIHRoaXMuI2NoYW5nZVJlZiA9IGNoYW5nZVJlZjtcblxuICAgIHRoaXMuZ3JvdXBJZCA9IHRoaXMuI2lkU2VydmljZS5nZW5lcmF0ZUlkKCk7XG5cbiAgICB0aGlzLiNncm91cFNlcnZpY2UubWVzc2FnZVN0cmVhbS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZS5tZXNzYWdlVHlwZSkge1xuICAgICAgICBjYXNlICdmb2N1cyc6XG4gICAgICAgICAgdGhpcy4jZm9jdXNCdXR0b24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiN0YWJJZFNlcnZpY2UucmVnaXN0ZXIodGhpcy5ncm91cElkLCB0aGlzLmdyb3VwSWQpO1xuXG4gICAgdGhpcy4jdGFiU2VydmljZS5hZGRHcm91cCh0aGlzKTtcblxuICAgIHRoaXMuI3RhYlNlcnZpY2UuaGlkaW5nVGFic1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLiN0YWJzSGlkZGVuKCkpO1xuXG4gICAgdGhpcy4jdGFiU2VydmljZS5zaG93aW5nVGFic1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLiN0YWJzU2hvd24oKSk7XG5cbiAgICB0aGlzLiN0YWJTZXJ2aWNlLnRhYkNsaWNrZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy4jdGFiQ2xpY2tlZCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiN0YWJTZXJ2aWNlLmRlc3Ryb3lHcm91cCh0aGlzKTtcblxuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgIHRoaXMuI3RhYklkU2VydmljZS51bnJlZ2lzdGVyKHRoaXMuZ3JvdXBJZCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU2xpZGVEaXJlY3Rpb24oZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2xpZGVEaXJlY3Rpb24gPSBldmVudC50b1N0YXRlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZU1lbnVPcGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgICB9XG5cbiAgICB0aGlzLiN1cGRhdGVTbGlkZURpcmVjdGlvbih0cnVlKTtcbiAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ3JvdXBCdXR0b25BcnJvd0xlZnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdGhpcy50b2dnbGVNZW51T3BlbigpO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ3JvdXBCdXR0b25BcnJvd1JpZ2h0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMudGFicz8uZ2V0KDApPy5mb2N1c0J1dHRvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvZ2dsZU1lbnVPcGVuKCk7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmZpbmQoKHQpID0+ICEhdC5hY3RpdmUpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAjdGFiQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjdGFic0hpZGRlbigpOiB2b2lkIHtcbiAgICAvLyBBbmd1bGFyIHdpbGwgc29tZXRpbWVzIHBsYWNlIHRoZSBhbmltYXRpb24gaW50byB0aGUgXCJ2b2lkXCIgc3RhdGUgd2hlbiB0YWJzIGFyZSBoaWRkZW4uIFVwZGF0ZSBvdXIgaW50ZXJuYWwgdmFyaWFibGUgdG8gcmVmbGVjdCB0aGF0LlxuICAgIHRoaXMuc2xpZGVEaXJlY3Rpb24gPSAndm9pZCc7XG4gICAgdGhpcy4jY2hhbmdlUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgI3RhYnNTaG93bigpOiB2b2lkIHtcbiAgICAvLyBTZXQgdGhlIGFuaW1hdGlvbiBiYWNrIHVwIHNvIHRoYXQgdGhlIFwidm9pZFwiIHN0YXRlIGlzIHJldHVybmVkIHRvIHdoZXJlIGl0IHdhcyBwcmlvciB0byB0aGUgdGFicyBiZWluZyBoaWRkZW4uXG4gICAgLy8gVGhpcyB3aWxsIGJlIGluc3RhbnRhbmVvdXMgZHVlIHRvIHRoZXJlIG5vdCBiZWluZyBhIFwidm9pZCAtPiAqXCIgc3RhdGUgb24gdGhlIHNsaWRlIGFuaW1hdGlvbi5cbiAgICB0aGlzLiN1cGRhdGVTbGlkZURpcmVjdGlvbih0cnVlKTtcbiAgICB0aGlzLiNjaGFuZ2VSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjdXBkYXRlU2xpZGVEaXJlY3Rpb24oYW5pbWF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYW5pbWF0aW9uRGlzYWJsZWQgPSAhYW5pbWF0ZTtcbiAgICB0aGlzLnNsaWRlRGlyZWN0aW9uID0gdGhpcy5vcGVuICYmICF0aGlzLmRpc2FibGVkID8gJ2Rvd24nIDogJ3VwJztcbiAgfVxuXG4gICNmb2N1c0J1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0J1dHRvbih0aGlzLmdyb3VwSGVhZGluZ0J1dHRvbik7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktdmVydGljYWwtdGFic2V0LWdyb3VwXCI+XG4gIDwhLS0gW25nQ2xhc3NdIGluY2x1ZGVzIGZvbnQgY2xhc3NlcyBmb3IgYm90aCBtb2Rlcm4gYW5kIGRlZmF1bHQgc3R5bGVzIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktdmVydGljYWwtdGFic2V0LWdyb3VwLWhlYWRlclwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS12ZXJ0aWNhbC10YWJzZXQtZ3JvdXAtaGVhZGVyLWFjdGl2ZSBza3ktZm9udC1lbXBoYXNpemVkJzogaXNBY3RpdmUoKSxcbiAgICAgICdza3ktdmVydGljYWwtdGFic2V0LWdyb3VwLWhlYWRlci1zdWItb3Blbic6IG9wZW4sXG4gICAgICAnc2t5LWZvbnQtZGVlbXBoYXNpemVkJzogZGlzYWJsZWQsXG4gICAgICAnc2t5LWRlZW1waGFzaXplZCc6IGRpc2FibGVkXG4gICAgfVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInNreS1wYWRkaW5nLWV2ZW4tZGVmYXVsdCBza3ktdmVydGljYWwtdGFic2V0LWJ1dHRvblwiXG4gICAgICByb2xlPVwidGFiXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJncm91cENvbnRlbnQuaWRcIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCB8fCB1bmRlZmluZWRcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhZGlzYWJsZWQgJiYgb3BlblwiXG4gICAgICBbaWRdPVwiZ3JvdXBJZFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdza3ktdmVydGljYWwtdGFic2V0LWJ1dHRvbi1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICB9XCJcbiAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlTWVudU9wZW4oKVwiXG4gICAgICAoa2V5dXAuYXJyb3dsZWZ0KT1cImdyb3VwQnV0dG9uQXJyb3dMZWZ0KCRldmVudClcIlxuICAgICAgKGtleXVwLmFycm93cmlnaHQpPVwiZ3JvdXBCdXR0b25BcnJvd1JpZ2h0KCRldmVudClcIlxuICAgICAgI2dyb3VwSGVhZGluZ0J1dHRvblxuICAgID5cbiAgICAgIHt7IGdyb3VwSGVhZGluZyB9fVxuICAgICAgPHNreS1leHBhbnNpb24taW5kaWNhdG9yXG4gICAgICAgIGNsYXNzPVwic2t5LXZlcnRpY2FsLXRhYnNldC1ncm91cC1leHBhbnNpb24taW5kaWNhdG9yXCJcbiAgICAgICAgW2RpcmVjdGlvbl09XCIhZGlzYWJsZWQgJiYgb3BlbiA/ICd1cCcgOiAnZG93bidcIlxuICAgICAgPlxuICAgICAgPC9za3ktZXhwYW5zaW9uLWluZGljYXRvcj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS12ZXJ0aWNhbC10YWJzZXQtZ3JvdXAtY29udGVudFwiXG4gICAgc2t5SWRcbiAgICBbYXR0ci5sYWJlbGxlZGJ5XT1cImdyb3VwSWRcIlxuICAgIFtALmRpc2FibGVkXT1cImFuaW1hdGlvbkRpc2FibGVkXCJcbiAgICBbQHNreUFuaW1hdGlvblNsaWRlXT1cInNsaWRlRGlyZWN0aW9uXCJcbiAgICAoQHNreUFuaW1hdGlvblNsaWRlLmRvbmUpPVwidXBkYXRlU2xpZGVEaXJlY3Rpb24oJGV2ZW50KVwiXG4gICAgI2dyb3VwQ29udGVudFxuICA+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==