simpo-component-library 1.5.6 → 1.5.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -50,11 +50,11 @@ export class HoverElementsComponent {
50
50
  event.stopPropagation();
51
51
  }
52
52
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: HoverElementsComponent, deps: [{ token: i1.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
53
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: HoverElementsComponent, isStandalone: true, selector: "simpo-hover-elements", inputs: { data: "data", index: "index", editOptions: "editOptions", isMerged: "isMerged", isEcommerce: "isEcommerce" }, outputs: { edit: "edit" }, ngImport: i0, template: "<mat-dialog-content class=\"mat-typography\" *ngIf=\"editOptions\">\r\n <div class=\"top-btn\" [ngClass]=\"{'adjust-top-btn': isMerged && index == 1}\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList' && !isEcommerce\">\r\n <button class=\"add_btn_top\" (click)=\"addSection('ABOVE', $event)\">Add Section +</button>\r\n </div>\r\n <section class=\"hover-tab\" [ngClass]=\"{'adjustPosition': isMerged && index == 1}\">\r\n <div class=\"tabs-section\" [ngStyle]=\"{'z-index' : data.sectionType === 'header' ? '10000' : '1000'}\">\r\n <div class=\"edit-tab\">\r\n <button (click)=\"editSection()\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_1076_52409)\">\r\n <path\r\n d=\"M2 11.4997V13.9997H4.5L11.8733 6.62638L9.37333 4.12638L2 11.4997ZM13.8067 4.69305C14.0667 4.43305 14.0667 4.01305 13.8067 3.75305L12.2467 2.19305C11.9867 1.93305 11.5667 1.93305 11.3067 2.19305L10.0867 3.41305L12.5867 5.91305L13.8067 4.69305Z\"\r\n fill=\"#0267c1\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1076_52409\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"edit-text\">\r\n Edit\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\"></div>\r\n <div class=\"regenerate\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'blogList'\">\r\n <button (click)=\"restyleSection($event)\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M4.01108 19.9525C4.27565 20.0656 4.58327 19.9712 4.7378 19.7271L11.7691 8.55522C11.8829 8.3744 11.8898 8.14608 11.7868 7.95956C11.6838 7.77245 11.4869 7.65628 11.2735 7.65628H6.58085L8.32608 0.730146C8.39647 0.450341 8.25397 0.161357 7.98905 0.0474897C7.72585 -0.0657916 7.41628 0.0291694 7.26233 0.272919L0.231082 11.4448C0.117215 11.6256 0.11034 11.8539 0.213348 12.0405C0.316355 12.2276 0.513191 12.3437 0.726629 12.3437H5.41928L3.67405 19.2699C3.60366 19.5497 3.74612 19.8387 4.01108 19.9525Z\"\r\n fill=\"#0267c1\" />\r\n </svg>\r\n <span class=\"edit-text\">\r\n Restyle\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\"></div>\r\n <div class=\"regenerate\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\">\r\n <button (click)=\"changeContent($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path stroke=\"#0267c1\" stroke-linecap=\"round\" stroke-width=\"1.5\" d=\"M11 12h7m-7-8h7m-7 4h7M2 16h16\">\r\n </path>\r\n <path stroke=\"#0267c1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m2 12 .85714-2.28571M8 12l-.85714-2.28571m0 0L5 4 2.85714 9.71429m4.28572 0H2.85714\"></path>\r\n </svg>\r\n <span class=\"edit-text\">Change Content</span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'blogList'\"></div>\r\n <div class=\"remainin-sections\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\">\r\n <button class=\"copy\" (click)=\"duplicateSection($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path\r\n d=\"M9 2c-1.10457 0-2 .89543-2 2v8c0 1.1046.89543 2 2 2h6c1.1046 0 2-.8954 2-2V6.41421c0-.53043-.2107-1.03914-.5858-1.41421L14 2.58579C13.6249 2.21071 13.1162 2 12.5858 2H9Z\">\r\n </path>\r\n <path d=\"M3 8c0-1.10457.89543-2 2-2v10h8c0 1.1046-.8954 2-2 2H5c-1.10457 0-2-.8954-2-2V8Z\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"moveUp($event)\" [disabled]=\"index == 1\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M3.29289 9.70711c-.39052-.39053-.39052-1.02369 0-1.41422l6-6c.39053-.39052 1.02371-.39052 1.41421 0l6 6c.3905.39053.3905 1.02369 0 1.41422-.3905.39049-1.0237.39049-1.4142 0L11 5.41421V17c0 .5523-.4477 1-1 1-.55228 0-1-.4477-1-1V5.41421l-4.29289 4.2929c-.39053.39049-1.02369.39049-1.41422 0Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"moveDown($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M16.7071 10.2929c.3905.3905.3905 1.0237 0 1.4142l-6 6c-.3905.3905-1.02368.3905-1.41421 0l-6-6c-.39052-.3905-.39052-1.0237 0-1.4142.39053-.39053 1.02369-.39053 1.41422 0L9 14.5858V3c0-.55228.44772-1 1-1 .5523 0 1 .44772 1 1v11.5858l4.2929-4.2929c.3905-.39053 1.0237-.39053 1.4142 0Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"deleteSection($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M9 2c-.37877 0-.72503.214-.89443.55279L7.38197 4H4c-.55228 0-1 .44772-1 1s.44772 1 1 1v10c0 1.1046.89543 2 2 2h8c1.1046 0 2-.8954 2-2V6c.5523 0 1-.44772 1-1s-.4477-1-1-1h-3.382l-.7236-1.44721C11.725 2.214 11.3788 2 11 2H9ZM7 8c0-.55228.44772-1 1-1s1 .44772 1 1v6c0 .5523-.44772 1-1 1s-1-.4477-1-1V8Zm5-1c-.5523 0-1 .44772-1 1v6c0 .5523.4477 1 1 1s1-.4477 1-1V8c0-.55228-.4477-1-1-1Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </section>\r\n <div class=\"bottom-btn\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList' && !isEcommerce\">\r\n <button class=\"add_btn\" (click)=\"addSection('BELOW', $event)\">Add Section +</button>\r\n </div>\r\n</mat-dialog-content>\r\n", styles: [".hover-tab{display:flex;justify-content:flex-end;align-items:center;position:fixed;right:30px;top:100px;height:auto}.adjustPosition{top:200px}.bottom-btn{position:absolute;top:100%;z-index:1001;border-bottom:4px solid #0267c1;width:100%}.bottom-btn .add_btn{width:140px!important;height:36px;background-color:#0267c1;border-radius:4px;transform:translate(-50%,-50%);color:#fff;cursor:pointer;border:none;outline:none;position:absolute;top:100%;left:50%;box-shadow:#00000059 0 5px 15px}.adjust-top-btn{top:170px!important}.top-btn{position:absolute;top:0%;z-index:1001;width:100%;border-bottom:4px solid #0267c1}.top-btn .add_btn_top{top:0!important;width:140px!important;height:36px;background-color:#0267c1;border-radius:4px;position:absolute;left:50%;transform:translate(-50%,-50%);color:#fff;cursor:pointer;border:none;outline:none;z-index:1001;box-shadow:#00000059 0 5px 15px}.tabs-section{width:auto;padding:15px 10px;box-shadow:#63636333 0 2px 8px;border-radius:6px;display:flex;align-items:center;height:60px;background-color:#fff;z-index:1000}.edit-tab{display:flex;align-items:center;justify-content:center}.edit-tab button{border:none;outline:none;cursor:pointer;background-color:transparent;padding:0;display:flex;justify-content:center;align-items:center}.edit-text{font-size:14px;color:#0267c1;font-weight:500;position:relative;left:4px}.vr-line{border-left:1px solid #e8e8e8;height:25px;margin-left:14px}.regenerate{margin-left:10px;display:flex;justify-content:center;align-items:center}.regenerate button{border:none;outline:none;cursor:pointer;background-color:transparent;padding:0;display:flex;justify-content:center;align-items:center}.remainin-sections{margin-left:10px;display:flex;justify-content:center;align-items:center}.remainin-sections :is(.copy,.up-arrow){border:none;outline:none;cursor:pointer;background-color:transparent;padding:0}.remainin-sections :is(.copy:hover,.up-arrow:hover) svg{fill:#0267c1}.up-arrow{margin-left:10px}@media only screen and (max-width: 475px){.tabs-section{position:relative;left:27px;height:53px}}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
53
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: HoverElementsComponent, isStandalone: true, selector: "simpo-hover-elements", inputs: { data: "data", index: "index", editOptions: "editOptions", isMerged: "isMerged", isEcommerce: "isEcommerce" }, outputs: { edit: "edit" }, ngImport: i0, template: "<mat-dialog-content class=\"mat-typography\" *ngIf=\"editOptions\">\r\n <div class=\"top-btn\" [ngClass]=\"{'adjust-top-btn': isMerged && index == 1}\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList' && !isEcommerce\">\r\n <button class=\"add_btn_top\" (click)=\"addSection('ABOVE', $event)\">Add Section +</button>\r\n </div>\r\n <section class=\"hover-tab\" [ngClass]=\"{'adjustPosition': isMerged && index == 1}\">\r\n <div class=\"tabs-section\" [ngStyle]=\"{'z-index' : data.sectionType === 'header' ? '10000' : '1000'}\">\r\n <div class=\"edit-tab\">\r\n <button (click)=\"editSection()\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_1076_52409)\">\r\n <path\r\n d=\"M2 11.4997V13.9997H4.5L11.8733 6.62638L9.37333 4.12638L2 11.4997ZM13.8067 4.69305C14.0667 4.43305 14.0667 4.01305 13.8067 3.75305L12.2467 2.19305C11.9867 1.93305 11.5667 1.93305 11.3067 2.19305L10.0867 3.41305L12.5867 5.91305L13.8067 4.69305Z\"\r\n fill=\"#0267c1\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1076_52409\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"edit-text\">\r\n Edit\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\"></div>\r\n <div class=\"regenerate\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'blogList'\">\r\n <button (click)=\"restyleSection($event)\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M4.01108 19.9525C4.27565 20.0656 4.58327 19.9712 4.7378 19.7271L11.7691 8.55522C11.8829 8.3744 11.8898 8.14608 11.7868 7.95956C11.6838 7.77245 11.4869 7.65628 11.2735 7.65628H6.58085L8.32608 0.730146C8.39647 0.450341 8.25397 0.161357 7.98905 0.0474897C7.72585 -0.0657916 7.41628 0.0291694 7.26233 0.272919L0.231082 11.4448C0.117215 11.6256 0.11034 11.8539 0.213348 12.0405C0.316355 12.2276 0.513191 12.3437 0.726629 12.3437H5.41928L3.67405 19.2699C3.60366 19.5497 3.74612 19.8387 4.01108 19.9525Z\"\r\n fill=\"#0267c1\" />\r\n </svg>\r\n <span class=\"edit-text\">\r\n Restyle\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\"></div>\r\n <div class=\"regenerate\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\">\r\n <button (click)=\"changeContent($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path stroke=\"#0267c1\" stroke-linecap=\"round\" stroke-width=\"1.5\" d=\"M11 12h7m-7-8h7m-7 4h7M2 16h16\">\r\n </path>\r\n <path stroke=\"#0267c1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m2 12 .85714-2.28571M8 12l-.85714-2.28571m0 0L5 4 2.85714 9.71429m4.28572 0H2.85714\"></path>\r\n </svg>\r\n <span class=\"edit-text\">Change Content</span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'blogList'\"></div>\r\n <div class=\"remainin-sections\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\">\r\n <button class=\"copy\" (click)=\"duplicateSection($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path\r\n d=\"M9 2c-1.10457 0-2 .89543-2 2v8c0 1.1046.89543 2 2 2h6c1.1046 0 2-.8954 2-2V6.41421c0-.53043-.2107-1.03914-.5858-1.41421L14 2.58579C13.6249 2.21071 13.1162 2 12.5858 2H9Z\">\r\n </path>\r\n <path d=\"M3 8c0-1.10457.89543-2 2-2v10h8c0 1.1046-.8954 2-2 2H5c-1.10457 0-2-.8954-2-2V8Z\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"moveUp($event)\" [disabled]=\"index == 1\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M3.29289 9.70711c-.39052-.39053-.39052-1.02369 0-1.41422l6-6c.39053-.39052 1.02371-.39052 1.41421 0l6 6c.3905.39053.3905 1.02369 0 1.41422-.3905.39049-1.0237.39049-1.4142 0L11 5.41421V17c0 .5523-.4477 1-1 1-.55228 0-1-.4477-1-1V5.41421l-4.29289 4.2929c-.39053.39049-1.02369.39049-1.41422 0Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"moveDown($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M16.7071 10.2929c.3905.3905.3905 1.0237 0 1.4142l-6 6c-.3905.3905-1.02368.3905-1.41421 0l-6-6c-.39052-.3905-.39052-1.0237 0-1.4142.39053-.39053 1.02369-.39053 1.41422 0L9 14.5858V3c0-.55228.44772-1 1-1 .5523 0 1 .44772 1 1v11.5858l4.2929-4.2929c.3905-.39053 1.0237-.39053 1.4142 0Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"deleteSection($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M9 2c-.37877 0-.72503.214-.89443.55279L7.38197 4H4c-.55228 0-1 .44772-1 1s.44772 1 1 1v10c0 1.1046.89543 2 2 2h8c1.1046 0 2-.8954 2-2V6c.5523 0 1-.44772 1-1s-.4477-1-1-1h-3.382l-.7236-1.44721C11.725 2.214 11.3788 2 11 2H9ZM7 8c0-.55228.44772-1 1-1s1 .44772 1 1v6c0 .5523-.44772 1-1 1s-1-.4477-1-1V8Zm5-1c-.5523 0-1 .44772-1 1v6c0 .5523.4477 1 1 1s1-.4477 1-1V8c0-.55228-.4477-1-1-1Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </section>\r\n <div class=\"bottom-btn\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList' && !isEcommerce\">\r\n <button class=\"add_btn\" (click)=\"addSection('BELOW', $event)\">Add Section +</button>\r\n </div>\r\n</mat-dialog-content>\r\n", styles: [".hover-tab{display:flex;justify-content:flex-end;align-items:center;position:fixed;right:30px;top:100px;height:auto;z-index:1001}.adjustPosition{top:200px}.bottom-btn{position:absolute;top:100%;z-index:1001;border-bottom:4px solid #0267c1;width:100%}.bottom-btn .add_btn{width:140px!important;height:36px;background-color:#0267c1;border-radius:4px;transform:translate(-50%,-50%);color:#fff;cursor:pointer;border:none;outline:none;position:absolute;top:100%;left:50%;box-shadow:#00000059 0 5px 15px}.adjust-top-btn{top:170px!important}.top-btn{position:absolute;top:0%;z-index:1001;width:100%;border-bottom:4px solid #0267c1}.top-btn .add_btn_top{top:0!important;width:140px!important;height:36px;background-color:#0267c1;border-radius:4px;position:absolute;left:50%;transform:translate(-50%,-50%);color:#fff;cursor:pointer;border:none;outline:none;z-index:1001;box-shadow:#00000059 0 5px 15px}.tabs-section{width:auto;padding:15px 10px;box-shadow:#63636333 0 2px 8px;border-radius:6px;display:flex;align-items:center;height:60px;background-color:#fff;z-index:1000}.edit-tab{display:flex;align-items:center;justify-content:center}.edit-tab button{border:none;outline:none;cursor:pointer;background-color:transparent;padding:0;display:flex;justify-content:center;align-items:center}.edit-text{font-size:14px;color:#0267c1;font-weight:500;position:relative;left:4px}.vr-line{border-left:1px solid #e8e8e8;height:25px;margin-left:14px}.regenerate{margin-left:10px;display:flex;justify-content:center;align-items:center}.regenerate button{border:none;outline:none;cursor:pointer;background-color:transparent;padding:0;display:flex;justify-content:center;align-items:center}.remainin-sections{margin-left:10px;display:flex;justify-content:center;align-items:center}.remainin-sections :is(.copy,.up-arrow){border:none;outline:none;cursor:pointer;background-color:transparent;padding:0}.remainin-sections :is(.copy:hover,.up-arrow:hover) svg{fill:#0267c1}.up-arrow{margin-left:10px}@media only screen and (max-width: 475px){.tabs-section{position:relative;left:27px;height:53px}}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
54
54
  }
55
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: HoverElementsComponent, decorators: [{
56
56
  type: Component,
57
- args: [{ selector: 'simpo-hover-elements', standalone: true, imports: [MatIconModule, MatDialogModule, CommonModule], template: "<mat-dialog-content class=\"mat-typography\" *ngIf=\"editOptions\">\r\n <div class=\"top-btn\" [ngClass]=\"{'adjust-top-btn': isMerged && index == 1}\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList' && !isEcommerce\">\r\n <button class=\"add_btn_top\" (click)=\"addSection('ABOVE', $event)\">Add Section +</button>\r\n </div>\r\n <section class=\"hover-tab\" [ngClass]=\"{'adjustPosition': isMerged && index == 1}\">\r\n <div class=\"tabs-section\" [ngStyle]=\"{'z-index' : data.sectionType === 'header' ? '10000' : '1000'}\">\r\n <div class=\"edit-tab\">\r\n <button (click)=\"editSection()\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_1076_52409)\">\r\n <path\r\n d=\"M2 11.4997V13.9997H4.5L11.8733 6.62638L9.37333 4.12638L2 11.4997ZM13.8067 4.69305C14.0667 4.43305 14.0667 4.01305 13.8067 3.75305L12.2467 2.19305C11.9867 1.93305 11.5667 1.93305 11.3067 2.19305L10.0867 3.41305L12.5867 5.91305L13.8067 4.69305Z\"\r\n fill=\"#0267c1\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1076_52409\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"edit-text\">\r\n Edit\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\"></div>\r\n <div class=\"regenerate\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'blogList'\">\r\n <button (click)=\"restyleSection($event)\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M4.01108 19.9525C4.27565 20.0656 4.58327 19.9712 4.7378 19.7271L11.7691 8.55522C11.8829 8.3744 11.8898 8.14608 11.7868 7.95956C11.6838 7.77245 11.4869 7.65628 11.2735 7.65628H6.58085L8.32608 0.730146C8.39647 0.450341 8.25397 0.161357 7.98905 0.0474897C7.72585 -0.0657916 7.41628 0.0291694 7.26233 0.272919L0.231082 11.4448C0.117215 11.6256 0.11034 11.8539 0.213348 12.0405C0.316355 12.2276 0.513191 12.3437 0.726629 12.3437H5.41928L3.67405 19.2699C3.60366 19.5497 3.74612 19.8387 4.01108 19.9525Z\"\r\n fill=\"#0267c1\" />\r\n </svg>\r\n <span class=\"edit-text\">\r\n Restyle\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\"></div>\r\n <div class=\"regenerate\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\">\r\n <button (click)=\"changeContent($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path stroke=\"#0267c1\" stroke-linecap=\"round\" stroke-width=\"1.5\" d=\"M11 12h7m-7-8h7m-7 4h7M2 16h16\">\r\n </path>\r\n <path stroke=\"#0267c1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m2 12 .85714-2.28571M8 12l-.85714-2.28571m0 0L5 4 2.85714 9.71429m4.28572 0H2.85714\"></path>\r\n </svg>\r\n <span class=\"edit-text\">Change Content</span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'blogList'\"></div>\r\n <div class=\"remainin-sections\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\">\r\n <button class=\"copy\" (click)=\"duplicateSection($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path\r\n d=\"M9 2c-1.10457 0-2 .89543-2 2v8c0 1.1046.89543 2 2 2h6c1.1046 0 2-.8954 2-2V6.41421c0-.53043-.2107-1.03914-.5858-1.41421L14 2.58579C13.6249 2.21071 13.1162 2 12.5858 2H9Z\">\r\n </path>\r\n <path d=\"M3 8c0-1.10457.89543-2 2-2v10h8c0 1.1046-.8954 2-2 2H5c-1.10457 0-2-.8954-2-2V8Z\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"moveUp($event)\" [disabled]=\"index == 1\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M3.29289 9.70711c-.39052-.39053-.39052-1.02369 0-1.41422l6-6c.39053-.39052 1.02371-.39052 1.41421 0l6 6c.3905.39053.3905 1.02369 0 1.41422-.3905.39049-1.0237.39049-1.4142 0L11 5.41421V17c0 .5523-.4477 1-1 1-.55228 0-1-.4477-1-1V5.41421l-4.29289 4.2929c-.39053.39049-1.02369.39049-1.41422 0Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"moveDown($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M16.7071 10.2929c.3905.3905.3905 1.0237 0 1.4142l-6 6c-.3905.3905-1.02368.3905-1.41421 0l-6-6c-.39052-.3905-.39052-1.0237 0-1.4142.39053-.39053 1.02369-.39053 1.41422 0L9 14.5858V3c0-.55228.44772-1 1-1 .5523 0 1 .44772 1 1v11.5858l4.2929-4.2929c.3905-.39053 1.0237-.39053 1.4142 0Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"deleteSection($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M9 2c-.37877 0-.72503.214-.89443.55279L7.38197 4H4c-.55228 0-1 .44772-1 1s.44772 1 1 1v10c0 1.1046.89543 2 2 2h8c1.1046 0 2-.8954 2-2V6c.5523 0 1-.44772 1-1s-.4477-1-1-1h-3.382l-.7236-1.44721C11.725 2.214 11.3788 2 11 2H9ZM7 8c0-.55228.44772-1 1-1s1 .44772 1 1v6c0 .5523-.44772 1-1 1s-1-.4477-1-1V8Zm5-1c-.5523 0-1 .44772-1 1v6c0 .5523.4477 1 1 1s1-.4477 1-1V8c0-.55228-.4477-1-1-1Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </section>\r\n <div class=\"bottom-btn\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList' && !isEcommerce\">\r\n <button class=\"add_btn\" (click)=\"addSection('BELOW', $event)\">Add Section +</button>\r\n </div>\r\n</mat-dialog-content>\r\n", styles: [".hover-tab{display:flex;justify-content:flex-end;align-items:center;position:fixed;right:30px;top:100px;height:auto}.adjustPosition{top:200px}.bottom-btn{position:absolute;top:100%;z-index:1001;border-bottom:4px solid #0267c1;width:100%}.bottom-btn .add_btn{width:140px!important;height:36px;background-color:#0267c1;border-radius:4px;transform:translate(-50%,-50%);color:#fff;cursor:pointer;border:none;outline:none;position:absolute;top:100%;left:50%;box-shadow:#00000059 0 5px 15px}.adjust-top-btn{top:170px!important}.top-btn{position:absolute;top:0%;z-index:1001;width:100%;border-bottom:4px solid #0267c1}.top-btn .add_btn_top{top:0!important;width:140px!important;height:36px;background-color:#0267c1;border-radius:4px;position:absolute;left:50%;transform:translate(-50%,-50%);color:#fff;cursor:pointer;border:none;outline:none;z-index:1001;box-shadow:#00000059 0 5px 15px}.tabs-section{width:auto;padding:15px 10px;box-shadow:#63636333 0 2px 8px;border-radius:6px;display:flex;align-items:center;height:60px;background-color:#fff;z-index:1000}.edit-tab{display:flex;align-items:center;justify-content:center}.edit-tab button{border:none;outline:none;cursor:pointer;background-color:transparent;padding:0;display:flex;justify-content:center;align-items:center}.edit-text{font-size:14px;color:#0267c1;font-weight:500;position:relative;left:4px}.vr-line{border-left:1px solid #e8e8e8;height:25px;margin-left:14px}.regenerate{margin-left:10px;display:flex;justify-content:center;align-items:center}.regenerate button{border:none;outline:none;cursor:pointer;background-color:transparent;padding:0;display:flex;justify-content:center;align-items:center}.remainin-sections{margin-left:10px;display:flex;justify-content:center;align-items:center}.remainin-sections :is(.copy,.up-arrow){border:none;outline:none;cursor:pointer;background-color:transparent;padding:0}.remainin-sections :is(.copy:hover,.up-arrow:hover) svg{fill:#0267c1}.up-arrow{margin-left:10px}@media only screen and (max-width: 475px){.tabs-section{position:relative;left:27px;height:53px}}\n"] }]
57
+ args: [{ selector: 'simpo-hover-elements', standalone: true, imports: [MatIconModule, MatDialogModule, CommonModule], template: "<mat-dialog-content class=\"mat-typography\" *ngIf=\"editOptions\">\r\n <div class=\"top-btn\" [ngClass]=\"{'adjust-top-btn': isMerged && index == 1}\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList' && !isEcommerce\">\r\n <button class=\"add_btn_top\" (click)=\"addSection('ABOVE', $event)\">Add Section +</button>\r\n </div>\r\n <section class=\"hover-tab\" [ngClass]=\"{'adjustPosition': isMerged && index == 1}\">\r\n <div class=\"tabs-section\" [ngStyle]=\"{'z-index' : data.sectionType === 'header' ? '10000' : '1000'}\">\r\n <div class=\"edit-tab\">\r\n <button (click)=\"editSection()\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_1076_52409)\">\r\n <path\r\n d=\"M2 11.4997V13.9997H4.5L11.8733 6.62638L9.37333 4.12638L2 11.4997ZM13.8067 4.69305C14.0667 4.43305 14.0667 4.01305 13.8067 3.75305L12.2467 2.19305C11.9867 1.93305 11.5667 1.93305 11.3067 2.19305L10.0867 3.41305L12.5867 5.91305L13.8067 4.69305Z\"\r\n fill=\"#0267c1\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1076_52409\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"edit-text\">\r\n Edit\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\"></div>\r\n <div class=\"regenerate\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'blogList'\">\r\n <button (click)=\"restyleSection($event)\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M4.01108 19.9525C4.27565 20.0656 4.58327 19.9712 4.7378 19.7271L11.7691 8.55522C11.8829 8.3744 11.8898 8.14608 11.7868 7.95956C11.6838 7.77245 11.4869 7.65628 11.2735 7.65628H6.58085L8.32608 0.730146C8.39647 0.450341 8.25397 0.161357 7.98905 0.0474897C7.72585 -0.0657916 7.41628 0.0291694 7.26233 0.272919L0.231082 11.4448C0.117215 11.6256 0.11034 11.8539 0.213348 12.0405C0.316355 12.2276 0.513191 12.3437 0.726629 12.3437H5.41928L3.67405 19.2699C3.60366 19.5497 3.74612 19.8387 4.01108 19.9525Z\"\r\n fill=\"#0267c1\" />\r\n </svg>\r\n <span class=\"edit-text\">\r\n Restyle\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\"></div>\r\n <div class=\"regenerate\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\">\r\n <button (click)=\"changeContent($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path stroke=\"#0267c1\" stroke-linecap=\"round\" stroke-width=\"1.5\" d=\"M11 12h7m-7-8h7m-7 4h7M2 16h16\">\r\n </path>\r\n <path stroke=\"#0267c1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\r\n d=\"m2 12 .85714-2.28571M8 12l-.85714-2.28571m0 0L5 4 2.85714 9.71429m4.28572 0H2.85714\"></path>\r\n </svg>\r\n <span class=\"edit-text\">Change Content</span>\r\n </button>\r\n </div>\r\n <div class=\"vr-line\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'blogList'\"></div>\r\n <div class=\"remainin-sections\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList'\">\r\n <button class=\"copy\" (click)=\"duplicateSection($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path\r\n d=\"M9 2c-1.10457 0-2 .89543-2 2v8c0 1.1046.89543 2 2 2h6c1.1046 0 2-.8954 2-2V6.41421c0-.53043-.2107-1.03914-.5858-1.41421L14 2.58579C13.6249 2.21071 13.1162 2 12.5858 2H9Z\">\r\n </path>\r\n <path d=\"M3 8c0-1.10457.89543-2 2-2v10h8c0 1.1046-.8954 2-2 2H5c-1.10457 0-2-.8954-2-2V8Z\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"moveUp($event)\" [disabled]=\"index == 1\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M3.29289 9.70711c-.39052-.39053-.39052-1.02369 0-1.41422l6-6c.39053-.39052 1.02371-.39052 1.41421 0l6 6c.3905.39053.3905 1.02369 0 1.41422-.3905.39049-1.0237.39049-1.4142 0L11 5.41421V17c0 .5523-.4477 1-1 1-.55228 0-1-.4477-1-1V5.41421l-4.29289 4.2929c-.39053.39049-1.02369.39049-1.41422 0Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"moveDown($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M16.7071 10.2929c.3905.3905.3905 1.0237 0 1.4142l-6 6c-.3905.3905-1.02368.3905-1.41421 0l-6-6c-.39052-.3905-.39052-1.0237 0-1.4142.39053-.39053 1.02369-.39053 1.41422 0L9 14.5858V3c0-.55228.44772-1 1-1 .5523 0 1 .44772 1 1v11.5858l4.2929-4.2929c.3905-.39053 1.0237-.39053 1.4142 0Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"up-arrow\" (click)=\"deleteSection($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#434443\" viewBox=\"0 0 18 18\" width=\"18\" height=\"18\"\r\n class=\"icon w-5 h-5\" aria-hidden=\"true\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M9 2c-.37877 0-.72503.214-.89443.55279L7.38197 4H4c-.55228 0-1 .44772-1 1s.44772 1 1 1v10c0 1.1046.89543 2 2 2h8c1.1046 0 2-.8954 2-2V6c.5523 0 1-.44772 1-1s-.4477-1-1-1h-3.382l-.7236-1.44721C11.725 2.214 11.3788 2 11 2H9ZM7 8c0-.55228.44772-1 1-1s1 .44772 1 1v6c0 .5523-.44772 1-1 1s-1-.4477-1-1V8Zm5-1c-.5523 0-1 .44772-1 1v6c0 .5523.4477 1 1 1s1-.4477 1-1V8c0-.55228-.4477-1-1-1Z\"\r\n clip-rule=\"evenodd\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </section>\r\n <div class=\"bottom-btn\" *ngIf=\"data.sectionType != 'footer' && data.sectionType != 'header' && data.sectionType != 'blogList' && !isEcommerce\">\r\n <button class=\"add_btn\" (click)=\"addSection('BELOW', $event)\">Add Section +</button>\r\n </div>\r\n</mat-dialog-content>\r\n", styles: [".hover-tab{display:flex;justify-content:flex-end;align-items:center;position:fixed;right:30px;top:100px;height:auto;z-index:1001}.adjustPosition{top:200px}.bottom-btn{position:absolute;top:100%;z-index:1001;border-bottom:4px solid #0267c1;width:100%}.bottom-btn .add_btn{width:140px!important;height:36px;background-color:#0267c1;border-radius:4px;transform:translate(-50%,-50%);color:#fff;cursor:pointer;border:none;outline:none;position:absolute;top:100%;left:50%;box-shadow:#00000059 0 5px 15px}.adjust-top-btn{top:170px!important}.top-btn{position:absolute;top:0%;z-index:1001;width:100%;border-bottom:4px solid #0267c1}.top-btn .add_btn_top{top:0!important;width:140px!important;height:36px;background-color:#0267c1;border-radius:4px;position:absolute;left:50%;transform:translate(-50%,-50%);color:#fff;cursor:pointer;border:none;outline:none;z-index:1001;box-shadow:#00000059 0 5px 15px}.tabs-section{width:auto;padding:15px 10px;box-shadow:#63636333 0 2px 8px;border-radius:6px;display:flex;align-items:center;height:60px;background-color:#fff;z-index:1000}.edit-tab{display:flex;align-items:center;justify-content:center}.edit-tab button{border:none;outline:none;cursor:pointer;background-color:transparent;padding:0;display:flex;justify-content:center;align-items:center}.edit-text{font-size:14px;color:#0267c1;font-weight:500;position:relative;left:4px}.vr-line{border-left:1px solid #e8e8e8;height:25px;margin-left:14px}.regenerate{margin-left:10px;display:flex;justify-content:center;align-items:center}.regenerate button{border:none;outline:none;cursor:pointer;background-color:transparent;padding:0;display:flex;justify-content:center;align-items:center}.remainin-sections{margin-left:10px;display:flex;justify-content:center;align-items:center}.remainin-sections :is(.copy,.up-arrow){border:none;outline:none;cursor:pointer;background-color:transparent;padding:0}.remainin-sections :is(.copy:hover,.up-arrow:hover) svg{fill:#0267c1}.up-arrow{margin-left:10px}@media only screen and (max-width: 475px){.tabs-section{position:relative;left:27px;height:53px}}\n"] }]
58
58
  }], ctorParameters: () => [{ type: i1.EventsService }], propDecorators: { edit: [{
59
59
  type: Output
60
60
  }], data: [{
@@ -68,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
68
68
  }], isEcommerce: [{
69
69
  type: Input
70
70
  }] } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItZWxlbWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQVksZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVMvQyxNQUFNLE9BQU8sc0JBQXNCO0lBRWpDLFlBQ1UsYUFBNkI7UUFBN0Isa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBRzdCLFNBQUksR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUkzRCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBUHBDLENBQUM7SUFTSCxRQUFRLEtBQVcsQ0FBQztJQUVwQixXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLEdBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVU7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7UUFDaEksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQzdFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsUUFBUSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFHLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFDL0UsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBVTtRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDcEQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBMkIsRUFBQyxLQUFVO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUMxSCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDOzhHQXREVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixtT0NibkMsOHRQQTZGQSxxa0VEcEZZLGFBQWEsOEJBQUMsZUFBZSwwSkFBRSxZQUFZOzsyRkFJMUMsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQztrRkFVNUMsSUFBSTtzQkFBYixNQUFNO2dCQUNFLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWhvdmVyLWVsZW1lbnRzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLE1hdERpYWxvZ01vZHVsZSwgQ29tbW9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG92ZXItZWxlbWVudHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9ob3Zlci1lbGVtZW50cy5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSG92ZXJFbGVtZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2UgOiBFdmVudHNTZXJ2aWNlXHJcbiAgKXt9XHJcblxyXG4gIEBPdXRwdXQoKSBlZGl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQElucHV0KCkgZGF0YSA6IGFueTtcclxuICBASW5wdXQoKSBpbmRleDogYW55O1xyXG4gIEBJbnB1dCgpIGVkaXRPcHRpb25zID8gOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzTWVyZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNFY29tbWVyY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7IH1cclxuXHJcbiAgZWRpdFNlY3Rpb24oKXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5lZGl0U2VjdGlvbi5lbWl0KHtkYXRhOnRoaXMuZGF0YX0pO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIHJlc3R5bGVTZWN0aW9uKGV2ZW50OiBhbnkpe1xyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmNsb3NlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UucmVzdHlsZVNlY3Rpb24uZW1pdCh7aW5kZXg6IHRoaXMuaW5kZXh9KTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlQ29udGVudChldmVudDogYW55KXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5jaGFuZ2VDb250ZW50LmVtaXQoe3NlY3Rpb25JZDp0aGlzLmRhdGEuY29tcG9uZW50SWQsIGluZGV4OiB0aGlzLmluZGV4LCBzZWN0aW9uVHlwZTogdGhpcy5kYXRhLnNlY3Rpb25UeXBlfSk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG1vdmVVcChldmVudDogYW55KXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5jaGFuZ2VQb3NpdGlvbi5lbWl0KHtpbmRleDogdGhpcy5pbmRleCwgcG9zaXRpb24gOiBcIlVQXCJ9KTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICBtb3ZlRG93bihldmVudDogYW55KXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5jaGFuZ2VQb3NpdGlvbi5lbWl0KHtpbmRleDogdGhpcy5pbmRleCwgcG9zaXRpb24gOiBcIkRPV05cIn0pO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIGRlbGV0ZVNlY3Rpb24oZXZlbnQ6IGFueSl7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuZGVsZXRlLmVtaXQoe2luZGV4OiB0aGlzLmluZGV4fSk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGFkZFNlY3Rpb24ocG9zaXRpb246IFwiQUJPVkVcIiB8IFwiQkVMT1dcIixldmVudDogYW55KSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuYWRkTmV3U2VjdGlvbkNsaWNrLmVtaXQoeyBzdGF0dXM6IHRydWUsIGluZGV4OiB0aGlzLmluZGV4LCBwb3NpdGlvbjogcG9zaXRpb24sIHdlYkNvbXBOYW1lOnRoaXMuZGF0YX0pO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBkdXBsaWNhdGVTZWN0aW9uKGV2ZW50OiBhbnkpe1xyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmR1cGxpY2F0ZS5lbWl0KHtpbmRleDogdGhpcy5pbmRleCwgZGF0YTogdGhpcy5kYXRhfSk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cImVkaXRPcHRpb25zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9wLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWRqdXN0LXRvcC1idG4nOiBpc01lcmdlZCAmJiBpbmRleCA9PSAxfVwiICpuZ0lmPVwiZGF0YS5zZWN0aW9uVHlwZSAhPSAnZm9vdGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdoZWFkZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2Jsb2dMaXN0JyAmJiAhaXNFY29tbWVyY2VcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkX2J0bl90b3BcIiAoY2xpY2spPVwiYWRkU2VjdGlvbignQUJPVkUnLCAkZXZlbnQpXCI+QWRkIFNlY3Rpb24gKzwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImhvdmVyLXRhYlwiIFtuZ0NsYXNzXT1cInsnYWRqdXN0UG9zaXRpb24nOiBpc01lcmdlZCAmJiBpbmRleCA9PSAxfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzLXNlY3Rpb25cIiBbbmdTdHlsZV09XCJ7J3otaW5kZXgnIDogZGF0YS5zZWN0aW9uVHlwZSA9PT0gJ2hlYWRlcicgPyAnMTAwMDAnIDogJzEwMDAnfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRTZWN0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMDc2XzUyNDA5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIgMTEuNDk5N1YxMy45OTk3SDQuNUwxMS44NzMzIDYuNjI2MzhMOS4zNzMzMyA0LjEyNjM4TDIgMTEuNDk5N1pNMTMuODA2NyA0LjY5MzA1QzE0LjA2NjcgNC40MzMwNSAxNC4wNjY3IDQuMDEzMDUgMTMuODA2NyAzLjc1MzA1TDEyLjI0NjcgMi4xOTMwNUMxMS45ODY3IDEuOTMzMDUgMTEuNTY2NyAxLjkzMzA1IDExLjMwNjcgMi4xOTMwNUwxMC4wODY3IDMuNDEzMDVMMTIuNTg2NyA1LjkxMzA1TDEzLjgwNjcgNC42OTMwNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDI2N2MxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEwNzZfNTI0MDlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWRpdC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ci1saW5lXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWdlbmVyYXRlXCIgKm5nSWY9XCJkYXRhLnNlY3Rpb25UeXBlICE9ICdmb290ZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2Jsb2dMaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzdHlsZVNlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjAxMTA4IDE5Ljk1MjVDNC4yNzU2NSAyMC4wNjU2IDQuNTgzMjcgMTkuOTcxMiA0LjczNzggMTkuNzI3MUwxMS43NjkxIDguNTU1MjJDMTEuODgyOSA4LjM3NDQgMTEuODg5OCA4LjE0NjA4IDExLjc4NjggNy45NTk1NkMxMS42ODM4IDcuNzcyNDUgMTEuNDg2OSA3LjY1NjI4IDExLjI3MzUgNy42NTYyOEg2LjU4MDg1TDguMzI2MDggMC43MzAxNDZDOC4zOTY0NyAwLjQ1MDM0MSA4LjI1Mzk3IDAuMTYxMzU3IDcuOTg5MDUgMC4wNDc0ODk3QzcuNzI1ODUgLTAuMDY1NzkxNiA3LjQxNjI4IDAuMDI5MTY5NCA3LjI2MjMzIDAuMjcyOTE5TDAuMjMxMDgyIDExLjQ0NDhDMC4xMTcyMTUgMTEuNjI1NiAwLjExMDM0IDExLjg1MzkgMC4yMTMzNDggMTIuMDQwNUMwLjMxNjM1NSAxMi4yMjc2IDAuNTEzMTkxIDEyLjM0MzcgMC43MjY2MjkgMTIuMzQzN0g1LjQxOTI4TDMuNjc0MDUgMTkuMjY5OUMzLjYwMzY2IDE5LjU0OTcgMy43NDYxMiAxOS44Mzg3IDQuMDExMDggMTkuOTUyNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMjY3YzFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWRpdC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3R5bGVcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ci1saW5lXCIgICpuZ0lmPVwiZGF0YS5zZWN0aW9uVHlwZSAhPSAnZm9vdGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdoZWFkZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2Jsb2dMaXN0J1wiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVnZW5lcmF0ZVwiICAqbmdJZj1cImRhdGEuc2VjdGlvblR5cGUgIT0gJ2Zvb3RlcicgJiYgZGF0YS5zZWN0aW9uVHlwZSAhPSAnaGVhZGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdibG9nTGlzdCdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZUNvbnRlbnQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbiB3LTUgaC01XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT1cIiMwMjY3YzFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMSAxMmg3bS03LThoN20tNyA0aDdNMiAxNmgxNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT1cIiMwMjY3YzFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0yIDEyIC44NTcxNC0yLjI4NTcxTTggMTJsLS44NTcxNC0yLjI4NTcxbTAgMEw1IDQgMi44NTcxNCA5LjcxNDI5bTQuMjg1NzIgMEgyLjg1NzE0XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWRpdC10ZXh0XCI+Q2hhbmdlIENvbnRlbnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ci1saW5lXCIgICpuZ0lmPVwiZGF0YS5zZWN0aW9uVHlwZSAhPSAnZm9vdGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdibG9nTGlzdCdcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFpbmluLXNlY3Rpb25zXCIgICpuZ0lmPVwiZGF0YS5zZWN0aW9uVHlwZSAhPSAnZm9vdGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdoZWFkZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2Jsb2dMaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvcHlcIiAoY2xpY2spPVwiZHVwbGljYXRlU2VjdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIiM0MzQ0NDNcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uIHctNSBoLTVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSAyYy0xLjEwNDU3IDAtMiAuODk1NDMtMiAydjhjMCAxLjEwNDYuODk1NDMgMiAyIDJoNmMxLjEwNDYgMCAyLS44OTU0IDItMlY2LjQxNDIxYzAtLjUzMDQzLS4yMTA3LTEuMDM5MTQtLjU4NTgtMS40MTQyMUwxNCAyLjU4NTc5QzEzLjYyNDkgMi4yMTA3MSAxMy4xMTYyIDIgMTIuNTg1OCAySDlaXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDhjMC0xLjEwNDU3Ljg5NTQzLTIgMi0ydjEwaDhjMCAxLjEwNDYtLjg5NTQgMi0yIDJINWMtMS4xMDQ1NyAwLTItLjg5NTQtMi0yVjhaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidXAtYXJyb3dcIiAoY2xpY2spPVwibW92ZVVwKCRldmVudClcIiBbZGlzYWJsZWRdPVwiaW5kZXggPT0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCIjNDM0NDQzXCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbiB3LTUgaC01XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjI5Mjg5IDkuNzA3MTFjLS4zOTA1Mi0uMzkwNTMtLjM5MDUyLTEuMDIzNjkgMC0xLjQxNDIybDYtNmMuMzkwNTMtLjM5MDUyIDEuMDIzNzEtLjM5MDUyIDEuNDE0MjEgMGw2IDZjLjM5MDUuMzkwNTMuMzkwNSAxLjAyMzY5IDAgMS40MTQyMi0uMzkwNS4zOTA0OS0xLjAyMzcuMzkwNDktMS40MTQyIDBMMTEgNS40MTQyMVYxN2MwIC41NTIzLS40NDc3IDEtMSAxLS41NTIyOCAwLTEtLjQ0NzctMS0xVjUuNDE0MjFsLTQuMjkyODkgNC4yOTI5Yy0uMzkwNTMuMzkwNDktMS4wMjM2OS4zOTA0OS0xLjQxNDIyIDBaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ1cC1hcnJvd1wiIChjbGljayk9XCJtb3ZlRG93bigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIiM0MzQ0NDNcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uIHctNSBoLTVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2LjcwNzEgMTAuMjkyOWMuMzkwNS4zOTA1LjM5MDUgMS4wMjM3IDAgMS40MTQybC02IDZjLS4zOTA1LjM5MDUtMS4wMjM2OC4zOTA1LTEuNDE0MjEgMGwtNi02Yy0uMzkwNTItLjM5MDUtLjM5MDUyLTEuMDIzNyAwLTEuNDE0Mi4zOTA1My0uMzkwNTMgMS4wMjM2OS0uMzkwNTMgMS40MTQyMiAwTDkgMTQuNTg1OFYzYzAtLjU1MjI4LjQ0NzcyLTEgMS0xIC41NTIzIDAgMSAuNDQ3NzIgMSAxdjExLjU4NThsNC4yOTI5LTQuMjkyOWMuMzkwNS0uMzkwNTMgMS4wMjM3LS4zOTA1MyAxLjQxNDIgMFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInVwLWFycm93XCIgKGNsaWNrKT1cImRlbGV0ZVNlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCIjNDM0NDQzXCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbiB3LTUgaC01XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDJjLS4zNzg3NyAwLS43MjUwMy4yMTQtLjg5NDQzLjU1Mjc5TDcuMzgxOTcgNEg0Yy0uNTUyMjggMC0xIC40NDc3Mi0xIDFzLjQ0NzcyIDEgMSAxdjEwYzAgMS4xMDQ2Ljg5NTQzIDIgMiAyaDhjMS4xMDQ2IDAgMi0uODk1NCAyLTJWNmMuNTUyMyAwIDEtLjQ0NzcyIDEtMXMtLjQ0NzctMS0xLTFoLTMuMzgybC0uNzIzNi0xLjQ0NzIxQzExLjcyNSAyLjIxNCAxMS4zNzg4IDIgMTEgMkg5Wk03IDhjMC0uNTUyMjguNDQ3NzItMSAxLTFzMSAuNDQ3NzIgMSAxdjZjMCAuNTUyMy0uNDQ3NzIgMS0xIDFzLTEtLjQ0NzctMS0xVjhabTUtMWMtLjU1MjMgMC0xIC40NDc3Mi0xIDF2NmMwIC41NTIzLjQ0NzcgMSAxIDFzMS0uNDQ3NyAxLTFWOGMwLS41NTIyOC0uNDQ3Ny0xLTEtMVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJib3R0b20tYnRuXCIgKm5nSWY9XCJkYXRhLnNlY3Rpb25UeXBlICE9ICdmb290ZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2hlYWRlcicgJiYgZGF0YS5zZWN0aW9uVHlwZSAhPSAnYmxvZ0xpc3QnICYmICFpc0Vjb21tZXJjZVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGRfYnRuXCIgKGNsaWNrKT1cImFkZFNlY3Rpb24oJ0JFTE9XJywgJGV2ZW50KVwiPkFkZCBTZWN0aW9uICs8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L21hdC1kaWFsb2ctY29udGVudD5cclxuIl19
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItZWxlbWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQVksZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVMvQyxNQUFNLE9BQU8sc0JBQXNCO0lBRWpDLFlBQ1UsYUFBNkI7UUFBN0Isa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBRzdCLFNBQUksR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUkzRCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBUHBDLENBQUM7SUFTSCxRQUFRLEtBQVcsQ0FBQztJQUVwQixXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLEdBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVU7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7UUFDaEksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQzdFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsUUFBUSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFHLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFDL0UsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBVTtRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDcEQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBMkIsRUFBQyxLQUFVO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUMxSCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDOzhHQXREVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixtT0NibkMsOHRQQTZGQSxrbEVEcEZZLGFBQWEsOEJBQUMsZUFBZSwwSkFBRSxZQUFZOzsyRkFJMUMsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQztrRkFVNUMsSUFBSTtzQkFBYixNQUFNO2dCQUNFLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWhvdmVyLWVsZW1lbnRzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLE1hdERpYWxvZ01vZHVsZSwgQ29tbW9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG92ZXItZWxlbWVudHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9ob3Zlci1lbGVtZW50cy5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSG92ZXJFbGVtZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2UgOiBFdmVudHNTZXJ2aWNlXHJcbiAgKXt9XHJcblxyXG4gIEBPdXRwdXQoKSBlZGl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQElucHV0KCkgZGF0YSA6IGFueTtcclxuICBASW5wdXQoKSBpbmRleDogYW55O1xyXG4gIEBJbnB1dCgpIGVkaXRPcHRpb25zID8gOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzTWVyZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNFY29tbWVyY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7IH1cclxuXHJcbiAgZWRpdFNlY3Rpb24oKXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5lZGl0U2VjdGlvbi5lbWl0KHtkYXRhOnRoaXMuZGF0YX0pO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIHJlc3R5bGVTZWN0aW9uKGV2ZW50OiBhbnkpe1xyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmNsb3NlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UucmVzdHlsZVNlY3Rpb24uZW1pdCh7aW5kZXg6IHRoaXMuaW5kZXh9KTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlQ29udGVudChldmVudDogYW55KXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5jaGFuZ2VDb250ZW50LmVtaXQoe3NlY3Rpb25JZDp0aGlzLmRhdGEuY29tcG9uZW50SWQsIGluZGV4OiB0aGlzLmluZGV4LCBzZWN0aW9uVHlwZTogdGhpcy5kYXRhLnNlY3Rpb25UeXBlfSk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG1vdmVVcChldmVudDogYW55KXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5jaGFuZ2VQb3NpdGlvbi5lbWl0KHtpbmRleDogdGhpcy5pbmRleCwgcG9zaXRpb24gOiBcIlVQXCJ9KTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICBtb3ZlRG93bihldmVudDogYW55KXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5jaGFuZ2VQb3NpdGlvbi5lbWl0KHtpbmRleDogdGhpcy5pbmRleCwgcG9zaXRpb24gOiBcIkRPV05cIn0pO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIGRlbGV0ZVNlY3Rpb24oZXZlbnQ6IGFueSl7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuZGVsZXRlLmVtaXQoe2luZGV4OiB0aGlzLmluZGV4fSk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGFkZFNlY3Rpb24ocG9zaXRpb246IFwiQUJPVkVcIiB8IFwiQkVMT1dcIixldmVudDogYW55KSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuYWRkTmV3U2VjdGlvbkNsaWNrLmVtaXQoeyBzdGF0dXM6IHRydWUsIGluZGV4OiB0aGlzLmluZGV4LCBwb3NpdGlvbjogcG9zaXRpb24sIHdlYkNvbXBOYW1lOnRoaXMuZGF0YX0pO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBkdXBsaWNhdGVTZWN0aW9uKGV2ZW50OiBhbnkpe1xyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmR1cGxpY2F0ZS5lbWl0KHtpbmRleDogdGhpcy5pbmRleCwgZGF0YTogdGhpcy5kYXRhfSk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cImVkaXRPcHRpb25zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9wLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWRqdXN0LXRvcC1idG4nOiBpc01lcmdlZCAmJiBpbmRleCA9PSAxfVwiICpuZ0lmPVwiZGF0YS5zZWN0aW9uVHlwZSAhPSAnZm9vdGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdoZWFkZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2Jsb2dMaXN0JyAmJiAhaXNFY29tbWVyY2VcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkX2J0bl90b3BcIiAoY2xpY2spPVwiYWRkU2VjdGlvbignQUJPVkUnLCAkZXZlbnQpXCI+QWRkIFNlY3Rpb24gKzwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImhvdmVyLXRhYlwiIFtuZ0NsYXNzXT1cInsnYWRqdXN0UG9zaXRpb24nOiBpc01lcmdlZCAmJiBpbmRleCA9PSAxfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzLXNlY3Rpb25cIiBbbmdTdHlsZV09XCJ7J3otaW5kZXgnIDogZGF0YS5zZWN0aW9uVHlwZSA9PT0gJ2hlYWRlcicgPyAnMTAwMDAnIDogJzEwMDAnfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRTZWN0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMDc2XzUyNDA5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIgMTEuNDk5N1YxMy45OTk3SDQuNUwxMS44NzMzIDYuNjI2MzhMOS4zNzMzMyA0LjEyNjM4TDIgMTEuNDk5N1pNMTMuODA2NyA0LjY5MzA1QzE0LjA2NjcgNC40MzMwNSAxNC4wNjY3IDQuMDEzMDUgMTMuODA2NyAzLjc1MzA1TDEyLjI0NjcgMi4xOTMwNUMxMS45ODY3IDEuOTMzMDUgMTEuNTY2NyAxLjkzMzA1IDExLjMwNjcgMi4xOTMwNUwxMC4wODY3IDMuNDEzMDVMMTIuNTg2NyA1LjkxMzA1TDEzLjgwNjcgNC42OTMwNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDI2N2MxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEwNzZfNTI0MDlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWRpdC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ci1saW5lXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWdlbmVyYXRlXCIgKm5nSWY9XCJkYXRhLnNlY3Rpb25UeXBlICE9ICdmb290ZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2Jsb2dMaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzdHlsZVNlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjAxMTA4IDE5Ljk1MjVDNC4yNzU2NSAyMC4wNjU2IDQuNTgzMjcgMTkuOTcxMiA0LjczNzggMTkuNzI3MUwxMS43NjkxIDguNTU1MjJDMTEuODgyOSA4LjM3NDQgMTEuODg5OCA4LjE0NjA4IDExLjc4NjggNy45NTk1NkMxMS42ODM4IDcuNzcyNDUgMTEuNDg2OSA3LjY1NjI4IDExLjI3MzUgNy42NTYyOEg2LjU4MDg1TDguMzI2MDggMC43MzAxNDZDOC4zOTY0NyAwLjQ1MDM0MSA4LjI1Mzk3IDAuMTYxMzU3IDcuOTg5MDUgMC4wNDc0ODk3QzcuNzI1ODUgLTAuMDY1NzkxNiA3LjQxNjI4IDAuMDI5MTY5NCA3LjI2MjMzIDAuMjcyOTE5TDAuMjMxMDgyIDExLjQ0NDhDMC4xMTcyMTUgMTEuNjI1NiAwLjExMDM0IDExLjg1MzkgMC4yMTMzNDggMTIuMDQwNUMwLjMxNjM1NSAxMi4yMjc2IDAuNTEzMTkxIDEyLjM0MzcgMC43MjY2MjkgMTIuMzQzN0g1LjQxOTI4TDMuNjc0MDUgMTkuMjY5OUMzLjYwMzY2IDE5LjU0OTcgMy43NDYxMiAxOS44Mzg3IDQuMDExMDggMTkuOTUyNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMjY3YzFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWRpdC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3R5bGVcclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ci1saW5lXCIgICpuZ0lmPVwiZGF0YS5zZWN0aW9uVHlwZSAhPSAnZm9vdGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdoZWFkZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2Jsb2dMaXN0J1wiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVnZW5lcmF0ZVwiICAqbmdJZj1cImRhdGEuc2VjdGlvblR5cGUgIT0gJ2Zvb3RlcicgJiYgZGF0YS5zZWN0aW9uVHlwZSAhPSAnaGVhZGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdibG9nTGlzdCdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZUNvbnRlbnQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbiB3LTUgaC01XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT1cIiMwMjY3YzFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMSAxMmg3bS03LThoN20tNyA0aDdNMiAxNmgxNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT1cIiMwMjY3YzFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0yIDEyIC44NTcxNC0yLjI4NTcxTTggMTJsLS44NTcxNC0yLjI4NTcxbTAgMEw1IDQgMi44NTcxNCA5LjcxNDI5bTQuMjg1NzIgMEgyLjg1NzE0XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWRpdC10ZXh0XCI+Q2hhbmdlIENvbnRlbnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ci1saW5lXCIgICpuZ0lmPVwiZGF0YS5zZWN0aW9uVHlwZSAhPSAnZm9vdGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdibG9nTGlzdCdcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFpbmluLXNlY3Rpb25zXCIgICpuZ0lmPVwiZGF0YS5zZWN0aW9uVHlwZSAhPSAnZm9vdGVyJyAmJiBkYXRhLnNlY3Rpb25UeXBlICE9ICdoZWFkZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2Jsb2dMaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvcHlcIiAoY2xpY2spPVwiZHVwbGljYXRlU2VjdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIiM0MzQ0NDNcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uIHctNSBoLTVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSAyYy0xLjEwNDU3IDAtMiAuODk1NDMtMiAydjhjMCAxLjEwNDYuODk1NDMgMiAyIDJoNmMxLjEwNDYgMCAyLS44OTU0IDItMlY2LjQxNDIxYzAtLjUzMDQzLS4yMTA3LTEuMDM5MTQtLjU4NTgtMS40MTQyMUwxNCAyLjU4NTc5QzEzLjYyNDkgMi4yMTA3MSAxMy4xMTYyIDIgMTIuNTg1OCAySDlaXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDhjMC0xLjEwNDU3Ljg5NTQzLTIgMi0ydjEwaDhjMCAxLjEwNDYtLjg5NTQgMi0yIDJINWMtMS4xMDQ1NyAwLTItLjg5NTQtMi0yVjhaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidXAtYXJyb3dcIiAoY2xpY2spPVwibW92ZVVwKCRldmVudClcIiBbZGlzYWJsZWRdPVwiaW5kZXggPT0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCIjNDM0NDQzXCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbiB3LTUgaC01XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjI5Mjg5IDkuNzA3MTFjLS4zOTA1Mi0uMzkwNTMtLjM5MDUyLTEuMDIzNjkgMC0xLjQxNDIybDYtNmMuMzkwNTMtLjM5MDUyIDEuMDIzNzEtLjM5MDUyIDEuNDE0MjEgMGw2IDZjLjM5MDUuMzkwNTMuMzkwNSAxLjAyMzY5IDAgMS40MTQyMi0uMzkwNS4zOTA0OS0xLjAyMzcuMzkwNDktMS40MTQyIDBMMTEgNS40MTQyMVYxN2MwIC41NTIzLS40NDc3IDEtMSAxLS41NTIyOCAwLTEtLjQ0NzctMS0xVjUuNDE0MjFsLTQuMjkyODkgNC4yOTI5Yy0uMzkwNTMuMzkwNDktMS4wMjM2OS4zOTA0OS0xLjQxNDIyIDBaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ1cC1hcnJvd1wiIChjbGljayk9XCJtb3ZlRG93bigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIiM0MzQ0NDNcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uIHctNSBoLTVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2LjcwNzEgMTAuMjkyOWMuMzkwNS4zOTA1LjM5MDUgMS4wMjM3IDAgMS40MTQybC02IDZjLS4zOTA1LjM5MDUtMS4wMjM2OC4zOTA1LTEuNDE0MjEgMGwtNi02Yy0uMzkwNTItLjM5MDUtLjM5MDUyLTEuMDIzNyAwLTEuNDE0Mi4zOTA1My0uMzkwNTMgMS4wMjM2OS0uMzkwNTMgMS40MTQyMiAwTDkgMTQuNTg1OFYzYzAtLjU1MjI4LjQ0NzcyLTEgMS0xIC41NTIzIDAgMSAuNDQ3NzIgMSAxdjExLjU4NThsNC4yOTI5LTQuMjkyOWMuMzkwNS0uMzkwNTMgMS4wMjM3LS4zOTA1MyAxLjQxNDIgMFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInVwLWFycm93XCIgKGNsaWNrKT1cImRlbGV0ZVNlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCIjNDM0NDQzXCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbiB3LTUgaC01XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDJjLS4zNzg3NyAwLS43MjUwMy4yMTQtLjg5NDQzLjU1Mjc5TDcuMzgxOTcgNEg0Yy0uNTUyMjggMC0xIC40NDc3Mi0xIDFzLjQ0NzcyIDEgMSAxdjEwYzAgMS4xMDQ2Ljg5NTQzIDIgMiAyaDhjMS4xMDQ2IDAgMi0uODk1NCAyLTJWNmMuNTUyMyAwIDEtLjQ0NzcyIDEtMXMtLjQ0NzctMS0xLTFoLTMuMzgybC0uNzIzNi0xLjQ0NzIxQzExLjcyNSAyLjIxNCAxMS4zNzg4IDIgMTEgMkg5Wk03IDhjMC0uNTUyMjguNDQ3NzItMSAxLTFzMSAuNDQ3NzIgMSAxdjZjMCAuNTUyMy0uNDQ3NzIgMS0xIDFzLTEtLjQ0NzctMS0xVjhabTUtMWMtLjU1MjMgMC0xIC40NDc3Mi0xIDF2NmMwIC41NTIzLjQ0NzcgMSAxIDFzMS0uNDQ3NyAxLTFWOGMwLS41NTIyOC0uNDQ3Ny0xLTEtMVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJib3R0b20tYnRuXCIgKm5nSWY9XCJkYXRhLnNlY3Rpb25UeXBlICE9ICdmb290ZXInICYmIGRhdGEuc2VjdGlvblR5cGUgIT0gJ2hlYWRlcicgJiYgZGF0YS5zZWN0aW9uVHlwZSAhPSAnYmxvZ0xpc3QnICYmICFpc0Vjb21tZXJjZVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGRfYnRuXCIgKGNsaWNrKT1cImFkZFNlY3Rpb24oJ0JFTE9XJywgJGV2ZW50KVwiPkFkZCBTZWN0aW9uICs8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L21hdC1kaWFsb2ctY29udGVudD5cclxuIl19
@@ -169,8 +169,13 @@ export class AddressComponent extends BaseSection {
169
169
  this.selectedAddressIdx = index;
170
170
  this.selectedAddress.emit(index);
171
171
  }
172
- goToHome() {
173
- this.router.navigate(['/profile']);
172
+ goToProfile() {
173
+ if (this.matData) {
174
+ this.matDialogRef?.close();
175
+ }
176
+ else {
177
+ this.router.navigate(['/profile']);
178
+ }
174
179
  }
175
180
  updateAddress() {
176
181
  const userDetails = this.storageService.getUser();
@@ -247,7 +252,7 @@ export class AddressComponent extends BaseSection {
247
252
  return window.innerWidth <= 475;
248
253
  }
249
254
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AddressComponent, deps: [{ token: i0.NgZone }, { token: i1.RestService }, { token: i2.MatDialog }, { token: i3.MatBottomSheet }, { token: i4.Router }, { token: i5.StorageServiceService }, { token: i6.EventsService }, { token: MAT_DIALOG_DATA, optional: true }, { token: i2.MatDialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
250
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: AddressComponent, isStandalone: true, selector: "simpo-address", inputs: { responseData: "responseData", data: "data", index: "index", edit: "edit", delete: "delete", isCart: "isCart" }, outputs: { selectedAddress: "selectedAddress" }, providers: [], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<section class=\"address-sec\" (click)=\"editSection()\" simpoHover (hovering)=\"showEditTabs($event)\" >\r\n <div class=\"header\">\r\n <div class=\"new-address-header\">\r\n <mat-icon (click)=\"goToHome()\" *ngIf=\"!isCart\">keyboard_arrow_left</mat-icon>\r\n <h3>{{isCart ? 'Shipping To' : 'New Address'}}</h3>\r\n </div>\r\n <span class=\"add-address\" *ngIf=\"!addNewAddress\" (click)=\"addNewAddress = true\">+ add address</span>\r\n </div>\r\n <ng-container *ngIf=\"addNewAddress\">\r\n <!-- <p (click)=\"getCurrentLocation()\" class=\"d-flex align-items-center\" style=\"cursor: pointer;\">\r\n <mat-icon>my_location</mat-icon>\r\n <span>Take my current location</span>\r\n </p> -->\r\n <div class=\"forms d-flex flex-wrap\">\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Name</div>\r\n <input type=\"text\" placeholder=\"Enter name\" [(ngModel)]=\"address.receiverName\" (keydown)=\"validateName($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Mobile</div>\r\n <input type=\"text\" placeholder=\"Enter mobile\" [(ngModel)]=\"address.receiverPhone\" (keydown)=\"validateMobile($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Email</div>\r\n <input type=\"text\" placeholder=\"Enter email\" [(ngModel)]=\"address.receiverEmail\">\r\n </div>\r\n <div class=\"form-control-full-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address</div>\r\n <input type=\"text\" placeholder=\"Enter address\" matGoogleMapsAutocomplete\r\n (onAutocompleteSelected)=\"onAutocompleteSelected($event)\"\r\n (onLocationSelected)=\"onLocationSelected($event)\" [(ngModel)]=\"address.addressLine1\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Locality</div>\r\n <input type=\"text\" placeholder=\"Enter locality\" [(ngModel)]=\"address.localityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\">Landmark</div>\r\n <input type=\"text\" placeholder=\"Enter landmark\" [(ngModel)]=\"address.landmark\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Pincode</div>\r\n <input type=\"text\" placeholder=\"Enter pincode\" [(ngModel)]=\"address.zipCode\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">City</div>\r\n <input type=\"text\" placeholder=\"Enter city\" [(ngModel)]=\"address.cityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">State</div>\r\n <input type=\"text\" placeholder=\"Enter state\" [(ngModel)]=\"address.stateName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address Type</div>\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let address of addessType\">\r\n <span class=\"address-type\" (click)=\"checkAddressType(address)\" [ngClass]=\"{'active-address': address.status}\">{{address.key}}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"address-list\" *ngIf=\"!addNewAddress\">\r\n <ng-container *ngFor=\"let address of addressList; let idx = index\">\r\n <div class=\"address\" (click)=\"addressSelected(idx)\" [ngClass]=\"{'selected-address': selectedAddressIdx == idx}\">\r\n <div class=\"address-left\">\r\n <div class=\"top\">\r\n <span class=\"fw-bold mr-2\">{{address?.receiverName}}</span>\r\n <span class=\"address-type\">{{address?.addressType}}</span>\r\n </div>\r\n <div class=\"address-det\">{{address.addressLine1}}</div>\r\n <div class=\"phone\">\r\n <span>Phone:</span>\r\n <span class=\"address-phone\">{{address.receiverPhone}}</span>\r\n </div>\r\n </div>\r\n <div class=\"address-right\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"action-btn\" *ngIf=\"addNewAddress\">\r\n <div class=\"error-message\">\r\n <span *ngIf=\"address.receiverPhone?.length != 10 && address.receiverPhone?.length\">*Mobile number is invalid</span>\r\n <span *ngIf=\"!isEmailValid\">*Email is invalid</span>\r\n </div>\r\n <button [disabled]=\"\r\n !address.receiverName || \r\n !address.receiverPhone ||\r\n address.receiverPhone?.length != 10 ||\r\n !isEmailValid || \r\n !address.addressLine1 || \r\n !address.localityName || \r\n !address.zipCode || \r\n !address.cityName ||\r\n !address.stateName || \r\n !address.addressType || isLoading\r\n \" (click)=\"updateAddress()\">{{isLoading ? 'Loading' : 'Update'}}</button>\r\n </div>\r\n</section>\r\n\r\n\r\n<div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n</div>\r\n<div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n</div>", styles: [".address-sec{padding:20px;position:relative}.address-sec .header{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:20px}.new-address-header{display:flex;align-items:center}.mat-icon{cursor:pointer;margin-right:5px}.action-btn{margin-left:auto;bottom:-20px;position:relative;right:0;display:flex;flex-direction:column;align-items:flex-end}.action-btn button{background-color:#0267c1;color:#fff;padding:10px;width:200px!important;border:none;border-radius:5px}.label:after{content:\"*\"}.active-address{background-color:#0267c1!important;color:#fff!important}.forms{gap:10px;justify-content:space-between}.form-control-group,.form-control-full-group{width:48%}:is(.form-control-group,.form-control-full-group) input{width:100%;padding:10px;border-radius:3px;border:1.5px solid lightgray}.form-control-full-group{width:100%!important}.address-type{width:150px;padding:10px;background-color:#d3d3d35c;color:#000;text-align:center;border-radius:5px;margin:0 5px;cursor:pointer}.address{display:flex;padding:15px;border-radius:5px;box-shadow:0 1px 1px #0000,0 1px 1px #00000030;border:1px solid #d3d3d3b1}.address-list{display:flex;flex-direction:column;gap:10px;height:500px;overflow-y:auto}.address-list .address-left{width:80%}.address-list .address-right{width:20%}.address-list .address-phone{margin-left:10px}.address-list .address-type{background-color:#d3d3d34a;padding:5px 10px;text-align:center;border-radius:5px;margin-left:15px}.address-list .address-det{margin:10px 0}.add-address{color:#0267c1;cursor:pointer;font-weight:600}.address-active{background-color:#0267c1;color:#fff}.selected-address{border:2px solid #0267C1!important}.error-message{color:tomato;display:flex;flex-direction:column;width:100%}@media only screen and (max-width: 475px){.address-list{height:fit-content;max-height:230px}.forms{flex-direction:column}.form-control-group{width:100%}.label{padding-bottom:10px}.address-type-options{position:relative;right:4px}.action-btn{position:relative;bottom:0;top:19px;right:0}.action-btn button{width:100%!important}.address-type{padding:10px 27px}.address-sec{padding:20px 4px}}button:disabled{background-color:#d3d3d3!important}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatBottomSheetModule }, { kind: "component", type: DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }] }); }
255
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: AddressComponent, isStandalone: true, selector: "simpo-address", inputs: { responseData: "responseData", data: "data", index: "index", edit: "edit", delete: "delete", isCart: "isCart" }, outputs: { selectedAddress: "selectedAddress" }, providers: [], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<section class=\"address-sec\" (click)=\"editSection()\" simpoHover (hovering)=\"showEditTabs($event)\" >\r\n <div class=\"header\">\r\n <div class=\"new-address-header\">\r\n <mat-icon (click)=\"goToProfile()\" *ngIf=\"!isCart\">keyboard_arrow_left</mat-icon>\r\n <h3>{{isCart ? 'Shipping To' : 'New Address'}}</h3>\r\n </div>\r\n <span class=\"add-address\" *ngIf=\"!addNewAddress\" (click)=\"addNewAddress = true\">+ add address</span>\r\n </div>\r\n <ng-container *ngIf=\"addNewAddress\">\r\n <!-- <p (click)=\"getCurrentLocation()\" class=\"d-flex align-items-center\" style=\"cursor: pointer;\">\r\n <mat-icon>my_location</mat-icon>\r\n <span>Take my current location</span>\r\n </p> -->\r\n <div class=\"forms d-flex flex-wrap\">\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Name</div>\r\n <input type=\"text\" placeholder=\"Enter name\" [(ngModel)]=\"address.receiverName\" (keydown)=\"validateName($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Mobile</div>\r\n <input type=\"text\" placeholder=\"Enter mobile\" [(ngModel)]=\"address.receiverPhone\" (keydown)=\"validateMobile($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Email</div>\r\n <input type=\"text\" placeholder=\"Enter email\" [(ngModel)]=\"address.receiverEmail\">\r\n </div>\r\n <div class=\"form-control-full-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address</div>\r\n <input type=\"text\" placeholder=\"Enter address\" matGoogleMapsAutocomplete\r\n (onAutocompleteSelected)=\"onAutocompleteSelected($event)\"\r\n (onLocationSelected)=\"onLocationSelected($event)\" [(ngModel)]=\"address.addressLine1\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Locality</div>\r\n <input type=\"text\" placeholder=\"Enter locality\" [(ngModel)]=\"address.localityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\">Landmark</div>\r\n <input type=\"text\" placeholder=\"Enter landmark\" [(ngModel)]=\"address.landmark\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Pincode</div>\r\n <input type=\"text\" placeholder=\"Enter pincode\" [(ngModel)]=\"address.zipCode\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">City</div>\r\n <input type=\"text\" placeholder=\"Enter city\" [(ngModel)]=\"address.cityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">State</div>\r\n <input type=\"text\" placeholder=\"Enter state\" [(ngModel)]=\"address.stateName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address Type</div>\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let address of addessType\">\r\n <span class=\"address-type\" (click)=\"checkAddressType(address)\" [ngClass]=\"{'active-address': address.status}\">{{address.key}}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"address-list\" *ngIf=\"!addNewAddress\">\r\n <ng-container *ngFor=\"let address of addressList; let idx = index\">\r\n <div class=\"address\" (click)=\"addressSelected(idx)\" [ngClass]=\"{'selected-address': selectedAddressIdx == idx}\">\r\n <div class=\"address-left\">\r\n <div class=\"top\">\r\n <span class=\"fw-bold mr-2\">{{address?.receiverName}}</span>\r\n <span class=\"address-type\">{{address?.addressType}}</span>\r\n </div>\r\n <div class=\"address-det\">{{address.addressLine1}}</div>\r\n <div class=\"phone\">\r\n <span>Phone:</span>\r\n <span class=\"address-phone\">{{address.receiverPhone}}</span>\r\n </div>\r\n </div>\r\n <div class=\"address-right\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"action-btn\" *ngIf=\"addNewAddress\">\r\n <div class=\"error-message\">\r\n <span *ngIf=\"address.receiverPhone?.length != 10 && address.receiverPhone?.length\">*Mobile number is invalid</span>\r\n <span *ngIf=\"!isEmailValid\">*Email is invalid</span>\r\n </div>\r\n <button [disabled]=\"\r\n !address.receiverName || \r\n !address.receiverPhone ||\r\n address.receiverPhone?.length != 10 ||\r\n !isEmailValid || \r\n !address.addressLine1 || \r\n !address.localityName || \r\n !address.zipCode || \r\n !address.cityName ||\r\n !address.stateName || \r\n !address.addressType || isLoading\r\n \" (click)=\"updateAddress()\">{{isLoading ? 'Loading' : 'Update'}}</button>\r\n </div>\r\n</section>\r\n\r\n\r\n<div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n</div>\r\n<div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n</div>", styles: [".address-sec{padding:20px;position:relative}.address-sec .header{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:20px}.new-address-header{display:flex;align-items:center}.mat-icon{cursor:pointer;margin-right:5px}.action-btn{margin-left:auto;bottom:-20px;position:relative;right:0;display:flex;flex-direction:column;align-items:flex-end}.action-btn button{background-color:#0267c1;color:#fff;padding:10px;width:200px!important;border:none;border-radius:5px}.label:after{content:\"*\"}.active-address{background-color:#0267c1!important;color:#fff!important}.forms{gap:10px;justify-content:space-between}.form-control-group,.form-control-full-group{width:48%}:is(.form-control-group,.form-control-full-group) input{width:100%;padding:10px;border-radius:3px;border:1.5px solid lightgray}.form-control-full-group{width:100%!important}.address-type{width:150px;padding:10px;background-color:#d3d3d35c;color:#000;text-align:center;border-radius:5px;margin:0 5px;cursor:pointer}.address{display:flex;padding:15px;border-radius:5px;box-shadow:0 1px 1px #0000,0 1px 1px #00000030;border:1px solid #d3d3d3b1}.address-list{display:flex;flex-direction:column;gap:10px;height:500px;overflow-y:auto}.address-list .address-left{width:80%}.address-list .address-right{width:20%}.address-list .address-phone{margin-left:10px}.address-list .address-type{background-color:#d3d3d34a;padding:5px 10px;text-align:center;border-radius:5px;margin-left:15px}.address-list .address-det{margin:10px 0}.add-address{color:#0267c1;cursor:pointer;font-weight:600}.address-active{background-color:#0267c1;color:#fff}.selected-address{border:2px solid #0267C1!important}.error-message{color:tomato;display:flex;flex-direction:column;width:100%}@media only screen and (max-width: 475px){.address-list{height:fit-content;max-height:230px}.forms{flex-direction:column}.form-control-group{width:100%}.label{padding-bottom:10px}.address-type-options{position:relative;right:4px}.action-btn{position:relative;bottom:0;top:19px;right:0}.action-btn button{width:100%!important}.address-type{padding:10px 27px}.address-sec{padding:20px 4px}}button:disabled{background-color:#d3d3d3!important}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatBottomSheetModule }, { kind: "component", type: DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }] }); }
251
256
  }
252
257
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AddressComponent, decorators: [{
253
258
  type: Component,
@@ -260,7 +265,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
260
265
  MatBottomSheetModule,
261
266
  DeleteHoverElementComponent,
262
267
  HoverElementsComponent
263
- ], providers: [], template: "<section class=\"address-sec\" (click)=\"editSection()\" simpoHover (hovering)=\"showEditTabs($event)\" >\r\n <div class=\"header\">\r\n <div class=\"new-address-header\">\r\n <mat-icon (click)=\"goToHome()\" *ngIf=\"!isCart\">keyboard_arrow_left</mat-icon>\r\n <h3>{{isCart ? 'Shipping To' : 'New Address'}}</h3>\r\n </div>\r\n <span class=\"add-address\" *ngIf=\"!addNewAddress\" (click)=\"addNewAddress = true\">+ add address</span>\r\n </div>\r\n <ng-container *ngIf=\"addNewAddress\">\r\n <!-- <p (click)=\"getCurrentLocation()\" class=\"d-flex align-items-center\" style=\"cursor: pointer;\">\r\n <mat-icon>my_location</mat-icon>\r\n <span>Take my current location</span>\r\n </p> -->\r\n <div class=\"forms d-flex flex-wrap\">\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Name</div>\r\n <input type=\"text\" placeholder=\"Enter name\" [(ngModel)]=\"address.receiverName\" (keydown)=\"validateName($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Mobile</div>\r\n <input type=\"text\" placeholder=\"Enter mobile\" [(ngModel)]=\"address.receiverPhone\" (keydown)=\"validateMobile($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Email</div>\r\n <input type=\"text\" placeholder=\"Enter email\" [(ngModel)]=\"address.receiverEmail\">\r\n </div>\r\n <div class=\"form-control-full-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address</div>\r\n <input type=\"text\" placeholder=\"Enter address\" matGoogleMapsAutocomplete\r\n (onAutocompleteSelected)=\"onAutocompleteSelected($event)\"\r\n (onLocationSelected)=\"onLocationSelected($event)\" [(ngModel)]=\"address.addressLine1\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Locality</div>\r\n <input type=\"text\" placeholder=\"Enter locality\" [(ngModel)]=\"address.localityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\">Landmark</div>\r\n <input type=\"text\" placeholder=\"Enter landmark\" [(ngModel)]=\"address.landmark\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Pincode</div>\r\n <input type=\"text\" placeholder=\"Enter pincode\" [(ngModel)]=\"address.zipCode\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">City</div>\r\n <input type=\"text\" placeholder=\"Enter city\" [(ngModel)]=\"address.cityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">State</div>\r\n <input type=\"text\" placeholder=\"Enter state\" [(ngModel)]=\"address.stateName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address Type</div>\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let address of addessType\">\r\n <span class=\"address-type\" (click)=\"checkAddressType(address)\" [ngClass]=\"{'active-address': address.status}\">{{address.key}}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"address-list\" *ngIf=\"!addNewAddress\">\r\n <ng-container *ngFor=\"let address of addressList; let idx = index\">\r\n <div class=\"address\" (click)=\"addressSelected(idx)\" [ngClass]=\"{'selected-address': selectedAddressIdx == idx}\">\r\n <div class=\"address-left\">\r\n <div class=\"top\">\r\n <span class=\"fw-bold mr-2\">{{address?.receiverName}}</span>\r\n <span class=\"address-type\">{{address?.addressType}}</span>\r\n </div>\r\n <div class=\"address-det\">{{address.addressLine1}}</div>\r\n <div class=\"phone\">\r\n <span>Phone:</span>\r\n <span class=\"address-phone\">{{address.receiverPhone}}</span>\r\n </div>\r\n </div>\r\n <div class=\"address-right\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"action-btn\" *ngIf=\"addNewAddress\">\r\n <div class=\"error-message\">\r\n <span *ngIf=\"address.receiverPhone?.length != 10 && address.receiverPhone?.length\">*Mobile number is invalid</span>\r\n <span *ngIf=\"!isEmailValid\">*Email is invalid</span>\r\n </div>\r\n <button [disabled]=\"\r\n !address.receiverName || \r\n !address.receiverPhone ||\r\n address.receiverPhone?.length != 10 ||\r\n !isEmailValid || \r\n !address.addressLine1 || \r\n !address.localityName || \r\n !address.zipCode || \r\n !address.cityName ||\r\n !address.stateName || \r\n !address.addressType || isLoading\r\n \" (click)=\"updateAddress()\">{{isLoading ? 'Loading' : 'Update'}}</button>\r\n </div>\r\n</section>\r\n\r\n\r\n<div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n</div>\r\n<div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n</div>", styles: [".address-sec{padding:20px;position:relative}.address-sec .header{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:20px}.new-address-header{display:flex;align-items:center}.mat-icon{cursor:pointer;margin-right:5px}.action-btn{margin-left:auto;bottom:-20px;position:relative;right:0;display:flex;flex-direction:column;align-items:flex-end}.action-btn button{background-color:#0267c1;color:#fff;padding:10px;width:200px!important;border:none;border-radius:5px}.label:after{content:\"*\"}.active-address{background-color:#0267c1!important;color:#fff!important}.forms{gap:10px;justify-content:space-between}.form-control-group,.form-control-full-group{width:48%}:is(.form-control-group,.form-control-full-group) input{width:100%;padding:10px;border-radius:3px;border:1.5px solid lightgray}.form-control-full-group{width:100%!important}.address-type{width:150px;padding:10px;background-color:#d3d3d35c;color:#000;text-align:center;border-radius:5px;margin:0 5px;cursor:pointer}.address{display:flex;padding:15px;border-radius:5px;box-shadow:0 1px 1px #0000,0 1px 1px #00000030;border:1px solid #d3d3d3b1}.address-list{display:flex;flex-direction:column;gap:10px;height:500px;overflow-y:auto}.address-list .address-left{width:80%}.address-list .address-right{width:20%}.address-list .address-phone{margin-left:10px}.address-list .address-type{background-color:#d3d3d34a;padding:5px 10px;text-align:center;border-radius:5px;margin-left:15px}.address-list .address-det{margin:10px 0}.add-address{color:#0267c1;cursor:pointer;font-weight:600}.address-active{background-color:#0267c1;color:#fff}.selected-address{border:2px solid #0267C1!important}.error-message{color:tomato;display:flex;flex-direction:column;width:100%}@media only screen and (max-width: 475px){.address-list{height:fit-content;max-height:230px}.forms{flex-direction:column}.form-control-group{width:100%}.label{padding-bottom:10px}.address-type-options{position:relative;right:4px}.action-btn{position:relative;bottom:0;top:19px;right:0}.action-btn button{width:100%!important}.address-type{padding:10px 27px}.address-sec{padding:20px 4px}}button:disabled{background-color:#d3d3d3!important}\n"] }]
268
+ ], providers: [], template: "<section class=\"address-sec\" (click)=\"editSection()\" simpoHover (hovering)=\"showEditTabs($event)\" >\r\n <div class=\"header\">\r\n <div class=\"new-address-header\">\r\n <mat-icon (click)=\"goToProfile()\" *ngIf=\"!isCart\">keyboard_arrow_left</mat-icon>\r\n <h3>{{isCart ? 'Shipping To' : 'New Address'}}</h3>\r\n </div>\r\n <span class=\"add-address\" *ngIf=\"!addNewAddress\" (click)=\"addNewAddress = true\">+ add address</span>\r\n </div>\r\n <ng-container *ngIf=\"addNewAddress\">\r\n <!-- <p (click)=\"getCurrentLocation()\" class=\"d-flex align-items-center\" style=\"cursor: pointer;\">\r\n <mat-icon>my_location</mat-icon>\r\n <span>Take my current location</span>\r\n </p> -->\r\n <div class=\"forms d-flex flex-wrap\">\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Name</div>\r\n <input type=\"text\" placeholder=\"Enter name\" [(ngModel)]=\"address.receiverName\" (keydown)=\"validateName($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Mobile</div>\r\n <input type=\"text\" placeholder=\"Enter mobile\" [(ngModel)]=\"address.receiverPhone\" (keydown)=\"validateMobile($event)\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Email</div>\r\n <input type=\"text\" placeholder=\"Enter email\" [(ngModel)]=\"address.receiverEmail\">\r\n </div>\r\n <div class=\"form-control-full-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address</div>\r\n <input type=\"text\" placeholder=\"Enter address\" matGoogleMapsAutocomplete\r\n (onAutocompleteSelected)=\"onAutocompleteSelected($event)\"\r\n (onLocationSelected)=\"onLocationSelected($event)\" [(ngModel)]=\"address.addressLine1\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Locality</div>\r\n <input type=\"text\" placeholder=\"Enter locality\" [(ngModel)]=\"address.localityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label\" [style.color]=\"data?.styles?.background?.accentColor\">Landmark</div>\r\n <input type=\"text\" placeholder=\"Enter landmark\" [(ngModel)]=\"address.landmark\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Pincode</div>\r\n <input type=\"text\" placeholder=\"Enter pincode\" [(ngModel)]=\"address.zipCode\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">City</div>\r\n <input type=\"text\" placeholder=\"Enter city\" [(ngModel)]=\"address.cityName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">State</div>\r\n <input type=\"text\" placeholder=\"Enter state\" [(ngModel)]=\"address.stateName\">\r\n </div>\r\n <div class=\"form-control-group\">\r\n <div class=\"label required\" [style.color]=\"data?.styles?.background?.accentColor\">Address Type</div>\r\n <div class=\"d-flex\">\r\n <ng-container *ngFor=\"let address of addessType\">\r\n <span class=\"address-type\" (click)=\"checkAddressType(address)\" [ngClass]=\"{'active-address': address.status}\">{{address.key}}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"address-list\" *ngIf=\"!addNewAddress\">\r\n <ng-container *ngFor=\"let address of addressList; let idx = index\">\r\n <div class=\"address\" (click)=\"addressSelected(idx)\" [ngClass]=\"{'selected-address': selectedAddressIdx == idx}\">\r\n <div class=\"address-left\">\r\n <div class=\"top\">\r\n <span class=\"fw-bold mr-2\">{{address?.receiverName}}</span>\r\n <span class=\"address-type\">{{address?.addressType}}</span>\r\n </div>\r\n <div class=\"address-det\">{{address.addressLine1}}</div>\r\n <div class=\"phone\">\r\n <span>Phone:</span>\r\n <span class=\"address-phone\">{{address.receiverPhone}}</span>\r\n </div>\r\n </div>\r\n <div class=\"address-right\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"action-btn\" *ngIf=\"addNewAddress\">\r\n <div class=\"error-message\">\r\n <span *ngIf=\"address.receiverPhone?.length != 10 && address.receiverPhone?.length\">*Mobile number is invalid</span>\r\n <span *ngIf=\"!isEmailValid\">*Email is invalid</span>\r\n </div>\r\n <button [disabled]=\"\r\n !address.receiverName || \r\n !address.receiverPhone ||\r\n address.receiverPhone?.length != 10 ||\r\n !isEmailValid || \r\n !address.addressLine1 || \r\n !address.localityName || \r\n !address.zipCode || \r\n !address.cityName ||\r\n !address.stateName || \r\n !address.addressType || isLoading\r\n \" (click)=\"updateAddress()\">{{isLoading ? 'Loading' : 'Update'}}</button>\r\n </div>\r\n</section>\r\n\r\n\r\n<div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n</div>\r\n<div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n</div>", styles: [".address-sec{padding:20px;position:relative}.address-sec .header{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:20px}.new-address-header{display:flex;align-items:center}.mat-icon{cursor:pointer;margin-right:5px}.action-btn{margin-left:auto;bottom:-20px;position:relative;right:0;display:flex;flex-direction:column;align-items:flex-end}.action-btn button{background-color:#0267c1;color:#fff;padding:10px;width:200px!important;border:none;border-radius:5px}.label:after{content:\"*\"}.active-address{background-color:#0267c1!important;color:#fff!important}.forms{gap:10px;justify-content:space-between}.form-control-group,.form-control-full-group{width:48%}:is(.form-control-group,.form-control-full-group) input{width:100%;padding:10px;border-radius:3px;border:1.5px solid lightgray}.form-control-full-group{width:100%!important}.address-type{width:150px;padding:10px;background-color:#d3d3d35c;color:#000;text-align:center;border-radius:5px;margin:0 5px;cursor:pointer}.address{display:flex;padding:15px;border-radius:5px;box-shadow:0 1px 1px #0000,0 1px 1px #00000030;border:1px solid #d3d3d3b1}.address-list{display:flex;flex-direction:column;gap:10px;height:500px;overflow-y:auto}.address-list .address-left{width:80%}.address-list .address-right{width:20%}.address-list .address-phone{margin-left:10px}.address-list .address-type{background-color:#d3d3d34a;padding:5px 10px;text-align:center;border-radius:5px;margin-left:15px}.address-list .address-det{margin:10px 0}.add-address{color:#0267c1;cursor:pointer;font-weight:600}.address-active{background-color:#0267c1;color:#fff}.selected-address{border:2px solid #0267C1!important}.error-message{color:tomato;display:flex;flex-direction:column;width:100%}@media only screen and (max-width: 475px){.address-list{height:fit-content;max-height:230px}.forms{flex-direction:column}.form-control-group{width:100%}.label{padding-bottom:10px}.address-type-options{position:relative;right:4px}.action-btn{position:relative;bottom:0;top:19px;right:0}.action-btn button{width:100%!important}.address-type{padding:10px 27px}.address-sec{padding:20px 4px}}button:disabled{background-color:#d3d3d3!important}\n"] }]
264
269
  }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.RestService }, { type: i2.MatDialog }, { type: i3.MatBottomSheet }, { type: i4.Router }, { type: i5.StorageServiceService }, { type: i6.EventsService }, { type: undefined, decorators: [{
265
270
  type: Optional
266
271
  }, {
@@ -283,4 +288,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
283
288
  }], isCart: [{
284
289
  type: Input
285
290
  }] } });
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9hZGRyZXNzL2FkZHJlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYWRkcmVzcy9hZGRyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtCLEtBQUssRUFBNEIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25JLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBS3JHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFNUUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDdEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFckcsT0FBTyxFQUFrQixvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7O0FBdUJ0RixNQUFNLE9BQU8sZ0JBQWlCLFNB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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xKLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDO0lBQ2xDLENBQUM7OEdBMVBVLGdCQUFnQixrTkFtQkwsZUFBZTtrR0FuQjFCLGdCQUFnQix1T0FOaEIsRUFFVixzRUNyQ0gsazhNQTBHTSxxc0VEaEZGLE9BQU8sMElBQ1AsWUFBWSw2VkFDWixXQUFXLCttQkFDWCxjQUFjLCtFQUNkLGVBQWUsOEJBQ2Ysb0JBQW9CLCtCQUNwQiwyQkFBMkIscUhBQzNCLHNCQUFzQjs7MkZBUWIsZ0JBQWdCO2tCQW5CNUIsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLE9BQU87d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3FCQUN2QixhQUNVLEVBRVY7OzBCQXVCRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUNsQyxRQUFRO3lDQWxCRixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFHSSxlQUFlO3NCQUF4QixNQUFNO2dCQW1DRSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgTmdab25lLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPcHRpb25hbCwgSW5qZWN0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZVVzZXJDb21wb25lbnQgfSBmcm9tICcuLi9hdXRoZW50aWNhdGUtdXNlci9hdXRoZW50aWNhdGUtdXNlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBRERSRVNTX1RZUEUsIEFkZHJlc3NEZXRhaWxzLCBVc2VyIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3VzZXIubW9kYWwnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLRVlCT0FSRF9LRVlTIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2J1c2luZXNzLmNvbnN0YW50JztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyLW1hdGVyaWFsLWV4dGVuc2lvbnMvZ29vZ2xlLW1hcHMtYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgRGVsZXRlSG92ZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9kZWxldGUtaG92ZXItZWxlbWVudC9kZWxldGUtaG92ZXItZWxlbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIb3ZlckVsZW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi4vY2FydC9jYXJ0Lm1vZGFsJztcclxuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXQsIE1hdEJvdHRvbVNoZWV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcclxuXHJcbmRlY2xhcmUgdmFyIGdvb2dsZTogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1hZGRyZXNzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1hdEljb24sXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0Qm90dG9tU2hlZXRNb2R1bGUsXHJcbiAgICBEZWxldGVIb3ZlckVsZW1lbnRDb21wb25lbnQsXHJcbiAgICBIb3ZlckVsZW1lbnRzQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkcmVzcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FkZHJlc3MuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZHJlc3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgcmVzcG9uc2VEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgZGF0YTogYW55OyBcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIHB1YmxpYyBhZGRyZXNzTGlzdDogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRBZGRyZXNzSWR4OiBudW1iZXIgPSAwO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEFkZHJlc3M6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXREaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0Qm90dG9tc2hlZXQ6IE1hdEJvdHRvbVNoZWV0LFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgbWF0RGF0YTogYW55LFxyXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIG1hdERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEFkZHJlc3NDb21wb25lbnQ+XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZHJlc3M6IEFkZHJlc3NEZXRhaWxzID0ge1xyXG4gICAgXCJyZWNlaXZlck5hbWVcIjogXCJcIixcclxuICAgIFwicmVjZWl2ZXJQaG9uZVwiOiBcIlwiLFxyXG4gICAgXCJyZWNlaXZlckVtYWlsXCI6IFwiXCIsXHJcbiAgICBcImNvdW50cnlOYW1lXCI6IFwiXCIsXHJcbiAgICBcInN0YXRlTmFtZVwiOiBcIlwiLFxyXG4gICAgXCJjaXR5TmFtZVwiOiBcIlwiLFxyXG4gICAgXCJsb2NhbGl0eU5hbWVcIjogXCJcIixcclxuICAgIFwiYWRkcmVzc0xpbmUxXCI6IFwiXCIsXHJcbiAgICBcImxhbmRtYXJrXCI6IFwiXCIsXHJcbiAgICBcInppcENvZGVcIjogXCJcIixcclxuICAgIFwic3RhdGVDb2RlXCI6IFwiXCIsXHJcbiAgICBcImFkZHJlc3NUeXBlXCI6IFwiSE9NRVwiLFxyXG4gICAgXCJnZW9sb2NhdGlvblwiOiB7XHJcbiAgICAgIFwibGF0aXR1ZGVcIjogMCxcclxuICAgICAgXCJsb25naXR1ZGVcIjogMFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgaXNDYXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgZWRpdEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBwcml2YXRlIGxhdGl0dXRlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvbmdpdHV0ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIGFkZE5ld0FkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG1hcENlbnRlcjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCA9IHtcclxuICAgIGxhdDogMCxcclxuICAgIGxuZzogMFxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtYXJrZXJQb3NpdGlvbjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCA9IHtcclxuICAgIGxhdDogMCxcclxuICAgIGxuZzogMFxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBtYXJrZXJPcHRpb25zOiBnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zID0geyBkcmFnZ2FibGU6IHRydWUgfTtcclxuXHJcbiAgcHJpdmF0ZSBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xyXG5cclxuICBwdWJsaWMgYWRkZXNzVHlwZTogeyBrZXk6IHN0cmluZywgc3RhdHVzOiBib29sZWFuIH1bXSA9IFtcclxuICAgIHsga2V5OiBcIkhPTUVcIiwgc3RhdHVzOiBmYWxzZSB9LFxyXG4gICAgeyBrZXk6IFwiV09SS1wiLCBzdGF0dXM6IGZhbHNlIH0sXHJcbiAgICB7IGtleTogXCJPVEhFUlwiLCBzdGF0dXM6IGZhbHNlIH1cclxuICBdO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKCk7XHJcbiAgICBcclxuICAgIHRoaXMuYWRkTmV3QWRkcmVzcyA9IHRoaXMucmVzcG9uc2VEYXRhPy5sZW5ndGggPT0gMDtcclxuICAgIGlmICh0aGlzLm1hdERhdGEpIHtcclxuICAgICAgdGhpcy5yZXNwb25zZURhdGEgPSB0aGlzLm1hdERhdGEuYWRkcmVzc0xpc3Q7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMubWF0RGF0YT8uZGF0YTtcclxuICAgICAgaWYgKHRoaXMubWF0RGF0YT8uYWRkcmVzcykge1xyXG4gICAgICAgIHRoaXMuYWRkcmVzcyA9IHsuLi50aGlzLm1hdERhdGEuYWRkcmVzc307XHJcbiAgICAgICAgdGhpcy5lZGl0SW5kZXggPSB0aGlzLm1hdERhdGE/LmVkaXRJbmRleCA/PyAtMTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFkZE5ld0FkZHJlc3MgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRyZXNzTGlzdCA9IHRoaXMucmVzcG9uc2VEYXRhO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkTmV3QWRkcmVzcyAmJiAhdGhpcy5tYXREYXRhKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCk7XHJcbiAgICAgIHRoaXMuYWRkcmVzcyA9IHsgXHJcbiAgICAgICAgLi4udGhpcy5hZGRyZXNzLFxyXG4gICAgICAgIHJlY2VpdmVyTmFtZTogdXNlckRldGFpbHM/LmNvbnRhY3QubmFtZSA/PyBcIlwiLFxyXG4gICAgICAgIHJlY2VpdmVyRW1haWw6IHVzZXJEZXRhaWxzPy5jb250YWN0LmVtYWlsID8/IFwiXCIsXHJcbiAgICAgICAgcmVjZWl2ZXJQaG9uZTogdXNlckRldGFpbHM/LmNvbnRhY3QubW9iaWxlID8/IFwiXCJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLmFkZHJlc3NMaXN0ID0gdGhpcy5yZXNwb25zZURhdGE7XHJcbiAgfVxyXG5cclxuICBjaGVja0FkZHJlc3NUeXBlKGFkZHJlc3M6IHsga2V5OiBzdHJpbmcsIHN0YXR1czogYm9vbGVhbiB9KSB7XHJcbiAgICB0aGlzLmFkZGVzc1R5cGUuZm9yRWFjaCgoYWRkKT0+IGFkZC5zdGF0dXMgPSAoYWRkLmtleSA9PSBhZGRyZXNzLmtleSkpO1xyXG4gICAgdGhpcy5hZGRyZXNzLmFkZHJlc3NUeXBlID0gYWRkcmVzcy5rZXkgYXMgQUREUkVTU19UWVBFO1xyXG4gIH1cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMubWF0RGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIGdldEN1cnJlbnRMb2NhdGlvbigpIHtcclxuICAgIFxyXG4gICAgaWYgKG5hdmlnYXRvci5nZW9sb2NhdGlvbikge1xyXG4gICAgICBcclxuICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigodmFsdWVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sYXRpdHV0ZSA9IHZhbHVlcy5jb29yZHMubGF0aXR1ZGU7XHJcbiAgICAgICAgdGhpcy5sb25naXR1dGUgPSB2YWx1ZXMuY29vcmRzLmxvbmdpdHVkZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFkZHJlc3MoKSB7XHJcbiAgICB0aGlzLmdlb2NvZGVyLmdlb2NvZGUoeyBsb2NhdGlvbjogdGhpcy5tYXJrZXJQb3NpdGlvbiB9LCAocmVzdWx0czogYW55LCBzdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoc3RhdHVzID09PSAnT0snICYmIHJlc3VsdHNbMF0pIHtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgLy8gdGhpcy5hZGRyZXNzID0gcmVzdWx0c1swXS5mb3JtYXR0ZWRfYWRkcmVzcztcclxuICAgICAgICAgIHJlc3VsdHNbMF0uYWRkcmVzc19jb21wb25lbnRzLmZvckVhY2goKGNvbXBvbmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gY29tcG9uZW50LnR5cGVzO1xyXG4gICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoXCJsb2NhbGl0eVwiKSkge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuY2l0eSA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKFwiYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xXCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5zdGF0ZSA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKFwiY291bnRyeVwiKSkge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoXCJwb3N0YWxfY29kZVwiKSkge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuemlwID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBvbkxvY2F0aW9uU2VsZWN0ZWQobG9jYXRpb246IGFueSkge1xyXG4gICAgXHJcbiAgICB0aGlzLmxhdGl0dXRlID0gbG9jYXRpb24ubGF0aXR1ZGU7XHJcbiAgICB0aGlzLmxvbmdpdHV0ZSA9IGxvY2F0aW9uLmxvbmdpdHVkZTtcclxuICAgICAgLy8gdGhpcy5zZXRQb3NpdGlvbigpOyAgLy8gVXBkYXRlIG1hcCBwb3NpdGlvblxyXG4gICAgLy8gdGhpcy51cGRhdGVBZGRyZXNzRmllbGRzKCk7XHJcbiAgfVxyXG4gIG9uQXV0b2NvbXBsZXRlU2VsZWN0ZWQocmVzdWx0OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IG51bGw7XHJcbiAgICAvLyB0aGlzLnppcCA9IFwiXCI7XHJcbiAgICAvLyB0aGlzLnN0YXRlID0gXCJcIjtcclxuICAgIC8vIHRoaXMuY2l0eSA9IFwiXCI7XHJcbiAgICAvLyB0aGlzLmFkZHJlc3MgPSByZXN1bHQ/LmZvcm1hdHRlZF9hZGRyZXNzO1xyXG4gICAgcmVzdWx0Py5hZGRyZXNzX2NvbXBvbmVudHMuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChkYXRhPy50eXBlcy5pbmNsdWRlcyhcImNvdW50cnlcIikpe31cclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGRhdGEubG9uZ19uYW1lO1xyXG4gICAgICBlbHNlIGlmIChkYXRhPy50eXBlcy5pbmNsdWRlcyhcInBvc3RhbF9jb2RlXCIpKXt9XHJcbiAgICAgICAgLy8gdGhpcy56aXAgPSBkYXRhLmxvbmdfbmFtZTtcclxuICAgICAgZWxzZSBpZiAoZGF0YT8udHlwZXMuaW5jbHVkZXMoXCJhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzFcIikpe31cclxuICAgICAgICAvLyB0aGlzLnN0YXRlID0gZGF0YS5sb25nX25hbWU7XHJcbiAgICAgIGVsc2UgaWYgKGRhdGE/LnR5cGVzLmluY2x1ZGVzKFwibG9jYWxpdHlcIikpe31cclxuICAgICAgICAvLyB0aGlzLmNpdHkgPSBkYXRhLmxvbmdfbmFtZTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBhZGRyZXNzU2VsZWN0ZWQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3NJZHggPSBpbmRleDtcclxuICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmVtaXQoaW5kZXgpO1xyXG4gIH1cclxuICBnb1RvSG9tZSgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Byb2ZpbGUnXSlcclxuICB9XHJcbiAgdXBkYXRlQWRkcmVzcygpIHtcclxuICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpIGFzIFVzZXIpO1xyXG4gICAgaWYgKHVzZXJEZXRhaWxzKSB7XHJcblxyXG4gICAgICBjb25zdCBhZGRyZXNzTGlzdCA9IHVzZXJEZXRhaWxzPy5hZGRyZXNzRGV0YWlsc0xpc3Q7XHJcbiAgICAgIGlmICh0aGlzLm1hdERhdGE/LmVkaXRJbmRleCkge1xyXG4gICAgICAgIHRoaXMuYWRkcmVzc0xpc3QuZm9yRWFjaCgoYWRkcmVzczogYW55LCBpZHg6IG51bWJlcik9PiB7XHJcbiAgICAgICAgICBpZiAoaWR4ID09IHRoaXMubWF0RGF0YS5lZGl0SW5keCkge1xyXG4gICAgICAgICAgICBhZGRyZXNzID0gdGhpcy5hZGRyZXNzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWRkcmVzc0xpc3QucHVzaCh0aGlzLmFkZHJlc3MpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIFwidXNlcklkXCI6IHVzZXJEZXRhaWxzLnVzZXJJZCxcclxuICAgICAgICBcImJ1c2luZXNzSWRcIjogdXNlckRldGFpbHMuYnVzaW5lc3NJZCxcclxuICAgICAgICBcImFkZHJlc3NEZXRhaWxzTGlzdFwiOiBhZGRyZXNzTGlzdCxcclxuICAgICAgICBcImNvbnRhY3RcIjogdXNlckRldGFpbHM/LmNvbnRhY3QgPz8ge30sXHJcbiAgICAgICAgXCJnZW5kZXJcIjogdXNlckRldGFpbHM/LmdlbmRlcj8ubGVuZ3RoID4gMCA/IHVzZXJEZXRhaWxzPy5nZW5kZXIgIDogIG51bGxcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UuYWRkVXNlckFkZHJlc3MocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZSk9PiB7XHJcbiAgICAgICBcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmFkZE5ld0FkZHJlc3MgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh1c2VyRGV0YWlscykge1xyXG4gICAgICAgICAgICB1c2VyRGV0YWlscy5hZGRyZXNzRGV0YWlsc0xpc3QucHVzaCh0aGlzLmFkZHJlc3MgYXMgbmV2ZXIpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIodXNlckRldGFpbHMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9LCAoZXJyb3IpPT4ge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNDc1KSB7XHJcbiAgICAgICAgdGhpcy5tYXRCb3R0b21zaGVldC5vcGVuKEF1dGhlbnRpY2F0ZVVzZXJDb21wb25lbnQsIHtkYXRhOiB0aGlzLmRhdGF9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKEF1dGhlbnRpY2F0ZVVzZXJDb21wb25lbnQsIHtcclxuICAgICAgICAgIGhlaWdodDogJzUwdmgnLFxyXG4gICAgICAgICAgd2lkdGg6ICczNXZ3JyxcclxuICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHZhbGlkYXRlTW9iaWxlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoKCFpc05hTihOdW1iZXIoZXZlbnQua2V5KSkgfHwgZXZlbnQua2V5Q29kZSA9PSBLRVlCT0FSRF9LRVlTLkJBQ0tTUEFDRSB8fCBldmVudC5rZXlDb2RlID09IEtFWUJPQVJEX0tFWVMuVEFCKSAmJiBldmVudC5rZXlDb2RlICE9IEtFWUJPQVJEX0tFWVMuU1BBQ0UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcbiAgdmFsaWRhdGVOYW1lKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoKGV2ZW50LmtleUNvZGUgPj0gS0VZQk9BUkRfS0VZUy5DSEFSQUNURVJfQSAmJiBldmVudC5rZXlDb2RlIDw9IEtFWUJPQVJEX0tFWVMuQ0hBUkFDVEVSX1opIHx8IGV2ZW50LmtleUNvZGUgPT0gMTYgfHwgZXZlbnQua2V5Q29kZSA9PSA4IHx8IGV2ZW50LmtleUNvZGUgPT0gMzIgfHwgZXZlbnQua2V5Q29kZSA9PSA0NiB8fCBldmVudC5rZXlDb2RlID09IDkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcbiAgZWRpdFNlY3Rpb24oKXtcclxuICAgIFxyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoe2RhdGE6dGhpcy5kYXRhfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuICBnZXQgaXNFbWFpbFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkcmVzcz8ucmVjZWl2ZXJFbWFpbD8uaW5jbHVkZXMoXCJAXCIpICYmIHRoaXMuYWRkcmVzcz8ucmVjZWl2ZXJFbWFpbC5pbmNsdWRlcyhcIi5jb21cIikgfHwgKHRoaXMuYWRkcmVzcz8ucmVjZWl2ZXJFbWFpbD8ubGVuZ3RoID09IDApO1xyXG4gIH1cclxuICBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNDc1O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJhZGRyZXNzLXNlY1wiIChjbGljayk9XCJlZGl0U2VjdGlvbigpXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1hZGRyZXNzLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cImdvVG9Ib21lKClcIiAqbmdJZj1cIiFpc0NhcnRcIj5rZXlib2FyZF9hcnJvd19sZWZ0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPGgzPnt7aXNDYXJ0ID8gJ1NoaXBwaW5nIFRvJyA6ICdOZXcgQWRkcmVzcyd9fTwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYWRkcmVzc1wiICpuZ0lmPVwiIWFkZE5ld0FkZHJlc3NcIiAoY2xpY2spPVwiYWRkTmV3QWRkcmVzcyA9IHRydWVcIj4rIGFkZCBhZGRyZXNzPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWRkTmV3QWRkcmVzc1wiPlxyXG4gICAgICAgIDwhLS0gPHAgKGNsaWNrKT1cImdldEN1cnJlbnRMb2NhdGlvbigpXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5teV9sb2NhdGlvbjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuPlRha2UgbXkgY3VycmVudCBsb2NhdGlvbjwvc3Bhbj5cclxuICAgICAgICA8L3A+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtcyBkLWZsZXggZmxleC13cmFwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCByZXF1aXJlZFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+TmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBuYW1lXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnJlY2VpdmVyTmFtZVwiIChrZXlkb3duKT1cInZhbGlkYXRlTmFtZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPk1vYmlsZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBtb2JpbGVcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MucmVjZWl2ZXJQaG9uZVwiIChrZXlkb3duKT1cInZhbGlkYXRlTW9iaWxlKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCByZXF1aXJlZFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+RW1haWw8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1haWxcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MucmVjZWl2ZXJFbWFpbFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1mdWxsLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkFkZHJlc3M8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgYWRkcmVzc1wiIG1hdEdvb2dsZU1hcHNBdXRvY29tcGxldGVcclxuICAgICAgICAgICAgICAgICAgICAob25BdXRvY29tcGxldGVTZWxlY3RlZCk9XCJvbkF1dG9jb21wbGV0ZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkxvY2F0aW9uU2VsZWN0ZWQpPVwib25Mb2NhdGlvblNlbGVjdGVkKCRldmVudClcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MuYWRkcmVzc0xpbmUxXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkxvY2FsaXR5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGxvY2FsaXR5XCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLmxvY2FsaXR5TmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5MYW5kbWFyazwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBsYW5kbWFya1wiIFsobmdNb2RlbCldPVwiYWRkcmVzcy5sYW5kbWFya1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5QaW5jb2RlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHBpbmNvZGVcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MuemlwQ29kZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5DaXR5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGNpdHlcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MuY2l0eU5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCByZXF1aXJlZFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+U3RhdGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgc3RhdGVcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3Muc3RhdGVOYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkFkZHJlc3MgVHlwZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFkZHJlc3Mgb2YgYWRkZXNzVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZHJlc3MtdHlwZVwiIChjbGljayk9XCJjaGVja0FkZHJlc3NUeXBlKGFkZHJlc3MpXCIgW25nQ2xhc3NdPVwieydhY3RpdmUtYWRkcmVzcyc6IGFkZHJlc3Muc3RhdHVzfVwiPnt7YWRkcmVzcy5rZXl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImFkZHJlc3MtbGlzdFwiICpuZ0lmPVwiIWFkZE5ld0FkZHJlc3NcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhZGRyZXNzIG9mIGFkZHJlc3NMaXN0OyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3NcIiAoY2xpY2spPVwiYWRkcmVzc1NlbGVjdGVkKGlkeClcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLWFkZHJlc3MnOiBzZWxlY3RlZEFkZHJlc3NJZHggPT0gaWR4fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3MtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIG1yLTJcIj57e2FkZHJlc3M/LnJlY2VpdmVyTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZHJlc3MtdHlwZVwiPnt7YWRkcmVzcz8uYWRkcmVzc1R5cGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkcmVzcy1kZXRcIj57e2FkZHJlc3MuYWRkcmVzc0xpbmUxfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UGhvbmU6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZHJlc3MtcGhvbmVcIj57e2FkZHJlc3MucmVjZWl2ZXJQaG9uZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkcmVzcy1yaWdodFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdJZj1cImFkZE5ld0FkZHJlc3NcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFkZHJlc3MucmVjZWl2ZXJQaG9uZT8ubGVuZ3RoICE9IDEwICYmIGFkZHJlc3MucmVjZWl2ZXJQaG9uZT8ubGVuZ3RoXCI+Kk1vYmlsZSBudW1iZXIgaXMgaW52YWxpZDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNFbWFpbFZhbGlkXCI+KkVtYWlsIGlzIGludmFsaWQ8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICFhZGRyZXNzLnJlY2VpdmVyTmFtZSB8fCBcclxuICAgICAgICAgICAgIWFkZHJlc3MucmVjZWl2ZXJQaG9uZSB8fFxyXG4gICAgICAgICAgICBhZGRyZXNzLnJlY2VpdmVyUGhvbmU/Lmxlbmd0aCAhPSAxMCB8fFxyXG4gICAgICAgICAgICAhaXNFbWFpbFZhbGlkIHx8IFxyXG4gICAgICAgICAgICAhYWRkcmVzcy5hZGRyZXNzTGluZTEgfHwgXHJcbiAgICAgICAgICAgICFhZGRyZXNzLmxvY2FsaXR5TmFtZSB8fCBcclxuICAgICAgICAgICAgIWFkZHJlc3MuemlwQ29kZSB8fCBcclxuICAgICAgICAgICAgIWFkZHJlc3MuY2l0eU5hbWUgfHxcclxuICAgICAgICAgICAgIWFkZHJlc3Muc3RhdGVOYW1lIHx8IFxyXG4gICAgICAgICAgICAhYWRkcmVzcy5hZGRyZXNzVHlwZSB8fCBpc0xvYWRpbmdcclxuICAgICAgICAgICAgXCIgKGNsaWNrKT1cInVwZGF0ZUFkZHJlc3MoKVwiPnt7aXNMb2FkaW5nID8gJ0xvYWRpbmcnIDogJ1VwZGF0ZSd9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuXHJcblxyXG48ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbjwvZGl2PiJdfQ==
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9hZGRyZXNzL2FkZHJlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYWRkcmVzcy9hZGRyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtCLEtBQUssRUFBNEIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25JLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBS3JHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFNUUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDdEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFckcsT0FBTyxFQUFrQixvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7O0FBdUJ0RixNQUFNLE9BQU8sZ0JBQWlCLFNB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ZCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEosQ0FBQztJQUNELElBQUksUUFBUTtRQUNWLE9BQU8sTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUM7SUFDbEMsQ0FBQzs4R0E5UFUsZ0JBQWdCLGtOQW1CTCxlQUFlO2tHQW5CMUIsZ0JBQWdCLHVPQU5oQixFQUVWLHNFQ3JDSCxxOE1BMEdNLHFzRURoRkYsT0FBTywwSUFDUCxZQUFZLDZWQUNaLFdBQVcsK21CQUNYLGNBQWMsK0VBQ2QsZUFBZSw4QkFDZixvQkFBb0IsK0JBQ3BCLDJCQUEyQixxSEFDM0Isc0JBQXNCOzsyRkFRYixnQkFBZ0I7a0JBbkI1QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsMkJBQTJCO3dCQUMzQixzQkFBc0I7cUJBQ3ZCLGFBQ1UsRUFFVjs7MEJBdUJFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZTs7MEJBQ2xDLFFBQVE7eUNBbEJGLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU07Z0JBbUNFLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBOZ1pvbmUsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9wdGlvbmFsLCBJbmplY3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRlVXNlckNvbXBvbmVudCB9IGZyb20gJy4uL2F1dGhlbnRpY2F0ZS11c2VyL2F1dGhlbnRpY2F0ZS11c2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEFERFJFU1NfVFlQRSwgQWRkcmVzc0RldGFpbHMsIFVzZXIgfSBmcm9tICcuLi8uLi9zdHlsZXMvdXNlci5tb2RhbCc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEtFWUJPQVJEX0tFWVMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYnVzaW5lc3MuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXItbWF0ZXJpYWwtZXh0ZW5zaW9ucy9nb29nbGUtbWFwcy1hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBEZWxldGVIb3ZlckVsZW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2RlbGV0ZS1ob3Zlci1lbGVtZW50L2RlbGV0ZS1ob3Zlci1lbGVtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuLi9jYXJ0L2NhcnQubW9kYWwnO1xyXG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldCwgTWF0Qm90dG9tU2hlZXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ib3R0b20tc2hlZXQnO1xyXG5cclxuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWFkZHJlc3MnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0SWNvbixcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBNYXRCb3R0b21TaGVldE1vZHVsZSxcclxuICAgIERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCxcclxuICAgIEhvdmVyRWxlbWVudHNDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG5cclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGRyZXNzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWRkcmVzcy5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkcmVzc0NvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSByZXNwb25zZURhdGE6IGFueTtcclxuICBASW5wdXQoKSBkYXRhOiBhbnk7IFxyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgcHVibGljIGFkZHJlc3NMaXN0OiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZEFkZHJlc3NJZHg6IG51bWJlciA9IDA7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkQWRkcmVzczogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXRCb3R0b21zaGVldDogTWF0Qm90dG9tU2hlZXQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBtYXREYXRhOiBhbnksXHJcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgbWF0RGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkcmVzc0NvbXBvbmVudD5cclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkcmVzczogQWRkcmVzc0RldGFpbHMgPSB7XHJcbiAgICBcInJlY2VpdmVyTmFtZVwiOiBcIlwiLFxyXG4gICAgXCJyZWNlaXZlclBob25lXCI6IFwiXCIsXHJcbiAgICBcInJlY2VpdmVyRW1haWxcIjogXCJcIixcclxuICAgIFwiY291bnRyeU5hbWVcIjogXCJcIixcclxuICAgIFwic3RhdGVOYW1lXCI6IFwiXCIsXHJcbiAgICBcImNpdHlOYW1lXCI6IFwiXCIsXHJcbiAgICBcImxvY2FsaXR5TmFtZVwiOiBcIlwiLFxyXG4gICAgXCJhZGRyZXNzTGluZTFcIjogXCJcIixcclxuICAgIFwibGFuZG1hcmtcIjogXCJcIixcclxuICAgIFwiemlwQ29kZVwiOiBcIlwiLFxyXG4gICAgXCJzdGF0ZUNvZGVcIjogXCJcIixcclxuICAgIFwiYWRkcmVzc1R5cGVcIjogXCJIT01FXCIsXHJcbiAgICBcImdlb2xvY2F0aW9uXCI6IHtcclxuICAgICAgXCJsYXRpdHVkZVwiOiAwLFxyXG4gICAgICBcImxvbmdpdHVkZVwiOiAwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBpc0NhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBlZGl0SW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgbGF0aXR1dGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9uZ2l0dXRlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgYWRkTmV3QWRkcmVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbWFwQ2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0ge1xyXG4gICAgbGF0OiAwLFxyXG4gICAgbG5nOiAwXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1hcmtlclBvc2l0aW9uOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0ge1xyXG4gICAgbGF0OiAwLFxyXG4gICAgbG5nOiAwXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIG1hcmtlck9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnMgPSB7IGRyYWdnYWJsZTogdHJ1ZSB9O1xyXG5cclxuICBwcml2YXRlIGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XHJcblxyXG4gIHB1YmxpYyBhZGRlc3NUeXBlOiB7IGtleTogc3RyaW5nLCBzdGF0dXM6IGJvb2xlYW4gfVtdID0gW1xyXG4gICAgeyBrZXk6IFwiSE9NRVwiLCBzdGF0dXM6IGZhbHNlIH0sXHJcbiAgICB7IGtleTogXCJXT1JLXCIsIHN0YXR1czogZmFsc2UgfSxcclxuICAgIHsga2V5OiBcIk9USEVSXCIsIHN0YXR1czogZmFsc2UgfVxyXG4gIF07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oKTtcclxuICAgIFxyXG4gICAgdGhpcy5hZGROZXdBZGRyZXNzID0gdGhpcy5yZXNwb25zZURhdGE/Lmxlbmd0aCA9PSAwO1xyXG4gICAgaWYgKHRoaXMubWF0RGF0YSkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IHRoaXMubWF0RGF0YS5hZGRyZXNzTGlzdDtcclxuICAgICAgdGhpcy5kYXRhID0gdGhpcy5tYXREYXRhPy5kYXRhO1xyXG4gICAgICBpZiAodGhpcy5tYXREYXRhPy5hZGRyZXNzKSB7XHJcbiAgICAgICAgdGhpcy5hZGRyZXNzID0gey4uLnRoaXMubWF0RGF0YS5hZGRyZXNzfTtcclxuICAgICAgICB0aGlzLmVkaXRJbmRleCA9IHRoaXMubWF0RGF0YT8uZWRpdEluZGV4ID8/IC0xO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWRkTmV3QWRkcmVzcyA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZHJlc3NMaXN0ID0gdGhpcy5yZXNwb25zZURhdGE7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZGROZXdBZGRyZXNzICYmICF0aGlzLm1hdERhdGEpIHtcclxuICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKTtcclxuICAgICAgdGhpcy5hZGRyZXNzID0geyBcclxuICAgICAgICAuLi50aGlzLmFkZHJlc3MsXHJcbiAgICAgICAgcmVjZWl2ZXJOYW1lOiB1c2VyRGV0YWlscz8uY29udGFjdC5uYW1lID8/IFwiXCIsXHJcbiAgICAgICAgcmVjZWl2ZXJFbWFpbDogdXNlckRldGFpbHM/LmNvbnRhY3QuZW1haWwgPz8gXCJcIixcclxuICAgICAgICByZWNlaXZlclBob25lOiB1c2VyRGV0YWlscz8uY29udGFjdC5tb2JpbGUgPz8gXCJcIlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuYWRkcmVzc0xpc3QgPSB0aGlzLnJlc3BvbnNlRGF0YTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWRkcmVzc1R5cGUoYWRkcmVzczogeyBrZXk6IHN0cmluZywgc3RhdHVzOiBib29sZWFuIH0pIHtcclxuICAgIHRoaXMuYWRkZXNzVHlwZS5mb3JFYWNoKChhZGQpPT4gYWRkLnN0YXR1cyA9IChhZGQua2V5ID09IGFkZHJlc3Mua2V5KSk7XHJcbiAgICB0aGlzLmFkZHJlc3MuYWRkcmVzc1R5cGUgPSBhZGRyZXNzLmtleSBhcyBBRERSRVNTX1RZUEU7XHJcbiAgfVxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5tYXREaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgZ2V0Q3VycmVudExvY2F0aW9uKCkge1xyXG4gICAgXHJcbiAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgIFxyXG4gICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCh2YWx1ZXMpID0+IHtcclxuICAgICAgICB0aGlzLmxhdGl0dXRlID0gdmFsdWVzLmNvb3Jkcy5sYXRpdHVkZTtcclxuICAgICAgICB0aGlzLmxvbmdpdHV0ZSA9IHZhbHVlcy5jb29yZHMubG9uZ2l0dWRlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0QWRkcmVzcygpIHtcclxuICAgIHRoaXMuZ2VvY29kZXIuZ2VvY29kZSh7IGxvY2F0aW9uOiB0aGlzLm1hcmtlclBvc2l0aW9uIH0sIChyZXN1bHRzOiBhbnksIHN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0c1swXSkge1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAvLyB0aGlzLmFkZHJlc3MgPSByZXN1bHRzWzBdLmZvcm1hdHRlZF9hZGRyZXNzO1xyXG4gICAgICAgICAgcmVzdWx0c1swXS5hZGRyZXNzX2NvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBjb21wb25lbnQudHlwZXM7XHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhcImxvY2FsaXR5XCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5jaXR5ID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoXCJhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzFcIikpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnN0YXRlID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoXCJjb3VudHJ5XCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZENvdW50cnkgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhcInBvc3RhbF9jb2RlXCIpKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy56aXAgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG9uTG9jYXRpb25TZWxlY3RlZChsb2NhdGlvbjogYW55KSB7XHJcbiAgICBcclxuICAgIHRoaXMubGF0aXR1dGUgPSBsb2NhdGlvbi5sYXRpdHVkZTtcclxuICAgIHRoaXMubG9uZ2l0dXRlID0gbG9jYXRpb24ubG9uZ2l0dWRlO1xyXG4gICAgICAvLyB0aGlzLnNldFBvc2l0aW9uKCk7ICAvLyBVcGRhdGUgbWFwIHBvc2l0aW9uXHJcbiAgICAvLyB0aGlzLnVwZGF0ZUFkZHJlc3NGaWVsZHMoKTtcclxuICB9XHJcbiAgb25BdXRvY29tcGxldGVTZWxlY3RlZChyZXN1bHQ6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbnVsbDtcclxuICAgIC8vIHRoaXMuemlwID0gXCJcIjtcclxuICAgIC8vIHRoaXMuc3RhdGUgPSBcIlwiO1xyXG4gICAgLy8gdGhpcy5jaXR5ID0gXCJcIjtcclxuICAgIC8vIHRoaXMuYWRkcmVzcyA9IHJlc3VsdD8uZm9ybWF0dGVkX2FkZHJlc3M7XHJcbiAgICByZXN1bHQ/LmFkZHJlc3NfY29tcG9uZW50cy5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGRhdGE/LnR5cGVzLmluY2x1ZGVzKFwiY291bnRyeVwiKSl7fVxyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gZGF0YS5sb25nX25hbWU7XHJcbiAgICAgIGVsc2UgaWYgKGRhdGE/LnR5cGVzLmluY2x1ZGVzKFwicG9zdGFsX2NvZGVcIikpe31cclxuICAgICAgICAvLyB0aGlzLnppcCA9IGRhdGEubG9uZ19uYW1lO1xyXG4gICAgICBlbHNlIGlmIChkYXRhPy50eXBlcy5pbmNsdWRlcyhcImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMVwiKSl7fVxyXG4gICAgICAgIC8vIHRoaXMuc3RhdGUgPSBkYXRhLmxvbmdfbmFtZTtcclxuICAgICAgZWxzZSBpZiAoZGF0YT8udHlwZXMuaW5jbHVkZXMoXCJsb2NhbGl0eVwiKSl7fVxyXG4gICAgICAgIC8vIHRoaXMuY2l0eSA9IGRhdGEubG9uZ19uYW1lO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGFkZHJlc3NTZWxlY3RlZChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQWRkcmVzc0lkeCA9IGluZGV4O1xyXG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuZW1pdChpbmRleCk7XHJcbiAgfVxyXG4gIGdvVG9Qcm9maWxlKCkge1xyXG4gICAgaWYgKHRoaXMubWF0RGF0YSkge1xyXG4gICAgICB0aGlzLm1hdERpYWxvZ1JlZj8uY2xvc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Byb2ZpbGUnXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVwZGF0ZUFkZHJlc3MoKSB7XHJcbiAgICBjb25zdCB1c2VyRGV0YWlscyA9ICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKSBhcyBVc2VyKTtcclxuICAgIGlmICh1c2VyRGV0YWlscykge1xyXG5cclxuICAgICAgY29uc3QgYWRkcmVzc0xpc3QgPSB1c2VyRGV0YWlscz8uYWRkcmVzc0RldGFpbHNMaXN0O1xyXG4gICAgICBpZiAodGhpcy5tYXREYXRhPy5lZGl0SW5kZXgpIHtcclxuICAgICAgICB0aGlzLmFkZHJlc3NMaXN0LmZvckVhY2goKGFkZHJlc3M6IGFueSwgaWR4OiBudW1iZXIpPT4ge1xyXG4gICAgICAgICAgaWYgKGlkeCA9PSB0aGlzLm1hdERhdGEuZWRpdEluZHgpIHtcclxuICAgICAgICAgICAgYWRkcmVzcyA9IHRoaXMuYWRkcmVzcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFkZHJlc3NMaXN0LnB1c2godGhpcy5hZGRyZXNzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBcInVzZXJJZFwiOiB1c2VyRGV0YWlscy51c2VySWQsXHJcbiAgICAgICAgXCJidXNpbmVzc0lkXCI6IHVzZXJEZXRhaWxzLmJ1c2luZXNzSWQsXHJcbiAgICAgICAgXCJhZGRyZXNzRGV0YWlsc0xpc3RcIjogYWRkcmVzc0xpc3QsXHJcbiAgICAgICAgXCJjb250YWN0XCI6IHVzZXJEZXRhaWxzPy5jb250YWN0ID8/IHt9LFxyXG4gICAgICAgIFwiZ2VuZGVyXCI6IHVzZXJEZXRhaWxzPy5nZW5kZXI/Lmxlbmd0aCA+IDAgPyB1c2VyRGV0YWlscz8uZ2VuZGVyICA6ICBudWxsXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmFkZFVzZXJBZGRyZXNzKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2UpPT4ge1xyXG4gICAgICAgXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hZGROZXdBZGRyZXNzID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodXNlckRldGFpbHMpIHtcclxuICAgICAgICAgICAgdXNlckRldGFpbHMuYWRkcmVzc0RldGFpbHNMaXN0LnB1c2godGhpcy5hZGRyZXNzIGFzIG5ldmVyKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHVzZXJEZXRhaWxzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSwgKGVycm9yKT0+IHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSkge1xyXG4gICAgICAgIHRoaXMubWF0Qm90dG9tc2hlZXQub3BlbihBdXRoZW50aWNhdGVVc2VyQ29tcG9uZW50LCB7ZGF0YTogdGhpcy5kYXRhfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tYXREaWFsb2cub3BlbihBdXRoZW50aWNhdGVVc2VyQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICBoZWlnaHQ6ICc1MHZoJyxcclxuICAgICAgICAgIHdpZHRoOiAnMzV2dycsXHJcbiAgICAgICAgICBkYXRhOiB0aGlzLmRhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICB2YWxpZGF0ZU1vYmlsZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKCghaXNOYU4oTnVtYmVyKGV2ZW50LmtleSkpIHx8IGV2ZW50LmtleUNvZGUgPT0gS0VZQk9BUkRfS0VZUy5CQUNLU1BBQ0UgfHwgZXZlbnQua2V5Q29kZSA9PSBLRVlCT0FSRF9LRVlTLlRBQikgJiYgZXZlbnQua2V5Q29kZSAhPSBLRVlCT0FSRF9LRVlTLlNQQUNFKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG4gIHZhbGlkYXRlTmFtZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKChldmVudC5rZXlDb2RlID49IEtFWUJPQVJEX0tFWVMuQ0hBUkFDVEVSX0EgJiYgZXZlbnQua2V5Q29kZSA8PSBLRVlCT0FSRF9LRVlTLkNIQVJBQ1RFUl9aKSB8fCBldmVudC5rZXlDb2RlID09IDE2IHx8IGV2ZW50LmtleUNvZGUgPT0gOCB8fCBldmVudC5rZXlDb2RlID09IDMyIHx8IGV2ZW50LmtleUNvZGUgPT0gNDYgfHwgZXZlbnQua2V5Q29kZSA9PSA5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG4gIGVkaXRTZWN0aW9uKCl7XHJcbiAgICBcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5lZGl0U2VjdGlvbi5lbWl0KHtkYXRhOnRoaXMuZGF0YX0pO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcbiAgZ2V0IGlzRW1haWxWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFkZHJlc3M/LnJlY2VpdmVyRW1haWw/LmluY2x1ZGVzKFwiQFwiKSAmJiB0aGlzLmFkZHJlc3M/LnJlY2VpdmVyRW1haWwuaW5jbHVkZXMoXCIuY29tXCIpIHx8ICh0aGlzLmFkZHJlc3M/LnJlY2VpdmVyRW1haWw/Lmxlbmd0aCA9PSAwKTtcclxuICB9XHJcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiYWRkcmVzcy1zZWNcIiAoY2xpY2spPVwiZWRpdFNlY3Rpb24oKVwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZXctYWRkcmVzcy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJnb1RvUHJvZmlsZSgpXCIgKm5nSWY9XCIhaXNDYXJ0XCI+a2V5Ym9hcmRfYXJyb3dfbGVmdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxoMz57e2lzQ2FydCA/ICdTaGlwcGluZyBUbycgOiAnTmV3IEFkZHJlc3MnfX08L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWFkZHJlc3NcIiAqbmdJZj1cIiFhZGROZXdBZGRyZXNzXCIgKGNsaWNrKT1cImFkZE5ld0FkZHJlc3MgPSB0cnVlXCI+KyBhZGQgYWRkcmVzczwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFkZE5ld0FkZHJlc3NcIj5cclxuICAgICAgICA8IS0tIDxwIChjbGljayk9XCJnZXRDdXJyZW50TG9jYXRpb24oKVwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bXlfbG9jYXRpb248L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj5UYWtlIG15IGN1cnJlbnQgbG9jYXRpb248L3NwYW4+XHJcbiAgICAgICAgPC9wPiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybXMgZC1mbGV4IGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPk5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbmFtZVwiIFsobmdNb2RlbCldPVwiYWRkcmVzcy5yZWNlaXZlck5hbWVcIiAoa2V5ZG93bik9XCJ2YWxpZGF0ZU5hbWUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5Nb2JpbGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbW9iaWxlXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnJlY2VpdmVyUGhvbmVcIiAoa2V5ZG93bik9XCJ2YWxpZGF0ZU1vYmlsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkVtYWlsPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGVtYWlsXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnJlY2VpdmVyRW1haWxcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZnVsbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5BZGRyZXNzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGFkZHJlc3NcIiBtYXRHb29nbGVNYXBzQXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uQXV0b2NvbXBsZXRlU2VsZWN0ZWQpPVwib25BdXRvY29tcGxldGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAob25Mb2NhdGlvblNlbGVjdGVkKT1cIm9uTG9jYXRpb25TZWxlY3RlZCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLmFkZHJlc3NMaW5lMVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5Mb2NhbGl0eTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBsb2NhbGl0eVwiIFsobmdNb2RlbCldPVwiYWRkcmVzcy5sb2NhbGl0eU5hbWVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+TGFuZG1hcms8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGFuZG1hcmtcIiBbKG5nTW9kZWwpXT1cImFkZHJlc3MubGFuZG1hcmtcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCByZXF1aXJlZFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+UGluY29kZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBwaW5jb2RlXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnppcENvZGVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCByZXF1aXJlZFwiIFtzdHlsZS5jb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+Q2l0eTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBjaXR5XCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLmNpdHlOYW1lXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgcmVxdWlyZWRcIiBbc3R5bGUuY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPlN0YXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHN0YXRlXCIgWyhuZ01vZGVsKV09XCJhZGRyZXNzLnN0YXRlTmFtZVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIHJlcXVpcmVkXCIgW3N0eWxlLmNvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj5BZGRyZXNzIFR5cGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhZGRyZXNzIG9mIGFkZGVzc1R5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRyZXNzLXR5cGVcIiAoY2xpY2spPVwiY2hlY2tBZGRyZXNzVHlwZShhZGRyZXNzKVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlLWFkZHJlc3MnOiBhZGRyZXNzLnN0YXR1c31cIj57e2FkZHJlc3Mua2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLWxpc3RcIiAqbmdJZj1cIiFhZGROZXdBZGRyZXNzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWRkcmVzcyBvZiBhZGRyZXNzTGlzdDsgbGV0IGlkeCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzXCIgKGNsaWNrKT1cImFkZHJlc3NTZWxlY3RlZChpZHgpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1hZGRyZXNzJzogc2VsZWN0ZWRBZGRyZXNzSWR4ID09IGlkeH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBtci0yXCI+e3thZGRyZXNzPy5yZWNlaXZlck5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRyZXNzLXR5cGVcIj57e2FkZHJlc3M/LmFkZHJlc3NUeXBlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3MtZGV0XCI+e3thZGRyZXNzLmFkZHJlc3NMaW5lMX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlBob25lOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRyZXNzLXBob25lXCI+e3thZGRyZXNzLnJlY2VpdmVyUGhvbmV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3MtcmlnaHRcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nSWY9XCJhZGROZXdBZGRyZXNzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhZGRyZXNzLnJlY2VpdmVyUGhvbmU/Lmxlbmd0aCAhPSAxMCAmJiBhZGRyZXNzLnJlY2VpdmVyUGhvbmU/Lmxlbmd0aFwiPipNb2JpbGUgbnVtYmVyIGlzIGludmFsaWQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzRW1haWxWYWxpZFwiPipFbWFpbCBpcyBpbnZhbGlkPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAhYWRkcmVzcy5yZWNlaXZlck5hbWUgfHwgXHJcbiAgICAgICAgICAgICFhZGRyZXNzLnJlY2VpdmVyUGhvbmUgfHxcclxuICAgICAgICAgICAgYWRkcmVzcy5yZWNlaXZlclBob25lPy5sZW5ndGggIT0gMTAgfHxcclxuICAgICAgICAgICAgIWlzRW1haWxWYWxpZCB8fCBcclxuICAgICAgICAgICAgIWFkZHJlc3MuYWRkcmVzc0xpbmUxIHx8IFxyXG4gICAgICAgICAgICAhYWRkcmVzcy5sb2NhbGl0eU5hbWUgfHwgXHJcbiAgICAgICAgICAgICFhZGRyZXNzLnppcENvZGUgfHwgXHJcbiAgICAgICAgICAgICFhZGRyZXNzLmNpdHlOYW1lIHx8XHJcbiAgICAgICAgICAgICFhZGRyZXNzLnN0YXRlTmFtZSB8fCBcclxuICAgICAgICAgICAgIWFkZHJlc3MuYWRkcmVzc1R5cGUgfHwgaXNMb2FkaW5nXHJcbiAgICAgICAgICAgIFwiIChjbGljayk9XCJ1cGRhdGVBZGRyZXNzKClcIj57e2lzTG9hZGluZyA/ICdMb2FkaW5nJyA6ICdVcGRhdGUnfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG5cclxuPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG48L2Rpdj4iXX0=