@arsedizioni/ars-utils 18.2.118 → 18.2.120

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.
@@ -1,9 +1,8 @@
1
- import { Component, computed, inject, input } from '@angular/core';
1
+ import { Component, computed, input } from '@angular/core';
2
+ import { MatTooltipModule } from '@angular/material/tooltip';
2
3
  import { MatDividerModule } from '@angular/material/divider';
3
4
  import { MatIconModule } from '@angular/material/icon';
4
5
  import { MatMenuModule } from '@angular/material/menu';
5
- import { MatTooltipModule } from '@angular/material/tooltip';
6
- import { ClipperService } from '@arsedizioni/ars-utils/clipper.common';
7
6
  import * as i0 from "@angular/core";
8
7
  import * as i1 from "@angular/material/menu";
9
8
  import * as i2 from "@angular/material/icon";
@@ -11,29 +10,20 @@ import * as i3 from "@angular/material/divider";
11
10
  import * as i4 from "@angular/material/tooltip";
12
11
  export class ClipperDocumentMenuComponent {
13
12
  constructor() {
14
- this.clipperService = inject(ClipperService);
13
+ this.parent = input();
15
14
  this.selectionSource = input('selection');
16
15
  this.selection = computed(() => {
17
- if (this.useSelections()) {
18
- switch (this.selectionSource()) {
19
- case 'bag':
20
- return this.clipperService.bag;
21
- case 'selection':
22
- return this.parent()?.selection?.all;
23
- }
24
- }
25
- return [];
16
+ return this.selectionSource() === 'selection'
17
+ ? this.parent().selection?.all
18
+ : this.parent().clipperService.bag;
26
19
  });
27
20
  this.useSelections = input(false);
28
- this.parent = input();
29
21
  this.item = input();
30
22
  this.isReference = input(false);
31
23
  this.isReadable = input(true);
32
24
  this.isDeadline = input(false);
33
25
  this.isLawInForce = input(false);
34
26
  this.isLaw = input(false);
35
- this.canPrint = input(false);
36
- this.canFind = input(false);
37
27
  }
38
28
  /**
39
29
  * Check if current item or selection is read
@@ -58,10 +48,10 @@ export class ClipperDocumentMenuComponent {
58
48
  this.parent()?.setRead(value, this.item());
59
49
  }
60
50
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isDeadline: { classPropertyName: "isDeadline", publicName: "isDeadline", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, isLaw: { classPropertyName: "isLaw", publicName: "isLaw", isSignal: true, isRequired: false, transformFunction: null }, canPrint: { classPropertyName: "canPrint", publicName: "canPrint", isSignal: true, isRequired: false, transformFunction: null }, canFind: { classPropertyName: "canFind", publicName: "canFind", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent()?.selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"parent()?.openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent()?.open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent()?.print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <span>Stampa</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+P</span>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent()?.find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <span>Trova nel documento</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+F</span>\r\n </div>\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent()?.addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"parent()?.sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item (click)=\"parent()?.exportPdf(item() ? item() : selection()[0])\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent()?.showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n<mat-divider></mat-divider>\r\n\r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead ===\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !==\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent()?.report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && parent()?.RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if ((item() || selection?.length > 0) && parent()?.RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n}\r\n<mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent()?.RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent()?.RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent()?.RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1.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: i1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1.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: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: false, transformFunction: null }, selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isDeadline: { classPropertyName: "isDeadline", publicName: "isDeadline", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, isLaw: { classPropertyName: "isLaw", publicName: "isLaw", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\"\r\n [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"parent().manageBag()\"\r\n [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent().open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item\r\n \r\n (click)=\"parent().exportPdf(item() ? item() : selection()[0])\" [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n <mat-divider></mat-divider>\r\n \r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead === true)) {\r\n <button mat-menu-item\r\n [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"parent()?.setRead(false, item())\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n </button>\r\n }\r\n @if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !== true)) {\r\n <button mat-menu-item \r\n [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"parent()?.setRead(true, item())\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n </button>\r\n }\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent().report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent().references(item() ? item() : selection()[0], 1)\">\r\n Documenti richiamati\r\n </button>\r\n}\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent().references(item() ? item() : selection()[0], 2)\">\r\n Documenti che richiamano\r\n </button>\r\n}\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"parent().references(item() ? item() : selection()[0], 4)\">\r\n Juris\r\n </button>\r\n}\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra modifiche normative'\" (click)=\"parent().references(item() ? item() : selection()[0], 3)\">\r\n Modifiche\r\n</button>\r\n}\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider ></mat-divider>\r\n} \r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\"\r\n [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\" [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n}\r\n <mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n}\r\n @if (item() || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent().RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n}\r\n </mat-menu>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1.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: i1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1.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: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
62
52
  }
63
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentMenuComponent, decorators: [{
64
54
  type: Component,
65
- args: [{ selector: 'clipper-document-menu', standalone: true, imports: [MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule], template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent()?.selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"parent()?.openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent()?.open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent()?.print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <span>Stampa</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+P</span>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent()?.find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <span>Trova nel documento</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+F</span>\r\n </div>\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent()?.addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"parent()?.sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item (click)=\"parent()?.exportPdf(item() ? item() : selection()[0])\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent()?.showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n<mat-divider></mat-divider>\r\n\r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead ===\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !==\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent()?.report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && parent()?.RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if ((item() || selection?.length > 0) && parent()?.RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n}\r\n<mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent()?.RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent()?.RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent()?.RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>" }]
55
+ args: [{ selector: 'clipper-document-menu', standalone: true, imports: [MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule], template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\"\r\n [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"parent().manageBag()\"\r\n [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent().open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item\r\n \r\n (click)=\"parent().exportPdf(item() ? item() : selection()[0])\" [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n <mat-divider></mat-divider>\r\n \r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead === true)) {\r\n <button mat-menu-item\r\n [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"parent()?.setRead(false, item())\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n </button>\r\n }\r\n @if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !== true)) {\r\n <button mat-menu-item \r\n [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"parent()?.setRead(true, item())\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n </button>\r\n }\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent().report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent().references(item() ? item() : selection()[0], 1)\">\r\n Documenti richiamati\r\n </button>\r\n}\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent().references(item() ? item() : selection()[0], 2)\">\r\n Documenti che richiamano\r\n </button>\r\n}\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"parent().references(item() ? item() : selection()[0], 4)\">\r\n Juris\r\n </button>\r\n}\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item\r\n [attr.aria-label]=\"'Mostra modifiche normative'\" (click)=\"parent().references(item() ? item() : selection()[0], 3)\">\r\n Modifiche\r\n</button>\r\n}\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider ></mat-divider>\r\n} \r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\"\r\n [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\" [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n}\r\n <mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n}\r\n @if (item() || selection?.length === 1) {\r\n<button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent().RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n}\r\n </mat-menu>\r\n" }]
66
56
  }] });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQXVCLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7QUFZNUYsTUFBTSxPQUFPLDRCQUE0QjtJQVB6QztRQVNVLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRS9DLG9CQUFlLEdBQUcsS0FBSyxDQUErQixXQUFXLENBQUMsQ0FBQztRQUN6RCxjQUFTLEdBQWtDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDakUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztnQkFDekIsUUFBUSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztvQkFDL0IsS0FBSyxLQUFLO3dCQUNSLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7b0JBQ2pDLEtBQUssV0FBVzt3QkFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7UUFDSCxrQkFBYSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0QyxXQUFNLEdBQUcsS0FBSyxFQUE4QixDQUFDO1FBQzdDLFNBQUksR0FBRyxLQUFLLEVBQXVCLENBQUM7UUFDcEMsZ0JBQVcsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNsQyxlQUFVLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ25DLGlCQUFZLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLFVBQUssR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDOUIsYUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBd0JqQztJQXRCQzs7O09BR0c7SUFDSCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLGNBQWMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEtBQWM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQzs4R0EvQ1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsK2dEQ2pCekMsb3pNQThJVyx5REQvSEMsYUFBYSw2dkJBQUUsYUFBYSxtTEFBRSxnQkFBZ0Isa0lBQUUsZ0JBQWdCOzsyRkFFL0QsNEJBQTRCO2tCQVB4QyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlclNlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjbGlwcGVyLWRvY3VtZW50LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTWF0TWVudU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0RGl2aWRlck1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQgIHtcclxuXHJcbiAgcHJpdmF0ZSBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSlcclxuXHJcbiAgc2VsZWN0aW9uU291cmNlID0gaW5wdXQ8J2JhZycgfCAnc2VsZWN0aW9uJyB8ICdub25lJz4oJ3NlbGVjdGlvbicpO1xyXG4gIHByb3RlY3RlZCBzZWxlY3Rpb246IFNpZ25hbDxDbGlwcGVyRG9jdW1lbnRJbmZvW10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMudXNlU2VsZWN0aW9ucygpKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSkge1xyXG4gICAgICAgIGNhc2UgJ2JhZyc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jbGlwcGVyU2VydmljZS5iYWc7XHJcbiAgICAgICAgY2FzZSAnc2VsZWN0aW9uJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpPy5zZWxlY3Rpb24/LmFsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH0pO1xyXG4gIHVzZVNlbGVjdGlvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgcGFyZW50ID0gaW5wdXQ8Q2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXI+KCk7XHJcbiAgaXRlbSA9IGlucHV0PENsaXBwZXJEb2N1bWVudEluZm8+KCk7XHJcbiAgaXNSZWZlcmVuY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNSZWFkYWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIGlzRGVhZGxpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMYXdJbkZvcmNlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzTGF3ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhblByaW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbkZpbmQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgaXRlbSBvciBzZWxlY3Rpb24gaXMgcmVhZFxyXG4gICAqIEByZXR1cm5zIDAgaWYgbm90IHJlYWQsIDEgaWYgcmVhZCwgMiBpZiB1bmtub3duXHJcbiAgICovXHJcbiAgaXNSZWFkKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5pdGVtKCkpIHJldHVybiB0aGlzLml0ZW0oKS5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIGlmICh0aGlzLnBhcmVudCgpPy5oYXNBbnlTZWxlY3Rpb24oKSkgcmV0dXJuIDI7XHJcbiAgICBjb25zdCBmaXJzdFNlbGVjdGlvbiA9IHRoaXMucGFyZW50KCk/LmdldFNpbmdsZVNlbGVjdGlvbigpO1xyXG4gICAgaWYgKGZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmaXJzdFNlbGVjdGlvbi5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBpcyByZWFkIGZsYWcgdmFsdWVcclxuICAgKiBAcGFyYW0gdmFsdWU6IHRydWUgb3IgZmFsc2VcclxuICAgKi9cclxuICBzZXRSZWFkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnBhcmVudCgpPy5zZXRSZWFkKHZhbHVlLCB0aGlzLml0ZW0oKSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJAaWYgKHNlbGVjdGlvblNvdXJjZSgpID09PSAnc2VsZWN0aW9uJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpPy5zZWxlY3Rpb24/LmNsZWFyKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidEZXNlbGV6aW9uYSB0dXR0aSdcIj5cclxuICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPkRlc2VsZXppb25hIHR1dHRpXHJcbjwvYnV0dG9uPlxyXG59IEBlbHNlIGlmIChzZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ2JhZycpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKT8ub3BlbkJhZygpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInR2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9ybydcIj5cclxuICA8bWF0LWljb24+d29ya19vdXRsaW5lPC9tYXQtaWNvbj5HZXN0aXNjaSBkb2N1bWVudGkgZGkgbGF2b3JvXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoc2VsZWN0aW9uU291cmNlKCkpIHtcclxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbn1cclxuQGlmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHJpIGRvY3VtZW50bydcIlxyXG4gIChjbGljayk9XCJwYXJlbnQoKT8ub3BlbihpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQpXCI+XHJcbiAgPG1hdC1pY29uPjwvbWF0LWljb24+QXByaVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYoY2FuUHJpbnQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpPy5wcmludCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU3RhbXBhIGRvY3VtZW50bydcIj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgIDxzcGFuIGZ4RmxleD1cIipcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgPG1hdC1pY29uPnByaW50PC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+U3RhbXBhPC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJhY2NlbnQgc21hbGwgYm9sZFwiPkN0cmwrUDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9idXR0b24+XHJcbn1cclxuQGlmKGNhbkZpbmQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpPy5maW5kKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidUcm92YSBuZWwgZG9jdW1lbnRvJ1wiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgPHNwYW4gZnhGbGV4PVwiKlwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICA8bWF0LWljb24+ZmluZF9pbl9wYWdlPC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+VHJvdmEgbmVsIGRvY3VtZW50bzwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuIGNsYXNzPVwiYWNjZW50IHNtYWxsIGJvbGRcIj5DdHJsK0Y8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoc2VsZWN0aW9uU291cmNlKCkgIT09ICdiYWcnKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZ2dpdW5naSBhaSBkb2N1bWVudGkgZGkgbGF2b3JvJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpPy5hZGRJdGVtc1RvQmFnKGl0ZW0oKSA/IFtpdGVtKCldIDogc2VsZWN0aW9uKCkpXCI+XHJcbiAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+QWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPiAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKT8uc2VuZEl0ZW1zVG8oaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSlcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ludmlhIGRvY3VtZW50byBwZXIgZW1haWwnXCI+XHJcbiAgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPkludmlhIHBlciBlbWFpbFxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCgoaXRlbSgpICYmIGl0ZW0oKS5tb2RlbCAhPSAxMSkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEgJiYgc2VsZWN0aW9uKClbMF0ubW9kZWwgIT0gMTEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpPy5leHBvcnRQZGYoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0pXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTYWx2YSBkb2N1bWVudG8gaW4gcGRmJ1wiPlxyXG4gIDxtYXQtaWNvbj5zYXZlX2FsdDwvbWF0LWljb24+U2FsdmEgaW4gcGRmXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZW5lcmEgdW4gbGluayBwZXJtYW5lbnRlIGRhIHV0aWxpenphcmUgZXN0ZXJuYW1lbnRlJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpPy5zaG93TGluayhpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSlcIj5cclxuICA8bWF0LWljb24+bGluazwvbWF0LWljb24+TGlua1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxpbmtzTWVudVwiPlxyXG4gIDxtYXQtaWNvbj5jb21wYXJlX2Fycm93czwvbWF0LWljb24+Q29sbGVnYW1lbnRpXHJcbjwvYnV0dG9uPlxyXG59XHJcblxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIGlzUmVhZGFibGUoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbkBpZiAoaXRlbSgpID8gaXRlbSgpLmlzUmVhZCA9PT0gdHJ1ZSA6IChwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwubGVuZ3RoICE9IDEgfHwgcGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsWzBdLmlzUmVhZCA9PT1cclxudHJ1ZSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZGEgbGVnZ2VyZSdcIiAoY2xpY2spPVwic2V0UmVhZChmYWxzZSlcIj5cclxuICA8bWF0LWljb24+b3V0bGluZWRfZmxhZzwvbWF0LWljb24+U2VnbmEgY29tZSBkYSBsZWdnZXJlXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoaXRlbSgpID8gaXRlbSgpLmlzUmVhZCAhPT0gdHJ1ZSA6IChwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwubGVuZ3RoICE9IDEgfHwgcGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsWzBdLmlzUmVhZCAhPT1cclxudHJ1ZSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZ2nDoCBsZXR0bydcIiAoY2xpY2spPVwic2V0UmVhZCh0cnVlKVwiPlxyXG4gIDxtYXQtaWNvbj5mbGFnPC9tYXQtaWNvbj5TZWduYSBjb21lIGdpw6AgbGV0dG9cclxuPC9idXR0b24+XHJcbn1cclxufVxyXG5cclxuQGlmICgoaXNMYXdJbkZvcmNlKCkgfHwgaXNEZWFkbGluZSgpKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSByZXBvcnQgdXRpbGl6em8nXCIgKGNsaWNrKT1cInBhcmVudCgpPy5yZXBvcnQoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0pXCI+XHJcbiAgPG1hdC1pY29uPmFzc2lnbm1lbnQ8L21hdC1pY29uPlJlcG9ydFxyXG48L2J1dHRvbj5cclxufVxyXG48bWF0LW1lbnUgI2xpbmtzTWVudT1cIm1hdE1lbnVcIj5cclxuICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaSBkb2N1bWVudGkgcmljaGlhbWF0aSBkYSBxdWVzdG8nXCJcclxuICAgIChjbGljayk9XCJwYXJlbnQoKT8ub3BlblJlZmVyZW5jZXMoaXRlbSgpID8gaXRlbSgpLmRvY3VtZW50SWQgOiBzZWxlY3Rpb24oKVswXS5kb2N1bWVudElkLCAxKVwiPlxyXG4gICAgRG9jdW1lbnRpIHJpY2hpYW1hdGlcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICggIWlzUmVmZXJlbmNlKCkgJiYoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGkgZG9jdW1lbnRpIGNoZSByaWNoaWFtYW5vIHF1ZXN0bydcIlxyXG4gICAgKGNsaWNrKT1cInBhcmVudCgpPy5vcGVuUmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQsIDIpXCI+XHJcbiAgICBEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm9cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGdpdXJpc3BydWRlbnphJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCk/Lm9wZW5SZWZlcmVuY2VzKGl0ZW0oKSA/IGl0ZW0oKS5kb2N1bWVudElkIDogc2VsZWN0aW9uKClbMF0uZG9jdW1lbnRJZCwgNClcIj5cclxuICAgIEp1cmlzXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgaXNMYXdJbkZvcmNlKCkgJiYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBtb2RpZmljaGUgbm9ybWF0aXZlJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCk/Lm9wZW5SZWZlcmVuY2VzKGl0ZW0oKSA/IGl0ZW0oKS5kb2N1bWVudElkIDogc2VsZWN0aW9uKClbMF0uZG9jdW1lbnRJZCwgMylcIj5cclxuICAgIE1vZGlmaWNoZVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuPC9tYXQtbWVudT5cclxuQGlmICgoaXRlbSgpIHx8IHNlbGVjdGlvbj8ubGVuZ3RoID4gMCkgJiYgcGFyZW50KCk/LlJTX2VuYWJsZWQoaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSkgJiYgIXVzZVNlbGVjdGlvbnMoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPiAwKSAmJiBwYXJlbnQoKT8uUlNfZW5hYmxlZChpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKSAmJiAhdXNlU2VsZWN0aW9ucygpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBtYXRUb29sdGlwPVwiUmVnaXN0cm8gJiBTY2FkZW56YXJpb1wiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09wemlvbmkgZGkgUmVnaXN0cm8gJiBTY2FkZW56YXJpbydcIlxyXG4gIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51UlNcIj5cclxuICA8bWF0LWljb24+YWxhcm1fb248L21hdC1pY29uPlxyXG4gIFJlZ2lzdHJvIGUgc2NhZGVuemFyaW9cclxuPC9idXR0b24+XHJcbn1cclxuPG1hdC1tZW51ICNtZW51UlM9XCJtYXRNZW51XCI+XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ051b3ZhIGxlZ2dlJ1wiIChjbGljayk9XCJwYXJlbnQoKT8uUlNfbmV3TGF3KFtpdGVtKCldKVwiPlxyXG4gICAgTnVvdmEgbGVnZ2VcclxuICA8L2J1dHRvbj5cclxuICBAaWYgKGl0ZW0oKSB8fCBzZWxlY3Rpb24/Lmxlbmd0aCA9PT0gMSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBhdHRpdml0w6AnXCIgKGNsaWNrKT1cInBhcmVudCgpPy5SU19uZXdBY3Rpdml0eShpdGVtKCkpXCI+XHJcbiAgICBOdW92YSBhdHRpdml0w6BcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmIChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPT09IDEpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInUmVwb3J0IHV0aWxpenpvIG5vcm1hJ1wiIChjbGljayk9XCJwYXJlbnQoKT8uUlNfdXNhZ2VSZXBvcnQoaXRlbSgpKVwiPlxyXG4gICAgUmVwb3J0IHV0aWxpenpvIG5vcm1hXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG48L21hdC1tZW51PiJdfQ==
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFXdkQsTUFBTSxPQUFPLDRCQUE0QjtJQVB6QztRQVNFLFdBQU0sR0FBRyxLQUFLLEVBQThCLENBQUM7UUFDN0Msb0JBQWUsR0FBRyxLQUFLLENBQXNCLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBa0MsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqRSxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxXQUFXO2dCQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHO2dCQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxrQkFBYSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0QyxTQUFJLEdBQUcsS0FBSyxFQUF1QixDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLGVBQVUsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDbEMsZUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyQyxVQUFLLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBeUIvQjtJQXRCQzs7O09BR0c7SUFDSCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLGNBQWMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEtBQWM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQzs4R0F0Q1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsZ3hDQ2Z6Qyx5NktBaUlBLHlERHBIWSxhQUFhLDZ2QkFBRSxhQUFhLG1MQUFFLGdCQUFnQixrSUFBRSxnQkFBZ0I7OzJGQUUvRCw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUCxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNpZ25hbCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjbGlwcGVyLWRvY3VtZW50LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTWF0TWVudU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0RGl2aWRlck1vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQge1xyXG5cclxuICBwYXJlbnQgPSBpbnB1dDxDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlcj4oKTtcclxuICBzZWxlY3Rpb25Tb3VyY2UgPSBpbnB1dDwnYmFnJyB8ICdzZWxlY3Rpb24nPignc2VsZWN0aW9uJyk7XHJcbiAgcHJvdGVjdGVkIHNlbGVjdGlvbjogU2lnbmFsPENsaXBwZXJEb2N1bWVudEluZm9bXT4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ3NlbGVjdGlvbidcclxuICAgICAgPyB0aGlzLnBhcmVudCgpLnNlbGVjdGlvbj8uYWxsXHJcbiAgICAgIDogdGhpcy5wYXJlbnQoKS5jbGlwcGVyU2VydmljZS5iYWc7XHJcbiAgfSk7XHJcbiAgdXNlU2VsZWN0aW9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpdGVtID0gaW5wdXQ8Q2xpcHBlckRvY3VtZW50SW5mbz4oKTtcclxuICBpc1JlZmVyZW5jZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1JlYWRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNEZWFkbGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xhd0luRm9yY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMYXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBjdXJyZW50IGl0ZW0gb3Igc2VsZWN0aW9uIGlzIHJlYWRcclxuICAgKiBAcmV0dXJucyAwIGlmIG5vdCByZWFkLCAxIGlmIHJlYWQsIDIgaWYgdW5rbm93blxyXG4gICAqL1xyXG4gIGlzUmVhZCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuaXRlbSgpKSByZXR1cm4gdGhpcy5pdGVtKCkuaXNSZWFkID09PSB0cnVlID8gMSA6IDA7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQoKT8uaGFzQW55U2VsZWN0aW9uKCkpIHJldHVybiAyO1xyXG4gICAgY29uc3QgZmlyc3RTZWxlY3Rpb24gPSB0aGlzLnBhcmVudCgpPy5nZXRTaW5nbGVTZWxlY3Rpb24oKTtcclxuICAgIGlmIChmaXJzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmlyc3RTZWxlY3Rpb24uaXNSZWFkID09PSB0cnVlID8gMSA6IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgaXMgcmVhZCBmbGFnIHZhbHVlXHJcbiAgICogQHBhcmFtIHZhbHVlOiB0cnVlIG9yIGZhbHNlXHJcbiAgICovXHJcbiAgc2V0UmVhZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wYXJlbnQoKT8uc2V0UmVhZCh2YWx1ZSwgdGhpcy5pdGVtKCkpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiQGlmIChzZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ3NlbGVjdGlvbicpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5zZWxlY3Rpb24/LmNsZWFyKClcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Rlc2VsZXppb25hIHR1dHRpJ1wiPlxyXG4gIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+RGVzZWxlemlvbmEgdHV0dGlcclxuPC9idXR0b24+XHJcbn0gQGVsc2UgaWYgKHNlbGVjdGlvblNvdXJjZSgpID09PSAnYmFnJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLm1hbmFnZUJhZygpXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZXN0aXNjaSBkb2N1bWVudGkgZGkgbGF2b3JvJ1wiPlxyXG4gIDxtYXQtaWNvbj53b3JrX291dGxpbmU8L21hdC1pY29uPkdlc3Rpc2NpIGRvY3VtZW50aSBkaSBsYXZvcm9cclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChzZWxlY3Rpb25Tb3VyY2UoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxufVxyXG5AaWYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FwcmkgZG9jdW1lbnRvJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpLm9wZW4oaXRlbSgpID8gaXRlbSgpLmRvY3VtZW50SWQgOiBzZWxlY3Rpb24oKVswXS5kb2N1bWVudElkKVwiPlxyXG4gIDxtYXQtaWNvbj48L21hdC1pY29uPkFwcmlcclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChzZWxlY3Rpb25Tb3VyY2UoKSAhPT0gJ2JhZycpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FnZ2l1bmdpIGFpIGRvY3VtZW50aSBkaSBsYXZvcm8nXCJcclxuICAoY2xpY2spPVwicGFyZW50KCkuYWRkSXRlbXNUb0JhZyhpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKVwiPlxyXG4gIDxtYXQtaWNvbj53b3JrX291dGxpbmU8L21hdC1pY29uPkFnZ2l1bmdpIGFpIGRvY3VtZW50aSBkaSBsYXZvcm9cclxuPC9idXR0b24+XHJcbn1cclxuQGlmICgoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID4gMSkpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkuc2VuZEl0ZW1zVG8oaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSlcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ludmlhIGRvY3VtZW50byBwZXIgZW1haWwnXCI+XHJcbiAgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPkludmlhIHBlciBlbWFpbFxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCgoaXRlbSgpICYmIGl0ZW0oKS5tb2RlbCAhPSAxMSkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEgJiYgc2VsZWN0aW9uKClbMF0ubW9kZWwgIT0gMTEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW1cclxuIFxyXG4gIChjbGljayk9XCJwYXJlbnQoKS5leHBvcnRQZGYoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0pXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU2FsdmEgZG9jdW1lbnRvIGluIHBkZidcIj5cclxuICA8bWF0LWljb24+c2F2ZV9hbHQ8L21hdC1pY29uPlNhbHZhIGluIHBkZlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW1cclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZW5lcmEgdW4gbGluayBwZXJtYW5lbnRlIGRhIHV0aWxpenphcmUgZXN0ZXJuYW1lbnRlJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpLnNob3dMaW5rKGl0ZW0oKSA/IGl0ZW0oKSA6IHNlbGVjdGlvbigpWzBdKVwiPlxyXG4gIDxtYXQtaWNvbj5saW5rPC9tYXQtaWNvbj5MaW5rXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbVxyXG4gIFttYXRNZW51VHJpZ2dlckZvcl09XCJsaW5rc01lbnVcIj5cclxuICA8bWF0LWljb24+Y29tcGFyZV9hcnJvd3M8L21hdC1pY29uPkNvbGxlZ2FtZW50aVxyXG48L2J1dHRvbj5cclxufVxyXG5cclxuQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc1JlYWRhYmxlKCkpIHtcclxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICBcclxuQGlmIChpdGVtKCkgPyBpdGVtKCkuaXNSZWFkID09PSB0cnVlIDogKHBhcmVudCgpPy5zZWxlY3Rpb24/LmFsbC5sZW5ndGggIT0gMSB8fCBwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGxbMF0uaXNSZWFkID09PSB0cnVlKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbVxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VnbmEgY29tZSBkYSBsZWdnZXJlJ1wiIChjbGljayk9XCJwYXJlbnQoKT8uc2V0UmVhZChmYWxzZSwgaXRlbSgpKVwiPlxyXG4gICAgPG1hdC1pY29uPm91dGxpbmVkX2ZsYWc8L21hdC1pY29uPlNlZ25hIGNvbWUgZGEgbGVnZ2VyZVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGl0ZW0oKSA/IGl0ZW0oKS5pc1JlYWQgIT09IHRydWUgOiAocGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsLmxlbmd0aCAhPSAxIHx8IHBhcmVudCgpPy5zZWxlY3Rpb24/LmFsbFswXS5pc1JlYWQgIT09IHRydWUpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VnbmEgY29tZSBnacOgIGxldHRvJ1wiIChjbGljayk9XCJwYXJlbnQoKT8uc2V0UmVhZCh0cnVlLCBpdGVtKCkpXCI+XHJcbiAgICA8bWF0LWljb24+ZmxhZzwvbWF0LWljb24+U2VnbmEgY29tZSBnacOgIGxldHRvXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG59XHJcblxyXG5AaWYgKChpc0xhd0luRm9yY2UoKSB8fCBpc0RlYWRsaW5lKCkpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW1cclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgcmVwb3J0IHV0aWxpenpvJ1wiIChjbGljayk9XCJwYXJlbnQoKS5yZXBvcnQoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0pXCI+XHJcbiAgPG1hdC1pY29uPmFzc2lnbm1lbnQ8L21hdC1pY29uPlJlcG9ydFxyXG48L2J1dHRvbj5cclxufVxyXG48bWF0LW1lbnUgI2xpbmtzTWVudT1cIm1hdE1lbnVcIj5cclxuICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW1cclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBpIGRvY3VtZW50aSByaWNoaWFtYXRpIGRhIHF1ZXN0bydcIlxyXG4gICAgKGNsaWNrKT1cInBhcmVudCgpLnJlZmVyZW5jZXMoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0sIDEpXCI+XHJcbiAgICBEb2N1bWVudGkgcmljaGlhbWF0aVxyXG4gIDwvYnV0dG9uPlxyXG59XHJcbiAgQGlmICggIWlzUmVmZXJlbmNlKCkgJiYoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaSBkb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlc3RvJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCkucmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSwgMilcIj5cclxuICAgIERvY3VtZW50aSBjaGUgcmljaGlhbWFub1xyXG4gIDwvYnV0dG9uPlxyXG59XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgZ2l1cmlzcHJ1ZGVuemEnXCIgKGNsaWNrKT1cInBhcmVudCgpLnJlZmVyZW5jZXMoaXRlbSgpID8gaXRlbSgpIDogc2VsZWN0aW9uKClbMF0sIDQpXCI+XHJcbiAgICBKdXJpc1xyXG4gIDwvYnV0dG9uPlxyXG59XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgbW9kaWZpY2hlIG5vcm1hdGl2ZSdcIiAoY2xpY2spPVwicGFyZW50KCkucmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSwgMylcIj5cclxuICAgIE1vZGlmaWNoZVxyXG48L2J1dHRvbj5cclxufVxyXG48L21hdC1tZW51PlxyXG5AaWYgKChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPiAwKSAmJiAgcGFyZW50KCkuUlNfZW5hYmxlZChpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKSAmJiAhdXNlU2VsZWN0aW9ucygpKSB7XHJcbjxtYXQtZGl2aWRlciA+PC9tYXQtZGl2aWRlcj5cclxufSBcclxuQGlmICgoaXRlbSgpIHx8IHNlbGVjdGlvbj8ubGVuZ3RoID4gMCkgJiYgIHBhcmVudCgpLlJTX2VuYWJsZWQoaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSkgJiYgIXVzZVNlbGVjdGlvbnMoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gbWF0VG9vbHRpcD1cIlJlZ2lzdHJvICYgU2NhZGVuemFyaW9cIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInT3B6aW9uaSBkaSBSZWdpc3RybyAmIFNjYWRlbnphcmlvJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51UlNcIj5cclxuICAgIDxtYXQtaWNvbj5hbGFybV9vbjwvbWF0LWljb24+XHJcbiAgICBSZWdpc3RybyBlIHNjYWRlbnphcmlvXHJcbiAgPC9idXR0b24+XHJcbn1cclxuICA8bWF0LW1lbnUgI21lbnVSUz1cIm1hdE1lbnVcIj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBsZWdnZSdcIiAoY2xpY2spPVwicGFyZW50KCkuUlNfbmV3TGF3KFtpdGVtKCldKVwiPlxyXG4gICAgICBOdW92YSBsZWdnZVxyXG4gICAgPC9idXR0b24+XHJcbiAgICBAaWYgKGl0ZW0oKSB8fCBzZWxlY3Rpb24/Lmxlbmd0aCA9PT0gMSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTnVvdmEgYXR0aXZpdMOgJ1wiIChjbGljayk9XCJwYXJlbnQoKS5SU19uZXdBY3Rpdml0eShpdGVtKCkpXCI+XHJcbiAgICAgIE51b3ZhIGF0dGl2aXTDoFxyXG4gICAgPC9idXR0b24+XHJcbn1cclxuICAgIEBpZiAoaXRlbSgpIHx8IHNlbGVjdGlvbj8ubGVuZ3RoID09PSAxKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZXBvcnQgdXRpbGl6em8gbm9ybWEnXCIgKGNsaWNrKT1cInBhcmVudCgpLlJTX3VzYWdlUmVwb3J0KGl0ZW0oKSlcIj5cclxuICAgICAgUmVwb3J0IHV0aWxpenpvIG5vcm1hXHJcbiAgICA8L2J1dHRvbj5cclxufVxyXG4gIDwvbWF0LW1lbnU+XHJcbiJdfQ==