@fundamental-ngx/core 0.46.2-rc.4 → 0.46.2-rc.6

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.
Files changed (71) hide show
  1. package/esm2022/avatar/avatar.component.mjs +1 -1
  2. package/esm2022/breadcrumb/breadcrumb.component.mjs +2 -2
  3. package/esm2022/button/button.component.mjs +1 -1
  4. package/esm2022/combobox/combobox.component.mjs +2 -2
  5. package/esm2022/dialog/dialog-close-button/dialog-close-button.component.mjs +1 -1
  6. package/esm2022/dialog/dialog-full-screen-toggler-button/dialog-full-screen-toggler-button.component.mjs +1 -1
  7. package/esm2022/form/form-label/form-label.component.mjs +2 -2
  8. package/esm2022/grid-list/components/grid-list-filter-bar/grid-list-filter-bar.component.mjs +2 -2
  9. package/esm2022/grid-list/components/grid-list-item/grid-list-item.component.mjs +2 -2
  10. package/esm2022/icon/icon.component.mjs +77 -28
  11. package/esm2022/info-label/info-label.component.mjs +1 -1
  12. package/esm2022/list/list-navigation-item/list-navigation-item.component.mjs +1 -1
  13. package/esm2022/message-strip/message-strip.component.mjs +1 -1
  14. package/esm2022/micro-process-flow/components/micro-process-flow-icon/micro-process-flow-icon.component.mjs +1 -1
  15. package/esm2022/nested-list/nested-list-directives.mjs +2 -2
  16. package/esm2022/object-status/object-status.component.mjs +2 -2
  17. package/esm2022/select/select.component.mjs +2 -2
  18. package/esm2022/shellbar/product-menu/product-menu.component.mjs +1 -1
  19. package/esm2022/splitter/splitter-resizer/splitter-resizer.component.mjs +1 -1
  20. package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +2 -2
  21. package/esm2022/tabs/tab-utils/tab-directives.mjs +1 -1
  22. package/esm2022/timeline/components/timeline-node/timeline-node.component.mjs +1 -1
  23. package/esm2022/tree/components/tree-item/tree-item.component.mjs +2 -2
  24. package/esm2022/wizard/wizard-step-indicator/wizard-step-indicator.component.mjs +1 -1
  25. package/fesm2022/fundamental-ngx-core-avatar.mjs +1 -1
  26. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +1 -1
  28. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-core-button.mjs +1 -1
  30. package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  32. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-core-dialog.mjs +2 -2
  34. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-core-form.mjs +1 -1
  36. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-core-grid-list.mjs +2 -2
  38. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-core-icon.mjs +77 -28
  40. package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-core-info-label.mjs +1 -1
  42. package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-core-list.mjs +1 -1
  44. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-core-message-strip.mjs +1 -1
  46. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +1 -1
  48. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-core-nested-list.mjs +1 -1
  50. package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-core-object-status.mjs +1 -1
  52. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-core-select.mjs +1 -1
  54. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  55. package/fesm2022/fundamental-ngx-core-shellbar.mjs +1 -1
  56. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  57. package/fesm2022/fundamental-ngx-core-splitter.mjs +1 -1
  58. package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
  59. package/fesm2022/fundamental-ngx-core-tabs.mjs +2 -2
  60. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  61. package/fesm2022/fundamental-ngx-core-timeline.mjs +1 -1
  62. package/fesm2022/fundamental-ngx-core-timeline.mjs.map +1 -1
  63. package/fesm2022/fundamental-ngx-core-tree.mjs +1 -1
  64. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  65. package/fesm2022/fundamental-ngx-core-wizard.mjs +1 -1
  66. package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
  67. package/fundamental-ngx-core-v0.46.2-rc.6.tgz +0 -0
  68. package/icon/icon.component.d.ts +26 -9
  69. package/package.json +3 -3
  70. package/schematics/add-dependencies/index.js +4 -4
  71. package/fundamental-ngx-core-v0.46.2-rc.4.tgz +0 -0
@@ -297,7 +297,7 @@ export class GridListItemComponent {
297
297
  }
298
298
  }
