@net7/boilerplate-muruca 5.5.3 → 5.5.5
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.
- package/esm2022/lib/components/metadata-with-readmore/metadata-with-readmore.mjs +3 -3
- package/esm2022/lib/config-types/muruca/sections.mjs +1 -1
- package/esm2022/lib/data-sources/hero.ds.mjs +13 -3
- package/esm2022/lib/data-sources/metadata.ds.mjs +5 -3
- package/esm2022/lib/event-handlers/hero.eh.mjs +17 -10
- package/esm2022/lib/interfaces/metadata.interface.mjs +1 -1
- package/esm2022/lib/layouts/home-layout/home-layout.ds.mjs +16 -1
- package/esm2022/lib/layouts/home-layout/home-layout.eh.mjs +4 -5
- package/esm2022/lib/layouts/home-layout/home-layout.mjs +8 -6
- package/esm2022/lib/layouts/resource-layout/resource-layout.mjs +17 -2
- package/fesm2022/net7-boilerplate-muruca.mjs +75 -25
- package/fesm2022/net7-boilerplate-muruca.mjs.map +1 -1
- package/lib/components/metadata-with-readmore/metadata-with-readmore.d.ts +4 -0
- package/lib/config-types/muruca/sections.d.ts +13 -0
- package/lib/data-sources/hero.ds.d.ts +1 -0
- package/lib/event-handlers/hero.eh.d.ts +1 -0
- package/lib/interfaces/metadata.interface.d.ts +1 -0
- package/lib/layouts/home-layout/home-layout.d.ts +4 -2
- package/lib/layouts/home-layout/home-layout.ds.d.ts +3 -0
- package/package.json +1 -1
|
@@ -97,7 +97,22 @@ export class MrResourceLayoutComponent extends AbstractLayout {
|
|
|
97
97
|
setTimeout(() => {
|
|
98
98
|
const element = document.getElementById(fragment);
|
|
99
99
|
if (element) {
|
|
100
|
-
|
|
100
|
+
// Open read-more if present
|
|
101
|
+
const readMoreElement = element
|
|
102
|
+
?.closest('.mr-read-more__content')
|
|
103
|
+
?.closest('.mr-read-more.is-collapsed');
|
|
104
|
+
if (readMoreElement) {
|
|
105
|
+
const readMoreButton = readMoreElement.querySelector(':scope > .mr-read-more__btn');
|
|
106
|
+
if (readMoreButton instanceof HTMLElement) {
|
|
107
|
+
readMoreButton.click();
|
|
108
|
+
}
|
|
109
|
+
// Scroll
|
|
110
|
+
setTimeout(() => element.scrollIntoView({ behavior: 'smooth' }), 300);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Scroll
|
|
114
|
+
element.scrollIntoView({ behavior: 'smooth' });
|
|
115
|
+
}
|
|
101
116
|
}
|
|
102
117
|
}, timeout);
|
|
103
118
|
}
|
|
@@ -153,4 +168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
153
168
|
type: Component,
|
|
154
169
|
args: [{ selector: 'mr-resource-layout', template: "<div class=\"mr-resource mr-layout\" \n *ngIf=\"lb.dataSource && lb.dataSource.pageConfig\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- RESOURCE LAYOUT CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <ng-container *ngIf=\"lb.dataSource.pageConfig.sections as sections\">\n <!-- Pass the list of blocks to render to the block template -->\n <div class=\"mr-resource__top\">\n <ng-container *ngTemplateOutlet=\"blocks; context: { $implicit: sections.top }\"></ng-container>\n </div>\n <div class=\"mr-resource__content mr-side-margin\">\n <ng-container *ngTemplateOutlet=\"blocks; context: { $implicit: sections.content }\"></ng-container>\n </div>\n </ng-container>\n </ng-container>\n\n </ng-container>\n</div>\n\n<ng-template #blocks let-list>\n <ng-container *ngFor=\"let section of list\">\n <section *ngIf=\"lb.widgets[section.id].ds.out$ | async\"\n class=\"{{ 'mr-resource__section mr-resource__' + section.type }}\">\n <ng-container [ngSwitch]=\"section.type\">\n\n <!-- TABS -->\n <ng-container *ngSwitchCase=\"'tabs'\">\n <ng-container *ngFor=\"let tab of lb.widgets[section.id].ds.out$ | async\">\n <n7-anchor-wrapper [data]=\"tab.anchor\" [classes]=\"tab.classes\" *ngIf=\"!tab.hideTab\">\n <span class=\"mr-resource__tabs-item\">{{ tab.label }}</span>\n </n7-anchor-wrapper>\n </ng-container>\n </ng-container>\n\n <!-- INNER TITLE -->\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"mr-resource__title-content mr-side-margin\">\n <n7-inner-title \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-inner-title>\n </div>\n </ng-container>\n\n <!-- CUSTOM BUTTON -->\n <ng-container *ngSwitchCase=\"'button'\">\n <div class=\"mr-resource__button\">\n <n7-button \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-button>\n </div>\n </ng-container>\n \n <!-- IMAGE VIEWER IIIF -->\n <ng-container *ngSwitchCase=\"'viewer-iiif'\">\n <n7-mirador\n (contextmenu)=\"lb.dataSource.hasContextMenu()\"\n [data]=\"lb.widgets[section.id].ds.out$ | async\">\n </n7-mirador>\n </ng-container>\n \n <!-- IMAGE VIEWER -->\n <ng-container *ngSwitchCase=\"'viewer'\">\n\n <n7-image-viewer \n [data]=\"lb.widgets[section.id].ds.out$ | async\" \n [emit]=\"lb.widgets[section.id].emit\">\n </n7-image-viewer>\n <!-- IMAGE VIEWER TOOLS -->\n <n7-image-viewer-tools *ngIf=\"section.tools\" \n [data]=\"lb.widgets[section.id + '-tools'].ds.out$ | async\" \n [emit]=\"lb.widgets[section.id + '-tools'].emit\">\n </n7-image-viewer-tools>\n <!-- IMAGE VIEWER OVERLAY DETAILS -->\n <div *ngIf=\"lb.widgets[section.id + '-overlay-details'].ds.out$ | async as viewerDetailsData\" \n class=\"mr-resource__viewer-overlay-details\">\n <div class=\"mr-resource__viewer-overlay-details__close\">\n <a class=\"mr-resource__viewer-overlay-details__close-link\" \n (click)=\"lb.eventHandler.emitOuter('overlaycloseclick')\">\n <span class=\"n7-icon-close\"></span>\n </a>\n </div>\n <n7-item-preview \n [data]=\"viewerDetailsData\" \n [emit]=\"lb.widgets[section.id + '-overlay-details'].emit\">\n </n7-item-preview>\n </div>\n\n </ng-container>\n \n <!-- METADATA VIEWER -->\n <ng-container *ngSwitchCase=\"'metadata'\">\n \n <div class=\"mr-content-block mr-content-block-metadata\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <mr-read-more [data]=\"section.readmore\">\n <ng-container *ngIf=\" section?.options?.readmore || section?.options?.groupReadmore;\n else wihoutReadmore\">\n <mr-metadata-readmore\n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </mr-metadata-readmore>\n </ng-container>\n <ng-template #wihoutReadmore>\n <n7-metadata-viewer\n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-metadata-viewer>\n </ng-template>\n </mr-read-more>\n </div>\n </div>\n \n </ng-container>\n \n <!-- METADATA DYNAMIC -->\n <ng-container *ngSwitchCase=\"'metadata-dynamic'\">\n <mr-metadata-dynamic \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </mr-metadata-dynamic> \n </ng-container>\n \n <!-- COLLECTION -->\n <ng-container *ngSwitchCase=\"'collection'\">\n <ng-container *ngIf=\"lb.widgets[section.id].ds.out$ | async as collection$\">\n <div *ngIf=\"collection$.items?.length > 0\" class=\"mr-content-block mr-content-block-collection\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content {{ section.grid ? 'n7-grid-' + section.grid : '' }}\">\n <n7-item-preview *ngFor=\"let item of collection$?.items\"\n [data]=\"item\" [emit]=\"lb.widgets[section.id].emit\">\n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n </ng-container>\n \n <!-- ITEM PREVIEW -->\n <ng-container *ngSwitchCase=\"'preview'\">\n <div class=\"mr-content-block mr-content-block-item-preview\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <n7-item-preview [data]=\"lb.widgets[section.id].ds.out$ | async\" [emit]=\"lb.widgets[section.id].emit\"> \n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n \n <!-- TEXT VIEWER -->\n <ng-container *ngSwitchCase=\"'text-viewer'\">\n <div class=\"mr-content-block mr-content-block-text-viewer\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <n7-text-viewer [data]=\"lb.widgets[section.id].ds.out$ | async\" [emit]=\"lb.widgets[section.id].emit\">\n </n7-text-viewer>\n </div>\n </div>\n </ng-container>\n\n <!-- PARALLEL TEXT VIEWER -->\n <ng-container *ngSwitchCase=\"'parallel-text-viewer'\">\n <div class=\"mr-content-block mr-content-block-text-viewer mr-content-block-parallel-text-viewer\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <n7-parallel-text-viewer [data]=\"lb.widgets[section.id].ds.out$ | async\" [emit]=\"lb.widgets[section.id].emit\">\n </n7-parallel-text-viewer>\n </div>\n </div>\n </ng-container>\n\n <!-- MAP -->\n <ng-container *ngSwitchCase=\"'map'\">\n <div class=\"mr-content-block mr-content-block-map\">\n <div class=\"mr-content-block__content\">\n <n7-map [data]=\"lb.widgets[section.id].ds.out$ | async\" [emit]=\"lb.widgets[section.id].emit\"></n7-map>\n </div>\n </div>\n </ng-container>\n\n <!-- NETWORK -->\n <ng-container *ngSwitchCase=\"'network-resource'\">\n <div class=\"mr-content-block mr-content-block-network\">\n <div class=\"mr-content-block__content\">\n <div id=\"demo-network\" class=\"network-visualization\"><p>Network</p></div>\n </div>\n </div>\n </ng-container>\n \n <!-- INFO BOX -->\n <ng-container *ngSwitchCase=\"'info-box'\">\n <div class=\"mr-content-block mr-content-block-info-box\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <div class=\"info-box__mock\">info-box</div> \n </div>\n </div>\n </ng-container>\n \n <!-- BREADCRUMBS -->\n <ng-container *ngSwitchCase=\"'breadcrumbs'\">\n <n7-breadcrumbs [data]=\"lb.widgets[section.id].ds.out$ | async\">\n </n7-breadcrumbs>\n </ng-container>\n\n </ng-container>\n </section>\n </ng-container>\n</ng-template>\n" }]
|
|
155
170
|
}], ctorParameters: () => [{ type: i1.LayoutsConfigurationService }, { type: i2.ActivatedRoute }, { type: i1.ConfigurationService }, { type: i1.CommunicationService }, { type: i1.MainStateService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.MrLayoutStateService }, { type: i4.MrResourceModalService }, { type: i5.MrLocaleService }] });
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtbXVydWNhL3NyYy9saWIvbGF5b3V0cy9yZXNvdXJjZS1sYXlvdXQvcmVzb3VyY2UtbGF5b3V0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtbXVydWNhL3NyYy9saWIvbGF5b3V0cy9yZXNvdXJjZS1sYXlvdXQvcmVzb3VyY2UtbGF5b3V0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsY0FBYyxFQUtmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFFLHNCQUFzQixJQUFJLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsY0FBYyxFQUNkLGVBQWUsRUFDZixZQUFZLEVBQ1osY0FBYyxFQUNkLHNCQUFzQixFQUN0Qixn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UUFBUTt3QkFDakIsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQzt3QkFDM0MsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUM7cUJBQ2hELENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0F6R1UseUJBQXlCO21HQUF6Qix5QkFBeUIsaUZDaEZ0Qyw2bllBa1BBOzs0RkRsS2EseUJBQXlCO2tCQUpyQyxTQUFTOytCQUNFLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFic3RyYWN0TGF5b3V0LFxuICBDb21tdW5pY2F0aW9uU2VydmljZSxcbiAgTGF5b3V0c0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTWFpblN0YXRlU2VydmljZVxufSBmcm9tICdAbmV0Ny9ib2lsZXJwbGF0ZS1jb21tb24nO1xuaW1wb3J0IHsgTXJMYXlvdXRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBNclJlc291cmNlTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzb3VyY2UtbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBNclJlc291cmNlTGF5b3V0Q29uZmlnIGFzIGNvbmZpZyB9IGZyb20gJy4vcmVzb3VyY2UtbGF5b3V0LmNvbmZpZyc7XG5pbXBvcnQgeyBNckltYWdlVmlld2VyRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9pbWFnZS12aWV3ZXIuZWgnO1xuaW1wb3J0IHsgTXJUZXh0Vmlld2VyRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy90ZXh0LXZpZXdlci5laCc7XG5pbXBvcnQgeyBNclBhcmFsbGVsVGV4dFZpZXdlckVIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMvcGFyYWxsZWwtdGV4dC12aWV3ZXIuZWgnO1xuaW1wb3J0IHsgTXJJbWFnZVZpZXdlclRvb2xzRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9pbWFnZS12aWV3ZXItdG9vbHMuZWgnO1xuaW1wb3J0IHsgTXJDb2xsZWN0aW9uRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9jb2xsZWN0aW9uLmVoJztcbmltcG9ydCB7IE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0VIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMvaW1hZ2Utdmlld2VyLW92ZXJsYXktZGV0YWlscy5laCc7XG5pbXBvcnQgeyBNckJ1dHRvbkVILCBNck1ldGFkYXRhRHluYW1pY0VILCBNck5ldHdvcmtSZXNvdXJjZUVIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMnO1xuaW1wb3J0IHtcbiAgTXJCcmVhZGNydW1ic0RTLFxuICBNckJ1dHRvbkRTLFxuICBNckNvbGxlY3Rpb25EUyxcbiAgTXJJbWFnZVZpZXdlckRTLFxuICBNckltYWdlVmlld2VyVG9vbHNEUyxcbiAgTXJJbmZvQm94RFMsXG4gIE1ySW5uZXJUaXRsZURTLFxuICBNckl0ZW1QcmV2aWV3RFMsXG4gIE1yTWV0YWRhdGFEUyxcbiAgTXJUZXh0Vmlld2VyRFMsXG4gIE1yUGFyYWxsZWxUZXh0Vmlld2VyRFMsXG4gIE1yUmVzb3VyY2VUYWJzRFMsXG4gIE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0RTLFxuICBNck1ldGFkYXRhRHluYW1pY0RTLFxuICBNckltYWdlVmlld2VySWlpZkRTLFxuICBNck5ldHdvcmtSZXNvdXJjZURTLFxufSBmcm9tICcuLi8uLi9kYXRhLXNvdXJjZXMnO1xuaW1wb3J0IHsgTXJNYXBEUyB9IGZyb20gJy4uLy4uL2RhdGEtc291cmNlcy9tYXAuZHMnO1xuaW1wb3J0IHsgTXJMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuXG5jb25zdCBEQVRBU09VUkNFX01BUCA9IHtcbiAgYnJlYWRjcnVtYnM6IE1yQnJlYWRjcnVtYnNEUyxcbiAgYnV0dG9uOiBNckJ1dHRvbkRTLFxuICBjb2xsZWN0aW9uOiBNckNvbGxlY3Rpb25EUyxcbiAgaW5mbzogTXJJbmZvQm94RFMsXG4gIG1hcDogTXJNYXBEUyxcbiAgbWV0YWRhdGE6IE1yTWV0YWRhdGFEUyxcbiAgcHJldmlldzogTXJJdGVtUHJldmlld0RTLFxuICB0YWJzOiBNclJlc291cmNlVGFic0RTLFxuICB0ZXh0OiBNclRleHRWaWV3ZXJEUyxcbiAgdGl0bGU6IE1ySW5uZXJUaXRsZURTLFxuICB2aWV3ZXI6IE1ySW1hZ2VWaWV3ZXJEUyxcbiAgJ3ZpZXdlci10b29scyc6IE1ySW1hZ2VWaWV3ZXJUb29sc0RTLFxuICAndmlld2VyLW92ZXJsYXktZGV0YWlscyc6IE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0RTLFxuICAndGV4dC12aWV3ZXInOiBNclRleHRWaWV3ZXJEUyxcbiAgJ3BhcmFsbGVsLXRleHQtdmlld2VyJzogTXJQYXJhbGxlbFRleHRWaWV3ZXJEUyxcbiAgJ21ldGFkYXRhLWR5bmFtaWMnOiBNck1ldGFkYXRhRHluYW1pY0RTLFxuICAndmlld2VyLWlpaWYnOiBNckltYWdlVmlld2VySWlpZkRTLFxuICAnbmV0d29yay1yZXNvdXJjZSc6IE1yTmV0d29ya1Jlc291cmNlRFNcbn07XG5cbmNvbnN0IEVWRU5USEFORExFUl9NQVAgPSB7XG4gIHZpZXdlcjogTXJJbWFnZVZpZXdlckVILFxuICAndmlld2VyLXRvb2xzJzogTXJJbWFnZVZpZXdlclRvb2xzRUgsXG4gICd2aWV3ZXItb3ZlcmxheS1kZXRhaWxzJzogTXJJbWFnZVZpZXdlck92ZXJsYXlEZXRhaWxzRUgsXG4gICd0ZXh0LXZpZXdlcic6IE1yVGV4dFZpZXdlckVILFxuICAncGFyYWxsZWwtdGV4dC12aWV3ZXInOiBNclBhcmFsbGVsVGV4dFZpZXdlckVILFxuICBjb2xsZWN0aW9uOiBNckNvbGxlY3Rpb25FSCxcbiAgJ21ldGFkYXRhLWR5bmFtaWMnOiBNck1ldGFkYXRhRHluYW1pY0VILFxuICBidXR0b246IE1yQnV0dG9uRUgsXG4gICduZXR3b3JrLXJlc291cmNlJzogTXJOZXR3b3JrUmVzb3VyY2VFSCxcbiAgLy8gbWFwOiBNck1hcEVIXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtci1yZXNvdXJjZS1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzb3VyY2UtbGF5b3V0Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBNclJlc291cmNlTGF5b3V0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSxcbkFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJvdXRlckRhdGE6IERhdGE7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbGF5b3V0c0NvbmZpZ3VyYXRpb246IExheW91dHNDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbXVuaWNhdGlvbjogQ29tbXVuaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYWluU3RhdGU6IE1haW5TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgbGF5b3V0U3RhdGU6IE1yTGF5b3V0U3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IE1yUmVzb3VyY2VNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGxvY2FsZVNlcnZpY2U6IE1yTG9jYWxlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIobGF5b3V0c0NvbmZpZ3VyYXRpb24uZ2V0KCdNclJlc291cmNlTGF5b3V0Q29uZmlnJykgfHwgY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0UGF5bG9hZCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyRGF0YTogdGhpcy5yb3V0ZXJEYXRhLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgY29tbXVuaWNhdGlvbjogdGhpcy5jb21tdW5pY2F0aW9uLFxuICAgICAgbWFpblN0YXRlOiB0aGlzLm1haW5TdGF0ZSxcbiAgICAgIGxheW91dFN0YXRlOiB0aGlzLmxheW91dFN0YXRlLFxuICAgICAgbW9kYWxTZXJ2aWNlOiB0aGlzLm1vZGFsU2VydmljZSxcbiAgICAgIGxvY2FsZVNlcnZpY2U6IHRoaXMubG9jYWxlU2VydmljZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuY29uZmlnLm9wdGlvbnMgfHwge30sXG4gICAgICByb3V0ZTogdGhpcy5yb3V0ZSxcbiAgICAgIHJvdXRlcjogdGhpcy5yb3V0ZXJcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSgocm91dGVyRGF0YSkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRTdGF0ZS5hZGQoJ2NvbnRlbnQnKTtcbiAgICAgIHRoaXMucm91dGVyRGF0YSA9IHJvdXRlckRhdGE7XG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKCk7XG4gICAgICB0aGlzLm9uSW5pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHsgY29uZmlnSWQgfSA9IHRoaXMucm91dGVyRGF0YTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5jb25maWd1cmF0aW9uLmdldChjb25maWdJZCkucGFnZUxvYWQgfHwgMTAwMDtcblxuICAgIC8vIElmIGEgZnJhZ21lbnQgKCNpZCkgaXMgcHJlc2VudCBpbiB0aGUgdXJsLCB0aGUgcGFnZSBzY3JvbGwgdG8gdGhhdCBmcmFnbWVudFxuICAgIHRoaXMucm91dGUuZnJhZ21lbnQuc3Vic2NyaWJlKChmcmFnbWVudCkgPT4ge1xuICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmcmFnbWVudCk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gIH1cblxuICBsb2FkV2lkZ2V0cygpIHtcbiAgICBjb25zdCB7IGNvbmZpZ0lkIH0gPSB0aGlzLnJvdXRlckRhdGE7XG4gICAgY29uc3QgeyB0b3AsIGNvbnRlbnQgfSA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoY29uZmlnSWQpLnNlY3Rpb25zO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gdG9wLmNvbmNhdChjb250ZW50KTtcbiAgICB0aGlzLndpZGdldHMgPSBbXTtcbiAgICBpZiAoc2VjdGlvbnMpIHtcbiAgICAgIHNlY3Rpb25zLmZvckVhY2goKHtcbiAgICAgICAgaWQsIHR5cGUsIG9wdGlvbnMsIHRvb2xzXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHdpZGdldE9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB3aWRnZXRPcHRpb25zLmxvY2FsZVNlcnZpY2UgPSB0aGlzLmxvY2FsZVNlcnZpY2U7XG4gICAgICAgIC8vIEFkZCByb3V0ZSB0byBtZXRhZGF0YS1keW5hbWljIG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtZXRhZGF0YS1keW5hbWljJykge1xuICAgICAgICAgIG9wdGlvbnMucm91dGUgPSB0aGlzLnJvdXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2lkZ2V0cy5wdXNoKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgIGRhdGFTb3VyY2U6IERBVEFTT1VSQ0VfTUFQW3R5cGVdLFxuICAgICAgICAgIGV2ZW50SGFuZGxlcjogRVZFTlRIQU5ETEVSX01BUFt0eXBlXVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaW1hZ2Ugdmlld2VyIG92ZXJsYXkgZGV0YWlsc1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZXdlcicpIHtcbiAgICAgICAgICB0aGlzLndpZGdldHMucHVzaCh7XG4gICAgICAgICAgICBpZDogYCR7aWR9LW92ZXJsYXktZGV0YWlsc2AsXG4gICAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTogREFUQVNPVVJDRV9NQVBbYCR7dHlwZX0tb3ZlcmxheS1kZXRhaWxzYF0sXG4gICAgICAgICAgICBldmVudEhhbmRsZXI6IEVWRU5USEFORExFUl9NQVBbYCR7dHlwZX0tb3ZlcmxheS1kZXRhaWxzYF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbWFnZSB2aWV3ZXIgdG9vbHNcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWV3ZXInICYmIHRvb2xzKSB7XG4gICAgICAgICAgdGhpcy53aWRnZXRzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGAke2lkfS10b29sc2AsXG4gICAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTogREFUQVNPVVJDRV9NQVBbYCR7dHlwZX0tdG9vbHNgXSxcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlcjogRVZFTlRIQU5ETEVSX01BUFtgJHt0eXBlfS10b29sc2BdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlIG1yLWxheW91dFwiIFxuICAgICAqbmdJZj1cImxiLmRhdGFTb3VyY2UgJiYgbGIuZGF0YVNvdXJjZS5wYWdlQ29uZmlnXCJcbiAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaXMtbG9hZGluZyc6ICggbGF5b3V0U3RhdGUuZ2V0JCgnY29udGVudCcpIHwgYXN5bmMgKSA9PSAnTE9BRElORycsXG4gICAgICAgICdpcy1lcnJvcic6ICggbGF5b3V0U3RhdGUuZ2V0JCgnY29udGVudCcpIHwgYXN5bmMgKSA9PSAnRVJST1InXG4gICAgICB9XCI+XG4gICAgPCEtLSBSRVNPVVJDRSBMQVlPVVQgQ09OVEVOVCAtLT5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJsYXlvdXRTdGF0ZS5nZXQkKCdjb250ZW50JykgfCBhc3luY1wiPlxuICAgICAgICA8IS0tIGxvYWRpbmcgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidMT0FESU5HJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWxheW91dF9fbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgPG43LWxvYWRlcj48L243LWxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIGVycm9yIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInRVJST1InXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItbGF5b3V0X19lcnJvclwiPlxuICAgICAgICAgICAgICAgIDxoMj57eyBsYi5kYXRhU291cmNlLmVycm9yVGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICAgIDxwPnt7IGxiLmRhdGFTb3VyY2UuZXJyb3JEZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIHN1Y2Nlc3MgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVUNDRVNTJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxiLmRhdGFTb3VyY2UucGFnZUNvbmZpZy5zZWN0aW9ucyBhcyBzZWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gUGFzcyB0aGUgbGlzdCBvZiBibG9ja3MgdG8gcmVuZGVyIHRvIHRoZSBibG9jayB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX3RvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxvY2tzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc2VjdGlvbnMudG9wIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX2NvbnRlbnQgbXItc2lkZS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsb2NrczsgY29udGV4dDogeyAkaW1wbGljaXQ6IHNlY3Rpb25zLmNvbnRlbnQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNibG9ja3MgbGV0LWxpc3Q+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBsaXN0XCI+XG4gICAgICAgIDxzZWN0aW9uICpuZ0lmPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cInt7ICdtci1yZXNvdXJjZV9fc2VjdGlvbiBtci1yZXNvdXJjZV9fJyArIHNlY3Rpb24udHlwZSB9fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic2VjdGlvbi50eXBlXCI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFRBQlMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYnMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiBsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG43LWFuY2hvci13cmFwcGVyIFtkYXRhXT1cInRhYi5hbmNob3JcIiBbY2xhc3Nlc109XCJ0YWIuY2xhc3Nlc1wiICpuZ0lmPVwiIXRhYi5oaWRlVGFiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci1yZXNvdXJjZV9fdGFicy1pdGVtXCI+e3sgdGFiLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1hbmNob3Itd3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIElOTkVSIFRJVExFIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlX190aXRsZS1jb250ZW50IG1yLXNpZGUtbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bjctaW5uZXItdGl0bGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1pbm5lci10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIENVU1RPTSBCVVRUT04gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1idXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gSU1BR0UgVklFV0VSIElJSUYgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZXdlci1paWlmJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bjctbWlyYWRvclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImxiLmRhdGFTb3VyY2UuaGFzQ29udGV4dE1lbnUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICA8L243LW1pcmFkb3I+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgICAgICAgICAgPCEtLSBJTUFHRSBWSUVXRVIgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZXdlcidcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG43LWltYWdlLXZpZXdlciBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1pbWFnZS12aWV3ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIElNQUdFIFZJRVdFUiBUT09MUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1pbWFnZS12aWV3ZXItdG9vbHMgKm5nSWY9XCJzZWN0aW9uLnRvb2xzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkICsgJy10b29scyddLmRzLm91dCQgfCBhc3luY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZCArICctdG9vbHMnXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L243LWltYWdlLXZpZXdlci10b29scz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSU1BR0UgVklFV0VSIE9WRVJMQVkgREVUQUlMUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYi53aWRnZXRzW3NlY3Rpb24uaWQgKyAnLW92ZXJsYXktZGV0YWlscyddLmRzLm91dCQgfCBhc3luYyBhcyB2aWV3ZXJEZXRhaWxzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNfX2Nsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNfX2Nsb3NlLWxpbmtcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsYi5ldmVudEhhbmRsZXIuZW1pdE91dGVyKCdvdmVybGF5Y2xvc2VjbGljaycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm43LWljb24tY2xvc2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ2aWV3ZXJEZXRhaWxzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW1pdF09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWQgKyAnLW92ZXJsYXktZGV0YWlscyddLmVtaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LWl0ZW0tcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgICAgICAgICAgPCEtLSBNRVRBREFUQSBWSUVXRVIgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21ldGFkYXRhJ1wiPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1tZXRhZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXItcmVhZC1tb3JlIFtkYXRhXT1cInNlY3Rpb24ucmVhZG1vcmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiBzZWN0aW9uPy5vcHRpb25zPy5yZWFkbW9yZSB8fCBzZWN0aW9uPy5vcHRpb25zPy5ncm91cFJlYWRtb3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdpaG91dFJlYWRtb3JlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXItbWV0YWRhdGEtcmVhZG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21yLW1ldGFkYXRhLXJlYWRtb3JlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aWhvdXRSZWFkbW9yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1tZXRhZGF0YS12aWV3ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LW1ldGFkYXRhLXZpZXdlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21yLXJlYWQtbW9yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8IS0tIE1FVEFEQVRBIERZTkFNSUMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21ldGFkYXRhLWR5bmFtaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtci1tZXRhZGF0YS1keW5hbWljIFxuICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICA8L21yLW1ldGFkYXRhLWR5bmFtaWM+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIENPTExFQ1RJT04gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbGxlY3Rpb24nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luYyBhcyBjb2xsZWN0aW9uJFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbGxlY3Rpb24kLml0ZW1zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrIG1yLWNvbnRlbnQtYmxvY2stY29sbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50IHt7IHNlY3Rpb24uZ3JpZCA/ICduNy1ncmlkLScgKyBzZWN0aW9uLmdyaWQgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbGxlY3Rpb24kPy5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJpdGVtXCIgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbjctaXRlbS1wcmV2aWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gSVRFTSBQUkVWSUVXIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwcmV2aWV3J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLWl0ZW0tcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3IFtkYXRhXT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZHMub3V0JCB8IGFzeW5jXCIgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+ICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LWl0ZW0tcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIFRFWFQgVklFV0VSIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0LXZpZXdlcidcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrIG1yLWNvbnRlbnQtYmxvY2stdGV4dC12aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy10ZXh0LXZpZXdlciBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LXRleHQtdmlld2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBQQVJBTExFTCBURVhUIFZJRVdFUiAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFyYWxsZWwtdGV4dC12aWV3ZXInXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLXRleHQtdmlld2VyIG1yLWNvbnRlbnQtYmxvY2stcGFyYWxsZWwtdGV4dC12aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1wYXJhbGxlbC10ZXh0LXZpZXdlciBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LXBhcmFsbGVsLXRleHQtdmlld2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBNQVAgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1tYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG43LW1hcCBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPjwvbjctbWFwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBORVRXT1JLIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIiduZXR3b3JrLXJlc291cmNlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLW5ldHdvcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImRlbW8tbmV0d29ya1wiIGNsYXNzPVwibmV0d29yay12aXN1YWxpemF0aW9uXCI+PHA+TmV0d29yazwvcD48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIElORk8gQk9YIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbmZvLWJveCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1pbmZvLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1ib3hfX21vY2tcIj5pbmZvLWJveDwvZGl2PiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIEJSRUFEQ1JVTUJTIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidicmVhZGNydW1icydcIj5cbiAgICAgICAgICAgICAgICAgICAgPG43LWJyZWFkY3J1bWJzIFtkYXRhXT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZHMub3V0JCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbjctYnJlYWRjcnVtYnM+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtbXVydWNhL3NyYy9saWIvbGF5b3V0cy9yZXNvdXJjZS1sYXlvdXQvcmVzb3VyY2UtbGF5b3V0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtbXVydWNhL3NyYy9saWIvbGF5b3V0cy9yZXNvdXJjZS1sYXlvdXQvcmVzb3VyY2UtbGF5b3V0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsY0FBYyxFQUtmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFFLHNCQUFzQixJQUFJLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsY0FBYyxFQUNkLGVBQWUsRUFDZixZQUFZLEVBQ1osY0FBYyxFQUNkLHNCQUFzQixFQUN0Qixn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QUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQztpQkFDckMsQ0FBQyxDQUFDO2dCQUNILCtCQUErQjtnQkFDL0IsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixFQUFFLEVBQUUsR0FBRyxFQUFFLGtCQUFrQjt3QkFDM0IsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDO3dCQUNyRCxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDO3FCQUMxRCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxxQkFBcUI7Z0JBQ3JCLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUTt3QkFDakIsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQzt3QkFDM0MsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUM7cUJBQ2hELENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0F6SFUseUJBQXlCO21HQUF6Qix5QkFBeUIsaUZDaEZ0Qyw2bllBa1BBOzs0RkRsS2EseUJBQXlCO2tCQUpyQyxTQUFTOytCQUNFLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFic3RyYWN0TGF5b3V0LFxuICBDb21tdW5pY2F0aW9uU2VydmljZSxcbiAgTGF5b3V0c0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTWFpblN0YXRlU2VydmljZVxufSBmcm9tICdAbmV0Ny9ib2lsZXJwbGF0ZS1jb21tb24nO1xuaW1wb3J0IHsgTXJMYXlvdXRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBNclJlc291cmNlTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzb3VyY2UtbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBNclJlc291cmNlTGF5b3V0Q29uZmlnIGFzIGNvbmZpZyB9IGZyb20gJy4vcmVzb3VyY2UtbGF5b3V0LmNvbmZpZyc7XG5pbXBvcnQgeyBNckltYWdlVmlld2VyRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9pbWFnZS12aWV3ZXIuZWgnO1xuaW1wb3J0IHsgTXJUZXh0Vmlld2VyRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy90ZXh0LXZpZXdlci5laCc7XG5pbXBvcnQgeyBNclBhcmFsbGVsVGV4dFZpZXdlckVIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMvcGFyYWxsZWwtdGV4dC12aWV3ZXIuZWgnO1xuaW1wb3J0IHsgTXJJbWFnZVZpZXdlclRvb2xzRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9pbWFnZS12aWV3ZXItdG9vbHMuZWgnO1xuaW1wb3J0IHsgTXJDb2xsZWN0aW9uRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9jb2xsZWN0aW9uLmVoJztcbmltcG9ydCB7IE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0VIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMvaW1hZ2Utdmlld2VyLW92ZXJsYXktZGV0YWlscy5laCc7XG5pbXBvcnQgeyBNckJ1dHRvbkVILCBNck1ldGFkYXRhRHluYW1pY0VILCBNck5ldHdvcmtSZXNvdXJjZUVIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMnO1xuaW1wb3J0IHtcbiAgTXJCcmVhZGNydW1ic0RTLFxuICBNckJ1dHRvbkRTLFxuICBNckNvbGxlY3Rpb25EUyxcbiAgTXJJbWFnZVZpZXdlckRTLFxuICBNckltYWdlVmlld2VyVG9vbHNEUyxcbiAgTXJJbmZvQm94RFMsXG4gIE1ySW5uZXJUaXRsZURTLFxuICBNckl0ZW1QcmV2aWV3RFMsXG4gIE1yTWV0YWRhdGFEUyxcbiAgTXJUZXh0Vmlld2VyRFMsXG4gIE1yUGFyYWxsZWxUZXh0Vmlld2VyRFMsXG4gIE1yUmVzb3VyY2VUYWJzRFMsXG4gIE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0RTLFxuICBNck1ldGFkYXRhRHluYW1pY0RTLFxuICBNckltYWdlVmlld2VySWlpZkRTLFxuICBNck5ldHdvcmtSZXNvdXJjZURTLFxufSBmcm9tICcuLi8uLi9kYXRhLXNvdXJjZXMnO1xuaW1wb3J0IHsgTXJNYXBEUyB9IGZyb20gJy4uLy4uL2RhdGEtc291cmNlcy9tYXAuZHMnO1xuaW1wb3J0IHsgTXJMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuXG5jb25zdCBEQVRBU09VUkNFX01BUCA9IHtcbiAgYnJlYWRjcnVtYnM6IE1yQnJlYWRjcnVtYnNEUyxcbiAgYnV0dG9uOiBNckJ1dHRvbkRTLFxuICBjb2xsZWN0aW9uOiBNckNvbGxlY3Rpb25EUyxcbiAgaW5mbzogTXJJbmZvQm94RFMsXG4gIG1hcDogTXJNYXBEUyxcbiAgbWV0YWRhdGE6IE1yTWV0YWRhdGFEUyxcbiAgcHJldmlldzogTXJJdGVtUHJldmlld0RTLFxuICB0YWJzOiBNclJlc291cmNlVGFic0RTLFxuICB0ZXh0OiBNclRleHRWaWV3ZXJEUyxcbiAgdGl0bGU6IE1ySW5uZXJUaXRsZURTLFxuICB2aWV3ZXI6IE1ySW1hZ2VWaWV3ZXJEUyxcbiAgJ3ZpZXdlci10b29scyc6IE1ySW1hZ2VWaWV3ZXJUb29sc0RTLFxuICAndmlld2VyLW92ZXJsYXktZGV0YWlscyc6IE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0RTLFxuICAndGV4dC12aWV3ZXInOiBNclRleHRWaWV3ZXJEUyxcbiAgJ3BhcmFsbGVsLXRleHQtdmlld2VyJzogTXJQYXJhbGxlbFRleHRWaWV3ZXJEUyxcbiAgJ21ldGFkYXRhLWR5bmFtaWMnOiBNck1ldGFkYXRhRHluYW1pY0RTLFxuICAndmlld2VyLWlpaWYnOiBNckltYWdlVmlld2VySWlpZkRTLFxuICAnbmV0d29yay1yZXNvdXJjZSc6IE1yTmV0d29ya1Jlc291cmNlRFNcbn07XG5cbmNvbnN0IEVWRU5USEFORExFUl9NQVAgPSB7XG4gIHZpZXdlcjogTXJJbWFnZVZpZXdlckVILFxuICAndmlld2VyLXRvb2xzJzogTXJJbWFnZVZpZXdlclRvb2xzRUgsXG4gICd2aWV3ZXItb3ZlcmxheS1kZXRhaWxzJzogTXJJbWFnZVZpZXdlck92ZXJsYXlEZXRhaWxzRUgsXG4gICd0ZXh0LXZpZXdlcic6IE1yVGV4dFZpZXdlckVILFxuICAncGFyYWxsZWwtdGV4dC12aWV3ZXInOiBNclBhcmFsbGVsVGV4dFZpZXdlckVILFxuICBjb2xsZWN0aW9uOiBNckNvbGxlY3Rpb25FSCxcbiAgJ21ldGFkYXRhLWR5bmFtaWMnOiBNck1ldGFkYXRhRHluYW1pY0VILFxuICBidXR0b246IE1yQnV0dG9uRUgsXG4gICduZXR3b3JrLXJlc291cmNlJzogTXJOZXR3b3JrUmVzb3VyY2VFSCxcbiAgLy8gbWFwOiBNck1hcEVIXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtci1yZXNvdXJjZS1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzb3VyY2UtbGF5b3V0Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBNclJlc291cmNlTGF5b3V0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSxcbkFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJvdXRlckRhdGE6IERhdGE7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbGF5b3V0c0NvbmZpZ3VyYXRpb246IExheW91dHNDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbXVuaWNhdGlvbjogQ29tbXVuaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYWluU3RhdGU6IE1haW5TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgbGF5b3V0U3RhdGU6IE1yTGF5b3V0U3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IE1yUmVzb3VyY2VNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGxvY2FsZVNlcnZpY2U6IE1yTG9jYWxlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIobGF5b3V0c0NvbmZpZ3VyYXRpb24uZ2V0KCdNclJlc291cmNlTGF5b3V0Q29uZmlnJykgfHwgY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0UGF5bG9hZCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyRGF0YTogdGhpcy5yb3V0ZXJEYXRhLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgY29tbXVuaWNhdGlvbjogdGhpcy5jb21tdW5pY2F0aW9uLFxuICAgICAgbWFpblN0YXRlOiB0aGlzLm1haW5TdGF0ZSxcbiAgICAgIGxheW91dFN0YXRlOiB0aGlzLmxheW91dFN0YXRlLFxuICAgICAgbW9kYWxTZXJ2aWNlOiB0aGlzLm1vZGFsU2VydmljZSxcbiAgICAgIGxvY2FsZVNlcnZpY2U6IHRoaXMubG9jYWxlU2VydmljZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuY29uZmlnLm9wdGlvbnMgfHwge30sXG4gICAgICByb3V0ZTogdGhpcy5yb3V0ZSxcbiAgICAgIHJvdXRlcjogdGhpcy5yb3V0ZXJcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSgocm91dGVyRGF0YSkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRTdGF0ZS5hZGQoJ2NvbnRlbnQnKTtcbiAgICAgIHRoaXMucm91dGVyRGF0YSA9IHJvdXRlckRhdGE7XG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKCk7XG4gICAgICB0aGlzLm9uSW5pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHsgY29uZmlnSWQgfSA9IHRoaXMucm91dGVyRGF0YTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5jb25maWd1cmF0aW9uLmdldChjb25maWdJZCkucGFnZUxvYWQgfHwgMTAwMDtcblxuICAgIC8vIElmIGEgZnJhZ21lbnQgKCNpZCkgaXMgcHJlc2VudCBpbiB0aGUgdXJsLCB0aGUgcGFnZSBzY3JvbGwgdG8gdGhhdCBmcmFnbWVudFxuICAgIHRoaXMucm91dGUuZnJhZ21lbnQuc3Vic2NyaWJlKChmcmFnbWVudCkgPT4ge1xuICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmcmFnbWVudCk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIE9wZW4gcmVhZC1tb3JlIGlmIHByZXNlbnRcbiAgICAgICAgICAgIGNvbnN0IHJlYWRNb3JlRWxlbWVudCA9IGVsZW1lbnRcbiAgICAgICAgICAgICAgPy5jbG9zZXN0KCcubXItcmVhZC1tb3JlX19jb250ZW50JylcbiAgICAgICAgICAgICAgPy5jbG9zZXN0KCcubXItcmVhZC1tb3JlLmlzLWNvbGxhcHNlZCcpO1xuICAgICAgICAgICAgaWYgKHJlYWRNb3JlRWxlbWVudCkge1xuICAgICAgICAgICAgICBjb25zdCByZWFkTW9yZUJ1dHRvbiA9IHJlYWRNb3JlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICc6c2NvcGUgPiAubXItcmVhZC1tb3JlX19idG4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChyZWFkTW9yZUJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmVhZE1vcmVCdXR0b24uY2xpY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBTY3JvbGxcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pLCAzMDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gU2Nyb2xsXG4gICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gIH1cblxuICBsb2FkV2lkZ2V0cygpIHtcbiAgICBjb25zdCB7IGNvbmZpZ0lkIH0gPSB0aGlzLnJvdXRlckRhdGE7XG4gICAgY29uc3QgeyB0b3AsIGNvbnRlbnQgfSA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoY29uZmlnSWQpLnNlY3Rpb25zO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gdG9wLmNvbmNhdChjb250ZW50KTtcbiAgICB0aGlzLndpZGdldHMgPSBbXTtcbiAgICBpZiAoc2VjdGlvbnMpIHtcbiAgICAgIHNlY3Rpb25zLmZvckVhY2goKHtcbiAgICAgICAgaWQsIHR5cGUsIG9wdGlvbnMsIHRvb2xzXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHdpZGdldE9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB3aWRnZXRPcHRpb25zLmxvY2FsZVNlcnZpY2UgPSB0aGlzLmxvY2FsZVNlcnZpY2U7XG4gICAgICAgIC8vIEFkZCByb3V0ZSB0byBtZXRhZGF0YS1keW5hbWljIG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtZXRhZGF0YS1keW5hbWljJykge1xuICAgICAgICAgIG9wdGlvbnMucm91dGUgPSB0aGlzLnJvdXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2lkZ2V0cy5wdXNoKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgIGRhdGFTb3VyY2U6IERBVEFTT1VSQ0VfTUFQW3R5cGVdLFxuICAgICAgICAgIGV2ZW50SGFuZGxlcjogRVZFTlRIQU5ETEVSX01BUFt0eXBlXVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaW1hZ2Ugdmlld2VyIG92ZXJsYXkgZGV0YWlsc1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZXdlcicpIHtcbiAgICAgICAgICB0aGlzLndpZGdldHMucHVzaCh7XG4gICAgICAgICAgICBpZDogYCR7aWR9LW92ZXJsYXktZGV0YWlsc2AsXG4gICAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTogREFUQVNPVVJDRV9NQVBbYCR7dHlwZX0tb3ZlcmxheS1kZXRhaWxzYF0sXG4gICAgICAgICAgICBldmVudEhhbmRsZXI6IEVWRU5USEFORExFUl9NQVBbYCR7dHlwZX0tb3ZlcmxheS1kZXRhaWxzYF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbWFnZSB2aWV3ZXIgdG9vbHNcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWV3ZXInICYmIHRvb2xzKSB7XG4gICAgICAgICAgdGhpcy53aWRnZXRzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGAke2lkfS10b29sc2AsXG4gICAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTogREFUQVNPVVJDRV9NQVBbYCR7dHlwZX0tdG9vbHNgXSxcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlcjogRVZFTlRIQU5ETEVSX01BUFtgJHt0eXBlfS10b29sc2BdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlIG1yLWxheW91dFwiIFxuICAgICAqbmdJZj1cImxiLmRhdGFTb3VyY2UgJiYgbGIuZGF0YVNvdXJjZS5wYWdlQ29uZmlnXCJcbiAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaXMtbG9hZGluZyc6ICggbGF5b3V0U3RhdGUuZ2V0JCgnY29udGVudCcpIHwgYXN5bmMgKSA9PSAnTE9BRElORycsXG4gICAgICAgICdpcy1lcnJvcic6ICggbGF5b3V0U3RhdGUuZ2V0JCgnY29udGVudCcpIHwgYXN5bmMgKSA9PSAnRVJST1InXG4gICAgICB9XCI+XG4gICAgPCEtLSBSRVNPVVJDRSBMQVlPVVQgQ09OVEVOVCAtLT5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJsYXlvdXRTdGF0ZS5nZXQkKCdjb250ZW50JykgfCBhc3luY1wiPlxuICAgICAgICA8IS0tIGxvYWRpbmcgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidMT0FESU5HJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWxheW91dF9fbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgPG43LWxvYWRlcj48L243LWxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIGVycm9yIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInRVJST1InXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItbGF5b3V0X19lcnJvclwiPlxuICAgICAgICAgICAgICAgIDxoMj57eyBsYi5kYXRhU291cmNlLmVycm9yVGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICAgIDxwPnt7IGxiLmRhdGFTb3VyY2UuZXJyb3JEZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIHN1Y2Nlc3MgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVUNDRVNTJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxiLmRhdGFTb3VyY2UucGFnZUNvbmZpZy5zZWN0aW9ucyBhcyBzZWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gUGFzcyB0aGUgbGlzdCBvZiBibG9ja3MgdG8gcmVuZGVyIHRvIHRoZSBibG9jayB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX3RvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxvY2tzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc2VjdGlvbnMudG9wIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX2NvbnRlbnQgbXItc2lkZS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsb2NrczsgY29udGV4dDogeyAkaW1wbGljaXQ6IHNlY3Rpb25zLmNvbnRlbnQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNibG9ja3MgbGV0LWxpc3Q+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBsaXN0XCI+XG4gICAgICAgIDxzZWN0aW9uICpuZ0lmPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cInt7ICdtci1yZXNvdXJjZV9fc2VjdGlvbiBtci1yZXNvdXJjZV9fJyArIHNlY3Rpb24udHlwZSB9fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic2VjdGlvbi50eXBlXCI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFRBQlMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYnMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiBsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG43LWFuY2hvci13cmFwcGVyIFtkYXRhXT1cInRhYi5hbmNob3JcIiBbY2xhc3Nlc109XCJ0YWIuY2xhc3Nlc1wiICpuZ0lmPVwiIXRhYi5oaWRlVGFiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci1yZXNvdXJjZV9fdGFicy1pdGVtXCI+e3sgdGFiLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1hbmNob3Itd3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIElOTkVSIFRJVExFIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlX190aXRsZS1jb250ZW50IG1yLXNpZGUtbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bjctaW5uZXItdGl0bGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1pbm5lci10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIENVU1RPTSBCVVRUT04gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1idXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gSU1BR0UgVklFV0VSIElJSUYgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZXdlci1paWlmJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bjctbWlyYWRvclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImxiLmRhdGFTb3VyY2UuaGFzQ29udGV4dE1lbnUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICA8L243LW1pcmFkb3I+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgICAgICAgICAgPCEtLSBJTUFHRSBWSUVXRVIgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZXdlcidcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG43LWltYWdlLXZpZXdlciBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1pbWFnZS12aWV3ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIElNQUdFIFZJRVdFUiBUT09MUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1pbWFnZS12aWV3ZXItdG9vbHMgKm5nSWY9XCJzZWN0aW9uLnRvb2xzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkICsgJy10b29scyddLmRzLm91dCQgfCBhc3luY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZCArICctdG9vbHMnXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L243LWltYWdlLXZpZXdlci10b29scz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSU1BR0UgVklFV0VSIE9WRVJMQVkgREVUQUlMUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYi53aWRnZXRzW3NlY3Rpb24uaWQgKyAnLW92ZXJsYXktZGV0YWlscyddLmRzLm91dCQgfCBhc3luYyBhcyB2aWV3ZXJEZXRhaWxzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNfX2Nsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNfX2Nsb3NlLWxpbmtcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsYi5ldmVudEhhbmRsZXIuZW1pdE91dGVyKCdvdmVybGF5Y2xvc2VjbGljaycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm43LWljb24tY2xvc2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ2aWV3ZXJEZXRhaWxzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW1pdF09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWQgKyAnLW92ZXJsYXktZGV0YWlscyddLmVtaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LWl0ZW0tcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgICAgICAgICAgPCEtLSBNRVRBREFUQSBWSUVXRVIgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21ldGFkYXRhJ1wiPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1tZXRhZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXItcmVhZC1tb3JlIFtkYXRhXT1cInNlY3Rpb24ucmVhZG1vcmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiBzZWN0aW9uPy5vcHRpb25zPy5yZWFkbW9yZSB8fCBzZWN0aW9uPy5vcHRpb25zPy5ncm91cFJlYWRtb3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdpaG91dFJlYWRtb3JlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXItbWV0YWRhdGEtcmVhZG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21yLW1ldGFkYXRhLXJlYWRtb3JlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aWhvdXRSZWFkbW9yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1tZXRhZGF0YS12aWV3ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LW1ldGFkYXRhLXZpZXdlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21yLXJlYWQtbW9yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8IS0tIE1FVEFEQVRBIERZTkFNSUMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21ldGFkYXRhLWR5bmFtaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtci1tZXRhZGF0YS1keW5hbWljIFxuICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICA8L21yLW1ldGFkYXRhLWR5bmFtaWM+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIENPTExFQ1RJT04gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbGxlY3Rpb24nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luYyBhcyBjb2xsZWN0aW9uJFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbGxlY3Rpb24kLml0ZW1zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrIG1yLWNvbnRlbnQtYmxvY2stY29sbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50IHt7IHNlY3Rpb24uZ3JpZCA/ICduNy1ncmlkLScgKyBzZWN0aW9uLmdyaWQgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbGxlY3Rpb24kPy5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJpdGVtXCIgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbjctaXRlbS1wcmV2aWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gSVRFTSBQUkVWSUVXIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwcmV2aWV3J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLWl0ZW0tcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3IFtkYXRhXT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZHMub3V0JCB8IGFzeW5jXCIgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+ICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LWl0ZW0tcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIFRFWFQgVklFV0VSIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0LXZpZXdlcidcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrIG1yLWNvbnRlbnQtYmxvY2stdGV4dC12aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy10ZXh0LXZpZXdlciBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LXRleHQtdmlld2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBQQVJBTExFTCBURVhUIFZJRVdFUiAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFyYWxsZWwtdGV4dC12aWV3ZXInXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLXRleHQtdmlld2VyIG1yLWNvbnRlbnQtYmxvY2stcGFyYWxsZWwtdGV4dC12aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1wYXJhbGxlbC10ZXh0LXZpZXdlciBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LXBhcmFsbGVsLXRleHQtdmlld2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBNQVAgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1tYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG43LW1hcCBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPjwvbjctbWFwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBORVRXT1JLIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIiduZXR3b3JrLXJlc291cmNlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLW5ldHdvcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImRlbW8tbmV0d29ya1wiIGNsYXNzPVwibmV0d29yay12aXN1YWxpemF0aW9uXCI+PHA+TmV0d29yazwvcD48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIElORk8gQk9YIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbmZvLWJveCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1pbmZvLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1ib3hfX21vY2tcIj5pbmZvLWJveDwvZGl2PiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIEJSRUFEQ1JVTUJTIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidicmVhZGNydW1icydcIj5cbiAgICAgICAgICAgICAgICAgICAgPG43LWJyZWFkY3J1bWJzIFtkYXRhXT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZHMub3V0JCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbjctYnJlYWRjcnVtYnM+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1155,8 +1155,12 @@ class MrFiltersDS extends DataSource {
|
|
|
1155
1155
|
}
|
|
1156
1156
|
|
|
1157
1157
|
class MrHeroDS extends DataSource {
|
|
1158
|
+
constructor() {
|
|
1159
|
+
super(...arguments);
|
|
1160
|
+
this.currentInputValue = '';
|
|
1161
|
+
}
|
|
1158
1162
|
transform(data) {
|
|
1159
|
-
const { classes, background } = this.options;
|
|
1163
|
+
const { classes, background, input } = this.options;
|
|
1160
1164
|
const { localeService } = this.options;
|
|
1161
1165
|
const { text, image, title, button } = data;
|
|
1162
1166
|
const backgroundImage = background ? image : null;
|
|
@@ -1175,6 +1179,11 @@ class MrHeroDS extends DataSource {
|
|
|
1175
1179
|
queryParams: linksHelper.getQueryParams(button.link),
|
|
1176
1180
|
};
|
|
1177
1181
|
}
|
|
1182
|
+
// Search input
|
|
1183
|
+
if (button && input) {
|
|
1184
|
+
anchor.payload = { route: anchor.href, payloadId: 'hero-search' };
|
|
1185
|
+
anchor.href = null;
|
|
1186
|
+
}
|
|
1178
1187
|
return {
|
|
1179
1188
|
text,
|
|
1180
1189
|
title,
|
|
@@ -1184,7 +1193,8 @@ class MrHeroDS extends DataSource {
|
|
|
1184
1193
|
button: button && anchor ? {
|
|
1185
1194
|
...button,
|
|
1186
1195
|
anchor,
|
|
1187
|
-
} : null
|
|
1196
|
+
} : null,
|
|
1197
|
+
input
|
|
1188
1198
|
};
|
|
1189
1199
|
}
|
|
1190
1200
|
}
|
|
@@ -2010,7 +2020,7 @@ class MrMetadataDS extends DataSource {
|
|
|
2010
2020
|
.forEach(({ items }) => {
|
|
2011
2021
|
items
|
|
2012
2022
|
.filter((item) => isObject(item))
|
|
2013
|
-
.forEach(({ label, value }) => {
|
|
2023
|
+
.forEach(({ label, value, anchorId }) => {
|
|
2014
2024
|
const itemLabel = label && !hideLabels ? label : null;
|
|
2015
2025
|
const classLabel = label && !hideLabels ? label.replace(/ /g, '_').toLowerCase() : null;
|
|
2016
2026
|
if (Array.isArray(value)) {
|
|
@@ -2034,7 +2044,8 @@ class MrMetadataDS extends DataSource {
|
|
|
2034
2044
|
classes: `mrc-${classLabel}`,
|
|
2035
2045
|
items: value ? [{
|
|
2036
2046
|
label: _t(itemLabel),
|
|
2037
|
-
value: this.getItemValue(value)
|
|
2047
|
+
value: this.getItemValue(value),
|
|
2048
|
+
anchorId: anchorId || ''
|
|
2038
2049
|
}] : []
|
|
2039
2050
|
}]
|
|
2040
2051
|
});
|
|
@@ -2058,6 +2069,7 @@ class MrMetadataDS extends DataSource {
|
|
|
2058
2069
|
.map((childItem) => ({
|
|
2059
2070
|
label: _t(childItem.label),
|
|
2060
2071
|
value: this.getItemValue(childItem.value),
|
|
2072
|
+
anchorId: childItem.anchorId || ''
|
|
2061
2073
|
})),
|
|
2062
2074
|
// load the optional "readmore" configuration
|
|
2063
2075
|
groupReadmore,
|
|
@@ -4579,6 +4591,7 @@ class MrHomeLayoutDS extends LayoutDataSource {
|
|
|
4579
4591
|
this.errorDescription = _t('global#layout_error_description');
|
|
4580
4592
|
}
|
|
4581
4593
|
onInit(payload) {
|
|
4594
|
+
this.router = payload.router;
|
|
4582
4595
|
this.configuration = payload.configuration;
|
|
4583
4596
|
this.communication = payload.communication;
|
|
4584
4597
|
this.mainState = payload.mainState;
|
|
@@ -4631,6 +4644,20 @@ class MrHomeLayoutDS extends LayoutDataSource {
|
|
|
4631
4644
|
const pageTitle = this.pageConfig.title;
|
|
4632
4645
|
this.mainState.update('headTitle', [appName, pageTitle].join(' > '));
|
|
4633
4646
|
}
|
|
4647
|
+
searchRedirect(type, payload) {
|
|
4648
|
+
const configId = type.split('.')[0];
|
|
4649
|
+
const { input } = this.pageConfig.sections.find((section) => section.id === configId).options;
|
|
4650
|
+
const { queryId } = input;
|
|
4651
|
+
const { additionalQueryParams } = input;
|
|
4652
|
+
const queryParams = {};
|
|
4653
|
+
queryParams[queryId] = payload.inputValue;
|
|
4654
|
+
if (additionalQueryParams) {
|
|
4655
|
+
Object.keys(additionalQueryParams).forEach((paramKey) => {
|
|
4656
|
+
queryParams[paramKey] = additionalQueryParams[paramKey];
|
|
4657
|
+
});
|
|
4658
|
+
}
|
|
4659
|
+
this.router.navigate([payload.route], { queryParams });
|
|
4660
|
+
}
|
|
4634
4661
|
}
|
|
4635
4662
|
|
|
4636
4663
|
class MrHomeLayoutEH extends EventHandler {
|
|
@@ -4646,10 +4673,9 @@ class MrHomeLayoutEH extends EventHandler {
|
|
|
4646
4673
|
break;
|
|
4647
4674
|
}
|
|
4648
4675
|
});
|
|
4649
|
-
this.outerEvents$.subscribe(({ type }) => {
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
break;
|
|
4676
|
+
this.outerEvents$.subscribe(({ type, payload }) => {
|
|
4677
|
+
if (type.indexOf('hero-search-enter') !== -1) {
|
|
4678
|
+
this.dataSource.searchRedirect(type, payload);
|
|
4653
4679
|
}
|
|
4654
4680
|
});
|
|
4655
4681
|
}
|
|
@@ -4711,15 +4737,22 @@ class MrSliderEH extends EventHandler {
|
|
|
4711
4737
|
|
|
4712
4738
|
class MrHeroEH extends EventHandler {
|
|
4713
4739
|
listen() {
|
|
4714
|
-
|
|
4715
|
-
|
|
4716
|
-
|
|
4717
|
-
|
|
4718
|
-
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
|
|
4722
|
-
|
|
4740
|
+
this.innerEvents$.subscribe(({ type, payload }) => {
|
|
4741
|
+
switch (type) {
|
|
4742
|
+
case `${this.dataSource.id}.change`:
|
|
4743
|
+
if (payload.inputPayload && payload.inputPayload === 'input') {
|
|
4744
|
+
this.dataSource.currentInputValue = payload.value;
|
|
4745
|
+
}
|
|
4746
|
+
break;
|
|
4747
|
+
case `${this.dataSource.id}.click`:
|
|
4748
|
+
if (payload.payloadId === 'hero-search' && this.dataSource.currentInputValue) {
|
|
4749
|
+
this.emitOuter('hero-search-enter', { inputValue: this.dataSource.currentInputValue, route: payload.route });
|
|
4750
|
+
}
|
|
4751
|
+
break;
|
|
4752
|
+
default:
|
|
4753
|
+
break;
|
|
4754
|
+
}
|
|
4755
|
+
});
|
|
4723
4756
|
}
|
|
4724
4757
|
}
|
|
4725
4758
|
|
|
@@ -4735,8 +4768,9 @@ const EVENTHANDLER_MAP$4 = {
|
|
|
4735
4768
|
hero: MrHeroEH,
|
|
4736
4769
|
};
|
|
4737
4770
|
class MrHomeLayoutComponent extends AbstractLayout {
|
|
4738
|
-
constructor(layoutsConfiguration, activatedRoute, configuration, communication, mainState, layoutState, localeService) {
|
|
4771
|
+
constructor(layoutsConfiguration, router, activatedRoute, configuration, communication, mainState, layoutState, localeService) {
|
|
4739
4772
|
super(layoutsConfiguration.get('MrHomeLayoutConfig') || MrHomeLayoutConfig);
|
|
4773
|
+
this.router = router;
|
|
4740
4774
|
this.activatedRoute = activatedRoute;
|
|
4741
4775
|
this.configuration = configuration;
|
|
4742
4776
|
this.communication = communication;
|
|
@@ -4746,6 +4780,7 @@ class MrHomeLayoutComponent extends AbstractLayout {
|
|
|
4746
4780
|
}
|
|
4747
4781
|
initPayload() {
|
|
4748
4782
|
return {
|
|
4783
|
+
router: this.router,
|
|
4749
4784
|
routeData: this.routeData,
|
|
4750
4785
|
mainState: this.mainState,
|
|
4751
4786
|
configuration: this.configuration,
|
|
@@ -4783,13 +4818,13 @@ class MrHomeLayoutComponent extends AbstractLayout {
|
|
|
4783
4818
|
});
|
|
4784
4819
|
}
|
|
4785
4820
|
}
|
|
4786
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrHomeLayoutComponent, deps: [{ token: i1.LayoutsConfigurationService }, { token: i2.ActivatedRoute }, { token: i1.ConfigurationService }, { token: i1.CommunicationService }, { token: i1.MainStateService }, { token: MrLayoutStateService }, { token: MrLocaleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4787
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrHomeLayoutComponent, selector: "mr-home-layout", usesInheritance: true, ngImport: i0, template: "<div class=\"mr-home mr-layout\"\n *ngIf=\"lb.dataSource\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- HOME CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <section *ngFor=\"let section of lb.dataSource.pageConfig.sections\" class=\"{{ 'mr-layout__' + section.type }}\">\n <ng-container [ngSwitch]=\"section.type\">\n \n <!-- SLIDER -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <n7-carousel
|
|
4821
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrHomeLayoutComponent, deps: [{ token: i1.LayoutsConfigurationService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i1.ConfigurationService }, { token: i1.CommunicationService }, { token: i1.MainStateService }, { token: MrLayoutStateService }, { token: MrLocaleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4822
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrHomeLayoutComponent, selector: "mr-home-layout", usesInheritance: true, ngImport: i0, template: "<div class=\"mr-home mr-layout\"\n *ngIf=\"lb.dataSource\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- HOME CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <section *ngFor=\"let section of lb.dataSource.pageConfig.sections\" class=\"{{ 'mr-layout__' + section.type }}\" id=\"{{ section.id }}\">\n <ng-container [ngSwitch]=\"section.type\">\n \n <!-- SLIDER -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <n7-carousel\n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-carousel> \n </ng-container>\n \n <!-- COLLECTION -->\n <ng-container *ngSwitchCase=\"'collection'\">\n <div class=\"mr-layout__maxwidth mr-items-preview\">\n <n7-inner-title \n [data]=\"(lb.widgets[section.id].ds.out$ | async)?.header\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-inner-title>\n <div class=\"{{ section.grid ? 'n7-grid-' + section.grid : '' }}\">\n <n7-item-preview\n *ngFor=\"let item of (lb.widgets[section.id].ds.out$ | async)?.items\"\n [data]=\"item\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n \n <!-- HERO -->\n <ng-container *ngSwitchCase=\"'hero'\">\n <n7-hero \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-hero> \n </ng-container>\n \n <!-- CONTENT -->\n <ng-container *ngSwitchCase=\"'content'\">\n <div [innerHTML]=\"lb.widgets[section.id].ds.out$ | async\"></div>\n </ng-container>\n \n </ng-container>\n </section>\n </ng-container>\n\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i7.CarouselComponent, selector: "n7-carousel", inputs: ["data", "emit"] }, { kind: "component", type: i7.HeroComponent, selector: "n7-hero", inputs: ["data", "emit"] }, { kind: "component", type: i7.InnerTitleComponent, selector: "n7-inner-title", inputs: ["data", "emit"] }, { kind: "component", type: i7.ItemPreviewComponent, selector: "n7-item-preview", inputs: ["data", "emit"] }, { kind: "component", type: i7.LoaderComponent, selector: "n7-loader", inputs: ["data"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
|
|
4788
4823
|
}
|
|
4789
4824
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrHomeLayoutComponent, decorators: [{
|
|
4790
4825
|
type: Component,
|
|
4791
|
-
args: [{ selector: 'mr-home-layout', template: "<div class=\"mr-home mr-layout\"\n *ngIf=\"lb.dataSource\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- HOME CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <section *ngFor=\"let section of lb.dataSource.pageConfig.sections\" class=\"{{ 'mr-layout__' + section.type }}\">\n <ng-container [ngSwitch]=\"section.type\">\n \n <!-- SLIDER -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <n7-carousel
|
|
4792
|
-
}], ctorParameters: () => [{ type: i1.LayoutsConfigurationService }, { type: i2.ActivatedRoute }, { type: i1.ConfigurationService }, { type: i1.CommunicationService }, { type: i1.MainStateService }, { type: MrLayoutStateService }, { type: MrLocaleService }] });
|
|
4826
|
+
args: [{ selector: 'mr-home-layout', template: "<div class=\"mr-home mr-layout\"\n *ngIf=\"lb.dataSource\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- HOME CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <section *ngFor=\"let section of lb.dataSource.pageConfig.sections\" class=\"{{ 'mr-layout__' + section.type }}\" id=\"{{ section.id }}\">\n <ng-container [ngSwitch]=\"section.type\">\n \n <!-- SLIDER -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <n7-carousel\n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-carousel> \n </ng-container>\n \n <!-- COLLECTION -->\n <ng-container *ngSwitchCase=\"'collection'\">\n <div class=\"mr-layout__maxwidth mr-items-preview\">\n <n7-inner-title \n [data]=\"(lb.widgets[section.id].ds.out$ | async)?.header\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-inner-title>\n <div class=\"{{ section.grid ? 'n7-grid-' + section.grid : '' }}\">\n <n7-item-preview\n *ngFor=\"let item of (lb.widgets[section.id].ds.out$ | async)?.items\"\n [data]=\"item\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n \n <!-- HERO -->\n <ng-container *ngSwitchCase=\"'hero'\">\n <n7-hero \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-hero> \n </ng-container>\n \n <!-- CONTENT -->\n <ng-container *ngSwitchCase=\"'content'\">\n <div [innerHTML]=\"lb.widgets[section.id].ds.out$ | async\"></div>\n </ng-container>\n \n </ng-container>\n </section>\n </ng-container>\n\n </ng-container>\n</div>\n" }]
|
|
4827
|
+
}], ctorParameters: () => [{ type: i1.LayoutsConfigurationService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i1.ConfigurationService }, { type: i1.CommunicationService }, { type: i1.MainStateService }, { type: MrLayoutStateService }, { type: MrLocaleService }] });
|
|
4793
4828
|
|
|
4794
4829
|
class MrItineraryLayoutDS extends LayoutDataSource {
|
|
4795
4830
|
constructor() {
|
|
@@ -6362,11 +6397,11 @@ class MrImageViewerOverlayDetailsEH extends EventHandler {
|
|
|
6362
6397
|
//---------------------------
|
|
6363
6398
|
class MrMetadataReadmoreComponent {
|
|
6364
6399
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrMetadataReadmoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6365
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrMetadataReadmoreComponent, selector: "mr-metadata-readmore", inputs: { data: "data", emit: "emit" }, ngImport: i0, template: "<div *ngIf=\"data\"\n class=\"n7-metadata-viewer\">\n <!-- Metadata groups wrapper -->\n <div class=\"n7-metadata-viewer__wrapper {{ data.classes || ''}}\"\n *ngFor=\"let grp of data.group\">\n <!-- For each data group, render it -->\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n</div>\n\n<!-- Template for Metadata.group -->\n<ng-template #group\n let-grp>\n <div *ngIf=\"grp.title || grp.items\"\n class=\"n7-metadata-viewer__group {{ grp.classes || '' }}\">\n <div class=\"n7-metadata-viewer__group-title\"\n *ngIf=\"grp.title\">{{grp.title}}</div>\n <div class=\"n7-metadata-viewer__group-content\"\n *ngIf=\"grp.items\">\n <!-- \"read more\" enabled on the metadata group -->\n <mr-read-more [data]=\"grp.groupReadmore\">\n <div class=\"n7-metadata-viewer__item\"\n *ngFor=\"let i of grp.items\">\n <span *ngIf=\"i.label\" class=\"n7-metadata-viewer__item-label\">\n {{ i.label }}\n </span>\n <!-- \"read more\" enabled on the metadata value field -->\n <mr-read-more [data]=\"grp.readmore\">\n <span *ngIf=\"i.value\"\n class=\"n7-metadata-viewer__item-value\"\n [innerHTML]=\"i.value\">\n </span>\n </mr-read-more>\n </div>\n </mr-read-more>\n </div>\n </div>\n <!-- Render all child groups -->\n <div *ngIf=\"grp.group\">\n <div class=\"n7-metadata-viewer__group-wrapper\"\n *ngFor=\"let grp of grp.group\">\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ReadMoreComponent, selector: "mr-read-more", inputs: ["data"] }] }); }
|
|
6400
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrMetadataReadmoreComponent, selector: "mr-metadata-readmore", inputs: { data: "data", emit: "emit" }, ngImport: i0, template: "<div *ngIf=\"data\"\n class=\"n7-metadata-viewer\">\n <!-- Metadata groups wrapper -->\n <div class=\"n7-metadata-viewer__wrapper {{ data.classes || ''}}\"\n *ngFor=\"let grp of data.group\">\n <!-- For each data group, render it -->\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n</div>\n\n<!-- Template for Metadata.group -->\n<ng-template #group\n let-grp>\n <div *ngIf=\"grp.title || grp.items\"\n class=\"n7-metadata-viewer__group {{ grp.classes || '' }}\">\n <div class=\"n7-metadata-viewer__group-title\"\n *ngIf=\"grp.title\">{{grp.title}}</div>\n <div class=\"n7-metadata-viewer__group-content\"\n *ngIf=\"grp.items\">\n <!-- \"read more\" enabled on the metadata group -->\n <mr-read-more [data]=\"grp.groupReadmore\">\n <div class=\"n7-metadata-viewer__item\"\n *ngFor=\"let i of grp.items\">\n <span *ngIf=\"i.anchorId\" id=\"{{ i.anchorId }}\"></span>\n <span *ngIf=\"i.label\" class=\"n7-metadata-viewer__item-label\">\n {{ i.label }}\n </span>\n <!-- \"read more\" enabled on the metadata value field -->\n <mr-read-more [data]=\"grp.readmore\">\n <span *ngIf=\"i.value\"\n class=\"n7-metadata-viewer__item-value\"\n [innerHTML]=\"i.value\">\n </span>\n </mr-read-more>\n </div>\n </mr-read-more>\n </div>\n </div>\n <!-- Render all child groups -->\n <div *ngIf=\"grp.group\">\n <div class=\"n7-metadata-viewer__group-wrapper\"\n *ngFor=\"let grp of grp.group\">\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ReadMoreComponent, selector: "mr-read-more", inputs: ["data"] }] }); }
|
|
6366
6401
|
}
|
|
6367
6402
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrMetadataReadmoreComponent, decorators: [{
|
|
6368
6403
|
type: Component,
|
|
6369
|
-
args: [{ selector: 'mr-metadata-readmore', template: "<div *ngIf=\"data\"\n class=\"n7-metadata-viewer\">\n <!-- Metadata groups wrapper -->\n <div class=\"n7-metadata-viewer__wrapper {{ data.classes || ''}}\"\n *ngFor=\"let grp of data.group\">\n <!-- For each data group, render it -->\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n</div>\n\n<!-- Template for Metadata.group -->\n<ng-template #group\n let-grp>\n <div *ngIf=\"grp.title || grp.items\"\n class=\"n7-metadata-viewer__group {{ grp.classes || '' }}\">\n <div class=\"n7-metadata-viewer__group-title\"\n *ngIf=\"grp.title\">{{grp.title}}</div>\n <div class=\"n7-metadata-viewer__group-content\"\n *ngIf=\"grp.items\">\n <!-- \"read more\" enabled on the metadata group -->\n <mr-read-more [data]=\"grp.groupReadmore\">\n <div class=\"n7-metadata-viewer__item\"\n *ngFor=\"let i of grp.items\">\n <span *ngIf=\"i.label\" class=\"n7-metadata-viewer__item-label\">\n {{ i.label }}\n </span>\n <!-- \"read more\" enabled on the metadata value field -->\n <mr-read-more [data]=\"grp.readmore\">\n <span *ngIf=\"i.value\"\n class=\"n7-metadata-viewer__item-value\"\n [innerHTML]=\"i.value\">\n </span>\n </mr-read-more>\n </div>\n </mr-read-more>\n </div>\n </div>\n <!-- Render all child groups -->\n <div *ngIf=\"grp.group\">\n <div class=\"n7-metadata-viewer__group-wrapper\"\n *ngFor=\"let grp of grp.group\">\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n </div>\n</ng-template>\n" }]
|
|
6404
|
+
args: [{ selector: 'mr-metadata-readmore', template: "<div *ngIf=\"data\"\n class=\"n7-metadata-viewer\">\n <!-- Metadata groups wrapper -->\n <div class=\"n7-metadata-viewer__wrapper {{ data.classes || ''}}\"\n *ngFor=\"let grp of data.group\">\n <!-- For each data group, render it -->\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n</div>\n\n<!-- Template for Metadata.group -->\n<ng-template #group\n let-grp>\n <div *ngIf=\"grp.title || grp.items\"\n class=\"n7-metadata-viewer__group {{ grp.classes || '' }}\">\n <div class=\"n7-metadata-viewer__group-title\"\n *ngIf=\"grp.title\">{{grp.title}}</div>\n <div class=\"n7-metadata-viewer__group-content\"\n *ngIf=\"grp.items\">\n <!-- \"read more\" enabled on the metadata group -->\n <mr-read-more [data]=\"grp.groupReadmore\">\n <div class=\"n7-metadata-viewer__item\"\n *ngFor=\"let i of grp.items\">\n <span *ngIf=\"i.anchorId\" id=\"{{ i.anchorId }}\"></span>\n <span *ngIf=\"i.label\" class=\"n7-metadata-viewer__item-label\">\n {{ i.label }}\n </span>\n <!-- \"read more\" enabled on the metadata value field -->\n <mr-read-more [data]=\"grp.readmore\">\n <span *ngIf=\"i.value\"\n class=\"n7-metadata-viewer__item-value\"\n [innerHTML]=\"i.value\">\n </span>\n </mr-read-more>\n </div>\n </mr-read-more>\n </div>\n </div>\n <!-- Render all child groups -->\n <div *ngIf=\"grp.group\">\n <div class=\"n7-metadata-viewer__group-wrapper\"\n *ngFor=\"let grp of grp.group\">\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n </div>\n</ng-template>\n" }]
|
|
6370
6405
|
}], propDecorators: { data: [{
|
|
6371
6406
|
type: Input
|
|
6372
6407
|
}], emit: [{
|
|
@@ -6470,7 +6505,22 @@ class MrResourceLayoutComponent extends AbstractLayout {
|
|
|
6470
6505
|
setTimeout(() => {
|
|
6471
6506
|
const element = document.getElementById(fragment);
|
|
6472
6507
|
if (element) {
|
|
6473
|
-
|
|
6508
|
+
// Open read-more if present
|
|
6509
|
+
const readMoreElement = element
|
|
6510
|
+
?.closest('.mr-read-more__content')
|
|
6511
|
+
?.closest('.mr-read-more.is-collapsed');
|
|
6512
|
+
if (readMoreElement) {
|
|
6513
|
+
const readMoreButton = readMoreElement.querySelector(':scope > .mr-read-more__btn');
|
|
6514
|
+
if (readMoreButton instanceof HTMLElement) {
|
|
6515
|
+
readMoreButton.click();
|
|
6516
|
+
}
|
|
6517
|
+
// Scroll
|
|
6518
|
+
setTimeout(() => element.scrollIntoView({ behavior: 'smooth' }), 300);
|
|
6519
|
+
}
|
|
6520
|
+
else {
|
|
6521
|
+
// Scroll
|
|
6522
|
+
element.scrollIntoView({ behavior: 'smooth' });
|
|
6523
|
+
}
|
|
6474
6524
|
}
|
|
6475
6525
|
}, timeout);
|
|
6476
6526
|
}
|