el-text-editor 0.0.67 → 0.0.68

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.
@@ -24,6 +24,7 @@ export class ElTextEditorComponent {
24
24
  this.imageEdit2 = new EventEmitter();
25
25
  this.placeHolderRemove = new EventEmitter();
26
26
  this.isOpen = new EventEmitter();
27
+ this.newImageAdded = new EventEmitter();
27
28
  this.value = '';
28
29
  this.showToolbar = false;
29
30
  this.toolbarTop = 0;
@@ -895,6 +896,7 @@ export class ElTextEditorComponent {
895
896
  const imgHTML = imgWidth > editorWidth
896
897
  ? `<img src="${img.src}" style="width: 100%; max-width: ${editorWidth}px; height: auto;">`
897
898
  : `<img src="${img.src}" style="width: ${imgWidth}px; height: auto;">`;
899
+ this.newImageAdded.emit();
898
900
  // Insert the image into the editor
899
901
  document.execCommand('insertHTML', false, imgHTML);
900
902
  };
@@ -1599,7 +1601,7 @@ export class ElTextEditorComponent {
1599
1601
  }
1600
1602
  }
1601
1603
  ElTextEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ElTextEditorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.Renderer2 }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
1602
- ElTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ElTextEditorComponent, selector: "text-editor", inputs: { editorText: "editorText", editorFrom: "editorFrom", editorAction: "editorAction", UserRole: "UserRole", style: "style", disableToolbar: "disableToolbar", placeHolder: "placeHolder", reportId: "reportId", backgroundImage: "backgroundImage", toolbarMode: "toolbarMode", value: "value" }, outputs: { editorTextChange: "editorTextChange", editorActionResponse: "editorActionResponse", editorTextClear: "editorTextClear", imageEdit: "imageEdit", imageEdit2: "imageEdit2", placeHolderRemove: "placeHolderRemove", isOpen: "isOpen" }, providers: [{
1604
+ ElTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ElTextEditorComponent, selector: "text-editor", inputs: { editorText: "editorText", editorFrom: "editorFrom", editorAction: "editorAction", UserRole: "UserRole", style: "style", disableToolbar: "disableToolbar", placeHolder: "placeHolder", reportId: "reportId", backgroundImage: "backgroundImage", toolbarMode: "toolbarMode", value: "value" }, outputs: { editorTextChange: "editorTextChange", editorActionResponse: "editorActionResponse", editorTextClear: "editorTextClear", imageEdit: "imageEdit", imageEdit2: "imageEdit2", placeHolderRemove: "placeHolderRemove", isOpen: "isOpen", newImageAdded: "newImageAdded" }, providers: [{
1603
1605
  provide: NG_VALUE_ACCESSOR,
1604
1606
  useExisting: forwardRef(() => ElTextEditorComponent),
1605
1607
  multi: true
@@ -1645,6 +1647,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1645
1647
  type: Output
1646
1648
  }], isOpen: [{
1647
1649
  type: Output
1650
+ }], newImageAdded: [{
1651
+ type: Output
1648
1652
  }], value: [{
1649
1653
  type: Input
1650
1654
  }], TextEditor: [{
@@ -1654,4 +1658,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1654
1658
  type: ViewChild,
1655
1659
  args: ['fullscreen']
1656
1660
  }] } });
