@arsedizioni/ars-utils 18.4.49 → 18.4.50
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/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/document/document.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/references/references.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +3 -3
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +3 -3
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +3 -3
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +3 -3
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +10 -10
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +2 -2
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +4 -4
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +18 -18
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/ui.scss +18 -0
|
@@ -747,7 +747,7 @@ export class ClipperBrowserDialogComponent extends ClipperSearchResultManager {
|
|
|
747
747
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperBrowserDialogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
748
748
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ClipperBrowserDialogComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [
|
|
749
749
|
MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
|
|
750
|
-
], viewQueries: [{ propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"clipper-browser-fixed\">\r\n <div class=\"dialog-header\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" class=\"dialog-title\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <div class=\"clipper-logo\"></div>\r\n </a>\r\n </div>\r\n @if (dialogData?.selectionMode > 0 && canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\" class=\"clipper-selection-icon-button\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"106px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (clipperService.bag.length > 0) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Documenti di lavoro\" aria-label=\"'Documenti di lavoro'\"\r\n (click)=\"openBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"clipperService.bag.length\"\r\n matBadgeColor=\"accent\">work_outline</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill style=\"padding: 10px 10px 10px 20px\">\r\n <div fxFlex=\"*\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Numero</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"filterParams.number\" #number=\"ngModel\" name=\"number\"\r\n maxlength=\"10\" (keyup.Enter)=\"fetch(true)\">\r\n @if (filterParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"filterParams.number = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"filterParams.year\" #year=\"ngModel\" name=\"year\" min=\"0\"\r\n maxlength=\"4\" (keyup.Enter)=\"fetch(true)\" />\r\n @if (filterParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (year.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"100\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Parole, frasi o concetti...</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" #text [(ngModel)]=\"filterParams.text\" maxlength=\"200\"\r\n (keyup.Enter)=\"search()\" autofocus />\r\n @if (filterParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.text = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); composeSearch()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); helpSearch()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button type=\"button\" mat-icon-button (click)=\"search()\" [attr.aria-label]=\"'Avvia la ricerca'\"\r\n matTooltip=\"Avvia ricerca\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"advancedSearch()\" [attr.aria-label]=\"'Ricerca avanzata'\"\r\n matTooltip=\"Ricerca avanzata\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>settings</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n @if (snapshot.searchInfo && snapshot.searchInfo.length > 0) {\r\n <div fxHide.xs>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill class=\"small\"\r\n style=\"padding:0 10px 0 20px;\">\r\n <div fxFlex=\"*\">\r\n <b>RICERCA ATTIVA</b> \r\n @for (si of snapshot.searchInfo; track si) {\r\n <span>\r\n {{si.sep ? ' ' : ''}} {{si.field}}: <span class=\"accent lowercase\"><i>{{si.value}}</i></span>\r\n </span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"start\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera ricerca\" (click)=\"clearSearch()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div>\r\n <div fxLayout=\"row wrap-reverse\" fxLayoutAlign=\"space-between center\" fxFill style=\"padding: 0 10px 0 15px;\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n @if (snapshot.total > 0) {\r\n <div fxFlexAlign=\"center\">\r\n <mat-checkbox (change)=\"$event ? selectAll($event) : null\"\r\n [indeterminate]=\"selection?.hasValue() && !allSelected()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\"\r\n [disabled]=\"!snapshot.items || snapshot.items.length == 0\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"*\">\r\n @if (snapshot.total > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Ordina\"\r\n [attr.aria-label]=\"'Menu ordina'\" [matMenuTriggerFor]=\"menuSort\" [disabled]=\"!snapshot.total\">\r\n <span fxHide.lt-lg>Ordina per:</span>\r\n <mat-icon fxHide.gt-md>sort</mat-icon> {{currentSort}}\r\n </button>\r\n }\r\n <mat-menu #menuSort=\"matMenu\">\r\n <button mat-menu-item (click)=\"sortBy(3)\" [attr.aria-label]=\"'Ordina per data decrescente'\">\r\n Data decrescente\r\n </button>\r\n <button mat-menu-item (click)=\"sortBy(2)\" [attr.aria-label]=\"'Ordina per data crescente'\">\r\n Data crescente\r\n </button>\r\n @if (filterParams.text) {\r\n <button mat-menu-item (click)=\"sortBy(1)\" [attr.aria-label]=\"'Ordina per rilevanza'\">\r\n Rilevanza\r\n </button>\r\n }\r\n <button mat-menu-item (click)=\"sortBy(5)\" [attr.aria-label]=\"'Ordina per popolarit\u00E0'\">\r\n Popolarit\u00E0\r\n </button>\r\n </mat-menu>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Menu modello'\"\r\n [matMenuTriggerFor]=\"menuModels\">\r\n <span fxHide.lt-lg>Mostra:</span>\r\n <mat-icon fxHide.gt-md>filter_list</mat-icon> {{currentModel}}\r\n </button>\r\n <mat-menu #menuModels=\"matMenu\">\r\n <button mat-menu-item (click)=\"changeModel(2)\" [attr.aria-label]=\"'Mostra aggiornamento normativo'\">\r\n Gazzette e bollettini\r\n </button>\r\n <button mat-menu-item (click)=\"changeModel(9)\" [attr.aria-label]=\"'Normativa vigente'\">\r\n Normativa vigente\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"changeModel()\" [attr.aria-label]=\"'Mostra tutti i documenti'\">\r\n Tutto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\" matBadgeColor=\"accent\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\"\r\n aria-label=\"'Affina ricerca'\" (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"clipper-browser-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [actions]=\"contextMenu\" [isReadable]=\"false\"\r\n [displayModelName]=\"true\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [useSelections]=\"canSelect()\" [isReadable]=\"false\"\r\n [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend expired-bg \"></div>\r\n non pi\u00F9 vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [ngClass]=\"{'wide': filterPane?.opened}\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width: 0px) and (max-width: 430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width: 431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.clipper-logo{background-size:110px 48px;width:110px;height:48px}.clipper-selection-button{width:150px;font-size:small;font-weight:600;text-transform:uppercase}.clipper-selection-icon-button{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.clipper-selection-icon-button:hover{background-color:var(--ars-color-primary-hi, #12c0ae)}.unread{color:var(--ars-color-error, #ff5449)!important}.expired{color:var(--ars-color-error-low, #a80710)!important}.expiring{color:var(--ars-color-warning, #FFC107)!important}.closed{color:var(--ars-color-ok, #388E3C)!important}.unread-bg{background-color:var(--ars-color-error, #ff5449)}.error-bg,.expired-bg{background-color:var(--ars-color-error-low, #a80710)}.expiring-bg{background-color:var(--ars-color-warning, #FFC107)}.popular-bg,.closed-bg{background-color:var(--ars-color-ok, #388E3C)!important}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-color-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .group-spaced{padding:10px 0 0!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 6px 10px 0;min-height:68px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.item-content .info-1{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent, #7894ae)}.item-content .info-2{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent-low, #456179)}.item-content .title{font-size:small!important;line-height:18px;text-decoration:none!important;font-weight:400;min-height:unset;min-width:unset;white-space:initial!important}@supports (-webkit-line-clamp: 3){.item-content .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.item-content .details{margin-top:4px;font-size:x-small!important;font-weight:700;line-height:15px;color:var(--ars-color-accent-low, #456179);text-transform:uppercase!important;border-left:4px solid var(--ars-color-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600!important;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-color-link, #03A9F4);font-weight:600!important}.item-content a.link{color:var(--ars-color-link, #03A9F4);cursor:pointer!important;text-decoration:none!important}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer!important;padding:10px 13px!important;margin-bottom:5px!important}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-color-error, #ff5449);margin:0 8px}.tile .image{height:150px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .buttons{position:absolute;left:0;top:0;height:42px}.tile .image .buttons .check,.tile .image .buttons .read{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)}.tile .date{padding:8px 0 6px!important;font-weight:700!important;text-transform:uppercase!important}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-color-divider, #757d87)}.tile .time{font-size:small!important;font-weight:700!important}.tile .title{text-decoration:none!important;font-size:15px!important;font-weight:600;min-height:50px!important;max-height:70px!important;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.tile .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:#427505;text-transform:uppercase;white-space:nowrap;color:#e0e2e5}.badge-red{background-color:#a80710}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .legend:not(:first-of-type){margin-left:10px}.special-date,.special-date-expired,.special-date-expiring{border:2px var(--ars-color-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-color-error, #ff5449) solid!important}.special-date-expiring{border:2px var(--ars-color-warning, #FFC107) solid!important}.dialog-title{padding-left:18px;padding-top:6px}.message-container{font-size:large;display:flex;justify-content:center;align-items:center;height:50%}.message-container .message{color:var(--ars-color-secondary, #4a635f);text-align:center;padding:40px}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i6.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["useSelections", "selectionSource", "parent", "item", "isReference", "isReadable", "isReadableModel", "isLawInForce", "canPrint", "canFind", "canUseCalendar", "canUseArchive"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i13.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i13.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i14.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", outputs: ["changed"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item", "actions", "tileNoPictureUrl", "tilePictureUrl", "isSelectable", "isReadable", "isReadableModel", "displayModelName", "displayMode"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i15.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
750
|
+
], viewQueries: [{ propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"clipper-browser-fixed\">\r\n <div class=\"dialog-header\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" class=\"dialog-title\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <div class=\"clipper-logo\"></div>\r\n </a>\r\n </div>\r\n @if (dialogData?.selectionMode > 0 && canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\" class=\"clipper-selection-icon-button\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"106px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (clipperService.bag.length > 0) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Documenti di lavoro\" aria-label=\"'Documenti di lavoro'\"\r\n (click)=\"openBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"clipperService.bag.length\"\r\n matBadgeColor=\"accent\">work_outline</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill style=\"padding: 10px 10px 10px 20px\">\r\n <div fxFlex=\"*\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Numero</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"filterParams.number\" #number=\"ngModel\" name=\"number\"\r\n maxlength=\"10\" (keyup.Enter)=\"fetch(true)\">\r\n @if (filterParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"filterParams.number = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"filterParams.year\" #year=\"ngModel\" name=\"year\" min=\"0\"\r\n maxlength=\"4\" (keyup.Enter)=\"fetch(true)\" />\r\n @if (filterParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (year.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"100\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Parole, frasi o concetti...</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" #text [(ngModel)]=\"filterParams.text\" maxlength=\"200\"\r\n (keyup.Enter)=\"search()\" autofocus />\r\n @if (filterParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.text = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); composeSearch()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); helpSearch()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button type=\"button\" mat-icon-button (click)=\"search()\" [attr.aria-label]=\"'Avvia la ricerca'\"\r\n matTooltip=\"Avvia ricerca\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"advancedSearch()\" [attr.aria-label]=\"'Ricerca avanzata'\"\r\n matTooltip=\"Ricerca avanzata\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>settings</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n @if (snapshot.searchInfo && snapshot.searchInfo.length > 0) {\r\n <div fxHide.xs>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill class=\"small\"\r\n style=\"padding:0 10px 0 20px;\">\r\n <div fxFlex=\"*\">\r\n <b>RICERCA ATTIVA</b> \r\n @for (si of snapshot.searchInfo; track si) {\r\n <span>\r\n {{si.sep ? ' ' : ''}} {{si.field}}: <span class=\"accent lowercase\"><i>{{si.value}}</i></span>\r\n </span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"start\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera ricerca\" (click)=\"clearSearch()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div>\r\n <div fxLayout=\"row wrap-reverse\" fxLayoutAlign=\"space-between center\" fxFill style=\"padding: 0 10px 0 15px;\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n @if (snapshot.total > 0) {\r\n <div fxFlexAlign=\"center\">\r\n <mat-checkbox (change)=\"$event ? selectAll($event) : null\"\r\n [indeterminate]=\"selection?.hasValue() && !allSelected()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\"\r\n [disabled]=\"!snapshot.items || snapshot.items.length == 0\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"*\">\r\n @if (snapshot.total > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Ordina\"\r\n [attr.aria-label]=\"'Menu ordina'\" [matMenuTriggerFor]=\"menuSort\" [disabled]=\"!snapshot.total\">\r\n <span fxHide.lt-lg>Ordina per:</span>\r\n <mat-icon fxHide.gt-md>sort</mat-icon> {{currentSort}}\r\n </button>\r\n }\r\n <mat-menu #menuSort=\"matMenu\">\r\n <button mat-menu-item (click)=\"sortBy(3)\" [attr.aria-label]=\"'Ordina per data decrescente'\">\r\n Data decrescente\r\n </button>\r\n <button mat-menu-item (click)=\"sortBy(2)\" [attr.aria-label]=\"'Ordina per data crescente'\">\r\n Data crescente\r\n </button>\r\n @if (filterParams.text) {\r\n <button mat-menu-item (click)=\"sortBy(1)\" [attr.aria-label]=\"'Ordina per rilevanza'\">\r\n Rilevanza\r\n </button>\r\n }\r\n <button mat-menu-item (click)=\"sortBy(5)\" [attr.aria-label]=\"'Ordina per popolarit\u00E0'\">\r\n Popolarit\u00E0\r\n </button>\r\n </mat-menu>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Menu modello'\"\r\n [matMenuTriggerFor]=\"menuModels\">\r\n <span fxHide.lt-lg>Mostra:</span>\r\n <mat-icon fxHide.gt-md>filter_list</mat-icon> {{currentModel}}\r\n </button>\r\n <mat-menu #menuModels=\"matMenu\">\r\n <button mat-menu-item (click)=\"changeModel(2)\" [attr.aria-label]=\"'Mostra aggiornamento normativo'\">\r\n Gazzette e bollettini\r\n </button>\r\n <button mat-menu-item (click)=\"changeModel(9)\" [attr.aria-label]=\"'Normativa vigente'\">\r\n Normativa vigente\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"changeModel()\" [attr.aria-label]=\"'Mostra tutti i documenti'\">\r\n Tutto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\" matBadgeColor=\"accent\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\"\r\n aria-label=\"'Affina ricerca'\" (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"clipper-browser-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [actions]=\"contextMenu\" [isReadable]=\"false\"\r\n [displayModelName]=\"true\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [useSelections]=\"canSelect()\" [isReadable]=\"false\"\r\n [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend expired-bg \"></div>\r\n non pi\u00F9 vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [ngClass]=\"{'wide': filterPane?.opened}\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width: 0px) and (max-width: 430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width: 431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.clipper-logo{background-size:110px 48px;width:110px;height:48px}.clipper-selection-button{width:150px;font-size:small;font-weight:600;text-transform:uppercase}.clipper-selection-icon-button{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.clipper-selection-icon-button:hover{background-color:var(--ars-color-primary-hi, #12c0ae)}.unread{color:var(--ars-color-error, #ff5449)!important}.expired{color:var(--ars-color-error-low, #a80710)!important}.expiring{color:var(--ars-color-warning, #FFC107)!important}.closed{color:var(--ars-color-ok, #388E3C)!important}.unread-bg{background-color:var(--ars-color-error, #ff5449)}.error-bg,.expired-bg{background-color:var(--ars-color-error-low, #a80710)}.expiring-bg{background-color:var(--ars-color-warning, #FFC107)}.popular-bg,.closed-bg{background-color:var(--ars-color-ok, #388E3C)!important}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-color-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .group-spaced{padding:10px 0 0!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 6px 10px 0;min-height:68px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.item-content .info-1{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent, #7894ae)}.item-content .info-2{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent-low, #456179)}.item-content .title{font-size:small!important;line-height:18px;text-decoration:none!important;font-weight:400;min-height:unset;min-width:unset;white-space:initial!important}@supports (-webkit-line-clamp: 3){.item-content .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.item-content .details{margin-top:4px;font-size:x-small!important;font-weight:700;line-height:15px;color:var(--ars-color-accent-low, #456179);text-transform:uppercase!important;border-left:4px solid var(--ars-color-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600!important;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-color-link, #03A9F4);font-weight:600!important}.item-content a.link{color:var(--ars-color-link, #03A9F4);cursor:pointer!important;text-decoration:none!important}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer!important;padding:10px 13px!important;margin-bottom:5px!important}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-color-error, #ff5449);margin:0 8px}.tile .image{height:150px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .buttons{position:absolute;left:0;top:0;height:42px}.tile .image .buttons .check,.tile .image .buttons .read{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)}.tile .date{padding:8px 0 6px!important;font-weight:700!important;text-transform:uppercase!important}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-color-divider, #757d87)}.tile .time{font-size:small!important;font-weight:700!important}.tile .title{text-decoration:none!important;font-size:15px!important;font-weight:600;min-height:50px!important;max-height:70px!important;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.tile .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:#427505;text-transform:uppercase;white-space:nowrap;color:#e0e2e5}.badge-red{background-color:#a80710}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .legend:not(:first-of-type){margin-left:10px}.special-date,.special-date-expired,.special-date-expiring{border:2px var(--ars-color-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-color-error, #ff5449) solid!important}.special-date-expiring{border:2px var(--ars-color-warning, #FFC107) solid!important}.dialog-title{padding-left:18px;padding-top:6px}.message-container{font-size:large;display:flex;justify-content:center;align-items:center;height:50%}.message-container .message{color:var(--ars-color-secondary, #4a635f);text-align:center;padding:40px}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i6.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["useSelections", "selectionSource", "parent", "item", "isReference", "isReadable", "isReadableModel", "isLawInForce", "canPrint", "canFind", "canUseCalendar", "canUseArchive"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i13.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i13.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i14.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", outputs: ["changed"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item", "actions", "tileNoPictureUrl", "tilePictureUrl", "isSelectable", "isReadable", "isReadableModel", "displayModelName", "displayMode"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i15.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
751
751
|
}
|
|
752
752
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperBrowserDialogComponent, decorators: [{
|
|
753
753
|
type: Component,
|
|
@@ -774,9 +774,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
774
774
|
NgClass,
|
|
775
775
|
ClipperSearchResultItemComponent,
|
|
776
776
|
MatPaginatorModule
|
|
777
|
-
], template: "<div class=\"clipper-browser-fixed\">\r\n <div class=\"dialog-header\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" class=\"dialog-title\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <div class=\"clipper-logo\"></div>\r\n </a>\r\n </div>\r\n @if (dialogData?.selectionMode > 0 && canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\" class=\"clipper-selection-icon-button\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"106px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (clipperService.bag.length > 0) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Documenti di lavoro\" aria-label=\"'Documenti di lavoro'\"\r\n (click)=\"openBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"clipperService.bag.length\"\r\n matBadgeColor=\"accent\">work_outline</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill style=\"padding: 10px 10px 10px 20px\">\r\n <div fxFlex=\"*\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Numero</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"filterParams.number\" #number=\"ngModel\" name=\"number\"\r\n maxlength=\"10\" (keyup.Enter)=\"fetch(true)\">\r\n @if (filterParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"filterParams.number = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"filterParams.year\" #year=\"ngModel\" name=\"year\" min=\"0\"\r\n maxlength=\"4\" (keyup.Enter)=\"fetch(true)\" />\r\n @if (filterParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (year.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"100\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Parole, frasi o concetti...</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" #text [(ngModel)]=\"filterParams.text\" maxlength=\"200\"\r\n (keyup.Enter)=\"search()\" autofocus />\r\n @if (filterParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.text = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); composeSearch()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); helpSearch()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button type=\"button\" mat-icon-button (click)=\"search()\" [attr.aria-label]=\"'Avvia la ricerca'\"\r\n matTooltip=\"Avvia ricerca\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"advancedSearch()\" [attr.aria-label]=\"'Ricerca avanzata'\"\r\n matTooltip=\"Ricerca avanzata\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>settings</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n @if (snapshot.searchInfo && snapshot.searchInfo.length > 0) {\r\n <div fxHide.xs>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill class=\"small\"\r\n style=\"padding:0 10px 0 20px;\">\r\n <div fxFlex=\"*\">\r\n <b>RICERCA ATTIVA</b> \r\n @for (si of snapshot.searchInfo; track si) {\r\n <span>\r\n {{si.sep ? ' ' : ''}} {{si.field}}: <span class=\"accent lowercase\"><i>{{si.value}}</i></span>\r\n </span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"start\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera ricerca\" (click)=\"clearSearch()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div>\r\n <div fxLayout=\"row wrap-reverse\" fxLayoutAlign=\"space-between center\" fxFill style=\"padding: 0 10px 0 15px;\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n @if (snapshot.total > 0) {\r\n <div fxFlexAlign=\"center\">\r\n <mat-checkbox (change)=\"$event ? selectAll($event) : null\"\r\n [indeterminate]=\"selection?.hasValue() && !allSelected()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\"\r\n [disabled]=\"!snapshot.items || snapshot.items.length == 0\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"*\">\r\n @if (snapshot.total > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Ordina\"\r\n [attr.aria-label]=\"'Menu ordina'\" [matMenuTriggerFor]=\"menuSort\" [disabled]=\"!snapshot.total\">\r\n <span fxHide.lt-lg>Ordina per:</span>\r\n <mat-icon fxHide.gt-md>sort</mat-icon> {{currentSort}}\r\n </button>\r\n }\r\n <mat-menu #menuSort=\"matMenu\">\r\n <button mat-menu-item (click)=\"sortBy(3)\" [attr.aria-label]=\"'Ordina per data decrescente'\">\r\n Data decrescente\r\n </button>\r\n <button mat-menu-item (click)=\"sortBy(2)\" [attr.aria-label]=\"'Ordina per data crescente'\">\r\n Data crescente\r\n </button>\r\n @if (filterParams.text) {\r\n <button mat-menu-item (click)=\"sortBy(1)\" [attr.aria-label]=\"'Ordina per rilevanza'\">\r\n Rilevanza\r\n </button>\r\n }\r\n <button mat-menu-item (click)=\"sortBy(5)\" [attr.aria-label]=\"'Ordina per popolarit\u00E0'\">\r\n Popolarit\u00E0\r\n </button>\r\n </mat-menu>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Menu modello'\"\r\n [matMenuTriggerFor]=\"menuModels\">\r\n <span fxHide.lt-lg>Mostra:</span>\r\n <mat-icon fxHide.gt-md>filter_list</mat-icon> {{currentModel}}\r\n </button>\r\n <mat-menu #menuModels=\"matMenu\">\r\n <button mat-menu-item (click)=\"changeModel(2)\" [attr.aria-label]=\"'Mostra aggiornamento normativo'\">\r\n Gazzette e bollettini\r\n </button>\r\n <button mat-menu-item (click)=\"changeModel(9)\" [attr.aria-label]=\"'Normativa vigente'\">\r\n Normativa vigente\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"changeModel()\" [attr.aria-label]=\"'Mostra tutti i documenti'\">\r\n Tutto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\" matBadgeColor=\"accent\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\"\r\n aria-label=\"'Affina ricerca'\" (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"clipper-browser-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [actions]=\"contextMenu\" [isReadable]=\"false\"\r\n [displayModelName]=\"true\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [useSelections]=\"canSelect()\" [isReadable]=\"false\"\r\n [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend expired-bg \"></div>\r\n non pi\u00F9 vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [ngClass]=\"{'wide': filterPane?.opened}\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width: 0px) and (max-width: 430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width: 431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.clipper-logo{background-size:110px 48px;width:110px;height:48px}.clipper-selection-button{width:150px;font-size:small;font-weight:600;text-transform:uppercase}.clipper-selection-icon-button{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.clipper-selection-icon-button:hover{background-color:var(--ars-color-primary-hi, #12c0ae)}.unread{color:var(--ars-color-error, #ff5449)!important}.expired{color:var(--ars-color-error-low, #a80710)!important}.expiring{color:var(--ars-color-warning, #FFC107)!important}.closed{color:var(--ars-color-ok, #388E3C)!important}.unread-bg{background-color:var(--ars-color-error, #ff5449)}.error-bg,.expired-bg{background-color:var(--ars-color-error-low, #a80710)}.expiring-bg{background-color:var(--ars-color-warning, #FFC107)}.popular-bg,.closed-bg{background-color:var(--ars-color-ok, #388E3C)!important}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-color-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .group-spaced{padding:10px 0 0!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 6px 10px 0;min-height:68px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.item-content .info-1{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent, #7894ae)}.item-content .info-2{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent-low, #456179)}.item-content .title{font-size:small!important;line-height:18px;text-decoration:none!important;font-weight:400;min-height:unset;min-width:unset;white-space:initial!important}@supports (-webkit-line-clamp: 3){.item-content .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.item-content .details{margin-top:4px;font-size:x-small!important;font-weight:700;line-height:15px;color:var(--ars-color-accent-low, #456179);text-transform:uppercase!important;border-left:4px solid var(--ars-color-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600!important;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-color-link, #03A9F4);font-weight:600!important}.item-content a.link{color:var(--ars-color-link, #03A9F4);cursor:pointer!important;text-decoration:none!important}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer!important;padding:10px 13px!important;margin-bottom:5px!important}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-color-error, #ff5449);margin:0 8px}.tile .image{height:150px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .buttons{position:absolute;left:0;top:0;height:42px}.tile .image .buttons .check,.tile .image .buttons .read{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)}.tile .date{padding:8px 0 6px!important;font-weight:700!important;text-transform:uppercase!important}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-color-divider, #757d87)}.tile .time{font-size:small!important;font-weight:700!important}.tile .title{text-decoration:none!important;font-size:15px!important;font-weight:600;min-height:50px!important;max-height:70px!important;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.tile .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:#427505;text-transform:uppercase;white-space:nowrap;color:#e0e2e5}.badge-red{background-color:#a80710}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .legend:not(:first-of-type){margin-left:10px}.special-date,.special-date-expired,.special-date-expiring{border:2px var(--ars-color-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-color-error, #ff5449) solid!important}.special-date-expiring{border:2px var(--ars-color-warning, #FFC107) solid!important}.dialog-title{padding-left:18px;padding-top:6px}.message-container{font-size:large;display:flex;justify-content:center;align-items:center;height:50%}.message-container .message{color:var(--ars-color-secondary, #4a635f);text-align:center;padding:40px}\n"] }]
|
|
777
|
+
], template: "<div class=\"clipper-browser-fixed\">\r\n <div class=\"dialog-header\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" class=\"dialog-title\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <div class=\"clipper-logo\"></div>\r\n </a>\r\n </div>\r\n @if (dialogData?.selectionMode > 0 && canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\" class=\"clipper-selection-icon-button\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"106px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (clipperService.bag.length > 0) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Documenti di lavoro\" aria-label=\"'Documenti di lavoro'\"\r\n (click)=\"openBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"clipperService.bag.length\"\r\n matBadgeColor=\"accent\">work_outline</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill style=\"padding: 10px 10px 10px 20px\">\r\n <div fxFlex=\"*\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Numero</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"filterParams.number\" #number=\"ngModel\" name=\"number\"\r\n maxlength=\"10\" (keyup.Enter)=\"fetch(true)\">\r\n @if (filterParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"filterParams.number = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"filterParams.year\" #year=\"ngModel\" name=\"year\" min=\"0\"\r\n maxlength=\"4\" (keyup.Enter)=\"fetch(true)\" />\r\n @if (filterParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (year.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"100\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Parole, frasi o concetti...</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" #text [(ngModel)]=\"filterParams.text\" maxlength=\"200\"\r\n (keyup.Enter)=\"search()\" autofocus />\r\n @if (filterParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.text = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); composeSearch()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); helpSearch()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button type=\"button\" mat-icon-button (click)=\"search()\" [attr.aria-label]=\"'Avvia la ricerca'\"\r\n matTooltip=\"Avvia ricerca\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"advancedSearch()\" [attr.aria-label]=\"'Ricerca avanzata'\"\r\n matTooltip=\"Ricerca avanzata\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>settings</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n @if (snapshot.searchInfo && snapshot.searchInfo.length > 0) {\r\n <div fxHide.xs>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill class=\"small\"\r\n style=\"padding:0 10px 0 20px;\">\r\n <div fxFlex=\"*\">\r\n <b>RICERCA ATTIVA</b> \r\n @for (si of snapshot.searchInfo; track si) {\r\n <span>\r\n {{si.sep ? ' ' : ''}} {{si.field}}: <span class=\"accent lowercase\"><i>{{si.value}}</i></span>\r\n </span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"start\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera ricerca\" (click)=\"clearSearch()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div>\r\n <div fxLayout=\"row wrap-reverse\" fxLayoutAlign=\"space-between center\" fxFill style=\"padding: 0 10px 0 15px;\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n @if (snapshot.total > 0) {\r\n <div fxFlexAlign=\"center\">\r\n <mat-checkbox (change)=\"$event ? selectAll($event) : null\"\r\n [indeterminate]=\"selection?.hasValue() && !allSelected()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\"\r\n [disabled]=\"!snapshot.items || snapshot.items.length == 0\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"*\">\r\n @if (snapshot.total > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Ordina\"\r\n [attr.aria-label]=\"'Menu ordina'\" [matMenuTriggerFor]=\"menuSort\" [disabled]=\"!snapshot.total\">\r\n <span fxHide.lt-lg>Ordina per:</span>\r\n <mat-icon fxHide.gt-md>sort</mat-icon> {{currentSort}}\r\n </button>\r\n }\r\n <mat-menu #menuSort=\"matMenu\">\r\n <button mat-menu-item (click)=\"sortBy(3)\" [attr.aria-label]=\"'Ordina per data decrescente'\">\r\n Data decrescente\r\n </button>\r\n <button mat-menu-item (click)=\"sortBy(2)\" [attr.aria-label]=\"'Ordina per data crescente'\">\r\n Data crescente\r\n </button>\r\n @if (filterParams.text) {\r\n <button mat-menu-item (click)=\"sortBy(1)\" [attr.aria-label]=\"'Ordina per rilevanza'\">\r\n Rilevanza\r\n </button>\r\n }\r\n <button mat-menu-item (click)=\"sortBy(5)\" [attr.aria-label]=\"'Ordina per popolarit\u00E0'\">\r\n Popolarit\u00E0\r\n </button>\r\n </mat-menu>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Menu modello'\"\r\n [matMenuTriggerFor]=\"menuModels\">\r\n <span fxHide.lt-lg>Mostra:</span>\r\n <mat-icon fxHide.gt-md>filter_list</mat-icon> {{currentModel}}\r\n </button>\r\n <mat-menu #menuModels=\"matMenu\">\r\n <button mat-menu-item (click)=\"changeModel(2)\" [attr.aria-label]=\"'Mostra aggiornamento normativo'\">\r\n Gazzette e bollettini\r\n </button>\r\n <button mat-menu-item (click)=\"changeModel(9)\" [attr.aria-label]=\"'Normativa vigente'\">\r\n Normativa vigente\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"changeModel()\" [attr.aria-label]=\"'Mostra tutti i documenti'\">\r\n Tutto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\" matBadgeColor=\"accent\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\"\r\n aria-label=\"'Affina ricerca'\" (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content id=\"clipper-browser-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [actions]=\"contextMenu\" [isReadable]=\"false\"\r\n [displayModelName]=\"true\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [useSelections]=\"canSelect()\" [isReadable]=\"false\"\r\n [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend expired-bg \"></div>\r\n non pi\u00F9 vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [ngClass]=\"{'wide': filterPane?.opened}\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width: 0px) and (max-width: 430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width: 431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.clipper-logo{background-size:110px 48px;width:110px;height:48px}.clipper-selection-button{width:150px;font-size:small;font-weight:600;text-transform:uppercase}.clipper-selection-icon-button{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.clipper-selection-icon-button:hover{background-color:var(--ars-color-primary-hi, #12c0ae)}.unread{color:var(--ars-color-error, #ff5449)!important}.expired{color:var(--ars-color-error-low, #a80710)!important}.expiring{color:var(--ars-color-warning, #FFC107)!important}.closed{color:var(--ars-color-ok, #388E3C)!important}.unread-bg{background-color:var(--ars-color-error, #ff5449)}.error-bg,.expired-bg{background-color:var(--ars-color-error-low, #a80710)}.expiring-bg{background-color:var(--ars-color-warning, #FFC107)}.popular-bg,.closed-bg{background-color:var(--ars-color-ok, #388E3C)!important}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-color-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .group-spaced{padding:10px 0 0!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 6px 10px 0;min-height:68px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.item-content .info-1{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent, #7894ae)}.item-content .info-2{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent-low, #456179)}.item-content .title{font-size:small!important;line-height:18px;text-decoration:none!important;font-weight:400;min-height:unset;min-width:unset;white-space:initial!important}@supports (-webkit-line-clamp: 3){.item-content .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.item-content .details{margin-top:4px;font-size:x-small!important;font-weight:700;line-height:15px;color:var(--ars-color-accent-low, #456179);text-transform:uppercase!important;border-left:4px solid var(--ars-color-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600!important;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-color-link, #03A9F4);font-weight:600!important}.item-content a.link{color:var(--ars-color-link, #03A9F4);cursor:pointer!important;text-decoration:none!important}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer!important;padding:10px 13px!important;margin-bottom:5px!important}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-color-error, #ff5449);margin:0 8px}.tile .image{height:150px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .buttons{position:absolute;left:0;top:0;height:42px}.tile .image .buttons .check,.tile .image .buttons .read{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)}.tile .date{padding:8px 0 6px!important;font-weight:700!important;text-transform:uppercase!important}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-color-divider, #757d87)}.tile .time{font-size:small!important;font-weight:700!important}.tile .title{text-decoration:none!important;font-size:15px!important;font-weight:600;min-height:50px!important;max-height:70px!important;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.tile .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:#427505;text-transform:uppercase;white-space:nowrap;color:#e0e2e5}.badge-red{background-color:#a80710}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .legend:not(:first-of-type){margin-left:10px}.special-date,.special-date-expired,.special-date-expiring{border:2px var(--ars-color-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-color-error, #ff5449) solid!important}.special-date-expiring{border:2px var(--ars-color-warning, #FFC107) solid!important}.dialog-title{padding-left:18px;padding-top:6px}.message-container{font-size:large;display:flex;justify-content:center;align-items:center;height:50%}.message-container .message{color:var(--ars-color-secondary, #4a635f);text-align:center;padding:40px}\n"] }]
|
|
778
778
|
}], propDecorators: { filterPane: [{
|
|
779
779
|
type: ViewChild,
|
|
780
780
|
args: ['filterPane']
|
|
781
781
|
}] } });
|
|
782
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1B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QUNkLGFBQWEsOEJBQ2Isa0JBQWtCLHdnQkFDbEIsY0FBYywwV0FDZCxXQUFXLDhtQ0FDWCxpQkFBaUIscVlBQ2pCLGFBQWEsMDFCQUNiLGdCQUFnQixvSUFDaEIsNEJBQTRCLDRQQUM1QixnQkFBZ0Isd0dBQ2hCLGdCQUFnQiwwZEFDaEIsb0JBQW9CLDBOQUNwQiw0QkFBNEIsd0ZBQzVCLE9BQU8sb0ZBQ1AsZ0NBQWdDLHVPQUNoQyxrQkFBa0I7OzJGQUdULDZCQUE2QjtrQkFoQ3pDLFNBQVM7MkJBQ0YsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLGFBR2pDO3dCQUNULCtDQUErQztxQkFDaEQsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxXQUFXO3dCQUNYLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3dCQUM1QixPQUFPO3dCQUNQLGdDQUFnQzt3QkFDaEMsa0JBQWtCO3FCQUNuQjs4QkFLd0IsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yTW9kdWxlLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdERyYXdlciwgTWF0U2lkZW5hdk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyQXV0aG9ycyxcclxuICBDbGlwcGVyRG9jdW1lbnRDaGFuZ2VSZWFzb25zLFxyXG4gIENsaXBwZXJEb2N1bWVudEluZm8sXHJcbiAgQ2xpcHBlck1lc3NhZ2VzLFxyXG4gIENsaXBwZXJNb2RlbCxcclxuICBDbGlwcGVyTW9kZWxzLFxyXG4gIENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCxcclxuICBDbGlwcGVyU2VhcmNoUGFyYW1zLFxyXG4gIENsaXBwZXJTZWFyY2hSZXN1bHQsXHJcbiAgQ2xpcHBlclNlYXJjaFV0aWxzLFxyXG4gIENsaXBwZXJTZWN0b3JUeXBlcyxcclxuICBDbGlwcGVyU2VjdG9ycyxcclxuICBDbGlwcGVyU2VsZWN0aW9uTW9kZSxcclxuICBDbGlwcGVyU29ydCxcclxuICBDbGlwcGVyU291cmNlc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzLCBUaGVtZVR5cGUgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRzVXRpbHMgfSBmcm9tICcuLi8uLi9kb2N1bWVudHMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQsIENsaXBwZXJTZWFyY2hEaWFsb2dEYXRhIH0gZnJvbSAnLi4vc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZmFjZXRzL3NlYXJjaC1mYWNldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZyZWVUZXh0SGVscENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mcmVlLXRleHQtaGVscC9zZWFyY2gtZnJlZS10ZXh0LWhlbHAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZyZWVUZXh0UXVlcnlCdWlsZGVyQ29tcG9uZW50LCBTZWFyY2hGcmVlVGV4dFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyL3NlYXJjaC1mcmVlLXRleHQtcXVlcnktYnVpbGRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGlwcGVyQnJvd3NlckRpYWxvZ0RhdGEge1xyXG4gIHNlbGVjdGlvbk1vZGU/OiBDbGlwcGVyU2VsZWN0aW9uTW9kZSB8IG51bGwsXHJcbiAgc2VsZWN0YWJsZU1vZGVscz86IG51bWJlcltdIHwgbnVsbCxcclxuICBpbml0aWFsTW9kZWw/OiBudW1iZXIgfCBudWxsLFxyXG4gIHRoZW1lPzogVGhlbWVUeXBlIHwgbnVsbCxcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgaG9zdDogeyAnQmluZCc6IFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jyb3dzZXItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9icm93c2VyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVJcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgRmxleExheW91dE1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QmFkZ2VNb2R1bGUsXHJcbiAgICBNYXRUYWJzTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIE1hdERpdmlkZXJNb2R1bGUsXHJcbiAgICBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50LFxyXG4gICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgQ2xpcHBlclNlYXJjaFJlc3VsdEl0ZW1Db21wb25lbnQsXHJcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGVcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckJyb3dzZXJEaWFsb2dDb21wb25lbnRcclxuICBleHRlbmRzIENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyXHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyUGFuZScpIGZpbHRlclBhbmUhOiBNYXREcmF3ZXI7XHJcblxyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxDbGlwcGVyQnJvd3NlckRpYWxvZ0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyQnJvd3NlckRpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKTtcclxuICBwcm90ZWN0ZWQgdGl0bGU6IHN0cmluZyA9ICdSaWNlcmNhIGluIENsaXBwZXInO1xyXG4gIHByb3RlY3RlZCBzbmFwc2hvdDogQ2xpcHBlclNlYXJjaFJlc3VsdCA9IHtcclxuICAgIHNlYXJjaEluZm86IG51bGwsXHJcbiAgICBzZWFyY2hQYXJhbXM6IHsgdmVyc2lvbjogNyB9XHJcbiAgfTtcclxuXHJcbiAgcHJvdGVjdGVkIGN1cnJlbnRNb2RlbDogc3RyaW5nID0gJ1R1dHRvJztcclxuICBwcm90ZWN0ZWQgY3VycmVudFNvcnQ6IHN0cmluZyA9ICdSaWxldmFuemEnO1xyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBVc2Ugc2VydmljZSBzbmFwc2hvdFxyXG4gICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuY2xpcHBlclNlcnZpY2Uuc25hcHNob3QoKTtcclxuICAgIGlmICghdGhpcy5zbmFwc2hvdClcclxuICAgICAgdGhpcy5zbmFwc2hvdCA9IHtcclxuICAgICAgICBzZWFyY2hJbmZvOiBudWxsLFxyXG4gICAgICAgIHNlYXJjaFBhcmFtczogbnVsbCxcclxuICAgICAgfTtcclxuICAgIGlmICghdGhpcy5maWx0ZXJQYXJhbXMpIHtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAvLyBTdG9yZSBzbmFwc2hvdFxyXG4gICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnNuYXBzaG90LnNldCh0aGlzLnNuYXBzaG90KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgbmV3IHZlcnNpb25cclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLnZlcnNpb24gPSA3O1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3RhYmxlTW9kZWw8Q2xpcHBlckRvY3VtZW50SW5mbywgc3RyaW5nPih0cnVlLCAnZG9jdW1lbnRJZCcpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBtb2RlbFxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5pbml0aWFsTW9kZWwpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VNb2RlbCh0aGlzLmRpYWxvZ0RhdGEuaW5pdGlhbE1vZGVsLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLmdldE1lc3NhZ2UoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUobWVzc2FnZSA9PiB7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRF9JTk5FUikge1xyXG4gICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRCwgbWVzc2FnZS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSgyNTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnZpc2libGUuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIHRoaXMuY2xpcHBlclNlcnZpY2UudmlzaWJsZS5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBIYW5kbGUgZmlsdGVyIHBhbmUgXHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgLy8gSGFuZGxlIGZhY2V0c1xyXG4gICAgICBpZiAodGhpcy5mYWNldHMpIHtcclxuICAgICAgICB0aGlzLmZhY2V0cy5jaGFuZ2VkXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmVzaXplIFxyXG4gKi9cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLWJyb3dzZXItc2Nyb2xsYWJsZScpO1xyXG4gICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRDdXJyZW50RGlhbG9nU2Nyb2xsYWJsZUhlaWdodChcclxuICAgICAgICAgIFsnY2xpcHBlci1icm93c2VyLWZpeGVkJ10sXHJcbiAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWlnaHQgIT0gZWxlbS5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRkaW5nOjAgMCAwIDA7aGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudDttYXgtaGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcbiAgLyoqXHJcbiogUmV0dXJuIGl0ZW0gc3RhdGUgY3NzIGNsYXNzXHJcbiogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBldmFsdWF0ZVxyXG4qL1xyXG4gIG92ZXJyaWRlIGdldEl0ZW1TdGF0ZUNzc0NsYXNzKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmIChpdGVtLmlzRXhwaXJlZCkgcmV0dXJuICdleHBpcmVkLWJnJztcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBpdGVtIHN0YXRlIHRvb2x0aXAgdGV4dFxyXG4gICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gZXZhbHVhdGVcclxuICAgKi9cclxuICBvdmVycmlkZSBnZXRJdGVtU3RhdGVUb29sdGlwKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pOiBzdHJpbmcge1xyXG4gICAgaWYgKGl0ZW0uaXNFeHBpcmVkKSByZXR1cm4gJ05vbiBwacO5IHZpZ2VudGUnO1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiogU2hvdyBoaWRlIGZpbHRlciBwYW5lIG1hbnVhbGx5XHJcbiovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUZpbHRlclBhbmUoKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhbmVDbG9zZWQgPSAhdGhpcy5maWx0ZXJQYW5lQ2xvc2VkO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lPy50b2dnbGUoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZmlsdGVyIHBhbmUgdmlzaWJpbGl0eVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYW5lKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuWFNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5TbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuTWVkaXVtKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclBhbmUub3BlbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnb3Zlcic7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZUhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzRmFjZXRzKCkpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgIXRoaXMuZmlsdGVyUGFuZUNsb3NlZCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm9wZW4oKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgdGhpcy5maWx0ZXJQYW5lQ2xvc2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnc2lkZSc7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lSGFzQmFja2Ryb3AgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBkb2N1bWVudHMgY2FuIGJlIHNlbGVjdGVkIGFuZCByZXR1cm5lZCBhcyBtZXNzYWdlXHJcbiAgICovXHJcbiAgY2FuU2VsZWN0KCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFsbG93ID1cclxuICAgICAgdGhpcy5zZWxlY3Rpb24gJiZcclxuICAgICAgKCh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0aW9uTW9kZSA9PT0gMSAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkLmxlbmd0aCA9PT0gMSkgfHxcclxuICAgICAgICAodGhpcy5kaWFsb2dEYXRhLnNlbGVjdGlvbk1vZGUgPT09IDIgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkLmxlbmd0aCA+IDEpIHx8XHJcbiAgICAgICAgKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlID09PSAzICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPiAwKSk7XHJcbiAgICBpZiAoYWxsb3cgJiYgdGhpcy5kaWFsb2dEYXRhLnNlbGVjdGFibGVNb2RlbHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQuZm9yRWFjaChuID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLnNlbGVjdGFibGVNb2RlbHMuaW5kZXhPZihuLm1vZGVsKSA9PT0gLTEpIHtcclxuICAgICAgICAgIGFsbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxvdztcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kIGEgbWVzc2FnZSB3aXRoIGN1cnJlbnQgc2VsZWN0aW9uIGFuZCBjbG9zZSBkaWFsb2dcclxuICAgKi9cclxuICBzZWxlY3QoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoXHJcbiAgICAgICAgQ2xpcHBlck1lc3NhZ2VzLkRPQ1VNRU5UX1NFTEVDVEVELFxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBuZXdSb3V0ZTogdGhlIG5ldyByb3V0ZSB0byBuYXZpZ2F0ZSB0b1xyXG4gICAqL1xyXG4gIGNsb3NlKG5ld1JvdXRlOiBhbnkgPSBudWxsKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShuZXdSb3V0ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHNvcnRcclxuICAgKi9cclxuICB1cGRhdGVTb3J0T3B0aW9ucygpIHtcclxuICAgIHN3aXRjaCAodGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyU29ydC5EYXRlQXNjOlxyXG4gICAgICAgIHRoaXMuY3VycmVudFNvcnQgPSAnRGF0YSBjcmUuJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyU29ydC5Qb3B1bGFyaXR5OlxyXG4gICAgICAgIHRoaXMuY3VycmVudFNvcnQgPSAnUG9wb2xhcml0w6AnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENsaXBwZXJTb3J0LlJlbGV2YW5jZTpcclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gJ1JpbGV2YW56YSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUgPSBDbGlwcGVyU29ydC5EYXRlRGVzYztcclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gJ0RhdGEgZGVjci4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBjdXJyZW50IHNlYXJjaCBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hJbmZvKCkge1xyXG4gICAgbGV0IHNpID0gW107XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciB8fFxyXG4gICAgICAodGhpcy5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcilcclxuICAgICkge1xyXG4gICAgICBjb25zdCBzID0gQ2xpcHBlclNlY3RvcnMuZmluZChuID0+IG4udmFsdWUgPT09XHJcbiAgICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvclxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IpKTtcclxuICAgICAgaWYgKHMpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAnc2V0dG9yZScsXHJcbiAgICAgICAgICB2YWx1ZTogcy5uYW1lLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHMgPSBDbGlwcGVyTW9kZWxzLmZpbmQobiA9PiBuLnZhbHVlID09PVxyXG4gICAgICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvcikpKTtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc2V6aW9uZScsXHJcbiAgICAgICAgICAgIHZhbHVlOiBzLm5hbWUsXHJcbiAgICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3IgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3IpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgYSA9IENsaXBwZXJBdXRob3JzLmZpbmQobiA9PiBuLnZhbHVlID09PVxyXG4gICAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3JcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuYXV0aG9yKSk7XHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZDogJ2F1dG9yZScsXHJcbiAgICAgICAgICB2YWx1ZTogYS5uYW1lLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMudG9waWMpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYXJnb21lbnRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMudG9waWMsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy50YXhvbm9teSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhcmdvbWVudG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy50YXhvbm9teU5vZGUsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5udW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtZXJvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMubnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNuYXBzaG90LmludGVydmFsICYmXHJcbiAgICAgICh0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSB8fFxyXG4gICAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJlxyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlICYmXHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCAhPT1cclxuICAgICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKSlcclxuICAgICkge1xyXG4gICAgICBsZXQgZDEgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGU7XHJcbiAgICAgIGNvbnN0IGQyID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogIWQyID8gJ2luIGRhdGEnIDogJ2RhIGRhdGEnLFxyXG4gICAgICAgIHZhbHVlOiBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGQxKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNuYXBzaG90LmludGVydmFsICYmXHJcbiAgICAgICh0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgfHxcclxuICAgICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGUgJiZcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsICE9PVxyXG4gICAgICAgICAgQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8pKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2EgZGF0YScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZCksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmludGVydmFsKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2ludGVydmFsbG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLnNuYXBzaG90LmludGVydmFsLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc291cmNlKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2ZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuYXJyYXlHZXRWYWx1ZShcclxuICAgICAgICAgIENsaXBwZXJTb3VyY2VzLFxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZU51bWJlcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdudW0uIGZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlTnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZUZyb21EYXRlIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJlxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSAmJlxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsID09PVxyXG4gICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkMSA9XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VGcm9tRGF0ZTtcclxuICAgICAgY29uc3QgZDIgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAhZDIgPyAnaW4gZGF0YSBmb250ZScgOiAnZGEgZGF0YSBmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZDEpLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZVRvRGF0ZSB8fFxyXG4gICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlICYmXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgPT09XHJcbiAgICAgICAgQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8pXHJcbiAgICApIHtcclxuICAgICAgbGV0IGQgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYSBkYXRhIGZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShkKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAndGVzdG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy50ZXh0LFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnR5cGUgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHQgPSBDbGlwcGVyU2VjdG9yVHlwZXMuZmluZChuID0+IG4udmFsdWUgPT09XHJcbiAgICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnR5cGUpKTtcclxuICAgICAgaWYgKHQpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAndGlwbycsXHJcbiAgICAgICAgICB2YWx1ZTogdC5uYW1lLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2hvd1VucmVhZERvY3VtZW50c09ubHkpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnc3RhdG8nLFxyXG4gICAgICAgIHZhbHVlOiAnbm9uIGxldHRpJyxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VSZWFzb24gfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5yZWFzb24pXHJcbiAgICApXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAndGlwbyBtb2QuJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuYXJyYXlHZXRWYWx1ZShcclxuICAgICAgICAgIENsaXBwZXJEb2N1bWVudENoYW5nZVJlYXNvbnMsXHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8ucmVhc29uXHJcbiAgICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnJlYXNvblxyXG4gICAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZVJlYXNvblxyXG4gICAgICAgICksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkTnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bS4gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWROdW1iZXIsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkWWVhcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhbm5vIG1vZGlmaWNhdG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkWWVhcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRUaXRsZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICd0aXRvbG8gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRUaXRsZSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyTnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bS4gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllck51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyWWVhcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhbm5vIG1vZGlmaWNhbnRlJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJZZWFyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJUaXRsZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICd0aXRvbG8gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllclRpdGxlLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hJbmZvID0gc2k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ2hhbmdlIHNlYXJjaCBtb2RlbFxyXG4gKiBAcGFyYW0gbW9kZWwgOiB0aGUgbmV3IGRvY3VtZW50IG1vZGVsIFxyXG4gKiBAcGFyYW0gZmV0Y2ggOiB0cnVlIGlmIGRhdGEgbXVzdCBiZSBmZXRjaGVkLiBEZWZhdWx0IGlzIHRydWVcclxuICovXHJcbiAgY2hhbmdlTW9kZWwobW9kZWw6IG51bWJlciA9IG51bGwsIGZldGNoOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgPSBtb2RlbDtcclxuICAgIHN3aXRjaCAobW9kZWwpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2bzogdGhpcy5jdXJyZW50TW9kZWwgPSBcIkdhenpldHRlIGUgYm9sbGV0dGluaVwiOyBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZTogdGhpcy5jdXJyZW50TW9kZWwgPSBcIk5vcm1hdGl2YSB2aWdlbnRlXCI7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY3VycmVudE1vZGVsID0gXCJUdXR0b1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKGZldGNoKVxyXG4gICAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgYSBzb3J0XHJcbiAgICogQHBhcmFtIG1vZGUgOiB0aGUgc29ydCBtb2RlXHJcbiAgICovXHJcbiAgc29ydEJ5KG1vZGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUgPSBtb2RlO1xyXG4gICAgdGhpcy51cGRhdGVTb3J0T3B0aW9ucygpO1xyXG4gICAgdGhpcy5mZXRjaChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEdldCBmYWNldHNcclxuICAqIEBwYXJhbSBwYXJhbXM6IHRoZSBjbGlwcGVyIHNlYXJjaCBwYXJhbXNcclxuICAqL1xyXG4gIGZldGNoRmFjZXRzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgIHRoaXMuZmlsdGVyQnVzeS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnF1ZXJ5RmFjZXRzKHBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbGV0IGhhc0ZhY2V0cyA9IChyLnZhbHVlLmZhY2V0cz8ubGVuZ3RoID8/IDApID4gMDsgIFxyXG4gICAgICAgICAgICBpZiAoci52YWx1ZS5mYWNldHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZhY2V0cz8udXBkYXRlKHIudmFsdWUuZmFjZXRzLCByLnZhbHVlLmludGVydmFsKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgaGFzRmFjZXRzID0gdGhpcy5mYWNldHMuaGFzRmFjZXRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IHRoaXMuZmFjZXRzLnNhdmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzLmhhc1Rvb01hbnlSZXN1bHRzID0gKHRoaXMuc25hcHNob3Q/LnRvdGFsID8/IDApID49IDEwMDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaGFzRmFjZXRzLnNldChoYXNGYWNldHMpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCdXN5LnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpZGUgZmFjZXRzXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGhpZGVGYWNldHMoKSB7XHJcbiAgICB0aGlzLmhhc0ZhY2V0cy5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5mYWNldHM/LnJlc2V0KCk7XHJcbiAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgIHRoaXMuZmlsdGVyUGFuZUNsb3NlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJlcGFyZSB0ZWggc2VhcmNoIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBuZXdTZWFyY2ggOiB0cnVlIGlmIGl0IGlzIGEgbmV3IHNlYXJjaFxyXG4gICAqIEByZXR1cm4gdGhlIG5ldyBzZWFyY2ggcGFyYW1zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcmVwYXJlRmV0Y2gobmV3U2VhcmNoOiBib29sZWFuID0gZmFsc2UpOiBDbGlwcGVyU2VhcmNoUGFyYW1zIHtcclxuICAgIGNvbnN0IG5ld1BhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zKTtcclxuICAgIG5ld1BhcmFtcy5jb3VudCA9IDE1O1xyXG4gICAgaWYgKG5ld1BhcmFtcy55ZWFyID4gMCkge1xyXG4gICAgICBuZXdQYXJhbXMuZnJvbURhdGUgPSBuZXcgRGF0ZShuZXdQYXJhbXMueWVhciwgMCwgMSwgMik7XHJcbiAgICAgIG5ld1BhcmFtcy50b0RhdGUgPSBuZXcgRGF0ZShuZXdQYXJhbXMueWVhciwgMTEsIDMxLCAyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1BhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChuZXdQYXJhbXMudGV4dCkge1xyXG4gICAgICBuZXdQYXJhbXMudGV4dCA9IENsaXBwZXJTZWFyY2hVdGlscy5ub3JtYWxpemVUZXh0UXVlcnkodGhpcy5maWx0ZXJQYXJhbXMudGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAobmV3U2VhcmNoKSB7XHJcbiAgICAgIG5ld1BhcmFtcy5maXJzdCA9IDA7XHJcbiAgICAgIGlmIChuZXdQYXJhbXMudGV4dClcclxuICAgICAgICBuZXdQYXJhbXMuc29ydE1vZGUgPSBDbGlwcGVyU29ydC5SZWxldmFuY2U7XHJcbiAgICAgIGVsc2UgaWYgKCFuZXdQYXJhbXMuc29ydE1vZGUpXHJcbiAgICAgICAgbmV3UGFyYW1zLnNvcnRNb2RlID0gQ2xpcHBlclNvcnQuRGF0ZURlc2M7XHJcbiAgICAgIHRoaXMudXBkYXRlU29ydE9wdGlvbnMoKTtcclxuICAgIH1cclxuICAgIC8vIEFwcGx5IGZhY2V0c1xyXG4gICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSkge1xyXG4gICAgICBuZXdQYXJhbXMuZnJvbURhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGU7XHJcbiAgICAgIG5ld1BhcmFtcy50b0RhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlO1xyXG4gICAgICBuZXdQYXJhbXMueWVhciA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZEludGVydmFsKSB7XHJcbiAgICAgIG5ld1BhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgICAgbmV3UGFyYW1zLmZyb21EYXRlID0gbnVsbDtcclxuICAgICAgbmV3UGFyYW1zLnRvRGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZFNlY3Rvcikge1xyXG4gICAgICBuZXdQYXJhbXMuc2VjdG9yID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8udHlwZSB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZFR5cGUpIHtcclxuICAgICAgbmV3UGFyYW1zLnR5cGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8udHlwZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5jaGFuZ2VkQXV0aG9yKSB7XHJcbiAgICAgIG5ld1BhcmFtcy5hdXRob3IgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1BhcmFtcztcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBhIHNlYXJjaCB1c2luZyBjdXJyZW50IHBhcmFtc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBmZXRjaChuZXdTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ1JpY2VyY2EgaW4gY29yc28uLi4nKTtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZUZldGNoKG5ld1NlYXJjaCk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnF1ZXJ5KHNlYXJjaFBhcmFtcylcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpKSlcclxuICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnByZXBhcmVSZXN1bHRzKHIudmFsdWUpO1xyXG5cclxuICAgICAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobmV3U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIGZhY2V0c1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hGYWNldHMoc2VhcmNoUGFyYW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlRmFjZXRzKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG5ld1NlYXJjaCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwoMCk7XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIHZpZXdcclxuICAgICAgICAgIHRoaXMudXBkYXRlU2VhcmNoSW5mbygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgbmV3IHBhZ2UgcmVzdWx0XHJcbiAgICogQHBhcmFtIGUgOiB0aGUgTWF0UGFnaW5hdG9yIFBhZ2VFdmVudCBkYXRhXHJcbiAgICovXHJcbiAgZmV0Y2hNb3JlKGU6IFBhZ2VFdmVudCkge1xyXG4gICAgbGV0IGZpcnN0ID0gZS5wYWdlSW5kZXggKiB0aGlzLmZpbHRlclBhcmFtcy5jb3VudDtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gZmlyc3Q7XHJcbiAgICB0aGlzLmZldGNoKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBzZWFyY2hcclxuICAgKi9cclxuICBjbGVhclNlYXJjaCgpIHtcclxuICAgIHRoaXMuY3VycmVudE1vZGVsID0gJ05vcm1hdGl2YSB2aWdlbnRlJztcclxuICAgIHRoaXMuc25hcHNob3QuaXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC50b3RhbCA9IDA7XHJcbiAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IG51bGw7XHJcbiAgICB0aGlzLmZhY2V0cy5yZXNldCgpO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlYXJjaEluZm8oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYW4gaXRlbVxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgY3VycmVudCBxdWVyeSBvciBudWxsXHJcbiAgICogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiAgICovXHJcbiAgb3ZlcnJpZGUgb3Blbihkb2N1bWVudElkOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCwgbmV3V2luZG93OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghbmV3V2luZG93KSB0aGlzLm9wZW5Eb2N1bWVudChkb2N1bWVudElkLCBxdWVyeSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGEgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAqIEBwYXJhbSBxdWVyeTogdGhlIGN1cnJlbnQgcXVlcnkgb3IgbnVsbFxyXG4gICAqL1xyXG4gIG92ZXJyaWRlIG9wZW5Eb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgaWYgKCFkb2N1bWVudElkKSByZXR1cm47XHJcbiAgICBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlbkRvY3VtZW50KFxyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UsXHJcbiAgICAgIGRvY3VtZW50SWQsXHJcbiAgICAgIHF1ZXJ5ID8/IHRoaXMuZmlsdGVyUGFyYW1zLnRleHQsXHJcbiAgICAgIHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlLFxyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEudGhlbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wb3NlIGEgZnJlZSB0ZXh0IHNlYXJjaCBxdWVyeVxyXG4gICAqL1xyXG4gIGNvbXBvc2VTZWFyY2goKSB7XHJcbiAgICBsZXQgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb3N0cnVpc2NpIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIH0pO1xyXG4gICAgZC5jb21wb25lbnRJbnN0YW5jZS5kb25lXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IFNlYXJjaEZyZWVUZXh0UXVlcnlQYXJhbXMpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50ZXh0ID0gci5xdWVyeTtcclxuICAgICAgICBkLmNsb3NlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBQZXJmb3JtIHNlYXJjaFxyXG4gKi9cclxuICBzZWFyY2goKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID09PSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgPSBudWxsO1xyXG5cclxuICAgIC8vIFJlc2V0IHBhZ2luYXRvclxyXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG5cclxuICAgIC8vIFJlc2V0IGZhY2V0cyBzZWFyY2hcclxuICAgIHRoaXMuZmFjZXRzLnJlc2V0KCk7XHJcblxyXG4gICAgLy8gRG8gc2VhcmNoXHJcbiAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhZHZhbmNlZCBzZWFyY2hcclxuICAgKi9cclxuICBhZHZhbmNlZFNlYXJjaCgpIHtcclxuICAgIGxldCBkYXRhOiBDbGlwcGVyU2VhcmNoRGlhbG9nRGF0YSA9IHRoaXMuZmlsdGVyUGFyYW1zO1xyXG4gICAgZGF0YS5kaXNwbGF5TW9kZSA9ICdsYXdzJztcclxuICAgIGxldCBkID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlclNlYXJjaERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdyaWNlcmNhIGF2YW56YXRhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnNzAwcHgnLFxyXG4gICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogQ2xpcHBlclNlYXJjaFBhcmFtcykgPT4ge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBzZWFyY2ggcGFyYW1zXHJcbiAgICAgICAgci5tb2RlbCA9IHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zID0gcjtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy52ZXJzaW9uID0gNztcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5maXJzdCA9IDA7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuY291bnQgPSAxNTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID09PSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgcGFnaW5hdG9yXHJcbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBmYWNldHMgc2VhcmNoXHJcbiAgICAgICAgdGhpcy5mYWNldHMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgLy8gRG8gc2VhcmNoXHJcbiAgICAgICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gRmluaXNoZWRcclxuICAgICAgICBkLmNsb3NlKCk7XHJcblxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTaG93IGZyZWUgdGV4dCBoZWxwXHJcbiAqL1xyXG4gIGhlbHBTZWFyY2goKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNsaXBwZXItYnJvd3Nlci1maXhlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBjbGFzcz1cImRpYWxvZy10aXRsZVwiPlxyXG4gICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY2xpcHBlci5hcnNlZGl6aW9uaS5pdFwiIG1hdFRvb2x0aXA9XCJBcHJpIENsaXBwZXIgaW4gdW4gbnVvdm8gdGFiXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGlwcGVyLWxvZ29cIj48L2Rpdj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBAaWYgKGRpYWxvZ0RhdGE/LnNlbGVjdGlvbk1vZGUgPiAwICYmIGNhblNlbGVjdCgpKSB7XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIxNzBweFwiIGZ4RmxleC5sdC1tZD1cIjU4cHhcIj5cclxuICAgICAgICAgIDxidXR0b24gZnhIaWRlLmx0LW1kIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0KClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImNsaXBwZXItc2VsZWN0aW9uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtYWxsIHVwcGVyY2FzZVwiPlVzYSBzZWxlemlvbmU8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gZnhIaWRlLmd0LXNtIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0KClcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiVXNhIHNlbGV6aW9uZVwiIGFyaWEtbGFiZWw9XCInVXNhIGxhIHNlbGV6aW9uZSdcIiBjbGFzcz1cImNsaXBwZXItc2VsZWN0aW9uLWljb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIxMDZweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIiBjbGFzcz1cImRpYWxvZy1jbG9zZVwiPlxyXG4gICAgICAgICAgQGlmIChjbGlwcGVyU2VydmljZS5iYWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJEb2N1bWVudGkgZGkgbGF2b3JvXCIgYXJpYS1sYWJlbD1cIidEb2N1bWVudGkgZGkgbGF2b3JvJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuQmFnKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbbWF0QmFkZ2VdPVwiY2xpcHBlclNlcnZpY2UuYmFnLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPndvcmtfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ2hpdWRpXCIgYXJpYS1sYWJlbD1cIkNoaXVkaVwiIChjbGljayk9XCJjbG9zZSgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsIHN0eWxlPVwicGFkZGluZzogMTBweCAxMHB4IDEwcHggMjBweFwiPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPScxMHB4JyBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMzBweFwiIGZ4SGlkZS54cyBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLm51bWJlclwiICNudW1iZXI9XCJuZ01vZGVsXCIgbmFtZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIChrZXl1cC5FbnRlcik9XCJmZXRjaCh0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLm51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJBenplcmFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclBhcmFtcy5udW1iZXIgPSBudWxsO1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMzBweFwiIGZ4SGlkZS54cyBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLnllYXJcIiAjeWVhcj1cIm5nTW9kZWxcIiBuYW1lPVwieWVhclwiIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNFwiIChrZXl1cC5FbnRlcik9XCJmZXRjaCh0cnVlKVwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChmaWx0ZXJQYXJhbXMueWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJQYXJhbXMueWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBpZiAoeWVhci5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5Ob24gdmFsaWRvLjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFyb2xlLCBmcmFzaSBvIGNvbmNldHRpLi4uPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICNzZWFyY2hJbnB1dD1cIm1hdElucHV0XCIgdHlwZT1cInRleHRcIiAjdGV4dCBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy50ZXh0XCIgbWF4bGVuZ3RoPVwiMjAwXCJcclxuICAgICAgICAgICAgICAgIChrZXl1cC5FbnRlcik9XCJzZWFyY2goKVwiIGF1dG9mb2N1cyAvPlxyXG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLnRleHQpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyUGFyYW1zLnRleHQgPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEhpZGUueHMgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNvbXBvbmlcIiBtYXRUb29sdGlwPVwiQ29tcG9uaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidGV4dC5mb2N1cygpOyBjb21wb3NlU2VhcmNoKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5idWlsZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEhpZGUueHMgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkluZm9ybWF6aW9uaVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ29tZSBlZmZldHR1YXJlIGxhIHJpY2VyY2EgaW4gdGVzdG8gbGliZXJvXCIgKGNsaWNrKT1cInRleHQuZm9jdXMoKTsgaGVscFNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+aGVscF9vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2VhcmNoKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBdnZpYSBsYSByaWNlcmNhJ1wiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkF2dmlhIHJpY2VyY2FcIiBbZGlzYWJsZWRdPVwiIWNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYWR2YW5jZWRTZWFyY2goKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JpY2VyY2EgYXZhbnphdGEnXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmljZXJjYSBhdmFuemF0YVwiIFtkaXNhYmxlZF09XCIhY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKHNuYXBzaG90LnNlYXJjaEluZm8gJiYgc25hcHNob3Quc2VhcmNoSW5mby5sZW5ndGggPiAwKSB7XHJcbiAgICA8ZGl2IGZ4SGlkZS54cz5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGwgY2xhc3M9XCJzbWFsbFwiXHJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nOjAgMTBweCAwIDIwcHg7XCI+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgICA8Yj5SSUNFUkNBIEFUVElWQTwvYj4mbmJzcDsmbmJzcDsmbmJzcDtcclxuICAgICAgICAgIEBmb3IgKHNpIG9mIHNuYXBzaG90LnNlYXJjaEluZm87IHRyYWNrIHNpKSB7XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAge3tzaS5zZXAgPyAnJm5ic3A7Jm5ic3A7JyA6ICcnfX0ge3tzaS5maWVsZH19OiA8c3BhbiBjbGFzcz1cImFjY2VudCBsb3dlcmNhc2VcIj48aT57e3NpLnZhbHVlfX08L2k+PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJzdGFydFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJBenplcmEgcmljZXJjYVwiIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcC1yZXZlcnNlXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsIHN0eWxlPVwicGFkZGluZzogMCAxMHB4IDAgMTVweDtcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgQGlmIChzbmFwc2hvdC50b3RhbCA+IDApIHtcclxuICAgICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3RBbGwoJGV2ZW50KSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uPy5oYXNWYWx1ZSgpICYmICFhbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbGV6aW9uYS9kZXNlbGV6aW9uYSB0dXR0bydcIiBtYXRUb29sdGlwPVwiU2VsZXppb25hL2Rlc2VsZXppb25hIHR1dHRvXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QuaXRlbXMgfHwgc25hcHNob3QuaXRlbXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgICAgICAgQGlmIChzbmFwc2hvdC50b3RhbCA+IDApIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gbWF0VG9vbHRpcD1cIk9yZGluYVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9yZGluYSdcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVNvcnRcIiBbZGlzYWJsZWRdPVwiIXNuYXBzaG90LnRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBmeEhpZGUubHQtbGc+T3JkaW5hIHBlcjo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gZnhIaWRlLmd0LW1kPnNvcnQ8L21hdC1pY29uPiB7e2N1cnJlbnRTb3J0fX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51U29ydD1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDMpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciBkYXRhIGRlY3Jlc2NlbnRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBEYXRhIGRlY3Jlc2NlbnRlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDIpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciBkYXRhIGNyZXNjZW50ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgRGF0YSBjcmVzY2VudGVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJQYXJhbXMudGV4dCkge1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzb3J0QnkoMSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcmRpbmEgcGVyIHJpbGV2YW56YSdcIj5cclxuICAgICAgICAgICAgICAgICAgUmlsZXZhbnphXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDUpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciBwb3BvbGFyaXTDoCdcIj5cclxuICAgICAgICAgICAgICAgICAgUG9wb2xhcml0w6BcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01lbnUgbW9kZWxsbydcIlxyXG4gICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVNb2RlbHNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGZ4SGlkZS5sdC1sZz5Nb3N0cmE6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZ4SGlkZS5ndC1tZD5maWx0ZXJfbGlzdDwvbWF0LWljb24+IHt7Y3VycmVudE1vZGVsfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnVNb2RlbHM9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoYW5nZU1vZGVsKDIpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGFnZ2lvcm5hbWVudG8gbm9ybWF0aXZvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBHYXp6ZXR0ZSBlIGJvbGxldHRpbmlcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaGFuZ2VNb2RlbCg5KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ05vcm1hdGl2YSB2aWdlbnRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBOb3JtYXRpdmEgdmlnZW50ZVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTW9kZWwoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSB0dXR0aSBpIGRvY3VtZW50aSdcIj5cclxuICAgICAgICAgICAgICAgICAgVHV0dG9cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICBAaWYgKHNlbGVjdGlvbj8uaGFzVmFsdWUoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkF6aW9uaSBkYSBlc2VndWlyZSBzdWdsaSBlbGVtZW50aSBzZWxlemlvbmF0aVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01lbnUgb3B6aW9uaSBwZXIgZWxlbWVudGkgc2VsZXppb25hdGknXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVTZWxlY3Rpb25zXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzbmFwc2hvdC50b3RhbFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFttYXRCYWRnZV09XCJzZWxlY3Rpb24/LmFsbC5sZW5ndGhcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+Y2hlY2tsaXN0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtZW51U2VsZWN0aW9ucz1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgPGNsaXBwZXItZG9jdW1lbnQtbWVudSBbcGFyZW50XT1cInRoaXNcIiBzZWxlY3Rpb25Tb3VyY2U9XCJzZWxlY3Rpb25cIiBbdXNlU2VsZWN0aW9uc109XCJjYW5TZWxlY3QoKVwiXHJcbiAgICAgICAgICAgICAgW2lzUmVhZGFibGVdPVwiZmFsc2VcIiBbaXNMYXdJbkZvcmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPC9jbGlwcGVyLWRvY3VtZW50LW1lbnU+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgQGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdC5mYWNldHM/Lmhhc0ZhY2V0cyAmJiBmaWx0ZXJQYW5lICYmICghZmlsdGVyUGFuZS5vcGVuZWQgfHwgZmlsdGVyUGFuZUNsb3NlZCkpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJBZmZpbmEgcmljZXJjYVwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCInQWZmaW5hIHJpY2VyY2EnXCIgKGNsaWNrKT1cInRvZ2dsZUZpbHRlclBhbmUoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bWVudV9vcGVuPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG1hdC1kaWFsb2ctY29udGVudCBpZD1cImNsaXBwZXItYnJvd3Nlci1zY3JvbGxhYmxlXCI+XHJcbiAgPG1hdC1kcmF3ZXItY29udGFpbmVyIGNsYXNzPVwiZmlsbFwiPlxyXG4gICAgPG1hdC1kcmF3ZXIgI2ZpbHRlclBhbmUgcG9zaXRpb249XCJlbmRcIiBjbGFzcz1cImRyYXdlci1zbWFsbCBkcmF3ZXItd2l0aC1sb2FkZXJcIiBvcGVuZWQ9XCJmYWxzZVwiPlxyXG4gICAgICBAaWYgKGZpbHRlckJ1c3koKSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCI2cHhcIj5cclxuICAgICAgICAgIEBpZiAoZmlsdGVyQnVzeSgpKSB7XHJcbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBzdHlsZT1cInotaW5kZXg6IDExO1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+XHJcbiAgICAgICAgICA8L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCI1NnB4XCIgY2xhc3M9XCJ0aXRsZS1jb250YWluZXItd2l0aC1sb2FkZXJcIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRpdGxlXCI+QWZmaW5hIHJpY2VyY2E8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZUZpbHRlclBhbmUoKVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTmFzY29uZGlcIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGNsYXNzPVwic2Nyb2xsLWhpZGRlblwiPlxyXG4gICAgICAgICAgPGNsaXBwZXItc2VhcmNoLWZhY2V0cyAjZmFjZXRzPjwvY2xpcHBlci1zZWFyY2gtZmFjZXRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWRyYXdlcj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIFtpZF09XCJzY3JvbGxlcklkXCIgY2xhc3M9XCJzY3JvbGwtYXV0b1wiIHN0eWxlPVwicGFkZGluZzogMCA1cHg7XCI+XHJcbiAgICAgICAgQGlmICghc25hcHNob3QudG90YWwpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWVzc2FnZVwiPjxiPk5lc3N1biBlbGVtZW50byBkYSB2aXN1YWxpenphcmUuPC9iPjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzbmFwc2hvdC5pdGVtczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgQGlmIChpdGVtLmdyb3VwKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2dyb3VwLXNwYWNlZCc6IGkgPiAwfVwiPnt7aXRlbS5ncm91cH19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxjbGlwcGVyLXNlYXJjaC1yZXN1bHQtaXRlbSBbaXRlbV09XCJpdGVtXCIgW3BhcmVudF09XCJ0aGlzXCIgW2FjdGlvbnNdPVwiY29udGV4dE1lbnVcIiBbaXNSZWFkYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtkaXNwbGF5TW9kZWxOYW1lXT1cInRydWVcIj48L2NsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIiAoY2xvc2VkKT1cInVwZGF0ZU1lbnVCdXR0b25zVmlzaWJpbGl0eSgpXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICA8Y2xpcHBlci1kb2N1bWVudC1tZW51IFtwYXJlbnRdPVwidGhpc1wiIFtpdGVtXT1cIml0ZW1cIiBbdXNlU2VsZWN0aW9uc109XCJjYW5TZWxlY3QoKVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFtpc0xhd0luRm9yY2VdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDwvY2xpcHBlci1kb2N1bWVudC1tZW51PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIGZvb3RlciAtLT5cclxuICAgICAgQGlmICgoc25hcHNob3Q/LnRvdGFsID8/IDApID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZm9vdGVyXCI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgPCEtLSBsZWdlbmQgLS0+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleC5sdC1tZD1cIjEwMFwiIGNsYXNzPVwibGVnZW5kLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kIGV4cGlyZWQtYmcgXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIG5vbiBwacO5IHZpZ2VudGVcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXgubHQtbWQ9XCIxMDBcIiBmeExheW91dEFsaWduPVwiZW5kXCIgW25nQ2xhc3NdPVwieyd3aWRlJzogZmlsdGVyUGFuZT8ub3BlbmVkfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1wYWdpbmF0b3IgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiAjcGFnaW5hdG9yIGNsYXNzPVwicGFnaW5hdG9yXCIgW2hpZGVQYWdlU2l6ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwic25hcHNob3Q/LnRvdGFsID8/IDBcIiBbcGFnZVNpemVdPVwiZmlsdGVyUGFyYW1zLmNvdW50ID8/IDE1XCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgKHBhZ2UpPVwiZmV0Y2hNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1kcmF3ZXItY29udGFpbmVyPlxyXG48L21hdC1kaWFsb2ctY29udGVudD4iXX0=
|
|
782
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvYnJvd3Nlci1kaWFsb2cvYnJvd3Nlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1B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QUNkLGFBQWEsOEJBQ2Isa0JBQWtCLHdnQkFDbEIsY0FBYywwV0FDZCxXQUFXLDhtQ0FDWCxpQkFBaUIscVlBQ2pCLGFBQWEsMDFCQUNiLGdCQUFnQixvSUFDaEIsNEJBQTRCLDRQQUM1QixnQkFBZ0Isd0dBQ2hCLGdCQUFnQiwwZEFDaEIsb0JBQW9CLDBOQUNwQiw0QkFBNEIsd0ZBQzVCLE9BQU8sb0ZBQ1AsZ0NBQWdDLHVPQUNoQyxrQkFBa0I7OzJGQUdULDZCQUE2QjtrQkFoQ3pDLFNBQVM7MkJBQ0YsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLGFBR2pDO3dCQUNULCtDQUErQztxQkFDaEQsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxXQUFXO3dCQUNYLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3dCQUM1QixPQUFPO3dCQUNQLGdDQUFnQzt3QkFDaEMsa0JBQWtCO3FCQUNuQjs4QkFLd0IsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yTW9kdWxlLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdERyYXdlciwgTWF0U2lkZW5hdk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyQXV0aG9ycyxcclxuICBDbGlwcGVyRG9jdW1lbnRDaGFuZ2VSZWFzb25zLFxyXG4gIENsaXBwZXJEb2N1bWVudEluZm8sXHJcbiAgQ2xpcHBlck1lc3NhZ2VzLFxyXG4gIENsaXBwZXJNb2RlbCxcclxuICBDbGlwcGVyTW9kZWxzLFxyXG4gIENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCxcclxuICBDbGlwcGVyU2VhcmNoUGFyYW1zLFxyXG4gIENsaXBwZXJTZWFyY2hSZXN1bHQsXHJcbiAgQ2xpcHBlclNlYXJjaFV0aWxzLFxyXG4gIENsaXBwZXJTZWN0b3JUeXBlcyxcclxuICBDbGlwcGVyU2VjdG9ycyxcclxuICBDbGlwcGVyU2VsZWN0aW9uTW9kZSxcclxuICBDbGlwcGVyU29ydCxcclxuICBDbGlwcGVyU291cmNlc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzLCBUaGVtZVR5cGUgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRzVXRpbHMgfSBmcm9tICcuLi8uLi9kb2N1bWVudHMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQsIENsaXBwZXJTZWFyY2hEaWFsb2dEYXRhIH0gZnJvbSAnLi4vc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZmFjZXRzL3NlYXJjaC1mYWNldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZyZWVUZXh0SGVscENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mcmVlLXRleHQtaGVscC9zZWFyY2gtZnJlZS10ZXh0LWhlbHAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZyZWVUZXh0UXVlcnlCdWlsZGVyQ29tcG9uZW50LCBTZWFyY2hGcmVlVGV4dFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyL3NlYXJjaC1mcmVlLXRleHQtcXVlcnktYnVpbGRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGlwcGVyQnJvd3NlckRpYWxvZ0RhdGEge1xyXG4gIHNlbGVjdGlvbk1vZGU/OiBDbGlwcGVyU2VsZWN0aW9uTW9kZSB8IG51bGwsXHJcbiAgc2VsZWN0YWJsZU1vZGVscz86IG51bWJlcltdIHwgbnVsbCxcclxuICBpbml0aWFsTW9kZWw/OiBudW1iZXIgfCBudWxsLFxyXG4gIHRoZW1lPzogVGhlbWVUeXBlIHwgbnVsbCxcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgaG9zdDogeyAnQmluZCc6IFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jyb3dzZXItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9icm93c2VyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVJcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgRmxleExheW91dE1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QmFkZ2VNb2R1bGUsXHJcbiAgICBNYXRUYWJzTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIE1hdERpdmlkZXJNb2R1bGUsXHJcbiAgICBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50LFxyXG4gICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgQ2xpcHBlclNlYXJjaFJlc3VsdEl0ZW1Db21wb25lbnQsXHJcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGVcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckJyb3dzZXJEaWFsb2dDb21wb25lbnRcclxuICBleHRlbmRzIENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyXHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyUGFuZScpIGZpbHRlclBhbmUhOiBNYXREcmF3ZXI7XHJcblxyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxDbGlwcGVyQnJvd3NlckRpYWxvZ0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyQnJvd3NlckRpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKTtcclxuICBwcm90ZWN0ZWQgdGl0bGU6IHN0cmluZyA9ICdSaWNlcmNhIGluIENsaXBwZXInO1xyXG4gIHByb3RlY3RlZCBzbmFwc2hvdDogQ2xpcHBlclNlYXJjaFJlc3VsdCA9IHtcclxuICAgIHNlYXJjaEluZm86IG51bGwsXHJcbiAgICBzZWFyY2hQYXJhbXM6IHsgdmVyc2lvbjogNyB9XHJcbiAgfTtcclxuXHJcbiAgcHJvdGVjdGVkIGN1cnJlbnRNb2RlbDogc3RyaW5nID0gJ1R1dHRvJztcclxuICBwcm90ZWN0ZWQgY3VycmVudFNvcnQ6IHN0cmluZyA9ICdSaWxldmFuemEnO1xyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBVc2Ugc2VydmljZSBzbmFwc2hvdFxyXG4gICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuY2xpcHBlclNlcnZpY2Uuc25hcHNob3QoKTtcclxuICAgIGlmICghdGhpcy5zbmFwc2hvdClcclxuICAgICAgdGhpcy5zbmFwc2hvdCA9IHtcclxuICAgICAgICBzZWFyY2hJbmZvOiBudWxsLFxyXG4gICAgICAgIHNlYXJjaFBhcmFtczogbnVsbCxcclxuICAgICAgfTtcclxuICAgIGlmICghdGhpcy5maWx0ZXJQYXJhbXMpIHtcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAvLyBTdG9yZSBzbmFwc2hvdFxyXG4gICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnNuYXBzaG90LnNldCh0aGlzLnNuYXBzaG90KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgbmV3IHZlcnNpb25cclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLnZlcnNpb24gPSA3O1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3RhYmxlTW9kZWw8Q2xpcHBlckRvY3VtZW50SW5mbywgc3RyaW5nPih0cnVlLCAnZG9jdW1lbnRJZCcpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBtb2RlbFxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5pbml0aWFsTW9kZWwpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VNb2RlbCh0aGlzLmRpYWxvZ0RhdGEuaW5pdGlhbE1vZGVsLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLmdldE1lc3NhZ2UoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUobWVzc2FnZSA9PiB7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRF9JTk5FUikge1xyXG4gICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5ET0NVTUVOVF9TRUxFQ1RFRCwgbWVzc2FnZS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSgyNTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnZpc2libGUuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIHRoaXMuY2xpcHBlclNlcnZpY2UudmlzaWJsZS5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBIYW5kbGUgZmlsdGVyIHBhbmUgXHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgLy8gSGFuZGxlIGZhY2V0c1xyXG4gICAgICBpZiAodGhpcy5mYWNldHMpIHtcclxuICAgICAgICB0aGlzLmZhY2V0cy5jaGFuZ2VkXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmVzaXplIFxyXG4gKi9cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLWJyb3dzZXItc2Nyb2xsYWJsZScpO1xyXG4gICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRDdXJyZW50RGlhbG9nU2Nyb2xsYWJsZUhlaWdodChcclxuICAgICAgICAgIFsnY2xpcHBlci1icm93c2VyLWZpeGVkJ10sXHJcbiAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWlnaHQgIT0gZWxlbS5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRkaW5nOjAgMCAwIDA7aGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudDttYXgtaGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcbiAgLyoqXHJcbiogUmV0dXJuIGl0ZW0gc3RhdGUgY3NzIGNsYXNzXHJcbiogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBldmFsdWF0ZVxyXG4qL1xyXG4gIG92ZXJyaWRlIGdldEl0ZW1TdGF0ZUNzc0NsYXNzKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmIChpdGVtLmlzRXhwaXJlZCkgcmV0dXJuICdleHBpcmVkLWJnJztcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBpdGVtIHN0YXRlIHRvb2x0aXAgdGV4dFxyXG4gICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gZXZhbHVhdGVcclxuICAgKi9cclxuICBvdmVycmlkZSBnZXRJdGVtU3RhdGVUb29sdGlwKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pOiBzdHJpbmcge1xyXG4gICAgaWYgKGl0ZW0uaXNFeHBpcmVkKSByZXR1cm4gJ05vbiBwacO5IHZpZ2VudGUnO1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiogU2hvdyBoaWRlIGZpbHRlciBwYW5lIG1hbnVhbGx5XHJcbiovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUZpbHRlclBhbmUoKSB7XHJcbiAgICB0aGlzLmZpbHRlclBhbmVDbG9zZWQgPSAhdGhpcy5maWx0ZXJQYW5lQ2xvc2VkO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lPy50b2dnbGUoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZmlsdGVyIHBhbmUgdmlzaWJpbGl0eVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYW5lKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuWFNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5TbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuTWVkaXVtKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclBhbmUub3BlbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnb3Zlcic7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZUhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzRmFjZXRzKCkpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgIXRoaXMuZmlsdGVyUGFuZUNsb3NlZCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm9wZW4oKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgdGhpcy5maWx0ZXJQYW5lQ2xvc2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnc2lkZSc7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lSGFzQmFja2Ryb3AgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBkb2N1bWVudHMgY2FuIGJlIHNlbGVjdGVkIGFuZCByZXR1cm5lZCBhcyBtZXNzYWdlXHJcbiAgICovXHJcbiAgY2FuU2VsZWN0KCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFsbG93ID1cclxuICAgICAgdGhpcy5zZWxlY3Rpb24gJiZcclxuICAgICAgKCh0aGlzLmRpYWxvZ0RhdGEuc2VsZWN0aW9uTW9kZSA9PT0gMSAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkLmxlbmd0aCA9PT0gMSkgfHxcclxuICAgICAgICAodGhpcy5kaWFsb2dEYXRhLnNlbGVjdGlvbk1vZGUgPT09IDIgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkLmxlbmd0aCA+IDEpIHx8XHJcbiAgICAgICAgKHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlID09PSAzICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5zZWxlY3RlZC5sZW5ndGggPiAwKSk7XHJcbiAgICBpZiAoYWxsb3cgJiYgdGhpcy5kaWFsb2dEYXRhLnNlbGVjdGFibGVNb2RlbHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQuZm9yRWFjaChuID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLnNlbGVjdGFibGVNb2RlbHMuaW5kZXhPZihuLm1vZGVsKSA9PT0gLTEpIHtcclxuICAgICAgICAgIGFsbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxvdztcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kIGEgbWVzc2FnZSB3aXRoIGN1cnJlbnQgc2VsZWN0aW9uIGFuZCBjbG9zZSBkaWFsb2dcclxuICAgKi9cclxuICBzZWxlY3QoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb24/LmN1cnJlbnQuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoXHJcbiAgICAgICAgQ2xpcHBlck1lc3NhZ2VzLkRPQ1VNRU5UX1NFTEVDVEVELFxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50LnNlbGVjdGVkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBuZXdSb3V0ZTogdGhlIG5ldyByb3V0ZSB0byBuYXZpZ2F0ZSB0b1xyXG4gICAqL1xyXG4gIGNsb3NlKG5ld1JvdXRlOiBhbnkgPSBudWxsKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShuZXdSb3V0ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHNvcnRcclxuICAgKi9cclxuICB1cGRhdGVTb3J0T3B0aW9ucygpIHtcclxuICAgIHN3aXRjaCAodGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyU29ydC5EYXRlQXNjOlxyXG4gICAgICAgIHRoaXMuY3VycmVudFNvcnQgPSAnRGF0YSBjcmUuJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyU29ydC5Qb3B1bGFyaXR5OlxyXG4gICAgICAgIHRoaXMuY3VycmVudFNvcnQgPSAnUG9wb2xhcml0w6AnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENsaXBwZXJTb3J0LlJlbGV2YW5jZTpcclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gJ1JpbGV2YW56YSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUgPSBDbGlwcGVyU29ydC5EYXRlRGVzYztcclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gJ0RhdGEgZGVjci4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBjdXJyZW50IHNlYXJjaCBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hJbmZvKCkge1xyXG4gICAgbGV0IHNpID0gW107XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvciB8fFxyXG4gICAgICAodGhpcy5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcilcclxuICAgICkge1xyXG4gICAgICBjb25zdCBzID0gQ2xpcHBlclNlY3RvcnMuZmluZChuID0+IG4udmFsdWUgPT09XHJcbiAgICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvclxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IpKTtcclxuICAgICAgaWYgKHMpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAnc2V0dG9yZScsXHJcbiAgICAgICAgICB2YWx1ZTogcy5uYW1lLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHMgPSBDbGlwcGVyTW9kZWxzLmZpbmQobiA9PiBuLnZhbHVlID09PVxyXG4gICAgICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5zZWN0b3JcclxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvcikpKTtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc2V6aW9uZScsXHJcbiAgICAgICAgICAgIHZhbHVlOiBzLm5hbWUsXHJcbiAgICAgICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3IgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3IpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgYSA9IENsaXBwZXJBdXRob3JzLmZpbmQobiA9PiBuLnZhbHVlID09PVxyXG4gICAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5hdXRob3JcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuYXV0aG9yKSk7XHJcbiAgICAgIGlmIChhKSB7XHJcbiAgICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZDogJ2F1dG9yZScsXHJcbiAgICAgICAgICB2YWx1ZTogYS5uYW1lLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMudG9waWMpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYXJnb21lbnRvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMudG9waWMsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy50YXhvbm9teSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhcmdvbWVudG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy50YXhvbm9teU5vZGUsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5udW1iZXIpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnbnVtZXJvJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMubnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnNuYXBzaG90LmludGVydmFsICYmXHJcbiAgICAgICh0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSB8fFxyXG4gICAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJlxyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlICYmXHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCAhPT1cclxuICAgICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKSlcclxuICAgICkge1xyXG4gICAgICBsZXQgZDEgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgPyB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMuZnJvbURhdGU7XHJcbiAgICAgIGNvbnN0IGQyID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogIWQyID8gJ2luIGRhdGEnIDogJ2RhIGRhdGEnLFxyXG4gICAgICAgIHZhbHVlOiBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGQxKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNuYXBzaG90LmludGVydmFsICYmXHJcbiAgICAgICh0aGlzLmZpbHRlclBhcmFtcy50b0RhdGUgfHxcclxuICAgICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGUgJiZcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsICE9PVxyXG4gICAgICAgICAgQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8pKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkID1cclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgIDogdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlO1xyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2EgZGF0YScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZCksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmludGVydmFsKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2ludGVydmFsbG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLnNuYXBzaG90LmludGVydmFsLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc291cmNlKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ2ZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuYXJyYXlHZXRWYWx1ZShcclxuICAgICAgICAgIENsaXBwZXJTb3VyY2VzLFxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZU51bWJlcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdudW0uIGZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMuc291cmNlTnVtYmVyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZUZyb21EYXRlIHx8XHJcbiAgICAgICh0aGlzLnNuYXBzaG90LmZhY2V0cyAmJlxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSAmJlxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsID09PVxyXG4gICAgICAgIENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvKVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBkMSA9XHJcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdC5mYWNldHM/LmZyb21EYXRlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VGcm9tRGF0ZTtcclxuICAgICAgY29uc3QgZDIgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAhZDIgPyAnaW4gZGF0YSBmb250ZScgOiAnZGEgZGF0YSBmb250ZScsXHJcbiAgICAgICAgdmFsdWU6IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZDEpLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnNvdXJjZVRvRGF0ZSB8fFxyXG4gICAgICAodGhpcy5zbmFwc2hvdC5mYWNldHMgJiZcclxuICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlICYmXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgPT09XHJcbiAgICAgICAgQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8pXHJcbiAgICApIHtcclxuICAgICAgbGV0IGQgPVxyXG4gICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50b0RhdGVcclxuICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnRvRGF0ZVxyXG4gICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnYSBkYXRhIGZvbnRlJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShkKSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLnRleHQpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAndGVzdG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy50ZXh0LFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnR5cGUgfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHQgPSBDbGlwcGVyU2VjdG9yVHlwZXMuZmluZChuID0+IG4udmFsdWUgPT09XHJcbiAgICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlXHJcbiAgICAgICAgICA/IHRoaXMuc25hcHNob3QuZmFjZXRzPy50eXBlXHJcbiAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLnR5cGUpKTtcclxuICAgICAgaWYgKHQpIHtcclxuICAgICAgICBzaS5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiAndGlwbycsXHJcbiAgICAgICAgICB2YWx1ZTogdC5uYW1lLFxyXG4gICAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2hvd1VucmVhZERvY3VtZW50c09ubHkpXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAnc3RhdG8nLFxyXG4gICAgICAgIHZhbHVlOiAnbm9uIGxldHRpJyxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VSZWFzb24gfHxcclxuICAgICAgKHRoaXMuc25hcHNob3QuZmFjZXRzICYmIHRoaXMuc25hcHNob3QuZmFjZXRzPy5yZWFzb24pXHJcbiAgICApXHJcbiAgICAgIHNpLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiAndGlwbyBtb2QuJyxcclxuICAgICAgICB2YWx1ZTogU3lzdGVtVXRpbHMuYXJyYXlHZXRWYWx1ZShcclxuICAgICAgICAgIENsaXBwZXJEb2N1bWVudENoYW5nZVJlYXNvbnMsXHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyAmJiB0aGlzLnNuYXBzaG90LmZhY2V0cz8ucmVhc29uXHJcbiAgICAgICAgICAgID8gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnJlYXNvblxyXG4gICAgICAgICAgICA6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZVJlYXNvblxyXG4gICAgICAgICksXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkTnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bS4gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWROdW1iZXIsXHJcbiAgICAgICAgc2VwOiBzaS5sZW5ndGggPiAwLFxyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkWWVhcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhbm5vIG1vZGlmaWNhdG8nLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5jaGFuZ2VkWWVhcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRUaXRsZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICd0aXRvbG8gbW9kaWZpY2F0bycsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyUGFyYW1zLmNoYW5nZWRUaXRsZSxcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyTnVtYmVyKVxyXG4gICAgICBzaS5wdXNoKHtcclxuICAgICAgICBmaWVsZDogJ251bS4gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllck51bWJlcixcclxuICAgICAgICBzZXA6IHNpLmxlbmd0aCA+IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyUGFyYW1zLm1vZGlmaWVyWWVhcilcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICdhbm5vIG1vZGlmaWNhbnRlJyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJZZWFyLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMubW9kaWZpZXJUaXRsZSlcclxuICAgICAgc2kucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6ICd0aXRvbG8gbW9kaWZpY2FudGUnLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclBhcmFtcy5tb2RpZmllclRpdGxlLFxyXG4gICAgICAgIHNlcDogc2kubGVuZ3RoID4gMCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hJbmZvID0gc2k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ2hhbmdlIHNlYXJjaCBtb2RlbFxyXG4gKiBAcGFyYW0gbW9kZWwgOiB0aGUgbmV3IGRvY3VtZW50IG1vZGVsIFxyXG4gKiBAcGFyYW0gZmV0Y2ggOiB0cnVlIGlmIGRhdGEgbXVzdCBiZSBmZXRjaGVkLiBEZWZhdWx0IGlzIHRydWVcclxuICovXHJcbiAgY2hhbmdlTW9kZWwobW9kZWw6IG51bWJlciA9IG51bGwsIGZldGNoOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZWwgPSBtb2RlbDtcclxuICAgIHN3aXRjaCAobW9kZWwpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2bzogdGhpcy5jdXJyZW50TW9kZWwgPSBcIkdhenpldHRlIGUgYm9sbGV0dGluaVwiOyBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZTogdGhpcy5jdXJyZW50TW9kZWwgPSBcIk5vcm1hdGl2YSB2aWdlbnRlXCI7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY3VycmVudE1vZGVsID0gXCJUdXR0b1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKGZldGNoKVxyXG4gICAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgYSBzb3J0XHJcbiAgICogQHBhcmFtIG1vZGUgOiB0aGUgc29ydCBtb2RlXHJcbiAgICovXHJcbiAgc29ydEJ5KG1vZGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMuc29ydE1vZGUgPSBtb2RlO1xyXG4gICAgdGhpcy51cGRhdGVTb3J0T3B0aW9ucygpO1xyXG4gICAgdGhpcy5mZXRjaChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEdldCBmYWNldHNcclxuICAqIEBwYXJhbSBwYXJhbXM6IHRoZSBjbGlwcGVyIHNlYXJjaCBwYXJhbXNcclxuICAqL1xyXG4gIGZldGNoRmFjZXRzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgIHRoaXMuZmlsdGVyQnVzeS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnF1ZXJ5RmFjZXRzKHBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbGV0IGhhc0ZhY2V0cyA9IChyLnZhbHVlLmZhY2V0cz8ubGVuZ3RoID8/IDApID4gMDsgIFxyXG4gICAgICAgICAgICBpZiAoci52YWx1ZS5mYWNldHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZhY2V0cz8udXBkYXRlKHIudmFsdWUuZmFjZXRzLCByLnZhbHVlLmludGVydmFsKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5mYWNldHMgJiYgdGhpcy5zbmFwc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgaGFzRmFjZXRzID0gdGhpcy5mYWNldHMuaGFzRmFjZXRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IHRoaXMuZmFjZXRzLnNhdmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZmFjZXRzLmhhc1Rvb01hbnlSZXN1bHRzID0gKHRoaXMuc25hcHNob3Q/LnRvdGFsID8/IDApID49IDEwMDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaGFzRmFjZXRzLnNldChoYXNGYWNldHMpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCdXN5LnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpZGUgZmFjZXRzXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGhpZGVGYWNldHMoKSB7XHJcbiAgICB0aGlzLmhhc0ZhY2V0cy5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5mYWNldHM/LnJlc2V0KCk7XHJcbiAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgIHRoaXMuZmlsdGVyUGFuZUNsb3NlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJlcGFyZSB0ZWggc2VhcmNoIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBuZXdTZWFyY2ggOiB0cnVlIGlmIGl0IGlzIGEgbmV3IHNlYXJjaFxyXG4gICAqIEByZXR1cm4gdGhlIG5ldyBzZWFyY2ggcGFyYW1zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcmVwYXJlRmV0Y2gobmV3U2VhcmNoOiBib29sZWFuID0gZmFsc2UpOiBDbGlwcGVyU2VhcmNoUGFyYW1zIHtcclxuICAgIGNvbnN0IG5ld1BhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zKTtcclxuICAgIG5ld1BhcmFtcy5jb3VudCA9IDE1O1xyXG4gICAgaWYgKG5ld1BhcmFtcy55ZWFyID4gMCkge1xyXG4gICAgICBuZXdQYXJhbXMuZnJvbURhdGUgPSBuZXcgRGF0ZShuZXdQYXJhbXMueWVhciwgMCwgMSwgMik7XHJcbiAgICAgIG5ld1BhcmFtcy50b0RhdGUgPSBuZXcgRGF0ZShuZXdQYXJhbXMueWVhciwgMTEsIDMxLCAyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1BhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChuZXdQYXJhbXMudGV4dCkge1xyXG4gICAgICBuZXdQYXJhbXMudGV4dCA9IENsaXBwZXJTZWFyY2hVdGlscy5ub3JtYWxpemVUZXh0UXVlcnkodGhpcy5maWx0ZXJQYXJhbXMudGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAobmV3U2VhcmNoKSB7XHJcbiAgICAgIG5ld1BhcmFtcy5maXJzdCA9IDA7XHJcbiAgICAgIGlmIChuZXdQYXJhbXMudGV4dClcclxuICAgICAgICBuZXdQYXJhbXMuc29ydE1vZGUgPSBDbGlwcGVyU29ydC5SZWxldmFuY2U7XHJcbiAgICAgIGVsc2UgaWYgKCFuZXdQYXJhbXMuc29ydE1vZGUpXHJcbiAgICAgICAgbmV3UGFyYW1zLnNvcnRNb2RlID0gQ2xpcHBlclNvcnQuRGF0ZURlc2M7XHJcbiAgICAgIHRoaXMudXBkYXRlU29ydE9wdGlvbnMoKTtcclxuICAgIH1cclxuICAgIC8vIEFwcGx5IGZhY2V0c1xyXG4gICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZSkge1xyXG4gICAgICBuZXdQYXJhbXMuZnJvbURhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uZnJvbURhdGU7XHJcbiAgICAgIG5ld1BhcmFtcy50b0RhdGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8udG9EYXRlO1xyXG4gICAgICBuZXdQYXJhbXMueWVhciA9IHRoaXMuc25hcHNob3QuZmFjZXRzPy5mcm9tRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZEludGVydmFsKSB7XHJcbiAgICAgIG5ld1BhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgICAgbmV3UGFyYW1zLmZyb21EYXRlID0gbnVsbDtcclxuICAgICAgbmV3UGFyYW1zLnRvRGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZFNlY3Rvcikge1xyXG4gICAgICBuZXdQYXJhbXMuc2VjdG9yID0gdGhpcy5zbmFwc2hvdC5mYWNldHM/LnNlY3RvcjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8udHlwZSB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cz8uY2hhbmdlZFR5cGUpIHtcclxuICAgICAgbmV3UGFyYW1zLnR5cGUgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8udHlwZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzPy5jaGFuZ2VkQXV0aG9yKSB7XHJcbiAgICAgIG5ld1BhcmFtcy5hdXRob3IgPSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uYXV0aG9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1BhcmFtcztcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBhIHNlYXJjaCB1c2luZyBjdXJyZW50IHBhcmFtc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBmZXRjaChuZXdTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ1JpY2VyY2EgaW4gY29yc28uLi4nKTtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZUZldGNoKG5ld1NlYXJjaCk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnF1ZXJ5KHNlYXJjaFBhcmFtcylcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpKSlcclxuICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnByZXBhcmVSZXN1bHRzKHIudmFsdWUpO1xyXG5cclxuICAgICAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90LnRvdGFsID4gMCkge1xyXG4gICAgICAgICAgICBpZiAobmV3U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIGZhY2V0c1xyXG4gICAgICAgICAgICAgIHRoaXMuZmV0Y2hGYWNldHMoc2VhcmNoUGFyYW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlRmFjZXRzKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG5ld1NlYXJjaCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5zY3JvbGwoMCk7XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIHZpZXdcclxuICAgICAgICAgIHRoaXMudXBkYXRlU2VhcmNoSW5mbygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgbmV3IHBhZ2UgcmVzdWx0XHJcbiAgICogQHBhcmFtIGUgOiB0aGUgTWF0UGFnaW5hdG9yIFBhZ2VFdmVudCBkYXRhXHJcbiAgICovXHJcbiAgZmV0Y2hNb3JlKGU6IFBhZ2VFdmVudCkge1xyXG4gICAgbGV0IGZpcnN0ID0gZS5wYWdlSW5kZXggKiB0aGlzLmZpbHRlclBhcmFtcy5jb3VudDtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gZmlyc3Q7XHJcbiAgICB0aGlzLmZldGNoKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBzZWFyY2hcclxuICAgKi9cclxuICBjbGVhclNlYXJjaCgpIHtcclxuICAgIHRoaXMuY3VycmVudE1vZGVsID0gJ05vcm1hdGl2YSB2aWdlbnRlJztcclxuICAgIHRoaXMuc25hcHNob3QuaXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC50b3RhbCA9IDA7XHJcbiAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IG51bGw7XHJcbiAgICB0aGlzLmZhY2V0cy5yZXNldCgpO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVNlYXJjaEluZm8oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYW4gaXRlbVxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgY3VycmVudCBxdWVyeSBvciBudWxsXHJcbiAgICogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiAgICovXHJcbiAgb3ZlcnJpZGUgb3Blbihkb2N1bWVudElkOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCwgbmV3V2luZG93OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghbmV3V2luZG93KSB0aGlzLm9wZW5Eb2N1bWVudChkb2N1bWVudElkLCBxdWVyeSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGEgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAqIEBwYXJhbSBxdWVyeTogdGhlIGN1cnJlbnQgcXVlcnkgb3IgbnVsbFxyXG4gICAqL1xyXG4gIG92ZXJyaWRlIG9wZW5Eb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgaWYgKCFkb2N1bWVudElkKSByZXR1cm47XHJcbiAgICBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlbkRvY3VtZW50KFxyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UsXHJcbiAgICAgIGRvY3VtZW50SWQsXHJcbiAgICAgIHF1ZXJ5ID8/IHRoaXMuZmlsdGVyUGFyYW1zLnRleHQsXHJcbiAgICAgIHRoaXMuZGlhbG9nRGF0YS5zZWxlY3Rpb25Nb2RlLFxyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGEudGhlbWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wb3NlIGEgZnJlZSB0ZXh0IHNlYXJjaCBxdWVyeVxyXG4gICAqL1xyXG4gIGNvbXBvc2VTZWFyY2goKSB7XHJcbiAgICBsZXQgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb3N0cnVpc2NpIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIH0pO1xyXG4gICAgZC5jb21wb25lbnRJbnN0YW5jZS5kb25lXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IFNlYXJjaEZyZWVUZXh0UXVlcnlQYXJhbXMpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50ZXh0ID0gci5xdWVyeTtcclxuICAgICAgICBkLmNsb3NlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBQZXJmb3JtIHNlYXJjaFxyXG4gKi9cclxuICBzZWFyY2goKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID09PSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3IgPSBudWxsO1xyXG5cclxuICAgIC8vIFJlc2V0IHBhZ2luYXRvclxyXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG5cclxuICAgIC8vIFJlc2V0IGZhY2V0cyBzZWFyY2hcclxuICAgIHRoaXMuZmFjZXRzLnJlc2V0KCk7XHJcblxyXG4gICAgLy8gRG8gc2VhcmNoXHJcbiAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhZHZhbmNlZCBzZWFyY2hcclxuICAgKi9cclxuICBhZHZhbmNlZFNlYXJjaCgpIHtcclxuICAgIGxldCBkYXRhOiBDbGlwcGVyU2VhcmNoRGlhbG9nRGF0YSA9IHRoaXMuZmlsdGVyUGFyYW1zO1xyXG4gICAgZGF0YS5kaXNwbGF5TW9kZSA9ICdsYXdzJztcclxuICAgIGxldCBkID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlclNlYXJjaERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdyaWNlcmNhIGF2YW56YXRhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnNzAwcHgnLFxyXG4gICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogQ2xpcHBlclNlYXJjaFBhcmFtcykgPT4ge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBzZWFyY2ggcGFyYW1zXHJcbiAgICAgICAgci5tb2RlbCA9IHRoaXMuZmlsdGVyUGFyYW1zLm1vZGVsO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zID0gcjtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy52ZXJzaW9uID0gNztcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5maXJzdCA9IDA7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuY291bnQgPSAxNTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID09PSB0aGlzLnNuYXBzaG90LmZhY2V0cz8uc2VjdG9yKVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgcGFnaW5hdG9yXHJcbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBmYWNldHMgc2VhcmNoXHJcbiAgICAgICAgdGhpcy5mYWNldHMucmVzZXQoKTtcclxuXHJcbiAgICAgICAgLy8gRG8gc2VhcmNoXHJcbiAgICAgICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gRmluaXNoZWRcclxuICAgICAgICBkLmNsb3NlKCk7XHJcblxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTaG93IGZyZWUgdGV4dCBoZWxwXHJcbiAqL1xyXG4gIGhlbHBTZWFyY2goKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNsaXBwZXItYnJvd3Nlci1maXhlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBjbGFzcz1cImRpYWxvZy10aXRsZVwiPlxyXG4gICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vY2xpcHBlci5hcnNlZGl6aW9uaS5pdFwiIG1hdFRvb2x0aXA9XCJBcHJpIENsaXBwZXIgaW4gdW4gbnVvdm8gdGFiXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGlwcGVyLWxvZ29cIj48L2Rpdj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBAaWYgKGRpYWxvZ0RhdGE/LnNlbGVjdGlvbk1vZGUgPiAwICYmIGNhblNlbGVjdCgpKSB7XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIxNzBweFwiIGZ4RmxleC5sdC1tZD1cIjU4cHhcIj5cclxuICAgICAgICAgIDxidXR0b24gZnhIaWRlLmx0LW1kIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0KClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImNsaXBwZXItc2VsZWN0aW9uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtYWxsIHVwcGVyY2FzZVwiPlVzYSBzZWxlemlvbmU8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gZnhIaWRlLmd0LXNtIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0KClcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiVXNhIHNlbGV6aW9uZVwiIGFyaWEtbGFiZWw9XCInVXNhIGxhIHNlbGV6aW9uZSdcIiBjbGFzcz1cImNsaXBwZXItc2VsZWN0aW9uLWljb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIxMDZweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIiBjbGFzcz1cImRpYWxvZy1jbG9zZVwiPlxyXG4gICAgICAgICAgQGlmIChjbGlwcGVyU2VydmljZS5iYWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJEb2N1bWVudGkgZGkgbGF2b3JvXCIgYXJpYS1sYWJlbD1cIidEb2N1bWVudGkgZGkgbGF2b3JvJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuQmFnKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbbWF0QmFkZ2VdPVwiY2xpcHBlclNlcnZpY2UuYmFnLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPndvcmtfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ2hpdWRpXCIgYXJpYS1sYWJlbD1cIkNoaXVkaVwiIChjbGljayk9XCJjbG9zZSgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsIHN0eWxlPVwicGFkZGluZzogMTBweCAxMHB4IDEwcHggMjBweFwiPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPScxMHB4JyBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMzBweFwiIGZ4SGlkZS54cyBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLm51bWJlclwiICNudW1iZXI9XCJuZ01vZGVsXCIgbmFtZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIChrZXl1cC5FbnRlcik9XCJmZXRjaCh0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLm51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJBenplcmFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclBhcmFtcy5udW1iZXIgPSBudWxsO1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMzBweFwiIGZ4SGlkZS54cyBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLnllYXJcIiAjeWVhcj1cIm5nTW9kZWxcIiBuYW1lPVwieWVhclwiIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNFwiIChrZXl1cC5FbnRlcik9XCJmZXRjaCh0cnVlKVwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChmaWx0ZXJQYXJhbXMueWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJQYXJhbXMueWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBpZiAoeWVhci5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5Ob24gdmFsaWRvLjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFyb2xlLCBmcmFzaSBvIGNvbmNldHRpLi4uPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICNzZWFyY2hJbnB1dD1cIm1hdElucHV0XCIgdHlwZT1cInRleHRcIiAjdGV4dCBbKG5nTW9kZWwpXT1cImZpbHRlclBhcmFtcy50ZXh0XCIgbWF4bGVuZ3RoPVwiMjAwXCJcclxuICAgICAgICAgICAgICAgIChrZXl1cC5FbnRlcik9XCJzZWFyY2goKVwiIGF1dG9mb2N1cyAvPlxyXG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyUGFyYW1zLnRleHQpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyUGFyYW1zLnRleHQgPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEhpZGUueHMgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNvbXBvbmlcIiBtYXRUb29sdGlwPVwiQ29tcG9uaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidGV4dC5mb2N1cygpOyBjb21wb3NlU2VhcmNoKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5idWlsZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEhpZGUueHMgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkluZm9ybWF6aW9uaVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ29tZSBlZmZldHR1YXJlIGxhIHJpY2VyY2EgaW4gdGVzdG8gbGliZXJvXCIgKGNsaWNrKT1cInRleHQuZm9jdXMoKTsgaGVscFNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+aGVscF9vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2VhcmNoKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBdnZpYSBsYSByaWNlcmNhJ1wiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkF2dmlhIHJpY2VyY2FcIiBbZGlzYWJsZWRdPVwiIWNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYWR2YW5jZWRTZWFyY2goKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JpY2VyY2EgYXZhbnphdGEnXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmljZXJjYSBhdmFuemF0YVwiIFtkaXNhYmxlZF09XCIhY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKHNuYXBzaG90LnNlYXJjaEluZm8gJiYgc25hcHNob3Quc2VhcmNoSW5mby5sZW5ndGggPiAwKSB7XHJcbiAgICA8ZGl2IGZ4SGlkZS54cz5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGwgY2xhc3M9XCJzbWFsbFwiXHJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nOjAgMTBweCAwIDIwcHg7XCI+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgICA8Yj5SSUNFUkNBIEFUVElWQTwvYj4mbmJzcDsmbmJzcDsmbmJzcDtcclxuICAgICAgICAgIEBmb3IgKHNpIG9mIHNuYXBzaG90LnNlYXJjaEluZm87IHRyYWNrIHNpKSB7XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAge3tzaS5zZXAgPyAnJm5ic3A7Jm5ic3A7JyA6ICcnfX0ge3tzaS5maWVsZH19OiA8c3BhbiBjbGFzcz1cImFjY2VudCBsb3dlcmNhc2VcIj48aT57e3NpLnZhbHVlfX08L2k+PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJzdGFydFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJBenplcmEgcmljZXJjYVwiIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcC1yZXZlcnNlXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsIHN0eWxlPVwicGFkZGluZzogMCAxMHB4IDAgMTVweDtcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgQGlmIChzbmFwc2hvdC50b3RhbCA+IDApIHtcclxuICAgICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3RBbGwoJGV2ZW50KSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uPy5oYXNWYWx1ZSgpICYmICFhbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbGV6aW9uYS9kZXNlbGV6aW9uYSB0dXR0bydcIiBtYXRUb29sdGlwPVwiU2VsZXppb25hL2Rlc2VsZXppb25hIHR1dHRvXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QuaXRlbXMgfHwgc25hcHNob3QuaXRlbXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgICAgICAgQGlmIChzbmFwc2hvdC50b3RhbCA+IDApIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gbWF0VG9vbHRpcD1cIk9yZGluYVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9yZGluYSdcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVNvcnRcIiBbZGlzYWJsZWRdPVwiIXNuYXBzaG90LnRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBmeEhpZGUubHQtbGc+T3JkaW5hIHBlcjo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gZnhIaWRlLmd0LW1kPnNvcnQ8L21hdC1pY29uPiB7e2N1cnJlbnRTb3J0fX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51U29ydD1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDMpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciBkYXRhIGRlY3Jlc2NlbnRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBEYXRhIGRlY3Jlc2NlbnRlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDIpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciBkYXRhIGNyZXNjZW50ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgRGF0YSBjcmVzY2VudGVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJQYXJhbXMudGV4dCkge1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzb3J0QnkoMSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcmRpbmEgcGVyIHJpbGV2YW56YSdcIj5cclxuICAgICAgICAgICAgICAgICAgUmlsZXZhbnphXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic29ydEJ5KDUpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3JkaW5hIHBlciBwb3BvbGFyaXTDoCdcIj5cclxuICAgICAgICAgICAgICAgICAgUG9wb2xhcml0w6BcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01lbnUgbW9kZWxsbydcIlxyXG4gICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVNb2RlbHNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGZ4SGlkZS5sdC1sZz5Nb3N0cmE6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZ4SGlkZS5ndC1tZD5maWx0ZXJfbGlzdDwvbWF0LWljb24+IHt7Y3VycmVudE1vZGVsfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnVNb2RlbHM9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoYW5nZU1vZGVsKDIpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGFnZ2lvcm5hbWVudG8gbm9ybWF0aXZvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBHYXp6ZXR0ZSBlIGJvbGxldHRpbmlcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjaGFuZ2VNb2RlbCg5KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ05vcm1hdGl2YSB2aWdlbnRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICBOb3JtYXRpdmEgdmlnZW50ZVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTW9kZWwoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSB0dXR0aSBpIGRvY3VtZW50aSdcIj5cclxuICAgICAgICAgICAgICAgICAgVHV0dG9cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICBAaWYgKHNlbGVjdGlvbj8uaGFzVmFsdWUoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkF6aW9uaSBkYSBlc2VndWlyZSBzdWdsaSBlbGVtZW50aSBzZWxlemlvbmF0aVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01lbnUgb3B6aW9uaSBwZXIgZWxlbWVudGkgc2VsZXppb25hdGknXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVTZWxlY3Rpb25zXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzbmFwc2hvdC50b3RhbFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFttYXRCYWRnZV09XCJzZWxlY3Rpb24/LmFsbC5sZW5ndGhcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+Y2hlY2tsaXN0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtZW51U2VsZWN0aW9ucz1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgPGNsaXBwZXItZG9jdW1lbnQtbWVudSBbcGFyZW50XT1cInRoaXNcIiBzZWxlY3Rpb25Tb3VyY2U9XCJzZWxlY3Rpb25cIiBbdXNlU2VsZWN0aW9uc109XCJjYW5TZWxlY3QoKVwiXHJcbiAgICAgICAgICAgICAgW2lzUmVhZGFibGVdPVwiZmFsc2VcIiBbaXNMYXdJbkZvcmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPC9jbGlwcGVyLWRvY3VtZW50LW1lbnU+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgQGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdC5mYWNldHM/Lmhhc0ZhY2V0cyAmJiBmaWx0ZXJQYW5lICYmICghZmlsdGVyUGFuZS5vcGVuZWQgfHwgZmlsdGVyUGFuZUNsb3NlZCkpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJBZmZpbmEgcmljZXJjYVwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCInQWZmaW5hIHJpY2VyY2EnXCIgKGNsaWNrKT1cInRvZ2dsZUZpbHRlclBhbmUoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bWVudV9vcGVuPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG1hdC1kaWFsb2ctY29udGVudCBpZD1cImNsaXBwZXItYnJvd3Nlci1zY3JvbGxhYmxlXCI+XHJcbiAgPG1hdC1kcmF3ZXItY29udGFpbmVyIGNsYXNzPVwiZmlsbFwiPlxyXG4gICAgPG1hdC1kcmF3ZXIgI2ZpbHRlclBhbmUgcG9zaXRpb249XCJlbmRcIiBjbGFzcz1cImRyYXdlci1zbWFsbCBkcmF3ZXItd2l0aC1sb2FkZXJcIiBvcGVuZWQ9XCJmYWxzZVwiPlxyXG4gICAgICBAaWYgKGZpbHRlckJ1c3koKSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCI2cHhcIj5cclxuICAgICAgICAgIEBpZiAoZmlsdGVyQnVzeSgpKSB7XHJcbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBzdHlsZT1cInotaW5kZXg6IDExO1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+XHJcbiAgICAgICAgICA8L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCI1NnB4XCIgY2xhc3M9XCJ0aXRsZS1jb250YWluZXItd2l0aC1sb2FkZXJcIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cInRpdGxlXCI+QWZmaW5hIHJpY2VyY2E8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZUZpbHRlclBhbmUoKVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTmFzY29uZGlcIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGNsYXNzPVwic2Nyb2xsLWhpZGRlblwiPlxyXG4gICAgICAgICAgPGNsaXBwZXItc2VhcmNoLWZhY2V0cyAjZmFjZXRzPjwvY2xpcHBlci1zZWFyY2gtZmFjZXRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWRyYXdlcj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIFtpZF09XCJzY3JvbGxlcklkXCIgY2xhc3M9XCJzY3JvbGwtYXV0b1wiIHN0eWxlPVwicGFkZGluZzogMCA1cHg7XCI+XHJcbiAgICAgICAgQGlmICghc25hcHNob3QudG90YWwpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWVzc2FnZVwiPjxiPk5lc3N1biBlbGVtZW50byBkYSB2aXN1YWxpenphcmUuPC9iPjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzbmFwc2hvdC5pdGVtczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgQGlmIChpdGVtLmdyb3VwKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2dyb3VwLXNwYWNlZCc6IGkgPiAwfVwiPnt7aXRlbS5ncm91cH19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxjbGlwcGVyLXNlYXJjaC1yZXN1bHQtaXRlbSBbaXRlbV09XCJpdGVtXCIgW3BhcmVudF09XCJ0aGlzXCIgW2FjdGlvbnNdPVwiY29udGV4dE1lbnVcIiBbaXNSZWFkYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtkaXNwbGF5TW9kZWxOYW1lXT1cInRydWVcIj48L2NsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIiAoY2xvc2VkKT1cInVwZGF0ZU1lbnVCdXR0b25zVmlzaWJpbGl0eSgpXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICA8Y2xpcHBlci1kb2N1bWVudC1tZW51IFtwYXJlbnRdPVwidGhpc1wiIFtpdGVtXT1cIml0ZW1cIiBbdXNlU2VsZWN0aW9uc109XCJjYW5TZWxlY3QoKVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFtpc0xhd0luRm9yY2VdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDwvY2xpcHBlci1kb2N1bWVudC1tZW51PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIGZvb3RlciAtLT5cclxuICAgICAgQGlmICgoc25hcHNob3Q/LnRvdGFsID8/IDApID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZm9vdGVyXCI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgPCEtLSBsZWdlbmQgLS0+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleC5sdC1tZD1cIjEwMFwiIGNsYXNzPVwibGVnZW5kLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kIGV4cGlyZWQtYmcgXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIG5vbiBwacO5IHZpZ2VudGVcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXgubHQtbWQ9XCIxMDBcIiBmeExheW91dEFsaWduPVwiZW5kXCIgW25nQ2xhc3NdPVwieyd3aWRlJzogZmlsdGVyUGFuZT8ub3BlbmVkfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1wYWdpbmF0b3IgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiAjcGFnaW5hdG9yIGNsYXNzPVwicGFnaW5hdG9yXCIgW2hpZGVQYWdlU2l6ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwic25hcHNob3Q/LnRvdGFsID8/IDBcIiBbcGFnZVNpemVdPVwiZmlsdGVyUGFyYW1zLmNvdW50ID8/IDE1XCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgKHBhZ2UpPVwiZmV0Y2hNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1kcmF3ZXItY29udGFpbmVyPlxyXG48L21hdC1kaWFsb2ctY29udGVudD4iXX0=
|