simpo-component-library 3.6.544 → 3.6.545
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/hover-elements/hover-elements.component.mjs +5 -4
- package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +3 -3
- package/esm2022/lib/elements/link-editor/link-editor.component.mjs +3 -3
- package/esm2022/lib/elements/text-editor/text-editor.component.mjs +6 -4
- package/esm2022/lib/sections/footer-section/footer-section.component.mjs +3 -3
- package/esm2022/lib/sections/header-section/header-section.component.mjs +3 -3
- package/fesm2022/simpo-component-library.mjs +15 -14
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +1 -1
- package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +1 -1
- package/lib/ecommerce/sections/schemes/schemes.component.d.ts +1 -1
- package/lib/elements/link-editor/link-editor.component.d.ts +1 -1
- package/lib/sections/pricing-section/pricing-section.component.d.ts +1 -1
- package/package.json +1 -1
- package/simpo-component-library-3.6.545.tgz +0 -0
- package/simpo-component-library-3.6.544.tgz +0 -0
|
@@ -239,13 +239,13 @@ export class LinkEditorComponent {
|
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
241
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkEditorComponent, deps: [{ token: i1.ElementServiceService }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3.EventsService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
242
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LinkEditorComponent, isStandalone: true, selector: "simpo-link-editor", ngImport: i0, template: "<section>\r\n <div class=\"header\">\r\n <p>{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Settings</p>\r\n <mat-icon (click)=\"closeDialog()\" class=\"f-18 d-flex align-items-center justify-content-center cp\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"body\">\r\n <div>\r\n <label class=\"link-text\">{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Text</label><br>\r\n <input type=\"text\" class=\"input-text link-text-input\" [(ngModel)]=\"link.label\">\r\n <p class=\"desc\">This is the text that will be displayed to users</p>\r\n </div>\r\n\r\n <hr>\r\n\r\n <!-- <ng-container *ngIf=\"data.type == 'BUTTON'\">\r\n <select>\r\n <ng-container *ngFor=\"let style of styles\">\r\n <option (click)=\"changeButtonStyle(style)\" [value]=\"style.name\">{{style.name}}</option>\r\n </ng-container>\r\n <select>\r\n </ng-container> -->\r\n\r\n <ng-container *ngIf=\"data.type == 'BUTTON'\">\r\n <div class=\"field-container mb-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <label class=\"link-text mb-1\">Button</label>\r\n <div class=\"colorType d-flex align-items-center justify-content-center\">\r\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.type\" (ngModelChange)=\"changeButtonStyle()\">\r\n <ng-container *ngFor=\"let type of buttonTypes\">\r\n <option [value]=\"type.type\">\r\n {{type.type | titlecase}}\r\n </option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"preview d-flex justify-content-center\">\r\n <button class=\"btn-style w-80\" [style.borderRadius]=\"setBorderRadius()\" [style.border]=\"setBorder()\"\r\n [style.background]=\"setBackground()\">\r\n <span\r\n *ngIf=\"(data?.buttonStyle?.type === 'Text' || data?.buttonStyle?.type === 'Outline') && data?.buttonStyle?.colorType === 'Gradient'\"\r\n [ngStyle]=\"{\r\n 'background': 'linear-gradient(90deg, ' + data?.buttonStyle?.background + ' 0%, ' + data?.buttonStyle.secondaryBackground + ' 100%)'\r\n }\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.style?.colorType == 'Solid' || data?.buttonStyle?.type == 'Solid'\"\r\n [style.color]=\"setColor()\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.buttonStyle?.type === 'Outline'\"\r\n [style.color]=\"setColor()\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.buttonStyle?.type === 'Text'\"\r\n [style.color]=\"data.buttonStyle.background\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"field-container\">\r\n <label class=\"link-text\">Button Style</label>\r\n <div class=\"color-container row\">\r\n <div class=\"color br-10\">\r\n <div class=\"color-top d-flex justify-content-between mb-2 align-items-center\">\r\n <div class=\"left-side\">Color</div>\r\n <div class=\"right-side\">\r\n <div class=\"colorType d-flex align-items-center justify-content-center w-100\">\r\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.colorType\"\r\n (ngModelChange)=\"changeButtonStyle()\">\r\n <ng-container *ngFor=\"let type of backgroundType\">\r\n <option style=\"padding: 10px;\">\r\n {{ type | titlecase }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"color-bottom\">\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Solid'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\r\n (ngModelChange)=\"getContrastTextColor(data.buttonStyle.background)\" style=\"display: none;\"\r\n #colorInput>\r\n <div class=\"w-100 d-flex flex-column mt-2\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\"> {{ getColorLabel()}}</label>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.background\"\r\n (click)=\"colorInput.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Gradient'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput1>\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.secondaryBackground\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput>\r\n <div class=\"w-100 d-flex mt-2\">\r\n <div class=\"w-100 d-flex flex-column\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 1</label>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.background\"\r\n (click)=\"colorInput1.click()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"w-100 d-flex flex-column\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 2</label>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.secondaryBackground\"\r\n (click)=\"colorInput.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"gradient-direction\">\r\n <div class=\"left-direction mt-3 mb-1\"> Direction</div>\r\n <div class=\"right-direction\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"box-shadow d-flex br-10 w-80\">\r\n <ng-container *ngFor=\"let direction of directionType\">\r\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\r\n [ngClass]=\"{'selected' : data.buttonStyle?.gradientDirection === direction.type}\"\r\n (click)=\"data.buttonStyle.gradientDirection = direction.type;changeButtonStyle()\">\r\n <img class=\"w-10\" [src]=\"direction.icon\" alt=\"icon\"\r\n *ngIf=\"data.buttonStyle?.gradientDirection !== direction.type\" loading=\"lazy\">\r\n <img class=\"w-10\" [src]=\"direction.activeIcon\" alt=\"icon\"\r\n *ngIf=\"data.buttonStyle?.gradientDirection === direction.type\" loading=\"lazy\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.type != 'Text'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.textColor\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput3>\r\n <div class=\"w-100 d-flex flex-column mt-2\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Text Color</label>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.textColor\"\r\n (click)=\"colorInput3.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"corner-radius bg-white p-2 br-10 d-flex justify-content-between\"\r\n *ngIf=\"data.buttonStyle.type != 'Text'\">\r\n <div class=\"sub-text-1 d-flex align-items-center\">\r\n Corner Radius\r\n </div>\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"box-shadow d-flex br-10\">\r\n <ng-container *ngFor=\"let shape of buttonShapes\">\r\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\r\n [ngClass]=\"{'selected' : data.buttonStyle.shape === shape.type}\"\r\n (click)=\"data.buttonStyle.shape = shape.type;changeButtonStyle()\">\r\n <img [src]=\"shape.icon\" alt=\"icon\" *ngIf=\"data.buttonStyle.shape !== shape.type\" loading=\"lazy\"\r\n class=\"transition-image\">\r\n <img [src]=\"shape.activeIcon\" alt=\"icon\" *ngIf=\"data.buttonStyle?.shape === shape.type\"\r\n loading=\"lazy\" class=\"transition-image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"p-2 d-flex justify-content-between align-items-center mt-20\">\r\n <div class=\"fw-bold\">Show Icon</div>\r\n <div class=\"form-check form-switch ml-auto\">\r\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.showIcon\" role=\"switch\">\r\n </div>\r\n </div>\r\n <div>\r\n <!-- <p class=\"heading mb-0\">Image</p> -->\r\n <div class=\"upload-image cp\" *ngIf=\"link.showIcon && !link?.icon?.url\" (click)=\"updateImage()\">\r\n <img loading=\"lazy\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\r\n alt=\"\">\r\n <p class=\"upload-text mb-0\">Upload a file</p>\r\n <p class=\"upload-text mb-0\">or select an existing one</p>\r\n <span class=\"upload-text\">up to 32MB</span>\r\n </div>\r\n <div class=\"sec d-flex align-items-center\" *ngIf=\"link.showIcon && link?.icon?.url\">\r\n <ng-container *ngIf=\"!imgLoader\">\r\n <img [src]=\"link?.icon?.url\">\r\n <div class=\"repalce-image cursor-pointer\" (click)=\"updateImage()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" width=\"24\"\r\n height=\"24\" class=\"icon w-4 h-4\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m4 16 4.58579-4.5858c.78104-.781 2.04741-.781 2.82841 0L16 16m-2-2 1.5858-1.5858c.781-.781 2.0474-.781 2.8284 0L20 14m-6-6h.01M6 20h12c1.1046 0 2-.8954 2-2V6c0-1.10457-.8954-2-2-2H6c-1.10457 0-2 .89543-2 2v12c0 1.1046.89543 2 2 2Z\">\r\n </path>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"delete-image cursor-pointer \" (click)=\"deleteImage()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"#ffffff\" viewBox=\"0 0 24 24\" width=\"24\"\r\n height=\"24\" class=\"icon h-4 w-4\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m19 7-.8673 12.1425C18.0579 20.1891 17.187 21 16.1378 21H7.86224c-1.04928 0-1.92016-.8109-1.99492-1.8575L5 7m5 4v6m4-6v6m1-10V4c0-.55228-.4477-1-1-1h-4c-.55228 0-1 .44772-1 1v3M4 7h16\">\r\n </path>\r\n </svg>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"imgLoader\">\r\n <div class=\"upload_spinner d-flex w-100 h-100 justify-content-center align-items-center\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"fw-bold p-2 mb-2\">Icon Position</div>\r\n <div class=\"tabs d-flex px-2 gap-3 mb-2\" *ngIf=\"link.showIcon\">\r\n <div class=\"tab px-3 py-2\" *ngFor=\"let tab of ['left','right']\" (click)=\"link.icon.iconPosition = tab\"\r\n [class.selectedTab]=\"link?.icon?.iconPosition == tab\">\r\n {{tab | titlecase}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"data?.linkData?.length != 0\">\r\n\r\n\r\n <div class=\"groups cp\">\r\n <div *ngFor=\"let type of linkType\" [ngClass]=\"{'selectedType' : type.type === selectedType}\"\r\n (click)=\"changeType(type.type)\">{{type.type}}</div>\r\n </div>\r\n\r\n <div class=\"field-container mt-3\">\r\n <div *ngIf=\"link.linkType === RedirectionLink.Page\">\r\n <label class=\"input-label-1 mt-3 mb-2\">Select Page</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.pageId\" (ngModelChange)=\"setRedirectUrl()\">\r\n <option value=\"\" selected>Select from your existing pages</option>\r\n <option *ngFor=\"let page of templatePage\" [value]=\"page.id\" style=\"padding: 10px;\">\r\n {{page.pageName}}</option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <!-- <div class=\"sub-text\">Select from your existing pages</div> -->\r\n </div>\r\n\r\n <div *ngIf=\"link.linkType === RedirectionLink.section\">\r\n <label class=\"mt-3 mb-2 input-label-1\">Section</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.pageId\" style=\"cursor:pointer\">\r\n <option value=\"\" selected>Select the Section</option>\r\n <option *ngFor=\"let section of templatePage[0].components\" [value]=\"section.id\">{{section.sectionName}}\r\n </option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"link.linkType === RedirectionLink.External || link.linkType === RedirectionLink.Email || link.linkType === RedirectionLink.Phone\">\r\n <label class=\"mt-3 mb-2 input-label-1\">Select type</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.linkType\" style=\"cursor:pointer\">\r\n <option value=\"\" selected>Select the Type</option>\r\n <option *ngFor=\"let type of externalLinkType\" [value]=\"type.type\">{{type.type}}</option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <label class=\"input-label mb-2\">{{link.linkType === RedirectionLink.External ? 'Website' : link.linkType ===\r\n RedirectionLink.Email ? 'Email Address' : 'Phone Number'}}</label>\r\n <input type=\"text\" class=\"input-text\" [(ngModel)]=\"link.redirectionUrl\"\r\n [placeholder]=\"link.linkType === RedirectionLink.External ? 'example : https://facebook.com': ''\">\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <label class=\"input-label-2\">Open in a new browser tab</label>\r\n <div class=\"form-check form-switch ml-auto\">\r\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.newTab\" role=\"switch\">\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"footer w-100 align-items-center justify-content-center\">\r\n <button *ngIf=\"addLink\" (click)=\"addNewLink()\">Update Link</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}:host{--grey-color: rgba(250, 250, 250, 1)}.br-7{border-radius:7px}.br-10{border-radius:10px}.switch-btn{position:relative;z-index:10}.upload-image{border:3px dashed rgba(44,44,44,.6);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;margin:10px 10px 22px;border-radius:20px;box-shadow:#0000000d 0 1px 2px}.upload-image img{margin-bottom:8px;height:40px}.upload-text{background:var(--primary-bg-color);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:500}.sec{padding:10px 10px 22px;position:relative}.sec img{width:100%;height:200px;border-radius:20px}.delete-image{background-color:#d92d20;width:30px;height:30px;border-radius:6px;display:flex;justify-content:center;align-items:center;position:absolute;top:20px;right:20px}.repalce-image{display:flex;align-items:center;background:#fff;padding:2px;border-radius:6px;position:absolute;bottom:30px;left:20px}.selectedTab{background:#39393934;font-weight:700}.tab{border:1px solid rgba(44,44,44,.6);border-radius:12px}.w-90{width:90%}.sub-text-1{font-size:15px;color:#000}.w-48{width:48%}.box-shadow{box-shadow:0 0 4px #00000040}.color-box{width:50px}.selected{background:var(--primary-bg-color)}.header{height:45px;display:flex;justify-content:space-between;border-bottom:2px solid #F0F0F0;align-items:center;padding-left:15px;padding-right:15px}.header p{font-size:16px;font-weight:600;font-family:var(--primary-font-family)}.body{padding:15px}.footer{height:45px;position:absolute;bottom:0;left:0;padding:0 15px}.footer button{border:unset;border-radius:10px;font-size:15px;font-weight:500;padding:5px;color:#fff;text-align:center;background:var(--primary-bg-color)}p{margin-bottom:0!important}.link-text{font-size:15px;font-weight:600;font-family:var(--primary-font-family);color:#434343;margin-bottom:10px}.input-text{height:37px;width:100%;border:1px solid var(--grey-color);border-radius:5px;outline:none;font-size:14px;padding:10px 20px;font-weight:400;color:#090909e6}.link-text-input{background-color:var(--grey-color)}.desc{margin-top:10px;font-size:13px;color:#09090980;font-weight:400;font-family:Inter;margin-bottom:25px!important}hr{border:1px solid rgba(116,116,116,.2)}.groups{display:flex;justify-content:space-between;margin-top:25px}.groups div{font-size:15px;font-weight:600;color:#2c2c2c99;padding:6px 30px;cursor:pointer}.selectedType{position:relative;text-align:center;background:var(--primary-bg-color);background-clip:text;box-shadow:0 0 4px #00000040;border-radius:10px}.selectedType:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.f-18{font-size:18px}.mt-10{margin-top:10px}.drop-down-container{padding:10px;border-radius:8px;background:#fff}.drop-down-container select{width:90%;appearance:none;position:relative;outline:unset;border:unset;border-right:3px solid rgba(230,230,230,1);background:#fff;font-size:14px;padding:0 10px;border-radius:unset}.drop-down-container .down-arrow{width:10%;padding:0 6px}select option{padding:10px;background:#fff;color:#000}.field-container{background:var(--grey-color);border-radius:13px;padding:10px}.sub-text{font-size:13px;color:#09090980}.input-label-1{font-size:16px;font-weight:600}.input-label-2{color:#09090980}option:hover{background:var(--primary-bg-color)}.cp{cursor:pointer}.colorType{padding:3px 10px;box-shadow:0 0 4px #00000040;border-radius:10px;width:25%;border:1px solid #090981}.colorType select{background:transparent}.border-0{outline:unset}.transition-image{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.color{background:#fff;padding:1rem}.custom-mat-form{width:100%;margin:10px 0;background-color:#f9f9f9;border-radius:8px}.custom-mat-form.mat-form-field-appearance-outline .mat-form-field-outline{color:#1976d2;border-color:#1976d2}.custom-mat-form .mat-form-field-label{color:#666;font-weight:500}.custom-mat-form .mat-select-trigger{padding:10px;font-size:14px;color:#333}::ng-deep .mat-select-panel{background-color:#fff;color:#333}::ng-deep .mat-option{font-size:14px;padding:10px 16px}::ng-deep .mat-option:hover{background-color:#e0f7fa}.color-container{padding:7px;gap:10px;border-radius:10px}.custom-input{height:35px;width:80%;border-radius:2rem;box-shadow:0 1px 3px #3c404326,0 1px 2px #3c404326}.outline-btn{border:2px solid #374151;color:#374151;background:transparent}.solid-btn{background-color:#374151;border:2px solid #374151;color:#fff}.text-btn{border:unset;color:#000}.btn-style{padding-top:5px;padding-bottom:5px;font-size:16px!important;margin-top:14px}.box-shadow{height:40px}.gradientStyle{-webkit-background-clip:text!important;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
242
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LinkEditorComponent, isStandalone: true, selector: "simpo-link-editor", ngImport: i0, template: "<section>\r\n <div class=\"header\">\r\n <p>{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Settings</p>\r\n <mat-icon (click)=\"closeDialog()\" class=\"f-18 d-flex align-items-center justify-content-center cp\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"body\">\r\n <div>\r\n <label class=\"link-text\">{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Text</label><br>\r\n <input type=\"text\" class=\"input-text link-text-input\" [(ngModel)]=\"link.label\">\r\n <p class=\"desc\">This is the text that will be displayed to users</p>\r\n </div>\r\n\r\n <hr>\r\n\r\n <!-- <ng-container *ngIf=\"data.type == 'BUTTON'\">\r\n <select>\r\n <ng-container *ngFor=\"let style of styles\">\r\n <option (click)=\"changeButtonStyle(style)\" [value]=\"style.name\">{{style.name}}</option>\r\n </ng-container>\r\n <select>\r\n </ng-container> -->\r\n\r\n <ng-container *ngIf=\"data.type == 'BUTTON'\">\r\n <div class=\"field-container mb-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <label class=\"link-text mb-1\">Button</label>\r\n <div class=\"colorType d-flex align-items-center justify-content-center\">\r\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.type\" (ngModelChange)=\"changeButtonStyle()\">\r\n <ng-container *ngFor=\"let type of buttonTypes\">\r\n <option [value]=\"type.type\">\r\n {{type.type | titlecase}}\r\n </option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"preview d-flex justify-content-center\">\r\n <button class=\"btn-style w-80\" [style.borderRadius]=\"setBorderRadius()\" [style.border]=\"setBorder()\"\r\n [style.background]=\"setBackground()\">\r\n <span\r\n *ngIf=\"(data?.buttonStyle?.type === 'Text' || data?.buttonStyle?.type === 'Outline') && data?.buttonStyle?.colorType === 'Gradient'\"\r\n [ngStyle]=\"{\r\n 'background': 'linear-gradient(90deg, ' + data?.buttonStyle?.background + ' 0%, ' + data?.buttonStyle.secondaryBackground + ' 100%)'\r\n }\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.style?.colorType == 'Solid' || data?.buttonStyle?.type == 'Solid'\"\r\n [style.color]=\"setColor()\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.buttonStyle?.type === 'Outline'\"\r\n [style.color]=\"setColor()\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.buttonStyle?.type === 'Text'\"\r\n [style.color]=\"data.buttonStyle.background\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"field-container\">\r\n <label class=\"link-text\">Button Style</label>\r\n <div class=\"color-container row\">\r\n <div class=\"color br-10\">\r\n <div class=\"color-top d-flex justify-content-between mb-2 align-items-center\">\r\n <div class=\"left-side\">Color</div>\r\n <div class=\"right-side\">\r\n <div class=\"colorType d-flex align-items-center justify-content-center w-100\">\r\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.colorType\"\r\n (ngModelChange)=\"changeButtonStyle()\">\r\n <ng-container *ngFor=\"let type of backgroundType\">\r\n <option style=\"padding: 10px;\">\r\n {{ type | titlecase }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"color-bottom\">\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Solid'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\r\n (ngModelChange)=\"getContrastTextColor(data.buttonStyle.background)\" style=\"display: none;\"\r\n #colorInput>\r\n <div class=\"w-100 d-flex flex-column mt-2\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\"> {{ getColorLabel()}}</label>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.background\"\r\n (click)=\"colorInput.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Gradient'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput1>\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.secondaryBackground\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput>\r\n <div class=\"w-100 d-flex mt-2\">\r\n <div class=\"w-100 d-flex flex-column\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 1</label>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.background\"\r\n (click)=\"colorInput1.click()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"w-100 d-flex flex-column\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 2</label>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.secondaryBackground\"\r\n (click)=\"colorInput.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"gradient-direction\">\r\n <div class=\"left-direction mt-3 mb-1\"> Direction</div>\r\n <div class=\"right-direction\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"box-shadow d-flex br-10 w-80\">\r\n <ng-container *ngFor=\"let direction of directionType\">\r\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\r\n [ngClass]=\"{'selected' : data.buttonStyle?.gradientDirection === direction.type}\"\r\n (click)=\"data.buttonStyle.gradientDirection = direction.type;changeButtonStyle()\">\r\n <img class=\"w-10\" [src]=\"direction.icon\" alt=\"icon\"\r\n *ngIf=\"data.buttonStyle?.gradientDirection !== direction.type\" loading=\"lazy\">\r\n <img class=\"w-10\" [src]=\"direction.activeIcon\" alt=\"icon\"\r\n *ngIf=\"data.buttonStyle?.gradientDirection === direction.type\" loading=\"lazy\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.type != 'Text'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.textColor\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput3>\r\n <div class=\"w-100 d-flex flex-column mt-2\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Text Color</label>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.textColor\"\r\n (click)=\"colorInput3.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"corner-radius bg-white p-2 br-10 d-flex justify-content-between\"\r\n *ngIf=\"data.buttonStyle.type != 'Text'\">\r\n <div class=\"sub-text-1 d-flex align-items-center\">\r\n Corner Radius\r\n </div>\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"box-shadow d-flex br-10\">\r\n <ng-container *ngFor=\"let shape of buttonShapes\">\r\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\r\n [ngClass]=\"{'selected' : data.buttonStyle.shape === shape.type}\"\r\n (click)=\"data.buttonStyle.shape = shape.type;changeButtonStyle()\">\r\n <img [src]=\"shape.icon\" alt=\"icon\" *ngIf=\"data.buttonStyle.shape !== shape.type\" loading=\"lazy\"\r\n class=\"transition-image\">\r\n <img [src]=\"shape.activeIcon\" alt=\"icon\" *ngIf=\"data.buttonStyle?.shape === shape.type\"\r\n loading=\"lazy\" class=\"transition-image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"p-2 d-flex justify-content-between align-items-center mt-20\">\r\n <div class=\"fw-bold\">Show Icon</div>\r\n <div class=\"form-check form-switch ml-auto\">\r\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.showIcon\" role=\"switch\">\r\n </div>\r\n </div>\r\n <div>\r\n <!-- <p class=\"heading mb-0\">Image</p> -->\r\n <div class=\"upload-image cp\" *ngIf=\"link.showIcon && !link?.icon?.url\" (click)=\"updateImage()\">\r\n <img loading=\"lazy\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\r\n alt=\"\">\r\n <p class=\"upload-text mb-0\">Upload a file</p>\r\n <p class=\"upload-text mb-0\">or select an existing one</p>\r\n <span class=\"upload-text\">up to 32MB</span>\r\n </div>\r\n <div class=\"sec d-flex align-items-center\" *ngIf=\"link.showIcon && link?.icon?.url\">\r\n <ng-container *ngIf=\"!imgLoader\">\r\n <img [src]=\"link?.icon?.url\">\r\n <div class=\"repalce-image cursor-pointer\" (click)=\"updateImage()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" width=\"24\"\r\n height=\"24\" class=\"icon w-4 h-4\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m4 16 4.58579-4.5858c.78104-.781 2.04741-.781 2.82841 0L16 16m-2-2 1.5858-1.5858c.781-.781 2.0474-.781 2.8284 0L20 14m-6-6h.01M6 20h12c1.1046 0 2-.8954 2-2V6c0-1.10457-.8954-2-2-2H6c-1.10457 0-2 .89543-2 2v12c0 1.1046.89543 2 2 2Z\">\r\n </path>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"delete-image cursor-pointer \" (click)=\"deleteImage()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"#ffffff\" viewBox=\"0 0 24 24\" width=\"24\"\r\n height=\"24\" class=\"icon h-4 w-4\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m19 7-.8673 12.1425C18.0579 20.1891 17.187 21 16.1378 21H7.86224c-1.04928 0-1.92016-.8109-1.99492-1.8575L5 7m5 4v6m4-6v6m1-10V4c0-.55228-.4477-1-1-1h-4c-.55228 0-1 .44772-1 1v3M4 7h16\">\r\n </path>\r\n </svg>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"imgLoader\">\r\n <div class=\"upload_spinner d-flex w-100 h-100 justify-content-center align-items-center\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"fw-bold p-2 mb-2\">Icon Position</div>\r\n <div class=\"tabs d-flex px-2 gap-3 mb-2\" *ngIf=\"link.showIcon\">\r\n <div class=\"tab px-3 py-2\" *ngFor=\"let tab of ['left','right']\" (click)=\"link.icon.iconPosition = tab\"\r\n [class.selectedTab]=\"link?.icon?.iconPosition == tab\">\r\n {{tab | titlecase}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"data?.linkData?.length != 0\">\r\n\r\n\r\n <div class=\"groups cp\">\r\n <div *ngFor=\"let type of linkType\" [ngClass]=\"{'selectedType' : type.type === selectedType}\"\r\n (click)=\"changeType(type.type)\">{{type.type}}</div>\r\n </div>\r\n\r\n <div class=\"field-container mt-3\">\r\n <div *ngIf=\"link.linkType === RedirectionLink.Page\">\r\n <label class=\"input-label-1 mt-3 mb-2\">Select Page</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.pageId\" (ngModelChange)=\"setRedirectUrl()\">\r\n <option value=\"\" selected>Select from your existing pages</option>\r\n <option *ngFor=\"let page of templatePage\" [value]=\"page.id\" style=\"padding: 10px;\">\r\n {{page.pageName}}</option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <!-- <div class=\"sub-text\">Select from your existing pages</div> -->\r\n </div>\r\n\r\n <div *ngIf=\"link.linkType === RedirectionLink.section\">\r\n <label class=\"mt-3 mb-2 input-label-1\">Section</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.pageId\" style=\"cursor:pointer\">\r\n <option value=\"\" selected>Select the Section</option>\r\n <option *ngFor=\"let section of templatePage[0].components\" [value]=\"section.id\">{{section.sectionName}}\r\n </option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"link.linkType === RedirectionLink.External || link.linkType === RedirectionLink.Email || link.linkType === RedirectionLink.Phone\">\r\n <label class=\"mt-3 mb-2 input-label-1\">Select type</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.linkType\" style=\"cursor:pointer\">\r\n <option value=\"\" selected>Select the Type</option>\r\n <option *ngFor=\"let type of externalLinkType\" [value]=\"type.type\">{{type.type}}</option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <label class=\"input-label mb-2\">{{link.linkType === RedirectionLink.External ? 'Website' : link.linkType ===\r\n RedirectionLink.Email ? 'Email Address' : 'Phone Number'}}</label>\r\n <input type=\"text\" class=\"input-text\" [(ngModel)]=\"link.redirectionUrl\"\r\n [placeholder]=\"link.linkType === RedirectionLink.External ? 'example : https://facebook.com': ''\">\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <label class=\"input-label-2\">Open in a new browser tab</label>\r\n <div class=\"form-check form-switch ml-auto\">\r\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.newTab\" role=\"switch\">\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"footer w-100 align-items-center justify-content-center\">\r\n <button *ngIf=\"addLink\" (click)=\"addNewLink()\">Update Link</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}:host{--grey-color: rgba(250, 250, 250, 1)}.br-7{border-radius:7px}.br-10{border-radius:10px}.switch-btn{position:relative;z-index:10}.upload-image{border:3px dashed rgba(44,44,44,.6);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;margin:10px 10px 22px;border-radius:20px;box-shadow:#0000000d 0 1px 2px}.upload-image img{margin-bottom:8px;height:40px}.upload-text{background:var(--primary-bg-color);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:500}.sec{padding:10px 10px 22px;position:relative}.sec img{width:100%;height:200px;border-radius:20px}.delete-image{background-color:#d92d20;width:30px;height:30px;border-radius:6px;display:flex;justify-content:center;align-items:center;position:absolute;top:20px;right:20px}.repalce-image{display:flex;align-items:center;background:#fff;padding:2px;border-radius:6px;position:absolute;bottom:30px;left:20px}.selectedTab{background:#39393934;font-weight:700}.tab{border:1px solid rgba(44,44,44,.6);border-radius:12px}.w-90{width:90%}.sub-text-1{font-size:15px;color:#000}.w-48{width:48%}.box-shadow{box-shadow:0 0 4px #00000040}.color-box{width:50px}.selected{background:var(--primary-bg-color)}.header{height:45px;display:flex;justify-content:space-between;border-bottom:2px solid #F0F0F0;align-items:center;padding-left:15px;padding-right:15px}.header p{font-size:16px;font-weight:600;font-family:var(--primary-font-family)}.body{padding:15px}.footer{height:45px;position:absolute;bottom:0;left:0;padding:0 15px}.footer button{border:unset;border-radius:10px;font-size:15px;font-weight:500;padding:5px;color:#fff;text-align:center;background:var(--primary-bg-color)}p{margin-bottom:0!important}.link-text{font-size:15px;font-weight:600;font-family:var(--primary-font-family);color:#434343;margin-bottom:10px}.input-text{height:37px;width:100%;border:1px solid var(--grey-color);border-radius:5px;outline:none;font-size:14px;padding:10px 20px;font-weight:400;color:#090909e6}.link-text-input{background-color:var(--grey-color)}.desc{margin-top:10px;font-size:13px;color:#09090980;font-weight:400;font-family:Inter;margin-bottom:25px!important}hr{border:1px solid rgba(116,116,116,.2)}.groups{display:flex;justify-content:space-between;margin-top:25px}.groups div{font-size:15px;font-weight:600;color:#2c2c2c99;padding:6px 30px;cursor:pointer}.selectedType{text-align:center;border:1px solid var(--primary-bg-color);color:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040;border-radius:10px}.f-18{font-size:18px}.mt-10{margin-top:10px}.drop-down-container{padding:10px;border-radius:8px;background:#fff}.drop-down-container select{width:90%;appearance:none;position:relative;outline:unset;border:unset;border-right:3px solid rgba(230,230,230,1);background:#fff;font-size:14px;padding:0 10px;border-radius:unset}.drop-down-container .down-arrow{width:10%;padding:0 6px}select option{padding:10px;background:#fff;color:#000}.field-container{background:var(--grey-color);border-radius:13px;padding:10px}.sub-text{font-size:13px;color:#09090980}.input-label-1{font-size:16px;font-weight:600}.input-label-2{color:#09090980}option:hover{background:var(--primary-bg-color)}.cp{cursor:pointer}.colorType{padding:3px 10px;box-shadow:0 0 4px #00000040;border-radius:10px;width:25%;border:1px solid var(--primary-bg-color)}.colorType select{background:transparent}.border-0{outline:unset}.transition-image{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.color{background:#fff;padding:1rem}.custom-mat-form{width:100%;margin:10px 0;background-color:#f9f9f9;border-radius:8px}.custom-mat-form.mat-form-field-appearance-outline .mat-form-field-outline{color:#1976d2;border-color:#1976d2}.custom-mat-form .mat-form-field-label{color:#666;font-weight:500}.custom-mat-form .mat-select-trigger{padding:10px;font-size:14px;color:#333}::ng-deep .mat-select-panel{background-color:#fff;color:#333}::ng-deep .mat-option{font-size:14px;padding:10px 16px}::ng-deep .mat-option:hover{background-color:#e0f7fa}.color-container{padding:7px;gap:10px;border-radius:10px}.custom-input{height:35px;width:80%;border-radius:2rem;box-shadow:0 1px 3px #3c404326,0 1px 2px #3c404326}.outline-btn{border:2px solid #374151;color:#374151;background:transparent}.solid-btn{background-color:#374151;border:2px solid #374151;color:#fff}.text-btn{border:unset;color:#000}.btn-style{padding-top:5px;padding-bottom:5px;font-size:16px!important;margin-top:14px}.box-shadow{height:40px}.gradientStyle{-webkit-background-clip:text!important;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
243
243
|
}
|
|
244
244
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkEditorComponent, decorators: [{
|
|
245
245
|
type: Component,
|
|
246
|
-
args: [{ selector: 'simpo-link-editor', standalone: true, imports: [CommonModule, FormsModule, MatOptionModule, MatInputModule, MatSelectModule, MatIconModule, ButtonDirectiveDirective, MatSliderModule, MatProgressSpinner], template: "<section>\r\n <div class=\"header\">\r\n <p>{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Settings</p>\r\n <mat-icon (click)=\"closeDialog()\" class=\"f-18 d-flex align-items-center justify-content-center cp\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"body\">\r\n <div>\r\n <label class=\"link-text\">{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Text</label><br>\r\n <input type=\"text\" class=\"input-text link-text-input\" [(ngModel)]=\"link.label\">\r\n <p class=\"desc\">This is the text that will be displayed to users</p>\r\n </div>\r\n\r\n <hr>\r\n\r\n <!-- <ng-container *ngIf=\"data.type == 'BUTTON'\">\r\n <select>\r\n <ng-container *ngFor=\"let style of styles\">\r\n <option (click)=\"changeButtonStyle(style)\" [value]=\"style.name\">{{style.name}}</option>\r\n </ng-container>\r\n <select>\r\n </ng-container> -->\r\n\r\n <ng-container *ngIf=\"data.type == 'BUTTON'\">\r\n <div class=\"field-container mb-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <label class=\"link-text mb-1\">Button</label>\r\n <div class=\"colorType d-flex align-items-center justify-content-center\">\r\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.type\" (ngModelChange)=\"changeButtonStyle()\">\r\n <ng-container *ngFor=\"let type of buttonTypes\">\r\n <option [value]=\"type.type\">\r\n {{type.type | titlecase}}\r\n </option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"preview d-flex justify-content-center\">\r\n <button class=\"btn-style w-80\" [style.borderRadius]=\"setBorderRadius()\" [style.border]=\"setBorder()\"\r\n [style.background]=\"setBackground()\">\r\n <span\r\n *ngIf=\"(data?.buttonStyle?.type === 'Text' || data?.buttonStyle?.type === 'Outline') && data?.buttonStyle?.colorType === 'Gradient'\"\r\n [ngStyle]=\"{\r\n 'background': 'linear-gradient(90deg, ' + data?.buttonStyle?.background + ' 0%, ' + data?.buttonStyle.secondaryBackground + ' 100%)'\r\n }\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.style?.colorType == 'Solid' || data?.buttonStyle?.type == 'Solid'\"\r\n [style.color]=\"setColor()\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.buttonStyle?.type === 'Outline'\"\r\n [style.color]=\"setColor()\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.buttonStyle?.type === 'Text'\"\r\n [style.color]=\"data.buttonStyle.background\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"field-container\">\r\n <label class=\"link-text\">Button Style</label>\r\n <div class=\"color-container row\">\r\n <div class=\"color br-10\">\r\n <div class=\"color-top d-flex justify-content-between mb-2 align-items-center\">\r\n <div class=\"left-side\">Color</div>\r\n <div class=\"right-side\">\r\n <div class=\"colorType d-flex align-items-center justify-content-center w-100\">\r\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.colorType\"\r\n (ngModelChange)=\"changeButtonStyle()\">\r\n <ng-container *ngFor=\"let type of backgroundType\">\r\n <option style=\"padding: 10px;\">\r\n {{ type | titlecase }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"color-bottom\">\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Solid'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\r\n (ngModelChange)=\"getContrastTextColor(data.buttonStyle.background)\" style=\"display: none;\"\r\n #colorInput>\r\n <div class=\"w-100 d-flex flex-column mt-2\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\"> {{ getColorLabel()}}</label>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.background\"\r\n (click)=\"colorInput.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Gradient'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput1>\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.secondaryBackground\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput>\r\n <div class=\"w-100 d-flex mt-2\">\r\n <div class=\"w-100 d-flex flex-column\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 1</label>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.background\"\r\n (click)=\"colorInput1.click()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"w-100 d-flex flex-column\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 2</label>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.secondaryBackground\"\r\n (click)=\"colorInput.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"gradient-direction\">\r\n <div class=\"left-direction mt-3 mb-1\"> Direction</div>\r\n <div class=\"right-direction\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"box-shadow d-flex br-10 w-80\">\r\n <ng-container *ngFor=\"let direction of directionType\">\r\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\r\n [ngClass]=\"{'selected' : data.buttonStyle?.gradientDirection === direction.type}\"\r\n (click)=\"data.buttonStyle.gradientDirection = direction.type;changeButtonStyle()\">\r\n <img class=\"w-10\" [src]=\"direction.icon\" alt=\"icon\"\r\n *ngIf=\"data.buttonStyle?.gradientDirection !== direction.type\" loading=\"lazy\">\r\n <img class=\"w-10\" [src]=\"direction.activeIcon\" alt=\"icon\"\r\n *ngIf=\"data.buttonStyle?.gradientDirection === direction.type\" loading=\"lazy\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.type != 'Text'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.textColor\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput3>\r\n <div class=\"w-100 d-flex flex-column mt-2\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Text Color</label>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.textColor\"\r\n (click)=\"colorInput3.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"corner-radius bg-white p-2 br-10 d-flex justify-content-between\"\r\n *ngIf=\"data.buttonStyle.type != 'Text'\">\r\n <div class=\"sub-text-1 d-flex align-items-center\">\r\n Corner Radius\r\n </div>\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"box-shadow d-flex br-10\">\r\n <ng-container *ngFor=\"let shape of buttonShapes\">\r\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\r\n [ngClass]=\"{'selected' : data.buttonStyle.shape === shape.type}\"\r\n (click)=\"data.buttonStyle.shape = shape.type;changeButtonStyle()\">\r\n <img [src]=\"shape.icon\" alt=\"icon\" *ngIf=\"data.buttonStyle.shape !== shape.type\" loading=\"lazy\"\r\n class=\"transition-image\">\r\n <img [src]=\"shape.activeIcon\" alt=\"icon\" *ngIf=\"data.buttonStyle?.shape === shape.type\"\r\n loading=\"lazy\" class=\"transition-image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"p-2 d-flex justify-content-between align-items-center mt-20\">\r\n <div class=\"fw-bold\">Show Icon</div>\r\n <div class=\"form-check form-switch ml-auto\">\r\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.showIcon\" role=\"switch\">\r\n </div>\r\n </div>\r\n <div>\r\n <!-- <p class=\"heading mb-0\">Image</p> -->\r\n <div class=\"upload-image cp\" *ngIf=\"link.showIcon && !link?.icon?.url\" (click)=\"updateImage()\">\r\n <img loading=\"lazy\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\r\n alt=\"\">\r\n <p class=\"upload-text mb-0\">Upload a file</p>\r\n <p class=\"upload-text mb-0\">or select an existing one</p>\r\n <span class=\"upload-text\">up to 32MB</span>\r\n </div>\r\n <div class=\"sec d-flex align-items-center\" *ngIf=\"link.showIcon && link?.icon?.url\">\r\n <ng-container *ngIf=\"!imgLoader\">\r\n <img [src]=\"link?.icon?.url\">\r\n <div class=\"repalce-image cursor-pointer\" (click)=\"updateImage()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" width=\"24\"\r\n height=\"24\" class=\"icon w-4 h-4\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m4 16 4.58579-4.5858c.78104-.781 2.04741-.781 2.82841 0L16 16m-2-2 1.5858-1.5858c.781-.781 2.0474-.781 2.8284 0L20 14m-6-6h.01M6 20h12c1.1046 0 2-.8954 2-2V6c0-1.10457-.8954-2-2-2H6c-1.10457 0-2 .89543-2 2v12c0 1.1046.89543 2 2 2Z\">\r\n </path>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"delete-image cursor-pointer \" (click)=\"deleteImage()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"#ffffff\" viewBox=\"0 0 24 24\" width=\"24\"\r\n height=\"24\" class=\"icon h-4 w-4\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m19 7-.8673 12.1425C18.0579 20.1891 17.187 21 16.1378 21H7.86224c-1.04928 0-1.92016-.8109-1.99492-1.8575L5 7m5 4v6m4-6v6m1-10V4c0-.55228-.4477-1-1-1h-4c-.55228 0-1 .44772-1 1v3M4 7h16\">\r\n </path>\r\n </svg>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"imgLoader\">\r\n <div class=\"upload_spinner d-flex w-100 h-100 justify-content-center align-items-center\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"fw-bold p-2 mb-2\">Icon Position</div>\r\n <div class=\"tabs d-flex px-2 gap-3 mb-2\" *ngIf=\"link.showIcon\">\r\n <div class=\"tab px-3 py-2\" *ngFor=\"let tab of ['left','right']\" (click)=\"link.icon.iconPosition = tab\"\r\n [class.selectedTab]=\"link?.icon?.iconPosition == tab\">\r\n {{tab | titlecase}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"data?.linkData?.length != 0\">\r\n\r\n\r\n <div class=\"groups cp\">\r\n <div *ngFor=\"let type of linkType\" [ngClass]=\"{'selectedType' : type.type === selectedType}\"\r\n (click)=\"changeType(type.type)\">{{type.type}}</div>\r\n </div>\r\n\r\n <div class=\"field-container mt-3\">\r\n <div *ngIf=\"link.linkType === RedirectionLink.Page\">\r\n <label class=\"input-label-1 mt-3 mb-2\">Select Page</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.pageId\" (ngModelChange)=\"setRedirectUrl()\">\r\n <option value=\"\" selected>Select from your existing pages</option>\r\n <option *ngFor=\"let page of templatePage\" [value]=\"page.id\" style=\"padding: 10px;\">\r\n {{page.pageName}}</option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <!-- <div class=\"sub-text\">Select from your existing pages</div> -->\r\n </div>\r\n\r\n <div *ngIf=\"link.linkType === RedirectionLink.section\">\r\n <label class=\"mt-3 mb-2 input-label-1\">Section</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.pageId\" style=\"cursor:pointer\">\r\n <option value=\"\" selected>Select the Section</option>\r\n <option *ngFor=\"let section of templatePage[0].components\" [value]=\"section.id\">{{section.sectionName}}\r\n </option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"link.linkType === RedirectionLink.External || link.linkType === RedirectionLink.Email || link.linkType === RedirectionLink.Phone\">\r\n <label class=\"mt-3 mb-2 input-label-1\">Select type</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.linkType\" style=\"cursor:pointer\">\r\n <option value=\"\" selected>Select the Type</option>\r\n <option *ngFor=\"let type of externalLinkType\" [value]=\"type.type\">{{type.type}}</option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <label class=\"input-label mb-2\">{{link.linkType === RedirectionLink.External ? 'Website' : link.linkType ===\r\n RedirectionLink.Email ? 'Email Address' : 'Phone Number'}}</label>\r\n <input type=\"text\" class=\"input-text\" [(ngModel)]=\"link.redirectionUrl\"\r\n [placeholder]=\"link.linkType === RedirectionLink.External ? 'example : https://facebook.com': ''\">\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <label class=\"input-label-2\">Open in a new browser tab</label>\r\n <div class=\"form-check form-switch ml-auto\">\r\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.newTab\" role=\"switch\">\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"footer w-100 align-items-center justify-content-center\">\r\n <button *ngIf=\"addLink\" (click)=\"addNewLink()\">Update Link</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}:host{--grey-color: rgba(250, 250, 250, 1)}.br-7{border-radius:7px}.br-10{border-radius:10px}.switch-btn{position:relative;z-index:10}.upload-image{border:3px dashed rgba(44,44,44,.6);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;margin:10px 10px 22px;border-radius:20px;box-shadow:#0000000d 0 1px 2px}.upload-image img{margin-bottom:8px;height:40px}.upload-text{background:var(--primary-bg-color);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:500}.sec{padding:10px 10px 22px;position:relative}.sec img{width:100%;height:200px;border-radius:20px}.delete-image{background-color:#d92d20;width:30px;height:30px;border-radius:6px;display:flex;justify-content:center;align-items:center;position:absolute;top:20px;right:20px}.repalce-image{display:flex;align-items:center;background:#fff;padding:2px;border-radius:6px;position:absolute;bottom:30px;left:20px}.selectedTab{background:#39393934;font-weight:700}.tab{border:1px solid rgba(44,44,44,.6);border-radius:12px}.w-90{width:90%}.sub-text-1{font-size:15px;color:#000}.w-48{width:48%}.box-shadow{box-shadow:0 0 4px #00000040}.color-box{width:50px}.selected{background:var(--primary-bg-color)}.header{height:45px;display:flex;justify-content:space-between;border-bottom:2px solid #F0F0F0;align-items:center;padding-left:15px;padding-right:15px}.header p{font-size:16px;font-weight:600;font-family:var(--primary-font-family)}.body{padding:15px}.footer{height:45px;position:absolute;bottom:0;left:0;padding:0 15px}.footer button{border:unset;border-radius:10px;font-size:15px;font-weight:500;padding:5px;color:#fff;text-align:center;background:var(--primary-bg-color)}p{margin-bottom:0!important}.link-text{font-size:15px;font-weight:600;font-family:var(--primary-font-family);color:#434343;margin-bottom:10px}.input-text{height:37px;width:100%;border:1px solid var(--grey-color);border-radius:5px;outline:none;font-size:14px;padding:10px 20px;font-weight:400;color:#090909e6}.link-text-input{background-color:var(--grey-color)}.desc{margin-top:10px;font-size:13px;color:#09090980;font-weight:400;font-family:Inter;margin-bottom:25px!important}hr{border:1px solid rgba(116,116,116,.2)}.groups{display:flex;justify-content:space-between;margin-top:25px}.groups div{font-size:15px;font-weight:600;color:#2c2c2c99;padding:6px 30px;cursor:pointer}.selectedType{position:relative;text-align:center;background:var(--primary-bg-color);background-clip:text;box-shadow:0 0 4px #00000040;border-radius:10px}.selectedType:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.f-18{font-size:18px}.mt-10{margin-top:10px}.drop-down-container{padding:10px;border-radius:8px;background:#fff}.drop-down-container select{width:90%;appearance:none;position:relative;outline:unset;border:unset;border-right:3px solid rgba(230,230,230,1);background:#fff;font-size:14px;padding:0 10px;border-radius:unset}.drop-down-container .down-arrow{width:10%;padding:0 6px}select option{padding:10px;background:#fff;color:#000}.field-container{background:var(--grey-color);border-radius:13px;padding:10px}.sub-text{font-size:13px;color:#09090980}.input-label-1{font-size:16px;font-weight:600}.input-label-2{color:#09090980}option:hover{background:var(--primary-bg-color)}.cp{cursor:pointer}.colorType{padding:3px 10px;box-shadow:0 0 4px #00000040;border-radius:10px;width:25%;border:1px solid #090981}.colorType select{background:transparent}.border-0{outline:unset}.transition-image{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.color{background:#fff;padding:1rem}.custom-mat-form{width:100%;margin:10px 0;background-color:#f9f9f9;border-radius:8px}.custom-mat-form.mat-form-field-appearance-outline .mat-form-field-outline{color:#1976d2;border-color:#1976d2}.custom-mat-form .mat-form-field-label{color:#666;font-weight:500}.custom-mat-form .mat-select-trigger{padding:10px;font-size:14px;color:#333}::ng-deep .mat-select-panel{background-color:#fff;color:#333}::ng-deep .mat-option{font-size:14px;padding:10px 16px}::ng-deep .mat-option:hover{background-color:#e0f7fa}.color-container{padding:7px;gap:10px;border-radius:10px}.custom-input{height:35px;width:80%;border-radius:2rem;box-shadow:0 1px 3px #3c404326,0 1px 2px #3c404326}.outline-btn{border:2px solid #374151;color:#374151;background:transparent}.solid-btn{background-color:#374151;border:2px solid #374151;color:#fff}.text-btn{border:unset;color:#000}.btn-style{padding-top:5px;padding-bottom:5px;font-size:16px!important;margin-top:14px}.box-shadow{height:40px}.gradientStyle{-webkit-background-clip:text!important;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}\n"] }]
|
|
246
|
+
args: [{ selector: 'simpo-link-editor', standalone: true, imports: [CommonModule, FormsModule, MatOptionModule, MatInputModule, MatSelectModule, MatIconModule, ButtonDirectiveDirective, MatSliderModule, MatProgressSpinner], template: "<section>\r\n <div class=\"header\">\r\n <p>{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Settings</p>\r\n <mat-icon (click)=\"closeDialog()\" class=\"f-18 d-flex align-items-center justify-content-center cp\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"body\">\r\n <div>\r\n <label class=\"link-text\">{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Text</label><br>\r\n <input type=\"text\" class=\"input-text link-text-input\" [(ngModel)]=\"link.label\">\r\n <p class=\"desc\">This is the text that will be displayed to users</p>\r\n </div>\r\n\r\n <hr>\r\n\r\n <!-- <ng-container *ngIf=\"data.type == 'BUTTON'\">\r\n <select>\r\n <ng-container *ngFor=\"let style of styles\">\r\n <option (click)=\"changeButtonStyle(style)\" [value]=\"style.name\">{{style.name}}</option>\r\n </ng-container>\r\n <select>\r\n </ng-container> -->\r\n\r\n <ng-container *ngIf=\"data.type == 'BUTTON'\">\r\n <div class=\"field-container mb-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <label class=\"link-text mb-1\">Button</label>\r\n <div class=\"colorType d-flex align-items-center justify-content-center\">\r\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.type\" (ngModelChange)=\"changeButtonStyle()\">\r\n <ng-container *ngFor=\"let type of buttonTypes\">\r\n <option [value]=\"type.type\">\r\n {{type.type | titlecase}}\r\n </option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"preview d-flex justify-content-center\">\r\n <button class=\"btn-style w-80\" [style.borderRadius]=\"setBorderRadius()\" [style.border]=\"setBorder()\"\r\n [style.background]=\"setBackground()\">\r\n <span\r\n *ngIf=\"(data?.buttonStyle?.type === 'Text' || data?.buttonStyle?.type === 'Outline') && data?.buttonStyle?.colorType === 'Gradient'\"\r\n [ngStyle]=\"{\r\n 'background': 'linear-gradient(90deg, ' + data?.buttonStyle?.background + ' 0%, ' + data?.buttonStyle.secondaryBackground + ' 100%)'\r\n }\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.style?.colorType == 'Solid' || data?.buttonStyle?.type == 'Solid'\"\r\n [style.color]=\"setColor()\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.buttonStyle?.type === 'Outline'\"\r\n [style.color]=\"setColor()\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n <span *ngIf=\"data?.buttonStyle?.type === 'Text'\"\r\n [style.color]=\"data.buttonStyle.background\">\r\n {{ link.label ? link.label : \"Button Text\"}}\r\n </span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"field-container\">\r\n <label class=\"link-text\">Button Style</label>\r\n <div class=\"color-container row\">\r\n <div class=\"color br-10\">\r\n <div class=\"color-top d-flex justify-content-between mb-2 align-items-center\">\r\n <div class=\"left-side\">Color</div>\r\n <div class=\"right-side\">\r\n <div class=\"colorType d-flex align-items-center justify-content-center w-100\">\r\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.colorType\"\r\n (ngModelChange)=\"changeButtonStyle()\">\r\n <ng-container *ngFor=\"let type of backgroundType\">\r\n <option style=\"padding: 10px;\">\r\n {{ type | titlecase }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"color-bottom\">\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Solid'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\r\n (ngModelChange)=\"getContrastTextColor(data.buttonStyle.background)\" style=\"display: none;\"\r\n #colorInput>\r\n <div class=\"w-100 d-flex flex-column mt-2\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\"> {{ getColorLabel()}}</label>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.background\"\r\n (click)=\"colorInput.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Gradient'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput1>\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.secondaryBackground\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput>\r\n <div class=\"w-100 d-flex mt-2\">\r\n <div class=\"w-100 d-flex flex-column\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 1</label>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.background\"\r\n (click)=\"colorInput1.click()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"w-100 d-flex flex-column\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 2</label>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.secondaryBackground\"\r\n (click)=\"colorInput.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"gradient-direction\">\r\n <div class=\"left-direction mt-3 mb-1\"> Direction</div>\r\n <div class=\"right-direction\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"box-shadow d-flex br-10 w-80\">\r\n <ng-container *ngFor=\"let direction of directionType\">\r\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\r\n [ngClass]=\"{'selected' : data.buttonStyle?.gradientDirection === direction.type}\"\r\n (click)=\"data.buttonStyle.gradientDirection = direction.type;changeButtonStyle()\">\r\n <img class=\"w-10\" [src]=\"direction.icon\" alt=\"icon\"\r\n *ngIf=\"data.buttonStyle?.gradientDirection !== direction.type\" loading=\"lazy\">\r\n <img class=\"w-10\" [src]=\"direction.activeIcon\" alt=\"icon\"\r\n *ngIf=\"data.buttonStyle?.gradientDirection === direction.type\" loading=\"lazy\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.type != 'Text'\">\r\n <div class=\"text-background\">\r\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.textColor\"\r\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput3>\r\n <div class=\"w-100 d-flex flex-column mt-2\">\r\n <label class=\"color-text mb-1 d-flex justify-content-center\">Text Color</label>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.textColor\"\r\n (click)=\"colorInput3.click()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"corner-radius bg-white p-2 br-10 d-flex justify-content-between\"\r\n *ngIf=\"data.buttonStyle.type != 'Text'\">\r\n <div class=\"sub-text-1 d-flex align-items-center\">\r\n Corner Radius\r\n </div>\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"box-shadow d-flex br-10\">\r\n <ng-container *ngFor=\"let shape of buttonShapes\">\r\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\r\n [ngClass]=\"{'selected' : data.buttonStyle.shape === shape.type}\"\r\n (click)=\"data.buttonStyle.shape = shape.type;changeButtonStyle()\">\r\n <img [src]=\"shape.icon\" alt=\"icon\" *ngIf=\"data.buttonStyle.shape !== shape.type\" loading=\"lazy\"\r\n class=\"transition-image\">\r\n <img [src]=\"shape.activeIcon\" alt=\"icon\" *ngIf=\"data.buttonStyle?.shape === shape.type\"\r\n loading=\"lazy\" class=\"transition-image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"p-2 d-flex justify-content-between align-items-center mt-20\">\r\n <div class=\"fw-bold\">Show Icon</div>\r\n <div class=\"form-check form-switch ml-auto\">\r\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.showIcon\" role=\"switch\">\r\n </div>\r\n </div>\r\n <div>\r\n <!-- <p class=\"heading mb-0\">Image</p> -->\r\n <div class=\"upload-image cp\" *ngIf=\"link.showIcon && !link?.icon?.url\" (click)=\"updateImage()\">\r\n <img loading=\"lazy\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\r\n alt=\"\">\r\n <p class=\"upload-text mb-0\">Upload a file</p>\r\n <p class=\"upload-text mb-0\">or select an existing one</p>\r\n <span class=\"upload-text\">up to 32MB</span>\r\n </div>\r\n <div class=\"sec d-flex align-items-center\" *ngIf=\"link.showIcon && link?.icon?.url\">\r\n <ng-container *ngIf=\"!imgLoader\">\r\n <img [src]=\"link?.icon?.url\">\r\n <div class=\"repalce-image cursor-pointer\" (click)=\"updateImage()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" width=\"24\"\r\n height=\"24\" class=\"icon w-4 h-4\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m4 16 4.58579-4.5858c.78104-.781 2.04741-.781 2.82841 0L16 16m-2-2 1.5858-1.5858c.781-.781 2.0474-.781 2.8284 0L20 14m-6-6h.01M6 20h12c1.1046 0 2-.8954 2-2V6c0-1.10457-.8954-2-2-2H6c-1.10457 0-2 .89543-2 2v12c0 1.1046.89543 2 2 2Z\">\r\n </path>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"delete-image cursor-pointer \" (click)=\"deleteImage()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"#ffffff\" viewBox=\"0 0 24 24\" width=\"24\"\r\n height=\"24\" class=\"icon h-4 w-4\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m19 7-.8673 12.1425C18.0579 20.1891 17.187 21 16.1378 21H7.86224c-1.04928 0-1.92016-.8109-1.99492-1.8575L5 7m5 4v6m4-6v6m1-10V4c0-.55228-.4477-1-1-1h-4c-.55228 0-1 .44772-1 1v3M4 7h16\">\r\n </path>\r\n </svg>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"imgLoader\">\r\n <div class=\"upload_spinner d-flex w-100 h-100 justify-content-center align-items-center\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"fw-bold p-2 mb-2\">Icon Position</div>\r\n <div class=\"tabs d-flex px-2 gap-3 mb-2\" *ngIf=\"link.showIcon\">\r\n <div class=\"tab px-3 py-2\" *ngFor=\"let tab of ['left','right']\" (click)=\"link.icon.iconPosition = tab\"\r\n [class.selectedTab]=\"link?.icon?.iconPosition == tab\">\r\n {{tab | titlecase}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"data?.linkData?.length != 0\">\r\n\r\n\r\n <div class=\"groups cp\">\r\n <div *ngFor=\"let type of linkType\" [ngClass]=\"{'selectedType' : type.type === selectedType}\"\r\n (click)=\"changeType(type.type)\">{{type.type}}</div>\r\n </div>\r\n\r\n <div class=\"field-container mt-3\">\r\n <div *ngIf=\"link.linkType === RedirectionLink.Page\">\r\n <label class=\"input-label-1 mt-3 mb-2\">Select Page</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.pageId\" (ngModelChange)=\"setRedirectUrl()\">\r\n <option value=\"\" selected>Select from your existing pages</option>\r\n <option *ngFor=\"let page of templatePage\" [value]=\"page.id\" style=\"padding: 10px;\">\r\n {{page.pageName}}</option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <!-- <div class=\"sub-text\">Select from your existing pages</div> -->\r\n </div>\r\n\r\n <div *ngIf=\"link.linkType === RedirectionLink.section\">\r\n <label class=\"mt-3 mb-2 input-label-1\">Section</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.pageId\" style=\"cursor:pointer\">\r\n <option value=\"\" selected>Select the Section</option>\r\n <option *ngFor=\"let section of templatePage[0].components\" [value]=\"section.id\">{{section.sectionName}}\r\n </option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"link.linkType === RedirectionLink.External || link.linkType === RedirectionLink.Email || link.linkType === RedirectionLink.Phone\">\r\n <label class=\"mt-3 mb-2 input-label-1\">Select type</label>\r\n <div class=\"drop-down-container w-100 d-flex mb-2\">\r\n <select [(ngModel)]=\"link.linkType\" style=\"cursor:pointer\">\r\n <option value=\"\" selected>Select the Type</option>\r\n <option *ngFor=\"let type of externalLinkType\" [value]=\"type.type\">{{type.type}}</option>\r\n </select>\r\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <label class=\"input-label mb-2\">{{link.linkType === RedirectionLink.External ? 'Website' : link.linkType ===\r\n RedirectionLink.Email ? 'Email Address' : 'Phone Number'}}</label>\r\n <input type=\"text\" class=\"input-text\" [(ngModel)]=\"link.redirectionUrl\"\r\n [placeholder]=\"link.linkType === RedirectionLink.External ? 'example : https://facebook.com': ''\">\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <label class=\"input-label-2\">Open in a new browser tab</label>\r\n <div class=\"form-check form-switch ml-auto\">\r\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.newTab\" role=\"switch\">\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"footer w-100 align-items-center justify-content-center\">\r\n <button *ngIf=\"addLink\" (click)=\"addNewLink()\">Update Link</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}:host{--grey-color: rgba(250, 250, 250, 1)}.br-7{border-radius:7px}.br-10{border-radius:10px}.switch-btn{position:relative;z-index:10}.upload-image{border:3px dashed rgba(44,44,44,.6);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;margin:10px 10px 22px;border-radius:20px;box-shadow:#0000000d 0 1px 2px}.upload-image img{margin-bottom:8px;height:40px}.upload-text{background:var(--primary-bg-color);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:500}.sec{padding:10px 10px 22px;position:relative}.sec img{width:100%;height:200px;border-radius:20px}.delete-image{background-color:#d92d20;width:30px;height:30px;border-radius:6px;display:flex;justify-content:center;align-items:center;position:absolute;top:20px;right:20px}.repalce-image{display:flex;align-items:center;background:#fff;padding:2px;border-radius:6px;position:absolute;bottom:30px;left:20px}.selectedTab{background:#39393934;font-weight:700}.tab{border:1px solid rgba(44,44,44,.6);border-radius:12px}.w-90{width:90%}.sub-text-1{font-size:15px;color:#000}.w-48{width:48%}.box-shadow{box-shadow:0 0 4px #00000040}.color-box{width:50px}.selected{background:var(--primary-bg-color)}.header{height:45px;display:flex;justify-content:space-between;border-bottom:2px solid #F0F0F0;align-items:center;padding-left:15px;padding-right:15px}.header p{font-size:16px;font-weight:600;font-family:var(--primary-font-family)}.body{padding:15px}.footer{height:45px;position:absolute;bottom:0;left:0;padding:0 15px}.footer button{border:unset;border-radius:10px;font-size:15px;font-weight:500;padding:5px;color:#fff;text-align:center;background:var(--primary-bg-color)}p{margin-bottom:0!important}.link-text{font-size:15px;font-weight:600;font-family:var(--primary-font-family);color:#434343;margin-bottom:10px}.input-text{height:37px;width:100%;border:1px solid var(--grey-color);border-radius:5px;outline:none;font-size:14px;padding:10px 20px;font-weight:400;color:#090909e6}.link-text-input{background-color:var(--grey-color)}.desc{margin-top:10px;font-size:13px;color:#09090980;font-weight:400;font-family:Inter;margin-bottom:25px!important}hr{border:1px solid rgba(116,116,116,.2)}.groups{display:flex;justify-content:space-between;margin-top:25px}.groups div{font-size:15px;font-weight:600;color:#2c2c2c99;padding:6px 30px;cursor:pointer}.selectedType{text-align:center;border:1px solid var(--primary-bg-color);color:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040;border-radius:10px}.f-18{font-size:18px}.mt-10{margin-top:10px}.drop-down-container{padding:10px;border-radius:8px;background:#fff}.drop-down-container select{width:90%;appearance:none;position:relative;outline:unset;border:unset;border-right:3px solid rgba(230,230,230,1);background:#fff;font-size:14px;padding:0 10px;border-radius:unset}.drop-down-container .down-arrow{width:10%;padding:0 6px}select option{padding:10px;background:#fff;color:#000}.field-container{background:var(--grey-color);border-radius:13px;padding:10px}.sub-text{font-size:13px;color:#09090980}.input-label-1{font-size:16px;font-weight:600}.input-label-2{color:#09090980}option:hover{background:var(--primary-bg-color)}.cp{cursor:pointer}.colorType{padding:3px 10px;box-shadow:0 0 4px #00000040;border-radius:10px;width:25%;border:1px solid var(--primary-bg-color)}.colorType select{background:transparent}.border-0{outline:unset}.transition-image{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.color{background:#fff;padding:1rem}.custom-mat-form{width:100%;margin:10px 0;background-color:#f9f9f9;border-radius:8px}.custom-mat-form.mat-form-field-appearance-outline .mat-form-field-outline{color:#1976d2;border-color:#1976d2}.custom-mat-form .mat-form-field-label{color:#666;font-weight:500}.custom-mat-form .mat-select-trigger{padding:10px;font-size:14px;color:#333}::ng-deep .mat-select-panel{background-color:#fff;color:#333}::ng-deep .mat-option{font-size:14px;padding:10px 16px}::ng-deep .mat-option:hover{background-color:#e0f7fa}.color-container{padding:7px;gap:10px;border-radius:10px}.custom-input{height:35px;width:80%;border-radius:2rem;box-shadow:0 1px 3px #3c404326,0 1px 2px #3c404326}.outline-btn{border:2px solid #374151;color:#374151;background:transparent}.solid-btn{background-color:#374151;border:2px solid #374151;color:#fff}.text-btn{border:unset;color:#000}.btn-style{padding-top:5px;padding-bottom:5px;font-size:16px!important;margin-top:14px}.box-shadow{height:40px}.gradientStyle{-webkit-background-clip:text!important;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}\n"] }]
|
|
247
247
|
}], ctorParameters: () => [{ type: i1.ElementServiceService }, { type: i2.MatDialogRef }, { type: undefined, decorators: [{
|
|
248
248
|
type: Inject,
|
|
249
249
|
args: [MAT_DIALOG_DATA]
|
|
250
250
|
}] }, { type: i3.EventsService }, { type: i2.MatDialog }] });
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9saW5rLWVkaXRvci9saW5rLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL2xpbmstZWRpdG9yL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7OztBQVN4RSxNQUFNLE9BQU8sbUJBQW1CO0lBbUc5QixZQUFvQixhQUFvQyxFQUMvQyxTQUE0QyxFQUNuQixJQUFTLEVBQ2pDLFlBQTJCLEVBQzNCLFNBQW9CO1FBSlYsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQy9DLGNBQVMsR0FBVCxTQUFTLENBQW1DO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQUs7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQWU7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXRHOUIsU0FBSSxHQUFXO1lBQ2IsUUFBUSxFQUFFLG1CQUFtQixDQUFDLElBQUk7WUFDbEMsS0FBSyxFQUFFLEVBQUU7WUFDVCxjQUFjLEVBQUUsRUFBRTtZQUNsQixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQztRQUVGLG9CQUFlLEdBQUcsbUJBQW1CLENBQUE7UUFDckMscUJBQWdCLEdBQWdCO1lBQzlCO2dCQUNFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxRQUFRO2FBQ25DO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG1CQUFtQixDQUFDLEtBQUs7YUFDaEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSzthQUNoQztZQUNELElBQUk7WUFDSixzQ0FBc0M7WUFDdEMsSUFBSTtTQUNMLENBQUE7UUFFRCxpQkFBWSxHQUF3QixtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFDN0QsYUFBUSxHQUFVO1lBQ2hCO2dCQUNFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO2FBQy9CO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG1CQUFtQixDQUFDLE9BQU87YUFDbEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsUUFBUTthQUNuQztTQUNGLENBQUE7UUFFRCxnQkFBVyxHQUFVO1lBQ25CO2dCQUNFLElBQUksRUFBRSxPQUFPO2FBQ2Q7WUFDRDtnQkFDRSxJQUFJLEVBQUUsU0FBUzthQUNoQjtZQUNEO2dCQUNFLElBQUksRUFBRSxNQUFNO2FBQ2I7U0FDRixDQUFBO1FBRUQsaUJBQVksR0FBVTtZQUNwQjtnQkFDRSxJQUFJLEVBQUUsNkZBQTZGO2dCQUNuRyxVQUFVLEVBQUUsNkZBQTZGO2dCQUN6RyxJQUFJLEVBQUUsUUFBUTthQUNmO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHVGQUF1RjtnQkFDN0YsVUFBVSxFQUFFLDZGQUE2RjtnQkFDekcsSUFBSSxFQUFFLE9BQU87YUFDZDtZQUNEO2dCQUNFLElBQUksRUFBRSx1RkFBdUY7Z0JBQzdGLFVBQVUsRUFBRSw2RkFBNkY7Z0JBQ3pHLElBQUksRUFBRSxPQUFPO2FBQ2Q7U0FDRixDQUFBO1FBRUQsa0JBQWEsR0FBVTtZQUNyQjtnQkFDRSxJQUFJLEVBQUUsc0ZBQXNGO2dCQUM1RixVQUFVLEVBQUUsc0ZBQXNGO2dCQUNsRyxJQUFJLEVBQUUsTUFBTTthQUNiO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHVGQUF1RjtnQkFDN0YsVUFBVSxFQUFFLDJGQUEyRjtnQkFDdkcsSUFBSSxFQUFFLE9BQU87YUFDZDtZQUNEO2dCQUNFLElBQUksRUFBRSwyRkFBMkY7Z0JBQ2pHLFVBQVUsRUFBRSwyRkFBMkY7Z0JBQ3ZHLElBQUksRUFBRSxnQkFBZ0I7YUFDdkI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsMkZBQTJGO2dCQUNqRyxVQUFVLEVBQUUsMkZBQTJGO2dCQUN2RyxJQUFJLEVBQUUsZUFBZTthQUN0QjtTQUVGLENBQUE7UUFNRCxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6QixZQUFPLEdBQVksSUFBSSxDQUFDO1FBK0V4QixtQkFBYyxHQUFhLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBMkNqRCxjQUFTLEdBQVksS0FBSyxDQUFDO0lBbkh2QixDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssbUJBQW1CLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3SyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQjtnQkFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsaUJBQWlCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ2xILENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQXlCO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDekMsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzdDLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUM7YUFDSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMvQyxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUlELGlCQUFpQjtRQUNmLFdBQVc7UUFDWCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3hGLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQzVDLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDckosQ0FBQztJQUNELG9CQUFvQixDQUFDLGFBQWtCO1FBQ3JDLElBQUksR0FBRyxHQUFHLGFBQWEsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTFDLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDaEQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNoRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNySixDQUFDO0lBR0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lB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Z0JBQ2xELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDeEIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQTtRQUM3QixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtnQkFDcEMsTUFBSztZQUNQLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0FyUFUsbUJBQW1CLG1GQXFHcEIsZUFBZTttR0FyR2QsbUJBQW1CLDZFQzFCaEMsNndpQkEwVFUscTRKRHBTRSxZQUFZLCtlQUFFLFdBQVcsMHJDQUFFLGVBQWUsOEJBQUUsY0FBYyw4QkFBRSxlQUFlLDhCQUFFLGFBQWEsbUxBQTRCLGVBQWUsK0JBQUUsa0JBQWtCOzs0RkFJeEosbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUM7OzBCQXlHakssTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbiwgQnV0dG9uU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyYWRpZW50RGlyZWN0aW9uLCBSZWRpcmVjdGlvbkxpbmtUeXBlIH0gZnJvbSAnLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE1lZGlhU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9tZWRpYS1zZWxlY3Rvci9tZWRpYS1zZWxlY3Rvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZXInO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tbGluay1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIE1hdE9wdGlvbk1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLCBNYXRTbGlkZXJNb2R1bGUsIE1hdFByb2dyZXNzU3Bpbm5lcl0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbGluay1lZGl0b3IuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIExpbmtFZGl0b3JDb21wb25lbnQge1xyXG4gIGxpbms6IEJ1dHRvbiA9IHtcclxuICAgIGxpbmtUeXBlOiBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2UsXHJcbiAgICBsYWJlbDogJycsXHJcbiAgICByZWRpcmVjdGlvblVybDogJycsXHJcbiAgICBwYWdlSWQ6ICcnLFxyXG4gICAgbmV3VGFiOiBmYWxzZSxcclxuICB9O1xyXG5cclxuICBSZWRpcmVjdGlvbkxpbmsgPSBSZWRpcmVjdGlvbkxpbmtUeXBlXHJcbiAgZXh0ZXJuYWxMaW5rVHlwZTogQXJyYXk8dHlwZT4gPSBbXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuRXh0ZXJuYWxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuRW1haWxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuUGhvbmVcclxuICAgIH1cclxuICAgIC8vIHtcclxuICAgIC8vICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5zZWN0aW9uXHJcbiAgICAvLyB9XHJcbiAgXVxyXG5cclxuICBzZWxlY3RlZFR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUgPSBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2U7XHJcbiAgbGlua1R5cGU6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICB0eXBlOiBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuc2VjdGlvblxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5FeHRlcm5hbFxyXG4gICAgfVxyXG4gIF1cclxuXHJcbiAgYnV0dG9uVHlwZXM6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICB0eXBlOiBcIlNvbGlkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFwiT3V0bGluZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiBcIlRleHRcIlxyXG4gICAgfVxyXG4gIF1cclxuXHJcbiAgYnV0dG9uU2hhcGVzOiBhbnlbXSA9IFtcclxuICAgIHtcclxuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzgzMjk2OGMxNzQ3MjIxMjcwODU2VmVjdG9yJTIwNDglMjAoMikucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy80ODE4NTBjMTc0NzIyMDkzNzY5M1ZlY3RvciUyMDQ4JTIwKDEpLnBuZ1wiLFxyXG4gICAgICB0eXBlOiBcIlNxdWFyZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvODMwODQyYzE3NDcyMjA3NTc0NTNWZWN0b3IlMjA0OS5wbmdcIixcclxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzc4MDYwMWMxNzQ3MjIxMjQzNjEzVmVjdG9yJTIwNDklMjAoMSkucG5nXCIsXHJcbiAgICAgIHR5cGU6IFwiQ3VydmVcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzIxMDM1MGMxNzQ3MjIwODAzNTIxVmVjdG9yJTIwNTAucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy85Mzk2MTFjMTc0NzIyMDkwMDEyNFZlY3RvciUyMDUwJTIwKDEpLnBuZ1wiLFxyXG4gICAgICB0eXBlOiBcIlJvdW5kXCJcclxuICAgIH1cclxuICBdXHJcblxyXG4gIGRpcmVjdGlvblR5cGU6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNjY0NDAzYzE3NDczMDY4NDAzMDRhcnJvdy1kb3duLnBuZ1wiLFxyXG4gICAgICBhY3RpdmVJY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNTg3NDMwYzE3NDczMDY4OTg0NjVhcnJvdy1kb3duLnBuZ1wiLFxyXG4gICAgICB0eXBlOiBcIkRPV05cIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzE5MzM1OWMxNzQ3MzA2OTQ5NTIyYXJyb3ctcmlnaHQucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy80NTA5NDNjMTc0NzMxNzc1OTM4OGFycm93LXJpZ2h0ICgyKS5wbmdcIixcclxuICAgICAgdHlwZTogXCJSSUdIVFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNDkzODM4YzE3NDczMDcwOTQ4MjFhcnJvdy1yaWdodCAoMykucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy82OTk5MzJjMTc0NzMwNzE1Nzk0NGFycm93LXJpZ2h0ICg0KS5wbmdcIixcclxuICAgICAgdHlwZTogXCJESUFHT05BTF9SSUdIVFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTExOTcxYzE3NDczMDcxOTkxMTVhcnJvdy1yaWdodCAoNSkucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy85Njg3MjZjMTc0NzMwNzIyNzI1NWFycm93LXJpZ2h0ICg2KS5wbmdcIixcclxuICAgICAgdHlwZTogXCJESUFHT05BTF9MRUZUXCJcclxuICAgIH1cclxuXHJcbiAgXVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgdGVtcGxhdGVQYWdlOiBhbnlbXSA9IFtdO1xyXG4gIGFkZExpbms6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxMaW5rRWRpdG9yQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxyXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hZGRMaW5rID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRhdGE/LmxpbmtEYXRhKSB7XHJcbiAgICAgIHRoaXMubGluayA9IHRoaXMuZGF0YS5saW5rRGF0YTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSB0aGlzLmxpbmsubGlua1R5cGUgPT09IFJlZGlyZWN0aW9uTGlua1R5cGUuRW1haWwgfHwgdGhpcy5saW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmtUeXBlLlBob25lID8gUmVkaXJlY3Rpb25MaW5rVHlwZS5FeHRlcm5hbCA6IHRoaXMubGluay5saW5rVHlwZTtcclxuICAgICAgdGhpcy5hZGRMaW5rID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUgJiYgdGhpcy5kYXRhLmJ1dHRvblN0eWxlLmdyYWRpZW50RGlyZWN0aW9uKVxyXG4gICAgICAgIHRoaXMuZGF0YS5idXR0b25TdHlsZS5ncmFkaWVudERpcmVjdGlvbiA9IHRoaXMuZGF0YT8uYnV0dG9uU3R5bGU/LmdyYWRpZW50RGlyZWN0aW9uIHx8IEdyYWRpZW50RGlyZWN0aW9uLkRPV047XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFRlbXBsYXRlUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGVQYWdlKCkge1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldFRlbXBsYXRlKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlUGFnZSA9IHJlcy5kYXRhO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNoYW5nZVR5cGUodHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5saW5rLmxpbmtUeXBlID0gdGhpcy5zZWxlY3RlZFR5cGU7XHJcbiAgfVxyXG5cclxuICBhZGROZXdMaW5rKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBsaW5rOiB0aGlzLmxpbmsgfSlcclxuICB9XHJcblxyXG4gIGdldENvbG9yTGFiZWwoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy50eXBlID09ICdPdXRsaW5lJykge1xyXG4gICAgICByZXR1cm4gJ091dGxpbmUgQ29sb3InO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy50eXBlID09ICdUZXh0Jykge1xyXG4gICAgICByZXR1cm4gJ1RleHQgQ29sb3InO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICdCdXR0b24gQ29sb3InO1xyXG4gIH1cclxuXHJcblxyXG4gIGJ1dHRvblN0eWxlczogYW55O1xyXG4gIGNoYW5nZUJ1dHRvblN0eWxlKCkge1xyXG4gICAgLy8gZGVidWdnZXJcclxuICAgIGlmICh0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09ICdPdXRsaW5lJyB8fCB0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09ICdUZXh0Jykge1xyXG4gICAgICB0aGlzLmJhY2tncm91bmRUeXBlID0gWydTb2xpZCddO1xyXG4gICAgICB0aGlzLmRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlID0gJ1NvbGlkJztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmJhY2tncm91bmRUeXBlID0gWydTb2xpZCcsICdHcmFkaWVudCddO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudFNlcnZpY2UuYnV0dG9uU3R5bGVDaGFuZ2VDaGVja3MuZW1pdCh7IGlkOiB0aGlzLmRhdGEuYnV0dG9uSWQsIHN0eWxlOiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUsIGJhY2tncm91bmRJbmZvOiB0aGlzLmRhdGEuYmFja2dyb3VuZEluZm8gfSk7XHJcbiAgfVxyXG4gIGdldENvbnRyYXN0VGV4dENvbG9yKGJhY2tncm91bmRIZXg6IGFueSkge1xyXG4gICAgbGV0IGhleCA9IGJhY2tncm91bmRIZXg/LnJlcGxhY2UoJyMnLCAnJyk7XHJcblxyXG4gICAgaWYgKGhleD8ubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIGhleCA9IGhleC5zcGxpdCgnJykubWFwKChjOiBhbnkpID0+IGMgKyBjKS5qb2luKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4Py5zdWJzdHIoMCwgMiksIDE2KSAvIDI1NTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXg/LnN1YnN0cigyLCAyKSwgMTYpIC8gMjU1O1xyXG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleD8uc3Vic3RyKDQsIDIpLCAxNikgLyAyNTU7XHJcblxyXG4gICAgY29uc3QgbHVtaW5hbmNlID0gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xyXG5cclxuICAgIHRoaXMuZGF0YS5idXR0b25TdHlsZS50ZXh0Q29sb3IgPSBsdW1pbmFuY2UgPCAwLjUgPyBcIiNGRkZGRkZcIiA6IFwiIzAwMDAwMFwiO1xyXG4gICAgdGhpcy5ldmVudFNlcnZpY2UuYnV0dG9uU3R5bGVDaGFuZ2VDaGVja3MuZW1pdCh7IGlkOiB0aGlzLmRhdGEuYnV0dG9uSWQsIHN0eWxlOiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUsIGJhY2tncm91bmRJbmZvOiB0aGlzLmRhdGEuYmFja2dyb3VuZEluZm8gfSk7XHJcbiAgfVxyXG4gIGJhY2tncm91bmRUeXBlOiBzdHJpbmdbXSA9IFsnU29saWQnLCAnR3JhZGllbnQnXTtcclxuXHJcbiAgc2V0Qm9yZGVyUmFkaXVzKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS50eXBlID09ICdUZXh0Jykge1xyXG4gICAgICByZXR1cm4gJzBweCc7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlLnNoYXBlID09ICdTcXVhcmUnKSB7XHJcbiAgICAgIHJldHVybiAnMHB4JztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUuc2hhcGUgPT0gJ0N1cnZlJykge1xyXG4gICAgICByZXR1cm4gJzdweCc7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlLnNoYXBlID09ICdSb3VuZCcpIHtcclxuICAgICAgcmV0dXJuICc5OXB4JztcclxuICAgIH1cclxuICAgIHJldHVybiAnMHB4JztcclxuICB9XHJcbiAgc2V0Qm9yZGVyKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS50eXBlID09ICdUZXh0Jykge1xyXG4gICAgICByZXR1cm4gJ3Vuc2V0JztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnU29saWQnKSB7XHJcbiAgICAgIHJldHVybiBgdW5zZXRgO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS50eXBlID09ICdPdXRsaW5lJykge1xyXG4gICAgICByZXR1cm4gYDJweCBzb2xpZCAke3RoaXMuZGF0YS5idXR0b25TdHlsZT8uYmFja2dyb3VuZH1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICd1bnNldCc7XHJcbiAgfVxyXG4gIHNldENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YS5idXR0b25TdHlsZT8udGV4dENvbG9yIHx8ICcjZmZmZmZmJztcclxuICB9XHJcbiAgc2V0QmFja2dyb3VuZCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LmNvbG9yVHlwZSA9PSAnU29saWQnICYmIHRoaXMuZGF0YS5idXR0b25TdHlsZS50eXBlID09ICdTb2xpZCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5idXR0b25TdHlsZT8uYmFja2dyb3VuZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5jb2xvclR5cGUgPT0gJ0dyYWRpZW50JyAmJiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnU29saWQnKSB7XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IEdyYWRpZW50RGlyZWN0aW9uW3RoaXMuZGF0YS5idXR0b25TdHlsZS5ncmFkaWVudERpcmVjdGlvbiBhcyB1bmtub3duIGFzIGtleW9mIHR5cGVvZiBHcmFkaWVudERpcmVjdGlvbiB8fCBHcmFkaWVudERpcmVjdGlvbi5ET1dOXTtcclxuICAgICAgcmV0dXJuIGBsaW5lYXItZ3JhZGllbnQoJHtkaXJlY3Rpb259LCAke3RoaXMuZGF0YS5idXR0b25TdHlsZT8uYmFja2dyb3VuZH0sICR7dGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5zZWNvbmRhcnlCYWNrZ3JvdW5kfSlgO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbWdMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhc3luYyB1cGRhdGVJbWFnZSgpIHtcclxuICAgIHRoaXMuaW1nTG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IG1lZGlhU2VsZWN0b3JEaWFsb2cgPSB0aGlzLm1hdERpYWxvZy5vcGVuKE1lZGlhU2VsZWN0b3JDb21wb25lbnQsIHsgZGF0YTogeyBtdWx0aXBsZTogZmFsc2UgfSwgcGFuZWxDbGFzczogXCJtZWRpYS1zZWxlY3RvclwiIH0pXHJcbiAgICBtZWRpYVNlbGVjdG9yRGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5saW5rLmljb24udXJsID0gcmVzWzBdLmFzc2V0c1swXS51cmwgPz8gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbWdMb2FkZXIgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1hZ2UoKSB7XHJcbiAgICB0aGlzLmxpbmsuaWNvbi51cmwgPSAnJztcclxuICB9XHJcblxyXG4gIHNldFJlZGlyZWN0VXJsKCkge1xyXG4gICAgdGhpcy5saW5rLnJlZGlyZWN0aW9uVXJsID0gJydcclxuICAgIGZvciAobGV0IHBhZ2Ugb2YgdGhpcy50ZW1wbGF0ZVBhZ2UpIHtcclxuICAgICAgaWYgKHBhZ2UuaWQgPT09IHRoaXMubGluay5wYWdlSWQpIHtcclxuICAgICAgICB0aGlzLmxpbmsucmVkaXJlY3Rpb25VcmwgPSBwYWdlLnBhdGhcclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuXHJcbmludGVyZmFjZSB0eXBlIHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbn1cclxuIiwiPHNlY3Rpb24+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgPHA+e3tkYXRhLnR5cGUgPT0gJ0JVVFRPTicgPyBcIkJ1dHRvblwiIDogXCJMaW5rXCJ9fSBTZXR0aW5nczwvcD5cclxuICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIGNsYXNzPVwiZi0xOCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3BcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJib2R5XCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJsaW5rLXRleHRcIj57e2RhdGEudHlwZSA9PSAnQlVUVE9OJyA/IFwiQnV0dG9uXCIgOiBcIkxpbmtcIn19IFRleHQ8L2xhYmVsPjxicj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGxpbmstdGV4dC1pbnB1dFwiIFsobmdNb2RlbCldPVwibGluay5sYWJlbFwiPlxyXG4gICAgICA8cCBjbGFzcz1cImRlc2NcIj5UaGlzIGlzIHRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdXNlcnM8L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8aHI+XHJcblxyXG4gICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS50eXBlID09ICdCVVRUT04nXCI+XHJcbiAgICAgIDxzZWxlY3Q+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3R5bGUgb2Ygc3R5bGVzXCI+XHJcbiAgICAgICAgICA8b3B0aW9uIChjbGljayk9XCJjaGFuZ2VCdXR0b25TdHlsZShzdHlsZSlcIiBbdmFsdWVdPVwic3R5bGUubmFtZVwiPnt7c3R5bGUubmFtZX19PC9vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxzZWxlY3Q+XHJcbiAgICA8L25nLWNvbnRhaW5lcj4gLS0+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEudHlwZSA9PSAnQlVUVE9OJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIG1iLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGluay10ZXh0IG1iLTFcIj5CdXR0b248L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImJvcmRlci0wIHctMTAwXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLnR5cGVcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdHlwZSBvZiBidXR0b25UeXBlc1wiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwidHlwZS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7dHlwZS50eXBlIHwgdGl0bGVjYXNlfX1cclxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXN0eWxlIHctODBcIiBbc3R5bGUuYm9yZGVyUmFkaXVzXT1cInNldEJvcmRlclJhZGl1cygpXCIgW3N0eWxlLmJvcmRlcl09XCJzZXRCb3JkZXIoKVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwic2V0QmFja2dyb3VuZCgpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09PSAnVGV4dCcgfHwgZGF0YT8uYnV0dG9uU3R5bGU/LnR5cGUgPT09ICdPdXRsaW5lJykgJiYgZGF0YT8uYnV0dG9uU3R5bGU/LmNvbG9yVHlwZSA9PT0gJ0dyYWRpZW50J1wiXHJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ2xpbmVhci1ncmFkaWVudCg5MGRlZywgJyArIGRhdGE/LmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kICsgJyAwJSwgJyArIGRhdGE/LmJ1dHRvblN0eWxlLnNlY29uZGFyeUJhY2tncm91bmQgKyAnIDEwMCUpJ1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCA/IGxpbmsubGFiZWwgOiBcIkJ1dHRvbiBUZXh0XCJ9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LnN0eWxlPy5jb2xvclR5cGUgPT0gJ1NvbGlkJyB8fCBkYXRhPy5idXR0b25TdHlsZT8udHlwZSA9PSAnU29saWQnXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJzZXRDb2xvcigpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsaW5rLmxhYmVsID8gbGluay5sYWJlbCA6IFwiQnV0dG9uIFRleHRcIn19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YT8uYnV0dG9uU3R5bGU/LnR5cGUgPT09ICdPdXRsaW5lJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwic2V0Q29sb3IoKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCA/IGxpbmsubGFiZWwgOiBcIkJ1dHRvbiBUZXh0XCJ9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09PSAnVGV4dCdcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCA/IGxpbmsubGFiZWwgOiBcIkJ1dHRvbiBUZXh0XCJ9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxpbmstdGV4dFwiPkJ1dHRvbiBTdHlsZTwvbGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLWNvbnRhaW5lciByb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvciBici0xMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItdG9wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGVcIj5Db2xvcjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1zaWRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JUeXBlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiYm9yZGVyLTAgdy0xMDBcIiBbKG5nTW9kZWwpXT1cImRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdHlwZSBvZiBiYWNrZ3JvdW5kVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBzdHlsZT1cInBhZGRpbmc6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHR5cGUgfCB0aXRsZWNhc2UgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMjBcIiAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlID09PSAnU29saWQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImdldENvbnRyYXN0VGV4dENvbG9yKGRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAjY29sb3JJbnB1dD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sb3ItdGV4dCBtYi0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+IHt7IGdldENvbG9yTGFiZWwoKX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhLmJ1dHRvblN0eWxlLmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sb3JJbnB1dC5jbGljaygpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yMFwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZS5jb2xvclR5cGUgPT09ICdHcmFkaWVudCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhY2tncm91bmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3JcIiBbKG5nTW9kZWwpXT1cImRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQnV0dG9uU3R5bGUoKVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAjY29sb3JJbnB1dDE+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLnNlY29uZGFyeUJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUJ1dHRvblN0eWxlKClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI2NvbG9ySW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbG9yLXRleHQgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPkNvbG9yIDE8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5idXR0b25TdHlsZT8uYmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQxLmNsaWNrKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbG9yLXRleHQgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPkNvbG9yIDI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5idXR0b25TdHlsZT8uc2Vjb25kYXJ5QmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQuY2xpY2soKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JhZGllbnQtZGlyZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWRpcmVjdGlvbiBtdC0zIG1iLTFcIj4gRGlyZWN0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1kaXJlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXNoYWRvdyBkLWZsZXggYnItMTAgdy04MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkaXJlY3Rpb24gb2YgZGlyZWN0aW9uVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1ib3ggZC1mbGV4IHAtMiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBici0xMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJyA6IGRhdGEuYnV0dG9uU3R5bGU/LmdyYWRpZW50RGlyZWN0aW9uID09PSBkaXJlY3Rpb24udHlwZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGEuYnV0dG9uU3R5bGUuZ3JhZGllbnREaXJlY3Rpb24gPSBkaXJlY3Rpb24udHlwZTtjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMFwiIFtzcmNdPVwiZGlyZWN0aW9uLmljb25cIiBhbHQ9XCJpY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmJ1dHRvblN0eWxlPy5ncmFkaWVudERpcmVjdGlvbiAhPT0gZGlyZWN0aW9uLnR5cGVcIiBsb2FkaW5nPVwibGF6eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMTBcIiBbc3JjXT1cImRpcmVjdGlvbi5hY3RpdmVJY29uXCIgYWx0PVwiaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZT8uZ3JhZGllbnREaXJlY3Rpb24gPT09IGRpcmVjdGlvbi50eXBlXCIgbG9hZGluZz1cImxhenlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMjBcIiAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUudHlwZSAhPSAnVGV4dCdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLnRleHRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNjb2xvcklucHV0Mz5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbG9yLXRleHQgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlRleHQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhLmJ1dHRvblN0eWxlLnRleHRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQzLmNsaWNrKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItcmFkaXVzIGJnLXdoaXRlIHAtMiAgYnItMTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmJ1dHRvblN0eWxlLnR5cGUgIT0gJ1RleHQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dC0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICBDb3JuZXIgUmFkaXVzXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC1zaGFkb3cgZC1mbGV4IGJyLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzaGFwZSBvZiBidXR0b25TaGFwZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLWJveCBkLWZsZXggcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJyLTEwXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJyA6IGRhdGEuYnV0dG9uU3R5bGUuc2hhcGUgPT09IHNoYXBlLnR5cGV9XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YS5idXR0b25TdHlsZS5zaGFwZSA9IHNoYXBlLnR5cGU7Y2hhbmdlQnV0dG9uU3R5bGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzaGFwZS5pY29uXCIgYWx0PVwiaWNvblwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZS5zaGFwZSAhPT0gc2hhcGUudHlwZVwiIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJhbnNpdGlvbi1pbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzaGFwZS5hY3RpdmVJY29uXCIgYWx0PVwiaWNvblwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZT8uc2hhcGUgPT09IHNoYXBlLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIiBjbGFzcz1cInRyYW5zaXRpb24taW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+U2hvdyBJY29uPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbWwtYXV0b1wiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBzd2l0Y2gtYnRuXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaW5rLnNob3dJY29uXCIgcm9sZT1cInN3aXRjaFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8IS0tIDxwIGNsYXNzPVwiaGVhZGluZyBtYi0wXCI+SW1hZ2U8L3A+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaW1hZ2UgY3BcIiAqbmdJZj1cImxpbmsuc2hvd0ljb24gJiYgIWxpbms/Lmljb24/LnVybFwiIChjbGljayk9XCJ1cGRhdGVJbWFnZSgpXCI+XHJcbiAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81NDc1MDBjMTc0NDY5ODgzMDM0M3VwbG9hZC1vbmUlMjAlMjgxJTI5LnBuZ1wiXHJcbiAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtdGV4dCBtYi0wXCI+VXBsb2FkIGEgZmlsZTwvcD5cclxuICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXRleHQgbWItMFwiPm9yIHNlbGVjdCBhbiBleGlzdGluZyBvbmU8L3A+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZC10ZXh0XCI+dXAgdG8gMzJNQjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImxpbmsuc2hvd0ljb24gJiYgbGluaz8uaWNvbj8udXJsXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWltZ0xvYWRlclwiPlxyXG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwibGluaz8uaWNvbj8udXJsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBhbGNlLWltYWdlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInVwZGF0ZUltYWdlKClcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCIgY2xhc3M9XCJpY29uIHctNCBoLTRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJtNCAxNiA0LjU4NTc5LTQuNTg1OGMuNzgxMDQtLjc4MSAyLjA0NzQxLS43ODEgMi44Mjg0MSAwTDE2IDE2bS0yLTIgMS41ODU4LTEuNTg1OGMuNzgxLS43ODEgMi4wNDc0LS43ODEgMi44Mjg0IDBMMjAgMTRtLTYtNmguMDFNNiAyMGgxMmMxLjEwNDYgMCAyLS44OTU0IDItMlY2YzAtMS4xMDQ1Ny0uODk1NC0yLTItMkg2Yy0xLjEwNDU3IDAtMiAuODk1NDMtMiAydjEyYzAgMS4xMDQ2Ljg5NTQzIDIgMiAyWlwiPlxyXG4gICAgICAgICAgICAgICAgPC9wYXRoPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtaW1hZ2UgY3Vyc29yLXBvaW50ZXIgXCIgKGNsaWNrKT1cImRlbGV0ZUltYWdlKClcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiIGNsYXNzPVwiaWNvbiBoLTQgdy00XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgICAgICAgICBkPVwibTE5IDctLjg2NzMgMTIuMTQyNUMxOC4wNTc5IDIwLjE4OTEgMTcuMTg3IDIxIDE2LjEzNzggMjFINy44NjIyNGMtMS4wNDkyOCAwLTEuOTIwMTYtLjgxMDktMS45OTQ5Mi0xLjg1NzVMNSA3bTUgNHY2bTQtNnY2bTEtMTBWNGMwLS41NTIyOC0uNDQ3Ny0xLTEtMWgtNGMtLjU1MjI4IDAtMSAuNDQ3NzItMSAxdjNNNCA3aDE2XCI+XHJcbiAgICAgICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1nTG9hZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRfc3Bpbm5lciBkLWZsZXggdy0xMDAgaC0xMDAganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIHAtMiBtYi0yXCI+SWNvbiBQb3NpdGlvbjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFicyBkLWZsZXggcHgtMiBnYXAtMyBtYi0yXCIgKm5nSWY9XCJsaW5rLnNob3dJY29uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYiBweC0zIHB5LTJcIiAqbmdGb3I9XCJsZXQgdGFiIG9mIFsnbGVmdCcsJ3JpZ2h0J11cIiAoY2xpY2spPVwibGluay5pY29uLmljb25Qb3NpdGlvbiA9IHRhYlwiXHJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRUYWJdPVwibGluaz8uaWNvbj8uaWNvblBvc2l0aW9uID09IHRhYlwiPlxyXG4gICAgICAgICAge3t0YWIgfCB0aXRsZWNhc2V9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5saW5rRGF0YT8ubGVuZ3RoICE9IDBcIj5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzIGNwXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBsaW5rVHlwZVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUeXBlJyA6IHR5cGUudHlwZSA9PT0gc2VsZWN0ZWRUeXBlfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVHlwZSh0eXBlLnR5cGUpXCI+e3t0eXBlLnR5cGV9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXIgbXQtM1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsaW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmsuUGFnZVwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtbGFiZWwtMSBtdC0zIG1iLTJcIj5TZWxlY3QgUGFnZTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWNvbnRhaW5lciB3LTEwMCBkLWZsZXggbWItMlwiPlxyXG4gICAgICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwibGluay5wYWdlSWRcIiAobmdNb2RlbENoYW5nZSk9XCJzZXRSZWRpcmVjdFVybCgpXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIHNlbGVjdGVkPlNlbGVjdCBmcm9tIHlvdXIgZXhpc3RpbmcgcGFnZXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwYWdlIG9mIHRlbXBsYXRlUGFnZVwiIFt2YWx1ZV09XCJwYWdlLmlkXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAge3twYWdlLnBhZ2VOYW1lfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3duLWFycm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPjxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvMjY4NDEwYzE3NDIyODYwNTI5NDBEb3duJTIwMi5wbmdcIlxyXG4gICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzdWItdGV4dFwiPlNlbGVjdCBmcm9tIHlvdXIgZXhpc3RpbmcgcGFnZXM8L2Rpdj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsaW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmsuc2VjdGlvblwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibXQtMyBtYi0yIGlucHV0LWxhYmVsLTFcIj5TZWN0aW9uPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wLWRvd24tY29udGFpbmVyIHctMTAwIGQtZmxleCBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJsaW5rLnBhZ2VJZFwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+U2VsZWN0IHRoZSBTZWN0aW9uPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiB0ZW1wbGF0ZVBhZ2VbMF0uY29tcG9uZW50c1wiIFt2YWx1ZV09XCJzZWN0aW9uLmlkXCI+e3tzZWN0aW9uLnNlY3Rpb25OYW1lfX1cclxuICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3duLWFycm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPjxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvMjY4NDEwYzE3NDIyODYwNTI5NDBEb3duJTIwMi5wbmdcIlxyXG4gICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsIHx8IGxpbmsubGlua1R5cGUgPT09IFJlZGlyZWN0aW9uTGluay5FbWFpbCB8fCBsaW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmsuUGhvbmVcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm10LTMgbWItMiBpbnB1dC1sYWJlbC0xXCI+U2VsZWN0IHR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3AtZG93bi1jb250YWluZXIgdy0xMDAgZC1mbGV4IG1iLTJcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImxpbmsubGlua1R5cGVcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIHNlbGVjdGVkPlNlbGVjdCB0aGUgVHlwZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2YgZXh0ZXJuYWxMaW5rVHlwZVwiIFt2YWx1ZV09XCJ0eXBlLnR5cGVcIj57e3R5cGUudHlwZX19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bi1hcnJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48aW1nXHJcbiAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzI2ODQxMGMxNzQyMjg2MDUyOTQwRG93biUyMDIucG5nXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtbGFiZWwgbWItMlwiPnt7bGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsID8gJ1dlYnNpdGUnIDogbGluay5saW5rVHlwZSA9PT1cclxuICAgICAgICAgICAgUmVkaXJlY3Rpb25MaW5rLkVtYWlsID8gJ0VtYWlsIEFkZHJlc3MnIDogJ1Bob25lIE51bWJlcid9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBbKG5nTW9kZWwpXT1cImxpbmsucmVkaXJlY3Rpb25VcmxcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsID8gJ2V4YW1wbGUgOiBodHRwczovL2ZhY2Vib29rLmNvbSc6ICcnXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMTBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImlucHV0LWxhYmVsLTJcIj5PcGVuIGluIGEgbmV3IGJyb3dzZXIgdGFiPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG1sLWF1dG9cIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBzd2l0Y2gtYnRuXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaW5rLm5ld1RhYlwiIHJvbGU9XCJzd2l0Y2hcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIHctMTAwICBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJhZGRMaW5rXCIgKGNsaWNrKT1cImFkZE5ld0xpbmsoKVwiPlVwZGF0ZSBMaW5rPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj4iXX0=
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9saW5rLWVkaXRvci9saW5rLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL2xpbmstZWRpdG9yL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7OztBQVN4RSxNQUFNLE9BQU8sbUJBQW1C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QUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDaEQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNoRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNySixDQUFDO0lBR0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lB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Z0JBQ2xELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDeEIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQTtRQUM3QixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtnQkFDcEMsTUFBSztZQUNQLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0FyUFUsbUJBQW1CLG1GQXFHcEIsZUFBZTttR0FyR2QsbUJBQW1CLDZFQzFCaEMsNndpQkEwVFUsNnFKRHBTRSxZQUFZLCtlQUFFLFdBQVcsMHJDQUFFLGVBQWUsOEJBQUUsY0FBYyw4QkFBRSxlQUFlLDhCQUFFLGFBQWEsbUxBQTRCLGVBQWUsK0JBQUUsa0JBQWtCOzs0RkFJeEosbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUM7OzBCQXlHakssTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbiwgQnV0dG9uU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyYWRpZW50RGlyZWN0aW9uLCBSZWRpcmVjdGlvbkxpbmtUeXBlIH0gZnJvbSAnLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE1lZGlhU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9tZWRpYS1zZWxlY3Rvci9tZWRpYS1zZWxlY3Rvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZXInO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tbGluay1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIE1hdE9wdGlvbk1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLCBNYXRTbGlkZXJNb2R1bGUsIE1hdFByb2dyZXNzU3Bpbm5lcl0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbGluay1lZGl0b3IuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIExpbmtFZGl0b3JDb21wb25lbnQge1xyXG4gIGxpbms6IEJ1dHRvbiA9IHtcclxuICAgIGxpbmtUeXBlOiBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2UsXHJcbiAgICBsYWJlbDogJycsXHJcbiAgICByZWRpcmVjdGlvblVybDogJycsXHJcbiAgICBwYWdlSWQ6ICcnLFxyXG4gICAgbmV3VGFiOiBmYWxzZSxcclxuICB9O1xyXG5cclxuICBSZWRpcmVjdGlvbkxpbmsgPSBSZWRpcmVjdGlvbkxpbmtUeXBlXHJcbiAgZXh0ZXJuYWxMaW5rVHlwZTogQXJyYXk8dHlwZT4gPSBbXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuRXh0ZXJuYWxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuRW1haWxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuUGhvbmVcclxuICAgIH1cclxuICAgIC8vIHtcclxuICAgIC8vICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5zZWN0aW9uXHJcbiAgICAvLyB9XHJcbiAgXVxyXG5cclxuICBzZWxlY3RlZFR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUgPSBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2U7XHJcbiAgbGlua1R5cGU6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICB0eXBlOiBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuc2VjdGlvblxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5FeHRlcm5hbFxyXG4gICAgfVxyXG4gIF1cclxuXHJcbiAgYnV0dG9uVHlwZXM6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICB0eXBlOiBcIlNvbGlkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6IFwiT3V0bGluZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiBcIlRleHRcIlxyXG4gICAgfVxyXG4gIF1cclxuXHJcbiAgYnV0dG9uU2hhcGVzOiBhbnlbXSA9IFtcclxuICAgIHtcclxuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzgzMjk2OGMxNzQ3MjIxMjcwODU2VmVjdG9yJTIwNDglMjAoMikucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy80ODE4NTBjMTc0NzIyMDkzNzY5M1ZlY3RvciUyMDQ4JTIwKDEpLnBuZ1wiLFxyXG4gICAgICB0eXBlOiBcIlNxdWFyZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvODMwODQyYzE3NDcyMjA3NTc0NTNWZWN0b3IlMjA0OS5wbmdcIixcclxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzc4MDYwMWMxNzQ3MjIxMjQzNjEzVmVjdG9yJTIwNDklMjAoMSkucG5nXCIsXHJcbiAgICAgIHR5cGU6IFwiQ3VydmVcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzIxMDM1MGMxNzQ3MjIwODAzNTIxVmVjdG9yJTIwNTAucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy85Mzk2MTFjMTc0NzIyMDkwMDEyNFZlY3RvciUyMDUwJTIwKDEpLnBuZ1wiLFxyXG4gICAgICB0eXBlOiBcIlJvdW5kXCJcclxuICAgIH1cclxuICBdXHJcblxyXG4gIGRpcmVjdGlvblR5cGU6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNjY0NDAzYzE3NDczMDY4NDAzMDRhcnJvdy1kb3duLnBuZ1wiLFxyXG4gICAgICBhY3RpdmVJY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNTg3NDMwYzE3NDczMDY4OTg0NjVhcnJvdy1kb3duLnBuZ1wiLFxyXG4gICAgICB0eXBlOiBcIkRPV05cIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzE5MzM1OWMxNzQ3MzA2OTQ5NTIyYXJyb3ctcmlnaHQucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy80NTA5NDNjMTc0NzMxNzc1OTM4OGFycm93LXJpZ2h0ICgyKS5wbmdcIixcclxuICAgICAgdHlwZTogXCJSSUdIVFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNDkzODM4YzE3NDczMDcwOTQ4MjFhcnJvdy1yaWdodCAoMykucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy82OTk5MzJjMTc0NzMwNzE1Nzk0NGFycm93LXJpZ2h0ICg0KS5wbmdcIixcclxuICAgICAgdHlwZTogXCJESUFHT05BTF9SSUdIVFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTExOTcxYzE3NDczMDcxOTkxMTVhcnJvdy1yaWdodCAoNSkucG5nXCIsXHJcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy85Njg3MjZjMTc0NzMwNzIyNzI1NWFycm93LXJpZ2h0ICg2KS5wbmdcIixcclxuICAgICAgdHlwZTogXCJESUFHT05BTF9MRUZUXCJcclxuICAgIH1cclxuXHJcbiAgXVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgdGVtcGxhdGVQYWdlOiBhbnlbXSA9IFtdO1xyXG4gIGFkZExpbms6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxMaW5rRWRpdG9yQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxyXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hZGRMaW5rID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRhdGE/LmxpbmtEYXRhKSB7XHJcbiAgICAgIHRoaXMubGluayA9IHRoaXMuZGF0YS5saW5rRGF0YTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSB0aGlzLmxpbmsubGlua1R5cGUgPT09IFJlZGlyZWN0aW9uTGlua1R5cGUuRW1haWwgfHwgdGhpcy5saW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmtUeXBlLlBob25lID8gUmVkaXJlY3Rpb25MaW5rVHlwZS5FeHRlcm5hbCA6IHRoaXMubGluay5saW5rVHlwZTtcclxuICAgICAgdGhpcy5hZGRMaW5rID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUgJiYgdGhpcy5kYXRhLmJ1dHRvblN0eWxlLmdyYWRpZW50RGlyZWN0aW9uKVxyXG4gICAgICAgIHRoaXMuZGF0YS5idXR0b25TdHlsZS5ncmFkaWVudERpcmVjdGlvbiA9IHRoaXMuZGF0YT8uYnV0dG9uU3R5bGU/LmdyYWRpZW50RGlyZWN0aW9uIHx8IEdyYWRpZW50RGlyZWN0aW9uLkRPV047XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFRlbXBsYXRlUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGVQYWdlKCkge1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldFRlbXBsYXRlKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlUGFnZSA9IHJlcy5kYXRhO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNoYW5nZVR5cGUodHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5saW5rLmxpbmtUeXBlID0gdGhpcy5zZWxlY3RlZFR5cGU7XHJcbiAgfVxyXG5cclxuICBhZGROZXdMaW5rKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBsaW5rOiB0aGlzLmxpbmsgfSlcclxuICB9XHJcblxyXG4gIGdldENvbG9yTGFiZWwoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy50eXBlID09ICdPdXRsaW5lJykge1xyXG4gICAgICByZXR1cm4gJ091dGxpbmUgQ29sb3InO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy50eXBlID09ICdUZXh0Jykge1xyXG4gICAgICByZXR1cm4gJ1RleHQgQ29sb3InO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICdCdXR0b24gQ29sb3InO1xyXG4gIH1cclxuXHJcblxyXG4gIGJ1dHRvblN0eWxlczogYW55O1xyXG4gIGNoYW5nZUJ1dHRvblN0eWxlKCkge1xyXG4gICAgLy8gZGVidWdnZXJcclxuICAgIGlmICh0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09ICdPdXRsaW5lJyB8fCB0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09ICdUZXh0Jykge1xyXG4gICAgICB0aGlzLmJhY2tncm91bmRUeXBlID0gWydTb2xpZCddO1xyXG4gICAgICB0aGlzLmRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlID0gJ1NvbGlkJztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmJhY2tncm91bmRUeXBlID0gWydTb2xpZCcsICdHcmFkaWVudCddO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudFNlcnZpY2UuYnV0dG9uU3R5bGVDaGFuZ2VDaGVja3MuZW1pdCh7IGlkOiB0aGlzLmRhdGEuYnV0dG9uSWQsIHN0eWxlOiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUsIGJhY2tncm91bmRJbmZvOiB0aGlzLmRhdGEuYmFja2dyb3VuZEluZm8gfSk7XHJcbiAgfVxyXG4gIGdldENvbnRyYXN0VGV4dENvbG9yKGJhY2tncm91bmRIZXg6IGFueSkge1xyXG4gICAgbGV0IGhleCA9IGJhY2tncm91bmRIZXg/LnJlcGxhY2UoJyMnLCAnJyk7XHJcblxyXG4gICAgaWYgKGhleD8ubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIGhleCA9IGhleC5zcGxpdCgnJykubWFwKChjOiBhbnkpID0+IGMgKyBjKS5qb2luKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4Py5zdWJzdHIoMCwgMiksIDE2KSAvIDI1NTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXg/LnN1YnN0cigyLCAyKSwgMTYpIC8gMjU1O1xyXG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleD8uc3Vic3RyKDQsIDIpLCAxNikgLyAyNTU7XHJcblxyXG4gICAgY29uc3QgbHVtaW5hbmNlID0gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xyXG5cclxuICAgIHRoaXMuZGF0YS5idXR0b25TdHlsZS50ZXh0Q29sb3IgPSBsdW1pbmFuY2UgPCAwLjUgPyBcIiNGRkZGRkZcIiA6IFwiIzAwMDAwMFwiO1xyXG4gICAgdGhpcy5ldmVudFNlcnZpY2UuYnV0dG9uU3R5bGVDaGFuZ2VDaGVja3MuZW1pdCh7IGlkOiB0aGlzLmRhdGEuYnV0dG9uSWQsIHN0eWxlOiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUsIGJhY2tncm91bmRJbmZvOiB0aGlzLmRhdGEuYmFja2dyb3VuZEluZm8gfSk7XHJcbiAgfVxyXG4gIGJhY2tncm91bmRUeXBlOiBzdHJpbmdbXSA9IFsnU29saWQnLCAnR3JhZGllbnQnXTtcclxuXHJcbiAgc2V0Qm9yZGVyUmFkaXVzKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS50eXBlID09ICdUZXh0Jykge1xyXG4gICAgICByZXR1cm4gJzBweCc7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlLnNoYXBlID09ICdTcXVhcmUnKSB7XHJcbiAgICAgIHJldHVybiAnMHB4JztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUuc2hhcGUgPT0gJ0N1cnZlJykge1xyXG4gICAgICByZXR1cm4gJzdweCc7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlLnNoYXBlID09ICdSb3VuZCcpIHtcclxuICAgICAgcmV0dXJuICc5OXB4JztcclxuICAgIH1cclxuICAgIHJldHVybiAnMHB4JztcclxuICB9XHJcbiAgc2V0Qm9yZGVyKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS50eXBlID09ICdUZXh0Jykge1xyXG4gICAgICByZXR1cm4gJ3Vuc2V0JztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnU29saWQnKSB7XHJcbiAgICAgIHJldHVybiBgdW5zZXRgO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS50eXBlID09ICdPdXRsaW5lJykge1xyXG4gICAgICByZXR1cm4gYDJweCBzb2xpZCAke3RoaXMuZGF0YS5idXR0b25TdHlsZT8uYmFja2dyb3VuZH1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICd1bnNldCc7XHJcbiAgfVxyXG4gIHNldENvbG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YS5idXR0b25TdHlsZT8udGV4dENvbG9yIHx8ICcjZmZmZmZmJztcclxuICB9XHJcbiAgc2V0QmFja2dyb3VuZCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LmNvbG9yVHlwZSA9PSAnU29saWQnICYmIHRoaXMuZGF0YS5idXR0b25TdHlsZS50eXBlID09ICdTb2xpZCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5idXR0b25TdHlsZT8uYmFja2dyb3VuZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5jb2xvclR5cGUgPT0gJ0dyYWRpZW50JyAmJiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnU29saWQnKSB7XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IEdyYWRpZW50RGlyZWN0aW9uW3RoaXMuZGF0YS5idXR0b25TdHlsZS5ncmFkaWVudERpcmVjdGlvbiBhcyB1bmtub3duIGFzIGtleW9mIHR5cGVvZiBHcmFkaWVudERpcmVjdGlvbiB8fCBHcmFkaWVudERpcmVjdGlvbi5ET1dOXTtcclxuICAgICAgcmV0dXJuIGBsaW5lYXItZ3JhZGllbnQoJHtkaXJlY3Rpb259LCAke3RoaXMuZGF0YS5idXR0b25TdHlsZT8uYmFja2dyb3VuZH0sICR7dGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5zZWNvbmRhcnlCYWNrZ3JvdW5kfSlgO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbWdMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhc3luYyB1cGRhdGVJbWFnZSgpIHtcclxuICAgIHRoaXMuaW1nTG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IG1lZGlhU2VsZWN0b3JEaWFsb2cgPSB0aGlzLm1hdERpYWxvZy5vcGVuKE1lZGlhU2VsZWN0b3JDb21wb25lbnQsIHsgZGF0YTogeyBtdWx0aXBsZTogZmFsc2UgfSwgcGFuZWxDbGFzczogXCJtZWRpYS1zZWxlY3RvclwiIH0pXHJcbiAgICBtZWRpYVNlbGVjdG9yRGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5saW5rLmljb24udXJsID0gcmVzWzBdLmFzc2V0c1swXS51cmwgPz8gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbWdMb2FkZXIgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1hZ2UoKSB7XHJcbiAgICB0aGlzLmxpbmsuaWNvbi51cmwgPSAnJztcclxuICB9XHJcblxyXG4gIHNldFJlZGlyZWN0VXJsKCkge1xyXG4gICAgdGhpcy5saW5rLnJlZGlyZWN0aW9uVXJsID0gJydcclxuICAgIGZvciAobGV0IHBhZ2Ugb2YgdGhpcy50ZW1wbGF0ZVBhZ2UpIHtcclxuICAgICAgaWYgKHBhZ2UuaWQgPT09IHRoaXMubGluay5wYWdlSWQpIHtcclxuICAgICAgICB0aGlzLmxpbmsucmVkaXJlY3Rpb25VcmwgPSBwYWdlLnBhdGhcclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuXHJcbmludGVyZmFjZSB0eXBlIHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbn1cclxuIiwiPHNlY3Rpb24+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgPHA+e3tkYXRhLnR5cGUgPT0gJ0JVVFRPTicgPyBcIkJ1dHRvblwiIDogXCJMaW5rXCJ9fSBTZXR0aW5nczwvcD5cclxuICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIGNsYXNzPVwiZi0xOCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3BcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJib2R5XCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJsaW5rLXRleHRcIj57e2RhdGEudHlwZSA9PSAnQlVUVE9OJyA/IFwiQnV0dG9uXCIgOiBcIkxpbmtcIn19IFRleHQ8L2xhYmVsPjxicj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGxpbmstdGV4dC1pbnB1dFwiIFsobmdNb2RlbCldPVwibGluay5sYWJlbFwiPlxyXG4gICAgICA8cCBjbGFzcz1cImRlc2NcIj5UaGlzIGlzIHRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdXNlcnM8L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8aHI+XHJcblxyXG4gICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS50eXBlID09ICdCVVRUT04nXCI+XHJcbiAgICAgIDxzZWxlY3Q+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3R5bGUgb2Ygc3R5bGVzXCI+XHJcbiAgICAgICAgICA8b3B0aW9uIChjbGljayk9XCJjaGFuZ2VCdXR0b25TdHlsZShzdHlsZSlcIiBbdmFsdWVdPVwic3R5bGUubmFtZVwiPnt7c3R5bGUubmFtZX19PC9vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxzZWxlY3Q+XHJcbiAgICA8L25nLWNvbnRhaW5lcj4gLS0+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEudHlwZSA9PSAnQlVUVE9OJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIG1iLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGluay10ZXh0IG1iLTFcIj5CdXR0b248L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImJvcmRlci0wIHctMTAwXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLnR5cGVcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdHlwZSBvZiBidXR0b25UeXBlc1wiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwidHlwZS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7dHlwZS50eXBlIHwgdGl0bGVjYXNlfX1cclxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXN0eWxlIHctODBcIiBbc3R5bGUuYm9yZGVyUmFkaXVzXT1cInNldEJvcmRlclJhZGl1cygpXCIgW3N0eWxlLmJvcmRlcl09XCJzZXRCb3JkZXIoKVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwic2V0QmFja2dyb3VuZCgpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09PSAnVGV4dCcgfHwgZGF0YT8uYnV0dG9uU3R5bGU/LnR5cGUgPT09ICdPdXRsaW5lJykgJiYgZGF0YT8uYnV0dG9uU3R5bGU/LmNvbG9yVHlwZSA9PT0gJ0dyYWRpZW50J1wiXHJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ2xpbmVhci1ncmFkaWVudCg5MGRlZywgJyArIGRhdGE/LmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kICsgJyAwJSwgJyArIGRhdGE/LmJ1dHRvblN0eWxlLnNlY29uZGFyeUJhY2tncm91bmQgKyAnIDEwMCUpJ1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCA/IGxpbmsubGFiZWwgOiBcIkJ1dHRvbiBUZXh0XCJ9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LnN0eWxlPy5jb2xvclR5cGUgPT0gJ1NvbGlkJyB8fCBkYXRhPy5idXR0b25TdHlsZT8udHlwZSA9PSAnU29saWQnXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJzZXRDb2xvcigpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsaW5rLmxhYmVsID8gbGluay5sYWJlbCA6IFwiQnV0dG9uIFRleHRcIn19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YT8uYnV0dG9uU3R5bGU/LnR5cGUgPT09ICdPdXRsaW5lJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwic2V0Q29sb3IoKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCA/IGxpbmsubGFiZWwgOiBcIkJ1dHRvbiBUZXh0XCJ9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09PSAnVGV4dCdcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCA/IGxpbmsubGFiZWwgOiBcIkJ1dHRvbiBUZXh0XCJ9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxpbmstdGV4dFwiPkJ1dHRvbiBTdHlsZTwvbGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLWNvbnRhaW5lciByb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvciBici0xMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItdG9wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGVcIj5Db2xvcjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1zaWRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3JUeXBlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiYm9yZGVyLTAgdy0xMDBcIiBbKG5nTW9kZWwpXT1cImRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdHlwZSBvZiBiYWNrZ3JvdW5kVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBzdHlsZT1cInBhZGRpbmc6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHR5cGUgfCB0aXRsZWNhc2UgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMjBcIiAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlID09PSAnU29saWQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImdldENvbnRyYXN0VGV4dENvbG9yKGRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAjY29sb3JJbnB1dD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sb3ItdGV4dCBtYi0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+IHt7IGdldENvbG9yTGFiZWwoKX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhLmJ1dHRvblN0eWxlLmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sb3JJbnB1dC5jbGljaygpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yMFwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZS5jb2xvclR5cGUgPT09ICdHcmFkaWVudCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhY2tncm91bmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3JcIiBbKG5nTW9kZWwpXT1cImRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQnV0dG9uU3R5bGUoKVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAjY29sb3JJbnB1dDE+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLnNlY29uZGFyeUJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUJ1dHRvblN0eWxlKClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI2NvbG9ySW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbG9yLXRleHQgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPkNvbG9yIDE8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5idXR0b25TdHlsZT8uYmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQxLmNsaWNrKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbG9yLXRleHQgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPkNvbG9yIDI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5idXR0b25TdHlsZT8uc2Vjb25kYXJ5QmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQuY2xpY2soKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JhZGllbnQtZGlyZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWRpcmVjdGlvbiBtdC0zIG1iLTFcIj4gRGlyZWN0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1kaXJlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXNoYWRvdyBkLWZsZXggYnItMTAgdy04MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkaXJlY3Rpb24gb2YgZGlyZWN0aW9uVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1ib3ggZC1mbGV4IHAtMiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBici0xMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJyA6IGRhdGEuYnV0dG9uU3R5bGU/LmdyYWRpZW50RGlyZWN0aW9uID09PSBkaXJlY3Rpb24udHlwZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGEuYnV0dG9uU3R5bGUuZ3JhZGllbnREaXJlY3Rpb24gPSBkaXJlY3Rpb24udHlwZTtjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMFwiIFtzcmNdPVwiZGlyZWN0aW9uLmljb25cIiBhbHQ9XCJpY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmJ1dHRvblN0eWxlPy5ncmFkaWVudERpcmVjdGlvbiAhPT0gZGlyZWN0aW9uLnR5cGVcIiBsb2FkaW5nPVwibGF6eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMTBcIiBbc3JjXT1cImRpcmVjdGlvbi5hY3RpdmVJY29uXCIgYWx0PVwiaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZT8uZ3JhZGllbnREaXJlY3Rpb24gPT09IGRpcmVjdGlvbi50eXBlXCIgbG9hZGluZz1cImxhenlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMjBcIiAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUudHlwZSAhPSAnVGV4dCdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLnRleHRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNjb2xvcklucHV0Mz5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbG9yLXRleHQgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlRleHQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhLmJ1dHRvblN0eWxlLnRleHRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQzLmNsaWNrKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItcmFkaXVzIGJnLXdoaXRlIHAtMiAgYnItMTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmJ1dHRvblN0eWxlLnR5cGUgIT0gJ1RleHQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dC0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICBDb3JuZXIgUmFkaXVzXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC1zaGFkb3cgZC1mbGV4IGJyLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzaGFwZSBvZiBidXR0b25TaGFwZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLWJveCBkLWZsZXggcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJyLTEwXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJyA6IGRhdGEuYnV0dG9uU3R5bGUuc2hhcGUgPT09IHNoYXBlLnR5cGV9XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YS5idXR0b25TdHlsZS5zaGFwZSA9IHNoYXBlLnR5cGU7Y2hhbmdlQnV0dG9uU3R5bGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzaGFwZS5pY29uXCIgYWx0PVwiaWNvblwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZS5zaGFwZSAhPT0gc2hhcGUudHlwZVwiIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJhbnNpdGlvbi1pbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzaGFwZS5hY3RpdmVJY29uXCIgYWx0PVwiaWNvblwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZT8uc2hhcGUgPT09IHNoYXBlLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIiBjbGFzcz1cInRyYW5zaXRpb24taW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+U2hvdyBJY29uPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbWwtYXV0b1wiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBzd2l0Y2gtYnRuXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaW5rLnNob3dJY29uXCIgcm9sZT1cInN3aXRjaFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8IS0tIDxwIGNsYXNzPVwiaGVhZGluZyBtYi0wXCI+SW1hZ2U8L3A+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaW1hZ2UgY3BcIiAqbmdJZj1cImxpbmsuc2hvd0ljb24gJiYgIWxpbms/Lmljb24/LnVybFwiIChjbGljayk9XCJ1cGRhdGVJbWFnZSgpXCI+XHJcbiAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81NDc1MDBjMTc0NDY5ODgzMDM0M3VwbG9hZC1vbmUlMjAlMjgxJTI5LnBuZ1wiXHJcbiAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtdGV4dCBtYi0wXCI+VXBsb2FkIGEgZmlsZTwvcD5cclxuICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXRleHQgbWItMFwiPm9yIHNlbGVjdCBhbiBleGlzdGluZyBvbmU8L3A+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZC10ZXh0XCI+dXAgdG8gMzJNQjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImxpbmsuc2hvd0ljb24gJiYgbGluaz8uaWNvbj8udXJsXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWltZ0xvYWRlclwiPlxyXG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwibGluaz8uaWNvbj8udXJsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBhbGNlLWltYWdlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInVwZGF0ZUltYWdlKClcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCIgY2xhc3M9XCJpY29uIHctNCBoLTRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJtNCAxNiA0LjU4NTc5LTQuNTg1OGMuNzgxMDQtLjc4MSAyLjA0NzQxLS43ODEgMi44Mjg0MSAwTDE2IDE2bS0yLTIgMS41ODU4LTEuNTg1OGMuNzgxLS43ODEgMi4wNDc0LS43ODEgMi44Mjg0IDBMMjAgMTRtLTYtNmguMDFNNiAyMGgxMmMxLjEwNDYgMCAyLS44OTU0IDItMlY2YzAtMS4xMDQ1Ny0uODk1NC0yLTItMkg2Yy0xLjEwNDU3IDAtMiAuODk1NDMtMiAydjEyYzAgMS4xMDQ2Ljg5NTQzIDIgMiAyWlwiPlxyXG4gICAgICAgICAgICAgICAgPC9wYXRoPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtaW1hZ2UgY3Vyc29yLXBvaW50ZXIgXCIgKGNsaWNrKT1cImRlbGV0ZUltYWdlKClcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiIGNsYXNzPVwiaWNvbiBoLTQgdy00XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgICAgICAgICBkPVwibTE5IDctLjg2NzMgMTIuMTQyNUMxOC4wNTc5IDIwLjE4OTEgMTcuMTg3IDIxIDE2LjEzNzggMjFINy44NjIyNGMtMS4wNDkyOCAwLTEuOTIwMTYtLjgxMDktMS45OTQ5Mi0xLjg1NzVMNSA3bTUgNHY2bTQtNnY2bTEtMTBWNGMwLS41NTIyOC0uNDQ3Ny0xLTEtMWgtNGMtLjU1MjI4IDAtMSAuNDQ3NzItMSAxdjNNNCA3aDE2XCI+XHJcbiAgICAgICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1nTG9hZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRfc3Bpbm5lciBkLWZsZXggdy0xMDAgaC0xMDAganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIHAtMiBtYi0yXCI+SWNvbiBQb3NpdGlvbjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFicyBkLWZsZXggcHgtMiBnYXAtMyBtYi0yXCIgKm5nSWY9XCJsaW5rLnNob3dJY29uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYiBweC0zIHB5LTJcIiAqbmdGb3I9XCJsZXQgdGFiIG9mIFsnbGVmdCcsJ3JpZ2h0J11cIiAoY2xpY2spPVwibGluay5pY29uLmljb25Qb3NpdGlvbiA9IHRhYlwiXHJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRUYWJdPVwibGluaz8uaWNvbj8uaWNvblBvc2l0aW9uID09IHRhYlwiPlxyXG4gICAgICAgICAge3t0YWIgfCB0aXRsZWNhc2V9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5saW5rRGF0YT8ubGVuZ3RoICE9IDBcIj5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzIGNwXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBsaW5rVHlwZVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUeXBlJyA6IHR5cGUudHlwZSA9PT0gc2VsZWN0ZWRUeXBlfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVHlwZSh0eXBlLnR5cGUpXCI+e3t0eXBlLnR5cGV9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXIgbXQtM1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsaW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmsuUGFnZVwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtbGFiZWwtMSBtdC0zIG1iLTJcIj5TZWxlY3QgUGFnZTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWNvbnRhaW5lciB3LTEwMCBkLWZsZXggbWItMlwiPlxyXG4gICAgICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwibGluay5wYWdlSWRcIiAobmdNb2RlbENoYW5nZSk9XCJzZXRSZWRpcmVjdFVybCgpXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIHNlbGVjdGVkPlNlbGVjdCBmcm9tIHlvdXIgZXhpc3RpbmcgcGFnZXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwYWdlIG9mIHRlbXBsYXRlUGFnZVwiIFt2YWx1ZV09XCJwYWdlLmlkXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAge3twYWdlLnBhZ2VOYW1lfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3duLWFycm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPjxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvMjY4NDEwYzE3NDIyODYwNTI5NDBEb3duJTIwMi5wbmdcIlxyXG4gICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzdWItdGV4dFwiPlNlbGVjdCBmcm9tIHlvdXIgZXhpc3RpbmcgcGFnZXM8L2Rpdj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsaW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmsuc2VjdGlvblwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibXQtMyBtYi0yIGlucHV0LWxhYmVsLTFcIj5TZWN0aW9uPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wLWRvd24tY29udGFpbmVyIHctMTAwIGQtZmxleCBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJsaW5rLnBhZ2VJZFwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+U2VsZWN0IHRoZSBTZWN0aW9uPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiB0ZW1wbGF0ZVBhZ2VbMF0uY29tcG9uZW50c1wiIFt2YWx1ZV09XCJzZWN0aW9uLmlkXCI+e3tzZWN0aW9uLnNlY3Rpb25OYW1lfX1cclxuICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3duLWFycm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPjxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvMjY4NDEwYzE3NDIyODYwNTI5NDBEb3duJTIwMi5wbmdcIlxyXG4gICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsIHx8IGxpbmsubGlua1R5cGUgPT09IFJlZGlyZWN0aW9uTGluay5FbWFpbCB8fCBsaW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmsuUGhvbmVcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm10LTMgbWItMiBpbnB1dC1sYWJlbC0xXCI+U2VsZWN0IHR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3AtZG93bi1jb250YWluZXIgdy0xMDAgZC1mbGV4IG1iLTJcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImxpbmsubGlua1R5cGVcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIHNlbGVjdGVkPlNlbGVjdCB0aGUgVHlwZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2YgZXh0ZXJuYWxMaW5rVHlwZVwiIFt2YWx1ZV09XCJ0eXBlLnR5cGVcIj57e3R5cGUudHlwZX19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bi1hcnJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48aW1nXHJcbiAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzI2ODQxMGMxNzQyMjg2MDUyOTQwRG93biUyMDIucG5nXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtbGFiZWwgbWItMlwiPnt7bGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsID8gJ1dlYnNpdGUnIDogbGluay5saW5rVHlwZSA9PT1cclxuICAgICAgICAgICAgUmVkaXJlY3Rpb25MaW5rLkVtYWlsID8gJ0VtYWlsIEFkZHJlc3MnIDogJ1Bob25lIE51bWJlcid9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBbKG5nTW9kZWwpXT1cImxpbmsucmVkaXJlY3Rpb25VcmxcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsID8gJ2V4YW1wbGUgOiBodHRwczovL2ZhY2Vib29rLmNvbSc6ICcnXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMTBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImlucHV0LWxhYmVsLTJcIj5PcGVuIGluIGEgbmV3IGJyb3dzZXIgdGFiPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG1sLWF1dG9cIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBzd2l0Y2gtYnRuXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaW5rLm5ld1RhYlwiIHJvbGU9XCJzd2l0Y2hcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIHctMTAwICBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJhZGRMaW5rXCIgKGNsaWNrKT1cImFkZE5ld0xpbmsoKVwiPlVwZGF0ZSBMaW5rPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj4iXX0=
|