1657
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWwtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZWwtdGV4dC1lZGl0b3Ivc3JjL2xpYi9lbC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lbC10ZXh0LWVkaXRvci9zcmMvbGliL2VsLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ3RLLE9BQU8sRUFBcUMsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU10Rix5R0FBeUc7QUFDekcsT0FBTyxFQUFFLFFBQVEsRUFBYyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFhakQsTUFBTSxPQUFPLHFCQUFxQjtJQWtGaEMsWUFDVSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsUUFBbUIsRUFDbkIsU0FBdUI7UUFIdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQXBGeEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQVN4QixnQkFBVyxHQUFnQyxPQUFPLENBQUM7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9DLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFB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RSxDQUFDLHFCQUFxQixDQUFDO1lBQ3BELEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxvUENuQkosb3RsQ0FxZU07MkZEaGRPLHFCQUFxQjtrQkFWakMsU0FBUzsrQkFDRSxhQUFhLGFBR1YsQ0FBQzs0QkFDWixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQzs2S0FJTyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUVFLEtBQUs7c0JBQWIsS0FBSztnQkFHbUIsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNFLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG4vLyBpbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOZ3hGdWxsc2NyZWVuRGlyZWN0aXZlIH0gZnJvbSAnQHVsdGltYXRlL25neC1mdWxsc2NyZWVuJztcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XG4vLyBpbXBvcnQgeyBJbWFnZUVkaXRvck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWxzL2ltYWdlLWVkaXRvci1tb2RhbC9pbWFnZS1lZGl0b3ItbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbXByZXNzLCBkZWNvbXByZXNzIH0gZnJvbSAnbHotc3RyaW5nJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXh0LWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbC10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VsLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVsVGV4dEVkaXRvckNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgRWxUZXh0RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgZWRpdG9yVGV4dDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVkaXRvckZyb206IGFueTtcbiAgQElucHV0KCkgZWRpdG9yQWN0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIFVzZXJSb2xlOiBhbnk7XG4gIEBJbnB1dCgpIHN0eWxlOiBhbnk7XG4gIEBJbnB1dCgpIGRpc2FibGVUb29sYmFyOiBhbnk7XG4gIEBJbnB1dCgpIHBsYWNlSG9sZGVyOiBhbnk7XG4gIEBJbnB1dCgpIHJlcG9ydElkOiBhbnk7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRJbWFnZTogYW55O1xuICBASW5wdXQoKSB0b29sYmFyTW9kZTogJ2ZpeGVkJyB8ICdidWJibGUnIHwgJ25vbmUnID0gJ2ZpeGVkJztcbiAgQE91dHB1dCgpIGVkaXRvclRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGVkaXRvckFjdGlvblJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBlZGl0b3JUZXh0Q2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGltYWdlRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaW1hZ2VFZGl0MiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGxhY2VIb2xkZXJSZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGlzT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIFxuICBAVmlld0NoaWxkKCd0ZXh0RWRpdG9yJykgVGV4dEVkaXRvciE6ICBFbGVtZW50UmVmPEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdmdWxsc2NyZWVuJykgZnVsbHNjcmVlbiE6IE5neEZ1bGxzY3JlZW5EaXJlY3RpdmVcbiAgICBcbiAgc2FuaXRpemVkQ29udGVudCE6IFNhZmVIdG1sO1xuXG5cbiAgc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgdG9vbGJhclRvcCA9IDA7XG4gIHRvb2xiYXJMZWZ0ID0gMDtcblxuICBmb250cyA9IFsnQXJpYWwnLCAnQ291cmllciBOZXcnLCAnR2VvcmdpYScsICdUaW1lcyBOZXcgUm9tYW4nLCAnVmVyZGFuYSddO1xuICBmb250U2l6ZXMgPSBbMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjQsIDI4LCAzMiwgMzZdO1xuICBzZWxlY3RlZEZvbnQgPSAnQXJpYWwnO1xuICBzZWxlY3RlZEZvbnRTaXplID0gMTQ7XG4gIGlzVGFibGVTZWxlY3RlZCA9IGZhbHNlO1xuICB0YWJsZUFkZGVkID0gZmFsc2U7XG4gIHNlbGVjdGVkVGFibGU6IEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgaXNQbGFjZWhvbGRlclZpc2libGUgPSB0cnVlO1xuICBzZWxlY3RlZENlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIFxuICBpc0JvbGRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJdGFsaWNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVbmRlcmxpbmVBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTdHJpa2V0aHJvdWdoQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3Vic2NyaXB0QWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3VwZXJzY3JpcHRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzZWxlY3RlZEZvcm1hdEJsb2NrOiBzdHJpbmcgPSAnbm9ybWFsJ1xuXG4gIHNlbGVjdGVkSW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgaW1hZ2VFZGl0VXJsOiBzdHJpbmcgPSAnJztcbiAgaW1hZ2VQb3NpdGlvblggPSAwO1xuICBpbWFnZVBvc2l0aW9uWSA9IDA7XG4gIGltYWdlUmVzaXplU3RhcnRYID0gMDtcbiAgaW1hZ2VSZXNpemVTdGFydFkgPSAwO1xuICBpbWFnZVJlc2l6ZVN0YXJ0V2lkdGggPSAwO1xuICBpbWFnZVJlc2l6ZVN0YXJ0SGVpZ2h0ID0gMDtcbiAgaW1hZ2VSZXNpemVEaXJlY3Rpb246ICd0b3BMZWZ0JyB8ICd0b3BSaWdodCcgfCAnYm90dG9tTGVmdCcgfCAnYm90dG9tUmlnaHQnIHwgbnVsbCA9IG51bGw7XG5cbiAgdW5kb1N0YWNrOiBzdHJpbmdbXSA9IFtdO1xuICByZWRvU3RhY2s6IHN0cmluZ1tdID0gW107XG4gIGhpc3Rvcnk6IHN0cmluZ1tdID0gW107XG4gIGhpc3RvcnlJbmRleCA9IC0xO1xuICAvLyBlZGl0b3JUZXh0MSA9IGBgO1xuICBzZWxlY3RlZFRleHRDb2xvcjogYW55O1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG4gIGNvbG9yOiBhbnkgPSAnI2RkZCc7XG4gIGNvbG9yRm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcbiAgYmFja2dyb3VuZENvbG9yOiBhbnk7XG4gIHNlbGVjdGVkSXRlbUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBwYXJzZWRUYWJsZTogeyBoZWFkZXJzOiBzdHJpbmdbXSwgcm93czogc3RyaW5nW11bXSB9IHwgbnVsbCA9IG51bGw7XG5cbiAgaXNGdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIGN1cnJlbnRDYXJldFBvc2l0aW9uOiBhbnk7XG4gIHVzZXJSb2xlOiBhbnlbXSA9IFtdO1xuICBzaG93RWRpdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICkge1xuICAgIHRoaXMuZ2V0VXNlclJvbGVzKClcblxuICAgIFxuICB9XG5cbiAgdGhlbWVNb2RlKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcycHggc29saWQgIzQwM0Y0QSAhaW1wb3J0YW50J1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjRDBEMEQwICFpbXBvcnRhbnQnXG4gICAgfVxuICB9XG5cbiAgdGhlbWVNb2RlQ2xyKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcjZmZmICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnIzAwMCAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZUNsclZlcnRpY2FsTGluZSgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICNGRkZGRkYgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcycHggc29saWQgI0QwRDBEMCAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZUJnQ2xyKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcjMjgyODI4ICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnI0YzRjNGMyAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZUJvcmRlclRvcCgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICMwMDAgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcycHggc29saWQgI2ZmZiAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3BsYWNlSG9sZGVyJ10pIHtcbiAgICAgIHRoaXMuaW5zZXJ0QXRDYXJldCh0aGlzLnBsYWNlSG9sZGVyKVxuXG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3JlcG9ydElkJ10pIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3JlcG9ydElkJywgdGhpcy5yZXBvcnRJZClcbiAgICB9IFxuXG4gICAgaWYgKGNoYW5nZXNbJ1VzZXJSb2xlJ10pIHsgXG4gICAgICB0aGlzLmdldFVzZXJSb2xlcygpXG4gICAgfVxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmluaXRFZGl0b3IoKTtcbiAgICB0aGlzLmNoZWNrUGxhY2Vob2xkZXIoKTtcbiAgICB0aGlzLnNldHVwSGlzdG9yeSgpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCB0aGlzLm9uRnVsbHNjcmVlbkNoYW5nZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRfRnVuYyh0aGlzLmVkaXRvclRleHQpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja0FjdGl2ZVN0YXRlcygpO1xuICAgICAgdGhpcy5jaGVja0Zvcm1hdEJsb2NrKCk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKTtcbiAgICB0aGlzLmFkZENsaWNrTGlzdGVuZXJUb0VsZW1lbnRzKCk7XG4gICAgLy8gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHBhcmFtc1snZGF0YSddKTtcbiAgICAvLyAgIGlmIChkYXRhLmVkaXRlZElNRykge1xuICAgIC8vICAgICBjb25zdCBpbWdVcmwgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcpO1xuICAgIC8vICAgICBpZiAoaW1nVXJsKSB7XG4gICAgLy8gICAgICAgdGhpcy5yZXBsYWNlSW1hZ2VTcmMoaW1nVXJsLCBkYXRhLmluZGV4LmluZGV4KVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgfVxuXG4gICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBDbGVhbnVwIHRoZSBldmVudCBsaXN0ZW5lciB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMub25GdWxsc2NyZWVuQ2hhbmdlKTtcbiAgfVxuXG4gIElzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgdG9nZ2xlRnVsbHNjcmVlbjEoKSB7XG4gICAgICB0aGlzLklzT3BlbiA9ICF0aGlzLklzT3BlbjtcbiAgICAgIHRoaXMuaXNPcGVuLmVtaXQodGhpcy5Jc09wZW4pXG4gICAgICBpZiAodGhpcy5Jc09wZW4pIHsgXG4gICAgICAgIHRoaXMuZnVsbHNjcmVlbi5lbnRlcih0aGlzLlRleHRFZGl0b3IubmF0aXZlRWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZ1bGxzY3JlZW4uZXhpdCgpXG4gICAgICB9XG4gICAgfVxuICBcbiAgcHJpdmF0ZSBvbkZ1bGxzY3JlZW5DaGFuZ2UgPSAoKSA9PiB7XG4gICAgaWYgKCFkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCkge1xuICAgICAgLy8gV2hlbiBmdWxsc2NyZWVuIG1vZGUgaXMgZXhpdGVkXG4gICAgICB0aGlzLklzT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5pc09wZW4uZW1pdCh0aGlzLklzT3Blbik7XG4gICAgfVxuICB9O1xuICBcbiAgLy8gZW50ZXJGdWxsc2NyZWVuVmlkZW8oKSB7XG4gIC8vICAgY29uc29sZS5sb2coJ2V2ZW50OicsIGV2ZW50KTtcbiAgLy8gICBjb25zdCBmdWxsc2NyZWVuID0gZXZlbnQ7XG4gIC8vICAgdGhpcy5pc09wZW4gPSBldmVudDtcbiAgLy8gICBpZiAoZnVsbHNjcmVlbikge1xuICAvLyAgICAgdGhpcy5mdWxsc2NyZWVuLmVudGVyKHRoaXMuVGV4dEVkaXRvci5uYXRpdmVFbGVtZW50KTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5mdWxsc2NyZWVuLmV4aXQoKVxuICAvLyAgIH1cbiAgICBcbiAgLy8gfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvclRleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuICAgICAgdGhpcy5pbml0X0Z1bmModGhpcy5lZGl0b3JUZXh0KTtcbiAgICB9XG4gIH1cbiAgXG4vLyAgcHJpdmF0ZSBhZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKSB7XG4vLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbi8vICAgaWYgKGVkaXRvcikge1xuLy8gICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuLy8gICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuLy8gICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbi8vICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuXG4vLyAgICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLnNlbGVjdGVkSW1hZ2UucGFyZW50RWxlbWVudDtcbi8vICAgICAgICAgaWYgKCFjb250YWluZXIgfHwgY29udGFpbmVyLmNsYXNzTmFtZSAhPT0gJ2ltYWdlLWNvbnRhaW5lcicpIHtcbi8vICAgICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbi8vICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2ltYWdlLWNvbnRhaW5lcic7XG4vLyAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbi8vICAgICAgICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuLy8gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCB0aGlzLnNlbGVjdGVkSW1hZ2UpO1xuLy8gICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGVkSW1hZ2UpO1xuLy8gICAgICAgICB9XG4vLyAgICAgICAgIGNvbnN0IGV4aXN0aW5nQnV0dG9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xuLy8gICAgICAgICBpZiAoZXhpc3RpbmdCdXR0b24pIHtcbi8vICAgICAgICAgICBleGlzdGluZ0J1dHRvbi5yZW1vdmUoKTtcbi8vICAgICAgICAgfVxuXG4vLyAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuLy8gICAgICAgICAvLyBidXR0b24udGV4dENvbnRlbnQgPSAnRWRpdCc7XG4vLyAgICAgICAgIGJ1dHRvbi5pbm5lclRleHQgPSAnRWRpdCBJbWFnZSc7XG5cbi8vICAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdpbWFnZS1lZGl0LWJ1dHRvbiBidG4gYnRuLXNtJztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9ICc1MCUnO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9ICc1MCUnO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKSc7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS56SW5kZXggPSAnMTAwMCc7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZic7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICNmZmYnO1xuLy8gICAgICAgICAvLyBidXR0b24uc3R5bGUucGFkZGluZyA9ICcxMHB4Jztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmNvbG9yID0gJyMzMTNhNDYnO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuXG4vLyAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4vLyAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbi8vICAgICAgICAgICB0aGlzLmVkaXRJbWFnZSgpO1xuLy8gICAgICAgICB9KTtcblxuLy8gICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbi8vICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4vLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xuLy8gICAgICAgfVxuLy8gICAgIH0pO1xuLy8gICB9XG4gIC8vIH1cbiAgZ2V0VXNlclJvbGVzKCkge1xuICAgIHRoaXMudXNlclJvbGUgPSB0aGlzLlVzZXJSb2xlXG4gIH1cbiAgLy8gcm9sZUNoZWNrKCkge1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy51c2VyUm9sZS5sZW5ndGg7ICsraSkge1xuICAvLyAgICAgY29uc3Qgcm9sZU5hbWUgPSBbXVxuICAvLyAgICAgICByb2xlTmFtZS5wdXNoKHRoaXMudXNlclJvbGVbaV0/Lm5hbWUpO1xuICAvLyAgICAgcmV0dXJuIHRoaXMudXNlclJvbGVbaV0/Lm5hbWU7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcm9sZUNoZWNrKCkge1xuICAgIGxldCB1c2VyUm9sZU5hbWU6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gdGhpcy51c2VyUm9sZS5sZW5ndGg7ICsraSkge1xuICAgICAgdXNlclJvbGVOYW1lLnB1c2godGhpcy51c2VyUm9sZVtpXT8ubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB1c2VyUm9sZU5hbWU7XG4gIH1cblxuXG4vLyBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcbi8vICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuLy8gICBjb25zdCByb2xlcyA9IHRoaXMucm9sZUNoZWNrKCk7IC8vIEdldCB1c2VyIHJvbGVzIGR5bmFtaWNhbGx5XG4vLyAgIGNvbnN0IGlzQWRtaW4gPSByb2xlcy5pbmNsdWRlcygnQWRtaW4nKTtcbi8vICAgY29uc3QgaXNDcmVhdG9yID0gcm9sZXMuaW5jbHVkZXMoJ0NyZWF0b3InKTtcbi8vICAgY29uc3QgaXNBcHByb3ZlciA9IHJvbGVzLmluY2x1ZGVzKCdBcHByb3ZlcicpO1xuICBcbi8vICAgaWYgKGlzQ3JlYXRvciB8fCBpc0FkbWluKSB7XG4vLyAgICAgaWYgKGVkaXRvcikge1xuLy8gICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuLy8gICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuLy8gICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbi8vICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuLy8gICAgICAgICBsZXQgY29udGFpbmVyID0gdGhpcy5zZWxlY3RlZEltYWdlLnBhcmVudEVsZW1lbnQ7XG4vLyAgICAgICAgIGlmICghY29udGFpbmVyIHx8IGNvbnRhaW5lci5jbGFzc05hbWUgIT09ICdpbWFnZS1jb250YWluZXInKSB7XG4vLyAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4vLyAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICdpbWFnZS1jb250YWluZXInO1xuLy8gICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4vLyAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsgIFxuLy8gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCB0aGlzLnNlbGVjdGVkSW1hZ2UpO1xuLy8gICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGVkSW1hZ2UpO1xuLy8gICAgICAgICB9XG5cbi8vICAgICAgICAgY29uc3QgZXhpc3RpbmdCdXR0b24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmltYWdlLWVkaXQtYnV0dG9uJyk7XG4vLyAgICAgICAgIGlmIChleGlzdGluZ0J1dHRvbikge1xuLy8gICAgICAgICAgIGV4aXN0aW5nQnV0dG9uLnJlbW92ZSgpO1xuLy8gICAgICAgICB9XG5cbi8vICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCAgPSAnRWRpdCBJbWFnZSc7XG4vLyAgICAgICAgIGJ1dHRvbi5jbGFzc05hbWUgPSAnaW1hZ2UtZWRpdC1idXR0b24gYnRuIGJ0bi1zbSc7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSAnNTAlJztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSAnNTAlJztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUuekluZGV4ID0gJzEwMDAnO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmYnOyBcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmJvcmRlciA9ICcycHggc29saWQgI2ZmZic7IFxuLy8gICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAnIzMxM2E0Nic7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xuXG4vLyAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4vLyAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbi8vICAgICAgICAgICB0aGlzLmVkaXRJbWFnZSgpO1xuLy8gICAgICAgICB9KTtcblxuLy8gICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuLy8gICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IG51bGw7XG4vLyAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW1hZ2UtZWRpdC1idXR0b24nKTtcbi8vICAgICAgICAgYnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiBidXR0b24ucmVtb3ZlKCkpO1xuLy8gICAgICAgfVxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyAgIH1cbiAgLy8gfVxuICBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICBjb25zdCByb2xlcyA9IHRoaXMucm9sZUNoZWNrKCk7IC8vIEdldCB1c2VyIHJvbGVzIGR5bmFtaWNhbGx5XG4gIGNvbnN0IGlzQWRtaW4gPSByb2xlcy5pbmNsdWRlcygnQWRtaW4nKTtcbiAgY29uc3QgaXNDcmVhdG9yID0gcm9sZXMuaW5jbHVkZXMoJ0NyZWF0b3InKTtcblxuICBpZiAoaXNDcmVhdG9yIHx8IGlzQWRtaW4pIHtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTUcnKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuXG4gICAgICAgICAgbGV0IGNvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIGlmICghY29udGFpbmVyIHx8IGNvbnRhaW5lci5jbGFzc05hbWUgIT09ICdpbWFnZS1jb250YWluZXInKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnaW1hZ2UtY29udGFpbmVyJztcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShjb250YWluZXIsIHRoaXMuc2VsZWN0ZWRJbWFnZSk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3RlZEltYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdGluZ0J1dHRvbiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuaW1hZ2UtZWRpdC1idXR0b24nKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdCdXR0b24pIHtcbiAgICAgICAgICAgIGV4aXN0aW5nQnV0dG9uLnJlbW92ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdFZGl0IEltYWdlJztcbiAgICAgICAgICBidXR0b24uY2xhc3NOYW1lID0gJ2ltYWdlLWVkaXQtYnV0dG9uIGJ0biBidG4tc20nO1xuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9ICc1MCUnO1xuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gJzUwJSc7XG4gICAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknO1xuICAgICAgICAgIGJ1dHRvbi5zdHlsZS56SW5kZXggPSAnMTAwMCc7XG4gICAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmJztcbiAgICAgICAgICBidXR0b24uc3R5bGUuYm9yZGVyID0gJzJweCBzb2xpZCAjZmZmJztcbiAgICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAnIzMxM2E0Nic7XG4gICAgICAgICAgYnV0dG9uLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICBidXR0b24uc3R5bGUudXNlclNlbGVjdCA9ICdub25lJztcblxuICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5lZGl0SW1hZ2UoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRWRpdEJ1dHRvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE1vbml0b3IgZWRpdG9yIGNvbnRlbnQgY2hhbmdlcyB0byBoYW5kbGUgaW1hZ2UgZGVsZXRpb25cbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBidXR0b25zID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xuICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGJ1dHRvbi5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIGlmIChjb250YWluZXIgJiYgIWNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xuICAgICAgICAgICAgYnV0dG9uLnJlbW92ZSgpOyAvLyBSZW1vdmUgdGhlIGJ1dHRvbiBpZiB0aGUgYXNzb2NpYXRlZCBpbWFnZSBpcyBnb25lXG4gICAgICAgICAgICBjb250YWluZXIucmVtb3ZlKCk7IC8vIENsZWFuIHVwIHRoZSBjb250YWluZXJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE9ic2VydmUgY2hhbmdlcyBpbiB0aGUgZWRpdG9yXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGVkaXRvciwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbnByaXZhdGUgcmVtb3ZlRWRpdEJ1dHRvbnMoKSB7XG4gIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW1hZ2UtZWRpdC1idXR0b24nKTtcbiAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IGJ1dHRvbi5yZW1vdmUoKSk7XG4gIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xufVxuXG5cbiAgLy8gcHJpdmF0ZSBhZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKSB7XG4gIC8vIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgLy8gaWYgKGVkaXRvcikge1xuICAvLyAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAvLyAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAvLyAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgLy8gICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuXG4gIC8vICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGltYWdlXG4gIC8vICAgICAgIGNvbnN0IGltYWdlcyA9IGVkaXRvci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XG4gIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgICAgaWYgKGltYWdlc1tpXSA9PT0gdGhpcy5zZWxlY3RlZEltYWdlKSB7XG4gIC8vICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcbiAgLy8gICAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xuICAvLyAgICAgICAgIHRoaXMub25UZXh0U2VsZWN0KCk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuICAvLyB9XG4gIC8vIH1cbiAgXG4gIHByaXZhdGUgYWRkQ2xpY2tMaXN0ZW5lclRvRWxlbWVudHMoKSB7XG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpbWFnZXNbaV0gPT09IHRoaXMuc2VsZWN0ZWRJbWFnZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGFyZ2V0LmNsb3Nlc3QoJ3RhYmxlJykgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnNlbGVjdGVkVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFyZ2V0LnRhZ05hbWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNlbGxzW2ldID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdQJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1NQQU4nIHx8IHRhcmdldC50YWdOYW1lID09PSAnRElWJykge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhcmdldC50YWdOYW1lKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhZ3JhcGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBhcmFncmFwaHNbaV0gPT09IHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICB9XG5cbnJlcGxhY2VJbWFnZVNyYyhuZXdTcmM6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIFxuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLmZvY3VzKClcbiAgICBjb25zdCBpbWFnZXMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0lNRycpO1xuICAgIGlmIChpbmRleCA+PSAwICkge1xuICAgICAgaW1hZ2VzW2luZGV4XS5zZXRBdHRyaWJ1dGUoJ3NyYycsIG5ld1NyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgSW5kZXggJHtpbmRleH0gaXMgb3V0IG9mIGJvdW5kcy4gVG90YWwgaW1hZ2VzOiAke2ltYWdlcy5sZW5ndGh9YCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZCcpO1xuICB9XG59XG5cblxuXG4gIHByaXZhdGUgaW5pdEVkaXRvcigpIHtcbiAgICAvLyBJbml0aWFsaXplIGVkaXRvciBjb250ZW50IGFuZCBsaXN0ZW5lcnNcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG5cbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5lZGl0b3JUZXh0O1xuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgdGhlIGRpc2FibGVkIHN0YXRlIGlmIG5lY2Vzc2FyeVxuICB9XG5cbiAgb25Nb2RlbENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBWQUxVRSA9IHZhbHVlXG4gICAgICB0aGlzLmVkaXRvclRleHQgPSBWQUxVRTtcbiAgICAgIHRoaXMub25DaGFuZ2UoVkFMVUUpO1xuICAgICAgdGhpcy5lZGl0b3JUZXh0Q2hhbmdlLmVtaXQoVkFMVUUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5SW1hZ2VTdHlsZXMoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gY29udGVudDtcbiAgICBjb25zdCBpbWFnZXMgPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnaW1nJyk7XG4gICAgaW1hZ2VzLmZvckVhY2goaW1nID0+IHtcbiAgICAgIGlmIChpbWcuc3R5bGUubWF4V2lkdGggPj0gJzcwMHB4Jykge1xuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnNzAwcHgnO1xuICAgICAgICAvLyBpbWcud2lkdGggPSAzMDA7XG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICAvLyBpbml0X0Z1bmMoaHRtbDogYW55KSB7XG4gIC8vICAgaWYgKGh0bWwpIHtcbiAgLy8gICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIC8vICAgICBpZiAoZWRpdG9yKSB7IFxuICAvLyAgICAgICBlZGl0b3IuZm9jdXMoKVxuICAvLyAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gaHRtbDtcbiAgLy8gICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5hcHBseUltYWdlU3R5bGVzKGh0bWwpKTtcbiAgLy8gICAgICAgZWRpdG9yLmlubmVySFRNTCA9IHRoaXMuc2FuaXRpemVkQ29udGVudCBhcyBzdHJpbmc7XG4gIC8vICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgLy8gICAgICAgICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICAgICAgICBlZGl0b3IuZm9jdXMoKVxuICAvLyAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGVkaXRvci5pbm5lckhUTUwpO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIC8vICAgfVxuICAvLyB9XG4gIFxuLy8gICBpbml0X0Z1bmMoaHRtbDogYW55KSB7XG4vLyAgIGlmIChodG1sKSB7XG4vLyAgICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbi8vICAgICBpZiAoZWRpdG9yKSB7XG4vLyAgICAgICAvLyBJbml0aWFsaXplIHRoZSBlZGl0b3Igd2l0aCBzYW5pdGl6ZWQgY29udGVudFxuICAgICAgXG4vLyAgICAgICB0aGlzLnNldEVkaXRvckNvbnRlbnQoaHRtbCk7XG5cbi8vICAgICAgIC8vIFNldCB1cCBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gaGFuZGxlIGNvbnRlbnQgY2hhbmdlc1xuLy8gICAgICAgdGhpcy5zZXR1cE11dGF0aW9uT2JzZXJ2ZXIoZWRpdG9yKTtcblxuLy8gICAgICAgLy8gTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCBhZnRlciBpbml0aWFsIGNvbnRlbnQgc2V0dXBcbi8vICAgICAgIHRoaXMubW92ZUNhcmV0VG9FbmQoZWRpdG9yKTtcblxuLy8gICAgICAgLy8gVHJhY2sgY2FyZXQgcG9zaXRpb24gb24gbW91c2UgY2xpY2tcbi8vICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbi8vICAgICAgICAgaWYgKGVkaXRvcikgeyAgLy8gRW5zdXJlIGVkaXRvciBpcyBub3QgbnVsbFxuLy8gICAgICAgICAgIC8vIHRoaXMudHJhY2tDYXJldFBvc2l0aW9uKGVkaXRvcik7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pO1xuLy8gICAgIH1cbi8vICAgfSBlbHNlIHtcbi8vICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuLy8gICB9XG4vLyB9XG5cbi8vIHByaXZhdGUgc2V0RWRpdG9yQ29udGVudChodG1sOiBzdHJpbmcpIHtcbi8vICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbi8vICAgaWYgKGVkaXRvcikge1xuLy8gICAgIC8vIFNhbml0aXplIGFuZCBhcHBseSBzdHlsZXMgdG8gdGhlIEhUTUxcbi8vICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xuLy8gICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLnNhbml0aXplZENvbnRlbnQgYXMgc3RyaW5nO1xuLy8gICB9XG4vLyB9XG5cbi8vIHByaXZhdGUgc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcbi8vICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4vLyAgICAgLy8gVXBkYXRlIG1vZGVsIHdpdGggdGhlIGN1cnJlbnQgY29udGVudFxuLy8gICAgIHRoaXMub25Nb2RlbENoYW5nZShlZGl0b3IuaW5uZXJIVE1MKTtcbi8vICAgfSk7XG5cbi8vICAgb2JzZXJ2ZXIub2JzZXJ2ZShlZGl0b3IsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuLy8gfVxuXG4vLyBUaGlzIGZ1bmN0aW9uIHRyYWNrcyB0aGUgY2FyZXQgcG9zaXRpb24gYmFzZWQgb24gdGhlIG1vdXNlIGNsaWNrXG5wcml2YXRlIHRyYWNrQ2FyZXRQb3NpdGlvbihlZGl0b3I6IEhUTUxFbGVtZW50KSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG5cblxuICAgIC8vIFlvdSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gaW5zZXJ0IGNvbnRlbnQgb3IgcGVyZm9ybSBhY3Rpb25zIGJhc2VkIG9uIHRoZSBjYXJldCBwb3NpdGlvblxuICAgIC8vIEV4YW1wbGU6IFNhdmUgdGhlIGN1cnJlbnQgY2FyZXQgcG9zaXRpb24gZm9yIGZ1dHVyZSB1c2VcbiAgICB0aGlzLmN1cnJlbnRDYXJldFBvc2l0aW9uID0geyBub2RlOiBzdGFydE5vZGUsIG9mZnNldDogc3RhcnRPZmZzZXQgfTtcbiAgfVxuICB9XG4gIFxuICAvLyBNZXRob2QgdG8gZ2V0IGNhcmV0IHBvc2l0aW9uIGFuZCBpbnNlcnQgbmV3IGRhdGFcbnByaXZhdGUgaW5zZXJ0QXRDYXJldChuZXdEYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBcbiAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcmFuZ2UgKGNhcmV0IHBvc2l0aW9uKVxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgICAvLyBDcmVhdGUgYSBkb2N1bWVudCBmcmFnbWVudCB0byBpbnNlcnQgKGFsbG93cyBoYW5kbGluZyBIVE1MIHN0cmluZ3MpXG4gICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gbmV3RGF0YTtcblxuICAgIC8vIEFwcGVuZCB0aGUgbmV3IGRhdGEgdG8gdGhlIGZyYWdtZW50IChzdXBwb3J0cyBIVE1MIGluc2VydGlvbilcbiAgICB3aGlsZSAodGVtcERpdi5maXJzdENoaWxkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIC8vIEluc2VydCB0aGUgZnJhZ21lbnQgYXQgdGhlIGNhcmV0IHBvc2l0aW9uXG4gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsgLy8gUmVtb3ZlIGFueSBzZWxlY3RlZCBjb250ZW50IGlmIGFwcGxpY2FibGVcbiAgICByYW5nZS5pbnNlcnROb2RlKGZyYWdtZW50KTtcblxuICAgIC8vIE1vdmUgdGhlIGNhcmV0IGFmdGVyIHRoZSBpbnNlcnRlZCBjb250ZW50XG4gICAgY29uc3QgbGFzdENoaWxkID0gZnJhZ21lbnQubGFzdENoaWxkO1xuXG4gICAgaWYgKGxhc3RDaGlsZCkge1xuICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihsYXN0Q2hpbGQpO1xuICAgICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIobGFzdENoaWxkKTtcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5tb3ZlQ2FyZXRUb0VuZChlZGl0b3IpXG4gICAgfVxuICAgIFxuICAgIHRoaXMucGxhY2VIb2xkZXJSZW1vdmUuZW1pdCgpXG4gICAgY29uc29sZS5sb2coJ05ldyBkYXRhIGluc2VydGVkIGF0IGNhcmV0LicpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdObyBjYXJldCBwb3NpdGlvbiBmb3VuZC4nKTtcbiAgfVxufVxuXG5cbi8vICAgLy8gTW92ZSBjYXJldCB0byB0aGUgZW5kIG9mIHRoZSBlZGl0b3IgY29udGVudFxuLy8gICBwcml2YXRlIG1vdmVDYXJldFRvRW5kKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcbi8vICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4vLyAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIFxuLy8gICAgIGlmIChlZGl0b3IubGFzdENoaWxkKSB7XG4vLyAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbi8vICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIGVuZFxuLy8gICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbi8vICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgXG4vLyAgICAgfVxuLy8gICB9XG4gIFxuICBcblxuXG4gIGluaXRfRnVuYyhodG1sOiBhbnkpIHtcbiAgaWYgKGh0bWwpIHtcbiAgICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGVkaXRvciB3aXRoIHNhbml0aXplZCBjb250ZW50XG4gICAgICB0aGlzLnNldEVkaXRvckNvbnRlbnQoaHRtbCk7XG5cbiAgICAgIC8vIFNldCB1cCBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gaGFuZGxlIGNvbnRlbnQgY2hhbmdlc1xuICAgICAgdGhpcy5zZXR1cE11dGF0aW9uT2JzZXJ2ZXIoZWRpdG9yKTtcbiAgICAgIFxuICAgICAgLy8gTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCBhZnRlciBpbml0aWFsIGNvbnRlbnQgc2V0dXBcbiAgICAgIHRoaXMubW92ZUNhcmV0VG9FbmQoZWRpdG9yKTtcbiAgICAgIC8vICBUcmFjayBjYXJldCBwb3NpdGlvbiBvbiBtb3VzZSBjbGlja1xuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yKSB7ICAvLyBFbnN1cmUgZWRpdG9yIGlzIG5vdCBudWxsXG4gICAgICAgICAgdGhpcy50cmFja0NhcmV0UG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIH1cbn1cblxuXG5wcml2YXRlIHNldEVkaXRvckNvbnRlbnQoaHRtbDogc3RyaW5nKSB7XG4gIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIGlmIChlZGl0b3IpIHtcbiAgICAvLyBTYW5pdGl6ZSBhbmQgYXBwbHkgc3R5bGVzIHRvIHRoZSBIVE1MXG4gICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5hcHBseUltYWdlU3R5bGVzKGh0bWwpKTtcbiAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5zYW5pdGl6ZWRDb250ZW50IGFzIHN0cmluZztcbiAgfVxufVxuXG5wcml2YXRlIHNldHVwTXV0YXRpb25PYnNlcnZlcihlZGl0b3I6IEhUTUxFbGVtZW50KSB7XG4gIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgIC8vIE1vdmUgdGhlIGNhcmV0IHRvIHRoZSBlbmQgYWZ0ZXIgY29udGVudCBjaGFuZ2VzXG4gICAgLy8gdGhpcy5tb3ZlQ2FyZXRUb0VuZChlZGl0b3IpO1xuICAgIC8vIFVwZGF0ZSBtb2RlbCB3aXRoIHRoZSBjdXJyZW50IGNvbnRlbnRcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XG4gIH0pO1xuXG4gIG9ic2VydmVyLm9ic2VydmUoZWRpdG9yLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbn1cblxucHJpdmF0ZSBtb3ZlQ2FyZXRUb0VuZChlZGl0b3I6IEhUTUxFbGVtZW50KSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBcbiAgaWYgKGVkaXRvci5sYXN0Q2hpbGQpIHtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7IC8vIENvbGxhcHNlIHRvIHRoZSBlbmRcbiAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59XG5cbi8vICAgaW5pdF9GdW5jKGh0bWw6IGFueSkge1xuLy8gICBpZiAoaHRtbCkge1xuLy8gICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4vLyAgICAgaWYgKGVkaXRvcikge1xuLy8gICAgICAgZWRpdG9yLmZvY3VzKCk7XG4vLyAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gaHRtbDtcblxuLy8gICAgICAgLy8gU2FuaXRpemUgdGhlIGNvbnRlbnQgYW5kIGFwcGx5IHN0eWxlc1xuLy8gICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5hcHBseUltYWdlU3R5bGVzKGh0bWwpKTtcbi8vICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLnNhbml0aXplZENvbnRlbnQgYXMgc3RyaW5nO1xuXG4vLyAgICAgICAvLyBQbGFjZSB0aGUgY2FyZXQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudFxuLy8gICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuLy8gICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgXG4vLyAgICAgICBpZiAoZWRpdG9yLmxhc3RDaGlsZCkge1xuLy8gICAgICAgICAvLyBTZXQgdGhlIHJhbmdlIGF0IHRoZSBlbmQgb2YgdGhlIGVkaXRvcidzIGNvbnRlbnRcbi8vICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7XG4vLyAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gY29sbGFwc2UgdG8gdGhlIGVuZFxuLy8gICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuLy8gICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbi8vICAgICAgIH1cblxuLy8gICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuLy8gICAgICAgICBpZiAoZWRpdG9yKSB7XG4vLyAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGVkaXRvci5pbm5lckhUTUwpO1xuXG4vLyAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjYXJldCByZW1haW5zIGF0IHRoZSBlbmQgYWZ0ZXIgbmV3IGNvbnRlbnQgaXMgYWRkZWRcbi8vICAgICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4vLyAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIFxuLy8gICAgICAgICAgIGlmIChlZGl0b3IubGFzdENoaWxkKSB7XG4vLyAgICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbi8vICAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gY29sbGFwc2UgdG8gdGhlIGVuZFxuLy8gICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbi8vICAgICAgICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgfVxuLy8gICAgICAgfSk7XG4vLyAgICAgfVxuLy8gICB9IGVsc2Uge1xuLy8gICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4vLyAgIH1cbi8vIH1cblxuICBmb3JtYXQoY29tbWFuZDogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIGlmIChjb21tYW5kID09PSAnc3Vic2NyaXB0Jykge1xuICAgICAgICB0aGlzLmlzU3Vic2NyaXB0QWN0aXZlID0gIXRoaXMuaXNTdWJzY3JpcHRBY3RpdmU7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdWJzY3JpcHQnLCBmYWxzZSwgJycpO1xuICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09PSAnc3VwZXJzY3JpcHQnKSB7XG4gICAgICAgIHRoaXMuaXNTdXBlcnNjcmlwdEFjdGl2ZSA9ICF0aGlzLmlzU3VwZXJzY3JpcHRBY3RpdmU7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdXBlcnNjcmlwdCcsIGZhbHNlLCAnJyk7O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlID8/ICcnKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgdGFnID0gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bPD5dL2csICcnKVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtYXRCbG9jayA9IHRoaXMuZm9ybWF0QmxvY2tEZWNvZGUodGFnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAgdGhpcy5jaGVja0FjdGl2ZVN0YXRlcygpO1xuICAgICB0aGlzLmNoZWNrRm9ybWF0QmxvY2soKTtcbiAgfVxuXG4gIGNoZWNrQWN0aXZlU3RhdGVzKCkge1xuICAgIHRoaXMuaXNCb2xkQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2JvbGQnKTtcbiAgICB0aGlzLmlzSXRhbGljQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2l0YWxpYycpO1xuICAgIHRoaXMuaXNVbmRlcmxpbmVBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgndW5kZXJsaW5lJyk7XG4gICAgdGhpcy5pc1N0cmlrZXRocm91Z2hBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3RyaWtldGhyb3VnaCcpO1xuICAgIHRoaXMuaXNTdWJzY3JpcHRBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3Vic2NyaXB0Jyk7XG4gICAgdGhpcy5pc1N1cGVyc2NyaXB0QWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ3N1cGVyc2NyaXB0Jyk7XG4gIH1cblxuICBjaGVja0Zvcm1hdEJsb2NrKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBjb25zdCBmb3JtYXRCbG9jayA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JtYXRCbG9jaycpO1xuICAgICAgdGhpcy5zZWxlY3RlZEZvcm1hdEJsb2NrID0gdGhpcy5mb3JtYXRCbG9ja0RlY29kZShmb3JtYXRCbG9jayk7XG4gICAgICAvLyBZb3UgY2FuIGZ1cnRoZXIgaGFuZGxlIHRoZSBmb3JtYXRCbG9jayB2YWx1ZSBhcyBuZWVkZWRcbiAgICB9XG4gIH1cblxuICBmb3JtYXRCbG9ja0RlY29kZShkYXRhOiBzdHJpbmcpOiBhbnkge1xuICAgIHN3aXRjaCAoZGF0YSkge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDInOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDMnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDQnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDUnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncCc6XG4gICAgICAgIHJldHVybiAnbm9ybWFsJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ25vcm1hbCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUZvbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRGb250ID0gZXZlbnQ7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnROYW1lJywgZmFsc2UsIHRoaXMuc2VsZWN0ZWRGb250KTtcbiAgfVxuXG4gIGluc2VydENvZGVCbG9jaygpIHtcbiAgICBjb25zdCBjb2RlID0gYFxuICAgICAgPHByZSBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1wiPlxuICAgICAgICA8Y29kZSBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XG4gICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XCIgY2xhc3M9XCJsYW5ndWFnZS1odG1sXCI+SW5zZXJ0IGNvZGUgaGVyZS4uLjwvY29kZT5cbiAgICAgIDwvcHJlPlxuICAgIGA7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgY29kZSk7XG4gIH1cblxuICAvLyBjaGFuZ2VGb250U2l6ZShldmVudDogYW55KSB7XG4gIC8vICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnRTaXplJywgZmFsc2UsICc3Jyk7XG4gIC8vICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgLy8gICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICBsZXQgZm9udEVsZW1lbnRzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb250Jyk7XG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgICBpZiAoZm9udEVsZW1lbnRzW2ldLnNpemUgPT0gXCI3XCIpIHtcbiAgLy8gICAgICAgICBmb250RWxlbWVudHNbaV0ucmVtb3ZlQXR0cmlidXRlKFwic2l6ZVwiKTtcbiAgLy8gICAgICAgICBmb250RWxlbWVudHNbaV0uc3R5bGUuZm9udFNpemUgPSB0aGlzLnNlbGVjdGVkRm9udFNpemUgKyAncHgnO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG4gIGNoYW5nZUZvbnRTaXplKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZWxlY3RlZFRleHQgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgXG4gICAgaWYgKHNlbGVjdGVkVGV4dCAmJiBzZWxlY3RlZFRleHQucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3RlZFRleHQuZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IHRoaXMuc2VsZWN0ZWRGb250U2l6ZSArICdweCc7XG4gICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XG4gICAgfVxuICB9XG5cbiAgYWRkTGluaygpIHtcbiAgICBsZXQgdXJsID0gcHJvbXB0KFwiRW50ZXIgdGhlIGxpbmsgaGVyZTogXCIsIFwiaHR0cDovL1wiKTtcbiAgICBpZiAodXJsKSB7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNyZWF0ZUxpbmtcIiwgZmFsc2UsIHVybCk7XG4gICAgfVxuICB9XG5cbiAgaW5zZXJ0c0ltYWdlKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIGxldCBpbWFnZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlSW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGltYWdlSW5wdXQpIHtcbiAgICAgICAgaW1hZ2VJbnB1dC5jbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGhhbmRsZUltYWdlVXBsb2FkKGV2ZW50OiBhbnkpIHtcbiAgLy8gICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAvLyAgIGlmIChmaWxlKSB7XG4gIC8vICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAvLyAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgLy8gICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gIC8vICAgICAgIGltZy5zcmMgPSBlLnRhcmdldC5yZXN1bHQ7XG4gIC8vICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gIC8vICAgICAgICAgLy8gQ3JlYXRlIHRoZSBIVE1MIHN0cmluZyB3aXRoIHRoZSBleGFjdCB3aWR0aCBhbmQgaGVpZ2h0XG4gIC8vICAgICAgICAgY29uc3QgaW1nSFRNTCA9IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiB3aWR0aD1cIiR7Nzk0fVwiID5gO1xuICAvLyAgICAgICAgIC8vIEluc2VydCB0aGUgaW1hZ2UgaW50byB0aGUgZWRpdG9yXG4gIC8vICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgaW1nSFRNTCk7XG4gIC8vICAgICAgIH07XG4gIC8vICAgICB9O1xuICAvLyAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgaGFuZGxlSW1hZ2VVcGxvYWQoZXZlbnQ6IGFueSkge1xuICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICBjb25zdCBlZGl0b3JFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpOyAvLyBSZWZlcmVuY2UgdG8gdGhlIGVkaXRvclxuXG4gIGlmIChmaWxlICYmIGVkaXRvckVsZW1lbnQpIHtcbiAgICBjb25zdCBlZGl0b3JXaWR0aCA9IGVkaXRvckVsZW1lbnQub2Zmc2V0V2lkdGg7IC8vIEdldCB0aGUgZWRpdG9yJ3Mgd2lkdGhcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgaW1nLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDtcblxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaW1nV2lkdGggPSBpbWcud2lkdGg7XG5cbiAgICAgICAgLy8gSWYgdGhlIGltYWdlIHdpZHRoIGV4Y2VlZHMgdGhlIGVkaXRvcidzIHdpZHRoLCBmaXQgaXQgdG8gdGhlIGVkaXRvclxuICAgICAgICBjb25zdCBpbWdIVE1MID1cbiAgICAgICAgICBpbWdXaWR0aCA+IGVkaXRvcldpZHRoXG4gICAgICAgICAgICA/IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBtYXgtd2lkdGg6ICR7ZWRpdG9yV2lkdGh9cHg7IGhlaWdodDogYXV0bztcIj5gXG4gICAgICAgICAgICA6IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiBzdHlsZT1cIndpZHRoOiAke2ltZ1dpZHRofXB4OyBoZWlnaHQ6IGF1dG87XCI+YDtcblxuICAgICAgICAvLyBJbnNlcnQgdGhlIGltYWdlIGludG8gdGhlIGVkaXRvclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBpbWdIVE1MKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9XG59XG5cblxuXG4gIC8vIGFkZFRhYmxlKCkge1xuICAvLyAgIGNvbnN0IHRhYmxlV2lkdGggPSA4MjU7IC8vIFRhYmxlIHdpZHRoIGluIHBpeGVsc1xuICAvLyAgIGNvbnN0IGNvbHMgPSAzOyAvLyBOdW1iZXIgb2YgY29sdW1uc1xuICAvLyAgIGNvbnN0IGNlbGxNaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2xzOyAvLyBDYWxjdWxhdGUgbWluaW11bSB3aWR0aCBmb3IgZWFjaCBjZWxsXG5cbiAgLy8gICBsZXQgdGFibGUgPSBgPGJyIC8+PHRhYmxlIHN0eWxlPVwid2lkdGg6ICR7dGFibGVXaWR0aH1weDtcIj5gO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7IC8vIE51bWJlciBvZiByb3dzXG4gIC8vICAgICB0YWJsZSArPSAnPHRyID4nO1xuICAvLyAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgLy8gICAgICAgdGFibGUgKz0gYDx0ZCBzdHlsZT1cIiB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgbWluLXdpZHRoOiAke2NlbGxNaW5XaWR0aH1weDtcIj4mbmJzcDs8L3RkPmA7XG4gIC8vICAgICB9XG4gIC8vICAgICB0YWJsZSArPSAnPC90cj4nO1xuICAvLyAgIH1cbiAgLy8gICAgIHRhYmxlICs9ICc8L3RhYmxlPjxici8gPic7XG4gIC8vICAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCB0YWJsZSk7XG4gIC8vICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIC8vICAgaWYgKGVkaXRvcikge1xuICAvLyAgICAgZWRpdG9yLmZvY3VzKCk7XG4gIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCB0YWJsZSk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMudGFibGVBZGRlZCA9IHRydWU7XG4gIC8vICAgdGhpcy5jaGVja1RhYmxlU2VsZWN0aW9uKCk7XG4gIC8vIH1cblxuICBhZGRUYWJsZSgpIHtcbiAgY29uc3QgdGFibGVXaWR0aCA9IDgyNTsgLy8gVGFibGUgd2lkdGggaW4gcGl4ZWxzXG4gIGNvbnN0IGNvbHMgPSAzOyAvLyBOdW1iZXIgb2YgY29sdW1uc1xuICBjb25zdCBjZWxsTWluV2lkdGggPSB0YWJsZVdpZHRoIC8gY29sczsgLy8gQ2FsY3VsYXRlIG1pbmltdW0gd2lkdGggZm9yIGVhY2ggY2VsbFxuXG4gIGxldCB0YWJsZSA9IGA8YnIgLz48dGFibGUgc3R5bGU9XCJ3aWR0aDogJHt0YWJsZVdpZHRofXB4O1wiPmA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7IC8vIE51bWJlciBvZiByb3dzXG4gICAgdGFibGUgKz0gYDx0ciBzdHlsZT1cImJvcmRlci1ib3R0b206ICR7dGhpcy50aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmVGb3JUYWJsZSgpfVwiPmA7IC8vIEFkZCBib3JkZXItYm90dG9tIHRvIHRoZSByb3dcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgdGFibGUgKz0gYDx0ZCBzdHlsZT1cIndvcmQtd3JhcDogYnJlYWstd29yZDsgd29yZC1icmVhazogYnJlYWstYWxsOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyBtaW4td2lkdGg6ICR7Y2VsbE1pbldpZHRofXB4O1wiPiZuYnNwOzwvdGQ+YDtcbiAgICB9XG4gICAgdGFibGUgKz0gJzwvdHI+JztcbiAgfVxuICB0YWJsZSArPSAnPC90YWJsZT48YnIvPic7XG5cbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgdGFibGUpO1xuICB9XG5cbiAgdGhpcy50YWJsZUFkZGVkID0gdHJ1ZTtcbiAgdGhpcy5jaGVja1RhYmxlU2VsZWN0aW9uKCk7XG59XG5cblxuXG5cbiAgY2hlY2tUYWJsZVNlbGVjdGlvbihldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBsZXQgdGFyZ2V0ID0gZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1REJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1RIJykpIHtcbiAgICAgIHRoaXMuaXNUYWJsZVNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IHRhcmdldC5jbG9zZXN0KCd0YWJsZScpIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNUYWJsZVNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSBudWxsO1xuICAgIH1cbiAgICBcbiAgICAvLyB0aGlzLmNoZWNrUGxhY2Vob2xkZXIoKTtcbiAgfVxuXG4gIGNoZWNrUGxhY2Vob2xkZXIoKSB7XG4gICAgLy8gbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICAvLyBpZiAoZWRpdG9yKSB7XG4gICAgLy8gICB0aGlzLmlzUGxhY2Vob2xkZXJWaXNpYmxlID0gZWRpdG9yLmlubmVySFRNTCA9PT0gJycgfHwgZWRpdG9yLmlubmVySFRNTCA9PT0gJzxicj4nO1xuICAgIC8vICAgaWYgKHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUpIHtcbiAgICAvLyAgICAgLy8gZWRpdG9yLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cInBsYWNlaG9sZGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgY29sb3I6ICMwMDAwMDBcIj5JbnNlcnQgdGV4dCBoZXJlIC4uLjwvc3Bhbj4nO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgbGV0IHBsYWNlaG9sZGVyID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5wbGFjZWhvbGRlcicpO1xuICAgIC8vICAgICBpZiAocGxhY2Vob2xkZXIpIHtcbiAgICAvLyAgICAgICBlZGl0b3IucmVtb3ZlQ2hpbGQocGxhY2Vob2xkZXIpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICB9XG5cbiAgb25Gb2N1cygpIHtcbiAgICAvLyBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICAgIC8vIGlmIChlZGl0b3IgJiYgdGhpcy5pc1BsYWNlaG9sZGVyVmlzaWJsZSkge1xuICAgIC8vICAgZWRpdG9yLmlubmVySFRNTCA9ICcnO1xuICAgIC8vICAgdGhpcy5pc1BsYWNlaG9sZGVyVmlzaWJsZSA9IGZhbHNlO1xuICAgIC8vIH1cbiAgfVxuXG4gIC8vIGNvbG9yQ2hhbmdlKG5ld0NvbG9yOiBzdHJpbmcpIHtcbiAgLy8gICB0aGlzLmNvbG9yID0gbmV3Q29sb3I7XG4gIC8vIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XG4gIH1cblxuICAvLyBhZGRSb3coKSB7XG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAvLyAgICAgbGV0IHJvdyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5pbnNlcnRSb3coKTtcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbMF0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgICAgbGV0IGNlbGwgPSByb3cuaW5zZXJ0Q2VsbChpKTtcbiAgLy8gICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7JztcbiAgLy8gICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGJsYWNrJztcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cblxuICBhZGRSb3coKSB7XG4gIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbiAgICBsZXQgcm93ID0gdGhpcy5zZWxlY3RlZFRhYmxlLmluc2VydFJvdygpO1xuICAgIHJvdy5zdHlsZS5ib3JkZXJCb3R0b20gPSB0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCk7IC8vIEFkZCBib3R0b20gYm9yZGVyIHRvIHRoZSByb3dcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2VsbCA9IHJvdy5pbnNlcnRDZWxsKGkpO1xuICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7JztcbiAgICB9XG4gIH1cbn1cblxuXG4gIC8vIGRlbGV0ZVJvdygpIHtcbiAgLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gIC8vICAgICB0aGlzLnNlbGVjdGVkVGFibGUuZGVsZXRlUm93KC0xKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuLy8gICBkZWxldGVSb3coKSB7XG4vLyAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbi8vICAgICBsZXQgcm93SW5kZXggPSB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGggLSAxOyBcbi8vICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuLy8gICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbi8vICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbi8vICAgICAgICAgbGV0IHJvdyA9IHNlbGVjdGlvbi5hbmNob3JOb2RlPy5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KCd0cicpO1xuLy8gICAgICAgICBpZiAocm93KSB7XG4vLyAgICAgICAgICAgcm93SW5kZXggPSByb3cucm93SW5kZXg7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7XG4vLyAgIH1cbi8vIH1cblxuICBkZWxldGVSb3coKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICBjb25zdCByb3cgPSBzZWxlY3RlZE5vZGUucGFyZW50RWxlbWVudD8uY2xvc2VzdCgndHInKTtcblxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gcm93LmNsb3Nlc3QoJ3RhYmxlJyk7XG4gICAgICBpZiAodGFibGUpIHtcbiAgICAgICAgdGFibGUuZGVsZXRlUm93KHJvdy5yb3dJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuICAvLyBhZGRDb2x1bW4oKSB7XG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgICBsZXQgY2VsbCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmluc2VydENlbGwoLTEpO1xuICAvLyAgICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xuICAvLyAgICAgICBjZWxsLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4vLyAgIGFkZENvbHVtbigpIHtcbi8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuLy8gICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbMF0uY2VsbHMubGVuZ3RoICsgMTsgLy8gTmV3IGNvbHVtbiBjb3VudFxuLy8gICAgIGNvbnN0IHRhYmxlV2lkdGggPSB0aGlzLnNlbGVjdGVkVGFibGUub2Zmc2V0V2lkdGg7XG4vLyAgICAgY29uc3QgbWluV2lkdGggPSB0YWJsZVdpZHRoIC8gY29sdW1uQ291bnQ7XG5cbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4vLyAgICAgICBsZXQgY2VsbCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmluc2VydENlbGwoLTEpO1xuLy8gICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7Jztcbi8vICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4vLyAgICAgICBjZWxsLnN0eWxlLm1pbldpZHRoID0gYCR7bWluV2lkdGh9cHhgO1xuLy8gICAgICAgY2VsbC5zdHlsZS53b3JkV3JhcCA9ICdicmVhay13b3JkJztcbi8vICAgICAgIGNlbGwuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XG4vLyAgICAgICBjZWxsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm9ybWFsJztcbi8vICAgICB9XG5cbi8vICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2VsbHMnIG1pbldpZHRoXG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxscy5sZW5ndGg7IGorKykge1xuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS5taW5XaWR0aCA9IGAke21pbldpZHRofXB4YDtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH1cbiAgLy8gfVxuICBcbiAgYWRkQ29sdW1uKCkge1xuICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgY29uc3QgY29sdW1uQ291bnQgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGggKyAxOyAvLyBOZXcgY29sdW1uIGNvdW50XG4gICAgY29uc3QgdGFibGVXaWR0aCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBtaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2x1bW5Db3VudDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjZWxsID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uaW5zZXJ0Q2VsbCgtMSk7XG4gICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xuICAgICAgY2VsbC5zdHlsZS53b3JkV3JhcCA9ICdicmVhay13b3JkJztcbiAgICAgIGNlbGwuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XG4gICAgICBjZWxsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm9ybWFsJztcbiAgICAgIGNlbGwuc3R5bGUubWluV2lkdGggPSBgJHttaW5XaWR0aH1weGA7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGV4aXN0aW5nIHJvd3MnIGJvdHRvbSBib3JkZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5zdHlsZS5ib3JkZXJCb3R0b20gPSB0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCk7XG4gICAgfVxuICB9XG4gIH1cbiAgXG5cblxuXG5cbiAgZGVsZXRlQ29sdW1uKCkge1xuICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGxldCBjZWxsID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ3RkLCB0aCcpIGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgIGxldCBjZWxsSW5kZXggPSBjZWxsLmNlbGxJbmRleDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5kZWxldGVDZWxsKGNlbGxJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiAgdGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKSB7XG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjNDE0MTQxICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICM1RjVGNUYgIWltcG9ydGFudCdcbiAgICB9XG4gIH1cblxuICBhZGp1c3RUYWJsZVdpZHRoKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUuc3R5bGUud2lkdGggPSBldmVudC50YXJnZXQudmFsdWUgKyAncHgnO1xuICAgIH1cbiAgfVxuXG4gIGFkanVzdENlbGxXaWR0aChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHNbal0uc3R5bGUud2lkdGggPSBldmVudC50YXJnZXQudmFsdWUgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRqdXN0Q2VsbEhlaWdodChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHNbal0uc3R5bGUuaGVpZ2h0ID0gZXZlbnQudGFyZ2V0LnZhbHVlICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FyZXRUb0VuZChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoc2VsKSB7XG4gICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9wZW5Db2xvclBpY2tlcihpbnB1dElkOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKTtcbiAgLy8gICBpZiAoaW5wdXRFbGVtZW50KSB7XG4gIC8vICAgICBpbnB1dEVsZW1lbnQuY2xpY2soKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBzZXRUZXh0Q29sb3IoZXZlbnQ6IGFueSkge1xuICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgLy8gICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgLy8gICAgIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAvLyAgICAgdGhpcy5zZWxlY3RlZFRleHRDb2xvciA9IGNvbG9yO1xuICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIGZhbHNlLCBjb2xvcik7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLy8gc2V0QmFja2dyb3VuZENvbG9yKGV2ZW50OiBhbnkpIHtcbiAgLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIC8vICAgaWYgKGVkaXRvcikge1xuICAvLyAgICAgZWRpdG9yLmZvY3VzKCk7XG4gIC8vICAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgLy8gICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaGlsaXRlQ29sb3InLCBmYWxzZSwgY29sb3IpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIHByaXZhdGUgc2F2ZWRTZWxlY3Rpb246IFJhbmdlIHwgbnVsbCA9IG51bGw7XG5cbm9wZW5Db2xvclBpY2tlcihpbnB1dElkOiBzdHJpbmcpIHtcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlucHV0RWxlbWVudCkge1xuICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLnNhdmVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgfVxuICAgIGlucHV0RWxlbWVudC5jbGljaygpO1xuICB9XG59XG5cbnNldFRleHRDb2xvcihldmVudDogYW55KSB7XG4gIGlmICh0aGlzLnNhdmVkU2VsZWN0aW9uKSB7XG4gICAgY29uc3QgY29sb3IgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZFRleHRDb2xvciA9IGNvbG9yO1xuXG4gICAgLy8gUmVzdG9yZSB0aGUgc2F2ZWQgc2VsZWN0aW9uXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLnNhdmVkU2VsZWN0aW9uKTtcblxuICAgICAgLy8gQXBwbHkgdGhlIGNvbG9yIHVzaW5nIGEgc3BhblxuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNhdmVkU2VsZWN0aW9uO1xuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSBjb2xvcjtcbiAgICAgIHNwYW4udGV4dENvbnRlbnQgPSByYW5nZS50b1N0cmluZygpO1xuXG4gICAgICAvLyBSZXBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIHN0eWxlZCBzcGFuXG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcblxuICAgICAgLy8gQ2xlYXIgdGhlIHNhdmVkIHNlbGVjdGlvblxuICAgICAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbiAgc2V0QmFja2dyb3VuZENvbG9yKGV2ZW50OiBhbnkpIHtcbiAgaWYgKHRoaXMuc2F2ZWRTZWxlY3Rpb24pIHtcbiAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuXG4gICAgLy8gUmVzdG9yZSB0aGUgc2F2ZWQgc2VsZWN0aW9uXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLnNhdmVkU2VsZWN0aW9uKTtcblxuICAgICAgLy8gQXBwbHkgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgYSBzcGFuXG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2F2ZWRTZWxlY3Rpb247XG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcbiAgICAgIHNwYW4udGV4dENvbnRlbnQgPSByYW5nZS50b1N0cmluZygpO1xuXG4gICAgICAvLyBSZXBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIHN0eWxlZCBzcGFuXG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcblxuICAgICAgLy8gQ2xlYXIgdGhlIHNhdmVkIHNlbGVjdGlvblxuICAgICAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG4gIH1cbiAgXG4gIC8vIGNvbG9yQ2hhbmdlZChldmVudDogYW55KSB7XG4gIC8vICAgdGhpcy5jb2xvciA9IGV2ZW50LmNvbG9yLmhleDsgXG4gIC8vIH1cblxuICBwdWJsaWMgbG9nRXZlbnQoZXZlbnQ6IGFueSwgdHJpZ2dlcjogYW55KSB7XG4gICAgY29uc3QgY29sb3IgPSBldmVudDtcbiAgICB0aGlzLnNldFRleHRDb2xvcihjb2xvcilcbiAgICB0aGlzLnNlbGVjdGVkVGV4dENvbG9yID0gZXZlbnRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgZmFsc2UsIGV2ZW50KTtcbiAgICAvLyB0aGlzLmxvZ3MudW5zaGlmdChbdGhpcy5sb2dzLmxlbmd0aCArIDEsIHRyaWdnZXIsIGV2ZW50XSk7XG4gIH1cbiAgXG5cbiAgZWRpdEltYWdlKCkge1xuICAgIGxldCBkYXRhIFxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmVkaXRvckZyb20gPScsdGhpcy5lZGl0b3JGcm9tKVxuICAgIHN3aXRjaCAodGhpcy5lZGl0b3JGcm9tLm5hbWUpIHtcbiAgICAgIGNhc2UgJ3NlY3Rpb24tY29udGVudCc6XG4gICAgICAgIGRhdGEgPSB7IGVkaXRJTUc6IHRydWUsIGZyb206ICdodG1sRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgsIGlkOiB0aGlzLmVkaXRvckZyb20uaWQgfTtcbiAgICAgICAgY29uc3QgY29tcHJlc3NlZERhdGE6IHN0cmluZyA9IGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSk7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wJywgY29tcHJlc3NlZERhdGEpO1xuICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YTIgPSBjb21wcmVzcyhKU09OLnN0cmluZ2lmeSh0aGlzLnNhbml0aXplZENvbnRlbnQpKTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndGV4dEVkaXRvcicsIGNvbXByZXNzZWREYXRhMik7XG4gICAgICAgIC8vIGFsZXJ0KCdnbyB0byBlZGl0b3IhJylcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvSU1HRWRpdG9yKGRhdGEpO1xuICAgICAgICB0aGlzLmltYWdlRWRpdC5lbWl0KClcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjcmVhdGUtZG9jdW1lbnQnOlxuICAgICAgICB0aGlzLmltYWdlRWRpdC5lbWl0KClcbiAgICAgICAgZGF0YSA9IHsgZWRpdElNRzogdHJ1ZSwgZnJvbTogJ2NyZWF0ZURvY3VtZW50JywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgsIGlkOiB0aGlzLmVkaXRvckZyb20uaWQsIHNlY3Rpb246IHRoaXMuZWRpdG9yRnJvbS5zZWN0aW9uLCByZXBvcnRTZWN0aW9uSWQ6IHRoaXMuZWRpdG9yRnJvbS5yZXBvcnRTZWN0aW9uSWQgfTtcbiAgICAgICAgLy8gdGhpcy5vcGVuRGlhbG9nKGRhdGEpXG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhMyA9IGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSk7XG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhNCA9IGNvbXByZXNzKHRoaXMuZWRpdG9yVGV4dCk7XG5cbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJywgY29tcHJlc3NlZERhdGEzKTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndGV4dEVkaXRvcjInLCBjb21wcmVzc2VkRGF0YTQpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbnVsbFxuICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcpO1xuICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcDInKTtcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGVtcGxhdGVFZGl0b3InKTtcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGV4dEVkaXRvcicpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMuZWRpdG9yRnJvbSA9PT0gJ3NlY3Rpb24tY29udGVudCcpIHtcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSB7ZWRpdElNRzogdHJ1ZSwgZnJvbTogJ2h0bWxFZGl0b3InLCBpbmRleDogdGhpcy5zZWxlY3RlZEl0ZW1JbmRleH1cbiAgICAvLyAgIHRoaXMubmF2aWdhdGVUb0lNR0VkaXRvcihkYXRhKVxuICAgIC8vICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmltYWdlRWRpdFVybCkpXG4gICAgLy8gICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0ZXh0RWRpdG9yJywgdGhpcy5lZGl0b3JUZXh0KVxuICAgIC8vIH0gXG4gICAgXG4gIH1cblxuICBvcGVuRGlhbG9nKCBpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBsZXQgZGF0YTogYW55O1xuICAgIC8vICAgZGF0YSA9IGl0ZW1cbiAgICAvLyBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEltYWdlRWRpdG9yTW9kYWxDb21wb25lbnQse1xuICAgIC8vICAgbWluV2lkdGg6ICcxMDAlJywgbWluSGVpZ2h0OiAnMTAwdmgnLCBwYW5lbENsYXNzOiAndGhlbWUtMkIyOTM2JyAsZGlzYWJsZUNsb3NlOiB0cnVlLCBkYXRhOiBkYXRhXG4gICAgLy8gfSk7XG4gICAgLy8gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgLy8gICBjb25zb2xlLmxvZygncmVzdWx0ID09PT4gaW1nID0gJywgcmVzdWx0KVxuICAgIC8vICAgY29uc3QgaW1nVXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJyk7XG4gICAgLy8gICAgIGlmIChpbWdVcmwpIHtcbiAgICAvLyAgICAgICB0aGlzLnJlcGxhY2VJbWFnZVNyYyhpbWdVcmwsICByZXN1bHQuaW5kZXguaW5kZXgpO1xuICAgIC8vICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wMicpO1xuICAgIC8vICAgICB9XG4gICAgLy8gfSk7XG4gIH1cblxuICByZXBsYWNlSW1hZ2VTUkMobmV3U3JjOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0aGlzLmVkaXRvclRleHQsICd0ZXh0L2h0bWwnKTtcbiAgICBjb25zdCBpbWdUYWdzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcblxuICBpZiAoaW1nVGFncyAmJiBpbWdUYWdzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGltZ1RhZ3MubGVuZ3RoKSB7XG4gICAgICAvLyBVcGRhdGUgdGhlIHNyYyBhdHRyaWJ1dGUgb2YgdGhlIGltZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gICAgICBcbiAgICAgIGltZ1RhZ3NbaW5kZXhdLnNldEF0dHJpYnV0ZSgnc3JjJywgbmV3U3JjKTtcbiAgICAgIHRoaXMuZWRpdG9yVGV4dCA9IGRvYy5ib2R5LmlubmVySFRNTDtcbiAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBpbmRleCAke2luZGV4fS4gVGhlcmUgYXJlIG9ubHkgJHtpbWdUYWdzLmxlbmd0aH0gPGltZz4gdGFncy5gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcignTm8gPGltZz4gdGFncyBmb3VuZCBpbiB0aGUgZWRpdG9yIHRleHQuJyk7XG4gIH1cbiAgfVxuXG4gIG5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YTogYW55KSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWRtaW4vaW1hZ2UtZWRpdG9yJ10sIHsgcXVlcnlQYXJhbXM6IHtkYXRhIDogSlNPTi5zdHJpbmdpZnkoZGF0YSl9IH0pXG4gIH1cblxuICAvLyAgb25UZXh0U2VsZWN0KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gIC8vICAgaWYgKHRoaXMudG9vbGJhck1vZGUgPT09ICdidWJibGUnKSB7XG4gIC8vICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIC8vICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAvLyAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAvLyAgICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAvLyAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJUb3AgPSByZWN0LmJvdHRvbSArIHdpbmRvdy5zY3JvbGxZICsgMTA7XG4gIC8vICAgICAgICAgdGhpcy50b29sYmFyTGVmdCA9IHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYICsgKHJlY3Qud2lkdGggLyAyKSAtIDUwO1xuICAvLyAgICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSB0cnVlO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gb25UZXh0U2VsZWN0KGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICBpZiAodGhpcy50b29sYmFyTW9kZSA9PT0gJ2J1YmJsZScpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFkgPSAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWCA9ICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy50b29sYmFyVG9wID0gcmVjdC50b3AgKyBzY3JvbGxZIC0gNzU7XG4gICAgICAgIHRoaXMudG9vbGJhckxlZnQgPSByZWN0LmxlZnQgKyBzY3JvbGxYICsgKHJlY3Qud2lkdGggLyAyKSAtIDMyNTtcbiAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dUb29sYmFyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuLy8gICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4vLyAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGE7XG4vLyAgICAgaWYgKGNsaXBib2FyZERhdGEpIHtcbi8vICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbi8vICAgICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKHBhc3RlZFRleHQpKSB7XG4vLyAgICAgICAgIGNvbnN0IGh0bWwgPSB0aGlzLmNvbnZlcnRUZXh0VG9UYWJsZShwYXN0ZWRUZXh0KTtcbi8vICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcbi8vICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQocGFzdGVkVGV4dCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9XG5cbiAgLy8gb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgLy8gICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhO1xuICAvLyAgIGlmIChjbGlwYm9hcmREYXRhKSB7XG4gIC8vICAgICAvLyBIYW5kbGUgaW1hZ2UgZGF0YVxuICAvLyAgICAgY29uc3QgaXRlbXMgPSBjbGlwYm9hcmREYXRhLml0ZW1zO1xuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgICBpZiAoaXRlbXNbaV0udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAvLyAgICAgICAgIGNvbnN0IGZpbGUgPSBpdGVtc1tpXS5nZXRBc0ZpbGUoKTtcbiAgLy8gICAgICAgICBpZiAoZmlsZSkge1xuICAvLyAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgLy8gICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gIC8vICAgICAgICAgICAgIGNvbnN0IGltZ0h0bWwgPSBgPGltZyBzcmM9XCIke2UudGFyZ2V0LnJlc3VsdH1cIiBhbHQ9XCJQYXN0ZWQgSW1hZ2VcIiBzdHlsZT1cIm1heC13aWR0aDogMTAwJTtcIi8+YDtcbiAgLy8gICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChpbWdIdG1sKTtcbiAgLy8gICAgICAgICAgIH07XG4gIC8vICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgLy8gICAgICAgICAgIHJldHVybjsgLy8gRXhpdCBpZiBhbiBpbWFnZSBpcyBoYW5kbGVkXG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIC8vIEhhbmRsZSB0ZXh0IG9yIHRhYmxlIGRhdGFcbiAgLy8gICAgIGNvbnN0IHBhc3RlZFRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgLy8gICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKHBhc3RlZFRleHQpKSB7XG4gIC8vICAgICAgIGNvbnN0IGh0bWwgPSB0aGlzLmNvbnZlcnRUZXh0VG9UYWJsZShwYXN0ZWRUZXh0KTtcbiAgLy8gICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQocGFzdGVkVGV4dCk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhO1xuICAgIGlmIChjbGlwYm9hcmREYXRhKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGNsaXBib2FyZERhdGEuaXRlbXNbaV07XG5cbiAgICAgICAgaWYgKGl0ZW0udHlwZS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGltYWdlIHBhc3RlXG4gICAgICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbWdIdG1sID0gYDxpbWcgc3JjPVwiJHtlLnRhcmdldC5yZXN1bHR9XCIgYWx0PVwiUGFzdGVkIEltYWdlXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7XCIgLz5gO1xuICAgICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGltZ0h0bWwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFwidGV4dC9odG1sXCIpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgSFRNTCBwYXN0ZVxuICAgICAgICAgIC8vIGNvbnN0IGh0bWxEYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9odG1sXCIpO1xuICAgICAgICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJykpKSB7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gdGhpcy5jb252ZXJ0VGV4dFRvVGFibGUoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKSk7XG4gICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWxEYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBcInRleHQvcGxhaW5cIikge1xuICAgICAgICAgIC8vIEhhbmRsZSBwbGFpbiB0ZXh0IHBhc3RlXG4gICAgICAgICAgaWYgKHRoaXMuaXNUYWJsZURhdGEoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJykpKSB7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gdGhpcy5jb252ZXJ0VGV4dFRvVGFibGUoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJykpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbnN0IHBsYWluVGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7XG4gICAgICAgICAgLy8gdGhpcy5pbnNlcnRIdG1sQXRDYXJldChwbGFpblRleHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzRXhjZWxEYXRhKGh0bWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBodG1sLmluY2x1ZGVzKCd4bWxuczpvPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlXCInKSB8fCBcbiAgICAgICAgICBodG1sLmluY2x1ZGVzKCd4bWxuczp4PVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWxcIicpO1xuICB9XG5cbiAgY29udmVydEV4Y2VsSHRtbFRvVGFibGUoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XG4gICAgY29uc3QgdGFibGUgPSBkb2MucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICByZXR1cm4gdGFibGUgPyB0YWJsZS5vdXRlckhUTUwgOiAnJzsgLy8gRXh0cmFjdCBvbmx5IHRoZSB0YWJsZSBwYXJ0XG4gIH1cblxuXG5cblxuICBpc1RhYmxlRGF0YSh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3dzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHJvd3MubGVuZ3RoID4gMSAmJiByb3dzWzBdLnNwbGl0KCdcXHQnKS5sZW5ndGggPiAxO1xuICB9XG5cbiAgLy8gY29udmVydFRleHRUb1RhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcihyb3cgPT4gcm93LnRyaW0oKSAhPT0gJycpO1xuICAvLyAgIGNvbnN0IHRhYmxlUm93cyA9IHJvd3MubWFwKHJvdyA9PiB7XG4gIC8vICAgICBjb25zdCBjZWxscyA9IHJvdy5zcGxpdCgnXFx0JykubWFwKGNlbGwgPT4gYDx0ZCBjbGFzcz1cInB4LTEgcHktMVwiID4ke2NlbGx9PC90ZD5gKS5qb2luKCcnKTtcbiAgLy8gICAgIHJldHVybiBgPHRyIGNsYXNzPVwidGFibGUtYm9yZGVyLXRvcFwiIHN0eWxlPVwiYm9yZGVyLXRvcDogJHt0aGlzLnRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCl9OyB3aWR0aDogMTAwJSAhaW1wb3J0YW50XCI+JHtjZWxsc308L3RyPmA7XG4gIC8vICAgfSkuam9pbignJyk7XG4gIC8vICAgcmV0dXJuIGA8dGFibGU+JHt0YWJsZVJvd3N9PC90YWJsZT5gO1xuICAvLyB9XG5cbiAgY29udmVydFRleHRUb1RhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcihyb3cgPT4gcm93LnRyaW0oKSAhPT0gJycpO1xuICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gcm93c1swXT8uc3BsaXQoJ1xcdCcpLmxlbmd0aCB8fCAxOyAvLyBHZXQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGZyb20gdGhlIGZpcnN0IHJvd1xuICAgIGNvbnN0IGNvbHVtbldpZHRoID0gMTAwIC8gY29sdW1uQ291bnQ7IC8vIENhbGN1bGF0ZSBjb2x1bW4gd2lkdGhcblxuICAgIGNvbnN0IHRhYmxlUm93cyA9IHJvd3MubWFwKChyb3csIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IHJvdy5zcGxpdCgnXFx0JykubWFwKGNlbGwgPT4gYFxuICAgICAgICA8dGQgY2xhc3M9XCJweC0xIHB5LTEgdGV4dC10cnVuY2F0ZVwiIFxuICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6ICR7Y29sdW1uV2lkdGh9JTsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCI+XG4gICAgICAgICAgJHtjZWxsfVxuICAgICAgICA8L3RkPmApLmpvaW4oJycpO1xuXG4gICAgICAvLyBBZGQgYSBib3JkZXItdG9wIGZvciBhbGwgcm93cyBleGNlcHQgdGhlIGZpcnN0IGFuZCBib3JkZXItYm90dG9tIGZvciB0aGUgbGFzdCByb3dcbiAgICAgIGNvbnN0IGJvcmRlclRvcCA9IGluZGV4ID09PSAwID8gJycgOiBgYm9yZGVyLXRvcDogJHt0aGlzLnRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCl9O2A7XG4gICAgICBjb25zdCBib3JkZXJCb3R0b20gPSBpbmRleCA9PT0gcm93cy5sZW5ndGggLSAxID8gYGJvcmRlci1ib3R0b206ICR7dGhpcy50aGVtZU1vZGVUYWJsZUJvcmRlclRvcCgpfTtgIDogJyc7XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAgIDx0ciBcbiAgICAgICAgICBzdHlsZT1cIiR7Ym9yZGVyVG9wfSAke2JvcmRlckJvdHRvbX0gd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcIj5cbiAgICAgICAgICAke2NlbGxzfVxuICAgICAgICA8L3RyPmA7XG4gICAgfSkuam9pbignJyk7XG5cbiAgICByZXR1cm4gYFxuICAgICAgPHRhYmxlIHN0eWxlPVwidGFibGUtbGF5b3V0OiBmaXhlZDsgd2lkdGg6IDEwMCU7XCI+IFxuICAgICAgICAke3RhYmxlUm93c31cbiAgICAgIDwvdGFibGU+YDtcbiAgfVxuXG5cblxuICBpbnNlcnRIdG1sQXRDYXJldChodG1sOiBzdHJpbmcpIHtcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAocmFuZ2UpIHtcbiAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgbGV0IG5vZGU7XG4gICAgICB3aGlsZSAoKG5vZGUgPSB0ZW1wRGl2LmZpcnN0Q2hpbGQpKSB7XG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICB9XG4gICAgICByYW5nZS5pbnNlcnROb2RlKGZyYWcpO1xuICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcxcHggc29saWQgI0QwRDBEMDsgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcxcHggc29saWQgIzQxNDE0MSAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gXG4gIHB1YmxpYyBvcGVuRnVsbHNjcmVlbigpIHtcbiAgICB2YXIgZWxlbTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXh0RWRpdG9yXCIpO1xuICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gdHJ1ZTtcbiAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICBlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICB9XG4gICAgdGhpcy5zdHlsZSA9IHtcbiAgICAgICdtaW4taGVpZ2h0JzogJzkwdmgnLFxuICAgICAgJ21heC1oZWlnaHQnOiAnOTB2aCcsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlRnVsbHNjcmVlbigpIHtcbiAgICBpZiAoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5zdHlsZSA9IHtcbiAgICAgICAgJ21pbi1oZWlnaHQnOiAnNDAwcHgnLFxuICAgICAgICAnbWF4LWhlaWdodCc6ICc0MDBweCcsXG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBjbGVhclRleHRFZGl0b3IoKSB7XG4gICAgdGhpcy5lZGl0b3JUZXh0Q2xlYXIuZW1pdCgpXG4gIH1cblxuICBzZXR1cEhpc3RvcnkoKSB7XG4gICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICBcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLm9uSW5wdXQoKSk7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dCgpIHtcbiAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuICB9XG5cbiAgc2F2ZVN0YXRlKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgXG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgY29uc3QgZWRpdG9yQ29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XG4gICAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPT09IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuaGlzdG9yeUluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgrKztcbiAgICB9XG4gIH1cbiAgdW5kbygpIHtcbiAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPiAwKSB7XG4gICAgICB0aGlzLnJlZG9TdGFjay5wdXNoKHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF0pO1xuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgtLTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgXG4gICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVkbygpIHtcbiAgICBpZiAodGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVkb0NvbnRlbnQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKTtcbiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHJlZG9Db250ZW50ISk7XG4gICAgICB0aGlzLmhpc3RvcnlJbmRleCsrO1xuICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICBcbiAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gcmVkb0NvbnRlbnQhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4vLyAgIGZvcm1hdFRleHRXaXRoRGF0ZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbi8vICAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIGRldGVjdCBZWVlZLU1NLUREIGZvcm1hdHRlZCBkYXRlc1xuLy8gICBjb25zdCBkYXRlUmVnZXggPSAvXFxiXFxkezR9LVxcZHsyfS1cXGR7Mn1cXGIvZztcblxuLy8gICAvLyBSZXBsYWNlIGZvdW5kIGRhdGVzIHdpdGggYSBmb3JtYXR0ZWQgdmVyc2lvblxuLy8gICByZXR1cm4gdGV4dC5yZXBsYWNlKGRhdGVSZWdleCwgKGRhdGVTdHIpID0+IHtcbi8vICAgICAvLyBDb252ZXJ0IHRoZSBkZXRlY3RlZCBkYXRlIHN0cmluZyBpbnRvIGEgRGF0ZSBvYmplY3Rcbi8vICAgICBjb25zdCBkYXRlT2JqID0gbmV3IERhdGUoZGF0ZVN0cik7XG4gICAgXG4vLyAgICAgLy8gRm9ybWF0IHRoZSBkYXRlIHRvICdNb250aCBEYXksIFllYXInIChlLmcuLCBPY3RvYmVyIDEwLCAyMDI0KVxuLy8gICAgIHJldHVybiBkYXRlT2JqLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4vLyAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4vLyAgICAgICBtb250aDogJ2xvbmcnLFxuLy8gICAgICAgZGF5OiAnbnVtZXJpYycsXG4vLyAgICAgfSk7XG4vLyAgIH0pO1xuICAvLyB9XG4gIFxuICBmb3JtYXRUZXh0V2l0aERhdGVzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBkZXRlY3QgWVlZWS1NTS1ERCBmb3JtYXR0ZWQgZGF0ZXNcbiAgY29uc3QgZGF0ZVJlZ2V4ID0gL1xcYlxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxiL2c7XG5cbiAgLy8gUmVwbGFjZSBmb3VuZCBkYXRlcyB3aXRoIGEgZm9ybWF0dGVkIHZlcnNpb25cbiAgcmV0dXJuIHRleHQucmVwbGFjZShkYXRlUmVnZXgsIChkYXRlU3RyKSA9PiB7XG4gICAgLy8gQ29udmVydCB0aGUgZGV0ZWN0ZWQgZGF0ZSBzdHJpbmcgaW50byBhIERhdGUgb2JqZWN0XG4gICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGRhdGVTdHIpO1xuXG4gICAgLy8gRXh0cmFjdCBkYXksIG1vbnRoLCBhbmQgeWVhclxuICAgIGNvbnN0IGRheSA9IGRhdGVPYmouZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsgLy8gRW5zdXJlIGRheSBpcyB0d28gZGlnaXRzXG4gICAgY29uc3QgbW9udGggPSBkYXRlT2JqLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcgfSk7IC8vIEdldCBhYmJyZXZpYXRlZCBtb250aCBuYW1lXG4gICAgY29uc3QgeWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTsgLy8gR2V0IGZ1bGwgeWVhclxuXG4gICAgLy8gRm9ybWF0IHRoZSBkYXRlIGFzICdkZC9tbW0veXl5eSdcbiAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgfSk7XG59XG5cblxufSIsIjxkaXYgY2xhc3M9XCJjb250YWluZXIgZWxzLXRleHQtZWRpdG9yIHB4LTBcIiBpZD1cInRleHRFZGl0b3JcIiAjZnVsbHNjcmVlbj1cIm5neEZ1bGxzY3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRFZGl0b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hGdWxsc2NyZWVuPlxyXG4gICAgPGRpdiAqbmdJZj1cInRvb2xiYXJNb2RlID09PSAnZml4ZWQnXCIgY2xhc3M9XCJidG4tdG9vbGJhciBlbHMtYnRuLXRvb2xiYXIgcC0yIHB5LTIgbWItMFwiIHJvbGU9XCJ0b29sYmFyXCIgW3N0eWxlLmJhY2tncm91bmRdPVwidGhlbWVNb2RlQmdDbHIoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgJ3BvaW50ZXItZXZlbnRzJzogZGlzYWJsZVRvb2xiYXIgPyAnbm9uZScgOiAnYXV0bycsXHJcbiAgICAnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyc6IElzT3BlbiA/ICcwJyA6ICcyMHB4JyxcclxuICAgICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyc6IElzT3BlbiA/ICcwJyA6ICcyMHB4J1xyXG59XCJcclxuYXJpYS1sYWJlbD1cIlRvb2xiYXIgd2l0aCBidXR0b24gZ3JvdXBzXCJcclxuc3R5bGU9XCJib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7XCJcclxuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkhlYWRlciBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtZm9ybS1zZWxlY3QgYm9yZGVyIGVscy10b29sYmFyLWRyb3Bkb3duLWJ1dHRvbiBkcm9wZG93bi10b2dnbGUgdGV4dC1zdGFydFwiIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cIic1cHgnXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duXCIgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7c2VsZWN0ZWRGb3JtYXRCbG9jayB8IHRpdGxlY2FzZX19PC9zcGFuPiA8aSBjbGFzcz1cIm1kaSBtZGktY2hldnJvbi1kb3duIFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25cIiBjbGFzcz1cImVscy10ZXh0LWZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgxPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMT5IZWFkaW5nIDE8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgyPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5IZWFkaW5nIDI8L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgzPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5IZWFkaW5nIDM8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg0PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND5IZWFkaW5nIDQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg1PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5IZWFkaW5nIDU8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg2PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNj5IZWFkaW5nIDY8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPHA+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm9ybWFsPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJGb250IE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPCEtLSA8c2VsZWN0IGNsYXNzPVwiZWxzLWZvcm0tc2VsZWN0IFwiIHN0eWxlPVwiIGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsgY29sb3I6ICNmZmY7Ym9yZGVyOiAycHggc29saWQgIzdENkQ2RCAhaW1wb3J0YW50O1wiIFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIiAoY2hhbmdlKT1cImNoYW5nZUZvbnQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiBjbGFzcz1cImVscy1mb3JtLW9wdGlvblwiICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRzXCIgW3ZhbHVlXT1cImZvbnRcIj57eyBmb250IH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy1mb3JtLXNlbGVjdCBib3JkZXIgZWxzLXRvb2xiYXItZHJvcGRvd24tYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSB0ZXh0LXN0YXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIiBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiA4NXB4OyBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3tzZWxlY3RlZEZvbnQgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZWNhc2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktY2hldnJvbi1kb3duIFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25cIiBjbGFzcz1cImVscy10ZXh0LWZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKm5nRm9yPVwibGV0IGZvbnQgb2YgZm9udHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlRm9udChmb250KVwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmb250IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0wXCIgIHN0eWxlPVwiaGVpZ2h0OiBmaXQtY29udGVudDtcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1lLTIgbXItMiBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0JvbGRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2JvbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYm9sZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNJdGFsaWNBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2l0YWxpYycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1pdGFsaWNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzVW5kZXJsaW5lQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCd1bmRlcmxpbmUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtdW5kZXJsaW5lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N0cmlrZXRocm91Z2hBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3RyaWtldGhyb3VnaC12YXJpYW50XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgQ29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJ0ZXh0Q29sb3JQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRUZXh0Q29sb3IoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCd0ZXh0Q29sb3JQaWNrZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLXRleHQgaWNvbi13aXRoLXVuZGVybGluZVwiIFtzdHlsZS5jb2xvcl09XCJzZWxlY3RlZFRleHRDb2xvclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJCYWNrZ3JvdW5kIENvbG9yXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCdiZ0NvbG9yUGlja2VyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWFscGhhLWEtYm94XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBpZD1cImJnQ29sb3JQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRCYWNrZ3JvdW5kQ29sb3IoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtbGluZSBtcy0yIGJvcmRlclwiIFtzdHlsZS5ib3JkZXItbGVmdF09XCJ0aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmUoKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0T3JkZXJlZExpc3QnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtbGlzdC1udW1iZXJlZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2luc2VydFVub3JkZXJlZExpc3QnKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtbGlzdC1idWxsZXRlZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJxbC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gIGFycm93LW5vbmUgdGV4dC1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRyb3Bkb3duQmFzaWMxXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tbGVmdCBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAzcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JylcIj48aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWxlZnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlDZW50ZXInKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tY2VudGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5UmlnaHQnKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tcmlnaHRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlGdWxsJylcIj48aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWp1c3RpZnlcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1saW5lIG1zLTIgYm9yZGVyXCIgW3N0eWxlLmJvcmRlci1sZWZ0XT1cInRoZW1lTW9kZUNsclZlcnRpY2FsTGluZSgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzU3Vic2NyaXB0QWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdWJzY3JpcHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3Vic2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N1cGVyc2NyaXB0QWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdXBlcnNjcmlwdCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdXBlcnNjcmlwdFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZExpbmsoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1saW5rLXZhcmlhbnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydHNJbWFnZSgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWltYWdlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJpbWFnZUlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPVwiaGFuZGxlSW1hZ2VVcGxvYWQoJGV2ZW50KVwiIGFjY2VwdD1cImltYWdlLypcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkVGFibGUoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFJvdygpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbHVtbigpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1uKClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cInVuZG8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS11bmRvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cInJlZG8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1yZWRvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VcIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uLTJcIiAoY2xpY2spPVwiZWRpdEltYWdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+RWRpdCBJbWFnZTwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJjbGVhclRleHRFZGl0b3IoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIgd2lkdGg6IGZpdC1jb250ZW50ICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWNsb3NlLWNpcmNsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuMSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIklzT3BlbjsgZWxzZSBmdWxsc2NyZWVuSWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZnVsbHNjcmVlbi1leGl0XCI+PC9pPiA8IS0tIENvbGxhcHNlIEljb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmdWxsc2NyZWVuSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZ1bGxzY3JlZW5cIj48L2k+IDwhLS0gRXhwYW5kIEljb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cInRvb2xiYXJNb2RlID09PSAnYnViYmxlJ1wiIGNsYXNzPVwiYnViYmxlLXRvb2xiYXIgYm9yZGVyIHAtMlwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyd0b3AucHgnOiB0b29sYmFyVG9wLCAnbGVmdC5weCc6IHRvb2xiYXJMZWZ0LCAnZGlzcGxheSc6IHNob3dUb29sYmFyID8gJ2Jsb2NrJyA6ICdub25lJ31cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiRm9udCBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJlbHMtZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRm9udFwiIChjaGFuZ2UpPVwiY2hhbmdlRm9udCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRzXCIgW3ZhbHVlXT1cImZvbnRcIj57eyBmb250IH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0JvbGRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnYm9sZCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWJvbGRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0l0YWxpY0FjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1pdGFsaWNcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1VuZGVybGluZUFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCd1bmRlcmxpbmUnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC11bmRlcmxpbmVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N0cmlrZXRocm91Z2hBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3RyaWtldGhyb3VnaCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN0cmlrZXRocm91Z2gtdmFyaWFudFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdibG9ja3F1b3RlJylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXF1b3RlLWNsb3NlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJpbnNlcnRDb2RlQmxvY2soKVwiPjxpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktY29kZS10YWdzXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWxpc3QtbnVtYmVyZWRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtbGlzdC1idWxsZXRlZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJDb2xvciBGb3JtYXR0aW5nXCI+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgQ29sb3JcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInFsLWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBhcnJvdy1ub25lIHRleHQtc2Vjb25kYXJ5XCIgaWQ9XCJkcm9wZG93bkJhc2ljMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLWZpbGxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAzMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yLXNrZXRjaCBjb2xvcj1cIiNmZmZcIiAob25DaGFuZ2VDb21wbGV0ZSk9XCJzZXRUZXh0Q29sb3IoJGV2ZW50KVwiPjwvY29sb3Itc2tldGNoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gY3VzdG9tLWNvbG9yLXRyaWdnZXJcIiBuZ3gtY29sb3JzLXRyaWdnZXIgWyhuZ01vZGVsKV09XCJjb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibG9nRXZlbnQoJGV2ZW50LCAnbmdNb2RlbENoYW5nZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxvZ0V2ZW50KCRldmVudCwgJ2NoYW5nZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwibG9nRXZlbnQoJGV2ZW50LCAnaW5wdXQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY29sb3ItdGV4dCBpY29uLXdpdGgtdW5kZXJsaW5lXCIgW3N0eWxlLmNvbG9yXT1cImNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIntjb2xvcjogY29sb3J9XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtY29sb3JzIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiA+PC9uZ3gtY29sb3JzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGlkPVwidGV4dENvbG9yUGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFRleHRDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCd0ZXh0Q29sb3JQaWNrZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY29sb3ItdGV4dCBpY29uLXdpdGgtdW5kZXJsaW5lXCIgW3N0eWxlLmNvbG9yXT1cInNlbGVjdGVkVGV4dENvbG9yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkJhY2tncm91bmQgQ29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBpZD1cImJnQ29sb3JQaWNrZXJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9XCJzZXRCYWNrZ3JvdW5kQ29sb3IoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcignYmdDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWFscGhhLWEtYm94XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJCYWNrZ3JvdW5kIENvbG9yXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cImJhY2tncm91bmRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcignYmdDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWFscGhhLWEtYm94XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAwcHggIWltcG9ydGFudDtcIiBpZD1cImJnQ29sb3JQaWNrZXJcIiBbY3BQcmVzZXRDb2xvcnNdPVwiWycjZmZmJywgJyMwMDAnLCAnIzI4ODllOScsICcjZTkyMGU5JywgJyNmZmY1MDAnLCAncmdiKDIzNiw2NCw2NCknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhjb2xvclBpY2tlcildPVwiY29sb3JcIiAoY2hhbmdlKT1cInNldEJhY2tncm91bmRDb2xvcigkZXZlbnQpXCIgLz4gLS0+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJiZ0NvbG9yUGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldEJhY2tncm91bmRDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiSGVhZGVyIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJoZWFkZXJEcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMT4nKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci0xXCI+PC9pPiBIZWFkaW5nIDE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgyPicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTJcIj48L2k+IEhlYWRpbmcgMjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDM+JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItM1wiPjwvaT4gSGVhZGluZyAzPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoND4nKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci00XCI+PC9pPiBIZWFkaW5nIDQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg1PicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTVcIj48L2k+IEhlYWRpbmcgNTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDY+JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItNlwiPjwvaT4gSGVhZGluZyA2PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkhlYWRlciBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItZHJvcGRvd24tYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiIGlkPVwiaGVhZGVyRHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDg1cHg7XCI+e3tzZWxlY3RlZEZvcm1hdEJsb2NrIHwgdGl0bGVjYXNlfX08L3NwYW4+IDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1jaGV2cm9uLWRvd24gdGV4dC1kYXJrXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgxPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMT5IZWFkaW5nIDE8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgyPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5IZWFkaW5nIDI8L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgzPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5IZWFkaW5nIDM8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg0PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND5IZWFkaW5nIDQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg1PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5IZWFkaW5nIDU8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg2PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNj5IZWFkaW5nIDY8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPHA+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm9ybWFsPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdzdXBlcnNjcmlwdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdXBlcnNjcmlwdFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdzdWJzY3JpcHQnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3Vic2NyaXB0XCI+PC9pPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdWJzY3JpcHRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3Vic2NyaXB0JylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3Vic2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdXBlcnNjcmlwdEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdXBlcnNjcmlwdCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1cGVyc2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInFsLWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIGFycm93LW5vbmUgdGV4dC1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25CYXNpYzFcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWxlZnQgXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkJhc2ljMVwiIHN0eWxlPVwid2lkdGg6IDNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUxlZnQnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWxlZnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlDZW50ZXInKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWNlbnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1yaWdodFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUZ1bGwnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWp1c3RpZnlcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgncmVtb3ZlRm9ybWF0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY2xlYXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkTGluaygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbGluay12YXJpYW50XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydHNJbWFnZSgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktaW1hZ2VcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiaW1hZ2VJbnB1dFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT1cImhhbmRsZUltYWdlVXBsb2FkKCRldmVudClcIiBhY2NlcHQ9XCJpbWFnZS8qXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFRhYmxlKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFJvdygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXBsdXMtYWZ0ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcGx1cy1hZnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VcIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uLTJcIiAoY2xpY2spPVwiZWRpdEltYWdlKClcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+RWRpdCBJbWFnZTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gY3VzdG9tLWNvbG9yLXRyaWdnZXJcIj5cclxuICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLXRleHQgaWNvbi13aXRoLXVuZGVybGluZVwiIFtzdHlsZS5jb2xvcl09XCJjb2xvclwiPjwvaT5cclxuICAgICAgICA8bmd4LWNvbG9ycyBbKG5nTW9kZWwpXT1cImNvbG9yXCIgKGNoYW5nZSk9XCJjb2xvckNoYW5nZWQoJGV2ZW50KVwiPjwvbmd4LWNvbG9ycz5cclxuICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cFwiIG5nYkRyb3Bkb3duIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBuZ2JEcm9wZG93blRvZ2dsZSAgKGNsaWNrKT1cImFkZFRhYmxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSAqbmdJZj1cImlzVGFibGVTZWxlY3RlZCB8fCB0YWJsZUFkZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiYWRkUm93KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1wbHVzLWFmdGVyXCI+PC9pPiBBZGQgUm93XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiZGVsZXRlUm93KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1yZW1vdmVcIj48L2k+IERlbGV0ZSBSb3dcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXBsdXMtYWZ0ZXJcIj48L2k+IEFkZCBDb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJkZWxldGVDb2x1bW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXJlbW92ZVwiPjwvaT4gRGVsZXRlIENvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRhYmxlV2lkdGhcIj5UYWJsZSBXaWR0aDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJ0YWJsZVdpZHRoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAoY2hhbmdlKT1cImFkanVzdFRhYmxlV2lkdGgoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNlbGxXaWR0aFwiPkNlbGwgV2lkdGg8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiY2VsbFdpZHRoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAoY2hhbmdlKT1cImFkanVzdENlbGxXaWR0aCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY2VsbEhlaWdodFwiPkNlbGwgSGVpZ2h0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImNlbGxIZWlnaHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIChjaGFuZ2UpPVwiYWRqdXN0Q2VsbEhlaWdodCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSGVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDxkaXYgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIGlkPVwiZWRpdG9yXCIgY2xhc3M9XCJwLTMgY3VzdG9tLXNjcm9sbGJhciBub24tZm9jdXNcIiAjZWRpdG9yXHJcbiAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDtcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJ0aGVtZU1vZGVCZ0NscigpXCIgW3N0eWxlLmJvcmRlci10b3BdPVwidGhlbWVNb2RlQm9yZGVyVG9wKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnZm9udC1mYW1pbHknOiBzZWxlY3RlZEZvbnQsICdmb250LXNpemUnOiBzZWxlY3RlZEZvbnRTaXplICsgJ3B4J31cIiBbc3R5bGVdPVwic3R5bGVcIlxyXG4gICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIklzT3BlbiA/ICc4NXZoICFpbXBvcnRhbnQnIDogICc0MDVweCAhaW1wb3J0YW50J1wiXHJcbiAgICAgICAgKGlucHV0KT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiSW5zZXJ0IHRleHQgaGVyZSAuLi5cIiByZWFkb25seSAobW91c2V1cCk9XCJvblRleHRTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRDb250ZW50XCIgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNoZWNrVGFibGVTZWxlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgPC9kaXY+IC0tPlxyXG4gICAgPCEtLSA8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBpZD1cImVkaXRvclwiIGNsYXNzPVwicC0zIGN1c3RvbS1zY3JvbGxiYXIgbm9uLWZvY3VzIG92ZXJmbG93LWF1dG9cIiAjZWRpdG9yXHJcbiAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgIFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRoZW1lTW9kZUJnQ2xyKClcIlxyXG4gICAgICAgIFtzdHlsZS5ib3JkZXItdG9wXT1cInRoZW1lTW9kZUJvcmRlclRvcCgpXCJcclxuICAgICAgICBcclxuICAgICAgICBbbmdTdHlsZV09XCJ7J2ZvbnQtZmFtaWx5Jzogc2VsZWN0ZWRGb250LCAnZm9udC1zaXplJzogc2VsZWN0ZWRGb250U2l6ZSArICdweCcsXHJcbiAgICAgICAgICAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnOiBpc09wZW4gPyAnMCcgOicyMHB4JyxcclxuICAgICAgICAgICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnOiBpc09wZW4gPyAnMCcgOicyMHB4J1xyXG4gICAgICAgIH1cIlxyXG4gICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIklzT3BlbiA/ICc5M3ZoJyA6ICc0MDVweCdcIiAoaW5wdXQpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJJbnNlcnQgdGV4dCBoZXJlIC4uLlwiXHJcbiAgICAgICAgcmVhZG9ubHkgKG1vdXNldXApPVwib25UZXh0U2VsZWN0KCRldmVudClcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZENvbnRlbnRcIiAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCIgKGJsdXIpPVwib25CbHVyKClcIiAoY2xpY2spPVwiY2hlY2tUYWJsZVNlbGVjdGlvbigkZXZlbnQpXCI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgICA8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBpZD1cImVkaXRvclwiIGNsYXNzPVwicC0zIGN1c3RvbS1zY3JvbGxiYXIgbm9uLWZvY3VzIG92ZXJmbG93LWF1dG9cIiAjZWRpdG9yXHJcbiAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsgb3ZlcmZsb3c6IGF1dG87XCIgW3N0eWxlLmJhY2tncm91bmRdPVwidGhlbWVNb2RlQmdDbHIoKVwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlci10b3BdPVwidGhlbWVNb2RlQm9yZGVyVG9wKClcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiBzZWxlY3RlZEZvbnQsIFxyXG4gICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6IHNlbGVjdGVkRm9udFNpemUgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnOiBJc09wZW4gPyAnMCcgOicyMHB4JyxcclxuICAgICAgICAgICAgICAgICdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyc6IElzT3BlbiA/ICcwJyA6JzIwcHgnLFxyXG4gICAgICAgICAgICAgICAgJ21pbi1oZWlnaHQnOiBJc09wZW4gPyAnOTN2aCcgOiAnNDA1cHgnLFxyXG4gICAgICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBJc09wZW4gPyAnOTN2aCcgOiAnNDA1cHgnXHJcbiAgICAgICAgICAgIH1cIiBwbGFjZWhvbGRlcj1cIkluc2VydCB0ZXh0IGhlcmUgLi4uXCIgcmVhZG9ubHkgKG1vdXNldXApPVwib25UZXh0U2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgIChpbnB1dCk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZENvbnRlbnRcIiAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIiAoY2xpY2spPVwiY2hlY2tUYWJsZVNlbGVjdGlvbigkZXZlbnQpXCI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8dGFibGUgKm5nSWY9XCJwYXJzZWRUYWJsZVwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgcGFyc2VkVGFibGUuaGVhZGVyc1wiPnt7IGhlYWRlciB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHBhcnNlZFRhYmxlLnJvd3NcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3dcIj57eyBjZWxsIH19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuXHJcbjwvZGl2PiJdfQ==
1661
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWwtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZWwtdGV4dC1lZGl0b3Ivc3JjL2xpYi9lbC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lbC10ZXh0LWVkaXRvci9zcmMvbGliL2VsLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ3RLLE9BQU8sRUFBcUMsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU10Rix5R0FBeUc7QUFDekcsT0FBTyxFQUFFLFFBQVEsRUFBYyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFhakQsTUFBTSxPQUFPLHFCQUFxQjtJQW1GaEMsWUFDVSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsUUFBbUIsRUFDbkIsU0FBdUI7UUFIdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQXJGeEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQVN4QixnQkFBVyxHQUFnQyxPQUFPLENBQUM7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9DLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFB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ckIscUJBQXFCLCtsQkFObkIsQ0FBQztZQUNaLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsb1BDbkJKLG90bENBcWVNOzJGRGhkTyxxQkFBcUI7a0JBVmpDLFNBQVM7K0JBQ0UsYUFBYSxhQUdWLENBQUM7NEJBQ1osT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7NktBSU8sVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLEtBQUs7c0JBQWIsS0FBSztnQkFHbUIsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNFLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG4vLyBpbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOZ3hGdWxsc2NyZWVuRGlyZWN0aXZlIH0gZnJvbSAnQHVsdGltYXRlL25neC1mdWxsc2NyZWVuJztcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XG4vLyBpbXBvcnQgeyBJbWFnZUVkaXRvck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWxzL2ltYWdlLWVkaXRvci1tb2RhbC9pbWFnZS1lZGl0b3ItbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbXByZXNzLCBkZWNvbXByZXNzIH0gZnJvbSAnbHotc3RyaW5nJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXh0LWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbC10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VsLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVsVGV4dEVkaXRvckNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgRWxUZXh0RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgZWRpdG9yVGV4dDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVkaXRvckZyb206IGFueTtcbiAgQElucHV0KCkgZWRpdG9yQWN0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIFVzZXJSb2xlOiBhbnk7XG4gIEBJbnB1dCgpIHN0eWxlOiBhbnk7XG4gIEBJbnB1dCgpIGRpc2FibGVUb29sYmFyOiBhbnk7XG4gIEBJbnB1dCgpIHBsYWNlSG9sZGVyOiBhbnk7XG4gIEBJbnB1dCgpIHJlcG9ydElkOiBhbnk7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRJbWFnZTogYW55O1xuICBASW5wdXQoKSB0b29sYmFyTW9kZTogJ2ZpeGVkJyB8ICdidWJibGUnIHwgJ25vbmUnID0gJ2ZpeGVkJztcbiAgQE91dHB1dCgpIGVkaXRvclRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGVkaXRvckFjdGlvblJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBlZGl0b3JUZXh0Q2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGltYWdlRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaW1hZ2VFZGl0MiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGxhY2VIb2xkZXJSZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGlzT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbmV3SW1hZ2VBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIFxuICBAVmlld0NoaWxkKCd0ZXh0RWRpdG9yJykgVGV4dEVkaXRvciE6ICBFbGVtZW50UmVmPEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdmdWxsc2NyZWVuJykgZnVsbHNjcmVlbiE6IE5neEZ1bGxzY3JlZW5EaXJlY3RpdmVcbiAgICBcbiAgc2FuaXRpemVkQ29udGVudCE6IFNhZmVIdG1sO1xuXG5cbiAgc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgdG9vbGJhclRvcCA9IDA7XG4gIHRvb2xiYXJMZWZ0ID0gMDtcblxuICBmb250cyA9IFsnQXJpYWwnLCAnQ291cmllciBOZXcnLCAnR2VvcmdpYScsICdUaW1lcyBOZXcgUm9tYW4nLCAnVmVyZGFuYSddO1xuICBmb250U2l6ZXMgPSBbMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjQsIDI4LCAzMiwgMzZdO1xuICBzZWxlY3RlZEZvbnQgPSAnQXJpYWwnO1xuICBzZWxlY3RlZEZvbnRTaXplID0gMTQ7XG4gIGlzVGFibGVTZWxlY3RlZCA9IGZhbHNlO1xuICB0YWJsZUFkZGVkID0gZmFsc2U7XG4gIHNlbGVjdGVkVGFibGU6IEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgaXNQbGFjZWhvbGRlclZpc2libGUgPSB0cnVlO1xuICBzZWxlY3RlZENlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIFxuICBpc0JvbGRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJdGFsaWNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVbmRlcmxpbmVBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTdHJpa2V0aHJvdWdoQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3Vic2NyaXB0QWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3VwZXJzY3JpcHRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzZWxlY3RlZEZvcm1hdEJsb2NrOiBzdHJpbmcgPSAnbm9ybWFsJ1xuXG4gIHNlbGVjdGVkSW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgaW1hZ2VFZGl0VXJsOiBzdHJpbmcgPSAnJztcbiAgaW1hZ2VQb3NpdGlvblggPSAwO1xuICBpbWFnZVBvc2l0aW9uWSA9IDA7XG4gIGltYWdlUmVzaXplU3RhcnRYID0gMDtcbiAgaW1hZ2VSZXNpemVTdGFydFkgPSAwO1xuICBpbWFnZVJlc2l6ZVN0YXJ0V2lkdGggPSAwO1xuICBpbWFnZVJlc2l6ZVN0YXJ0SGVpZ2h0ID0gMDtcbiAgaW1hZ2VSZXNpemVEaXJlY3Rpb246ICd0b3BMZWZ0JyB8ICd0b3BSaWdodCcgfCAnYm90dG9tTGVmdCcgfCAnYm90dG9tUmlnaHQnIHwgbnVsbCA9IG51bGw7XG5cbiAgdW5kb1N0YWNrOiBzdHJpbmdbXSA9IFtdO1xuICByZWRvU3RhY2s6IHN0cmluZ1tdID0gW107XG4gIGhpc3Rvcnk6IHN0cmluZ1tdID0gW107XG4gIGhpc3RvcnlJbmRleCA9IC0xO1xuICAvLyBlZGl0b3JUZXh0MSA9IGBgO1xuICBzZWxlY3RlZFRleHRDb2xvcjogYW55O1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG4gIGNvbG9yOiBhbnkgPSAnI2RkZCc7XG4gIGNvbG9yRm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcbiAgYmFja2dyb3VuZENvbG9yOiBhbnk7XG4gIHNlbGVjdGVkSXRlbUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBwYXJzZWRUYWJsZTogeyBoZWFkZXJzOiBzdHJpbmdbXSwgcm93czogc3RyaW5nW11bXSB9IHwgbnVsbCA9IG51bGw7XG5cbiAgaXNGdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIGN1cnJlbnRDYXJldFBvc2l0aW9uOiBhbnk7XG4gIHVzZXJSb2xlOiBhbnlbXSA9IFtdO1xuICBzaG93RWRpdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICkge1xuICAgIHRoaXMuZ2V0VXNlclJvbGVzKClcblxuICAgIFxuICB9XG5cbiAgdGhlbWVNb2RlKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcycHggc29saWQgIzQwM0Y0QSAhaW1wb3J0YW50J1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjRDBEMEQwICFpbXBvcnRhbnQnXG4gICAgfVxuICB9XG5cbiAgdGhlbWVNb2RlQ2xyKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcjZmZmICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnIzAwMCAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZUNsclZlcnRpY2FsTGluZSgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICNGRkZGRkYgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcycHggc29saWQgI0QwRDBEMCAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZUJnQ2xyKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcjMjgyODI4ICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnI0YzRjNGMyAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZUJvcmRlclRvcCgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICMwMDAgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcycHggc29saWQgI2ZmZiAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3BsYWNlSG9sZGVyJ10pIHtcbiAgICAgIHRoaXMuaW5zZXJ0QXRDYXJldCh0aGlzLnBsYWNlSG9sZGVyKVxuXG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3JlcG9ydElkJ10pIHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3JlcG9ydElkJywgdGhpcy5yZXBvcnRJZClcbiAgICB9IFxuXG4gICAgaWYgKGNoYW5nZXNbJ1VzZXJSb2xlJ10pIHsgXG4gICAgICB0aGlzLmdldFVzZXJSb2xlcygpXG4gICAgfVxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmluaXRFZGl0b3IoKTtcbiAgICB0aGlzLmNoZWNrUGxhY2Vob2xkZXIoKTtcbiAgICB0aGlzLnNldHVwSGlzdG9yeSgpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCB0aGlzLm9uRnVsbHNjcmVlbkNoYW5nZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRfRnVuYyh0aGlzLmVkaXRvclRleHQpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja0FjdGl2ZVN0YXRlcygpO1xuICAgICAgdGhpcy5jaGVja0Zvcm1hdEJsb2NrKCk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKTtcbiAgICB0aGlzLmFkZENsaWNrTGlzdGVuZXJUb0VsZW1lbnRzKCk7XG4gICAgLy8gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHBhcmFtc1snZGF0YSddKTtcbiAgICAvLyAgIGlmIChkYXRhLmVkaXRlZElNRykge1xuICAgIC8vICAgICBjb25zdCBpbWdVcmwgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcpO1xuICAgIC8vICAgICBpZiAoaW1nVXJsKSB7XG4gICAgLy8gICAgICAgdGhpcy5yZXBsYWNlSW1hZ2VTcmMoaW1nVXJsLCBkYXRhLmluZGV4LmluZGV4KVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgfVxuXG4gICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBDbGVhbnVwIHRoZSBldmVudCBsaXN0ZW5lciB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMub25GdWxsc2NyZWVuQ2hhbmdlKTtcbiAgfVxuXG4gIElzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgdG9nZ2xlRnVsbHNjcmVlbjEoKSB7XG4gICAgICB0aGlzLklzT3BlbiA9ICF0aGlzLklzT3BlbjtcbiAgICAgIHRoaXMuaXNPcGVuLmVtaXQodGhpcy5Jc09wZW4pXG4gICAgICBpZiAodGhpcy5Jc09wZW4pIHsgXG4gICAgICAgIHRoaXMuZnVsbHNjcmVlbi5lbnRlcih0aGlzLlRleHRFZGl0b3IubmF0aXZlRWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZ1bGxzY3JlZW4uZXhpdCgpXG4gICAgICB9XG4gICAgfVxuICBcbiAgcHJpdmF0ZSBvbkZ1bGxzY3JlZW5DaGFuZ2UgPSAoKSA9PiB7XG4gICAgaWYgKCFkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCkge1xuICAgICAgLy8gV2hlbiBmdWxsc2NyZWVuIG1vZGUgaXMgZXhpdGVkXG4gICAgICB0aGlzLklzT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5pc09wZW4uZW1pdCh0aGlzLklzT3Blbik7XG4gICAgfVxuICB9O1xuICBcbiAgLy8gZW50ZXJGdWxsc2NyZWVuVmlkZW8oKSB7XG4gIC8vICAgY29uc29sZS5sb2coJ2V2ZW50OicsIGV2ZW50KTtcbiAgLy8gICBjb25zdCBmdWxsc2NyZWVuID0gZXZlbnQ7XG4gIC8vICAgdGhpcy5pc09wZW4gPSBldmVudDtcbiAgLy8gICBpZiAoZnVsbHNjcmVlbikge1xuICAvLyAgICAgdGhpcy5mdWxsc2NyZWVuLmVudGVyKHRoaXMuVGV4dEVkaXRvci5uYXRpdmVFbGVtZW50KTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5mdWxsc2NyZWVuLmV4aXQoKVxuICAvLyAgIH1cbiAgICBcbiAgLy8gfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvclRleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuICAgICAgdGhpcy5pbml0X0Z1bmModGhpcy5lZGl0b3JUZXh0KTtcbiAgICB9XG4gIH1cbiAgXG4vLyAgcHJpdmF0ZSBhZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKSB7XG4vLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbi8vICAgaWYgKGVkaXRvcikge1xuLy8gICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuLy8gICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuLy8gICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbi8vICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuXG4vLyAgICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLnNlbGVjdGVkSW1hZ2UucGFyZW50RWxlbWVudDtcbi8vICAgICAgICAgaWYgKCFjb250YWluZXIgfHwgY29udGFpbmVyLmNsYXNzTmFtZSAhPT0gJ2ltYWdlLWNvbnRhaW5lcicpIHtcbi8vICAgICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbi8vICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2ltYWdlLWNvbnRhaW5lcic7XG4vLyAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbi8vICAgICAgICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuLy8gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCB0aGlzLnNlbGVjdGVkSW1hZ2UpO1xuLy8gICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGVkSW1hZ2UpO1xuLy8gICAgICAgICB9XG4vLyAgICAgICAgIGNvbnN0IGV4aXN0aW5nQnV0dG9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xuLy8gICAgICAgICBpZiAoZXhpc3RpbmdCdXR0b24pIHtcbi8vICAgICAgICAgICBleGlzdGluZ0J1dHRvbi5yZW1vdmUoKTtcbi8vICAgICAgICAgfVxuXG4vLyAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuLy8gICAgICAgICAvLyBidXR0b24udGV4dENvbnRlbnQgPSAnRWRpdCc7XG4vLyAgICAgICAgIGJ1dHRvbi5pbm5lclRleHQgPSAnRWRpdCBJbWFnZSc7XG5cbi8vICAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdpbWFnZS1lZGl0LWJ1dHRvbiBidG4gYnRuLXNtJztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9ICc1MCUnO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9ICc1MCUnO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKSc7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS56SW5kZXggPSAnMTAwMCc7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZic7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICNmZmYnO1xuLy8gICAgICAgICAvLyBidXR0b24uc3R5bGUucGFkZGluZyA9ICcxMHB4Jztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmNvbG9yID0gJyMzMTNhNDYnO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuXG4vLyAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4vLyAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbi8vICAgICAgICAgICB0aGlzLmVkaXRJbWFnZSgpO1xuLy8gICAgICAgICB9KTtcblxuLy8gICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcbi8vICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4vLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xuLy8gICAgICAgfVxuLy8gICAgIH0pO1xuLy8gICB9XG4gIC8vIH1cbiAgZ2V0VXNlclJvbGVzKCkge1xuICAgIHRoaXMudXNlclJvbGUgPSB0aGlzLlVzZXJSb2xlXG4gIH1cbiAgLy8gcm9sZUNoZWNrKCkge1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy51c2VyUm9sZS5sZW5ndGg7ICsraSkge1xuICAvLyAgICAgY29uc3Qgcm9sZU5hbWUgPSBbXVxuICAvLyAgICAgICByb2xlTmFtZS5wdXNoKHRoaXMudXNlclJvbGVbaV0/Lm5hbWUpO1xuICAvLyAgICAgcmV0dXJuIHRoaXMudXNlclJvbGVbaV0/Lm5hbWU7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcm9sZUNoZWNrKCkge1xuICAgIGxldCB1c2VyUm9sZU5hbWU6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gdGhpcy51c2VyUm9sZS5sZW5ndGg7ICsraSkge1xuICAgICAgdXNlclJvbGVOYW1lLnB1c2godGhpcy51c2VyUm9sZVtpXT8ubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB1c2VyUm9sZU5hbWU7XG4gIH1cblxuXG4vLyBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcbi8vICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuLy8gICBjb25zdCByb2xlcyA9IHRoaXMucm9sZUNoZWNrKCk7IC8vIEdldCB1c2VyIHJvbGVzIGR5bmFtaWNhbGx5XG4vLyAgIGNvbnN0IGlzQWRtaW4gPSByb2xlcy5pbmNsdWRlcygnQWRtaW4nKTtcbi8vICAgY29uc3QgaXNDcmVhdG9yID0gcm9sZXMuaW5jbHVkZXMoJ0NyZWF0b3InKTtcbi8vICAgY29uc3QgaXNBcHByb3ZlciA9IHJvbGVzLmluY2x1ZGVzKCdBcHByb3ZlcicpO1xuICBcbi8vICAgaWYgKGlzQ3JlYXRvciB8fCBpc0FkbWluKSB7XG4vLyAgICAgaWYgKGVkaXRvcikge1xuLy8gICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuLy8gICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuLy8gICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbi8vICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuLy8gICAgICAgICBsZXQgY29udGFpbmVyID0gdGhpcy5zZWxlY3RlZEltYWdlLnBhcmVudEVsZW1lbnQ7XG4vLyAgICAgICAgIGlmICghY29udGFpbmVyIHx8IGNvbnRhaW5lci5jbGFzc05hbWUgIT09ICdpbWFnZS1jb250YWluZXInKSB7XG4vLyAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4vLyAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICdpbWFnZS1jb250YWluZXInO1xuLy8gICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4vLyAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsgIFxuLy8gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCB0aGlzLnNlbGVjdGVkSW1hZ2UpO1xuLy8gICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGVkSW1hZ2UpO1xuLy8gICAgICAgICB9XG5cbi8vICAgICAgICAgY29uc3QgZXhpc3RpbmdCdXR0b24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmltYWdlLWVkaXQtYnV0dG9uJyk7XG4vLyAgICAgICAgIGlmIChleGlzdGluZ0J1dHRvbikge1xuLy8gICAgICAgICAgIGV4aXN0aW5nQnV0dG9uLnJlbW92ZSgpO1xuLy8gICAgICAgICB9XG5cbi8vICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4vLyAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCAgPSAnRWRpdCBJbWFnZSc7XG4vLyAgICAgICAgIGJ1dHRvbi5jbGFzc05hbWUgPSAnaW1hZ2UtZWRpdC1idXR0b24gYnRuIGJ0bi1zbSc7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSAnNTAlJztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSAnNTAlJztcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUuekluZGV4ID0gJzEwMDAnO1xuLy8gICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmYnOyBcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmJvcmRlciA9ICcycHggc29saWQgI2ZmZic7IFxuLy8gICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAnIzMxM2E0Nic7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xuXG4vLyAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4vLyAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbi8vICAgICAgICAgICB0aGlzLmVkaXRJbWFnZSgpO1xuLy8gICAgICAgICB9KTtcblxuLy8gICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuLy8gICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IG51bGw7XG4vLyAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW1hZ2UtZWRpdC1idXR0b24nKTtcbi8vICAgICAgICAgYnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiBidXR0b24ucmVtb3ZlKCkpO1xuLy8gICAgICAgfVxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyAgIH1cbiAgLy8gfVxuICBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICBjb25zdCByb2xlcyA9IHRoaXMucm9sZUNoZWNrKCk7IC8vIEdldCB1c2VyIHJvbGVzIGR5bmFtaWNhbGx5XG4gIGNvbnN0IGlzQWRtaW4gPSByb2xlcy5pbmNsdWRlcygnQWRtaW4nKTtcbiAgY29uc3QgaXNDcmVhdG9yID0gcm9sZXMuaW5jbHVkZXMoJ0NyZWF0b3InKTtcblxuICBpZiAoaXNDcmVhdG9yIHx8IGlzQWRtaW4pIHtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTUcnKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuXG4gICAgICAgICAgbGV0IGNvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIGlmICghY29udGFpbmVyIHx8IGNvbnRhaW5lci5jbGFzc05hbWUgIT09ICdpbWFnZS1jb250YWluZXInKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnaW1hZ2UtY29udGFpbmVyJztcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShjb250YWluZXIsIHRoaXMuc2VsZWN0ZWRJbWFnZSk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3RlZEltYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdGluZ0J1dHRvbiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuaW1hZ2UtZWRpdC1idXR0b24nKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdCdXR0b24pIHtcbiAgICAgICAgICAgIGV4aXN0aW5nQnV0dG9uLnJlbW92ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdFZGl0IEltYWdlJztcbiAgICAgICAgICBidXR0b24uY2xhc3NOYW1lID0gJ2ltYWdlLWVkaXQtYnV0dG9uIGJ0biBidG4tc20nO1xuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9ICc1MCUnO1xuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gJzUwJSc7XG4gICAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknO1xuICAgICAgICAgIGJ1dHRvbi5zdHlsZS56SW5kZXggPSAnMTAwMCc7XG4gICAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmJztcbiAgICAgICAgICBidXR0b24uc3R5bGUuYm9yZGVyID0gJzJweCBzb2xpZCAjZmZmJztcbiAgICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAnIzMxM2E0Nic7XG4gICAgICAgICAgYnV0dG9uLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICBidXR0b24uc3R5bGUudXNlclNlbGVjdCA9ICdub25lJztcblxuICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5lZGl0SW1hZ2UoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRWRpdEJ1dHRvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE1vbml0b3IgZWRpdG9yIGNvbnRlbnQgY2hhbmdlcyB0byBoYW5kbGUgaW1hZ2UgZGVsZXRpb25cbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBidXR0b25zID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xuICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGJ1dHRvbi5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIGlmIChjb250YWluZXIgJiYgIWNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xuICAgICAgICAgICAgYnV0dG9uLnJlbW92ZSgpOyAvLyBSZW1vdmUgdGhlIGJ1dHRvbiBpZiB0aGUgYXNzb2NpYXRlZCBpbWFnZSBpcyBnb25lXG4gICAgICAgICAgICBjb250YWluZXIucmVtb3ZlKCk7IC8vIENsZWFuIHVwIHRoZSBjb250YWluZXJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE9ic2VydmUgY2hhbmdlcyBpbiB0aGUgZWRpdG9yXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGVkaXRvciwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbnByaXZhdGUgcmVtb3ZlRWRpdEJ1dHRvbnMoKSB7XG4gIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW1hZ2UtZWRpdC1idXR0b24nKTtcbiAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IGJ1dHRvbi5yZW1vdmUoKSk7XG4gIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xufVxuXG5cbiAgLy8gcHJpdmF0ZSBhZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKSB7XG4gIC8vIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgLy8gaWYgKGVkaXRvcikge1xuICAvLyAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAvLyAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAvLyAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgLy8gICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuXG4gIC8vICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGltYWdlXG4gIC8vICAgICAgIGNvbnN0IGltYWdlcyA9IGVkaXRvci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XG4gIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgICAgaWYgKGltYWdlc1tpXSA9PT0gdGhpcy5zZWxlY3RlZEltYWdlKSB7XG4gIC8vICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcbiAgLy8gICAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xuICAvLyAgICAgICAgIHRoaXMub25UZXh0U2VsZWN0KCk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuICAvLyB9XG4gIC8vIH1cbiAgXG4gIHByaXZhdGUgYWRkQ2xpY2tMaXN0ZW5lclRvRWxlbWVudHMoKSB7XG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpbWFnZXNbaV0gPT09IHRoaXMuc2VsZWN0ZWRJbWFnZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGFyZ2V0LmNsb3Nlc3QoJ3RhYmxlJykgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnNlbGVjdGVkVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFyZ2V0LnRhZ05hbWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNlbGxzW2ldID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdQJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1NQQU4nIHx8IHRhcmdldC50YWdOYW1lID09PSAnRElWJykge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhcmdldC50YWdOYW1lKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhZ3JhcGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBhcmFncmFwaHNbaV0gPT09IHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICB9XG5cbnJlcGxhY2VJbWFnZVNyYyhuZXdTcmM6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIFxuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLmZvY3VzKClcbiAgICBjb25zdCBpbWFnZXMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0lNRycpO1xuICAgIGlmIChpbmRleCA+PSAwICkge1xuICAgICAgaW1hZ2VzW2luZGV4XS5zZXRBdHRyaWJ1dGUoJ3NyYycsIG5ld1NyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgSW5kZXggJHtpbmRleH0gaXMgb3V0IG9mIGJvdW5kcy4gVG90YWwgaW1hZ2VzOiAke2ltYWdlcy5sZW5ndGh9YCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZCcpO1xuICB9XG59XG5cblxuXG4gIHByaXZhdGUgaW5pdEVkaXRvcigpIHtcbiAgICAvLyBJbml0aWFsaXplIGVkaXRvciBjb250ZW50IGFuZCBsaXN0ZW5lcnNcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG5cbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5lZGl0b3JUZXh0O1xuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgdGhlIGRpc2FibGVkIHN0YXRlIGlmIG5lY2Vzc2FyeVxuICB9XG5cbiAgb25Nb2RlbENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBWQUxVRSA9IHZhbHVlXG4gICAgICB0aGlzLmVkaXRvclRleHQgPSBWQUxVRTtcbiAgICAgIHRoaXMub25DaGFuZ2UoVkFMVUUpO1xuICAgICAgdGhpcy5lZGl0b3JUZXh0Q2hhbmdlLmVtaXQoVkFMVUUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5SW1hZ2VTdHlsZXMoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gY29udGVudDtcbiAgICBjb25zdCBpbWFnZXMgPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnaW1nJyk7XG4gICAgaW1hZ2VzLmZvckVhY2goaW1nID0+IHtcbiAgICAgIGlmIChpbWcuc3R5bGUubWF4V2lkdGggPj0gJzcwMHB4Jykge1xuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnNzAwcHgnO1xuICAgICAgICAvLyBpbWcud2lkdGggPSAzMDA7XG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICAvLyBpbml0X0Z1bmMoaHRtbDogYW55KSB7XG4gIC8vICAgaWYgKGh0bWwpIHtcbiAgLy8gICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIC8vICAgICBpZiAoZWRpdG9yKSB7IFxuICAvLyAgICAgICBlZGl0b3IuZm9jdXMoKVxuICAvLyAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gaHRtbDtcbiAgLy8gICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5hcHBseUltYWdlU3R5bGVzKGh0bWwpKTtcbiAgLy8gICAgICAgZWRpdG9yLmlubmVySFRNTCA9IHRoaXMuc2FuaXRpemVkQ29udGVudCBhcyBzdHJpbmc7XG4gIC8vICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgLy8gICAgICAgICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICAgICAgICBlZGl0b3IuZm9jdXMoKVxuICAvLyAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGVkaXRvci5pbm5lckhUTUwpO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIC8vICAgfVxuICAvLyB9XG4gIFxuLy8gICBpbml0X0Z1bmMoaHRtbDogYW55KSB7XG4vLyAgIGlmIChodG1sKSB7XG4vLyAgICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbi8vICAgICBpZiAoZWRpdG9yKSB7XG4vLyAgICAgICAvLyBJbml0aWFsaXplIHRoZSBlZGl0b3Igd2l0aCBzYW5pdGl6ZWQgY29udGVudFxuICAgICAgXG4vLyAgICAgICB0aGlzLnNldEVkaXRvckNvbnRlbnQoaHRtbCk7XG5cbi8vICAgICAgIC8vIFNldCB1cCBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gaGFuZGxlIGNvbnRlbnQgY2hhbmdlc1xuLy8gICAgICAgdGhpcy5zZXR1cE11dGF0aW9uT2JzZXJ2ZXIoZWRpdG9yKTtcblxuLy8gICAgICAgLy8gTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCBhZnRlciBpbml0aWFsIGNvbnRlbnQgc2V0dXBcbi8vICAgICAgIHRoaXMubW92ZUNhcmV0VG9FbmQoZWRpdG9yKTtcblxuLy8gICAgICAgLy8gVHJhY2sgY2FyZXQgcG9zaXRpb24gb24gbW91c2UgY2xpY2tcbi8vICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbi8vICAgICAgICAgaWYgKGVkaXRvcikgeyAgLy8gRW5zdXJlIGVkaXRvciBpcyBub3QgbnVsbFxuLy8gICAgICAgICAgIC8vIHRoaXMudHJhY2tDYXJldFBvc2l0aW9uKGVkaXRvcik7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pO1xuLy8gICAgIH1cbi8vICAgfSBlbHNlIHtcbi8vICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuLy8gICB9XG4vLyB9XG5cbi8vIHByaXZhdGUgc2V0RWRpdG9yQ29udGVudChodG1sOiBzdHJpbmcpIHtcbi8vICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbi8vICAgaWYgKGVkaXRvcikge1xuLy8gICAgIC8vIFNhbml0aXplIGFuZCBhcHBseSBzdHlsZXMgdG8gdGhlIEhUTUxcbi8vICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xuLy8gICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLnNhbml0aXplZENvbnRlbnQgYXMgc3RyaW5nO1xuLy8gICB9XG4vLyB9XG5cbi8vIHByaXZhdGUgc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcbi8vICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4vLyAgICAgLy8gVXBkYXRlIG1vZGVsIHdpdGggdGhlIGN1cnJlbnQgY29udGVudFxuLy8gICAgIHRoaXMub25Nb2RlbENoYW5nZShlZGl0b3IuaW5uZXJIVE1MKTtcbi8vICAgfSk7XG5cbi8vICAgb2JzZXJ2ZXIub2JzZXJ2ZShlZGl0b3IsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuLy8gfVxuXG4vLyBUaGlzIGZ1bmN0aW9uIHRyYWNrcyB0aGUgY2FyZXQgcG9zaXRpb24gYmFzZWQgb24gdGhlIG1vdXNlIGNsaWNrXG5wcml2YXRlIHRyYWNrQ2FyZXRQb3NpdGlvbihlZGl0b3I6IEhUTUxFbGVtZW50KSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIGNvbnN0IHN0YXJ0Tm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG5cblxuICAgIC8vIFlvdSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gaW5zZXJ0IGNvbnRlbnQgb3IgcGVyZm9ybSBhY3Rpb25zIGJhc2VkIG9uIHRoZSBjYXJldCBwb3NpdGlvblxuICAgIC8vIEV4YW1wbGU6IFNhdmUgdGhlIGN1cnJlbnQgY2FyZXQgcG9zaXRpb24gZm9yIGZ1dHVyZSB1c2VcbiAgICB0aGlzLmN1cnJlbnRDYXJldFBvc2l0aW9uID0geyBub2RlOiBzdGFydE5vZGUsIG9mZnNldDogc3RhcnRPZmZzZXQgfTtcbiAgfVxuICB9XG4gIFxuICAvLyBNZXRob2QgdG8gZ2V0IGNhcmV0IHBvc2l0aW9uIGFuZCBpbnNlcnQgbmV3IGRhdGFcbnByaXZhdGUgaW5zZXJ0QXRDYXJldChuZXdEYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBcbiAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcmFuZ2UgKGNhcmV0IHBvc2l0aW9uKVxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgICAvLyBDcmVhdGUgYSBkb2N1bWVudCBmcmFnbWVudCB0byBpbnNlcnQgKGFsbG93cyBoYW5kbGluZyBIVE1MIHN0cmluZ3MpXG4gICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gbmV3RGF0YTtcblxuICAgIC8vIEFwcGVuZCB0aGUgbmV3IGRhdGEgdG8gdGhlIGZyYWdtZW50IChzdXBwb3J0cyBIVE1MIGluc2VydGlvbilcbiAgICB3aGlsZSAodGVtcERpdi5maXJzdENoaWxkKSB7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIC8vIEluc2VydCB0aGUgZnJhZ21lbnQgYXQgdGhlIGNhcmV0IHBvc2l0aW9uXG4gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsgLy8gUmVtb3ZlIGFueSBzZWxlY3RlZCBjb250ZW50IGlmIGFwcGxpY2FibGVcbiAgICByYW5nZS5pbnNlcnROb2RlKGZyYWdtZW50KTtcblxuICAgIC8vIE1vdmUgdGhlIGNhcmV0IGFmdGVyIHRoZSBpbnNlcnRlZCBjb250ZW50XG4gICAgY29uc3QgbGFzdENoaWxkID0gZnJhZ21lbnQubGFzdENoaWxkO1xuXG4gICAgaWYgKGxhc3RDaGlsZCkge1xuICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihsYXN0Q2hpbGQpO1xuICAgICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIobGFzdENoaWxkKTtcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5tb3ZlQ2FyZXRUb0VuZChlZGl0b3IpXG4gICAgfVxuICAgIFxuICAgIHRoaXMucGxhY2VIb2xkZXJSZW1vdmUuZW1pdCgpXG4gICAgY29uc29sZS5sb2coJ05ldyBkYXRhIGluc2VydGVkIGF0IGNhcmV0LicpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdObyBjYXJldCBwb3NpdGlvbiBmb3VuZC4nKTtcbiAgfVxufVxuXG5cbi8vICAgLy8gTW92ZSBjYXJldCB0byB0aGUgZW5kIG9mIHRoZSBlZGl0b3IgY29udGVudFxuLy8gICBwcml2YXRlIG1vdmVDYXJldFRvRW5kKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcbi8vICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4vLyAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIFxuLy8gICAgIGlmIChlZGl0b3IubGFzdENoaWxkKSB7XG4vLyAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbi8vICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIGVuZFxuLy8gICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbi8vICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgXG4vLyAgICAgfVxuLy8gICB9XG4gIFxuICBcblxuXG4gIGluaXRfRnVuYyhodG1sOiBhbnkpIHtcbiAgaWYgKGh0bWwpIHtcbiAgICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGVkaXRvciB3aXRoIHNhbml0aXplZCBjb250ZW50XG4gICAgICB0aGlzLnNldEVkaXRvckNvbnRlbnQoaHRtbCk7XG5cbiAgICAgIC8vIFNldCB1cCBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gaGFuZGxlIGNvbnRlbnQgY2hhbmdlc1xuICAgICAgdGhpcy5zZXR1cE11dGF0aW9uT2JzZXJ2ZXIoZWRpdG9yKTtcbiAgICAgIFxuICAgICAgLy8gTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCBhZnRlciBpbml0aWFsIGNvbnRlbnQgc2V0dXBcbiAgICAgIHRoaXMubW92ZUNhcmV0VG9FbmQoZWRpdG9yKTtcbiAgICAgIC8vICBUcmFjayBjYXJldCBwb3NpdGlvbiBvbiBtb3VzZSBjbGlja1xuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBpZiAoZWRpdG9yKSB7ICAvLyBFbnN1cmUgZWRpdG9yIGlzIG5vdCBudWxsXG4gICAgICAgICAgdGhpcy50cmFja0NhcmV0UG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIH1cbn1cblxuXG5wcml2YXRlIHNldEVkaXRvckNvbnRlbnQoaHRtbDogc3RyaW5nKSB7XG4gIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIGlmIChlZGl0b3IpIHtcbiAgICAvLyBTYW5pdGl6ZSBhbmQgYXBwbHkgc3R5bGVzIHRvIHRoZSBIVE1MXG4gICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5hcHBseUltYWdlU3R5bGVzKGh0bWwpKTtcbiAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5zYW5pdGl6ZWRDb250ZW50IGFzIHN0cmluZztcbiAgfVxufVxuXG5wcml2YXRlIHNldHVwTXV0YXRpb25PYnNlcnZlcihlZGl0b3I6IEhUTUxFbGVtZW50KSB7XG4gIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgIC8vIE1vdmUgdGhlIGNhcmV0IHRvIHRoZSBlbmQgYWZ0ZXIgY29udGVudCBjaGFuZ2VzXG4gICAgLy8gdGhpcy5tb3ZlQ2FyZXRUb0VuZChlZGl0b3IpO1xuICAgIC8vIFVwZGF0ZSBtb2RlbCB3aXRoIHRoZSBjdXJyZW50IGNvbnRlbnRcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XG4gIH0pO1xuXG4gIG9ic2VydmVyLm9ic2VydmUoZWRpdG9yLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbn1cblxucHJpdmF0ZSBtb3ZlQ2FyZXRUb0VuZChlZGl0b3I6IEhUTUxFbGVtZW50KSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBcbiAgaWYgKGVkaXRvci5sYXN0Q2hpbGQpIHtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7IC8vIENvbGxhcHNlIHRvIHRoZSBlbmRcbiAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59XG5cbi8vICAgaW5pdF9GdW5jKGh0bWw6IGFueSkge1xuLy8gICBpZiAoaHRtbCkge1xuLy8gICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4vLyAgICAgaWYgKGVkaXRvcikge1xuLy8gICAgICAgZWRpdG9yLmZvY3VzKCk7XG4vLyAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gaHRtbDtcblxuLy8gICAgICAgLy8gU2FuaXRpemUgdGhlIGNvbnRlbnQgYW5kIGFwcGx5IHN0eWxlc1xuLy8gICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5hcHBseUltYWdlU3R5bGVzKGh0bWwpKTtcbi8vICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLnNhbml0aXplZENvbnRlbnQgYXMgc3RyaW5nO1xuXG4vLyAgICAgICAvLyBQbGFjZSB0aGUgY2FyZXQgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudFxuLy8gICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuLy8gICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgXG4vLyAgICAgICBpZiAoZWRpdG9yLmxhc3RDaGlsZCkge1xuLy8gICAgICAgICAvLyBTZXQgdGhlIHJhbmdlIGF0IHRoZSBlbmQgb2YgdGhlIGVkaXRvcidzIGNvbnRlbnRcbi8vICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7XG4vLyAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gY29sbGFwc2UgdG8gdGhlIGVuZFxuLy8gICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuLy8gICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbi8vICAgICAgIH1cblxuLy8gICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuLy8gICAgICAgICBpZiAoZWRpdG9yKSB7XG4vLyAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGVkaXRvci5pbm5lckhUTUwpO1xuXG4vLyAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjYXJldCByZW1haW5zIGF0IHRoZSBlbmQgYWZ0ZXIgbmV3IGNvbnRlbnQgaXMgYWRkZWRcbi8vICAgICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4vLyAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIFxuLy8gICAgICAgICAgIGlmIChlZGl0b3IubGFzdENoaWxkKSB7XG4vLyAgICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbi8vICAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gY29sbGFwc2UgdG8gdGhlIGVuZFxuLy8gICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbi8vICAgICAgICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgfVxuLy8gICAgICAgfSk7XG4vLyAgICAgfVxuLy8gICB9IGVsc2Uge1xuLy8gICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4vLyAgIH1cbi8vIH1cblxuICBmb3JtYXQoY29tbWFuZDogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIGlmIChjb21tYW5kID09PSAnc3Vic2NyaXB0Jykge1xuICAgICAgICB0aGlzLmlzU3Vic2NyaXB0QWN0aXZlID0gIXRoaXMuaXNTdWJzY3JpcHRBY3RpdmU7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdWJzY3JpcHQnLCBmYWxzZSwgJycpO1xuICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09PSAnc3VwZXJzY3JpcHQnKSB7XG4gICAgICAgIHRoaXMuaXNTdXBlcnNjcmlwdEFjdGl2ZSA9ICF0aGlzLmlzU3VwZXJzY3JpcHRBY3RpdmU7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdXBlcnNjcmlwdCcsIGZhbHNlLCAnJyk7O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlID8/ICcnKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgdGFnID0gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bPD5dL2csICcnKVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtYXRCbG9jayA9IHRoaXMuZm9ybWF0QmxvY2tEZWNvZGUodGFnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAgdGhpcy5jaGVja0FjdGl2ZVN0YXRlcygpO1xuICAgICB0aGlzLmNoZWNrRm9ybWF0QmxvY2soKTtcbiAgfVxuXG4gIGNoZWNrQWN0aXZlU3RhdGVzKCkge1xuICAgIHRoaXMuaXNCb2xkQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2JvbGQnKTtcbiAgICB0aGlzLmlzSXRhbGljQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2l0YWxpYycpO1xuICAgIHRoaXMuaXNVbmRlcmxpbmVBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgndW5kZXJsaW5lJyk7XG4gICAgdGhpcy5pc1N0cmlrZXRocm91Z2hBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3RyaWtldGhyb3VnaCcpO1xuICAgIHRoaXMuaXNTdWJzY3JpcHRBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3Vic2NyaXB0Jyk7XG4gICAgdGhpcy5pc1N1cGVyc2NyaXB0QWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ3N1cGVyc2NyaXB0Jyk7XG4gIH1cblxuICBjaGVja0Zvcm1hdEJsb2NrKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBjb25zdCBmb3JtYXRCbG9jayA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JtYXRCbG9jaycpO1xuICAgICAgdGhpcy5zZWxlY3RlZEZvcm1hdEJsb2NrID0gdGhpcy5mb3JtYXRCbG9ja0RlY29kZShmb3JtYXRCbG9jayk7XG4gICAgICAvLyBZb3UgY2FuIGZ1cnRoZXIgaGFuZGxlIHRoZSBmb3JtYXRCbG9jayB2YWx1ZSBhcyBuZWVkZWRcbiAgICB9XG4gIH1cblxuICBmb3JtYXRCbG9ja0RlY29kZShkYXRhOiBzdHJpbmcpOiBhbnkge1xuICAgIHN3aXRjaCAoZGF0YSkge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDInOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDMnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDQnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDUnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncCc6XG4gICAgICAgIHJldHVybiAnbm9ybWFsJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ25vcm1hbCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUZvbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRGb250ID0gZXZlbnQ7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnROYW1lJywgZmFsc2UsIHRoaXMuc2VsZWN0ZWRGb250KTtcbiAgfVxuXG4gIGluc2VydENvZGVCbG9jaygpIHtcbiAgICBjb25zdCBjb2RlID0gYFxuICAgICAgPHByZSBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1wiPlxuICAgICAgICA8Y29kZSBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XG4gICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XCIgY2xhc3M9XCJsYW5ndWFnZS1odG1sXCI+SW5zZXJ0IGNvZGUgaGVyZS4uLjwvY29kZT5cbiAgICAgIDwvcHJlPlxuICAgIGA7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgY29kZSk7XG4gIH1cblxuICAvLyBjaGFuZ2VGb250U2l6ZShldmVudDogYW55KSB7XG4gIC8vICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnRTaXplJywgZmFsc2UsICc3Jyk7XG4gIC8vICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgLy8gICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICBsZXQgZm9udEVsZW1lbnRzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb250Jyk7XG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgICBpZiAoZm9udEVsZW1lbnRzW2ldLnNpemUgPT0gXCI3XCIpIHtcbiAgLy8gICAgICAgICBmb250RWxlbWVudHNbaV0ucmVtb3ZlQXR0cmlidXRlKFwic2l6ZVwiKTtcbiAgLy8gICAgICAgICBmb250RWxlbWVudHNbaV0uc3R5bGUuZm9udFNpemUgPSB0aGlzLnNlbGVjdGVkRm9udFNpemUgKyAncHgnO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG4gIGNoYW5nZUZvbnRTaXplKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZWxlY3RlZFRleHQgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgXG4gICAgaWYgKHNlbGVjdGVkVGV4dCAmJiBzZWxlY3RlZFRleHQucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3RlZFRleHQuZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IHRoaXMuc2VsZWN0ZWRGb250U2l6ZSArICdweCc7XG4gICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XG4gICAgfVxuICB9XG5cbiAgYWRkTGluaygpIHtcbiAgICBsZXQgdXJsID0gcHJvbXB0KFwiRW50ZXIgdGhlIGxpbmsgaGVyZTogXCIsIFwiaHR0cDovL1wiKTtcbiAgICBpZiAodXJsKSB7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNyZWF0ZUxpbmtcIiwgZmFsc2UsIHVybCk7XG4gICAgfVxuICB9XG5cbiAgaW5zZXJ0c0ltYWdlKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIGxldCBpbWFnZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlSW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGltYWdlSW5wdXQpIHtcbiAgICAgICAgaW1hZ2VJbnB1dC5jbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGhhbmRsZUltYWdlVXBsb2FkKGV2ZW50OiBhbnkpIHtcbiAgLy8gICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAvLyAgIGlmIChmaWxlKSB7XG4gIC8vICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAvLyAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgLy8gICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gIC8vICAgICAgIGltZy5zcmMgPSBlLnRhcmdldC5yZXN1bHQ7XG4gIC8vICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gIC8vICAgICAgICAgLy8gQ3JlYXRlIHRoZSBIVE1MIHN0cmluZyB3aXRoIHRoZSBleGFjdCB3aWR0aCBhbmQgaGVpZ2h0XG4gIC8vICAgICAgICAgY29uc3QgaW1nSFRNTCA9IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiB3aWR0aD1cIiR7Nzk0fVwiID5gO1xuICAvLyAgICAgICAgIC8vIEluc2VydCB0aGUgaW1hZ2UgaW50byB0aGUgZWRpdG9yXG4gIC8vICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgaW1nSFRNTCk7XG4gIC8vICAgICAgIH07XG4gIC8vICAgICB9O1xuICAvLyAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgaGFuZGxlSW1hZ2VVcGxvYWQoZXZlbnQ6IGFueSkge1xuICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICBjb25zdCBlZGl0b3JFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpOyAvLyBSZWZlcmVuY2UgdG8gdGhlIGVkaXRvclxuXG4gIGlmIChmaWxlICYmIGVkaXRvckVsZW1lbnQpIHtcbiAgICBjb25zdCBlZGl0b3JXaWR0aCA9IGVkaXRvckVsZW1lbnQub2Zmc2V0V2lkdGg7IC8vIEdldCB0aGUgZWRpdG9yJ3Mgd2lkdGhcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgaW1nLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDtcblxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaW1nV2lkdGggPSBpbWcud2lkdGg7XG5cbiAgICAgICAgLy8gSWYgdGhlIGltYWdlIHdpZHRoIGV4Y2VlZHMgdGhlIGVkaXRvcidzIHdpZHRoLCBmaXQgaXQgdG8gdGhlIGVkaXRvclxuICAgICAgICBjb25zdCBpbWdIVE1MID1cbiAgICAgICAgICBpbWdXaWR0aCA+IGVkaXRvcldpZHRoXG4gICAgICAgICAgICA/IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBtYXgtd2lkdGg6ICR7ZWRpdG9yV2lkdGh9cHg7IGhlaWdodDogYXV0bztcIj5gXG4gICAgICAgICAgICA6IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiBzdHlsZT1cIndpZHRoOiAke2ltZ1dpZHRofXB4OyBoZWlnaHQ6IGF1dG87XCI+YDtcbiAgICAgICAgdGhpcy5uZXdJbWFnZUFkZGVkLmVtaXQoKVxuICAgICAgICAvLyBJbnNlcnQgdGhlIGltYWdlIGludG8gdGhlIGVkaXRvclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBpbWdIVE1MKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9XG59XG5cblxuXG4gIC8vIGFkZFRhYmxlKCkge1xuICAvLyAgIGNvbnN0IHRhYmxlV2lkdGggPSA4MjU7IC8vIFRhYmxlIHdpZHRoIGluIHBpeGVsc1xuICAvLyAgIGNvbnN0IGNvbHMgPSAzOyAvLyBOdW1iZXIgb2YgY29sdW1uc1xuICAvLyAgIGNvbnN0IGNlbGxNaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2xzOyAvLyBDYWxjdWxhdGUgbWluaW11bSB3aWR0aCBmb3IgZWFjaCBjZWxsXG5cbiAgLy8gICBsZXQgdGFibGUgPSBgPGJyIC8+PHRhYmxlIHN0eWxlPVwid2lkdGg6ICR7dGFibGVXaWR0aH1weDtcIj5gO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7IC8vIE51bWJlciBvZiByb3dzXG4gIC8vICAgICB0YWJsZSArPSAnPHRyID4nO1xuICAvLyAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgLy8gICAgICAgdGFibGUgKz0gYDx0ZCBzdHlsZT1cIiB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgbWluLXdpZHRoOiAke2NlbGxNaW5XaWR0aH1weDtcIj4mbmJzcDs8L3RkPmA7XG4gIC8vICAgICB9XG4gIC8vICAgICB0YWJsZSArPSAnPC90cj4nO1xuICAvLyAgIH1cbiAgLy8gICAgIHRhYmxlICs9ICc8L3RhYmxlPjxici8gPic7XG4gIC8vICAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCB0YWJsZSk7XG4gIC8vICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIC8vICAgaWYgKGVkaXRvcikge1xuICAvLyAgICAgZWRpdG9yLmZvY3VzKCk7XG4gIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCB0YWJsZSk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMudGFibGVBZGRlZCA9IHRydWU7XG4gIC8vICAgdGhpcy5jaGVja1RhYmxlU2VsZWN0aW9uKCk7XG4gIC8vIH1cblxuICBhZGRUYWJsZSgpIHtcbiAgY29uc3QgdGFibGVXaWR0aCA9IDgyNTsgLy8gVGFibGUgd2lkdGggaW4gcGl4ZWxzXG4gIGNvbnN0IGNvbHMgPSAzOyAvLyBOdW1iZXIgb2YgY29sdW1uc1xuICBjb25zdCBjZWxsTWluV2lkdGggPSB0YWJsZVdpZHRoIC8gY29sczsgLy8gQ2FsY3VsYXRlIG1pbmltdW0gd2lkdGggZm9yIGVhY2ggY2VsbFxuXG4gIGxldCB0YWJsZSA9IGA8YnIgLz48dGFibGUgc3R5bGU9XCJ3aWR0aDogJHt0YWJsZVdpZHRofXB4O1wiPmA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7IC8vIE51bWJlciBvZiByb3dzXG4gICAgdGFibGUgKz0gYDx0ciBzdHlsZT1cImJvcmRlci1ib3R0b206ICR7dGhpcy50aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmVGb3JUYWJsZSgpfVwiPmA7IC8vIEFkZCBib3JkZXItYm90dG9tIHRvIHRoZSByb3dcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgdGFibGUgKz0gYDx0ZCBzdHlsZT1cIndvcmQtd3JhcDogYnJlYWstd29yZDsgd29yZC1icmVhazogYnJlYWstYWxsOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyBtaW4td2lkdGg6ICR7Y2VsbE1pbldpZHRofXB4O1wiPiZuYnNwOzwvdGQ+YDtcbiAgICB9XG4gICAgdGFibGUgKz0gJzwvdHI+JztcbiAgfVxuICB0YWJsZSArPSAnPC90YWJsZT48YnIvPic7XG5cbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgdGFibGUpO1xuICB9XG5cbiAgdGhpcy50YWJsZUFkZGVkID0gdHJ1ZTtcbiAgdGhpcy5jaGVja1RhYmxlU2VsZWN0aW9uKCk7XG59XG5cblxuXG5cbiAgY2hlY2tUYWJsZVNlbGVjdGlvbihldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBsZXQgdGFyZ2V0ID0gZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0ICYmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1REJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1RIJykpIHtcbiAgICAgIHRoaXMuaXNUYWJsZVNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IHRhcmdldC5jbG9zZXN0KCd0YWJsZScpIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNUYWJsZVNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSBudWxsO1xuICAgIH1cbiAgICBcbiAgICAvLyB0aGlzLmNoZWNrUGxhY2Vob2xkZXIoKTtcbiAgfVxuXG4gIGNoZWNrUGxhY2Vob2xkZXIoKSB7XG4gICAgLy8gbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICAvLyBpZiAoZWRpdG9yKSB7XG4gICAgLy8gICB0aGlzLmlzUGxhY2Vob2xkZXJWaXNpYmxlID0gZWRpdG9yLmlubmVySFRNTCA9PT0gJycgfHwgZWRpdG9yLmlubmVySFRNTCA9PT0gJzxicj4nO1xuICAgIC8vICAgaWYgKHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUpIHtcbiAgICAvLyAgICAgLy8gZWRpdG9yLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cInBsYWNlaG9sZGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgY29sb3I6ICMwMDAwMDBcIj5JbnNlcnQgdGV4dCBoZXJlIC4uLjwvc3Bhbj4nO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgbGV0IHBsYWNlaG9sZGVyID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5wbGFjZWhvbGRlcicpO1xuICAgIC8vICAgICBpZiAocGxhY2Vob2xkZXIpIHtcbiAgICAvLyAgICAgICBlZGl0b3IucmVtb3ZlQ2hpbGQocGxhY2Vob2xkZXIpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICB9XG5cbiAgb25Gb2N1cygpIHtcbiAgICAvLyBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICAgIC8vIGlmIChlZGl0b3IgJiYgdGhpcy5pc1BsYWNlaG9sZGVyVmlzaWJsZSkge1xuICAgIC8vICAgZWRpdG9yLmlubmVySFRNTCA9ICcnO1xuICAgIC8vICAgdGhpcy5pc1BsYWNlaG9sZGVyVmlzaWJsZSA9IGZhbHNlO1xuICAgIC8vIH1cbiAgfVxuXG4gIC8vIGNvbG9yQ2hhbmdlKG5ld0NvbG9yOiBzdHJpbmcpIHtcbiAgLy8gICB0aGlzLmNvbG9yID0gbmV3Q29sb3I7XG4gIC8vIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XG4gIH1cblxuICAvLyBhZGRSb3coKSB7XG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAvLyAgICAgbGV0IHJvdyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5pbnNlcnRSb3coKTtcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbMF0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgICAgbGV0IGNlbGwgPSByb3cuaW5zZXJ0Q2VsbChpKTtcbiAgLy8gICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7JztcbiAgLy8gICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGJsYWNrJztcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cblxuICBhZGRSb3coKSB7XG4gIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbiAgICBsZXQgcm93ID0gdGhpcy5zZWxlY3RlZFRhYmxlLmluc2VydFJvdygpO1xuICAgIHJvdy5zdHlsZS5ib3JkZXJCb3R0b20gPSB0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCk7IC8vIEFkZCBib3R0b20gYm9yZGVyIHRvIHRoZSByb3dcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2VsbCA9IHJvdy5pbnNlcnRDZWxsKGkpO1xuICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7JztcbiAgICB9XG4gIH1cbn1cblxuXG4gIC8vIGRlbGV0ZVJvdygpIHtcbiAgLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gIC8vICAgICB0aGlzLnNlbGVjdGVkVGFibGUuZGVsZXRlUm93KC0xKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuLy8gICBkZWxldGVSb3coKSB7XG4vLyAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbi8vICAgICBsZXQgcm93SW5kZXggPSB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGggLSAxOyBcbi8vICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuLy8gICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbi8vICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbi8vICAgICAgICAgbGV0IHJvdyA9IHNlbGVjdGlvbi5hbmNob3JOb2RlPy5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KCd0cicpO1xuLy8gICAgICAgICBpZiAocm93KSB7XG4vLyAgICAgICAgICAgcm93SW5kZXggPSByb3cucm93SW5kZXg7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7XG4vLyAgIH1cbi8vIH1cblxuICBkZWxldGVSb3coKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICBjb25zdCByb3cgPSBzZWxlY3RlZE5vZGUucGFyZW50RWxlbWVudD8uY2xvc2VzdCgndHInKTtcblxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gcm93LmNsb3Nlc3QoJ3RhYmxlJyk7XG4gICAgICBpZiAodGFibGUpIHtcbiAgICAgICAgdGFibGUuZGVsZXRlUm93KHJvdy5yb3dJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuICAvLyBhZGRDb2x1bW4oKSB7XG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgICBsZXQgY2VsbCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmluc2VydENlbGwoLTEpO1xuICAvLyAgICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xuICAvLyAgICAgICBjZWxsLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4vLyAgIGFkZENvbHVtbigpIHtcbi8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuLy8gICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbMF0uY2VsbHMubGVuZ3RoICsgMTsgLy8gTmV3IGNvbHVtbiBjb3VudFxuLy8gICAgIGNvbnN0IHRhYmxlV2lkdGggPSB0aGlzLnNlbGVjdGVkVGFibGUub2Zmc2V0V2lkdGg7XG4vLyAgICAgY29uc3QgbWluV2lkdGggPSB0YWJsZVdpZHRoIC8gY29sdW1uQ291bnQ7XG5cbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4vLyAgICAgICBsZXQgY2VsbCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmluc2VydENlbGwoLTEpO1xuLy8gICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7Jztcbi8vICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4vLyAgICAgICBjZWxsLnN0eWxlLm1pbldpZHRoID0gYCR7bWluV2lkdGh9cHhgO1xuLy8gICAgICAgY2VsbC5zdHlsZS53b3JkV3JhcCA9ICdicmVhay13b3JkJztcbi8vICAgICAgIGNlbGwuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XG4vLyAgICAgICBjZWxsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm9ybWFsJztcbi8vICAgICB9XG5cbi8vICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2VsbHMnIG1pbldpZHRoXG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxscy5sZW5ndGg7IGorKykge1xuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS5taW5XaWR0aCA9IGAke21pbldpZHRofXB4YDtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH1cbiAgLy8gfVxuICBcbiAgYWRkQ29sdW1uKCkge1xuICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgY29uc3QgY29sdW1uQ291bnQgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGggKyAxOyAvLyBOZXcgY29sdW1uIGNvdW50XG4gICAgY29uc3QgdGFibGVXaWR0aCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBtaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2x1bW5Db3VudDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjZWxsID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uaW5zZXJ0Q2VsbCgtMSk7XG4gICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xuICAgICAgY2VsbC5zdHlsZS53b3JkV3JhcCA9ICdicmVhay13b3JkJztcbiAgICAgIGNlbGwuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XG4gICAgICBjZWxsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm9ybWFsJztcbiAgICAgIGNlbGwuc3R5bGUubWluV2lkdGggPSBgJHttaW5XaWR0aH1weGA7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGV4aXN0aW5nIHJvd3MnIGJvdHRvbSBib3JkZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5zdHlsZS5ib3JkZXJCb3R0b20gPSB0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCk7XG4gICAgfVxuICB9XG4gIH1cbiAgXG5cblxuXG5cbiAgZGVsZXRlQ29sdW1uKCkge1xuICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGxldCBjZWxsID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ3RkLCB0aCcpIGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgIGxldCBjZWxsSW5kZXggPSBjZWxsLmNlbGxJbmRleDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5kZWxldGVDZWxsKGNlbGxJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiAgdGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKSB7XG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjNDE0MTQxICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICM1RjVGNUYgIWltcG9ydGFudCdcbiAgICB9XG4gIH1cblxuICBhZGp1c3RUYWJsZVdpZHRoKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUuc3R5bGUud2lkdGggPSBldmVudC50YXJnZXQudmFsdWUgKyAncHgnO1xuICAgIH1cbiAgfVxuXG4gIGFkanVzdENlbGxXaWR0aChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHNbal0uc3R5bGUud2lkdGggPSBldmVudC50YXJnZXQudmFsdWUgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRqdXN0Q2VsbEhlaWdodChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHNbal0uc3R5bGUuaGVpZ2h0ID0gZXZlbnQudGFyZ2V0LnZhbHVlICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FyZXRUb0VuZChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoc2VsKSB7XG4gICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9wZW5Db2xvclBpY2tlcihpbnB1dElkOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKTtcbiAgLy8gICBpZiAoaW5wdXRFbGVtZW50KSB7XG4gIC8vICAgICBpbnB1dEVsZW1lbnQuY2xpY2soKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBzZXRUZXh0Q29sb3IoZXZlbnQ6IGFueSkge1xuICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgLy8gICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgLy8gICAgIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAvLyAgICAgdGhpcy5zZWxlY3RlZFRleHRDb2xvciA9IGNvbG9yO1xuICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIGZhbHNlLCBjb2xvcik7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLy8gc2V0QmFja2dyb3VuZENvbG9yKGV2ZW50OiBhbnkpIHtcbiAgLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIC8vICAgaWYgKGVkaXRvcikge1xuICAvLyAgICAgZWRpdG9yLmZvY3VzKCk7XG4gIC8vICAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgLy8gICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaGlsaXRlQ29sb3InLCBmYWxzZSwgY29sb3IpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIHByaXZhdGUgc2F2ZWRTZWxlY3Rpb246IFJhbmdlIHwgbnVsbCA9IG51bGw7XG5cbm9wZW5Db2xvclBpY2tlcihpbnB1dElkOiBzdHJpbmcpIHtcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlucHV0RWxlbWVudCkge1xuICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLnNhdmVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgfVxuICAgIGlucHV0RWxlbWVudC5jbGljaygpO1xuICB9XG59XG5cbnNldFRleHRDb2xvcihldmVudDogYW55KSB7XG4gIGlmICh0aGlzLnNhdmVkU2VsZWN0aW9uKSB7XG4gICAgY29uc3QgY29sb3IgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZFRleHRDb2xvciA9IGNvbG9yO1xuXG4gICAgLy8gUmVzdG9yZSB0aGUgc2F2ZWQgc2VsZWN0aW9uXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLnNhdmVkU2VsZWN0aW9uKTtcblxuICAgICAgLy8gQXBwbHkgdGhlIGNvbG9yIHVzaW5nIGEgc3BhblxuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNhdmVkU2VsZWN0aW9uO1xuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSBjb2xvcjtcbiAgICAgIHNwYW4udGV4dENvbnRlbnQgPSByYW5nZS50b1N0cmluZygpO1xuXG4gICAgICAvLyBSZXBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIHN0eWxlZCBzcGFuXG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcblxuICAgICAgLy8gQ2xlYXIgdGhlIHNhdmVkIHNlbGVjdGlvblxuICAgICAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbiAgc2V0QmFja2dyb3VuZENvbG9yKGV2ZW50OiBhbnkpIHtcbiAgaWYgKHRoaXMuc2F2ZWRTZWxlY3Rpb24pIHtcbiAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuXG4gICAgLy8gUmVzdG9yZSB0aGUgc2F2ZWQgc2VsZWN0aW9uXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLnNhdmVkU2VsZWN0aW9uKTtcblxuICAgICAgLy8gQXBwbHkgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgYSBzcGFuXG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2F2ZWRTZWxlY3Rpb247XG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcbiAgICAgIHNwYW4udGV4dENvbnRlbnQgPSByYW5nZS50b1N0cmluZygpO1xuXG4gICAgICAvLyBSZXBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIHN0eWxlZCBzcGFuXG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcblxuICAgICAgLy8gQ2xlYXIgdGhlIHNhdmVkIHNlbGVjdGlvblxuICAgICAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG4gIH1cbiAgXG4gIC8vIGNvbG9yQ2hhbmdlZChldmVudDogYW55KSB7XG4gIC8vICAgdGhpcy5jb2xvciA9IGV2ZW50LmNvbG9yLmhleDsgXG4gIC8vIH1cblxuICBwdWJsaWMgbG9nRXZlbnQoZXZlbnQ6IGFueSwgdHJpZ2dlcjogYW55KSB7XG4gICAgY29uc3QgY29sb3IgPSBldmVudDtcbiAgICB0aGlzLnNldFRleHRDb2xvcihjb2xvcilcbiAgICB0aGlzLnNlbGVjdGVkVGV4dENvbG9yID0gZXZlbnRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgZmFsc2UsIGV2ZW50KTtcbiAgICAvLyB0aGlzLmxvZ3MudW5zaGlmdChbdGhpcy5sb2dzLmxlbmd0aCArIDEsIHRyaWdnZXIsIGV2ZW50XSk7XG4gIH1cbiAgXG5cbiAgZWRpdEltYWdlKCkge1xuICAgIGxldCBkYXRhIFxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmVkaXRvckZyb20gPScsdGhpcy5lZGl0b3JGcm9tKVxuICAgIHN3aXRjaCAodGhpcy5lZGl0b3JGcm9tLm5hbWUpIHtcbiAgICAgIGNhc2UgJ3NlY3Rpb24tY29udGVudCc6XG4gICAgICAgIGRhdGEgPSB7IGVkaXRJTUc6IHRydWUsIGZyb206ICdodG1sRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgsIGlkOiB0aGlzLmVkaXRvckZyb20uaWQgfTtcbiAgICAgICAgY29uc3QgY29tcHJlc3NlZERhdGE6IHN0cmluZyA9IGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSk7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wJywgY29tcHJlc3NlZERhdGEpO1xuICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YTIgPSBjb21wcmVzcyhKU09OLnN0cmluZ2lmeSh0aGlzLnNhbml0aXplZENvbnRlbnQpKTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndGV4dEVkaXRvcicsIGNvbXByZXNzZWREYXRhMik7XG4gICAgICAgIC8vIGFsZXJ0KCdnbyB0byBlZGl0b3IhJylcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvSU1HRWRpdG9yKGRhdGEpO1xuICAgICAgICB0aGlzLmltYWdlRWRpdC5lbWl0KClcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjcmVhdGUtZG9jdW1lbnQnOlxuICAgICAgICB0aGlzLmltYWdlRWRpdC5lbWl0KClcbiAgICAgICAgZGF0YSA9IHsgZWRpdElNRzogdHJ1ZSwgZnJvbTogJ2NyZWF0ZURvY3VtZW50JywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgsIGlkOiB0aGlzLmVkaXRvckZyb20uaWQsIHNlY3Rpb246IHRoaXMuZWRpdG9yRnJvbS5zZWN0aW9uLCByZXBvcnRTZWN0aW9uSWQ6IHRoaXMuZWRpdG9yRnJvbS5yZXBvcnRTZWN0aW9uSWQgfTtcbiAgICAgICAgLy8gdGhpcy5vcGVuRGlhbG9nKGRhdGEpXG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhMyA9IGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSk7XG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhNCA9IGNvbXByZXNzKHRoaXMuZWRpdG9yVGV4dCk7XG5cbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJywgY29tcHJlc3NlZERhdGEzKTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndGV4dEVkaXRvcjInLCBjb21wcmVzc2VkRGF0YTQpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbnVsbFxuICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcpO1xuICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcDInKTtcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGVtcGxhdGVFZGl0b3InKTtcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGV4dEVkaXRvcicpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMuZWRpdG9yRnJvbSA9PT0gJ3NlY3Rpb24tY29udGVudCcpIHtcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSB7ZWRpdElNRzogdHJ1ZSwgZnJvbTogJ2h0bWxFZGl0b3InLCBpbmRleDogdGhpcy5zZWxlY3RlZEl0ZW1JbmRleH1cbiAgICAvLyAgIHRoaXMubmF2aWdhdGVUb0lNR0VkaXRvcihkYXRhKVxuICAgIC8vICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmltYWdlRWRpdFVybCkpXG4gICAgLy8gICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0ZXh0RWRpdG9yJywgdGhpcy5lZGl0b3JUZXh0KVxuICAgIC8vIH0gXG4gICAgXG4gIH1cblxuICBvcGVuRGlhbG9nKCBpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBsZXQgZGF0YTogYW55O1xuICAgIC8vICAgZGF0YSA9IGl0ZW1cbiAgICAvLyBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEltYWdlRWRpdG9yTW9kYWxDb21wb25lbnQse1xuICAgIC8vICAgbWluV2lkdGg6ICcxMDAlJywgbWluSGVpZ2h0OiAnMTAwdmgnLCBwYW5lbENsYXNzOiAndGhlbWUtMkIyOTM2JyAsZGlzYWJsZUNsb3NlOiB0cnVlLCBkYXRhOiBkYXRhXG4gICAgLy8gfSk7XG4gICAgLy8gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgLy8gICBjb25zb2xlLmxvZygncmVzdWx0ID09PT4gaW1nID0gJywgcmVzdWx0KVxuICAgIC8vICAgY29uc3QgaW1nVXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJyk7XG4gICAgLy8gICAgIGlmIChpbWdVcmwpIHtcbiAgICAvLyAgICAgICB0aGlzLnJlcGxhY2VJbWFnZVNyYyhpbWdVcmwsICByZXN1bHQuaW5kZXguaW5kZXgpO1xuICAgIC8vICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wMicpO1xuICAgIC8vICAgICB9XG4gICAgLy8gfSk7XG4gIH1cblxuICByZXBsYWNlSW1hZ2VTUkMobmV3U3JjOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0aGlzLmVkaXRvclRleHQsICd0ZXh0L2h0bWwnKTtcbiAgICBjb25zdCBpbWdUYWdzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcblxuICBpZiAoaW1nVGFncyAmJiBpbWdUYWdzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGltZ1RhZ3MubGVuZ3RoKSB7XG4gICAgICAvLyBVcGRhdGUgdGhlIHNyYyBhdHRyaWJ1dGUgb2YgdGhlIGltZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gICAgICBcbiAgICAgIGltZ1RhZ3NbaW5kZXhdLnNldEF0dHJpYnV0ZSgnc3JjJywgbmV3U3JjKTtcbiAgICAgIHRoaXMuZWRpdG9yVGV4dCA9IGRvYy5ib2R5LmlubmVySFRNTDtcbiAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBpbmRleCAke2luZGV4fS4gVGhlcmUgYXJlIG9ubHkgJHtpbWdUYWdzLmxlbmd0aH0gPGltZz4gdGFncy5gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcignTm8gPGltZz4gdGFncyBmb3VuZCBpbiB0aGUgZWRpdG9yIHRleHQuJyk7XG4gIH1cbiAgfVxuXG4gIG5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YTogYW55KSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWRtaW4vaW1hZ2UtZWRpdG9yJ10sIHsgcXVlcnlQYXJhbXM6IHtkYXRhIDogSlNPTi5zdHJpbmdpZnkoZGF0YSl9IH0pXG4gIH1cblxuICAvLyAgb25UZXh0U2VsZWN0KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gIC8vICAgaWYgKHRoaXMudG9vbGJhck1vZGUgPT09ICdidWJibGUnKSB7XG4gIC8vICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIC8vICAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAvLyAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAvLyAgICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAvLyAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJUb3AgPSByZWN0LmJvdHRvbSArIHdpbmRvdy5zY3JvbGxZICsgMTA7XG4gIC8vICAgICAgICAgdGhpcy50b29sYmFyTGVmdCA9IHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYICsgKHJlY3Qud2lkdGggLyAyKSAtIDUwO1xuICAvLyAgICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSB0cnVlO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gb25UZXh0U2VsZWN0KGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICBpZiAodGhpcy50b29sYmFyTW9kZSA9PT0gJ2J1YmJsZScpIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFkgPSAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWCA9ICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy50b29sYmFyVG9wID0gcmVjdC50b3AgKyBzY3JvbGxZIC0gNzU7XG4gICAgICAgIHRoaXMudG9vbGJhckxlZnQgPSByZWN0LmxlZnQgKyBzY3JvbGxYICsgKHJlY3Qud2lkdGggLyAyKSAtIDMyNTtcbiAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dUb29sYmFyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuLy8gICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4vLyAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGE7XG4vLyAgICAgaWYgKGNsaXBib2FyZERhdGEpIHtcbi8vICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbi8vICAgICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKHBhc3RlZFRleHQpKSB7XG4vLyAgICAgICAgIGNvbnN0IGh0bWwgPSB0aGlzLmNvbnZlcnRUZXh0VG9UYWJsZShwYXN0ZWRUZXh0KTtcbi8vICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcbi8vICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQocGFzdGVkVGV4dCk7XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICB9XG5cbiAgLy8gb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgLy8gICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhO1xuICAvLyAgIGlmIChjbGlwYm9hcmREYXRhKSB7XG4gIC8vICAgICAvLyBIYW5kbGUgaW1hZ2UgZGF0YVxuICAvLyAgICAgY29uc3QgaXRlbXMgPSBjbGlwYm9hcmREYXRhLml0ZW1zO1xuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgICBpZiAoaXRlbXNbaV0udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAvLyAgICAgICAgIGNvbnN0IGZpbGUgPSBpdGVtc1tpXS5nZXRBc0ZpbGUoKTtcbiAgLy8gICAgICAgICBpZiAoZmlsZSkge1xuICAvLyAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgLy8gICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gIC8vICAgICAgICAgICAgIGNvbnN0IGltZ0h0bWwgPSBgPGltZyBzcmM9XCIke2UudGFyZ2V0LnJlc3VsdH1cIiBhbHQ9XCJQYXN0ZWQgSW1hZ2VcIiBzdHlsZT1cIm1heC13aWR0aDogMTAwJTtcIi8+YDtcbiAgLy8gICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChpbWdIdG1sKTtcbiAgLy8gICAgICAgICAgIH07XG4gIC8vICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgLy8gICAgICAgICAgIHJldHVybjsgLy8gRXhpdCBpZiBhbiBpbWFnZSBpcyBoYW5kbGVkXG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIC8vIEhhbmRsZSB0ZXh0IG9yIHRhYmxlIGRhdGFcbiAgLy8gICAgIGNvbnN0IHBhc3RlZFRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgLy8gICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKHBhc3RlZFRleHQpKSB7XG4gIC8vICAgICAgIGNvbnN0IGh0bWwgPSB0aGlzLmNvbnZlcnRUZXh0VG9UYWJsZShwYXN0ZWRUZXh0KTtcbiAgLy8gICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQocGFzdGVkVGV4dCk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhO1xuICAgIGlmIChjbGlwYm9hcmREYXRhKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGNsaXBib2FyZERhdGEuaXRlbXNbaV07XG5cbiAgICAgICAgaWYgKGl0ZW0udHlwZS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGltYWdlIHBhc3RlXG4gICAgICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbWdIdG1sID0gYDxpbWcgc3JjPVwiJHtlLnRhcmdldC5yZXN1bHR9XCIgYWx0PVwiUGFzdGVkIEltYWdlXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7XCIgLz5gO1xuICAgICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGltZ0h0bWwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFwidGV4dC9odG1sXCIpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgSFRNTCBwYXN0ZVxuICAgICAgICAgIC8vIGNvbnN0IGh0bWxEYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9odG1sXCIpO1xuICAgICAgICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJykpKSB7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gdGhpcy5jb252ZXJ0VGV4dFRvVGFibGUoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKSk7XG4gICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWxEYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBcInRleHQvcGxhaW5cIikge1xuICAgICAgICAgIC8vIEhhbmRsZSBwbGFpbiB0ZXh0IHBhc3RlXG4gICAgICAgICAgaWYgKHRoaXMuaXNUYWJsZURhdGEoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJykpKSB7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gdGhpcy5jb252ZXJ0VGV4dFRvVGFibGUoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJykpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbnN0IHBsYWluVGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7XG4gICAgICAgICAgLy8gdGhpcy5pbnNlcnRIdG1sQXRDYXJldChwbGFpblRleHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzRXhjZWxEYXRhKGh0bWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBodG1sLmluY2x1ZGVzKCd4bWxuczpvPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlXCInKSB8fCBcbiAgICAgICAgICBodG1sLmluY2x1ZGVzKCd4bWxuczp4PVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWxcIicpO1xuICB9XG5cbiAgY29udmVydEV4Y2VsSHRtbFRvVGFibGUoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XG4gICAgY29uc3QgdGFibGUgPSBkb2MucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICByZXR1cm4gdGFibGUgPyB0YWJsZS5vdXRlckhUTUwgOiAnJzsgLy8gRXh0cmFjdCBvbmx5IHRoZSB0YWJsZSBwYXJ0XG4gIH1cblxuXG5cblxuICBpc1RhYmxlRGF0YSh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3dzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHJvd3MubGVuZ3RoID4gMSAmJiByb3dzWzBdLnNwbGl0KCdcXHQnKS5sZW5ndGggPiAxO1xuICB9XG5cbiAgLy8gY29udmVydFRleHRUb1RhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcihyb3cgPT4gcm93LnRyaW0oKSAhPT0gJycpO1xuICAvLyAgIGNvbnN0IHRhYmxlUm93cyA9IHJvd3MubWFwKHJvdyA9PiB7XG4gIC8vICAgICBjb25zdCBjZWxscyA9IHJvdy5zcGxpdCgnXFx0JykubWFwKGNlbGwgPT4gYDx0ZCBjbGFzcz1cInB4LTEgcHktMVwiID4ke2NlbGx9PC90ZD5gKS5qb2luKCcnKTtcbiAgLy8gICAgIHJldHVybiBgPHRyIGNsYXNzPVwidGFibGUtYm9yZGVyLXRvcFwiIHN0eWxlPVwiYm9yZGVyLXRvcDogJHt0aGlzLnRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCl9OyB3aWR0aDogMTAwJSAhaW1wb3J0YW50XCI+JHtjZWxsc308L3RyPmA7XG4gIC8vICAgfSkuam9pbignJyk7XG4gIC8vICAgcmV0dXJuIGA8dGFibGU+JHt0YWJsZVJvd3N9PC90YWJsZT5gO1xuICAvLyB9XG5cbiAgY29udmVydFRleHRUb1RhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcihyb3cgPT4gcm93LnRyaW0oKSAhPT0gJycpO1xuICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gcm93c1swXT8uc3BsaXQoJ1xcdCcpLmxlbmd0aCB8fCAxOyAvLyBHZXQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGZyb20gdGhlIGZpcnN0IHJvd1xuICAgIGNvbnN0IGNvbHVtbldpZHRoID0gMTAwIC8gY29sdW1uQ291bnQ7IC8vIENhbGN1bGF0ZSBjb2x1bW4gd2lkdGhcblxuICAgIGNvbnN0IHRhYmxlUm93cyA9IHJvd3MubWFwKChyb3csIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IHJvdy5zcGxpdCgnXFx0JykubWFwKGNlbGwgPT4gYFxuICAgICAgICA8dGQgY2xhc3M9XCJweC0xIHB5LTEgdGV4dC10cnVuY2F0ZVwiIFxuICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6ICR7Y29sdW1uV2lkdGh9JTsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCI+XG4gICAgICAgICAgJHtjZWxsfVxuICAgICAgICA8L3RkPmApLmpvaW4oJycpO1xuXG4gICAgICAvLyBBZGQgYSBib3JkZXItdG9wIGZvciBhbGwgcm93cyBleGNlcHQgdGhlIGZpcnN0IGFuZCBib3JkZXItYm90dG9tIGZvciB0aGUgbGFzdCByb3dcbiAgICAgIGNvbnN0IGJvcmRlclRvcCA9IGluZGV4ID09PSAwID8gJycgOiBgYm9yZGVyLXRvcDogJHt0aGlzLnRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCl9O2A7XG4gICAgICBjb25zdCBib3JkZXJCb3R0b20gPSBpbmRleCA9PT0gcm93cy5sZW5ndGggLSAxID8gYGJvcmRlci1ib3R0b206ICR7dGhpcy50aGVtZU1vZGVUYWJsZUJvcmRlclRvcCgpfTtgIDogJyc7XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAgIDx0ciBcbiAgICAgICAgICBzdHlsZT1cIiR7Ym9yZGVyVG9wfSAke2JvcmRlckJvdHRvbX0gd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcIj5cbiAgICAgICAgICAke2NlbGxzfVxuICAgICAgICA8L3RyPmA7XG4gICAgfSkuam9pbignJyk7XG5cbiAgICByZXR1cm4gYFxuICAgICAgPHRhYmxlIHN0eWxlPVwidGFibGUtbGF5b3V0OiBmaXhlZDsgd2lkdGg6IDEwMCU7XCI+IFxuICAgICAgICAke3RhYmxlUm93c31cbiAgICAgIDwvdGFibGU+YDtcbiAgfVxuXG5cblxuICBpbnNlcnRIdG1sQXRDYXJldChodG1sOiBzdHJpbmcpIHtcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAocmFuZ2UpIHtcbiAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgbGV0IG5vZGU7XG4gICAgICB3aGlsZSAoKG5vZGUgPSB0ZW1wRGl2LmZpcnN0Q2hpbGQpKSB7XG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICB9XG4gICAgICByYW5nZS5pbnNlcnROb2RlKGZyYWcpO1xuICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcxcHggc29saWQgI0QwRDBEMDsgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcxcHggc29saWQgIzQxNDE0MSAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gXG4gIHB1YmxpYyBvcGVuRnVsbHNjcmVlbigpIHtcbiAgICB2YXIgZWxlbTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXh0RWRpdG9yXCIpO1xuICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gdHJ1ZTtcbiAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICBlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICB9XG4gICAgdGhpcy5zdHlsZSA9IHtcbiAgICAgICdtaW4taGVpZ2h0JzogJzkwdmgnLFxuICAgICAgJ21heC1oZWlnaHQnOiAnOTB2aCcsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlRnVsbHNjcmVlbigpIHtcbiAgICBpZiAoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5zdHlsZSA9IHtcbiAgICAgICAgJ21pbi1oZWlnaHQnOiAnNDAwcHgnLFxuICAgICAgICAnbWF4LWhlaWdodCc6ICc0MDBweCcsXG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBjbGVhclRleHRFZGl0b3IoKSB7XG4gICAgdGhpcy5lZGl0b3JUZXh0Q2xlYXIuZW1pdCgpXG4gIH1cblxuICBzZXR1cEhpc3RvcnkoKSB7XG4gICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICBcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLm9uSW5wdXQoKSk7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dCgpIHtcbiAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuICB9XG5cbiAgc2F2ZVN0YXRlKCkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgXG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgY29uc3QgZWRpdG9yQ29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XG4gICAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPT09IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuaGlzdG9yeUluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgrKztcbiAgICB9XG4gIH1cbiAgdW5kbygpIHtcbiAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPiAwKSB7XG4gICAgICB0aGlzLnJlZG9TdGFjay5wdXNoKHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF0pO1xuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgtLTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgXG4gICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVkbygpIHtcbiAgICBpZiAodGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVkb0NvbnRlbnQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKTtcbiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHJlZG9Db250ZW50ISk7XG4gICAgICB0aGlzLmhpc3RvcnlJbmRleCsrO1xuICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICBcbiAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gcmVkb0NvbnRlbnQhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4vLyAgIGZvcm1hdFRleHRXaXRoRGF0ZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbi8vICAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIGRldGVjdCBZWVlZLU1NLUREIGZvcm1hdHRlZCBkYXRlc1xuLy8gICBjb25zdCBkYXRlUmVnZXggPSAvXFxiXFxkezR9LVxcZHsyfS1cXGR7Mn1cXGIvZztcblxuLy8gICAvLyBSZXBsYWNlIGZvdW5kIGRhdGVzIHdpdGggYSBmb3JtYXR0ZWQgdmVyc2lvblxuLy8gICByZXR1cm4gdGV4dC5yZXBsYWNlKGRhdGVSZWdleCwgKGRhdGVTdHIpID0+IHtcbi8vICAgICAvLyBDb252ZXJ0IHRoZSBkZXRlY3RlZCBkYXRlIHN0cmluZyBpbnRvIGEgRGF0ZSBvYmplY3Rcbi8vICAgICBjb25zdCBkYXRlT2JqID0gbmV3IERhdGUoZGF0ZVN0cik7XG4gICAgXG4vLyAgICAgLy8gRm9ybWF0IHRoZSBkYXRlIHRvICdNb250aCBEYXksIFllYXInIChlLmcuLCBPY3RvYmVyIDEwLCAyMDI0KVxuLy8gICAgIHJldHVybiBkYXRlT2JqLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4vLyAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4vLyAgICAgICBtb250aDogJ2xvbmcnLFxuLy8gICAgICAgZGF5OiAnbnVtZXJpYycsXG4vLyAgICAgfSk7XG4vLyAgIH0pO1xuICAvLyB9XG4gIFxuICBmb3JtYXRUZXh0V2l0aERhdGVzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBkZXRlY3QgWVlZWS1NTS1ERCBmb3JtYXR0ZWQgZGF0ZXNcbiAgY29uc3QgZGF0ZVJlZ2V4ID0gL1xcYlxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxiL2c7XG5cbiAgLy8gUmVwbGFjZSBmb3VuZCBkYXRlcyB3aXRoIGEgZm9ybWF0dGVkIHZlcnNpb25cbiAgcmV0dXJuIHRleHQucmVwbGFjZShkYXRlUmVnZXgsIChkYXRlU3RyKSA9PiB7XG4gICAgLy8gQ29udmVydCB0aGUgZGV0ZWN0ZWQgZGF0ZSBzdHJpbmcgaW50byBhIERhdGUgb2JqZWN0XG4gICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGRhdGVTdHIpO1xuXG4gICAgLy8gRXh0cmFjdCBkYXksIG1vbnRoLCBhbmQgeWVhclxuICAgIGNvbnN0IGRheSA9IGRhdGVPYmouZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsgLy8gRW5zdXJlIGRheSBpcyB0d28gZGlnaXRzXG4gICAgY29uc3QgbW9udGggPSBkYXRlT2JqLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcgfSk7IC8vIEdldCBhYmJyZXZpYXRlZCBtb250aCBuYW1lXG4gICAgY29uc3QgeWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTsgLy8gR2V0IGZ1bGwgeWVhclxuXG4gICAgLy8gRm9ybWF0IHRoZSBkYXRlIGFzICdkZC9tbW0veXl5eSdcbiAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgfSk7XG59XG5cblxufSIsIjxkaXYgY2xhc3M9XCJjb250YWluZXIgZWxzLXRleHQtZWRpdG9yIHB4LTBcIiBpZD1cInRleHRFZGl0b3JcIiAjZnVsbHNjcmVlbj1cIm5neEZ1bGxzY3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRFZGl0b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hGdWxsc2NyZWVuPlxyXG4gICAgPGRpdiAqbmdJZj1cInRvb2xiYXJNb2RlID09PSAnZml4ZWQnXCIgY2xhc3M9XCJidG4tdG9vbGJhciBlbHMtYnRuLXRvb2xiYXIgcC0yIHB5LTIgbWItMFwiIHJvbGU9XCJ0b29sYmFyXCIgW3N0eWxlLmJhY2tncm91bmRdPVwidGhlbWVNb2RlQmdDbHIoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgJ3BvaW50ZXItZXZlbnRzJzogZGlzYWJsZVRvb2xiYXIgPyAnbm9uZScgOiAnYXV0bycsXHJcbiAgICAnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyc6IElzT3BlbiA/ICcwJyA6ICcyMHB4JyxcclxuICAgICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyc6IElzT3BlbiA/ICcwJyA6ICcyMHB4J1xyXG59XCJcclxuYXJpYS1sYWJlbD1cIlRvb2xiYXIgd2l0aCBidXR0b24gZ3JvdXBzXCJcclxuc3R5bGU9XCJib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7XCJcclxuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkhlYWRlciBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtZm9ybS1zZWxlY3QgYm9yZGVyIGVscy10b29sYmFyLWRyb3Bkb3duLWJ1dHRvbiBkcm9wZG93bi10b2dnbGUgdGV4dC1zdGFydFwiIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cIic1cHgnXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duXCIgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7c2VsZWN0ZWRGb3JtYXRCbG9jayB8IHRpdGxlY2FzZX19PC9zcGFuPiA8aSBjbGFzcz1cIm1kaSBtZGktY2hldnJvbi1kb3duIFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25cIiBjbGFzcz1cImVscy10ZXh0LWZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgxPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMT5IZWFkaW5nIDE8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgyPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5IZWFkaW5nIDI8L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgzPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5IZWFkaW5nIDM8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg0PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND5IZWFkaW5nIDQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg1PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5IZWFkaW5nIDU8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg2PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNj5IZWFkaW5nIDY8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPHA+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm9ybWFsPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJGb250IE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPCEtLSA8c2VsZWN0IGNsYXNzPVwiZWxzLWZvcm0tc2VsZWN0IFwiIHN0eWxlPVwiIGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsgY29sb3I6ICNmZmY7Ym9yZGVyOiAycHggc29saWQgIzdENkQ2RCAhaW1wb3J0YW50O1wiIFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIiAoY2hhbmdlKT1cImNoYW5nZUZvbnQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiBjbGFzcz1cImVscy1mb3JtLW9wdGlvblwiICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRzXCIgW3ZhbHVlXT1cImZvbnRcIj57eyBmb250IH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy1mb3JtLXNlbGVjdCBib3JkZXIgZWxzLXRvb2xiYXItZHJvcGRvd24tYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSB0ZXh0LXN0YXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIiBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiA4NXB4OyBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3tzZWxlY3RlZEZvbnQgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZWNhc2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktY2hldnJvbi1kb3duIFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25cIiBjbGFzcz1cImVscy10ZXh0LWZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKm5nRm9yPVwibGV0IGZvbnQgb2YgZm9udHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlRm9udChmb250KVwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmb250IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0wXCIgIHN0eWxlPVwiaGVpZ2h0OiBmaXQtY29udGVudDtcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1lLTIgbXItMiBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0JvbGRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2JvbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYm9sZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNJdGFsaWNBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2l0YWxpYycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1pdGFsaWNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzVW5kZXJsaW5lQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCd1bmRlcmxpbmUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtdW5kZXJsaW5lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N0cmlrZXRocm91Z2hBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3RyaWtldGhyb3VnaC12YXJpYW50XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgQ29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJ0ZXh0Q29sb3JQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRUZXh0Q29sb3IoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCd0ZXh0Q29sb3JQaWNrZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLXRleHQgaWNvbi13aXRoLXVuZGVybGluZVwiIFtzdHlsZS5jb2xvcl09XCJzZWxlY3RlZFRleHRDb2xvclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJCYWNrZ3JvdW5kIENvbG9yXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCdiZ0NvbG9yUGlja2VyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWFscGhhLWEtYm94XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBpZD1cImJnQ29sb3JQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRCYWNrZ3JvdW5kQ29sb3IoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtbGluZSBtcy0yIGJvcmRlclwiIFtzdHlsZS5ib3JkZXItbGVmdF09XCJ0aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmUoKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0T3JkZXJlZExpc3QnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtbGlzdC1udW1iZXJlZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2luc2VydFVub3JkZXJlZExpc3QnKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtbGlzdC1idWxsZXRlZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJxbC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gIGFycm93LW5vbmUgdGV4dC1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRyb3Bkb3duQmFzaWMxXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tbGVmdCBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAzcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JylcIj48aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWxlZnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlDZW50ZXInKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tY2VudGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5UmlnaHQnKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tcmlnaHRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlGdWxsJylcIj48aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWp1c3RpZnlcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1saW5lIG1zLTIgYm9yZGVyXCIgW3N0eWxlLmJvcmRlci1sZWZ0XT1cInRoZW1lTW9kZUNsclZlcnRpY2FsTGluZSgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzU3Vic2NyaXB0QWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdWJzY3JpcHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3Vic2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N1cGVyc2NyaXB0QWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdXBlcnNjcmlwdCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdXBlcnNjcmlwdFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZExpbmsoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1saW5rLXZhcmlhbnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydHNJbWFnZSgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWltYWdlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJpbWFnZUlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPVwiaGFuZGxlSW1hZ2VVcGxvYWQoJGV2ZW50KVwiIGFjY2VwdD1cImltYWdlLypcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkVGFibGUoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFJvdygpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbHVtbigpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1uKClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cInVuZG8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS11bmRvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cInJlZG8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1yZWRvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VcIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uLTJcIiAoY2xpY2spPVwiZWRpdEltYWdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+RWRpdCBJbWFnZTwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJjbGVhclRleHRFZGl0b3IoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIgd2lkdGg6IGZpdC1jb250ZW50ICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWNsb3NlLWNpcmNsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuMSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIklzT3BlbjsgZWxzZSBmdWxsc2NyZWVuSWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZnVsbHNjcmVlbi1leGl0XCI+PC9pPiA8IS0tIENvbGxhcHNlIEljb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmdWxsc2NyZWVuSWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZ1bGxzY3JlZW5cIj48L2k+IDwhLS0gRXhwYW5kIEljb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cInRvb2xiYXJNb2RlID09PSAnYnViYmxlJ1wiIGNsYXNzPVwiYnViYmxlLXRvb2xiYXIgYm9yZGVyIHAtMlwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyd0b3AucHgnOiB0b29sYmFyVG9wLCAnbGVmdC5weCc6IHRvb2xiYXJMZWZ0LCAnZGlzcGxheSc6IHNob3dUb29sYmFyID8gJ2Jsb2NrJyA6ICdub25lJ31cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiRm9udCBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJlbHMtZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRm9udFwiIChjaGFuZ2UpPVwiY2hhbmdlRm9udCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRzXCIgW3ZhbHVlXT1cImZvbnRcIj57eyBmb250IH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0JvbGRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnYm9sZCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWJvbGRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0l0YWxpY0FjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1pdGFsaWNcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1VuZGVybGluZUFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCd1bmRlcmxpbmUnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC11bmRlcmxpbmVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N0cmlrZXRocm91Z2hBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3RyaWtldGhyb3VnaCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN0cmlrZXRocm91Z2gtdmFyaWFudFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdibG9ja3F1b3RlJylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXF1b3RlLWNsb3NlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJpbnNlcnRDb2RlQmxvY2soKVwiPjxpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktY29kZS10YWdzXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWxpc3QtbnVtYmVyZWRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtbGlzdC1idWxsZXRlZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJDb2xvciBGb3JtYXR0aW5nXCI+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgQ29sb3JcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInFsLWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBhcnJvdy1ub25lIHRleHQtc2Vjb25kYXJ5XCIgaWQ9XCJkcm9wZG93bkJhc2ljMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLWZpbGxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAzMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yLXNrZXRjaCBjb2xvcj1cIiNmZmZcIiAob25DaGFuZ2VDb21wbGV0ZSk9XCJzZXRUZXh0Q29sb3IoJGV2ZW50KVwiPjwvY29sb3Itc2tldGNoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gY3VzdG9tLWNvbG9yLXRyaWdnZXJcIiBuZ3gtY29sb3JzLXRyaWdnZXIgWyhuZ01vZGVsKV09XCJjb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibG9nRXZlbnQoJGV2ZW50LCAnbmdNb2RlbENoYW5nZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxvZ0V2ZW50KCRldmVudCwgJ2NoYW5nZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwibG9nRXZlbnQoJGV2ZW50LCAnaW5wdXQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY29sb3ItdGV4dCBpY29uLXdpdGgtdW5kZXJsaW5lXCIgW3N0eWxlLmNvbG9yXT1cImNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIntjb2xvcjogY29sb3J9XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtY29sb3JzIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiA+PC9uZ3gtY29sb3JzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGlkPVwidGV4dENvbG9yUGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFRleHRDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCd0ZXh0Q29sb3JQaWNrZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY29sb3ItdGV4dCBpY29uLXdpdGgtdW5kZXJsaW5lXCIgW3N0eWxlLmNvbG9yXT1cInNlbGVjdGVkVGV4dENvbG9yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkJhY2tncm91bmQgQ29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBpZD1cImJnQ29sb3JQaWNrZXJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9XCJzZXRCYWNrZ3JvdW5kQ29sb3IoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcignYmdDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWFscGhhLWEtYm94XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJCYWNrZ3JvdW5kIENvbG9yXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cImJhY2tncm91bmRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcignYmdDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWFscGhhLWEtYm94XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAwcHggIWltcG9ydGFudDtcIiBpZD1cImJnQ29sb3JQaWNrZXJcIiBbY3BQcmVzZXRDb2xvcnNdPVwiWycjZmZmJywgJyMwMDAnLCAnIzI4ODllOScsICcjZTkyMGU5JywgJyNmZmY1MDAnLCAncmdiKDIzNiw2NCw2NCknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhjb2xvclBpY2tlcildPVwiY29sb3JcIiAoY2hhbmdlKT1cInNldEJhY2tncm91bmRDb2xvcigkZXZlbnQpXCIgLz4gLS0+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJiZ0NvbG9yUGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldEJhY2tncm91bmRDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiSGVhZGVyIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJoZWFkZXJEcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMT4nKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci0xXCI+PC9pPiBIZWFkaW5nIDE8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgyPicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTJcIj48L2k+IEhlYWRpbmcgMjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDM+JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItM1wiPjwvaT4gSGVhZGluZyAzPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoND4nKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci00XCI+PC9pPiBIZWFkaW5nIDQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg1PicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTVcIj48L2k+IEhlYWRpbmcgNTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDY+JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItNlwiPjwvaT4gSGVhZGluZyA2PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkhlYWRlciBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItZHJvcGRvd24tYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiIGlkPVwiaGVhZGVyRHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDg1cHg7XCI+e3tzZWxlY3RlZEZvcm1hdEJsb2NrIHwgdGl0bGVjYXNlfX08L3NwYW4+IDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1jaGV2cm9uLWRvd24gdGV4dC1kYXJrXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgxPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMT5IZWFkaW5nIDE8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgyPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5IZWFkaW5nIDI8L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgzPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5IZWFkaW5nIDM8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg0PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND5IZWFkaW5nIDQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg1PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5IZWFkaW5nIDU8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg2PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNj5IZWFkaW5nIDY8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPHA+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm9ybWFsPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdzdXBlcnNjcmlwdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdXBlcnNjcmlwdFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdzdWJzY3JpcHQnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3Vic2NyaXB0XCI+PC9pPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdWJzY3JpcHRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3Vic2NyaXB0JylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3Vic2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdXBlcnNjcmlwdEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdXBlcnNjcmlwdCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1cGVyc2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInFsLWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIGFycm93LW5vbmUgdGV4dC1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25CYXNpYzFcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWxlZnQgXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkJhc2ljMVwiIHN0eWxlPVwid2lkdGg6IDNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUxlZnQnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWxlZnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlDZW50ZXInKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWNlbnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1yaWdodFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUZ1bGwnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWp1c3RpZnlcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgncmVtb3ZlRm9ybWF0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY2xlYXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkTGluaygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbGluay12YXJpYW50XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydHNJbWFnZSgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktaW1hZ2VcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiaW1hZ2VJbnB1dFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT1cImhhbmRsZUltYWdlVXBsb2FkKCRldmVudClcIiBhY2NlcHQ9XCJpbWFnZS8qXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFRhYmxlKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFJvdygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXBsdXMtYWZ0ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcGx1cy1hZnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VcIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uLTJcIiAoY2xpY2spPVwiZWRpdEltYWdlKClcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+RWRpdCBJbWFnZTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gY3VzdG9tLWNvbG9yLXRyaWdnZXJcIj5cclxuICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLXRleHQgaWNvbi13aXRoLXVuZGVybGluZVwiIFtzdHlsZS5jb2xvcl09XCJjb2xvclwiPjwvaT5cclxuICAgICAgICA8bmd4LWNvbG9ycyBbKG5nTW9kZWwpXT1cImNvbG9yXCIgKGNoYW5nZSk9XCJjb2xvckNoYW5nZWQoJGV2ZW50KVwiPjwvbmd4LWNvbG9ycz5cclxuICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cFwiIG5nYkRyb3Bkb3duIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBuZ2JEcm9wZG93blRvZ2dsZSAgKGNsaWNrKT1cImFkZFRhYmxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSAqbmdJZj1cImlzVGFibGVTZWxlY3RlZCB8fCB0YWJsZUFkZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiYWRkUm93KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1wbHVzLWFmdGVyXCI+PC9pPiBBZGQgUm93XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiZGVsZXRlUm93KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1yZW1vdmVcIj48L2k+IERlbGV0ZSBSb3dcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXBsdXMtYWZ0ZXJcIj48L2k+IEFkZCBDb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJkZWxldGVDb2x1bW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXJlbW92ZVwiPjwvaT4gRGVsZXRlIENvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRhYmxlV2lkdGhcIj5UYWJsZSBXaWR0aDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJ0YWJsZVdpZHRoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAoY2hhbmdlKT1cImFkanVzdFRhYmxlV2lkdGgoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNlbGxXaWR0aFwiPkNlbGwgV2lkdGg8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiY2VsbFdpZHRoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAoY2hhbmdlKT1cImFkanVzdENlbGxXaWR0aCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY2VsbEhlaWdodFwiPkNlbGwgSGVpZ2h0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImNlbGxIZWlnaHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIChjaGFuZ2UpPVwiYWRqdXN0Q2VsbEhlaWdodCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSGVpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDxkaXYgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIGlkPVwiZWRpdG9yXCIgY2xhc3M9XCJwLTMgY3VzdG9tLXNjcm9sbGJhciBub24tZm9jdXNcIiAjZWRpdG9yXHJcbiAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDtcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJ0aGVtZU1vZGVCZ0NscigpXCIgW3N0eWxlLmJvcmRlci10b3BdPVwidGhlbWVNb2RlQm9yZGVyVG9wKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnZm9udC1mYW1pbHknOiBzZWxlY3RlZEZvbnQsICdmb250LXNpemUnOiBzZWxlY3RlZEZvbnRTaXplICsgJ3B4J31cIiBbc3R5bGVdPVwic3R5bGVcIlxyXG4gICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIklzT3BlbiA/ICc4NXZoICFpbXBvcnRhbnQnIDogICc0MDVweCAhaW1wb3J0YW50J1wiXHJcbiAgICAgICAgKGlucHV0KT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiSW5zZXJ0IHRleHQgaGVyZSAuLi5cIiByZWFkb25seSAobW91c2V1cCk9XCJvblRleHRTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRDb250ZW50XCIgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNoZWNrVGFibGVTZWxlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgPC9kaXY+IC0tPlxyXG4gICAgPCEtLSA8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBpZD1cImVkaXRvclwiIGNsYXNzPVwicC0zIGN1c3RvbS1zY3JvbGxiYXIgbm9uLWZvY3VzIG92ZXJmbG93LWF1dG9cIiAjZWRpdG9yXHJcbiAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgIFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRoZW1lTW9kZUJnQ2xyKClcIlxyXG4gICAgICAgIFtzdHlsZS5ib3JkZXItdG9wXT1cInRoZW1lTW9kZUJvcmRlclRvcCgpXCJcclxuICAgICAgICBcclxuICAgICAgICBbbmdTdHlsZV09XCJ7J2ZvbnQtZmFtaWx5Jzogc2VsZWN0ZWRGb250LCAnZm9udC1zaXplJzogc2VsZWN0ZWRGb250U2l6ZSArICdweCcsXHJcbiAgICAgICAgICAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnOiBpc09wZW4gPyAnMCcgOicyMHB4JyxcclxuICAgICAgICAgICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnOiBpc09wZW4gPyAnMCcgOicyMHB4J1xyXG4gICAgICAgIH1cIlxyXG4gICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIklzT3BlbiA/ICc5M3ZoJyA6ICc0MDVweCdcIiAoaW5wdXQpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJJbnNlcnQgdGV4dCBoZXJlIC4uLlwiXHJcbiAgICAgICAgcmVhZG9ubHkgKG1vdXNldXApPVwib25UZXh0U2VsZWN0KCRldmVudClcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZENvbnRlbnRcIiAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCIgKGJsdXIpPVwib25CbHVyKClcIiAoY2xpY2spPVwiY2hlY2tUYWJsZVNlbGVjdGlvbigkZXZlbnQpXCI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgICA8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBpZD1cImVkaXRvclwiIGNsYXNzPVwicC0zIGN1c3RvbS1zY3JvbGxiYXIgbm9uLWZvY3VzIG92ZXJmbG93LWF1dG9cIiAjZWRpdG9yXHJcbiAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsgb3ZlcmZsb3c6IGF1dG87XCIgW3N0eWxlLmJhY2tncm91bmRdPVwidGhlbWVNb2RlQmdDbHIoKVwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlci10b3BdPVwidGhlbWVNb2RlQm9yZGVyVG9wKClcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiBzZWxlY3RlZEZvbnQsIFxyXG4gICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6IHNlbGVjdGVkRm9udFNpemUgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnOiBJc09wZW4gPyAnMCcgOicyMHB4JyxcclxuICAgICAgICAgICAgICAgICdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyc6IElzT3BlbiA/ICcwJyA6JzIwcHgnLFxyXG4gICAgICAgICAgICAgICAgJ21pbi1oZWlnaHQnOiBJc09wZW4gPyAnOTN2aCcgOiAnNDA1cHgnLFxyXG4gICAgICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBJc09wZW4gPyAnOTN2aCcgOiAnNDA1cHgnXHJcbiAgICAgICAgICAgIH1cIiBwbGFjZWhvbGRlcj1cIkluc2VydCB0ZXh0IGhlcmUgLi4uXCIgcmVhZG9ubHkgKG1vdXNldXApPVwib25UZXh0U2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgIChpbnB1dCk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZENvbnRlbnRcIiAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIiAoY2xpY2spPVwiY2hlY2tUYWJsZVNlbGVjdGlvbigkZXZlbnQpXCI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8dGFibGUgKm5nSWY9XCJwYXJzZWRUYWJsZVwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgcGFyc2VkVGFibGUuaGVhZGVyc1wiPnt7IGhlYWRlciB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHBhcnNlZFRhYmxlLnJvd3NcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3dcIj57eyBjZWxsIH19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuXHJcbjwvZGl2PiJdfQ==