@libs-ui/services-diagram-draw 0.2.356-37 → 0.2.356-40

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.
@@ -3,6 +3,7 @@ import { setStylesElement } from '@libs-ui/utils';
3
3
  import { MoLibDiagramCalculatorCoordinatesUtil } from './utils/calculator-element.util';
4
4
  import { applyElementStyle, setAttributeSvgAndAppend } from './utils/diagram.util';
5
5
  import { MoLibDiagramHorizontalCalculatorCoordinatesUtil } from './utils/horizontal/calculator-coordinates.util';
6
+ import { LibsUiDiagramDrawNavigationUtil } from './utils/navigation/build-navigation-data.util';
6
7
  import * as i0 from "@angular/core";
7
8
  const canvasConfig = signal({
8
9
  ELEMENT_WIDTH_DEFAULT_BRANCH_WHEN_NOT_ELEMENT: 60,
@@ -116,7 +117,7 @@ export class LibsUiDiagramDrawService {
116
117
  if (currentElement.nodeOtherConfig?.attributeSvgD) {
117
118
  this.attributeSvgD.update((prev) => `${prev ?? ''} ${currentElement.nodeOtherConfig?.attributeSvgD}`);
118
119
  }
119
- if (!currentElement.branches || !currentElement.branches.length) {
120
+ if (!currentElement.branches?.length) {
120
121
  return;
121
122
  }
122
123
  currentElement.branches.forEach((branch) => {
@@ -143,7 +144,7 @@ export class LibsUiDiagramDrawService {
143
144
  return;
144
145
  }
145
146
  this.clearNodes();
146
- this.renderElementsRecursively(elements, true, undefined);
147
+ this.renderElementsRecursively(elements, true);
147
148
  this.renderBranchLabels(elements);
148
149
  }
149
150
  extractVirtualElements(elements) {
@@ -290,7 +291,7 @@ export class LibsUiDiagramDrawService {
290
291
  this.createNode(element, branch, shouldShowArrow, false);
291
292
  }
292
293
  // Render nodeOtherConfig nếu có (nodes phụ) - KHÔNG có arrow
293
- if (element.nodeOtherConfig && element.nodeOtherConfig.translateX !== undefined && element.nodeOtherConfig.translateY !== undefined) {
294
+ if (element.nodeOtherConfig?.translateX !== undefined && element.nodeOtherConfig.translateY !== undefined) {
294
295
  this.createNode(element.nodeOtherConfig, branch, false, true);
295
296
  }
296
297
  // Render branches nếu có
@@ -299,7 +300,7 @@ export class LibsUiDiagramDrawService {
299
300
  if (branch.elements && branch.elements.length > 0) {
300
301
  this.renderElementsRecursively(branch.elements, false, branch);
301
302
  }
302
- if (branch.nodeOtherConfig && branch.nodeOtherConfig.translateX !== undefined && branch.nodeOtherConfig.translateY !== undefined) {
303
+ if (branch.nodeOtherConfig?.translateX !== undefined && branch.nodeOtherConfig.translateY !== undefined) {
303
304
  this.createNode(branch.nodeOtherConfig, branch, false, true);
304
305
  }
305
306
  });
@@ -513,6 +514,14 @@ export class LibsUiDiagramDrawService {
513
514
  }
514
515
  });
515
516
  }
517
+ /**
518
+ * Build dữ liệu navigation line (next_other_id) từ flat elements để render qua draw-line directive.
519
+ * Service tự đọc `orientation()` để chọn pattern endpoint phù hợp.
520
+ * Caller chỉ cần truyền vào `drawLineFunctionControl.setData(...)`.
521
+ */
522
+ buildNavigationData(flatElements, styleConfig) {
523
+ return LibsUiDiagramDrawNavigationUtil.buildNavigationData(flatElements, this.orientation(), styleConfig);
524
+ }
516
525
  /** Xóa tất cả drop zone "+" khỏi DOM */
517
526
  clearDropZones() {
518
527
  const container = this.configCanvas()?.nodesContainer?.nativeElement;
@@ -708,4 +717,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
708
717
  providedIn: 'root',
709
718
  }]
710
719
  }] });