299
299
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: GridListItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.GridList }], target: i0.ɵɵFactoryTarget.Component }); }
300
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: GridListItemComponent, isStandalone: true, selector: "fd-grid-list-item", inputs: { id: "id", width: "width", layoutItemPattern: "layoutItemPattern", status: "status", counter: "counter", value: "value", disableToolbarClick: "disableToolbarClick", selected: "selected", noPadding: "noPadding", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", type: "type", state: "state", isNavigated: "isNavigated", title: "title", description: "description" }, outputs: { press: "press", detail: "detail", delete: "delete", navigate: "navigate", draft: "draft", locked: "locked" }, host: { properties: { "style.max-width": "this.width", "style.min-width": "this.width" } }, queries: [{ propertyName: "footerBarComponent", first: true, predicate: GridListItemFooterBarComponent, descendants: true }, { propertyName: "itemToolbarComponent", first: true, predicate: GridListItemToolbarComponent, descendants: true }, { propertyName: "body", first: true, predicate: GridListItemBodyDirective, descendants: true }], viewQueries: [{ propertyName: "_gridListItem", first: true, predicate: ["gridListItem"], descendants: true }], ngImport: i0, template: "<div\n #gridListItem\n [id]=\"id\"\n tabindex=\"-1\"\n class=\"fd-grid-list__item\"\n role=\"option\"\n [class.is-navigated]=\"isNavigated\"\n [class.is-selected]=\"!!_selectedItem\"\n [class.fd-grid-list__item--link]=\"\n _isActive && (type === 'active' || type === 'detailsAndActive' || type === 'navigation')\n \"\n [class.fd-grid-list__item--unread]=\"state === 'unread'\"\n [class.fd-grid-list__item--locked]=\"state === 'locked'\"\n [class.fd-grid-list__item--draft]=\"state === 'draft'\"\n [class.fd-grid-list__item--error]=\"state === 'error'\"\n (keydown)=\"_onKeyDown($event)\"\n (click)=\"selectionMode === 'singleSelect' && _singleSelect($event); _onClick($event)\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n [attr.aria-selected]=\"selectionMode === 'none' ? null : !!_selectedItem\"\n>\n <span\n *ngIf=\"status\"\n class=\"fd-grid-list__highlight\"\n [class.fd-grid-list__highlight--positive]=\"status === 'success'\"\n [class.fd-grid-list__highlight--critical]=\"status === 'warning'\"\n [class.fd-grid-list__highlight--negative]=\"status === 'error'\"\n [class.fd-grid-list__highlight--neutral]=\"status === 'neutral'\"\n [attr.aria-label]=\"'coreGridList.listItemStatusAriaLabel' | fdTranslate : { status: status }\"\n ></span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelect'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-toolbar fd-grid-list__item-toolbar\"\n *ngIf=\"\n counter ||\n itemToolbarComponent?.contentTemplateRef ||\n (type && type !== 'inactive' && type !== 'active') ||\n (selectionMode !== 'none' && selectionMode !== 'singleSelect')\n \"\n >\n <ng-container *ngIf=\"selectionMode === 'singleSelectLeft'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectionMode === 'multiSelect'\">\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"itemToolbarComponent?.contentTemplateRef\">\n <div class=\"fd-toolbar--extra-content\">\n <ng-container *ngTemplateOutlet=\"itemToolbarComponent.contentTemplateRef\"></ng-container>\n </div>\n </ng-container>\n\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <span\n *ngIf=\"counter\"\n class=\"fd-grid-list__item-counter\"\n [attr.aria-label]=\"'coreGridList.listItemCounterAriaLabel' | fdTranslate : { count: counter }\"\n >{{ counter }}</span\n >\n\n <button\n *ngIf=\"type === 'detail' || type === 'detailsAndActive'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"edit\"\n class=\"fd-grid-list__action-button\"\n [attr.aria-label]=\"'coreGridList.listItemButtonDetailsTitle' | fdTranslate\"\n [title]=\"'coreGridList.listItemButtonDetailsTitle' | fdTranslate\"\n fdCompact\n (click)=\"_onDetail($event)\"\n ></button>\n\n <button\n *ngIf=\"selectionMode === 'delete'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n class=\"fd-grid-list__action-button\"\n [attr.aria-label]=\"'coreGridList.listItemButtonDeleteTitle' | fdTranslate\"\n [title]=\"'coreGridList.listItemButtonDeleteTitle' | fdTranslate\"\n title=\"Delete\"\n fdCompact\n (click)=\"_onDelete($event)\"\n ></button>\n\n <span *ngIf=\"type === 'navigation'\" class=\"fd-grid-list__item-navigation-indicator\">\n <fd-icon glyph=\"navigation-right-arrow\"></fd-icon>\n </span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelectRight'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"fd-grid-list__item-body\" [class.fd-grid-list__item-body--no-padding]=\"noPadding\">\n <ng-content select=\"[fd-grid-list-item-image]\"></ng-content>\n\n <div *ngIf=\"title || description\" class=\"fd-grid-list__item-header\">\n <h4 *ngIf=\"title\" fd-title>{{ title }}</h4>\n <span *ngIf=\"description\" class=\"fd-grid-list__item-subtitle\">{{ description }}</span>\n </div>\n\n <div *ngIf=\"body?.templateRef\" class=\"fd-grid-list__item-content\">\n <ng-container [ngTemplateOutlet]=\"body.templateRef\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"state || footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"itemFooter\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #radio>\n <input\n [attr.tabindex]=\"selectionMode === 'singleSelect' ? -1 : 0\"\n type=\"radio\"\n class=\"fd-radio is-compact fd-grid-list__radio-input\"\n [style.display]=\"selectionMode === 'singleSelect' ? 'none' : ''\"\n [id]=\"id + '-radio'\"\n [name]=\"'fd-grid-list-item-toolbar-' + selectionMode\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [value]=\"value\"\n [ngModel]=\"_selectedItem\"\n (ngModelChange)=\"$event && _selectionItem($event)\"\n />\n <label\n class=\"fd-radio__label fd-grid-list__radio-label\"\n [for]=\"id + '-radio'\"\n tabindex=\"-1\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n ></label>\n</ng-template>\n\n<ng-template #checkbox>\n <input\n type=\"checkbox\"\n class=\"fd-checkbox is-compact fd-grid-list__checkbox-input\"\n [id]=\"id + '-checkbox'\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [ngModel]=\"_selectedItem\"\n (click)=\"_checkboxClick($event)\"\n />\n <label class=\"fd-checkbox__label fd-grid-list__checkbox-label\" [for]=\"id + '-checkbox'\" tabindex=\"-1\">\n <span class=\"fd-checkbox__checkmark\" aria-hidden=\"true\"></span>\n </label>\n</ng-template>\n\n<ng-template #itemFooter>\n <div class=\"fd-grid-list__item-body-actions\" *ngIf=\"footerBarComponent || state\">\n <ng-container *ngIf=\"footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"footerBarComponent.contentTemplateRef\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!footerBarComponent?.contentTemplateRef && state\">\n <span\n *ngIf=\"state === 'error'\"\n fd-object-status\n status=\"negative\"\n [label]=\"'coreGridList.listItemStatusContainsErrors' | fdTranslate\"\n [attr.aria-label]=\"'coreGridList.listItemStatusContainsErrors' | fdTranslate\"\n ></span>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'locked'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"private\"\n [label]=\"'coreGridList.listItemStatusLocked' | fdTranslate\"\n [attr.aria-label]=\"'coreGridList.listItemStatusLocked' | fdTranslate\"\n fdCompact\n (click)=\"_clickOnLocked($event)\"\n ></button>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'draft'\"\n fd-button\n fdType=\"transparent\"\n [attr.aria-label]=\"'coreGridList.listItemStatusDraft' | fdTranslate\"\n [label]=\"'coreGridList.listItemStatusDraft' | fdTranslate\"\n fdCompact\n (click)=\"_clickOnDraft($event)\"\n ></button>\n </ng-container>\n </div>\n</ng-template>\n", styles: [".fd-grid-list .fd-dnd-item.fd-dnd-on-drag{cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing;background-color:transparent}.fd-grid-list .fd-dnd-item .fd-grid-list__item{overflow:visible}.fd-grid-list__item .drop-area__line--vertical{height:100%}.fd-grid-list__item .drop-area__line--vertical.before{left:-.55rem}.fd-grid-list__item .drop-area__line--vertical.after{right:-.55rem}.fd-grid-list__item .fd-checkbox__label{-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
300
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: GridListItemComponent, isStandalone: true, selector: "fd-grid-list-item", inputs: { id: "id", width: "width", layoutItemPattern: "layoutItemPattern", status: "status", counter: "counter", value: "value", disableToolbarClick: "disableToolbarClick", selected: "selected", noPadding: "noPadding", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", type: "type", state: "state", isNavigated: "isNavigated", title: "title", description: "description" }, outputs: { press: "press", detail: "detail", delete: "delete", navigate: "navigate", draft: "draft", locked: "locked" }, host: { properties: { "style.max-width": "this.width", "style.min-width": "this.width" } }, queries: [{ propertyName: "footerBarComponent", first: true, predicate: GridListItemFooterBarComponent, descendants: true }, { propertyName: "itemToolbarComponent", first: true, predicate: GridListItemToolbarComponent, descendants: true }, { propertyName: "body", first: true, predicate: GridListItemBodyDirective, descendants: true }], viewQueries: [{ propertyName: "_gridListItem", first: true, predicate: ["gridListItem"], descendants: true }], ngImport: i0, template: "<div\n #gridListItem\n [id]=\"id\"\n tabindex=\"-1\"\n class=\"fd-grid-list__item\"\n role=\"option\"\n [class.is-navigated]=\"isNavigated\"\n [class.is-selected]=\"!!_selectedItem\"\n [class.fd-grid-list__item--link]=\"\n _isActive && (type === 'active' || type === 'detailsAndActive' || type === 'navigation')\n \"\n [class.fd-grid-list__item--unread]=\"state === 'unread'\"\n [class.fd-grid-list__item--locked]=\"state === 'locked'\"\n [class.fd-grid-list__item--draft]=\"state === 'draft'\"\n [class.fd-grid-list__item--error]=\"state === 'error'\"\n (keydown)=\"_onKeyDown($event)\"\n (click)=\"selectionMode === 'singleSelect' && _singleSelect($event); _onClick($event)\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n [attr.aria-selected]=\"selectionMode === 'none' ? null : !!_selectedItem\"\n>\n <span\n *ngIf=\"status\"\n class=\"fd-grid-list__highlight\"\n [class.fd-grid-list__highlight--positive]=\"status === 'success'\"\n [class.fd-grid-list__highlight--critical]=\"status === 'warning'\"\n [class.fd-grid-list__highlight--negative]=\"status === 'error'\"\n [class.fd-grid-list__highlight--neutral]=\"status === 'neutral'\"\n [attr.aria-label]=\"'coreGridList.listItemStatusAriaLabel' | fdTranslate : { status: status }\"\n ></span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelect'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-toolbar fd-grid-list__item-toolbar\"\n *ngIf=\"\n counter ||\n itemToolbarComponent?.contentTemplateRef ||\n (type && type !== 'inactive' && type !== 'active') ||\n (selectionMode !== 'none' && selectionMode !== 'singleSelect')\n \"\n >\n <ng-container *ngIf=\"selectionMode === 'singleSelectLeft'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectionMode === 'multiSelect'\">\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"itemToolbarComponent?.contentTemplateRef\">\n <div class=\"fd-toolbar--extra-content\">\n <ng-container *ngTemplateOutlet=\"itemToolbarComponent.contentTemplateRef\"></ng-container>\n </div>\n </ng-container>\n\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <span\n *ngIf=\"counter\"\n class=\"fd-grid-list__item-counter\"\n [attr.aria-label]=\"'coreGridList.listItemCounterAriaLabel' | fdTranslate : { count: counter }\"\n >{{ counter }}</span\n >\n\n <button\n *ngIf=\"type === 'detail' || type === 'detailsAndActive'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"edit\"\n class=\"fd-grid-list__action-button\"\n [attr.aria-label]=\"'coreGridList.listItemButtonDetailsTitle' | fdTranslate\"\n [title]=\"'coreGridList.listItemButtonDetailsTitle' | fdTranslate\"\n fdCompact\n (click)=\"_onDetail($event)\"\n ></button>\n\n <button\n *ngIf=\"selectionMode === 'delete'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n class=\"fd-grid-list__action-button\"\n [attr.aria-label]=\"'coreGridList.listItemButtonDeleteTitle' | fdTranslate\"\n [title]=\"'coreGridList.listItemButtonDeleteTitle' | fdTranslate\"\n title=\"Delete\"\n fdCompact\n (click)=\"_onDelete($event)\"\n ></button>\n\n <span *ngIf=\"type === 'navigation'\" class=\"fd-grid-list__item-navigation-indicator\">\n <fd-icon glyph=\"navigation-right-arrow\"></fd-icon>\n </span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelectRight'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"fd-grid-list__item-body\" [class.fd-grid-list__item-body--no-padding]=\"noPadding\">\n <ng-content select=\"[fd-grid-list-item-image]\"></ng-content>\n\n <div *ngIf=\"title || description\" class=\"fd-grid-list__item-header\">\n <h4 *ngIf=\"title\" fd-title>{{ title }}</h4>\n <span *ngIf=\"description\" class=\"fd-grid-list__item-subtitle\">{{ description }}</span>\n </div>\n\n <div *ngIf=\"body?.templateRef\" class=\"fd-grid-list__item-content\">\n <ng-container [ngTemplateOutlet]=\"body.templateRef\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"state || footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"itemFooter\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #radio>\n <input\n [attr.tabindex]=\"selectionMode === 'singleSelect' ? -1 : 0\"\n type=\"radio\"\n class=\"fd-radio is-compact fd-grid-list__radio-input\"\n [style.display]=\"selectionMode === 'singleSelect' ? 'none' : ''\"\n [id]=\"id + '-radio'\"\n [name]=\"'fd-grid-list-item-toolbar-' + selectionMode\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [value]=\"value\"\n [ngModel]=\"_selectedItem\"\n (ngModelChange)=\"$event && _selectionItem($event)\"\n />\n <label\n class=\"fd-radio__label fd-grid-list__radio-label\"\n [for]=\"id + '-radio'\"\n tabindex=\"-1\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n ></label>\n</ng-template>\n\n<ng-template #checkbox>\n <input\n type=\"checkbox\"\n class=\"fd-checkbox is-compact fd-grid-list__checkbox-input\"\n [id]=\"id + '-checkbox'\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [ngModel]=\"_selectedItem\"\n (click)=\"_checkboxClick($event)\"\n />\n <label class=\"fd-checkbox__label fd-grid-list__checkbox-label\" [for]=\"id + '-checkbox'\" tabindex=\"-1\">\n <span class=\"fd-checkbox__checkmark\" aria-hidden=\"true\"></span>\n </label>\n</ng-template>\n\n<ng-template #itemFooter>\n <div class=\"fd-grid-list__item-body-actions\" *ngIf=\"footerBarComponent || state\">\n <ng-container *ngIf=\"footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"footerBarComponent.contentTemplateRef\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!footerBarComponent?.contentTemplateRef && state\">\n <span\n *ngIf=\"state === 'error'\"\n fd-object-status\n status=\"negative\"\n [label]=\"'coreGridList.listItemStatusContainsErrors' | fdTranslate\"\n [attr.aria-label]=\"'coreGridList.listItemStatusContainsErrors' | fdTranslate\"\n ></span>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'locked'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"private\"\n [label]=\"'coreGridList.listItemStatusLocked' | fdTranslate\"\n [attr.aria-label]=\"'coreGridList.listItemStatusLocked' | fdTranslate\"\n fdCompact\n (click)=\"_clickOnLocked($event)\"\n ></button>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'draft'\"\n fd-button\n fdType=\"transparent\"\n [attr.aria-label]=\"'coreGridList.listItemStatusDraft' | fdTranslate\"\n [label]=\"'coreGridList.listItemStatusDraft' | fdTranslate\"\n fdCompact\n (click)=\"_clickOnDraft($event)\"\n ></button>\n </ng-container>\n </div>\n</ng-template>\n", styles: [".fd-grid-list .fd-dnd-item.fd-dnd-on-drag{cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing;background-color:transparent}.fd-grid-list .fd-dnd-item .fd-grid-list__item{overflow:visible}.fd-grid-list__item .drop-area__line--vertical{height:100%}.fd-grid-list__item .drop-area__line--vertical.before{left:-.55rem}.fd-grid-list__item .drop-area__line--vertical.after{right:-.55rem}.fd-grid-list__item .fd-checkbox__label{-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
301
301
  }
302
302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: GridListItemComponent, decorators: [{
303
303
  type: Component,
@@ -376,4 +376,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
376
376
  type: ContentChild,
377
377
  args: [GridListItemBodyDirective]
378
378
  }] } });
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZ3JpZC1saXN0L2NvbXBvbmVudHMvZ3JpZC1saXN0LWl0ZW0vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZ3JpZC1saXN0L2NvbXBvbmVudHMvZ3JpZC1saXN0LWl0ZW0vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsT0FBTyxFQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFFL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxx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QVM7c0JBRFIsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBY0YsSUFBSTtzQkFEUCxLQUFLO2dCQWdCTixLQUFLO3NCQURKLEtBQUs7Z0JBUU4sV0FBVztzQkFEVixLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBUU4sS0FBSztzQkFESixNQUFNO2dCQVFQLE1BQU07c0JBREwsTUFBTTtnQkFRUCxNQUFNO3NCQURMLE1BQU07Z0JBUVAsUUFBUTtzQkFEUCxNQUFNO2dCQVFQLEtBQUs7c0JBREosTUFBTTtnQkFRUCxNQUFNO3NCQURMLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGNBQWM7Z0JBcUJ6QixrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsOEJBQThCO2dCQUs1QyxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsNEJBQTRCO2dCQUsxQyxJQUFJO3NCQURILFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5URVIsIFNQQUNFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBLZXlVdGlsLCBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgT2JqZWN0U3RhdHVzQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL29iamVjdC1zdGF0dXMnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2dyaWQtbGlzdC1pdGVtLWJvZHkuZGlyZWN0aXZlJztcbmltcG9ydCB7IHBhcnNlTGF5b3V0UGF0dGVybiB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcGFyc2UtbGF5b3V0LXBhdHRlcm4nO1xuaW1wb3J0IHsgR3JpZExpc3RTZWxlY3Rpb25BY3Rpb25zLCBHcmlkTGlzdFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1saXN0LXNlbGVjdGlvbi5tb2RlbHMnO1xuaW1wb3J0IHsgR3JpZExpc3RJdGVtRm9vdGVyQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1saXN0LWl0ZW0tZm9vdGVyLWJhci9ncmlkLWxpc3QtaXRlbS1mb290ZXItYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkTGlzdEl0ZW1Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1saXN0LWl0ZW0tdG9vbGJhci9ncmlkLWxpc3QtaXRlbS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkTGlzdFRpdGxlQmFyU3BhY2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXIvZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRMaXN0IH0gZnJvbSAnLi4vZ3JpZC1saXN0L2dyaWQtbGlzdC1iYXNlLmNvbXBvbmVudCc7XG5cbmxldCBncmlkTGlzdEl0ZW1VbmlxdWVJZCA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4ge1xuICAgIGluZGV4PzogbnVtYmVyO1xuICAgIHZhbHVlPzogVDtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZExpc3RJdGVtVHlwZSA9ICdpbmFjdGl2ZScgfCAnYWN0aXZlJyB8ICdkZXRhaWwnIHwgJ2RldGFpbHNBbmRBY3RpdmUnIHwgJ25hdmlnYXRpb24nO1xuZXhwb3J0IHR5cGUgR3JpZExpc3RJdGVtU3RhdGUgPSAndW5yZWFkJyB8ICdsb2NrZWQnIHwgJ2Vycm9yJyB8ICdkcmFmdCc7XG5leHBvcnQgdHlwZSBHcmlkTGlzdEl0ZW1TdGF0dXMgPSAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InIHwgJ25ldXRyYWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWdyaWQtbGlzdC1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dyaWQtbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgR3JpZExpc3RUaXRsZUJhclNwYWNlckNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSxcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBPYmplY3RTdGF0dXNDb21wb25lbnQsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgR3JpZExpc3RJdGVtQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogaWQgZm9yIHRoZSBFbGVtZW50ICovXG4gICAgQElucHV0KClcbiAgICBpZCA9IGBmZC1ncmlkLWxpc3QtaXRlbS0ke2dyaWRMaXN0SXRlbVVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiB3aWR0aCBvZiB0aGUgZWxlbWVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXgtd2lkdGgnKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWluLXdpZHRoJylcbiAgICB3aWR0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogc3BlY2lmeSB0aGUgY2VsbCBsYXlvdXQgaW4gdGhlIGZvcm1hdCBgWExuLUxuLU1uLVNuYCB3aGVyZSBuIGlzXG4gICAgICogdGhlIG51bWJlciBvZiBvY2N1cGllZCBjb2x1bW5zIGFuZCBuIGNhbiBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggc2l6ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBsYXlvdXRJdGVtUGF0dGVybih2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLmdyaWRMYXlvdXRDbGFzc2VzID0gdmFsdWUgPyBwYXJzZUxheW91dFBhdHRlcm4odmFsdWUsIGZhbHNlKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHN0YXR1cyBvZiBHcmlkIExpc3QgSXRlbVxuICAgICAqIChTdGF0dXNlczogc3VjY2VzcyB8IHdhcm5pbmcgfCBlcnJvciB8IG5ldXRyYWwpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0dXM/OiBHcmlkTGlzdEl0ZW1TdGF0dXM7XG5cbiAgICAvKiogU2V0cyBudW1iZXIgb2Ygc3ViIGl0ZW1zICovXG4gICAgQElucHV0KClcbiAgICBjb3VudGVyOiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgLyoqXG4gICAgICogVmFsdWUgZmllbGQgc3RvcmVzIGluZm9ybWF0aW9uIGZvciByYWRpbyBidXR0b24gdmFsdWUsIGNoZWNrYm94IGJ1dHRvbiBhbmQgZm9yIEdyaWRMaXN0U2VsZWN0aW9uRXZlbnRcbiAgICAgKiBUaGUgZmllbGQgaXMgbWFuZGF0b3J5IGZvciBtb2RlcyBsaWtlIHNpbmdsZVNlbGVjdCwgc2luZ2xlU2VsZWN0TGVmdCwgc2luZ2xlU2VsZWN0UmlnaHQgb3IgbXVsdGlTZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbHVlPzogVDtcblxuICAgIC8qKiBXaGV0aGVyIGNsaWNrIG9uIHRoZSBjdXN0b20gdG9vbGJhciBpcyBkaXNhYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVRvb2xiYXJDbGljayA9IGZhbHNlO1xuXG4gICAgLyoqIEFsbG93cyBhbiBpdGVtIHRvIGJlIHNlbGVjdGVkIHByb2dyYW1tYXRpY2FsbHkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogTnVsbGFibGU8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBSZW1vdmUgdGhlIHBhZGRpbmcgZnJvbSB0aGUgSXRlbSBib2R5ICovXG4gICAgQElucHV0KClcbiAgICBub1BhZGRpbmcgPSBmYWxzZTtcblxuICAgIC8qKiBTZXRzIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlIHRvIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgdG8gdGhlIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHR5cGUgb2YgR3JpZCBMaXN0IEl0ZW1cbiAgICAgKiBUeXBlczpcbiAgICAgKiAtIGFjdGl2ZTogaW5kaWNhdGVzIHRoYXQgdGhlIGl0ZW0gaXMgY2xpY2thYmxlIHZpYSBhY3RpdmUgZmVlZGJhY2sgd2hlbiBpdGVtIGlzIHByZXNzZWRcbiAgICAgKiAtIGRldGFpbDogZW5hYmxlcyBkZXRhaWwgYnV0dG9uIG9mIHRoZSBsaXN0IGl0ZW0gdGhhdCBmaXJlcyBldmVudC5cbiAgICAgKiAtIGRldGFpbHNBbmRBY3RpdmU6IGVuYWJsZXMgXCJkZXRhaWxcIiBhbmQgXCJhY3RpdmVcIiBlbnVtZXJhdGlvbnMgdG9nZXRoZXJcbiAgICAgKiAtIGluYWN0aXZlOiBpbmRpY2F0ZXMgdGhlIGxpc3QgaXRlbSBkb2VzIG5vdCBoYXZlIGFueSBhY3RpdmUgZmVlZGJhY2sgd2hlbiBpdGVtIGlzIHByZXNzZWRcbiAgICAgKiAtIG5hdmlnYXRpb246IGluZGljYXRlcyB0aGUgbGlzdCBpdGVtIGlzIG5hdmlnYWJsZSB0byBzaG93IGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpdGVtXG4gICAgICogRGVmYXVsdDogaW5hY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0eXBlKHZhbHVlOiBOdWxsYWJsZTxHcmlkTGlzdEl0ZW1UeXBlPikge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWUgPz8gJ2luYWN0aXZlJztcbiAgICB9XG4gICAgZ2V0IHR5cGUoKTogR3JpZExpc3RJdGVtVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHlwZTogR3JpZExpc3RJdGVtVHlwZSA9ICdpbmFjdGl2ZSc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiBHcmlkIExpc3QgSXRlbVxuICAgICAqIChTdGF0ZXM6IHVucmVhZCB8IGVycm9yIHwgbG9ja2VkIHwgZHJhZnQpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZT86IEdyaWRMaXN0SXRlbVN0YXRlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdmlnYXRlZCBzdGF0ZSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIElmIHNldCB0byB0cnVlLCBhIG5hdmlnYXRpb24gaW5kaWNhdG9yIGlzIGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc05hdmlnYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFRpdGxlIG9mIHRoZSBpdGVtICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBpdGVtICovXG4gICAgQElucHV0KClcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIHR5cGUgaXMgYWN0aXZlXG4gICAgICogYW5kIGl0ZW0gaXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkTGlzdEl0ZW1PdXRwdXRFdmVudDxUPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGlzIHRocm93biwgd2hlbiB0eXBlIGlzIGRldGFpbCBvciBkZXRhaWxzQW5kQWN0aXZlXG4gICAgICogYW5kIERldGFpbCBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkZXRhaWwgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRMaXN0SXRlbU91dHB1dEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIG1vZGUgZGVsZXRlXG4gICAgICogYW5kIERlbGV0ZSBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRMaXN0SXRlbU91dHB1dEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIHR5cGUgaXMgbmF2aWdhdGlvblxuICAgICAqIGFuZCBOYXZpZ2F0ZSBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBuYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gc3RhdGUgaXMgZXJyb3IsIG5vdCB1c2VkIEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudFxuICAgICAqIGFuZCBEcmFmdCBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkcmFmdCA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gc3RhdGUgaXMgbG9ja2VkLCBub3QgdXNlZCBHcmlkTGlzdEl0ZW1Gb290ZXJCYXJDb21wb25lbnRcbiAgICAgKiBhbmQgTG9ja2VkIGJ1dHRvbiB3YXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGxvY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRMaXN0SXRlbScpXG4gICAgX2dyaWRMaXN0SXRlbTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGxpc3QgaXRlbS5cbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHdob2xlIGNhcmQgaGFzIGFjdGl2ZSBzdGF0ZS4gQmVjb21lcyBmYWxzZSBvbmx5IHdoZW4gdGhlIEVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICovXG4gICAgX2lzQWN0aXZlID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0IGdyaWRMYXlvdXRDbGFzc2VzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVDbGFzc2VzTmFtZXModGhpcy5fZ3JpZExheW91dENsYXNzZXMpO1xuICAgICAgICB0aGlzLl9ncmlkTGF5b3V0Q2xhc3NlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9hZGRDbGFzc2VzTmFtZXModGhpcy5fZ3JpZExheW91dENsYXNzZXMpO1xuICAgIH1cbiAgICBnZXQgZ3JpZExheW91dENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JpZExheW91dENsYXNzZXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudClcbiAgICBmb290ZXJCYXJDb21wb25lbnQ6IEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChHcmlkTGlzdEl0ZW1Ub29sYmFyQ29tcG9uZW50KVxuICAgIGl0ZW1Ub29sYmFyQ29tcG9uZW50OiBHcmlkTGlzdEl0ZW1Ub29sYmFyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUpXG4gICAgYm9keTogR3JpZExpc3RJdGVtQm9keURpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGVkSXRlbT86IFQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldCBzZWxlY3Rpb25Nb2RlKG1vZGU6IEdyaWRMaXN0U2VsZWN0aW9uTW9kZSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gbW9kZTtcblxuICAgICAgICBpZiAobW9kZSAhPT0gJ2RlbGV0ZScgJiYgbW9kZSAhPT0gJ25vbmUnICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWQgTGlzdCBJdGVtIG11c3QgaGF2ZSBbdmFsdWVdIGF0dHJpYnV0ZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkICYmIHRoaXMudmFsdWUgJiYgdGhpcy5faW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbXVsdGlTZWxlY3QnID8gbnVsbCA6IEdyaWRMaXN0U2VsZWN0aW9uQWN0aW9ucy5BREQ7XG5cbiAgICAgICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCwgYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgZ2V0IHNlbGVjdGlvbk1vZGUoKTogR3JpZExpc3RTZWxlY3Rpb25Nb2RlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5kZXg/OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGU/OiBHcmlkTGlzdFNlbGVjdGlvbk1vZGU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dyaWRMYXlvdXRDbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2dyaWRMaXN0OiBHcmlkTGlzdDxUPlxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zU3ViID0gdGhpcy5fZ3JpZExpc3QuX3NlbGVjdGVkSXRlbXMkLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IGl0ZW1zLnNlbGVjdGlvbi5maW5kKChpdGVtKSA9PiBpdGVtID09PSB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHNlbGVjdGVkSXRlbXNTdWIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgZ3JpZCBsaXN0IGl0ZW0gcHJvZ3JhbW1hdGljYWxseSAqL1xuICAgIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ3JpZExpc3RJdGVtPy5uYXRpdmVFbGVtZW50LmZvY3VzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldEFjdGl2ZShldmVudDogTW91c2VFdmVudCwgaXNBY3RpdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gaXNBY3RpdmU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zZWxlY3RlZEl0ZW0gIT09ICd1bmRlZmluZWQnIHx8ICF0aGlzLnZhbHVlIHx8IHRoaXMuX2luZGV4ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tib3hDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uSXRlbShjaGVja2VkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uSXRlbSh2YWx1ZTogYm9vbGVhbiB8IG51bWJlciB8IFQsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgdGhpcy5faW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdtdWx0aVNlbGVjdCdcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHZhbHVlIHx8IHZhbHVlID09PSAwXG4gICAgICAgICAgICAgICAgPyBHcmlkTGlzdFNlbGVjdGlvbkFjdGlvbnMuQUREXG4gICAgICAgICAgICAgICAgOiBHcmlkTGlzdFNlbGVjdGlvbkFjdGlvbnMuUkVNT1ZFO1xuXG4gICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCwgYWN0aW9uLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25EZXRhaWwoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuZGV0YWlsLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25OYXZpZ2F0ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZS5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRGVsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NsaWNrT25EcmFmdChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5kcmFmdC5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NsaWNrT25Mb2NrZWQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMubG9ja2VkLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdhY3RpdmUnICYmIHRoaXMudHlwZSAhPT0gJ2RldGFpbHNBbmRBY3RpdmUnICYmIHRoaXMudHlwZSAhPT0gJ25hdmlnYXRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTmF2aWdhdGUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmVzcy5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgaXNTZWxlY3Rpb25LZXlEb3duID0gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKTtcblxuICAgICAgICBpZiAoaXNTZWxlY3Rpb25LZXlEb3duICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VsZWN0aW9uS2V5RG93biB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdub25lJyB8fCAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19pdGVtJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlTZWxlY3QnKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25JdGVtKCF0aGlzLl9zZWxlY3RlZEl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3NlbGVjdGVkSXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3NpbmdsZVNlbGVjdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWV2ZW50Py50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHsgY2xhc3NMaXN0IH0gPSBlbGVtZW50O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhKHRoaXMuX2lzVG9vbGJhckVsZW1lbnQoZWxlbWVudCkgJiYgdGhpcy5kaXNhYmxlVG9vbGJhckNsaWNrKSAmJlxuICAgICAgICAgICAgIWNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uJykgJiZcbiAgICAgICAgICAgICFjbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9fcmFkaW8tbGFiZWwnKSAmJlxuICAgICAgICAgICAgIWNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19yYWRpby1pbnB1dCcpICYmXG4gICAgICAgICAgICAhY2xhc3NMaXN0LmNvbnRhaW5zKCdmZC1ncmlkLWxpc3RfX2NoZWNrYm94LWxhYmVsJykgJiZcbiAgICAgICAgICAgICFjbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9fY2hlY2tib3gtaW5wdXQnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNUb29sYmFyRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbVRvb2xiYXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9faXRlbScpKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLXRvb2xiYXItLWV4dHJhLWNvbnRlbnQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmVudERlZmF1bHQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX291dHB1dEV2ZW50VmFsdWUoKTogR3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBpbmRleDogdGhpcy5faW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZENsYXNzZXNOYW1lcyhjbGFzc2VzTmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIGNsYXNzZXNOYW1lcykge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQ2xhc3Nlc05hbWVzKGNsYXNzZXNOYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc05hbWUgb2YgY2xhc3Nlc05hbWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXIucmVtb3ZlQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICNncmlkTGlzdEl0ZW1cbiAgICBbaWRdPVwiaWRcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtXCJcbiAgICByb2xlPVwib3B0aW9uXCJcbiAgICBbY2xhc3MuaXMtbmF2aWdhdGVkXT1cImlzTmF2aWdhdGVkXCJcbiAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwiISFfc2VsZWN0ZWRJdGVtXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS1saW5rXT1cIlxuICAgICAgICBfaXNBY3RpdmUgJiYgKHR5cGUgPT09ICdhY3RpdmUnIHx8IHR5cGUgPT09ICdkZXRhaWxzQW5kQWN0aXZlJyB8fCB0eXBlID09PSAnbmF2aWdhdGlvbicpXG4gICAgXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS11bnJlYWRdPVwic3RhdGUgPT09ICd1bnJlYWQnXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS1sb2NrZWRdPVwic3RhdGUgPT09ICdsb2NrZWQnXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS1kcmFmdF09XCJzdGF0ZSA9PT0gJ2RyYWZ0J1wiXG4gICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faXRlbS0tZXJyb3JdPVwic3RhdGUgPT09ICdlcnJvcidcIlxuICAgIChrZXlkb3duKT1cIl9vbktleURvd24oJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3QnICYmIF9zaW5nbGVTZWxlY3QoJGV2ZW50KTsgX29uQ2xpY2soJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgKG1vdXNlb3Zlcik9XCJfc2V0QWN0aXZlKCRldmVudCwgZmFsc2UpXCJcbiAgICAobW91c2VvdXQpPVwiX3NldEFjdGl2ZSgkZXZlbnQsIHRydWUpXCJcbiAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGlvbk1vZGUgPT09ICdub25lJyA/IG51bGwgOiAhIV9zZWxlY3RlZEl0ZW1cIlxuPlxuICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwic3RhdHVzXCJcbiAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2hpZ2hsaWdodFwiXG4gICAgICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2hpZ2hsaWdodC0tcG9zaXRpdmVdPVwic3RhdHVzID09PSAnc3VjY2VzcydcIlxuICAgICAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19oaWdobGlnaHQtLWNyaXRpY2FsXT1cInN0YXR1cyA9PT0gJ3dhcm5pbmcnXCJcbiAgICAgICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faGlnaGxpZ2h0LS1uZWdhdGl2ZV09XCJzdGF0dXMgPT09ICdlcnJvcidcIlxuICAgICAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19oaWdobGlnaHQtLW5ldXRyYWxdPVwic3RhdHVzID09PSAnbmV1dHJhbCdcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHN0YXR1czogc3RhdHVzIH1cIlxuICAgID48L3NwYW4+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJhZGlvXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtdG9vbGJhciBmZC1ncmlkLWxpc3RfX2l0ZW0tdG9vbGJhclwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBjb3VudGVyIHx8XG4gICAgICAgICAgICBpdGVtVG9vbGJhckNvbXBvbmVudD8uY29udGVudFRlbXBsYXRlUmVmIHx8XG4gICAgICAgICAgICAodHlwZSAmJiB0eXBlICE9PSAnaW5hY3RpdmUnICYmIHR5cGUgIT09ICdhY3RpdmUnKSB8fFxuICAgICAgICAgICAgKHNlbGVjdGlvbk1vZGUgIT09ICdub25lJyAmJiBzZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlU2VsZWN0JylcbiAgICAgICAgXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlU2VsZWN0TGVmdCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyYWRpb1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpU2VsZWN0J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoZWNrYm94XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVG9vbGJhckNvbXBvbmVudD8uY29udGVudFRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtdG9vbGJhci0tZXh0cmEtY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVG9vbGJhckNvbXBvbmVudC5jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZmQtZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXI+PC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyLXNwYWNlcj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJjb3VudGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLWNvdW50ZXJcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtQ291bnRlckFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSA6IHsgY291bnQ6IGNvdW50ZXIgfVwiXG4gICAgICAgICAgICA+e3sgY291bnRlciB9fTwvc3BhblxuICAgICAgICA+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAnZGV0YWlsJyB8fCB0eXBlID09PSAnZGV0YWlsc0FuZEFjdGl2ZSdcIlxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cImVkaXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtQnV0dG9uRGV0YWlsc1RpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtQnV0dG9uRGV0YWlsc1RpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgKGNsaWNrKT1cIl9vbkRldGFpbCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PT0gJ2RlbGV0ZSdcIlxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtQnV0dG9uRGVsZXRlVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1CdXR0b25EZWxldGVUaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0aXRsZT1cIkRlbGV0ZVwiXG4gICAgICAgICAgICBmZENvbXBhY3RcbiAgICAgICAgICAgIChjbGljayk9XCJfb25EZWxldGUoJGV2ZW50KVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cInR5cGUgPT09ICduYXZpZ2F0aW9uJ1wiIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLW5hdmlnYXRpb24taW5kaWNhdG9yXCI+XG4gICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cIm5hdmlnYXRpb24tcmlnaHQtYXJyb3dcIj48L2ZkLWljb24+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdFJpZ2h0J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJhZGlvXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbS1ib2R5XCIgW2NsYXNzLmZkLWdyaWQtbGlzdF9faXRlbS1ib2R5LS1uby1wYWRkaW5nXT1cIm5vUGFkZGluZ1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmQtZ3JpZC1saXN0LWl0ZW0taW1hZ2VdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0aXRsZSB8fCBkZXNjcmlwdGlvblwiIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgPGg0ICpuZ0lmPVwidGl0bGVcIiBmZC10aXRsZT57eyB0aXRsZSB9fTwvaDQ+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tc3VidGl0bGVcIj57eyBkZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImJvZHk/LnRlbXBsYXRlUmVmXCIgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJib2R5LnRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSB8fCBmb290ZXJCYXJDb21wb25lbnQ/LmNvbnRlbnRUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1Gb290ZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNyYWRpbz5cbiAgICA8aW5wdXRcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdCcgPyAtMSA6IDBcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBjbGFzcz1cImZkLXJhZGlvIGlzLWNvbXBhY3QgZmQtZ3JpZC1saXN0X19yYWRpby1pbnB1dFwiXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3QnID8gJ25vbmUnIDogJydcIlxuICAgICAgICBbaWRdPVwiaWQgKyAnLXJhZGlvJ1wiXG4gICAgICAgIFtuYW1lXT1cIidmZC1ncmlkLWxpc3QtaXRlbS10b29sYmFyLScgKyBzZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiJGV2ZW50ICYmIF9zZWxlY3Rpb25JdGVtKCRldmVudClcIlxuICAgIC8+XG4gICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZmQtcmFkaW9fX2xhYmVsIGZkLWdyaWQtbGlzdF9fcmFkaW8tbGFiZWxcIlxuICAgICAgICBbZm9yXT1cImlkICsgJy1yYWRpbydcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgKG1vdXNlb3Zlcik9XCJfc2V0QWN0aXZlKCRldmVudCwgZmFsc2UpXCJcbiAgICAgICAgKG1vdXNlb3V0KT1cIl9zZXRBY3RpdmUoJGV2ZW50LCB0cnVlKVwiXG4gICAgPjwvbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NoZWNrYm94PlxuICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImZkLWNoZWNrYm94IGlzLWNvbXBhY3QgZmQtZ3JpZC1saXN0X19jaGVja2JveC1pbnB1dFwiXG4gICAgICAgIFtpZF09XCJpZCArICctY2hlY2tib3gnXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cIl9jaGVja2JveENsaWNrKCRldmVudClcIlxuICAgIC8+XG4gICAgPGxhYmVsIGNsYXNzPVwiZmQtY2hlY2tib3hfX2xhYmVsIGZkLWdyaWQtbGlzdF9fY2hlY2tib3gtbGFiZWxcIiBbZm9yXT1cImlkICsgJy1jaGVja2JveCdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmQtY2hlY2tib3hfX2NoZWNrbWFya1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpdGVtRm9vdGVyPlxuICAgIDxkaXYgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tYm9keS1hY3Rpb25zXCIgKm5nSWY9XCJmb290ZXJCYXJDb21wb25lbnQgfHwgc3RhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvb3RlckJhckNvbXBvbmVudD8uY29udGVudFRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyQmFyQ29tcG9uZW50LmNvbnRlbnRUZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvb3RlckJhckNvbXBvbmVudD8uY29udGVudFRlbXBsYXRlUmVmICYmIHN0YXRlXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdGUgPT09ICdlcnJvcidcIlxuICAgICAgICAgICAgICAgIGZkLW9iamVjdC1zdGF0dXNcbiAgICAgICAgICAgICAgICBzdGF0dXM9XCJuZWdhdGl2ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNDb250YWluc0Vycm9ycycgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtU3RhdHVzQ29udGFpbnNFcnJvcnMnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXRlID09PSAnbG9ja2VkJ1wiXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwicHJpdmF0ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNMb2NrZWQnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVHcmlkTGlzdC5saXN0SXRlbVN0YXR1c0xvY2tlZCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jbGlja09uTG9ja2VkKCRldmVudClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdGUgPT09ICdkcmFmdCdcIlxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNEcmFmdCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNEcmFmdCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jbGlja09uRHJhZnQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZ3JpZC1saXN0L2NvbXBvbmVudHMvZ3JpZC1saXN0LWl0ZW0vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZ3JpZC1saXN0L2NvbXBvbmVudHMvZ3JpZC1saXN0LWl0ZW0vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsT0FBTyxFQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFFL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxx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QVM7c0JBRFIsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBY0YsSUFBSTtzQkFEUCxLQUFLO2dCQWdCTixLQUFLO3NCQURKLEtBQUs7Z0JBUU4sV0FBVztzQkFEVixLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBUU4sS0FBSztzQkFESixNQUFNO2dCQVFQLE1BQU07c0JBREwsTUFBTTtnQkFRUCxNQUFNO3NCQURMLE1BQU07Z0JBUVAsUUFBUTtzQkFEUCxNQUFNO2dCQVFQLEtBQUs7c0JBREosTUFBTTtnQkFRUCxNQUFNO3NCQURMLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGNBQWM7Z0JBcUJ6QixrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsOEJBQThCO2dCQUs1QyxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsNEJBQTRCO2dCQUsxQyxJQUFJO3NCQURILFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5URVIsIFNQQUNFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBLZXlVdGlsLCBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgT2JqZWN0U3RhdHVzQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL29iamVjdC1zdGF0dXMnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2dyaWQtbGlzdC1pdGVtLWJvZHkuZGlyZWN0aXZlJztcbmltcG9ydCB7IHBhcnNlTGF5b3V0UGF0dGVybiB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcGFyc2UtbGF5b3V0LXBhdHRlcm4nO1xuaW1wb3J0IHsgR3JpZExpc3RTZWxlY3Rpb25BY3Rpb25zLCBHcmlkTGlzdFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1saXN0LXNlbGVjdGlvbi5tb2RlbHMnO1xuaW1wb3J0IHsgR3JpZExpc3RJdGVtRm9vdGVyQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1saXN0LWl0ZW0tZm9vdGVyLWJhci9ncmlkLWxpc3QtaXRlbS1mb290ZXItYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkTGlzdEl0ZW1Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1saXN0LWl0ZW0tdG9vbGJhci9ncmlkLWxpc3QtaXRlbS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkTGlzdFRpdGxlQmFyU3BhY2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXIvZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRMaXN0IH0gZnJvbSAnLi4vZ3JpZC1saXN0L2dyaWQtbGlzdC1iYXNlLmNvbXBvbmVudCc7XG5cbmxldCBncmlkTGlzdEl0ZW1VbmlxdWVJZCA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4ge1xuICAgIGluZGV4PzogbnVtYmVyO1xuICAgIHZhbHVlPzogVDtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZExpc3RJdGVtVHlwZSA9ICdpbmFjdGl2ZScgfCAnYWN0aXZlJyB8ICdkZXRhaWwnIHwgJ2RldGFpbHNBbmRBY3RpdmUnIHwgJ25hdmlnYXRpb24nO1xuZXhwb3J0IHR5cGUgR3JpZExpc3RJdGVtU3RhdGUgPSAndW5yZWFkJyB8ICdsb2NrZWQnIHwgJ2Vycm9yJyB8ICdkcmFmdCc7XG5leHBvcnQgdHlwZSBHcmlkTGlzdEl0ZW1TdGF0dXMgPSAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InIHwgJ25ldXRyYWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWdyaWQtbGlzdC1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dyaWQtbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgR3JpZExpc3RUaXRsZUJhclNwYWNlckNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSxcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBPYmplY3RTdGF0dXNDb21wb25lbnQsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgR3JpZExpc3RJdGVtQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogaWQgZm9yIHRoZSBFbGVtZW50ICovXG4gICAgQElucHV0KClcbiAgICBpZCA9IGBmZC1ncmlkLWxpc3QtaXRlbS0ke2dyaWRMaXN0SXRlbVVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiB3aWR0aCBvZiB0aGUgZWxlbWVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXgtd2lkdGgnKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWluLXdpZHRoJylcbiAgICB3aWR0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogc3BlY2lmeSB0aGUgY2VsbCBsYXlvdXQgaW4gdGhlIGZvcm1hdCBgWExuLUxuLU1uLVNuYCB3aGVyZSBuIGlzXG4gICAgICogdGhlIG51bWJlciBvZiBvY2N1cGllZCBjb2x1bW5zIGFuZCBuIGNhbiBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggc2l6ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBsYXlvdXRJdGVtUGF0dGVybih2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLmdyaWRMYXlvdXRDbGFzc2VzID0gdmFsdWUgPyBwYXJzZUxheW91dFBhdHRlcm4odmFsdWUsIGZhbHNlKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHN0YXR1cyBvZiBHcmlkIExpc3QgSXRlbVxuICAgICAqIChTdGF0dXNlczogc3VjY2VzcyB8IHdhcm5pbmcgfCBlcnJvciB8IG5ldXRyYWwpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0dXM/OiBHcmlkTGlzdEl0ZW1TdGF0dXM7XG5cbiAgICAvKiogU2V0cyBudW1iZXIgb2Ygc3ViIGl0ZW1zICovXG4gICAgQElucHV0KClcbiAgICBjb3VudGVyOiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgLyoqXG4gICAgICogVmFsdWUgZmllbGQgc3RvcmVzIGluZm9ybWF0aW9uIGZvciByYWRpbyBidXR0b24gdmFsdWUsIGNoZWNrYm94IGJ1dHRvbiBhbmQgZm9yIEdyaWRMaXN0U2VsZWN0aW9uRXZlbnRcbiAgICAgKiBUaGUgZmllbGQgaXMgbWFuZGF0b3J5IGZvciBtb2RlcyBsaWtlIHNpbmdsZVNlbGVjdCwgc2luZ2xlU2VsZWN0TGVmdCwgc2luZ2xlU2VsZWN0UmlnaHQgb3IgbXVsdGlTZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbHVlPzogVDtcblxuICAgIC8qKiBXaGV0aGVyIGNsaWNrIG9uIHRoZSBjdXN0b20gdG9vbGJhciBpcyBkaXNhYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVRvb2xiYXJDbGljayA9IGZhbHNlO1xuXG4gICAgLyoqIEFsbG93cyBhbiBpdGVtIHRvIGJlIHNlbGVjdGVkIHByb2dyYW1tYXRpY2FsbHkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogTnVsbGFibGU8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBSZW1vdmUgdGhlIHBhZGRpbmcgZnJvbSB0aGUgSXRlbSBib2R5ICovXG4gICAgQElucHV0KClcbiAgICBub1BhZGRpbmcgPSBmYWxzZTtcblxuICAgIC8qKiBTZXRzIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlIHRvIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNldHMgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgdG8gdGhlIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHR5cGUgb2YgR3JpZCBMaXN0IEl0ZW1cbiAgICAgKiBUeXBlczpcbiAgICAgKiAtIGFjdGl2ZTogaW5kaWNhdGVzIHRoYXQgdGhlIGl0ZW0gaXMgY2xpY2thYmxlIHZpYSBhY3RpdmUgZmVlZGJhY2sgd2hlbiBpdGVtIGlzIHByZXNzZWRcbiAgICAgKiAtIGRldGFpbDogZW5hYmxlcyBkZXRhaWwgYnV0dG9uIG9mIHRoZSBsaXN0IGl0ZW0gdGhhdCBmaXJlcyBldmVudC5cbiAgICAgKiAtIGRldGFpbHNBbmRBY3RpdmU6IGVuYWJsZXMgXCJkZXRhaWxcIiBhbmQgXCJhY3RpdmVcIiBlbnVtZXJhdGlvbnMgdG9nZXRoZXJcbiAgICAgKiAtIGluYWN0aXZlOiBpbmRpY2F0ZXMgdGhlIGxpc3QgaXRlbSBkb2VzIG5vdCBoYXZlIGFueSBhY3RpdmUgZmVlZGJhY2sgd2hlbiBpdGVtIGlzIHByZXNzZWRcbiAgICAgKiAtIG5hdmlnYXRpb246IGluZGljYXRlcyB0aGUgbGlzdCBpdGVtIGlzIG5hdmlnYWJsZSB0byBzaG93IGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpdGVtXG4gICAgICogRGVmYXVsdDogaW5hY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0eXBlKHZhbHVlOiBOdWxsYWJsZTxHcmlkTGlzdEl0ZW1UeXBlPikge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWUgPz8gJ2luYWN0aXZlJztcbiAgICB9XG4gICAgZ2V0IHR5cGUoKTogR3JpZExpc3RJdGVtVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHlwZTogR3JpZExpc3RJdGVtVHlwZSA9ICdpbmFjdGl2ZSc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiBHcmlkIExpc3QgSXRlbVxuICAgICAqIChTdGF0ZXM6IHVucmVhZCB8IGVycm9yIHwgbG9ja2VkIHwgZHJhZnQpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZT86IEdyaWRMaXN0SXRlbVN0YXRlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdmlnYXRlZCBzdGF0ZSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIElmIHNldCB0byB0cnVlLCBhIG5hdmlnYXRpb24gaW5kaWNhdG9yIGlzIGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc05hdmlnYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFRpdGxlIG9mIHRoZSBpdGVtICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBpdGVtICovXG4gICAgQElucHV0KClcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIHR5cGUgaXMgYWN0aXZlXG4gICAgICogYW5kIGl0ZW0gaXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkTGlzdEl0ZW1PdXRwdXRFdmVudDxUPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGlzIHRocm93biwgd2hlbiB0eXBlIGlzIGRldGFpbCBvciBkZXRhaWxzQW5kQWN0aXZlXG4gICAgICogYW5kIERldGFpbCBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkZXRhaWwgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRMaXN0SXRlbU91dHB1dEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIG1vZGUgZGVsZXRlXG4gICAgICogYW5kIERlbGV0ZSBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRMaXN0SXRlbU91dHB1dEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIHR5cGUgaXMgbmF2aWdhdGlvblxuICAgICAqIGFuZCBOYXZpZ2F0ZSBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBuYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gc3RhdGUgaXMgZXJyb3IsIG5vdCB1c2VkIEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudFxuICAgICAqIGFuZCBEcmFmdCBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkcmFmdCA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gc3RhdGUgaXMgbG9ja2VkLCBub3QgdXNlZCBHcmlkTGlzdEl0ZW1Gb290ZXJCYXJDb21wb25lbnRcbiAgICAgKiBhbmQgTG9ja2VkIGJ1dHRvbiB3YXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGxvY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRMaXN0SXRlbScpXG4gICAgX2dyaWRMaXN0SXRlbTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGxpc3QgaXRlbS5cbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHdob2xlIGNhcmQgaGFzIGFjdGl2ZSBzdGF0ZS4gQmVjb21lcyBmYWxzZSBvbmx5IHdoZW4gdGhlIEVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICovXG4gICAgX2lzQWN0aXZlID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0IGdyaWRMYXlvdXRDbGFzc2VzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVDbGFzc2VzTmFtZXModGhpcy5fZ3JpZExheW91dENsYXNzZXMpO1xuICAgICAgICB0aGlzLl9ncmlkTGF5b3V0Q2xhc3NlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9hZGRDbGFzc2VzTmFtZXModGhpcy5fZ3JpZExheW91dENsYXNzZXMpO1xuICAgIH1cbiAgICBnZXQgZ3JpZExheW91dENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JpZExheW91dENsYXNzZXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudClcbiAgICBmb290ZXJCYXJDb21wb25lbnQ6IEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChHcmlkTGlzdEl0ZW1Ub29sYmFyQ29tcG9uZW50KVxuICAgIGl0ZW1Ub29sYmFyQ29tcG9uZW50OiBHcmlkTGlzdEl0ZW1Ub29sYmFyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUpXG4gICAgYm9keTogR3JpZExpc3RJdGVtQm9keURpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGVkSXRlbT86IFQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldCBzZWxlY3Rpb25Nb2RlKG1vZGU6IEdyaWRMaXN0U2VsZWN0aW9uTW9kZSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gbW9kZTtcblxuICAgICAgICBpZiAobW9kZSAhPT0gJ2RlbGV0ZScgJiYgbW9kZSAhPT0gJ25vbmUnICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWQgTGlzdCBJdGVtIG11c3QgaGF2ZSBbdmFsdWVdIGF0dHJpYnV0ZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkICYmIHRoaXMudmFsdWUgJiYgdGhpcy5faW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbXVsdGlTZWxlY3QnID8gbnVsbCA6IEdyaWRMaXN0U2VsZWN0aW9uQWN0aW9ucy5BREQ7XG5cbiAgICAgICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCwgYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgZ2V0IHNlbGVjdGlvbk1vZGUoKTogR3JpZExpc3RTZWxlY3Rpb25Nb2RlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5kZXg/OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGU/OiBHcmlkTGlzdFNlbGVjdGlvbk1vZGU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dyaWRMYXlvdXRDbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2dyaWRMaXN0OiBHcmlkTGlzdDxUPlxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zU3ViID0gdGhpcy5fZ3JpZExpc3QuX3NlbGVjdGVkSXRlbXMkLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IGl0ZW1zLnNlbGVjdGlvbi5maW5kKChpdGVtKSA9PiBpdGVtID09PSB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHNlbGVjdGVkSXRlbXNTdWIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgZ3JpZCBsaXN0IGl0ZW0gcHJvZ3JhbW1hdGljYWxseSAqL1xuICAgIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ3JpZExpc3RJdGVtPy5uYXRpdmVFbGVtZW50LmZvY3VzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldEFjdGl2ZShldmVudDogTW91c2VFdmVudCwgaXNBY3RpdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gaXNBY3RpdmU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zZWxlY3RlZEl0ZW0gIT09ICd1bmRlZmluZWQnIHx8ICF0aGlzLnZhbHVlIHx8IHRoaXMuX2luZGV4ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tib3hDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uSXRlbShjaGVja2VkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uSXRlbSh2YWx1ZTogYm9vbGVhbiB8IG51bWJlciB8IFQsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgdGhpcy5faW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdtdWx0aVNlbGVjdCdcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHZhbHVlIHx8IHZhbHVlID09PSAwXG4gICAgICAgICAgICAgICAgPyBHcmlkTGlzdFNlbGVjdGlvbkFjdGlvbnMuQUREXG4gICAgICAgICAgICAgICAgOiBHcmlkTGlzdFNlbGVjdGlvbkFjdGlvbnMuUkVNT1ZFO1xuXG4gICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCwgYWN0aW9uLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25EZXRhaWwoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuZGV0YWlsLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25OYXZpZ2F0ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZS5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRGVsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NsaWNrT25EcmFmdChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5kcmFmdC5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NsaWNrT25Mb2NrZWQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMubG9ja2VkLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdhY3RpdmUnICYmIHRoaXMudHlwZSAhPT0gJ2RldGFpbHNBbmRBY3RpdmUnICYmIHRoaXMudHlwZSAhPT0gJ25hdmlnYXRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTmF2aWdhdGUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmVzcy5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgaXNTZWxlY3Rpb25LZXlEb3duID0gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKTtcblxuICAgICAgICBpZiAoaXNTZWxlY3Rpb25LZXlEb3duICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VsZWN0aW9uS2V5RG93biB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdub25lJyB8fCAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19pdGVtJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlTZWxlY3QnKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25JdGVtKCF0aGlzLl9zZWxlY3RlZEl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3NlbGVjdGVkSXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3NpbmdsZVNlbGVjdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWV2ZW50Py50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHsgY2xhc3NMaXN0IH0gPSBlbGVtZW50O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhKHRoaXMuX2lzVG9vbGJhckVsZW1lbnQoZWxlbWVudCkgJiYgdGhpcy5kaXNhYmxlVG9vbGJhckNsaWNrKSAmJlxuICAgICAgICAgICAgIWNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uJykgJiZcbiAgICAgICAgICAgICFjbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9fcmFkaW8tbGFiZWwnKSAmJlxuICAgICAgICAgICAgIWNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19yYWRpby1pbnB1dCcpICYmXG4gICAgICAgICAgICAhY2xhc3NMaXN0LmNvbnRhaW5zKCdmZC1ncmlkLWxpc3RfX2NoZWNrYm94LWxhYmVsJykgJiZcbiAgICAgICAgICAgICFjbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9fY2hlY2tib3gtaW5wdXQnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNUb29sYmFyRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbVRvb2xiYXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9faXRlbScpKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLXRvb2xiYXItLWV4dHJhLWNvbnRlbnQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmVudERlZmF1bHQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX291dHB1dEV2ZW50VmFsdWUoKTogR3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBpbmRleDogdGhpcy5faW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZENsYXNzZXNOYW1lcyhjbGFzc2VzTmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIGNsYXNzZXNOYW1lcykge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQ2xhc3Nlc05hbWVzKGNsYXNzZXNOYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc05hbWUgb2YgY2xhc3Nlc05hbWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXIucmVtb3ZlQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICNncmlkTGlzdEl0ZW1cbiAgICBbaWRdPVwiaWRcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtXCJcbiAgICByb2xlPVwib3B0aW9uXCJcbiAgICBbY2xhc3MuaXMtbmF2aWdhdGVkXT1cImlzTmF2aWdhdGVkXCJcbiAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwiISFfc2VsZWN0ZWRJdGVtXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS1saW5rXT1cIlxuICAgICAgICBfaXNBY3RpdmUgJiYgKHR5cGUgPT09ICdhY3RpdmUnIHx8IHR5cGUgPT09ICdkZXRhaWxzQW5kQWN0aXZlJyB8fCB0eXBlID09PSAnbmF2aWdhdGlvbicpXG4gICAgXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS11bnJlYWRdPVwic3RhdGUgPT09ICd1bnJlYWQnXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS1sb2NrZWRdPVwic3RhdGUgPT09ICdsb2NrZWQnXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS1kcmFmdF09XCJzdGF0ZSA9PT0gJ2RyYWZ0J1wiXG4gICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faXRlbS0tZXJyb3JdPVwic3RhdGUgPT09ICdlcnJvcidcIlxuICAgIChrZXlkb3duKT1cIl9vbktleURvd24oJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3QnICYmIF9zaW5nbGVTZWxlY3QoJGV2ZW50KTsgX29uQ2xpY2soJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgKG1vdXNlb3Zlcik9XCJfc2V0QWN0aXZlKCRldmVudCwgZmFsc2UpXCJcbiAgICAobW91c2VvdXQpPVwiX3NldEFjdGl2ZSgkZXZlbnQsIHRydWUpXCJcbiAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGlvbk1vZGUgPT09ICdub25lJyA/IG51bGwgOiAhIV9zZWxlY3RlZEl0ZW1cIlxuPlxuICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwic3RhdHVzXCJcbiAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2hpZ2hsaWdodFwiXG4gICAgICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2hpZ2hsaWdodC0tcG9zaXRpdmVdPVwic3RhdHVzID09PSAnc3VjY2VzcydcIlxuICAgICAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19oaWdobGlnaHQtLWNyaXRpY2FsXT1cInN0YXR1cyA9PT0gJ3dhcm5pbmcnXCJcbiAgICAgICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faGlnaGxpZ2h0LS1uZWdhdGl2ZV09XCJzdGF0dXMgPT09ICdlcnJvcidcIlxuICAgICAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19oaWdobGlnaHQtLW5ldXRyYWxdPVwic3RhdHVzID09PSAnbmV1dHJhbCdcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHN0YXR1czogc3RhdHVzIH1cIlxuICAgID48L3NwYW4+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJhZGlvXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtdG9vbGJhciBmZC1ncmlkLWxpc3RfX2l0ZW0tdG9vbGJhclwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBjb3VudGVyIHx8XG4gICAgICAgICAgICBpdGVtVG9vbGJhckNvbXBvbmVudD8uY29udGVudFRlbXBsYXRlUmVmIHx8XG4gICAgICAgICAgICAodHlwZSAmJiB0eXBlICE9PSAnaW5hY3RpdmUnICYmIHR5cGUgIT09ICdhY3RpdmUnKSB8fFxuICAgICAgICAgICAgKHNlbGVjdGlvbk1vZGUgIT09ICdub25lJyAmJiBzZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlU2VsZWN0JylcbiAgICAgICAgXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlU2VsZWN0TGVmdCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyYWRpb1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpU2VsZWN0J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoZWNrYm94XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVG9vbGJhckNvbXBvbmVudD8uY29udGVudFRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtdG9vbGJhci0tZXh0cmEtY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVG9vbGJhckNvbXBvbmVudC5jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZmQtZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXI+PC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyLXNwYWNlcj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJjb3VudGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLWNvdW50ZXJcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtQ291bnRlckFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSA6IHsgY291bnQ6IGNvdW50ZXIgfVwiXG4gICAgICAgICAgICA+e3sgY291bnRlciB9fTwvc3BhblxuICAgICAgICA+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJ0eXBlID09PSAnZGV0YWlsJyB8fCB0eXBlID09PSAnZGV0YWlsc0FuZEFjdGl2ZSdcIlxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cImVkaXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtQnV0dG9uRGV0YWlsc1RpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtQnV0dG9uRGV0YWlsc1RpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgKGNsaWNrKT1cIl9vbkRldGFpbCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PT0gJ2RlbGV0ZSdcIlxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtQnV0dG9uRGVsZXRlVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1CdXR0b25EZWxldGVUaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0aXRsZT1cIkRlbGV0ZVwiXG4gICAgICAgICAgICBmZENvbXBhY3RcbiAgICAgICAgICAgIChjbGljayk9XCJfb25EZWxldGUoJGV2ZW50KVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cInR5cGUgPT09ICduYXZpZ2F0aW9uJ1wiIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLW5hdmlnYXRpb24taW5kaWNhdG9yXCI+XG4gICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cIm5hdmlnYXRpb24tcmlnaHQtYXJyb3dcIj48L2ZkLWljb24+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdFJpZ2h0J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJhZGlvXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbS1ib2R5XCIgW2NsYXNzLmZkLWdyaWQtbGlzdF9faXRlbS1ib2R5LS1uby1wYWRkaW5nXT1cIm5vUGFkZGluZ1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmQtZ3JpZC1saXN0LWl0ZW0taW1hZ2VdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0aXRsZSB8fCBkZXNjcmlwdGlvblwiIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgPGg0ICpuZ0lmPVwidGl0bGVcIiBmZC10aXRsZT57eyB0aXRsZSB9fTwvaDQ+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tc3VidGl0bGVcIj57eyBkZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImJvZHk/LnRlbXBsYXRlUmVmXCIgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJib2R5LnRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSB8fCBmb290ZXJCYXJDb21wb25lbnQ/LmNvbnRlbnRUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1Gb290ZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNyYWRpbz5cbiAgICA8aW5wdXRcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdCcgPyAtMSA6IDBcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBjbGFzcz1cImZkLXJhZGlvIGlzLWNvbXBhY3QgZmQtZ3JpZC1saXN0X19yYWRpby1pbnB1dFwiXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3QnID8gJ25vbmUnIDogJydcIlxuICAgICAgICBbaWRdPVwiaWQgKyAnLXJhZGlvJ1wiXG4gICAgICAgIFtuYW1lXT1cIidmZC1ncmlkLWxpc3QtaXRlbS10b29sYmFyLScgKyBzZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiJGV2ZW50ICYmIF9zZWxlY3Rpb25JdGVtKCRldmVudClcIlxuICAgIC8+XG4gICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZmQtcmFkaW9fX2xhYmVsIGZkLWdyaWQtbGlzdF9fcmFkaW8tbGFiZWxcIlxuICAgICAgICBbZm9yXT1cImlkICsgJy1yYWRpbydcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgKG1vdXNlb3Zlcik9XCJfc2V0QWN0aXZlKCRldmVudCwgZmFsc2UpXCJcbiAgICAgICAgKG1vdXNlb3V0KT1cIl9zZXRBY3RpdmUoJGV2ZW50LCB0cnVlKVwiXG4gICAgPjwvbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NoZWNrYm94PlxuICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImZkLWNoZWNrYm94IGlzLWNvbXBhY3QgZmQtZ3JpZC1saXN0X19jaGVja2JveC1pbnB1dFwiXG4gICAgICAgIFtpZF09XCJpZCArICctY2hlY2tib3gnXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cIl9jaGVja2JveENsaWNrKCRldmVudClcIlxuICAgIC8+XG4gICAgPGxhYmVsIGNsYXNzPVwiZmQtY2hlY2tib3hfX2xhYmVsIGZkLWdyaWQtbGlzdF9fY2hlY2tib3gtbGFiZWxcIiBbZm9yXT1cImlkICsgJy1jaGVja2JveCdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmQtY2hlY2tib3hfX2NoZWNrbWFya1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpdGVtRm9vdGVyPlxuICAgIDxkaXYgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tYm9keS1hY3Rpb25zXCIgKm5nSWY9XCJmb290ZXJCYXJDb21wb25lbnQgfHwgc3RhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvb3RlckJhckNvbXBvbmVudD8uY29udGVudFRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyQmFyQ29tcG9uZW50LmNvbnRlbnRUZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvb3RlckJhckNvbXBvbmVudD8uY29udGVudFRlbXBsYXRlUmVmICYmIHN0YXRlXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdGUgPT09ICdlcnJvcidcIlxuICAgICAgICAgICAgICAgIGZkLW9iamVjdC1zdGF0dXNcbiAgICAgICAgICAgICAgICBzdGF0dXM9XCJuZWdhdGl2ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNDb250YWluc0Vycm9ycycgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZUdyaWRMaXN0Lmxpc3RJdGVtU3RhdHVzQ29udGFpbnNFcnJvcnMnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXRlID09PSAnbG9ja2VkJ1wiXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwicHJpdmF0ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNMb2NrZWQnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVHcmlkTGlzdC5saXN0SXRlbVN0YXR1c0xvY2tlZCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jbGlja09uTG9ja2VkKCRldmVudClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdGUgPT09ICdkcmFmdCdcIlxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNEcmFmdCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlR3JpZExpc3QubGlzdEl0ZW1TdGF0dXNEcmFmdCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jbGlja09uRHJhZnQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==