711
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS1kcmF3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvZGlhZ3JhbS1kcmF3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWxELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOztBQUVqSCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQWdCO0lBQ3pDLDZDQUE2QyxFQUFFLEVBQUU7SUFDakQsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQiw2QkFBNkIsRUFBRSxFQUFFO0lBQ2pDLHFDQUFxQyxFQUFFLEVBQUU7SUFDekMsOEJBQThCLEVBQUUsR0FBRztJQUNuQyxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHdCQUF3QixFQUFFLFFBQVE7SUFDbEMsd0JBQXdCLEVBQUUsR0FBRztJQUM3Qiw4Q0FBOEMsRUFBRSxFQUFFO0lBRWxELGdCQUFnQixFQUFFLEVBQUU7SUFDcEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QiwwQkFBMEIsRUFBRSxDQUFDO0lBRTdCLGlCQUFpQixFQUFFLE1BQU07SUFDekIscUJBQXFCLEVBQUUsVUFBVTtJQUNqQyxxQkFBcUIsRUFBRSxHQUFHO0lBQzFCLHNCQUFzQixFQUFFLEVBQUU7SUFFMUIsaUJBQWlCLEVBQUUsRUFBRTtDQUN0QixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxvQkFB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ZSxDQUFDO1FBQ2xDLElBQUksRUFBRSxFQUFFLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuSCxDQUFDO1FBQ0QsNERBQTREO1FBQzVELE9BQU8sQ0FBQyxNQUFNLENBQUMsdUJBQXVCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7d0dBMXVCVSx3QkFBd0I7NEdBQXhCLHdCQUF3QixjQUZ2QixNQUFNOzs0RkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNldFN0eWxlc0VsZW1lbnQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBJUnVsZUNvbm5lY3RhYmxlLCBURHJvcFpvbmVDYW5Ecm9wRm4gfSBmcm9tICcuL2ludGVyZmFjZXMvY2FudmFzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGF0YURpYWdyYW1Db25maWdTdmcgfSBmcm9tICcuL2ludGVyZmFjZXMvY29vcmRpbmF0ZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IElDYW52YXNDb25maWcsIElDb25maWcsIElEaWFncmFtRWxlbWVudCwgSURpYWdyYW1FbGVtZW50QnJhbmNoLCBJRHJvcFpvbmVJbmRpY2F0b3JTdHlsZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9kaWFncmFtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNb0xpYkRpYWdyYW1DYWxjdWxhdG9yQ29vcmRpbmF0ZXNVdGlsIH0gZnJvbSAnLi91dGlscy9jYWxjdWxhdG9yLWVsZW1lbnQudXRpbCc7XG5pbXBvcnQgeyBhcHBseUVsZW1lbnRTdHlsZSwgc2V0QXR0cmlidXRlU3ZnQW5kQXBwZW5kIH0gZnJvbSAnLi91dGlscy9kaWFncmFtLnV0aWwnO1xuaW1wb3J0IHsgTW9MaWJEaWFncmFtSG9yaXpvbnRhbENhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwgfSBmcm9tICcuL3V0aWxzL2hvcml6b250YWwvY2FsY3VsYXRvci1jb29yZGluYXRlcy51dGlsJztcblxuY29uc3QgY2FudmFzQ29uZmlnID0gc2lnbmFsPElDYW52YXNDb25maWc+KHtcbiAgRUxFTUVOVF9XSURUSF9ERUZBVUxUX0JSQU5DSF9XSEVOX05PVF9FTEVNRU5UOiA2MCxcbiAgRUxFTUVOVF9NQVJHSU5fREVGQVVMVDogNjAsXG4gIEVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIOiAxNixcbiAgRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVDogNjAsXG4gIERFRkFVTFRfQlJBTkNIX1dIRU5fTk9fRUxFTUVOVDogMTAwLFxuICBFTEVNRU5UX0hFSUdIVF9DVVJWRTogMTAsXG4gIEVMRU1FTlRfU1ZHX1NUUk9LRV9DT0xPUjogJzljYTJhZCcsXG4gIEVMRU1FTlRfU1ZHX1NUUk9LRV9XSURUSDogJzEnLFxuICBFTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSF9UT19FTEVNRU5UX0ZJUlNUOiA3OCxcblxuICBESVNUQU5DRV9UT19XQUlUOiAzMCxcbiAgV0FJVF9UT19FTEVNRU5UOiA1MCxcbiAgRUxFTUVOVF9XQUlUX0RFRkFVTFQ6IDI4LFxuICBESVNUQU5DRV9XQUlUX1RPX05FWFRfTElORTogNCxcblxuICBUWVBFX0VMRU1FTlRfRVhJVDogJ0VYSVQnLFxuICBUWVBFX0VMRU1FTlRfV09SS0ZMT1c6ICdXT1JLRkxPVycsXG4gIFdJRFRIX0VMRU1FTlRfREVGQVVMVDogMTY1LFxuICBIRUlHSFRfRUxFTUVOVF9ERUZBVUxUOiA0OCxcblxuICBBRERfSUNPTl9ESUFNRVRFUjogMjQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGNhbnZhc0NvbmZpZ1JlYWRvbmx5ID0gY2FudmFzQ29uZmlnLmFzUmVhZG9ubHkoKTtcbmV4cG9ydCBjb25zdCBzdG9yZURhdGFEZWZhdWx0ID0ge1xuICBwb3NpdGlvbk1heExlZnQ6IDAsXG4gIHBvc2l0aW9uTWF4VG9wOiAwLFxuICB3aWR0aEhlaWdodFN2Z0NhbnZhczogeyBoZWlnaHRTdmc6IHdpbmRvdy5pbm5lckhlaWdodCwgd2lkdGhTdmc6IHdpbmRvdy5pbm5lcldpZHRoIH0sXG59O1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaURpYWdyYW1EcmF3U2VydmljZSB7XG4gIHByaXZhdGUgY29uZmlnQ2FudmFzID0gc2lnbmFsPElDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IG9yaWVudGF0aW9uID0gc2lnbmFsPCd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCc+KCd2ZXJ0aWNhbCcpO1xuICBwcml2YXRlIGVsZW1lbnRTdmcgPSBzaWduYWw8U1ZHUGF0aEVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgYXR0cmlidXRlU3ZnRCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWZzID0gc2lnbmFsPENvbXBvbmVudFJlZjxhbnk+W10+KFtdKTtcblxuICAvLyBWaXJ0dWFsaXphdGlvbiBUcmFja2luZ1xuICBwcml2YXRlIHZpcnR1YWxWaWV3cG9ydD86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH07XG4gIHByaXZhdGUgdmlydHVhbEZsYXRFbGVtZW50czogeyBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQ7IGJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaDsgc2hvdWxkU2hvd0Fycm93OiBib29sZWFuOyBpc090aGVyQ29uZmlnOiBib29sZWFuOyBwYXJlbnRJZD86IHN0cmluZyB8IG51bWJlciB9W10gPSBbXTtcbiAgcHJpdmF0ZSB2aXJ0dWFsRmxhdEJyYW5jaGVzOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2hbXSA9IFtdO1xuICBwcml2YXRlIHZpcnR1YWxOb2Rlc01hcCA9IG5ldyBNYXA8c3RyaW5nLCB7IGNvbXBvbmVudD86IENvbXBvbmVudFJlZjxhbnk+OyBhcnJvdz86IEhUTUxFbGVtZW50OyBsYWJlbD86IEhUTUxFbGVtZW50IH0+KCk7XG5cbiAgcHVibGljIHVwZGF0ZVZpZXdwb3J0KHZwOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgdGhpcy52aXJ0dWFsVmlld3BvcnQgPSB2cDtcbiAgICBpZiAodGhpcy5jb25maWdDYW52YXMoKT8udXNlVmlydHVhbGl6YXRpb25UZW1wbGF0ZSkge1xuICAgICAgdGhpcy5hcHBseVZpcnR1YWxpemF0aW9uRGlmZigpO1xuICAgIH1cbiAgfVxuXG4gIHNldCBzZXRDb25maWcoY29uZmlnOiBJQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWdDYW52YXMuc2V0KGNvbmZpZyk7XG4gIH1cblxuICBzZXQgc2V0Q29uZmlnQ2FudmFzKGNvbmZpZzogUGFydGlhbDxJQ2FudmFzQ29uZmlnPikge1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FudmFzQ29uZmlnLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgLi4uY29uZmlnIH0pKTtcbiAgfVxuXG4gIGNvbmZpZ1hZRWxlbWVudHMoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIHVwZGF0ZVNWRz86IGJvb2xlYW4sIHBvc2l0aW9uWD86IG51bWJlcikge1xuICAgIGNvbnN0IHN0b3JlRGF0YSA9IHRoaXMuY29uZmlnQ2FudmFzKCk/LnN0b3JlRGF0YURlZmluZSA/PyBzdG9yZURhdGFEZWZhdWx0O1xuICAgIGNvbnN0IG1heExlZnRPcmlnaW4gPSBzdG9yZURhdGEucG9zaXRpb25NYXhMZWZ0O1xuICAgIGNvbnN0IG1heFRvcE9yaWdpbiA9IHN0b3JlRGF0YS5wb3NpdGlvbk1heFRvcCA/PyAwO1xuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBNb0xpYkRpYWdyYW1Ib3Jpem9udGFsQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbC5zZXRYWUVsZW1lbnRzKGVsZW1lbnRzLCBzdG9yZURhdGEsIHBvc2l0aW9uWCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhlbGVtZW50cywgc3RvcmVEYXRhLCBwb3NpdGlvblgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1heExlZnROZXcgPSBzdG9yZURhdGEucG9zaXRpb25NYXhMZWZ0O1xuICAgIGNvbnN0IG1heFRvcE5ldyA9IHN0b3JlRGF0YS5wb3NpdGlvbk1heFRvcCA/PyAwO1xuXG4gICAgaWYgKCF0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgdGhpcy5lbGVtZW50U3ZnLnNldChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKSk7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVTVkcgJiYgdGhpcy5jb25maWdDYW52YXMoKT8uc3ZnQ29udGFpbmVyICYmIHRoaXMuZWxlbWVudFN2ZygpKSB7XG4gICAgICBzZXRBdHRyaWJ1dGVTdmdBbmRBcHBlbmQodGhpcy5jb25maWdDYW52YXMoKT8uc3ZnQ29udGFpbmVyLCB0aGlzLmVsZW1lbnRTdmcoKSwgJycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJyAmJiBtYXhUb3BPcmlnaW4gIT09IG1heFRvcE5ldykge1xuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbkVsZW1lbnRzKG1heFRvcE5ldywgZWxlbWVudHMsIHN0b3JlRGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICd2ZXJ0aWNhbCcgJiYgbWF4TGVmdE9yaWdpbiAhPT0gbWF4TGVmdE5ldykge1xuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbkVsZW1lbnRzKG1heExlZnROZXcsIGVsZW1lbnRzLCBzdG9yZURhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVTdmdELnNldCgnJyk7XG4gICAgICB0aGlzLmJ1aWxkU3ZnRWxlbWVudChlbGVtZW50cyk7XG4gICAgICB0aGlzLmVsZW1lbnRTdmcoKT8uc2V0QXR0cmlidXRlKCdkJywgdGhpcy5hdHRyaWJ1dGVTdmdEKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25FbGVtZW50cyhwb3NpdGlvbk9mZnNldDogbnVtYmVyLCBlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcpIHtcbiAgICBpZiAocG9zaXRpb25PZmZzZXQgJiYgcG9zaXRpb25PZmZzZXQgPCAwKSB7XG4gICAgICBwb3NpdGlvbk9mZnNldCA9IHBvc2l0aW9uT2Zmc2V0ICogLTEgKyAyMDA7IC8vIDEwMCBsw6Aga2hv4bqjbmcgY8OhY2ggY8OhY2ggYmnDqm5cbiAgICB9XG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBNb0xpYkRpYWdyYW1Ib3Jpem9udGFsQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbC5zZXRYWUVsZW1lbnRzKGVsZW1lbnRzLCB7IC4uLmNvbmZpZywgdXBkYXRlU1ZHOiB0cnVlIH0sIHBvc2l0aW9uT2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbC5zZXRYWUVsZW1lbnRzKGVsZW1lbnRzLCB7IC4uLmNvbmZpZywgdXBkYXRlU1ZHOiB0cnVlIH0sIHBvc2l0aW9uT2Zmc2V0KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgdGhpcy5lbGVtZW50U3ZnLnNldChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVTdmdELnNldCgnJyk7XG4gICAgICB0aGlzLmJ1aWxkU3ZnRWxlbWVudChlbGVtZW50cyk7XG4gICAgICB0aGlzLmVsZW1lbnRTdmcoKT8uc2V0QXR0cmlidXRlKCdkJywgdGhpcy5hdHRyaWJ1dGVTdmdEKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdmdFbGVtZW50KGVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSB7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoY3VycmVudEVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChjdXJyZW50RWxlbWVudC5hdHRyaWJ1dGVTdmdEKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC51cGRhdGUoKHByZXYpID0+IGAke3ByZXYgPz8gJyd9ICR7Y3VycmVudEVsZW1lbnQuYXR0cmlidXRlU3ZnRH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWc/LmF0dHJpYnV0ZVN2Z0QpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVTdmdELnVwZGF0ZSgocHJldikgPT4gYCR7cHJldiA/PyAnJ30gJHtjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWc/LmF0dHJpYnV0ZVN2Z0R9YCk7XG4gICAgICB9XG4gICAgICBpZiAoIWN1cnJlbnRFbGVtZW50LmJyYW5jaGVzIHx8ICFjdXJyZW50RWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50RWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgaWYgKGJyYW5jaC5hdHRyaWJ1dGVTdmdEKSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVTdmdELnVwZGF0ZSgocHJldikgPT4gYCR7cHJldiA/PyAnJ30gJHticmFuY2guYXR0cmlidXRlU3ZnRH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZz8uYXR0cmlidXRlU3ZnRCkge1xuICAgICAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC51cGRhdGUoKHByZXYpID0+IGAke3ByZXYgPz8gJyd9ICR7YnJhbmNoLm5vZGVPdGhlckNvbmZpZz8uYXR0cmlidXRlU3ZnRH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRTdmdFbGVtZW50KGJyYW5jaC5lbGVtZW50cyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdOG6pXQgY+G6oyBub2RlcyB04burIGVsZW1lbnRzIGFycmF5XG4gICAqL1xuICByZW5kZXJOb2RlcyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGlmICh0aGlzLmNvbmZpZ0NhbnZhcygpPy51c2VWaXJ0dWFsaXphdGlvblRlbXBsYXRlKSB7XG4gICAgICB0aGlzLmV4dHJhY3RWaXJ0dWFsRWxlbWVudHMoZWxlbWVudHMpO1xuICAgICAgdGhpcy5hcHBseVZpcnR1YWxpemF0aW9uRGlmZigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJOb2RlcygpO1xuICAgIHRoaXMucmVuZGVyRWxlbWVudHNSZWN1cnNpdmVseShlbGVtZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICB0aGlzLnJlbmRlckJyYW5jaExhYmVscyhlbGVtZW50cyk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RWaXJ0dWFsRWxlbWVudHMoZWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdKSB7XG4gICAgdGhpcy52aXJ0dWFsRmxhdEVsZW1lbnRzID0gW107XG4gICAgdGhpcy52aXJ0dWFsRmxhdEJyYW5jaGVzID0gW107XG4gICAgY29uc3Qgc2NhbiA9IChsaXN0OiBJRGlhZ3JhbUVsZW1lbnRbXSwgYnJhbmNoPzogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBpc0ZpcnN0TGV2ZWwgPSB0cnVlKSA9PiB7XG4gICAgICBsaXN0LmZvckVhY2goKGVsLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzaG91bGRTaG93QXJyb3cgPSAhKGlzRmlyc3RMZXZlbCAmJiBpbmRleCA9PT0gMCk7XG4gICAgICAgIHRoaXMudmlydHVhbEZsYXRFbGVtZW50cy5wdXNoKHsgZWxlbWVudDogZWwsIGJyYW5jaCwgaXNPdGhlckNvbmZpZzogZmFsc2UsIHNob3VsZFNob3dBcnJvdywgcGFyZW50SWQ6IGVsLmlkIH0pO1xuICAgICAgICBpZiAoZWwubm9kZU90aGVyQ29uZmlnKSB0aGlzLnZpcnR1YWxGbGF0RWxlbWVudHMucHVzaCh7IGVsZW1lbnQ6IGVsLm5vZGVPdGhlckNvbmZpZywgYnJhbmNoLCBpc090aGVyQ29uZmlnOiB0cnVlLCBzaG91bGRTaG93QXJyb3c6IGZhbHNlLCBwYXJlbnRJZDogZWwuaWQgfSk7XG4gICAgICAgIGlmIChlbC5icmFuY2hlcykge1xuICAgICAgICAgIGVsLmJyYW5jaGVzLmZvckVhY2goKGIsIGJJbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFiLmxhYmVsKSBiLmxhYmVsID0gYE5ow6FuaCAke2JJbmRleCArIDF9YDtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbEZsYXRCcmFuY2hlcy5wdXNoKGIpO1xuICAgICAgICAgICAgaWYgKGIuZWxlbWVudHMpIHNjYW4oYi5lbGVtZW50cyBhcyBJRGlhZ3JhbUVsZW1lbnRbXSwgYiwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKGIubm9kZU90aGVyQ29uZmlnKSB0aGlzLnZpcnR1YWxGbGF0RWxlbWVudHMucHVzaCh7IGVsZW1lbnQ6IGIubm9kZU90aGVyQ29uZmlnLCBicmFuY2g6IGIsIGlzT3RoZXJDb25maWc6IHRydWUsIHNob3VsZFNob3dBcnJvdzogZmFsc2UsIHBhcmVudElkOiAnYnJhbmNoXycgKyBiSW5kZXggKyAnXycgKyBlbC5pZCB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBzY2FuKGVsZW1lbnRzLCB1bmRlZmluZWQsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZpcnR1YWxpemF0aW9uRGlmZigpIHtcbiAgICBjb25zdCB2cCA9IHRoaXMudmlydHVhbFZpZXdwb3J0O1xuICAgIGlmICghdnApIHJldHVybjtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0NhbnZhcygpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbmZpZz8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWNvbmZpZykgcmV0dXJuO1xuXG4gICAgY29uc3QgYnVmZmVyID0gMzAwO1xuICAgIGNvbnN0IHZpc2libGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIHRoaXMudmlydHVhbEZsYXRFbGVtZW50cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGl0ZW0uZWxlbWVudDtcbiAgICAgIGlmIChlbC50cmFuc2xhdGVYID09PSB1bmRlZmluZWQgfHwgZWwudHJhbnNsYXRlWSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICBpZiAoZWwudHJhbnNsYXRlWCArIChlbC5zcGVjaWZpY193aWR0aCB8fCAxNjUpIDwgdnAueCAtIGJ1ZmZlciB8fCBlbC50cmFuc2xhdGVYID4gdnAueCArIHZwLndpZHRoICsgYnVmZmVyIHx8IGVsLnRyYW5zbGF0ZVkgKyAoZWwuc3BlY2lmaWNfaGVpZ2h0IHx8IDQ4KSA8IHZwLnkgLSBidWZmZXIgfHwgZWwudHJhbnNsYXRlWSA+IHZwLnkgKyB2cC5oZWlnaHQgKyBidWZmZXIpIHJldHVybjtcblxuICAgICAgY29uc3QgaWQgPSBTdHJpbmcoaXRlbS5wYXJlbnRJZCkgKyAoaXRlbS5pc090aGVyQ29uZmlnID8gJ19vdGhlcicgOiAnJyk7XG4gICAgICB2aXNpYmxlSWRzLmFkZChpZCk7XG5cbiAgICAgIGlmICghdGhpcy52aXJ0dWFsTm9kZXNNYXAuaGFzKGlkKSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRUeXBlID0gaXRlbS5pc090aGVyQ29uZmlnID8gY29uZmlnLm5vZGVPdGhlckNvbmZpZ0NvbXBvbmVudFR5cGUgOiBjb25maWcubm9kZUNvbXBvbmVudFR5cGU7XG4gICAgICAgIGlmIChjb21wb25lbnRUeXBlICYmIGNvbmZpZy52aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgY29uc3QgcmVmID0gY29uZmlnLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuICAgICAgICAgIHJlZi5zZXRJbnB1dCgnZWxlbWVudCcsIGVsKTtcbiAgICAgICAgICBpZiAoaXRlbS5icmFuY2gpIHJlZi5zZXRJbnB1dCgnYnJhbmNoJywgaXRlbS5icmFuY2gpO1xuICAgICAgICAgIHJlZi5zZXRJbnB1dCgnb3JpZW50YXRpb24nLCB0aGlzLm9yaWVudGF0aW9uKCkpO1xuXG4gICAgICAgICAgY29uc3QgZG9tRWwgPSByZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBkb21FbC5jbGFzc0xpc3QuYWRkKCdkaWFncmFtLW5vZGUtZHluYW1pYycpO1xuICAgICAgICAgIGFwcGx5RWxlbWVudFN0eWxlKGRvbUVsLCBlbCk7XG4gICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRvbUVsKTtcblxuICAgICAgICAgIGxldCBhcnJvdzogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGl0ZW0uc2hvdWxkU2hvd0Fycm93ICYmICFpdGVtLmlzT3RoZXJDb25maWcpIHtcbiAgICAgICAgICAgIGFycm93ID0gdGhpcy5jcmVhdGVBcnJvd0luZGljYXRvcihlbCwgY29udGFpbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy52aXJ0dWFsTm9kZXNNYXAuc2V0KGlkLCB7IGNvbXBvbmVudDogcmVmLCBhcnJvdyB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLnZpcnR1YWxOb2Rlc01hcC5nZXQoaWQpO1xuICAgICAgICBpZiAoY2FjaGUpIHtcbiAgICAgICAgICBpZiAoY2FjaGUuY29tcG9uZW50KSBhcHBseUVsZW1lbnRTdHlsZShjYWNoZS5jb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudCwgZWwpO1xuICAgICAgICAgIGlmIChjYWNoZS5hcnJvdykge1xuICAgICAgICAgICAgY29uc3QgYXJyb3dTaXplID0gMTY7XG4gICAgICAgICAgICBjb25zdCBub2RlV2lkdGggPSBlbC5zcGVjaWZpY193aWR0aCA/PyAxNjU7XG4gICAgICAgICAgICBjb25zdCBub2RlSGVpZ2h0ID0gZWwuc3BlY2lmaWNfaGVpZ2h0ID8/IDQ4O1xuICAgICAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgICAgIGNhY2hlLmFycm93LmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIiR7YXJyb3dTaXplfVwiIGhlaWdodD1cIiR7YXJyb3dTaXplfVwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggNEwxNiA4TDggMTJaXCIgZmlsbD1cIiM5Y2EzYWZcIi8+XG4gICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsLnRyYW5zbGF0ZVggLSBhcnJvd1NpemV9cHhgO1xuICAgICAgICAgICAgICBjYWNoZS5hcnJvdy5zdHlsZS50b3AgPSBgJHtlbC50cmFuc2xhdGVZICsgbm9kZUhlaWdodCAvIDIgLSBhcnJvd1NpemUgLyAyfXB4YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhY2hlLmFycm93LmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIiR7YXJyb3dTaXplfVwiIGhlaWdodD1cIiR7YXJyb3dTaXplfVwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggMTZMNCAxMkgxMkw4IDE2WlwiIGZpbGw9XCIjOWNhM2FmXCIvPlxuICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgIGNhY2hlLmFycm93LnN0eWxlLmxlZnQgPSBgJHtlbC50cmFuc2xhdGVYICsgbm9kZVdpZHRoIC8gMiAtIGFycm93U2l6ZSAvIDJ9cHhgO1xuICAgICAgICAgICAgICBjYWNoZS5hcnJvdy5zdHlsZS50b3AgPSBgJHtlbC50cmFuc2xhdGVZIC0gYXJyb3dTaXplfXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudmlydHVhbEZsYXRCcmFuY2hlcy5mb3JFYWNoKChicmFuY2gsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB4ID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94O1xuICAgICAgY29uc3QgeSA9IGJyYW5jaC5zcGVjaWZpY19zdGFydF9icmFuY2hfeTtcbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICBpZiAoeCA8IHZwLnggLSBidWZmZXIgfHwgeCA+IHZwLnggKyB2cC53aWR0aCArIGJ1ZmZlciB8fCB5IDwgdnAueSAtIGJ1ZmZlciB8fCB5ID4gdnAueSArIHZwLmhlaWdodCArIGJ1ZmZlcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpZCA9ICdicmFuY2hfJyArIGluZGV4ICsgJ18nICsgTWF0aC5yb3VuZCh4KSArICdfJyArIE1hdGgucm91bmQoeSk7XG4gICAgICB2aXNpYmxlSWRzLmFkZChpZCk7XG5cbiAgICAgIGlmICghdGhpcy52aXJ0dWFsTm9kZXNNYXAuaGFzKGlkKSkge1xuICAgICAgICBjb25zdCBsYWJlbERpdiA9IHRoaXMuY3JlYXRlQnJhbmNoTGFiZWwoYnJhbmNoKTtcbiAgICAgICAgaWYgKGxhYmVsRGl2KSB0aGlzLnZpcnR1YWxOb2Rlc01hcC5zZXQoaWQsIHsgbGFiZWw6IGxhYmVsRGl2IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLnZpcnR1YWxOb2Rlc01hcC5nZXQoaWQpO1xuICAgICAgICBpZiAoY2FjaGU/LmxhYmVsKSB7XG4gICAgICAgICAgY29uc3QgbGFiZWxEaXYgPSBjYWNoZS5sYWJlbDtcbiAgICAgICAgICBjb25zdCBsYWJlbFJlY3QgPSBsYWJlbERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCBsYWJlbFcgPSBsYWJlbFJlY3Qud2lkdGggfHwgbGFiZWxEaXYub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgY29uc3QgbGFiZWxIID0gbGFiZWxSZWN0LmhlaWdodCB8fCBsYWJlbERpdi5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgICAgbGFiZWxEaXYuc3R5bGUubGVmdCA9IGAke3ggLSBsYWJlbFcgLyAyIC0gNH1weGA7XG4gICAgICAgICAgICBsYWJlbERpdi5zdHlsZS50b3AgPSBgJHt5IC0gbGFiZWxIIC8gMiArIDR9cHhgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYWJlbERpdi5zdHlsZS5sZWZ0ID0gYCR7eCArIDR9cHhgO1xuICAgICAgICAgICAgbGFiZWxEaXYuc3R5bGUudG9wID0gYCR7eSAtIGxhYmVsSCAvIDJ9cHhgOyAvLyBjZW50ZXIgb3ZlciB3aXJlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBBcnJheS5mcm9tKHRoaXMudmlydHVhbE5vZGVzTWFwLmVudHJpZXMoKSkuZm9yRWFjaCgoW2lkLCBjYWNoZV0pID0+IHtcbiAgICAgIGlmICghdmlzaWJsZUlkcy5oYXMoaWQpKSB7XG4gICAgICAgIGNhY2hlLmNvbXBvbmVudD8uZGVzdHJveSgpO1xuICAgICAgICBjYWNoZS5hcnJvdz8ucmVtb3ZlKCk7XG4gICAgICAgIGNhY2hlLmxhYmVsPy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy52aXJ0dWFsTm9kZXNNYXAuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgZWxlbWVudHMgdsOgIGJyYW5jaGVzIG3hu5l0IGPDoWNoIMSR4buHIHF1eVxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJFbGVtZW50c1JlY3Vyc2l2ZWx5KGVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBpc0ZpcnN0TGV2ZWwgPSB0cnVlLCBicmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpIHtcbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQudHJhbnNsYXRlWCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQudHJhbnNsYXRlWSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE1haW4gbm9kZTogY8OzIGFycm93IG7hur91IGtow7RuZyBwaOG6o2kgZWxlbWVudCDEkeG6p3UgdGnDqm4gY+G7p2EgbGV2ZWwgxJHhuqd1XG4gICAgICAgIGNvbnN0IHNob3VsZFNob3dBcnJvdyA9ICEoaXNGaXJzdExldmVsICYmIGluZGV4ID09PSAwKTtcbiAgICAgICAgdGhpcy5jcmVhdGVOb2RlKGVsZW1lbnQsIGJyYW5jaCwgc2hvdWxkU2hvd0Fycm93LCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbmRlciBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzIChub2RlcyBwaOG7pSkgLSBLSMOUTkcgY8OzIGFycm93XG4gICAgICBpZiAoZWxlbWVudC5ub2RlT3RoZXJDb25maWcgJiYgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNyZWF0ZU5vZGUoZWxlbWVudC5ub2RlT3RoZXJDb25maWcsIGJyYW5jaCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW5kZXIgYnJhbmNoZXMgbuG6v3UgY8OzXG4gICAgICBpZiAoZWxlbWVudC5icmFuY2hlcyAmJiBlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckVsZW1lbnRzUmVjdXJzaXZlbHkoYnJhbmNoLmVsZW1lbnRzLCBmYWxzZSwgYnJhbmNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWcgJiYgYnJhbmNoLm5vZGVPdGhlckNvbmZpZy50cmFuc2xhdGVYICE9PSB1bmRlZmluZWQgJiYgYnJhbmNoLm5vZGVPdGhlckNvbmZpZy50cmFuc2xhdGVZICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTm9kZShicmFuY2gubm9kZU90aGVyQ29uZmlnLCBicmFuY2gsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFThuqFvIG3hu5l0IG5vZGUgY29tcG9uZW50IMSR4buZbmdcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgY3JlYXRlTm9kZShlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoIHwgdW5kZWZpbmVkLCBzaG91bGRTaG93QXJyb3c6IGJvb2xlYW4sIGlzTm9kZU90aGVyQ29uZmlnOiBib29sZWFuKTogQ29tcG9uZW50UmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnQ2FudmFzKCk7XG4gICAgaWYgKCFjb25maWc/LnZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnVzZVZpcnR1YWxpemF0aW9uVGVtcGxhdGUpIHtcbiAgICAgIGlmIChjb25maWcubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHNob3VsZFNob3dBcnJvdyAmJiAhaXNOb2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUFycm93SW5kaWNhdG9yKGVsZW1lbnQsIGNvbmZpZy5ub2Rlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBpc05vZGVPdGhlckNvbmZpZyA/IGNvbmZpZy5ub2RlT3RoZXJDb25maWdDb21wb25lbnRUeXBlIDogY29uZmlnLm5vZGVDb21wb25lbnRUeXBlO1xuXG4gICAgaWYgKCFjb21wb25lbnRUeXBlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gY29uZmlnLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuICAgIGNvbnN0IGVsID0gY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2VsZW1lbnQnLCBlbGVtZW50KTtcbiAgICBpZiAoYnJhbmNoKSB7XG4gICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2JyYW5jaCcsIGJyYW5jaCk7XG4gICAgfVxuICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnb3JpZW50YXRpb24nLCB0aGlzLm9yaWVudGF0aW9uKCkpO1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2RpYWdyYW0tbm9kZS1keW5hbWljJyk7XG5cbiAgICBhcHBseUVsZW1lbnRTdHlsZShlbCwgZWxlbWVudCk7XG5cbiAgICBpZiAoY29uZmlnLm5vZGVzQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25maWcubm9kZXNDb250YWluZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbCk7XG5cbiAgICAgIGlmIChzaG91bGRTaG93QXJyb3cgJiYgIWlzTm9kZU90aGVyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQXJyb3dJbmRpY2F0b3IoZWxlbWVudCwgY29uZmlnLm5vZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50UmVmcy51cGRhdGUoKHJlZnMpID0+IFsuLi5yZWZzLCBjb21wb25lbnRSZWZdKTsgLy8gTMawdSByZWZlcmVuY2UgxJHhu4MgY2xlYW51cCBzYXVcblxuICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdOG6pXQgY+G6oyBub2RlcyDEkcOjIHThuqFvXG4gICAqL1xuICBjbGVhck5vZGVzKCkge1xuICAgIHRoaXMuY29tcG9uZW50UmVmcygpLmZvckVhY2goKHJlZikgPT4ge1xuICAgICAgcmVmLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuc2V0KFtdKTtcblxuICAgIEFycmF5LmZyb20odGhpcy52aXJ0dWFsTm9kZXNNYXAudmFsdWVzKCkpLmZvckVhY2goKGNhY2hlKSA9PiB7XG4gICAgICBjYWNoZS5jb21wb25lbnQ/LmRlc3Ryb3koKTtcbiAgICAgIGNhY2hlLmFycm93Py5yZW1vdmUoKTtcbiAgICAgIGNhY2hlLmxhYmVsPy5yZW1vdmUoKTtcbiAgICB9KTtcbiAgICB0aGlzLnZpcnR1YWxOb2Rlc01hcC5jbGVhcigpO1xuXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdDYW52YXMoKTtcbiAgICBjb25zdCBub2Rlc0NvbnRhaW5lciA9IGNvbmZpZz8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKG5vZGVzQ29udGFpbmVyKSB7XG4gICAgICBpZiAoIWNvbmZpZz8udXNlVmlydHVhbGl6YXRpb25UZW1wbGF0ZSkge1xuICAgICAgICBjb25zdCBkeW5hbWljTm9kZXMgPSBub2Rlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZGlhZ3JhbS1ub2RlLWR5bmFtaWMnKTtcbiAgICAgICAgZHluYW1pY05vZGVzLmZvckVhY2goKG5vZGU6IEVsZW1lbnQpID0+IG5vZGUucmVtb3ZlKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWxzID0gbm9kZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmJyYW5jaC1sYWJlbCcpO1xuICAgICAgbGFiZWxzLmZvckVhY2goKGxhYmVsOiBFbGVtZW50KSA9PiBsYWJlbC5yZW1vdmUoKSk7XG4gICAgICBjb25zdCBhcnJvd3MgPSBub2Rlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcubm9kZS1hcnJvdy1pbmRpY2F0b3InKTtcbiAgICAgIGFycm93cy5mb3JFYWNoKChhcnJvdzogRWxlbWVudCkgPT4gYXJyb3cucmVtb3ZlKCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBU4bqhbyBtxalpIHTDqm4gaW5kaWNhdG9yIGNo4buJIGjGsOG7m25nIHbDoG8gbm9kZS5cbiAgICogLSB2ZXJ0aWNhbDogICBtxalpIHTDqm4g4pa8IHBow61hIFRSw4pOIG5vZGUgIChsdeG7k25nIHRyw6puIOKGkiB4deG7kW5nKVxuICAgKiAtIGhvcml6b250YWw6IG3FqWkgdMOqbiDilrogcGjDrWEgVFLDgUkgbm9kZSAgKGx14buTbmcgdHLDoWkg4oaSIHBo4bqjaSlcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQXJyb3dJbmRpY2F0b3IoZWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBjb250YWluZXI6IEhUTUxFbGVtZW50LCApOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVsZW1lbnQudHJhbnNsYXRlWCA9PT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQudHJhbnNsYXRlWSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYXJyb3cuY2xhc3NOYW1lID0gJ25vZGUtYXJyb3ctaW5kaWNhdG9yJztcbiAgICBhcnJvdy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgYXJyb3cuc3R5bGUuekluZGV4ID0gJzEnO1xuICAgIGFycm93LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cbiAgICBjb25zdCBhcnJvd1NpemUgPSAxNjtcbiAgICBjb25zdCBub2RlV2lkdGggPSBlbGVtZW50LnNwZWNpZmljX3dpZHRoID8/IDA7XG4gICAgY29uc3Qgbm9kZUhlaWdodCA9IGVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDA7XG5cbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIC8vIE3FqWkgdMOqbiDilrog4bufIGLDqm4gVFLDgUkgbm9kZSwgY8SDbiBnaeG7r2EgdGhlbyBjaGnhu4F1IGNhb1xuICAgICAgYXJyb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICA8c3ZnIHdpZHRoPVwiJHthcnJvd1NpemV9XCIgaGVpZ2h0PVwiJHthcnJvd1NpemV9XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNOCA0TDE2IDhMOCAxMlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICBgO1xuICAgICAgYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWCAtIGFycm93U2l6ZX1weGA7XG4gICAgICBhcnJvdy5zdHlsZS50b3AgPSBgJHtlbGVtZW50LnRyYW5zbGF0ZVkgKyBub2RlSGVpZ2h0IC8gMiAtIGFycm93U2l6ZSAvIDJ9cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNxalpIHTDqm4g4pa8IOG7nyBwaMOtYSBUUsOKTiBub2RlLCBjxINuIGdp4buvYSB0aGVvIGNoaeG7gXUgcuG7mW5nXG4gICAgICBhcnJvdy5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxzdmcgd2lkdGg9XCIke2Fycm93U2l6ZX1cIiBoZWlnaHQ9XCIke2Fycm93U2l6ZX1cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk04IDE2TDQgMTJIMTJMOCAxNlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICBgO1xuICAgICAgYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWCArIG5vZGVXaWR0aCAvIDIgLSBhcnJvd1NpemUgLyAyfXB4YDtcbiAgICAgIGFycm93LnN0eWxlLnRvcCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWSAtIGFycm93U2l6ZX1weGA7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGFycm93KTtcbiAgICByZXR1cm4gYXJyb3c7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGJyYW5jaCBsYWJlbHMgKHRleHQgYW5ub3RhdGlvbnMgb24gYnJhbmNoZXMpXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJyYW5jaExhYmVscyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgKSB7XG4gICAgY29uc3Qgc3ZnQ29udGFpbmVyID0gdGhpcy5jb25maWdDYW52YXMoKT8uc3ZnQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghc3ZnQ29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuYnJhbmNoZXMgJiYgZWxlbWVudC5icmFuY2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3ggIT09IHVuZGVmaW5lZCAmJiBicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCFicmFuY2gubGFiZWwpIHtcbiAgICAgICAgICAgICAgYnJhbmNoLmxhYmVsID0gYE5ow6FuaCAke2luZGV4ICsgMX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jcmVhdGVCcmFuY2hMYWJlbChicmFuY2gpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChicmFuY2guZWxlbWVudHMgJiYgYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQnJhbmNoTGFiZWxzKGJyYW5jaC5lbGVtZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnJhbmNoTGFiZWwoYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsICk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0NhbnZhcygpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbmZpZz8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBsYWJlbERpdi5jbGFzc05hbWUgPSAnYnJhbmNoLWxhYmVsJztcbiAgICBsYWJlbERpdi50ZXh0Q29udGVudCA9IGJyYW5jaC5sYWJlbCB8fCAnJztcblxuICAgIGxhYmVsRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBsYWJlbERpdi5zdHlsZS5wYWRkaW5nID0gJzJweCA3cHgnO1xuICAgIGxhYmVsRGl2LnN0eWxlLmJvcmRlclJhZGl1cyA9ICcxMHB4JztcbiAgICBsYWJlbERpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBicmFuY2gubGFiZWxCZ0NvbG9yIHx8ICcjZjNmNGY2JztcbiAgICBsYWJlbERpdi5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICBsYWJlbERpdi5zdHlsZS5mb250RmFtaWx5ID0gJ3N5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZic7XG4gICAgbGFiZWxEaXYuc3R5bGUuY29sb3IgPSAnIzM3NDE1MSc7XG4gICAgbGFiZWxEaXYuc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xuICAgIGxhYmVsRGl2LnN0eWxlLnpJbmRleCA9ICcyJztcbiAgICBsYWJlbERpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsRGl2KTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGJyYW5jaC5zcGVjaWZpY19zdGFydF9icmFuY2hfeCA/PyAwO1xuICAgIGNvbnN0IHN0YXJ0WSA9IGJyYW5jaC5zcGVjaWZpY19zdGFydF9icmFuY2hfeSA/PyAwO1xuICAgIGNvbnN0IGxhYmVsVyA9IGxhYmVsRGl2Lm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IGxhYmVsSCA9IGxhYmVsRGl2Lm9mZnNldEhlaWdodCB8fCAxODtcblxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgLyoqXG4gICAgICAgKiBIb3Jpem9udGFsOiBsYWJlbCBu4bqxbSBUUsOKTiDEkcaw4budbmcgbGluZSBu4bqxbSBuZ2FuZy5cbiAgICAgICAqIHNwZWNpZmljX3N0YXJ0X2JyYW5jaCA9IMSRaeG7g20gYuG6r3QgxJHhuqd1IMSRb+G6oW4gdGjhurNuZyBuZ2FuZyDEkeG6v24gZWxlbWVudC5cbiAgICAgICAqIMSQ4bq3dCBsYWJlbCB04buLbmggdGnhur9uIHNhbmcgcGjhuqNpIDhweCB04burIG5nb+G6t3QgbmjDoW5oLCB2w6AgY8SDbiBnaeG7r2EgZMOieS5cbiAgICAgICAqL1xuICAgICAgbGFiZWxEaXYuc3R5bGUubGVmdCA9IGAke3N0YXJ0WCArIDR9cHhgO1xuICAgICAgbGFiZWxEaXYuc3R5bGUudG9wID0gYCR7c3RhcnRZIC0gbGFiZWxIIC8gMn1weGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogVmVydGljYWw6IGxhYmVsIG7hurFtIELDik4gVFLDgUkgxJHGsOG7nW5nIG5nYW5nLCBjxINuIGdp4buvYSB0aGVvIFkuXG4gICAgICAgKiBzcGVjaWZpY19zdGFydF9icmFuY2ggPSDEkWnhu4NtIMSR4bqndSDEkW/huqFuIHRo4bqzbmcgxJHhur9uIGVsZW1lbnQgKHNhdSBjdXJ2ZSkuXG4gICAgICAgKi9cbiAgICAgIGxhYmVsRGl2LnN0eWxlLmxlZnQgPSBgJHtzdGFydFggLSBsYWJlbFcgLyAyIC0gNH1weGA7XG4gICAgICBsYWJlbERpdi5zdHlsZS50b3AgPSBgJHtzdGFydFkgLSBsYWJlbEggLyAyICsgNH1weGA7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbERpdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgZOG6pXUgXCIrXCIgdOG6oWkgbeG7l2kgduG7iyB0csOtIGPDsyB0aOG7gyB0aOG6oyBlbGVtZW50IHThu6sgc2lkZWJhci5cbiAgICogU2VydmljZSB04buxIHThuqFvIERPTSBlbGVtZW50cyB2w6AgaW5qZWN0IHbDoG8gbm9kZXNDb250YWluZXIuXG4gICAqIEBwYXJhbSBmbGF0RWxlbWVudHMgRGFuaCBzw6FjaCBmbGF0IGVsZW1lbnRzIMSRw6MgdMOtbmggdG/DoW4gduG7iyB0csOtXG4gICAqIEBwYXJhbSBvbkRyb3AgQ2FsbGJhY2sga2hpIG5nxrDhu51pIGTDuW5nIHRo4bqjIGVsZW1lbnQgdsOgbyBt4buZdCBcIitcIlxuICAgKiBAcGFyYW0gY2FuRHJvcEZuICh0w7l5IGNo4buNbikgRnVuY3Rpb24ga2nhu4NtIHRyYSDEkWnhu4F1IGtp4buHbiBoaeG7g24gdGjhu4sgZHJvcCB6b25lLlxuICAgKiBgYGBcbiAgICovXG4gIHJlbmRlckRyb3Bab25lcyhcbiAgICBmbGF0RWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLFxuICAgIG9uRHJvcDogKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIGRyYWdEYXRhOiBzdHJpbmcpID0+IHZvaWQsXG4gICAgY2FuRHJvcEZuOiBURHJvcFpvbmVDYW5Ecm9wRm4sXG4gICAgcnVsZUNvbm5lY3RhYmxlRWxlbWVudHM6IEFycmF5PElSdWxlQ29ubmVjdGFibGU+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEcm9wWm9uZXMoKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbmZpZ0NhbnZhcygpPy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgZmxhdEVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICBpZiAoZWwuY29kZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfRVhJVCkgcmV0dXJuO1xuXG4gICAgICBpZiAoZWwuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVykge1xuICAgICAgICBlbC5icmFuY2hlcz8uZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhbkRyb3BGbih1bmRlZmluZWQsIGVsLCBicmFuY2gsIHJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzKSkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgdG9wID0gdGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyB0aGlzLmNhbGNEcm9wWm9uZVRvcEJyYW5jaEgoZWwsIGJyYW5jaCkgOiB0aGlzLmNhbGNEcm9wWm9uZVRvcEJyYW5jaChlbCwgYnJhbmNoKTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyB0aGlzLmNhbGNEcm9wWm9uZUxlZnRCcmFuY2hIKGVsLCBicmFuY2gpIDogdGhpcy5jYWxjRHJvcFpvbmVMZWZ0QnJhbmNoKGVsLCBicmFuY2gpO1xuICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcFpvbmVFbChjb250YWluZXIsIHRvcCwgbGVmdCwgZWwsIGJyYW5jaCwgb25Ecm9wKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWNhbkRyb3BGbih1bmRlZmluZWQsIGVsLCB1bmRlZmluZWQsIHJ1bGVDb25uZWN0YWJsZUVsZW1lbnRzKSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVUb3BOb2RlSChlbCkgOiB0aGlzLmNhbGNEcm9wWm9uZVRvcE5vZGUoZWwpO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyB0aGlzLmNhbGNEcm9wWm9uZUxlZnROb2RlSChlbCkgOiB0aGlzLmNhbGNEcm9wWm9uZUxlZnROb2RlKGVsKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEcm9wWm9uZUVsKGNvbnRhaW5lciwgdG9wLCBsZWZ0LCBlbCwgdW5kZWZpbmVkLCBvbkRyb3ApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFjDs2EgdOG6pXQgY+G6oyBkcm9wIHpvbmUgXCIrXCIga2jhu49pIERPTSAqL1xuICBjbGVhckRyb3Bab25lcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbmZpZ0NhbnZhcygpPy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZGlhZ3JhbS1kcm9wLXpvbmUnKS5mb3JFYWNoKChlbCkgPT4gZWwucmVtb3ZlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEcm9wWm9uZUVsKFxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gICAgdG9wOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCxcbiAgICBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZCxcbiAgICBvbkRyb3A6IChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoIHwgdW5kZWZpbmVkLCBkcmFnRGF0YTogc3RyaW5nKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGluZGljYXRvclN0eWxlOiBJRHJvcFpvbmVJbmRpY2F0b3JTdHlsZSB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnQ2FudmFzKCk/LmRyb3Bab25lU3R5bGU7XG4gICAgY29uc3QgUkVDVF9XID0gZWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLldJRFRIX0VMRU1FTlRfREVGQVVMVDtcbiAgICBjb25zdCBSRUNUX0ggPSBlbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLkhFSUdIVF9FTEVNRU5UX0RFRkFVTFQ7XG5cbiAgICAvLyBUw6JtIGPhu6dhIG7DunQgdHLDsm5cbiAgICBjb25zdCBjZW50ZXJYID0gbGVmdCArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSB0b3AgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcblxuICAgIC8vIEhpdCB6b25lIHbDtCBow6xuaDogcuG7mW5nIGjGoW4gcmVjdGFuZ2xlIG3hu5l0IGtob+G6o24gcGFkZGluZyDEkeG7gyBi4bqvdCBkcmFnIHPhu5ttIGjGoW5cbiAgICBjb25zdCBISVRfUEFEID0gMjA7XG4gICAgY29uc3QgSElUX1cgPSBSRUNUX1cgKyBISVRfUEFEICogMjtcbiAgICBjb25zdCBISVRfSCA9IFJFQ1RfSCArIEhJVF9QQUQgKiAyO1xuICAgIGNvbnN0IGhpdExlZnQgPSBjZW50ZXJYIC0gSElUX1cgLyAyO1xuICAgIGNvbnN0IGhpdFRvcCA9IGNlbnRlclkgLSBISVRfSCAvIDI7XG5cbiAgICAvLyDilIDilIAgSGl0IHpvbmUgKHdyYXBwZXIgdsO0IGjDrG5oLCB2w7luZyBuaOG6rW4gZHJhZyBy4buZbmcpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIGNvbnN0IGhpdFpvbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBoaXRab25lLmNsYXNzTmFtZSA9ICdkaWFncmFtLWRyb3Atem9uZSc7XG4gICAgaGl0Wm9uZS5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAke2hpdFRvcH1weDtcbiAgICAgIGxlZnQ6ICR7aGl0TGVmdH1weDtcbiAgICAgIHotaW5kZXg6IDk7XG4gICAgICB3aWR0aDogJHtISVRfV31weDtcbiAgICAgIGhlaWdodDogJHtISVRfSH1weDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBgO1xuXG4gICAgLy8g4pSA4pSAIEluZGljYXRvciAoY29uIGLDqm4gdHJvbmcsIHBo4bqnbiBoaeG7g24gdGjhu4spIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIGNvbnN0IGluZGljYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGluZGljYXRvci5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnOyAvLyB0csOhbmggdHJhbmggY2jhuqVwIGV2ZW50IHbhu5tpIGhpdFpvbmVcblxuICAgIC8vIFbhu4sgdHLDrSBkb3QgdHJvbmcgaGl0Wm9uZSAoY8SDbiBnaeG7r2EgaGl0Wm9uZSlcbiAgICBjb25zdCBkb3RPZmZzZXRMZWZ0ID0gSElUX1cgLyAyIC0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUiAvIDI7XG4gICAgY29uc3QgZG90T2Zmc2V0VG9wID0gSElUX0ggLyAyIC0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUiAvIDI7XG5cbiAgICAvLyBW4buLIHRyw60gcmVjdGFuZ2xlIHRyb25nIGhpdFpvbmUgKGPEg24gZ2nhu69hIGhpdFpvbmUpXG4gICAgY29uc3QgcmVjdE9mZnNldExlZnQgPSBISVRfUEFEO1xuICAgIGNvbnN0IHJlY3RPZmZzZXRUb3AgPSBISVRfSCAvIDIgLSBSRUNUX0ggLyAyO1xuXG4gICAgY29uc3QgYXBwbHlEb3RTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBpbmRpY2F0b3JTdHlsZTtcbiAgICAgIGNvbnN0IHNpemUgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgICAgY29uc3QgYmcgPSBzPy5iYWNrZ3JvdW5kQ29sb3IgPz8gJyMzYjgyZjYnO1xuICAgICAgY29uc3QgaWNvbkNvbG9yID0gcz8uaWNvbkNvbG9yID8/ICcjZmZmZmZmJztcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBzPy5vcGFjaXR5ID8/IDAuOTU7XG4gICAgICBjb25zdCBib3JkZXJSYWRpdXMgPSBzPy5ib3JkZXJSYWRpdXMgPz8gJzUwJSc7XG5cbiAgICAgIHNldFN0eWxlc0VsZW1lbnQoaW5kaWNhdG9yLCB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICB0b3A6IGAke2RvdE9mZnNldFRvcH1weGAsXG4gICAgICAgIGxlZnQ6IGAke2RvdE9mZnNldExlZnR9cHhgLFxuICAgICAgICB3aWR0aDogYCR7c2l6ZX1weGAsXG4gICAgICAgIGhlaWdodDogYCR7c2l6ZX1weGAsXG4gICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjE1cyBlYXNlJyxcbiAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHM/LnJlbmRlckluZGljYXRvcikge1xuICAgICAgICBpbmRpY2F0b3IuaW5uZXJIVE1MID0gcy5yZW5kZXJJbmRpY2F0b3Ioc2l6ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmRpY2F0b3IuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJcbiAgICAgICAgICAgIHdpZHRoOiAke3NpemV9cHg7XG4gICAgICAgICAgICBoZWlnaHQ6ICR7c2l6ZX1weDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Ymd9O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogJHtib3JkZXJSYWRpdXN9O1xuICAgICAgICAgICAgb3BhY2l0eTogJHtvcGFjaXR5fTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICBcIj48aSBjbGFzcz1cImxpYnMtdWktaWNvbi1hZGQgYmVmb3JlOnRleHQtWyR7aWNvbkNvbG9yfV1cIj48L2k+PC9kaXY+XG4gICAgICAgIGA7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFwcGx5UmVjdFN0eWxlID0gKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IGluZGljYXRvclN0eWxlO1xuICAgICAgY29uc3QgaG92ZXJCZyA9IHM/LmhvdmVyQmFja2dyb3VuZENvbG9yID8/ICcjZWVmNGZmJztcbiAgICAgIGNvbnN0IGhvdmVyQm9yZGVyID0gcz8uaG92ZXJCb3JkZXJDb2xvciA/PyAncmdiYSg1OSwgMTMwLCAyNDYsIDAuNyknO1xuICAgICAgY29uc3QgaG92ZXJCb3JkZXJTdHlsZSA9IHM/LmhvdmVyQm9yZGVyU3R5bGUgPz8gJ2Rhc2hlZCc7XG4gICAgICBjb25zdCBob3ZlclJhZGl1cyA9IHM/LmhvdmVyQm9yZGVyUmFkaXVzID8/IDEwO1xuXG4gICAgICBzZXRTdHlsZXNFbGVtZW50KGluZGljYXRvciwge1xuICAgICAgICB0b3A6IGAke3JlY3RPZmZzZXRUb3B9cHhgLFxuICAgICAgICBsZWZ0OiBgJHtyZWN0T2Zmc2V0TGVmdH1weGAsXG4gICAgICAgIHdpZHRoOiBgJHtSRUNUX1d9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke1JFQ1RfSH1weGAsXG4gICAgICAgIGJvcmRlclJhZGl1czogYCR7aG92ZXJSYWRpdXN9cHhgLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGhvdmVyQmcsXG4gICAgICAgIGJvcmRlcjogYDJweCAke2hvdmVyQm9yZGVyU3R5bGV9ICR7aG92ZXJCb3JkZXJ9YCxcbiAgICAgICAgdHJhbnNpdGlvbjogJ2FsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE7hur91IGPDsyBow6BtIHJlbmRlciDEkeG7mW5nIGNobyB0cuG6oW5nIHRow6FpIGhvdmVyIOKAlCBn4buNaSBuw7NcbiAgICAgIGluZGljYXRvci5pbm5lckhUTUwgPSBzPy5yZW5kZXJIb3ZlckluZGljYXRvciA/IHMucmVuZGVySG92ZXJJbmRpY2F0b3IoKSA6ICcnO1xuICAgIH07XG5cbiAgICBhcHBseURvdFN0eWxlKCk7XG4gICAgaGl0Wm9uZS5hcHBlbmRDaGlsZChpbmRpY2F0b3IpO1xuXG4gICAgaGl0Wm9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBhcHBseVJlY3RTdHlsZSgpO1xuICAgIH0pO1xuXG4gICAgaGl0Wm9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChlLmRhdGFUcmFuc2ZlcikgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICB9KTtcblxuICAgIGhpdFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgaWYgKCFoaXRab25lLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICBhcHBseURvdFN0eWxlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBoaXRab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgcmF3ID0gZS5kYXRhVHJhbnNmZXI/LmdldERhdGEoJ2FwcGxpY2F0aW9uL2pzb24nKSA/PyAnJztcbiAgICAgIG9uRHJvcChlbGVtZW50LCBicmFuY2gsIHJhdyk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaGl0Wm9uZSk7XG4gIH1cblxuICAvLyDilIDilIAgVmVydGljYWwgZHJvcCB6b25lIGhlbHBlcnMgKGV4aXN0aW5nKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcHJpdmF0ZSBjYWxjRHJvcFpvbmVUb3BCcmFuY2goZWw6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpOiBudW1iZXIge1xuICAgIGNvbnN0IG9jID0gYnJhbmNoLm5vZGVPdGhlckNvbmZpZztcbiAgICBpZiAob2MpIHJldHVybiAob2Muc3BlY2lmaWNfeSA/PyAwKSArIChvYy5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyAxMDtcbiAgICByZXR1cm4gKGJyYW5jaC5zcGVjaWZpY19zdGFydF9icmFuY2hfeSA/PyAwKSArIDMwO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjRHJvcFpvbmVMZWZ0QnJhbmNoKGVsOiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoKTogbnVtYmVyIHtcbiAgICBjb25zdCBmaXJzdEVsID0gYnJhbmNoLmVsZW1lbnRzPy5bMF07XG4gICAgaWYgKGZpcnN0RWw/LnRyYW5zbGF0ZVggIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpcnN0RWwudHJhbnNsYXRlWCArIChmaXJzdEVsLnNwZWNpZmljX3dpZHRoID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxUKSAvIDIgLSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgICByZXR1cm4gKGVsLnRyYW5zbGF0ZVggPz8gMCkgKyAoZWwuc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XSURUSF9FTEVNRU5UX0RFRkFVTFQpIC8gMiAtIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjRHJvcFpvbmVUb3BOb2RlKGVsOiBJRGlhZ3JhbUVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IG9jID0gZWwubm9kZU90aGVyQ29uZmlnO1xuICAgIGlmIChvYykgcmV0dXJuIChvYy5zcGVjaWZpY195ID8/IDApICsgKG9jLnNwZWNpZmljX2hlaWdodCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfV0FJVF9ERUZBVUxUKSArIDEwO1xuICAgIHJldHVybiAoZWwudHJhbnNsYXRlWSA/PyAwKSArIChlbC5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5IRUlHSFRfRUxFTUVOVF9ERUZBVUxUKSArIDEwO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjRHJvcFpvbmVMZWZ0Tm9kZShlbDogSURpYWdyYW1FbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gKGVsLnRyYW5zbGF0ZVggPz8gMCkgKyAoZWwuc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XSURUSF9FTEVNRU5UX0RFRkFVTFQpIC8gMiAtIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuICB9XG5cbiAgLy8g4pSA4pSAIEhvcml6b250YWwgZHJvcCB6b25lIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIG5vZGU6IFwiK1wiIG7hurFtIGdp4buvYSDEkcaw4budbmcgbGluZSBu4buRaSAyIG5vZGUg4oCUIGPEg24gZ2nhu69hIFkgY+G7p2EgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lVG9wTm9kZUgoZWw6IElEaWFncmFtRWxlbWVudCk6IG51bWJlciB7XG4gICAgY29uc3QgRCA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVI7XG4gICAgY29uc3QgY2VudGVyWSA9IChlbC50cmFuc2xhdGVZID8/IDApICsgKGVsLnNwZWNpZmljX2hlaWdodCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLkhFSUdIVF9FTEVNRU5UX0RFRkFVTFQpIC8gMjtcbiAgICByZXR1cm4gY2VudGVyWSAtIEQgLyAyO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjRHJvcFpvbmVMZWZ0Tm9kZUgoZWw6IElEaWFncmFtRWxlbWVudCk6IG51bWJlciB7XG4gICAgY29uc3QgRCA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVI7XG4gICAgY29uc3QgTSA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVDtcbiAgICBjb25zdCBvYyA9IGVsLm5vZGVPdGhlckNvbmZpZztcblxuICAgIGlmIChvYykge1xuICAgICAgY29uc3QgcmlnaHQgPSAob2Muc3BlY2lmaWNfeCA/PyAwKSArIChvYy5zcGVjaWZpY193aWR0aCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfV0FJVF9ERUZBVUxUKTtcbiAgICAgIHJldHVybiByaWdodCArIE0gLyAyIC0gRCAvIDI7XG4gICAgfVxuXG4gICAgY29uc3QgcmlnaHQgPSAoZWwudHJhbnNsYXRlWCA/PyAwKSArIChlbC5zcGVjaWZpY193aWR0aCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLldJRFRIX0VMRU1FTlRfREVGQVVMVCk7XG4gICAgLy8gTWlkcG9pbnQgY+G7p2Ega2hv4bqjbmcgdHLhu5FuZyBnaeG7r2Egbm9kZSB2w6Agbm9kZSB0aeG6v3AgdGhlbyAoZ2FwID0gRUxFTUVOVF9NQVJHSU5fREVGQVVMVClcbiAgICByZXR1cm4gcmlnaHQgKyBNIC8gMiAtIEQgLyAyO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvcml6b250YWwgYnJhbmNoOiBcIitcIiBu4bqxbSBjxINuIGdp4buvYSBZIGPhu6dhIGJyYW5jaCBsaW5lLCBzYXUgcGjhuqduIHThu60gY3Xhu5FpIHRyb25nIG5ow6FuaC5cbiAgICovXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lVG9wQnJhbmNoSChlbDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCk6IG51bWJlciB7XG4gICAgY29uc3QgRCA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVI7XG4gICAgLy8gc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3kgPSB0w6JtIFkgY+G7p2EgxJHGsOG7nW5nIG5ow6FuaFxuICAgIGNvbnN0IGNlbnRlclkgPSBicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3kgPz8gMDtcbiAgICByZXR1cm4gY2VudGVyWSAtIEQgLyAyO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjRHJvcFpvbmVMZWZ0QnJhbmNoSChlbDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCk6IG51bWJlciB7XG4gICAgY29uc3QgRCA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVI7XG4gICAgY29uc3QgTSA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVDtcblxuICAgIC8vIFNhdSBub2RlT3RoZXJDb25maWcgY+G7p2EgbmjDoW5oIChj4buVIG5ow6FuaClcbiAgICBjb25zdCBvYyA9IGJyYW5jaC5ub2RlT3RoZXJDb25maWc7XG4gICAgaWYgKG9jPy5zcGVjaWZpY194ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAob2Muc3BlY2lmaWNfeCA/PyAwKSArIChvYy5zcGVjaWZpY193aWR0aCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfV0FJVF9ERUZBVUxUKSArIE0gLyAyIC0gRCAvIDI7XG4gICAgfVxuICAgIC8vIE7hur91IG5ow6FuaCBraMO0bmcgY8OzIG5vZGVPdGhlckNvbmZpZzogxJHhurd0IHNhdSDEkWnhu4NtIHLhur0gbmjDoW5oXG4gICAgcmV0dXJuIChicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3ggPz8gMCkgKyBNIC8gMiAtIEQgLyAyO1xuICB9XG59XG4iXX0=
720
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS1kcmF3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvZGlhZ3JhbS1kcmF3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS2xELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2pILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOztBQUVoRyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQWdCO0lBQ3pDLDZDQUE2QyxFQUFFLEVBQUU7SUFDakQsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQiw2QkFBNkIsRUFBRSxFQUFFO0lBQ2pDLHFDQUFxQyxFQUFFLEVBQUU7SUFDekMsOEJBQThCLEVBQUUsR0FBRztJQUNuQyxvQkFBb0IsRUFBRSxFQUFFO0lBQ3hCLHdCQUF3QixFQUFFLFFBQVE7SUFDbEMsd0JBQXdCLEVBQUUsR0FBRztJQUM3Qiw4Q0FBOEMsRUFBRSxFQUFFO0lBRWxELGdCQUFnQixFQUFFLEVBQUU7SUFDcEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QiwwQkFBMEIsRUFBRSxDQUFDO0lBRTdCLGlCQUFpQixFQUFFLE1BQU07SUFDekIscUJBQXFCLEVBQUUsVUFBVTtJQUNqQyxxQkFBcUIsRUFBRSxHQUFHO0lBQzFCLHNCQUFzQixFQUFFLEVBQUU7SUFFMUIsaUJBQWlCLEVBQUUs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LGlCQUFpQixDQUFDO1FBQ25ELE1BQU0sQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsc0JBQXNCLENBQUM7UUFFeEQsMkNBQTJDO1FBQzNDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbEMsSUFBSSxFQUFFLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ILENBQUM7UUFDRCw0REFBNEQ7UUFDNUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0QsQ0FBQzt3R0E5dUJVLHdCQUF3Qjs0R0FBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSURyYXdMaW5lRGF0YUlucHV0IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcmF3LWxpbmUnO1xuaW1wb3J0IHsgc2V0U3R5bGVzRWxlbWVudCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IElSdWxlQ29ubmVjdGFibGUsIFREcm9wWm9uZUNhbkRyb3BGbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9jYW52YXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEYXRhRGlhZ3JhbUNvbmZpZ1N2ZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb29yZGluYXRlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNhbnZhc0NvbmZpZywgSUN1c3RvbUNhbnZhc0NvbmZpZywgSURpYWdyYW1FbGVtZW50LCBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIElEcm9wWm9uZUluZGljYXRvclN0eWxlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2RpYWdyYW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IElOYXZpZ2F0aW9uTGluZVN0eWxlQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL25hdmlnYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwgfSBmcm9tICcuL3V0aWxzL2NhbGN1bGF0b3ItZWxlbWVudC51dGlsJztcbmltcG9ydCB7IGFwcGx5RWxlbWVudFN0eWxlLCBzZXRBdHRyaWJ1dGVTdmdBbmRBcHBlbmQgfSBmcm9tICcuL3V0aWxzL2RpYWdyYW0udXRpbCc7XG5pbXBvcnQgeyBNb0xpYkRpYWdyYW1Ib3Jpem9udGFsQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbCB9IGZyb20gJy4vdXRpbHMvaG9yaXpvbnRhbC9jYWxjdWxhdG9yLWNvb3JkaW5hdGVzLnV0aWwnO1xuaW1wb3J0IHsgTGlic1VpRGlhZ3JhbURyYXdOYXZpZ2F0aW9uVXRpbCB9IGZyb20gJy4vdXRpbHMvbmF2aWdhdGlvbi9idWlsZC1uYXZpZ2F0aW9uLWRhdGEudXRpbCc7XG5cbmNvbnN0IGNhbnZhc0NvbmZpZyA9IHNpZ25hbDxJQ2FudmFzQ29uZmlnPih7XG4gIEVMRU1FTlRfV0lEVEhfREVGQVVMVF9CUkFOQ0hfV0hFTl9OT1RfRUxFTUVOVDogNjAsXG4gIEVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ6IDYwLFxuICBFTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSDogMTYsXG4gIEVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQ6IDYwLFxuICBERUZBVUxUX0JSQU5DSF9XSEVOX05PX0VMRU1FTlQ6IDEwMCxcbiAgRUxFTUVOVF9IRUlHSFRfQ1VSVkU6IDEwLFxuICBFTEVNRU5UX1NWR19TVFJPS0VfQ09MT1I6ICc5Y2EyYWQnLFxuICBFTEVNRU5UX1NWR19TVFJPS0VfV0lEVEg6ICcxJyxcbiAgRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0hfVE9fRUxFTUVOVF9GSVJTVDogNzgsXG5cbiAgRElTVEFOQ0VfVE9fV0FJVDogMzAsXG4gIFdBSVRfVE9fRUxFTUVOVDogNTAsXG4gIEVMRU1FTlRfV0FJVF9ERUZBVUxUOiAyOCxcbiAgRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU6IDQsXG5cbiAgVFlQRV9FTEVNRU5UX0VYSVQ6ICdFWElUJyxcbiAgVFlQRV9FTEVNRU5UX1dPUktGTE9XOiAnV09SS0ZMT1cnLFxuICBXSURUSF9FTEVNRU5UX0RFRkFVTFQ6IDE2NSxcbiAgSEVJR0hUX0VMRU1FTlRfREVGQVVMVDogNDgsXG5cbiAgQUREX0lDT05fRElBTUVURVI6IDI0LFxufSk7XG5cbmV4cG9ydCBjb25zdCBjYW52YXNDb25maWdSZWFkb25seSA9IGNhbnZhc0NvbmZpZy5hc1JlYWRvbmx5KCk7XG5leHBvcnQgY29uc3Qgc3RvcmVEYXRhRGVmYXVsdCA9IHtcbiAgcG9zaXRpb25NYXhMZWZ0OiAwLFxuICBwb3NpdGlvbk1heFRvcDogMCxcbiAgd2lkdGhIZWlnaHRTdmdDYW52YXM6IHsgaGVpZ2h0U3ZnOiB3aW5kb3cuaW5uZXJIZWlnaHQsIHdpZHRoU3ZnOiB3aW5kb3cuaW5uZXJXaWR0aCB9LFxufTtcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlEaWFncmFtRHJhd1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ0NhbnZhcyA9IHNpZ25hbDxJQ3VzdG9tQ2FudmFzQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBvcmllbnRhdGlvbiA9IHNpZ25hbDwndmVydGljYWwnIHwgJ2hvcml6b250YWwnPigndmVydGljYWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50U3ZnID0gc2lnbmFsPFNWR1BhdGhFbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF0dHJpYnV0ZVN2Z0QgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50UmVmcyA9IHNpZ25hbDxDb21wb25lbnRSZWY8YW55PltdPihbXSk7XG5cbiAgLy8gVmlydHVhbGl6YXRpb24gVHJhY2tpbmdcbiAgcHJpdmF0ZSB2aXJ0dWFsVmlld3BvcnQ/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9O1xuICBwcml2YXRlIHZpcnR1YWxGbGF0RWxlbWVudHM6IHsgZWxlbWVudDogSURpYWdyYW1FbGVtZW50OyBicmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2g7IHNob3VsZFNob3dBcnJvdzogYm9vbGVhbjsgaXNPdGhlckNvbmZpZzogYm9vbGVhbjsgcGFyZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfVtdID0gW107XG4gIHByaXZhdGUgdmlydHVhbEZsYXRCcmFuY2hlczogSURpYWdyYW1FbGVtZW50QnJhbmNoW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSB2aXJ0dWFsTm9kZXNNYXAgPSBuZXcgTWFwPHN0cmluZywgeyBjb21wb25lbnQ/OiBDb21wb25lbnRSZWY8YW55PjsgYXJyb3c/OiBIVE1MRWxlbWVudDsgbGFiZWw/OiBIVE1MRWxlbWVudCB9PigpO1xuXG4gIHB1YmxpYyB1cGRhdGVWaWV3cG9ydCh2cDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSkge1xuICAgIHRoaXMudmlydHVhbFZpZXdwb3J0ID0gdnA7XG4gICAgaWYgKHRoaXMuY29uZmlnQ2FudmFzKCk/LnVzZVZpcnR1YWxpemF0aW9uVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMuYXBwbHlWaXJ0dWFsaXphdGlvbkRpZmYoKTtcbiAgICB9XG4gIH1cblxuICBzZXQgc2V0Q29uZmlnKGNvbmZpZzogSUN1c3RvbUNhbnZhc0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnQ2FudmFzLnNldChjb25maWcpO1xuICB9XG5cbiAgc2V0IHNldENvbmZpZ0NhbnZhcyhjb25maWc6IFBhcnRpYWw8SUNhbnZhc0NvbmZpZz4pIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhbnZhc0NvbmZpZy51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIC4uLmNvbmZpZyB9KSk7XG4gIH1cblxuICBjb25maWdYWUVsZW1lbnRzKGVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCB1cGRhdGVTVkc/OiBib29sZWFuLCBwb3NpdGlvblg/OiBudW1iZXIpIHtcbiAgICBjb25zdCBzdG9yZURhdGEgPSB0aGlzLmNvbmZpZ0NhbnZhcygpPy5zdG9yZURhdGFEZWZpbmUgPz8gc3RvcmVEYXRhRGVmYXVsdDtcbiAgICBjb25zdCBtYXhMZWZ0T3JpZ2luID0gc3RvcmVEYXRhLnBvc2l0aW9uTWF4TGVmdDtcbiAgICBjb25zdCBtYXhUb3BPcmlnaW4gPSBzdG9yZURhdGEucG9zaXRpb25NYXhUb3AgPz8gMDtcblxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgTW9MaWJEaWFncmFtSG9yaXpvbnRhbENhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhlbGVtZW50cywgc3RvcmVEYXRhLCBwb3NpdGlvblgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBNb0xpYkRpYWdyYW1DYWxjdWxhdG9yQ29vcmRpbmF0ZXNVdGlsLnNldFhZRWxlbWVudHMoZWxlbWVudHMsIHN0b3JlRGF0YSwgcG9zaXRpb25YKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhMZWZ0TmV3ID0gc3RvcmVEYXRhLnBvc2l0aW9uTWF4TGVmdDtcbiAgICBjb25zdCBtYXhUb3BOZXcgPSBzdG9yZURhdGEucG9zaXRpb25NYXhUb3AgPz8gMDtcblxuICAgIGlmICghdGhpcy5lbGVtZW50U3ZnKCkpIHtcbiAgICAgIHRoaXMuZWxlbWVudFN2Zy5zZXQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJykpO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlU1ZHICYmIHRoaXMuY29uZmlnQ2FudmFzKCk/LnN2Z0NvbnRhaW5lciAmJiB0aGlzLmVsZW1lbnRTdmcoKSkge1xuICAgICAgc2V0QXR0cmlidXRlU3ZnQW5kQXBwZW5kKHRoaXMuY29uZmlnQ2FudmFzKCk/LnN2Z0NvbnRhaW5lciwgdGhpcy5lbGVtZW50U3ZnKCksICcnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcgJiYgbWF4VG9wT3JpZ2luICE9PSBtYXhUb3BOZXcpIHtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25FbGVtZW50cyhtYXhUb3BOZXcsIGVsZW1lbnRzLCBzdG9yZURhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnICYmIG1heExlZnRPcmlnaW4gIT09IG1heExlZnROZXcpIHtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25FbGVtZW50cyhtYXhMZWZ0TmV3LCBlbGVtZW50cywgc3RvcmVEYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbGVtZW50U3ZnKCkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC5zZXQoJycpO1xuICAgICAgdGhpcy5idWlsZFN2Z0VsZW1lbnQoZWxlbWVudHMpO1xuICAgICAgdGhpcy5lbGVtZW50U3ZnKCk/LnNldEF0dHJpYnV0ZSgnZCcsIHRoaXMuYXR0cmlidXRlU3ZnRCgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uRWxlbWVudHMocG9zaXRpb25PZmZzZXQ6IG51bWJlciwgZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIGNvbmZpZzogSURhdGFEaWFncmFtQ29uZmlnU3ZnKSB7XG4gICAgaWYgKHBvc2l0aW9uT2Zmc2V0ICYmIHBvc2l0aW9uT2Zmc2V0IDwgMCkge1xuICAgICAgcG9zaXRpb25PZmZzZXQgPSBwb3NpdGlvbk9mZnNldCAqIC0xICsgMjAwOyAvLyAxMDAgbMOgIGtob+G6o25nIGPDoWNoIGPDoWNoIGJpw6puXG4gICAgfVxuICAgIGlmICh0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgTW9MaWJEaWFncmFtSG9yaXpvbnRhbENhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhlbGVtZW50cywgeyAuLi5jb25maWcsIHVwZGF0ZVNWRzogdHJ1ZSB9LCBwb3NpdGlvbk9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhlbGVtZW50cywgeyAuLi5jb25maWcsIHVwZGF0ZVNWRzogdHJ1ZSB9LCBwb3NpdGlvbk9mZnNldCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbGVtZW50U3ZnKCkpIHtcbiAgICAgIHRoaXMuZWxlbWVudFN2Zy5zZXQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbGVtZW50U3ZnKCkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC5zZXQoJycpO1xuICAgICAgdGhpcy5idWlsZFN2Z0VsZW1lbnQoZWxlbWVudHMpO1xuICAgICAgdGhpcy5lbGVtZW50U3ZnKCk/LnNldEF0dHJpYnV0ZSgnZCcsIHRoaXMuYXR0cmlidXRlU3ZnRCgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3ZnRWxlbWVudChlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGN1cnJlbnRFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnQuYXR0cmlidXRlU3ZnRCkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZVN2Z0QudXBkYXRlKChwcmV2KSA9PiBgJHtwcmV2ID8/ICcnfSAke2N1cnJlbnRFbGVtZW50LmF0dHJpYnV0ZVN2Z0R9YCk7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnPy5hdHRyaWJ1dGVTdmdEKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC51cGRhdGUoKHByZXYpID0+IGAke3ByZXYgPz8gJyd9ICR7Y3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnPy5hdHRyaWJ1dGVTdmdEfWApO1xuICAgICAgfVxuICAgICAgaWYgKCFjdXJyZW50RWxlbWVudC5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY3VycmVudEVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICAgIGlmIChicmFuY2guYXR0cmlidXRlU3ZnRCkge1xuICAgICAgICAgIHRoaXMuYXR0cmlidXRlU3ZnRC51cGRhdGUoKHByZXYpID0+IGAke3ByZXYgPz8gJyd9ICR7YnJhbmNoLmF0dHJpYnV0ZVN2Z0R9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWc/LmF0dHJpYnV0ZVN2Z0QpIHtcbiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVN2Z0QudXBkYXRlKChwcmV2KSA9PiBgJHtwcmV2ID8/ICcnfSAke2JyYW5jaC5ub2RlT3RoZXJDb25maWc/LmF0dHJpYnV0ZVN2Z0R9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1aWxkU3ZnRWxlbWVudChicmFuY2guZWxlbWVudHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHThuqV0IGPhuqMgbm9kZXMgdOG7qyBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcmVuZGVyTm9kZXMoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4pIHtcbiAgICBpZiAodGhpcy5jb25maWdDYW52YXMoKT8udXNlVmlydHVhbGl6YXRpb25UZW1wbGF0ZSkge1xuICAgICAgdGhpcy5leHRyYWN0VmlydHVhbEVsZW1lbnRzKGVsZW1lbnRzKTtcbiAgICAgIHRoaXMuYXBwbHlWaXJ0dWFsaXphdGlvbkRpZmYoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyTm9kZXMoKTtcbiAgICB0aGlzLnJlbmRlckVsZW1lbnRzUmVjdXJzaXZlbHkoZWxlbWVudHMsIHRydWUpO1xuICAgIHRoaXMucmVuZGVyQnJhbmNoTGFiZWxzKGVsZW1lbnRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFZpcnR1YWxFbGVtZW50cyhlbGVtZW50czogSURpYWdyYW1FbGVtZW50W10pIHtcbiAgICB0aGlzLnZpcnR1YWxGbGF0RWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnZpcnR1YWxGbGF0QnJhbmNoZXMgPSBbXTtcbiAgICBjb25zdCBzY2FuID0gKGxpc3Q6IElEaWFncmFtRWxlbWVudFtdLCBicmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGlzRmlyc3RMZXZlbCA9IHRydWUpID0+IHtcbiAgICAgIGxpc3QuZm9yRWFjaCgoZWwsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHNob3VsZFNob3dBcnJvdyA9ICEoaXNGaXJzdExldmVsICYmIGluZGV4ID09PSAwKTtcbiAgICAgICAgdGhpcy52aXJ0dWFsRmxhdEVsZW1lbnRzLnB1c2goeyBlbGVtZW50OiBlbCwgYnJhbmNoLCBpc090aGVyQ29uZmlnOiBmYWxzZSwgc2hvdWxkU2hvd0Fycm93LCBwYXJlbnRJZDogZWwuaWQgfSk7XG4gICAgICAgIGlmIChlbC5ub2RlT3RoZXJDb25maWcpIHRoaXMudmlydHVhbEZsYXRFbGVtZW50cy5wdXNoKHsgZWxlbWVudDogZWwubm9kZU90aGVyQ29uZmlnLCBicmFuY2gsIGlzT3RoZXJDb25maWc6IHRydWUsIHNob3VsZFNob3dBcnJvdzogZmFsc2UsIHBhcmVudElkOiBlbC5pZCB9KTtcbiAgICAgICAgaWYgKGVsLmJyYW5jaGVzKSB7XG4gICAgICAgICAgZWwuYnJhbmNoZXMuZm9yRWFjaCgoYiwgYkluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWIubGFiZWwpIGIubGFiZWwgPSBgTmjDoW5oICR7YkluZGV4ICsgMX1gO1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsRmxhdEJyYW5jaGVzLnB1c2goYik7XG4gICAgICAgICAgICBpZiAoYi5lbGVtZW50cykgc2NhbihiLmVsZW1lbnRzLCBiLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoYi5ub2RlT3RoZXJDb25maWcpIHRoaXMudmlydHVhbEZsYXRFbGVtZW50cy5wdXNoKHsgZWxlbWVudDogYi5ub2RlT3RoZXJDb25maWcsIGJyYW5jaDogYiwgaXNPdGhlckNvbmZpZzogdHJ1ZSwgc2hvdWxkU2hvd0Fycm93OiBmYWxzZSwgcGFyZW50SWQ6ICdicmFuY2hfJyArIGJJbmRleCArICdfJyArIGVsLmlkIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHNjYW4oZWxlbWVudHMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VmlydHVhbGl6YXRpb25EaWZmKCkge1xuICAgIGNvbnN0IHZwID0gdGhpcy52aXJ0dWFsVmlld3BvcnQ7XG4gICAgaWYgKCF2cCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnQ2FudmFzKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29uZmlnPy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhY29uZmlnKSByZXR1cm47XG5cbiAgICBjb25zdCBidWZmZXIgPSAzMDA7XG4gICAgY29uc3QgdmlzaWJsZUlkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgdGhpcy52aXJ0dWFsRmxhdEVsZW1lbnRzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGVsID0gaXRlbS5lbGVtZW50O1xuICAgICAgaWYgKGVsLnRyYW5zbGF0ZVggPT09IHVuZGVmaW5lZCB8fCBlbC50cmFuc2xhdGVZID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGlmIChlbC50cmFuc2xhdGVYICsgKGVsLnNwZWNpZmljX3dpZHRoIHx8IDE2NSkgPCB2cC54IC0gYnVmZmVyIHx8IGVsLnRyYW5zbGF0ZVggPiB2cC54ICsgdnAud2lkdGggKyBidWZmZXIgfHwgZWwudHJhbnNsYXRlWSArIChlbC5zcGVjaWZpY19oZWlnaHQgfHwgNDgpIDwgdnAueSAtIGJ1ZmZlciB8fCBlbC50cmFuc2xhdGVZID4gdnAueSArIHZwLmhlaWdodCArIGJ1ZmZlcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpZCA9IFN0cmluZyhpdGVtLnBhcmVudElkKSArIChpdGVtLmlzT3RoZXJDb25maWcgPyAnX290aGVyJyA6ICcnKTtcbiAgICAgIHZpc2libGVJZHMuYWRkKGlkKTtcblxuICAgICAgaWYgKCF0aGlzLnZpcnR1YWxOb2Rlc01hcC5oYXMoaWQpKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBpdGVtLmlzT3RoZXJDb25maWcgPyBjb25maWcubm9kZU90aGVyQ29uZmlnQ29tcG9uZW50VHlwZSA6IGNvbmZpZy5ub2RlQ29tcG9uZW50VHlwZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudFR5cGUgJiYgY29uZmlnLnZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgICBjb25zdCByZWYgPSBjb25maWcudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgcmVmLnNldElucHV0KCdlbGVtZW50JywgZWwpO1xuICAgICAgICAgIGlmIChpdGVtLmJyYW5jaCkgcmVmLnNldElucHV0KCdicmFuY2gnLCBpdGVtLmJyYW5jaCk7XG4gICAgICAgICAgcmVmLnNldElucHV0KCdvcmllbnRhdGlvbicsIHRoaXMub3JpZW50YXRpb24oKSk7XG5cbiAgICAgICAgICBjb25zdCBkb21FbCA9IHJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIGRvbUVsLmNsYXNzTGlzdC5hZGQoJ2RpYWdyYW0tbm9kZS1keW5hbWljJyk7XG4gICAgICAgICAgYXBwbHlFbGVtZW50U3R5bGUoZG9tRWwsIGVsKTtcbiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZG9tRWwpO1xuXG4gICAgICAgICAgbGV0IGFycm93OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoaXRlbS5zaG91bGRTaG93QXJyb3cgJiYgIWl0ZW0uaXNPdGhlckNvbmZpZykge1xuICAgICAgICAgICAgYXJyb3cgPSB0aGlzLmNyZWF0ZUFycm93SW5kaWNhdG9yKGVsLCBjb250YWluZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnZpcnR1YWxOb2Rlc01hcC5zZXQoaWQsIHsgY29tcG9uZW50OiByZWYsIGFycm93IH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYWNoZSA9IHRoaXMudmlydHVhbE5vZGVzTWFwLmdldChpZCk7XG4gICAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICAgIGlmIChjYWNoZS5jb21wb25lbnQpIGFwcGx5RWxlbWVudFN0eWxlKGNhY2hlLmNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCBlbCk7XG4gICAgICAgICAgaWYgKGNhY2hlLmFycm93KSB7XG4gICAgICAgICAgICBjb25zdCBhcnJvd1NpemUgPSAxNjtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVXaWR0aCA9IGVsLnNwZWNpZmljX3dpZHRoID8/IDE2NTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVIZWlnaHQgPSBlbC5zcGVjaWZpY19oZWlnaHQgPz8gNDg7XG4gICAgICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiJHthcnJvd1NpemV9XCIgaGVpZ2h0PVwiJHthcnJvd1NpemV9XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCA0TDE2IDhMOCAxMlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICBjYWNoZS5hcnJvdy5zdHlsZS5sZWZ0ID0gYCR7ZWwudHJhbnNsYXRlWCAtIGFycm93U2l6ZX1weGA7XG4gICAgICAgICAgICAgIGNhY2hlLmFycm93LnN0eWxlLnRvcCA9IGAke2VsLnRyYW5zbGF0ZVkgKyBub2RlSGVpZ2h0IC8gMiAtIGFycm93U2l6ZSAvIDJ9cHhgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiJHthcnJvd1NpemV9XCIgaGVpZ2h0PVwiJHthcnJvd1NpemV9XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCAxNkw0IDEySDEyTDggMTZaXCIgZmlsbD1cIiM5Y2EzYWZcIi8+XG4gICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgY2FjaGUuYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsLnRyYW5zbGF0ZVggKyBub2RlV2lkdGggLyAyIC0gYXJyb3dTaXplIC8gMn1weGA7XG4gICAgICAgICAgICAgIGNhY2hlLmFycm93LnN0eWxlLnRvcCA9IGAke2VsLnRyYW5zbGF0ZVkgLSBhcnJvd1NpemV9cHhgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXJ0dWFsRmxhdEJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHggPSBicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3g7XG4gICAgICBjb25zdCB5ID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95O1xuICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCB8fCB5ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIGlmICh4IDwgdnAueCAtIGJ1ZmZlciB8fCB4ID4gdnAueCArIHZwLndpZHRoICsgYnVmZmVyIHx8IHkgPCB2cC55IC0gYnVmZmVyIHx8IHkgPiB2cC55ICsgdnAuaGVpZ2h0ICsgYnVmZmVyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlkID0gJ2JyYW5jaF8nICsgaW5kZXggKyAnXycgKyBNYXRoLnJvdW5kKHgpICsgJ18nICsgTWF0aC5yb3VuZCh5KTtcbiAgICAgIHZpc2libGVJZHMuYWRkKGlkKTtcblxuICAgICAgaWYgKCF0aGlzLnZpcnR1YWxOb2Rlc01hcC5oYXMoaWQpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsRGl2ID0gdGhpcy5jcmVhdGVCcmFuY2hMYWJlbChicmFuY2gpO1xuICAgICAgICBpZiAobGFiZWxEaXYpIHRoaXMudmlydHVhbE5vZGVzTWFwLnNldChpZCwgeyBsYWJlbDogbGFiZWxEaXYgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYWNoZSA9IHRoaXMudmlydHVhbE5vZGVzTWFwLmdldChpZCk7XG4gICAgICAgIGlmIChjYWNoZT8ubGFiZWwpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbERpdiA9IGNhY2hlLmxhYmVsO1xuICAgICAgICAgIGNvbnN0IGxhYmVsUmVjdCA9IGxhYmVsRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGNvbnN0IGxhYmVsVyA9IGxhYmVsUmVjdC53aWR0aCB8fCBsYWJlbERpdi5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBjb25zdCBsYWJlbEggPSBsYWJlbFJlY3QuaGVpZ2h0IHx8IGxhYmVsRGl2Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgICBsYWJlbERpdi5zdHlsZS5sZWZ0ID0gYCR7eCAtIGxhYmVsVyAvIDIgLSA0fXB4YDtcbiAgICAgICAgICAgIGxhYmVsRGl2LnN0eWxlLnRvcCA9IGAke3kgLSBsYWJlbEggLyAyICsgNH1weGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhYmVsRGl2LnN0eWxlLmxlZnQgPSBgJHt4ICsgNH1weGA7XG4gICAgICAgICAgICBsYWJlbERpdi5zdHlsZS50b3AgPSBgJHt5IC0gbGFiZWxIIC8gMn1weGA7IC8vIGNlbnRlciBvdmVyIHdpcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIEFycmF5LmZyb20odGhpcy52aXJ0dWFsTm9kZXNNYXAuZW50cmllcygpKS5mb3JFYWNoKChbaWQsIGNhY2hlXSkgPT4ge1xuICAgICAgaWYgKCF2aXNpYmxlSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgY2FjaGUuY29tcG9uZW50Py5kZXN0cm95KCk7XG4gICAgICAgIGNhY2hlLmFycm93Py5yZW1vdmUoKTtcbiAgICAgICAgY2FjaGUubGFiZWw/LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnZpcnR1YWxOb2Rlc01hcC5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBlbGVtZW50cyB2w6AgYnJhbmNoZXMgbeG7mXQgY8OhY2ggxJHhu4cgcXV5XG4gICAqL1xuICBwcml2YXRlIHJlbmRlckVsZW1lbnRzUmVjdXJzaXZlbHkoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIGlzRmlyc3RMZXZlbCA9IHRydWUsIGJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaCkge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC50cmFuc2xhdGVYICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudC50cmFuc2xhdGVZICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTWFpbiBub2RlOiBjw7MgYXJyb3cgbuG6v3Uga2jDtG5nIHBo4bqjaSBlbGVtZW50IMSR4bqndSB0acOqbiBj4bunYSBsZXZlbCDEkeG6p3VcbiAgICAgICAgY29uc3Qgc2hvdWxkU2hvd0Fycm93ID0gIShpc0ZpcnN0TGV2ZWwgJiYgaW5kZXggPT09IDApO1xuICAgICAgICB0aGlzLmNyZWF0ZU5vZGUoZWxlbWVudCwgYnJhbmNoLCBzaG91bGRTaG93QXJyb3csIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVuZGVyIG5vZGVPdGhlckNvbmZpZyBu4bq/dSBjw7MgKG5vZGVzIHBo4bulKSAtIEtIw5RORyBjw7MgYXJyb3dcbiAgICAgIGlmIChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZz8udHJhbnNsYXRlWCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNyZWF0ZU5vZGUoZWxlbWVudC5ub2RlT3RoZXJDb25maWcsIGJyYW5jaCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW5kZXIgYnJhbmNoZXMgbuG6v3UgY8OzXG4gICAgICBpZiAoZWxlbWVudC5icmFuY2hlcyAmJiBlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckVsZW1lbnRzUmVjdXJzaXZlbHkoYnJhbmNoLmVsZW1lbnRzLCBmYWxzZSwgYnJhbmNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWc/LnRyYW5zbGF0ZVggIT09IHVuZGVmaW5lZCAmJiBicmFuY2gubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVOb2RlKGJyYW5jaC5ub2RlT3RoZXJDb25maWcsIGJyYW5jaCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVOG6oW8gbeG7mXQgbm9kZSBjb21wb25lbnQgxJHhu5luZ1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBjcmVhdGVOb2RlKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIHNob3VsZFNob3dBcnJvdzogYm9vbGVhbiwgaXNOb2RlT3RoZXJDb25maWc6IGJvb2xlYW4pOiBDb21wb25lbnRSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdDYW52YXMoKTtcbiAgICBpZiAoIWNvbmZpZz8udmlld0NvbnRhaW5lclJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25maWcudXNlVmlydHVhbGl6YXRpb25UZW1wbGF0ZSkge1xuICAgICAgaWYgKGNvbmZpZy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBpZiAoc2hvdWxkU2hvd0Fycm93ICYmICFpc05vZGVPdGhlckNvbmZpZykge1xuICAgICAgICAgIHRoaXMuY3JlYXRlQXJyb3dJbmRpY2F0b3IoZWxlbWVudCwgY29uZmlnLm5vZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IGlzTm9kZU90aGVyQ29uZmlnID8gY29uZmlnLm5vZGVPdGhlckNvbmZpZ0NvbXBvbmVudFR5cGUgOiBjb25maWcubm9kZUNvbXBvbmVudFR5cGU7XG5cbiAgICBpZiAoIWNvbXBvbmVudFR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjb25maWcudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgY29uc3QgZWwgPSBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZWxlbWVudCcsIGVsZW1lbnQpO1xuICAgIGlmIChicmFuY2gpIHtcbiAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnYnJhbmNoJywgYnJhbmNoKTtcbiAgICB9XG4gICAgY29tcG9uZW50UmVmLnNldElucHV0KCdvcmllbnRhdGlvbicsIHRoaXMub3JpZW50YXRpb24oKSk7XG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZGlhZ3JhbS1ub2RlLWR5bmFtaWMnKTtcblxuICAgIGFwcGx5RWxlbWVudFN0eWxlKGVsLCBlbGVtZW50KTtcblxuICAgIGlmIChjb25maWcubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbmZpZy5ub2Rlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVsKTtcblxuICAgICAgaWYgKHNob3VsZFNob3dBcnJvdyAmJiAhaXNOb2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBcnJvd0luZGljYXRvcihlbGVtZW50LCBjb25maWcubm9kZXNDb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRSZWZzLnVwZGF0ZSgocmVmcykgPT4gWy4uLnJlZnMsIGNvbXBvbmVudFJlZl0pOyAvLyBMxrB1IHJlZmVyZW5jZSDEkeG7gyBjbGVhbnVwIHNhdVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB04bqldCBj4bqjIG5vZGVzIMSRw6MgdOG6oW9cbiAgICovXG4gIGNsZWFyTm9kZXMoKSB7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzKCkuZm9yRWFjaCgocmVmKSA9PiB7XG4gICAgICByZWYuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY29tcG9uZW50UmVmcy5zZXQoW10pO1xuXG4gICAgQXJyYXkuZnJvbSh0aGlzLnZpcnR1YWxOb2Rlc01hcC52YWx1ZXMoKSkuZm9yRWFjaCgoY2FjaGUpID0+IHtcbiAgICAgIGNhY2hlLmNvbXBvbmVudD8uZGVzdHJveSgpO1xuICAgICAgY2FjaGUuYXJyb3c/LnJlbW92ZSgpO1xuICAgICAgY2FjaGUubGFiZWw/LnJlbW92ZSgpO1xuICAgIH0pO1xuICAgIHRoaXMudmlydHVhbE5vZGVzTWFwLmNsZWFyKCk7XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0NhbnZhcygpO1xuICAgIGNvbnN0IG5vZGVzQ29udGFpbmVyID0gY29uZmlnPy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAobm9kZXNDb250YWluZXIpIHtcbiAgICAgIGlmICghY29uZmlnPy51c2VWaXJ0dWFsaXphdGlvblRlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IGR5bmFtaWNOb2RlcyA9IG5vZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaWFncmFtLW5vZGUtZHluYW1pYycpO1xuICAgICAgICBkeW5hbWljTm9kZXMuZm9yRWFjaCgobm9kZTogRWxlbWVudCkgPT4gbm9kZS5yZW1vdmUoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbHMgPSBub2Rlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuYnJhbmNoLWxhYmVsJyk7XG4gICAgICBsYWJlbHMuZm9yRWFjaCgobGFiZWw6IEVsZW1lbnQpID0+IGxhYmVsLnJlbW92ZSgpKTtcbiAgICAgIGNvbnN0IGFycm93cyA9IG5vZGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ub2RlLWFycm93LWluZGljYXRvcicpO1xuICAgICAgYXJyb3dzLmZvckVhY2goKGFycm93OiBFbGVtZW50KSA9PiBhcnJvdy5yZW1vdmUoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFThuqFvIG3FqWkgdMOqbiBpbmRpY2F0b3IgY2jhu4kgaMaw4bubbmcgdsOgbyBub2RlLlxuICAgKiAtIHZlcnRpY2FsOiAgIG3FqWkgdMOqbiDilrwgcGjDrWEgVFLDik4gbm9kZSAgKGx14buTbmcgdHLDqm4g4oaSIHh14buRbmcpXG4gICAqIC0gaG9yaXpvbnRhbDogbcWpaSB0w6puIOKWuiBwaMOtYSBUUsOBSSBub2RlICAobHXhu5NuZyB0csOhaSDihpIgcGjhuqNpKVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBcnJvd0luZGljYXRvcihlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVsZW1lbnQudHJhbnNsYXRlWCA9PT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQudHJhbnNsYXRlWSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYXJyb3cuY2xhc3NOYW1lID0gJ25vZGUtYXJyb3ctaW5kaWNhdG9yJztcbiAgICBhcnJvdy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgYXJyb3cuc3R5bGUuekluZGV4ID0gJzEnO1xuICAgIGFycm93LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cbiAgICBjb25zdCBhcnJvd1NpemUgPSAxNjtcbiAgICBjb25zdCBub2RlV2lkdGggPSBlbGVtZW50LnNwZWNpZmljX3dpZHRoID8/IDA7XG4gICAgY29uc3Qgbm9kZUhlaWdodCA9IGVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDA7XG5cbiAgICBpZiAodGhpcy5vcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIC8vIE3FqWkgdMOqbiDilrog4bufIGLDqm4gVFLDgUkgbm9kZSwgY8SDbiBnaeG7r2EgdGhlbyBjaGnhu4F1IGNhb1xuICAgICAgYXJyb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICA8c3ZnIHdpZHRoPVwiJHthcnJvd1NpemV9XCIgaGVpZ2h0PVwiJHthcnJvd1NpemV9XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNOCA0TDE2IDhMOCAxMlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICBgO1xuICAgICAgYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWCAtIGFycm93U2l6ZX1weGA7XG4gICAgICBhcnJvdy5zdHlsZS50b3AgPSBgJHtlbGVtZW50LnRyYW5zbGF0ZVkgKyBub2RlSGVpZ2h0IC8gMiAtIGFycm93U2l6ZSAvIDJ9cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNxalpIHTDqm4g4pa8IOG7nyBwaMOtYSBUUsOKTiBub2RlLCBjxINuIGdp4buvYSB0aGVvIGNoaeG7gXUgcuG7mW5nXG4gICAgICBhcnJvdy5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxzdmcgd2lkdGg9XCIke2Fycm93U2l6ZX1cIiBoZWlnaHQ9XCIke2Fycm93U2l6ZX1cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk04IDE2TDQgMTJIMTJMOCAxNlpcIiBmaWxsPVwiIzljYTNhZlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICBgO1xuICAgICAgYXJyb3cuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWCArIG5vZGVXaWR0aCAvIDIgLSBhcnJvd1NpemUgLyAyfXB4YDtcbiAgICAgIGFycm93LnN0eWxlLnRvcCA9IGAke2VsZW1lbnQudHJhbnNsYXRlWSAtIGFycm93U2l6ZX1weGA7XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGFycm93KTtcbiAgICByZXR1cm4gYXJyb3c7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGJyYW5jaCBsYWJlbHMgKHRleHQgYW5ub3RhdGlvbnMgb24gYnJhbmNoZXMpXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJyYW5jaExhYmVscyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGNvbnN0IHN2Z0NvbnRhaW5lciA9IHRoaXMuY29uZmlnQ2FudmFzKCk/LnN2Z0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIXN2Z0NvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmJyYW5jaGVzICYmIGVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ICE9PSB1bmRlZmluZWQgJiYgYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghYnJhbmNoLmxhYmVsKSB7XG4gICAgICAgICAgICAgIGJyYW5jaC5sYWJlbCA9IGBOaMOhbmggJHtpbmRleCArIDF9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQnJhbmNoTGFiZWwoYnJhbmNoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckJyYW5jaExhYmVscyhicmFuY2guZWxlbWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUJyYW5jaExhYmVsKGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnQ2FudmFzKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29uZmlnPy5ub2Rlc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBsYWJlbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGxhYmVsRGl2LmNsYXNzTmFtZSA9ICdicmFuY2gtbGFiZWwnO1xuICAgIGxhYmVsRGl2LnRleHRDb250ZW50ID0gYnJhbmNoLmxhYmVsIHx8ICcnO1xuXG4gICAgbGFiZWxEaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGxhYmVsRGl2LnN0eWxlLnBhZGRpbmcgPSAnMnB4IDdweCc7XG4gICAgbGFiZWxEaXYuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzEwcHgnO1xuICAgIGxhYmVsRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJyYW5jaC5sYWJlbEJnQ29sb3IgfHwgJyNmM2Y0ZjYnO1xuICAgIGxhYmVsRGl2LnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgIGxhYmVsRGl2LnN0eWxlLmZvbnRGYW1pbHkgPSAnc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmJztcbiAgICBsYWJlbERpdi5zdHlsZS5jb2xvciA9ICcjMzc0MTUxJztcbiAgICBsYWJlbERpdi5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7XG4gICAgbGFiZWxEaXYuc3R5bGUuekluZGV4ID0gJzInO1xuICAgIGxhYmVsRGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWxEaXYpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ID8/IDA7XG4gICAgY29uc3Qgc3RhcnRZID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID8/IDA7XG4gICAgY29uc3QgbGFiZWxXID0gbGFiZWxEaXYub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgbGFiZWxIID0gbGFiZWxEaXYub2Zmc2V0SGVpZ2h0IHx8IDE4O1xuXG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAvKipcbiAgICAgICAqIEhvcml6b250YWw6IGxhYmVsIG7hurFtIFRSw4pOIMSRxrDhu51uZyBsaW5lIG7hurFtIG5nYW5nLlxuICAgICAgICogc3BlY2lmaWNfc3RhcnRfYnJhbmNoID0gxJFp4buDbSBi4bqvdCDEkeG6p3UgxJFv4bqhbiB0aOG6s25nIG5nYW5nIMSR4bq/biBlbGVtZW50LlxuICAgICAgICogxJDhurd0IGxhYmVsIHThu4tuaCB0aeG6v24gc2FuZyBwaOG6o2kgOHB4IHThu6sgbmdv4bq3dCBuaMOhbmgsIHbDoCBjxINuIGdp4buvYSBkw6J5LlxuICAgICAgICovXG4gICAgICBsYWJlbERpdi5zdHlsZS5sZWZ0ID0gYCR7c3RhcnRYICsgNH1weGA7XG4gICAgICBsYWJlbERpdi5zdHlsZS50b3AgPSBgJHtzdGFydFkgLSBsYWJlbEggLyAyfXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBWZXJ0aWNhbDogbGFiZWwgbuG6sW0gQsOKTiBUUsOBSSDEkcaw4budbmcgbmdhbmcsIGPEg24gZ2nhu69hIHRoZW8gWS5cbiAgICAgICAqIHNwZWNpZmljX3N0YXJ0X2JyYW5jaCA9IMSRaeG7g20gxJHhuqd1IMSRb+G6oW4gdGjhurNuZyDEkeG6v24gZWxlbWVudCAoc2F1IGN1cnZlKS5cbiAgICAgICAqL1xuICAgICAgbGFiZWxEaXYuc3R5bGUubGVmdCA9IGAke3N0YXJ0WCAtIGxhYmVsVyAvIDIgLSA0fXB4YDtcbiAgICAgIGxhYmVsRGl2LnN0eWxlLnRvcCA9IGAke3N0YXJ0WSAtIGxhYmVsSCAvIDIgKyA0fXB4YDtcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsRGl2O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBk4bqldSBcIitcIiB04bqhaSBt4buXaSB24buLIHRyw60gY8OzIHRo4buDIHRo4bqjIGVsZW1lbnQgdOG7qyBzaWRlYmFyLlxuICAgKiBTZXJ2aWNlIHThu7EgdOG6oW8gRE9NIGVsZW1lbnRzIHbDoCBpbmplY3QgdsOgbyBub2Rlc0NvbnRhaW5lci5cbiAgICogQHBhcmFtIGZsYXRFbGVtZW50cyBEYW5oIHPDoWNoIGZsYXQgZWxlbWVudHMgxJHDoyB0w61uaCB0b8OhbiB24buLIHRyw61cbiAgICogQHBhcmFtIG9uRHJvcCBDYWxsYmFjayBraGkgbmfGsOG7nWkgZMO5bmcgdGjhuqMgZWxlbWVudCB2w6BvIG3hu5l0IFwiK1wiXG4gICAqIEBwYXJhbSBjYW5Ecm9wRm4gKHTDuXkgY2jhu41uKSBGdW5jdGlvbiBraeG7g20gdHJhIMSRaeG7gXUga2nhu4duIGhp4buDbiB0aOG7iyBkcm9wIHpvbmUuXG4gICAqIGBgYFxuICAgKi9cbiAgcmVuZGVyRHJvcFpvbmVzKGZsYXRFbGVtZW50czogSURpYWdyYW1FbGVtZW50W10sIG9uRHJvcDogKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsIGRyYWdEYXRhOiBzdHJpbmcpID0+IHZvaWQsIGNhbkRyb3BGbjogVERyb3Bab25lQ2FuRHJvcEZuLCBydWxlQ29ubmVjdGFibGVFbGVtZW50czogQXJyYXk8SVJ1bGVDb25uZWN0YWJsZT4pOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRHJvcFpvbmVzKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWdDYW52YXMoKT8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGZsYXRFbGVtZW50cy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgaWYgKGVsLmNvZGUgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHJldHVybjtcblxuICAgICAgaWYgKGVsLmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgICAgZWwuYnJhbmNoZXM/LmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ecm9wRm4odW5kZWZpbmVkLCBlbCwgYnJhbmNoLCBydWxlQ29ubmVjdGFibGVFbGVtZW50cykpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IHRvcCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVUb3BCcmFuY2hIKGVsLCBicmFuY2gpIDogdGhpcy5jYWxjRHJvcFpvbmVUb3BCcmFuY2goZWwsIGJyYW5jaCk7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVMZWZ0QnJhbmNoSChlbCwgYnJhbmNoKSA6IHRoaXMuY2FsY0Ryb3Bab25lTGVmdEJyYW5jaChlbCwgYnJhbmNoKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bab25lRWwoY29udGFpbmVyLCB0b3AsIGxlZnQsIGVsLCBicmFuY2gsIG9uRHJvcCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFjYW5Ecm9wRm4odW5kZWZpbmVkLCBlbCwgdW5kZWZpbmVkLCBydWxlQ29ubmVjdGFibGVFbGVtZW50cykpIHJldHVybjtcblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHRoaXMuY2FsY0Ryb3Bab25lVG9wTm9kZUgoZWwpIDogdGhpcy5jYWxjRHJvcFpvbmVUb3BOb2RlKGVsKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5jYWxjRHJvcFpvbmVMZWZ0Tm9kZUgoZWwpIDogdGhpcy5jYWxjRHJvcFpvbmVMZWZ0Tm9kZShlbCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRHJvcFpvbmVFbChjb250YWluZXIsIHRvcCwgbGVmdCwgZWwsIHVuZGVmaW5lZCwgb25Ecm9wKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBk4buvIGxp4buHdSBuYXZpZ2F0aW9uIGxpbmUgKG5leHRfb3RoZXJfaWQpIHThu6sgZmxhdCBlbGVtZW50cyDEkeG7gyByZW5kZXIgcXVhIGRyYXctbGluZSBkaXJlY3RpdmUuXG4gICAqIFNlcnZpY2UgdOG7sSDEkeG7jWMgYG9yaWVudGF0aW9uKClgIMSR4buDIGNo4buNbiBwYXR0ZXJuIGVuZHBvaW50IHBow7kgaOG7o3AuXG4gICAqIENhbGxlciBjaOG7iSBj4bqnbiB0cnV54buBbiB2w6BvIGBkcmF3TGluZUZ1bmN0aW9uQ29udHJvbC5zZXREYXRhKC4uLilgLlxuICAgKi9cbiAgYnVpbGROYXZpZ2F0aW9uRGF0YShmbGF0RWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLCBzdHlsZUNvbmZpZz86IElOYXZpZ2F0aW9uTGluZVN0eWxlQ29uZmlnKTogSURyYXdMaW5lRGF0YUlucHV0W10ge1xuICAgIHJldHVybiBMaWJzVWlEaWFncmFtRHJhd05hdmlnYXRpb25VdGlsLmJ1aWxkTmF2aWdhdGlvbkRhdGEoZmxhdEVsZW1lbnRzLCB0aGlzLm9yaWVudGF0aW9uKCksIHN0eWxlQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBYw7NhIHThuqV0IGPhuqMgZHJvcCB6b25lIFwiK1wiIGto4buPaSBET00gKi9cbiAgY2xlYXJEcm9wWm9uZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWdDYW52YXMoKT8ubm9kZXNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmRpYWdyYW0tZHJvcC16b25lJykuZm9yRWFjaCgoZWwpID0+IGVsLnJlbW92ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRHJvcFpvbmVFbChcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIHRvcDogbnVtYmVyLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsXG4gICAgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQsXG4gICAgb25Ecm9wOiAoZWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZCwgZHJhZ0RhdGE6IHN0cmluZykgPT4gdm9pZFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBpbmRpY2F0b3JTdHlsZTogSURyb3Bab25lSW5kaWNhdG9yU3R5bGUgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ0NhbnZhcygpPy5kcm9wWm9uZVN0eWxlO1xuICAgIGNvbnN0IFJFQ1RfVyA9IGVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XSURUSF9FTEVNRU5UX0RFRkFVTFQ7XG4gICAgY29uc3QgUkVDVF9IID0gZWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5IRUlHSFRfRUxFTUVOVF9ERUZBVUxUO1xuXG4gICAgLy8gVMOibSBj4bunYSBuw7p0IHRyw7JuXG4gICAgY29uc3QgY2VudGVyWCA9IGxlZnQgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgICBjb25zdCBjZW50ZXJZID0gdG9wICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUiAvIDI7XG5cbiAgICAvLyBIaXQgem9uZSB2w7QgaMOsbmg6IHLhu5luZyBoxqFuIHJlY3RhbmdsZSBt4buZdCBraG/huqNuIHBhZGRpbmcgxJHhu4MgYuG6r3QgZHJhZyBz4bubbSBoxqFuXG4gICAgY29uc3QgSElUX1BBRCA9IDIwO1xuICAgIGNvbnN0IEhJVF9XID0gUkVDVF9XICsgSElUX1BBRCAqIDI7XG4gICAgY29uc3QgSElUX0ggPSBSRUNUX0ggKyBISVRfUEFEICogMjtcbiAgICBjb25zdCBoaXRMZWZ0ID0gY2VudGVyWCAtIEhJVF9XIC8gMjtcbiAgICBjb25zdCBoaXRUb3AgPSBjZW50ZXJZIC0gSElUX0ggLyAyO1xuXG4gICAgLy8g4pSA4pSAIEhpdCB6b25lICh3cmFwcGVyIHbDtCBow6xuaCwgdsO5bmcgbmjhuq1uIGRyYWcgcuG7mW5nKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBjb25zdCBoaXRab25lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaGl0Wm9uZS5jbGFzc05hbWUgPSAnZGlhZ3JhbS1kcm9wLXpvbmUnO1xuICAgIGhpdFpvbmUuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogJHtoaXRUb3B9cHg7XG4gICAgICBsZWZ0OiAke2hpdExlZnR9cHg7XG4gICAgICB6LWluZGV4OiA5O1xuICAgICAgd2lkdGg6ICR7SElUX1d9cHg7XG4gICAgICBoZWlnaHQ6ICR7SElUX0h9cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYDtcblxuICAgIC8vIOKUgOKUgCBJbmRpY2F0b3IgKGNvbiBiw6puIHRyb25nLCBwaOG6p24gaGnhu4NuIHRo4buLKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBjb25zdCBpbmRpY2F0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBpbmRpY2F0b3Iuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJzsgLy8gdHLDoW5oIHRyYW5oIGNo4bqlcCBldmVudCB24bubaSBoaXRab25lXG5cbiAgICAvLyBW4buLIHRyw60gZG90IHRyb25nIGhpdFpvbmUgKGPEg24gZ2nhu69hIGhpdFpvbmUpXG4gICAgY29uc3QgZG90T2Zmc2V0TGVmdCA9IEhJVF9XIC8gMiAtIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuICAgIGNvbnN0IGRvdE9mZnNldFRvcCA9IEhJVF9IIC8gMiAtIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuQUREX0lDT05fRElBTUVURVIgLyAyO1xuXG4gICAgLy8gVuG7iyB0csOtIHJlY3RhbmdsZSB0cm9uZyBoaXRab25lIChjxINuIGdp4buvYSBoaXRab25lKVxuICAgIGNvbnN0IHJlY3RPZmZzZXRMZWZ0ID0gSElUX1BBRDtcbiAgICBjb25zdCByZWN0T2Zmc2V0VG9wID0gSElUX0ggLyAyIC0gUkVDVF9IIC8gMjtcblxuICAgIGNvbnN0IGFwcGx5RG90U3R5bGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gaW5kaWNhdG9yU3R5bGU7XG4gICAgICBjb25zdCBzaXplID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUjtcbiAgICAgIGNvbnN0IGJnID0gcz8uYmFja2dyb3VuZENvbG9yID8/ICcjM2I4MmY2JztcbiAgICAgIGNvbnN0IGljb25Db2xvciA9IHM/Lmljb25Db2xvciA/PyAnI2ZmZmZmZic7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gcz8ub3BhY2l0eSA/PyAwLjk1O1xuICAgICAgY29uc3QgYm9yZGVyUmFkaXVzID0gcz8uYm9yZGVyUmFkaXVzID8/ICc1MCUnO1xuXG4gICAgICBzZXRTdHlsZXNFbGVtZW50KGluZGljYXRvciwge1xuICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgdG9wOiBgJHtkb3RPZmZzZXRUb3B9cHhgLFxuICAgICAgICBsZWZ0OiBgJHtkb3RPZmZzZXRMZWZ0fXB4YCxcbiAgICAgICAgd2lkdGg6IGAke3NpemV9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke3NpemV9cHhgLFxuICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMC4xNXMgZWFzZScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzPy5yZW5kZXJJbmRpY2F0b3IpIHtcbiAgICAgICAgaW5kaWNhdG9yLmlubmVySFRNTCA9IHMucmVuZGVySW5kaWNhdG9yKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kaWNhdG9yLmlubmVySFRNTCA9IGBcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiXG4gICAgICAgICAgICB3aWR0aDogJHtzaXplfXB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAke3NpemV9cHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2JnfTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Ym9yZGVyUmFkaXVzfTtcbiAgICAgICAgICAgIG9wYWNpdHk6ICR7b3BhY2l0eX07XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgXCI+PGkgY2xhc3M9XCJsaWJzLXVpLWljb24tYWRkIGJlZm9yZTp0ZXh0LVske2ljb25Db2xvcn1dXCI+PC9pPjwvZGl2PlxuICAgICAgICBgO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBhcHBseVJlY3RTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBpbmRpY2F0b3JTdHlsZTtcbiAgICAgIGNvbnN0IGhvdmVyQmcgPSBzPy5ob3ZlckJhY2tncm91bmRDb2xvciA/PyAnI2VlZjRmZic7XG4gICAgICBjb25zdCBob3ZlckJvcmRlciA9IHM/LmhvdmVyQm9yZGVyQ29sb3IgPz8gJ3JnYmEoNTksIDEzMCwgMjQ2LCAwLjcpJztcbiAgICAgIGNvbnN0IGhvdmVyQm9yZGVyU3R5bGUgPSBzPy5ob3ZlckJvcmRlclN0eWxlID8/ICdkYXNoZWQnO1xuICAgICAgY29uc3QgaG92ZXJSYWRpdXMgPSBzPy5ob3ZlckJvcmRlclJhZGl1cyA/PyAxMDtcblxuICAgICAgc2V0U3R5bGVzRWxlbWVudChpbmRpY2F0b3IsIHtcbiAgICAgICAgdG9wOiBgJHtyZWN0T2Zmc2V0VG9wfXB4YCxcbiAgICAgICAgbGVmdDogYCR7cmVjdE9mZnNldExlZnR9cHhgLFxuICAgICAgICB3aWR0aDogYCR7UkVDVF9XfXB4YCxcbiAgICAgICAgaGVpZ2h0OiBgJHtSRUNUX0h9cHhgLFxuICAgICAgICBib3JkZXJSYWRpdXM6IGAke2hvdmVyUmFkaXVzfXB4YCxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlckJnLFxuICAgICAgICBib3JkZXI6IGAycHggJHtob3ZlckJvcmRlclN0eWxlfSAke2hvdmVyQm9yZGVyfWAsXG4gICAgICAgIHRyYW5zaXRpb246ICdhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBO4bq/dSBjw7MgaMOgbSByZW5kZXIgxJHhu5luZyBjaG8gdHLhuqFuZyB0aMOhaSBob3ZlciDigJQgZ+G7jWkgbsOzXG4gICAgICBpbmRpY2F0b3IuaW5uZXJIVE1MID0gcz8ucmVuZGVySG92ZXJJbmRpY2F0b3IgPyBzLnJlbmRlckhvdmVySW5kaWNhdG9yKCkgOiAnJztcbiAgICB9O1xuXG4gICAgYXBwbHlEb3RTdHlsZSgpO1xuICAgIGhpdFpvbmUuYXBwZW5kQ2hpbGQoaW5kaWNhdG9yKTtcblxuICAgIGhpdFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgYXBwbHlSZWN0U3R5bGUoKTtcbiAgICB9KTtcblxuICAgIGhpdFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZS5kYXRhVHJhbnNmZXIpIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgfSk7XG5cbiAgICBoaXRab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICAgIGlmICghaGl0Wm9uZS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgYXBwbHlEb3RTdHlsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaGl0Wm9uZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgKGU6IERyYWdFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHJhdyA9IGUuZGF0YVRyYW5zZmVyPy5nZXREYXRhKCdhcHBsaWNhdGlvbi9qc29uJykgPz8gJyc7XG4gICAgICBvbkRyb3AoZWxlbWVudCwgYnJhbmNoLCByYXcpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGhpdFpvbmUpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFZlcnRpY2FsIGRyb3Agem9uZSBoZWxwZXJzIChleGlzdGluZykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lVG9wQnJhbmNoKGVsOiBJRGlhZ3JhbUVsZW1lbnQsIGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoKTogbnVtYmVyIHtcbiAgICBjb25zdCBvYyA9IGJyYW5jaC5ub2RlT3RoZXJDb25maWc7XG4gICAgaWYgKG9jKSByZXR1cm4gKG9jLnNwZWNpZmljX3kgPz8gMCkgKyAob2Muc3BlY2lmaWNfaGVpZ2h0ID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9XQUlUX0RFRkFVTFQpICsgMTA7XG4gICAgcmV0dXJuIChicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3kgPz8gMCkgKyAzMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdEJyYW5jaChlbDogSURpYWdyYW1FbGVtZW50LCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCk6IG51bWJlciB7XG4gICAgY29uc3QgZmlyc3RFbCA9IGJyYW5jaC5lbGVtZW50cz8uWzBdO1xuICAgIGlmIChmaXJzdEVsPy50cmFuc2xhdGVYICE9PSB1bmRlZmluZWQpIHJldHVybiBmaXJzdEVsLnRyYW5zbGF0ZVggKyAoZmlyc3RFbC5zcGVjaWZpY193aWR0aCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLldJRFRIX0VMRU1FTlRfREVGQVVMVCkgLyAyIC0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5BRERfSUNPTl9ESUFNRVRFUiAvIDI7XG4gICAgcmV0dXJuIChlbC50cmFuc2xhdGVYID8/IDApICsgKGVsLnNwZWNpZmljX3dpZHRoID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxUKSAvIDIgLSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lVG9wTm9kZShlbDogSURpYWdyYW1FbGVtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBvYyA9IGVsLm5vZGVPdGhlckNvbmZpZztcbiAgICBpZiAob2MpIHJldHVybiAob2Muc3BlY2lmaWNfeSA/PyAwKSArIChvYy5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyAxMDtcbiAgICByZXR1cm4gKGVsLnRyYW5zbGF0ZVkgPz8gMCkgKyAoZWwuc3BlY2lmaWNfaGVpZ2h0ID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuSEVJR0hUX0VMRU1FTlRfREVGQVVMVCkgKyAxMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdE5vZGUoZWw6IElEaWFncmFtRWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChlbC50cmFuc2xhdGVYID8/IDApICsgKGVsLnNwZWNpZmljX3dpZHRoID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0lEVEhfRUxFTUVOVF9ERUZBVUxUKSAvIDIgLSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSIC8gMjtcbiAgfVxuXG4gIC8vIOKUgOKUgCBIb3Jpem9udGFsIGRyb3Agem9uZSBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKipcbiAgICogSG9yaXpvbnRhbCBub2RlOiBcIitcIiBu4bqxbSBnaeG7r2EgxJHGsOG7nW5nIGxpbmUgbuG7kWkgMiBub2RlIOKAlCBjxINuIGdp4buvYSBZIGPhu6dhIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGNhbGNEcm9wWm9uZVRvcE5vZGVIKGVsOiBJRGlhZ3JhbUVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IGNlbnRlclkgPSAoZWwudHJhbnNsYXRlWSA/PyAwKSArIChlbC5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5IRUlHSFRfRUxFTUVOVF9ERUZBVUxUKSAvIDI7XG4gICAgcmV0dXJuIGNlbnRlclkgLSBEIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdE5vZGVIKGVsOiBJRGlhZ3JhbUVsZW1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IE0gPSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ7XG4gICAgY29uc3Qgb2MgPSBlbC5ub2RlT3RoZXJDb25maWc7XG5cbiAgICBpZiAob2MpIHtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gKG9jLnNwZWNpZmljX3ggPz8gMCkgKyAob2Muc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCk7XG4gICAgICByZXR1cm4gcmlnaHQgKyBNIC8gMiAtIEQgLyAyO1xuICAgIH1cblxuICAgIGNvbnN0IHJpZ2h0ID0gKGVsLnRyYW5zbGF0ZVggPz8gMCkgKyAoZWwuc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XSURUSF9FTEVNRU5UX0RFRkFVTFQpO1xuICAgIC8vIE1pZHBvaW50IGPhu6dhIGtob+G6o25nIHRy4buRbmcgZ2nhu69hIG5vZGUgdsOgIG5vZGUgdGnhur9wIHRoZW8gKGdhcCA9IEVMRU1FTlRfTUFSR0lOX0RFRkFVTFQpXG4gICAgcmV0dXJuIHJpZ2h0ICsgTSAvIDIgLSBEIC8gMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIGJyYW5jaDogXCIrXCIgbuG6sW0gY8SDbiBnaeG7r2EgWSBj4bunYSBicmFuY2ggbGluZSwgc2F1IHBo4bqnbiB04butIGN14buRaSB0cm9uZyBuaMOhbmguXG4gICAqL1xuICBwcml2YXRlIGNhbGNEcm9wWm9uZVRvcEJyYW5jaEgoZWw6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIC8vIHNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID0gdMOibSBZIGPhu6dhIMSRxrDhu51uZyBuaMOhbmhcbiAgICBjb25zdCBjZW50ZXJZID0gYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID8/IDA7XG4gICAgcmV0dXJuIGNlbnRlclkgLSBEIC8gMjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0Ryb3Bab25lTGVmdEJyYW5jaEgoZWw6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gpOiBudW1iZXIge1xuICAgIGNvbnN0IEQgPSBjYW52YXNDb25maWdSZWFkb25seSgpLkFERF9JQ09OX0RJQU1FVEVSO1xuICAgIGNvbnN0IE0gPSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ7XG5cbiAgICAvLyBTYXUgbm9kZU90aGVyQ29uZmlnIGPhu6dhIG5ow6FuaCAoY+G7lSBuaMOhbmgpXG4gICAgY29uc3Qgb2MgPSBicmFuY2gubm9kZU90aGVyQ29uZmlnO1xuICAgIGlmIChvYz8uc3BlY2lmaWNfeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gKG9jLnNwZWNpZmljX3ggPz8gMCkgKyAob2Muc3BlY2lmaWNfd2lkdGggPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyBNIC8gMiAtIEQgLyAyO1xuICAgIH1cbiAgICAvLyBO4bq/dSBuaMOhbmgga2jDtG5nIGPDsyBub2RlT3RoZXJDb25maWc6IMSR4bq3dCBzYXUgxJFp4buDbSBy4bq9IG5ow6FuaFxuICAgIHJldHVybiAoYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ID8/IDApICsgTSAvIDIgLSBEIC8gMjtcbiAgfVxufVxuIl19