simpo-component-library 3.6.744 → 3.6.746

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +8 -4
  2. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
  3. package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +5 -3
  4. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +12 -5
  5. package/fesm2022/simpo-component-library.mjs +17 -8
  6. package/fesm2022/simpo-component-library.mjs.map +1 -1
  7. package/lib/components/input-fields/input-fields.component.d.ts +1 -1
  8. package/lib/directive/background-directive.d.ts +1 -1
  9. package/lib/directive/button-directive.directive.d.ts +1 -1
  10. package/lib/directive/color.directive.d.ts +1 -1
  11. package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +1 -1
  12. package/lib/ecommerce/sections/featured-category/featured-category.component.d.ts +1 -1
  13. package/lib/ecommerce/sections/featured-category/featured-collection.component.d.ts +1 -1
  14. package/lib/ecommerce/sections/new-collection/new-collection.component.d.ts +2 -2
  15. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +2 -2
  16. package/lib/ecommerce/sections/product-list/product-list.component.d.ts +1 -1
  17. package/lib/ecommerce/sections/store-list/store-list.component.d.ts +1 -1
  18. package/lib/ecommerce/sections/store-page/store-page.component.d.ts +1 -1
  19. package/lib/ecommerce/sections/user-profile/user-profile.component.d.ts +3 -1
  20. package/lib/elements/link-editor/link-editor.component.d.ts +1 -1
  21. package/lib/elements/pricing-s1/pricing-s1.component.d.ts +1 -1
  22. package/lib/sections/banner-carousel/banner-carousel.component.d.ts +2 -2
  23. package/lib/sections/banner-grid-section/banner-grid-section.component.d.ts +1 -1
  24. package/lib/sections/carousel-banner/carousel-banner.component.d.ts +1 -1
  25. package/lib/sections/contact-us/contact-us.component.d.ts +1 -1
  26. package/lib/sections/header-section/header-section.component.d.ts +1 -1
  27. package/lib/sections/image-grid-hotspot/image-grid-hotspot.component.d.ts +1 -1
  28. package/lib/sections/image-grid-section/image-grid-section.component.d.ts +1 -1
  29. package/lib/sections/image-section/image-section.component.d.ts +2 -2
  30. package/lib/sections/logo-showcase/logo-showcase.component.d.ts +2 -2
  31. package/lib/sections/moving-text/moving-text.component.d.ts +1 -1
  32. package/lib/sections/pricing-section/pricing-section.component.d.ts +2 -2
  33. package/package.json +1 -1
  34. package/simpo-component-library-3.6.746.tgz +0 -0
  35. package/simpo-component-library-3.6.744.tgz +0 -0
@@ -16,6 +16,8 @@ import { SpacingHorizontalDirective } from '../../../directive/spacing-horizonta
16
16
  import { CardSkeletonLoaderComponent } from '../../../elements/card-skeleton-loader/card-skeleton-loader.component';
17
17
  import { SvgDividerComponent } from '../../../elements/svg-divider/svg-divider.component';
18
18
  import { TextEditorComponent } from '../../../elements/text-editor/text-editor.component';
19
+ import { OverlayDirective } from '../../../directive/overlay-directive';
20
+ import { BorderDirective } from '../../../directive/border-directive';
19
21
  import * as i0 from "@angular/core";
20
22
  import * as i1 from "../../../services/rest.service";
21
23
  import * as i2 from "../../../services/cart.service";
@@ -180,7 +182,7 @@ export class CategoryProductComponent extends BaseSection {
180
182
  return { ...this.styles?.layout };
181
183
  }
182
184
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CategoryProductComponent, deps: [{ token: i1.RestService }, { token: i2.CartService }, { token: i3.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
183
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CategoryProductComponent, isStandalone: true, selector: "simpo-category-product", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass", nextComponentColor: "nextComponentColor" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<section class=\"total-container\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\">\r\n <section class=\"container-fluid d-block\" [id]=\"data?.id\"\r\n [simpoBackground]=\"styles?.background\" [simpoLayout]=\"styles?.layout\" [spacingHorizontal]=\"getSpacingLayout\">\r\n <div *ngFor=\"let item of data?.content?.inputText\">\r\n <!-- <div [innerHTML]=\"item.value | sanitizeHtml\"\r\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div> -->\r\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <section class=\"m-auto position-relative w-100\" [ngClass]=\"{'adjustPosition': isMobile}\">\r\n <section class=\"d-flex\">\r\n <ng-container *ngFor=\"let category of categoryList; let idx = index\">\r\n <div class=\"d-flex flex-column align-items-center category-tag position-relative\" style=\"gap: 5px;\"\r\n [style.backgroundColor]=\"selectCategoryId === category.categoryId ? getSupportingColor(styles?.background?.accentColor ?? '#000000') : ''\"\r\n [style.borderColor]=\"selectCategoryId == category.categoryId ? styles?.background?.accentColor : ''\"\r\n (click)=\"selectCategory(category.categoryId)\">\r\n <img [src]=\"category.imgUrl[0]\" alt=\"\" height=\"30px\" width=\"30px\" style=\"border-radius: 50%;\">\r\n <span class=\"trim-text\" style=\"font-size: .8125rem; text-align: center !important;\"\r\n [style.color]=\"selectCategoryId === category.categoryId ? (styles?.background?.accentColor) : ''\">{{\r\n category.categoryName | titlecase }}</span>\r\n </div>\r\n </ng-container>\r\n </section>\r\n <ng-container *ngIf=\"!isMobile\">\r\n <div class=\"left-arrow\" (click)=\"scrollLeft()\" *ngIf=\"showLeftArrow && categoryList?.length\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n <div class=\"right-arrow\" (click)=\"scrollRight()\" *ngIf=\"showRightArrow && categoryList?.length\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </div>\r\n </ng-container>\r\n <section class=\"product-list position-relative\" [style.borderTopLeftRadius.px]='(selectCategoryId === categoryList?.[0]?.categoryId) ? 0 : 8' #container *ngIf=\"dataList.length\"\r\n [style.backgroundColor]=\"styles?.background?.accentColor\">\r\n <section class=\"d-flex overflow-scroll\" id=\"productScrollBar\" *ngIf=\"!apiLoading\">\r\n <ng-container *ngFor=\"let product of dataList\">\r\n <simpo-small-product-listing [product]=\"product\" [data]=\"data\" [isScrollable]=\"true\"></simpo-small-product-listing>\r\n </ng-container>\r\n </section>\r\n <simpo-card-skeleton-loader *ngIf=\"apiLoading\"></simpo-card-skeleton-loader>\r\n </section>\r\n </section>\r\n </section>\r\n \r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\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>\r\n</section>\r\n<ng-template #loadingTemplate>\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n</ng-template>\r\n", styles: [".total-container{height:auto;position:relative}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.d-block{display:block!important}.category-tag{padding:15px 10px;height:105px;width:80px;border-top-left-radius:10px;border-top-right-radius:10px;cursor:pointer;border-top:8px solid transparent}.product-list{padding:40px 20px;border-radius:8px}.adjustPosition{position:relative!important;left:-15px!important;width:108%!important}.overflow-scroll{overflow-x:auto}div[class*=arrow]{background-color:#fff;color:#000;padding:5px;border-radius:50%;position:absolute;top:50%;display:flex;align-items:center;justify-content:center;z-index:100;cursor:pointer;box-shadow:#63636333 0 2px 8px}.left-arrow{left:10px}.right-arrow{right:10px}#productScrollBar{scroll-behavior:smooth}@media screen and (max-width: 475px){.padding-1{padding-left:1rem;padding-right:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SmallProductListingComponent, selector: "simpo-small-product-listing", inputs: ["product", "data", "isScrollable", "isCategoryProductList", "customClass", "index"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i5.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i6.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: i7.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "component", type: CardSkeletonLoaderComponent, selector: "simpo-card-skeleton-loader", inputs: ["count", "showTitles"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "sectionId", "label", "type"], outputs: ["valueChange"] }] }); }
185
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CategoryProductComponent, isStandalone: true, selector: "simpo-category-product", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass", nextComponentColor: "nextComponentColor" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<section class=\"total-container\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\"\r\n [simpoBackground]=\"styles?.background\" [simpoBorder]=\"styles?.border\">\r\n <section class=\"container-fluid d-block\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\"\r\n [spacingHorizontal]=\"getSpacingLayout\" [simpoOverlay]=\"styles?.background\">\r\n <div *ngFor=\"let item of data?.content?.inputText\">\r\n <!-- <div [innerHTML]=\"item.value | sanitizeHtml\"\r\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div> -->\r\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <section class=\"m-auto position-relative w-100\" [ngClass]=\"{'adjustPosition': isMobile}\">\r\n <section class=\"d-flex\">\r\n <ng-container *ngFor=\"let category of categoryList; let idx = index\">\r\n <div class=\"d-flex flex-column align-items-center category-tag position-relative\" style=\"gap: 5px;\"\r\n [style.backgroundColor]=\"selectCategoryId === category.categoryId ? getSupportingColor(styles?.background?.accentColor ?? '#000000') : ''\"\r\n [style.borderColor]=\"selectCategoryId == category.categoryId ? styles?.background?.accentColor : ''\"\r\n (click)=\"selectCategory(category.categoryId)\">\r\n <img [src]=\"category.imgUrl[0]\" alt=\"\" height=\"30px\" width=\"30px\" style=\"border-radius: 50%;\">\r\n <span class=\"trim-text\" style=\"font-size: .8125rem; text-align: center !important;\"\r\n [style.color]=\"selectCategoryId === category.categoryId ? (styles?.background?.accentColor) : ''\">{{\r\n category.categoryName | titlecase }}</span>\r\n </div>\r\n </ng-container>\r\n </section>\r\n <ng-container *ngIf=\"!isMobile\">\r\n <div class=\"left-arrow\" (click)=\"scrollLeft()\" *ngIf=\"showLeftArrow && categoryList?.length\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n <div class=\"right-arrow\" (click)=\"scrollRight()\" *ngIf=\"showRightArrow && categoryList?.length\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </div>\r\n </ng-container>\r\n <section class=\"product-list position-relative\"\r\n [style.borderTopLeftRadius.px]='(selectCategoryId === categoryList?.[0]?.categoryId) ? 0 : 8' #container\r\n *ngIf=\"dataList.length\" [style.backgroundColor]=\"styles?.background?.accentColor\">\r\n <section class=\"d-flex overflow-scroll\" id=\"productScrollBar\" *ngIf=\"!apiLoading\">\r\n <ng-container *ngFor=\"let product of dataList\">\r\n <simpo-small-product-listing [product]=\"product\" [data]=\"data\"\r\n [isScrollable]=\"true\"></simpo-small-product-listing>\r\n </ng-container>\r\n </section>\r\n <simpo-card-skeleton-loader *ngIf=\"apiLoading\"></simpo-card-skeleton-loader>\r\n </section>\r\n </section>\r\n </section>\r\n\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\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>\r\n</section>\r\n<ng-template #loadingTemplate>\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n</ng-template>", styles: [".total-container{height:auto;position:relative}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.d-block{display:block!important}.category-tag{padding:1rem .3rem;height:105px;width:fit-content;border-top-left-radius:10px;border-top-right-radius:10px;cursor:pointer;border-top:8px solid transparent}.product-list{padding:40px 20px;border-radius:8px}.adjustPosition{position:relative!important;left:-15px!important;width:108%!important}.overflow-scroll{overflow-x:auto}div[class*=arrow]{background-color:#fff;color:#000;padding:5px;border-radius:50%;position:absolute;top:50%;display:flex;align-items:center;justify-content:center;z-index:100;cursor:pointer;box-shadow:#63636333 0 2px 8px}.left-arrow{left:10px}.right-arrow{right:10px}#productScrollBar{scroll-behavior:smooth}@media screen and (max-width: 475px){.padding-1{padding-left:1rem;padding-right:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SmallProductListingComponent, selector: "simpo-small-product-listing", inputs: ["product", "data", "isScrollable", "isCategoryProductList", "customClass", "index"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i5.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i6.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: i7.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "component", type: CardSkeletonLoaderComponent, selector: "simpo-card-skeleton-loader", inputs: ["count", "showTitles"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "sectionId", "label", "type"], outputs: ["valueChange"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }] }); }
184
186
  }
185
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CategoryProductComponent, decorators: [{
186
188
  type: Component,
@@ -196,8 +198,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
196
198
  SimpoComponentModule,
197
199
  SanitizeHtmlPipe,
198
200
  SpacingHorizontalDirective,
199
- CardSkeletonLoaderComponent, SvgDividerComponent, TextEditorComponent
200
- ], template: "<section class=\"total-container\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\">\r\n <section class=\"container-fluid d-block\" [id]=\"data?.id\"\r\n [simpoBackground]=\"styles?.background\" [simpoLayout]=\"styles?.layout\" [spacingHorizontal]=\"getSpacingLayout\">\r\n <div *ngFor=\"let item of data?.content?.inputText\">\r\n <!-- <div [innerHTML]=\"item.value | sanitizeHtml\"\r\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div> -->\r\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <section class=\"m-auto position-relative w-100\" [ngClass]=\"{'adjustPosition': isMobile}\">\r\n <section class=\"d-flex\">\r\n <ng-container *ngFor=\"let category of categoryList; let idx = index\">\r\n <div class=\"d-flex flex-column align-items-center category-tag position-relative\" style=\"gap: 5px;\"\r\n [style.backgroundColor]=\"selectCategoryId === category.categoryId ? getSupportingColor(styles?.background?.accentColor ?? '#000000') : ''\"\r\n [style.borderColor]=\"selectCategoryId == category.categoryId ? styles?.background?.accentColor : ''\"\r\n (click)=\"selectCategory(category.categoryId)\">\r\n <img [src]=\"category.imgUrl[0]\" alt=\"\" height=\"30px\" width=\"30px\" style=\"border-radius: 50%;\">\r\n <span class=\"trim-text\" style=\"font-size: .8125rem; text-align: center !important;\"\r\n [style.color]=\"selectCategoryId === category.categoryId ? (styles?.background?.accentColor) : ''\">{{\r\n category.categoryName | titlecase }}</span>\r\n </div>\r\n </ng-container>\r\n </section>\r\n <ng-container *ngIf=\"!isMobile\">\r\n <div class=\"left-arrow\" (click)=\"scrollLeft()\" *ngIf=\"showLeftArrow && categoryList?.length\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n <div class=\"right-arrow\" (click)=\"scrollRight()\" *ngIf=\"showRightArrow && categoryList?.length\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </div>\r\n </ng-container>\r\n <section class=\"product-list position-relative\" [style.borderTopLeftRadius.px]='(selectCategoryId === categoryList?.[0]?.categoryId) ? 0 : 8' #container *ngIf=\"dataList.length\"\r\n [style.backgroundColor]=\"styles?.background?.accentColor\">\r\n <section class=\"d-flex overflow-scroll\" id=\"productScrollBar\" *ngIf=\"!apiLoading\">\r\n <ng-container *ngFor=\"let product of dataList\">\r\n <simpo-small-product-listing [product]=\"product\" [data]=\"data\" [isScrollable]=\"true\"></simpo-small-product-listing>\r\n </ng-container>\r\n </section>\r\n <simpo-card-skeleton-loader *ngIf=\"apiLoading\"></simpo-card-skeleton-loader>\r\n </section>\r\n </section>\r\n </section>\r\n \r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\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>\r\n</section>\r\n<ng-template #loadingTemplate>\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n</ng-template>\r\n", styles: [".total-container{height:auto;position:relative}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.d-block{display:block!important}.category-tag{padding:15px 10px;height:105px;width:80px;border-top-left-radius:10px;border-top-right-radius:10px;cursor:pointer;border-top:8px solid transparent}.product-list{padding:40px 20px;border-radius:8px}.adjustPosition{position:relative!important;left:-15px!important;width:108%!important}.overflow-scroll{overflow-x:auto}div[class*=arrow]{background-color:#fff;color:#000;padding:5px;border-radius:50%;position:absolute;top:50%;display:flex;align-items:center;justify-content:center;z-index:100;cursor:pointer;box-shadow:#63636333 0 2px 8px}.left-arrow{left:10px}.right-arrow{right:10px}#productScrollBar{scroll-behavior:smooth}@media screen and (max-width: 475px){.padding-1{padding-left:1rem;padding-right:1rem}}\n"] }]
201
+ CardSkeletonLoaderComponent, SvgDividerComponent, TextEditorComponent,
202
+ OverlayDirective,
203
+ BorderDirective
204
+ ], template: "<section class=\"total-container\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\"\r\n [simpoBackground]=\"styles?.background\" [simpoBorder]=\"styles?.border\">\r\n <section class=\"container-fluid d-block\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\"\r\n [spacingHorizontal]=\"getSpacingLayout\" [simpoOverlay]=\"styles?.background\">\r\n <div *ngFor=\"let item of data?.content?.inputText\">\r\n <!-- <div [innerHTML]=\"item.value | sanitizeHtml\"\r\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n </div> -->\r\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <section class=\"m-auto position-relative w-100\" [ngClass]=\"{'adjustPosition': isMobile}\">\r\n <section class=\"d-flex\">\r\n <ng-container *ngFor=\"let category of categoryList; let idx = index\">\r\n <div class=\"d-flex flex-column align-items-center category-tag position-relative\" style=\"gap: 5px;\"\r\n [style.backgroundColor]=\"selectCategoryId === category.categoryId ? getSupportingColor(styles?.background?.accentColor ?? '#000000') : ''\"\r\n [style.borderColor]=\"selectCategoryId == category.categoryId ? styles?.background?.accentColor : ''\"\r\n (click)=\"selectCategory(category.categoryId)\">\r\n <img [src]=\"category.imgUrl[0]\" alt=\"\" height=\"30px\" width=\"30px\" style=\"border-radius: 50%;\">\r\n <span class=\"trim-text\" style=\"font-size: .8125rem; text-align: center !important;\"\r\n [style.color]=\"selectCategoryId === category.categoryId ? (styles?.background?.accentColor) : ''\">{{\r\n category.categoryName | titlecase }}</span>\r\n </div>\r\n </ng-container>\r\n </section>\r\n <ng-container *ngIf=\"!isMobile\">\r\n <div class=\"left-arrow\" (click)=\"scrollLeft()\" *ngIf=\"showLeftArrow && categoryList?.length\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </div>\r\n <div class=\"right-arrow\" (click)=\"scrollRight()\" *ngIf=\"showRightArrow && categoryList?.length\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </div>\r\n </ng-container>\r\n <section class=\"product-list position-relative\"\r\n [style.borderTopLeftRadius.px]='(selectCategoryId === categoryList?.[0]?.categoryId) ? 0 : 8' #container\r\n *ngIf=\"dataList.length\" [style.backgroundColor]=\"styles?.background?.accentColor\">\r\n <section class=\"d-flex overflow-scroll\" id=\"productScrollBar\" *ngIf=\"!apiLoading\">\r\n <ng-container *ngFor=\"let product of dataList\">\r\n <simpo-small-product-listing [product]=\"product\" [data]=\"data\"\r\n [isScrollable]=\"true\"></simpo-small-product-listing>\r\n </ng-container>\r\n </section>\r\n <simpo-card-skeleton-loader *ngIf=\"apiLoading\"></simpo-card-skeleton-loader>\r\n </section>\r\n </section>\r\n </section>\r\n\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\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>\r\n</section>\r\n<ng-template #loadingTemplate>\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n</ng-template>", styles: [".total-container{height:auto;position:relative}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.d-block{display:block!important}.category-tag{padding:1rem .3rem;height:105px;width:fit-content;border-top-left-radius:10px;border-top-right-radius:10px;cursor:pointer;border-top:8px solid transparent}.product-list{padding:40px 20px;border-radius:8px}.adjustPosition{position:relative!important;left:-15px!important;width:108%!important}.overflow-scroll{overflow-x:auto}div[class*=arrow]{background-color:#fff;color:#000;padding:5px;border-radius:50%;position:absolute;top:50%;display:flex;align-items:center;justify-content:center;z-index:100;cursor:pointer;box-shadow:#63636333 0 2px 8px}.left-arrow{left:10px}.right-arrow{right:10px}#productScrollBar{scroll-behavior:smooth}@media screen and (max-width: 475px){.padding-1{padding-left:1rem;padding-right:1rem}}\n"] }]
201
205
  }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.CartService }, { type: i3.EventsService }], propDecorators: { data: [{
202
206
  type: Input
203
207
  }], index: [{
@@ -214,4 +218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
214
218
  type: ViewChild,
215
219
  args: ["container"]
216
220
  }] } });
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktcHJvZHVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9jYXRlZ29yeS1wcm9kdWN0L2NhdGVnb3J5LXByb2R1Y3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvY2F0ZWdvcnktcHJvZHVjdC9jYXRlZ29yeS1wcm9kdWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHNUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDMUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFL0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1B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LElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFnQixDQUFDO0lBQ2pELENBQUM7K0dBckxVLHdCQUF3QjttR0FBeEIsd0JBQXdCLG9XQ2pEckMsaTJIQStEQSxxN0JEOUJJLFlBQVksMlpBQ1osT0FBTywySUFHUCw0QkFBNEIsc0tBQzVCLG1CQUFtQiwwR0FDbkIsY0FBYyxnRkFDZCxtQkFBbUIsa0ZBQ25CLG9CQUFvQixvaEJBRXBCLDBCQUEwQiwyR0FDMUIsMkJBQTJCLHdHQUFDLG1CQUFtQixnR0FBQyxtQkFBbUI7OzRGQUsxRCx3QkFBd0I7a0JBcEJwQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixPQUFPO3dCQUNQLGdDQUFnQzt3QkFDaEMseUJBQXlCO3dCQUN6Qiw0QkFBNEI7d0JBQzVCLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQiwwQkFBMEI7d0JBQzFCLDJCQUEyQixFQUFDLG1CQUFtQixFQUFDLG1CQUFtQjtxQkFDcEU7c0lBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVrQixZQUFZO3NCQUFuQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeVByb2R1Y3RDb250ZW50TW9kYWwsIENhdGVnb3J5UHJvZHVjdE1vZGFsLCBDYXRlZ29yeVByb2R1Y3RTdHlsZXNNb2RlbCB9IGZyb20gJy4vY2F0ZWdvcnktcHJvZHVjdC5tb2RlbCc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBGZWF0dXJlZFByb2R1Y3RzQ29tcG9uZW50IH0gZnJvbSAnLi4vZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9zdHlsZXMvY2F0ZWdvcnkubW9kYWwnO1xyXG5pbXBvcnQgeyBJdGVtVmFyaWFudCwgUHJvZHVjdCB9IGZyb20gJy4uLy4uL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcclxuaW1wb3J0IHsgRmVhdHVyZWRQcm9kdWN0TW9kYWwgfSBmcm9tICcuLi9mZWF0dXJlZC1wcm9kdWN0cy9mZWF0dXJlZC1wcm9kdWN0cy5tb2RhbCc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3JkZXJlZEl0ZW1zIH0gZnJvbSAnLi4vLi4vc3R5bGVzL09yZGVyZWRJdGVtcy5tb2RhbCc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi8uLi8uLi9zZWN0aW9ucy9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvZGVsZXRlLWhvdmVyLWVsZW1lbnQvZGVsZXRlLWhvdmVyLWVsZW1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvcG9zaXRpb24tbGF5b3V0LWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU21hbGxQcm9kdWN0TGlzdGluZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NtYWxsLXByb2R1Y3QtbGlzdGluZy9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2FuaXRpemVIdG1sUGlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Nhbml0aXplSHRtbCc7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgQ2FyZFNrZWxldG9uTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvY2FyZC1za2VsZXRvbi1sb2FkZXIvY2FyZC1za2VsZXRvbi1sb2FkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3ZnRGl2aWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL3N2Zy1kaXZpZGVyL3N2Zy1kaXZpZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRleHRFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1jYXRlZ29yeS1wcm9kdWN0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIEZlYXR1cmVkUHJvZHVjdHNDb21wb25lbnQsXHJcbiAgICBTbWFsbFByb2R1Y3RMaXN0aW5nQ29tcG9uZW50LFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgU2FuaXRpemVIdG1sUGlwZSxcclxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxyXG4gICAgQ2FyZFNrZWxldG9uTG9hZGVyQ29tcG9uZW50LFN2Z0RpdmlkZXJDb21wb25lbnQsVGV4dEVkaXRvckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhdGVnb3J5LXByb2R1Y3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jYXRlZ29yeS1wcm9kdWN0LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXRlZ29yeVByb2R1Y3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGE/OiBDYXRlZ29yeVByb2R1Y3RNb2RhbDtcclxuICBASW5wdXQoKSBpbmRleD8gOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZWRpdD8gOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT8gOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5leHRDb21wb25lbnRDb2xvcj86IEJhY2tncm91bmRNb2RlbDtcclxuICBwdWJsaWMgYXBpTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoXCJjb250YWluZXJcIikgY29udGFpbmVyUmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgc3R5bGVzPzogQ2F0ZWdvcnlQcm9kdWN0U3R5bGVzTW9kZWw7XHJcbiAgY29udGVudD86IENhdGVnb3J5UHJvZHVjdENvbnRlbnRNb2RhbDtcclxuICBzZWxlY3RDYXRlZ29yeUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBjYXRlZ29yeUxpc3Q6IENhdGVnb3J5W10gPSBbXTtcclxuICBwcml2YXRlIFVTRVJfQ0FSVDogT3JkZXJlZEl0ZW1zW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgZmVhdHVyZVByb2R1Y3REYXRhOiBGZWF0dXJlZFByb2R1Y3RNb2RhbCB8IG51bGwgPSBudWxsO1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5mZWF0dXJlUHJvZHVjdERhdGEgPSBuZXcgRmVhdHVyZWRQcm9kdWN0TW9kYWwodGhpcy5kYXRhKTtcclxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLmdldEFsbENhdGVnb3JpZXNCeUlkKCk7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuY2F0ZWdvcnlQcm9kdWN0TGlzdC5zdWJzY3JpYmUoKCk9PiB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsQ2F0ZWdvcmllc0J5SWQoKTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVBcnJvd3MoKSwgMjAwMClcclxuICB9XHJcblxyXG4gIGdldEFsbENhdGVnb3JpZXNCeUlkKCkge1xyXG4gICAgaWYgKCF0aGlzLmRhdGE/LmNvbnRlbnQuY29sbGVjdGlvbklkKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRDYXRlZ29yaWVzQnlDb2xsZWN0aW9uSWQodGhpcy5kYXRhPy5jb250ZW50LmNvbGxlY3Rpb25JZCkuc3Vic2NyaWJlKChyZXNwb25zZSk9PiB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0ID0gcmVzcG9uc2U7XHJcbiAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdENhdGVnb3J5KHRoaXMuY2F0ZWdvcnlMaXN0WzBdLmNhdGVnb3J5SWQpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgZGF0YUxpc3Q6IFByb2R1Y3RbXSA9IFtdO1xyXG4gIHNlbGVjdENhdGVnb3J5KGNhdGVnb3J5SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWxlY3RDYXRlZ29yeUlkID0gY2F0ZWdvcnlJZDtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0UHJvZHVjdEJ5U2VsZWN0ZWRDYXRlZ29yeShjYXRlZ29yeUlkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpPT4ge1xyXG4gICAgICB0aGlzLmRhdGFMaXN0ID0gcmVzcG9uc2UuZGF0YTtcclxuXHJcbiAgICAgIGxldCBwcm9kdWN0U2Nyb2xsU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9kdWN0U2Nyb2xsQmFyJyk7XHJcbiAgICAgIGlmKHByb2R1Y3RTY3JvbGxTZWN0aW9uKVxyXG4gICAgICAgIHByb2R1Y3RTY3JvbGxTZWN0aW9uLnNjcm9sbExlZnQgPSAwXHJcbiAgICB9KVxyXG4gIH1cclxuICBhZGRJdGVtVG9DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QsIHR5cGU6ICdBREQnIHwgJ1NVQlNUUkFDVCcpIHtcclxuICAgIC8vIGlmICh0aGlzLmlzSXRlbU91dE9mU3RvY2socHJvZHVjdCkpIHtcclxuICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnQ2FydCcsIGRldGFpbDogJ0l0ZW0gaXMgbm90IGF2YWlsYWJsZSBhcyBvZiBub3cuIFdlIHdpbGwgbm90aWZ5IHlvdSBvbmNlIGF2YWlsYWJsZScgfSk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAoIXByb2R1Y3Q/LnF1YW50aXR5KVxyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5ID0gMDtcclxuICAgIGlmICh0eXBlID09ICdBREQnKSB7XHJcbiAgICAgIHByb2R1Y3QucXVhbnRpdHkgKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5IC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICBpZiAoaXRlbVZhcmllbnQpIHtcclxuICAgICAgICBpdGVtVmFyaWVudC5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9DYXJ0KHByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0KTtcclxuICAgIH1cclxuICAgIGlmIChwcm9kdWN0LnF1YW50aXR5KSB7XHJcbiAgICAgIGxldCBpc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQ/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhcmllbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgaXRlbS5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKCFpc1ByZXNlbnQpXHJcbiAgICAgICAgdGhpcy5VU0VSX0NBUlQ/LnB1c2gobmV3IE9yZGVyZWRJdGVtcyhwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQgPSB0aGlzLlVTRVJfQ0FSVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1WYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnRJZDogc3RyaW5nKTogSXRlbVZhcmlhbnQgfCBudWxsIHtcclxuICAgIGxldCBzZWxlY3RlZFZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm9kdWN0Py5pdGVtVmFyaWFudD8uZm9yRWFjaCgodmFyaWVudDogSXRlbVZhcmlhbnQpID0+IHtcclxuICAgICAgaWYgKHZhcmllbnQudmFyaWFudElkID09IHZhcmllbnRJZClcclxuICAgICAgICBzZWxlY3RlZFZhcmllbnQgPSB2YXJpZW50O1xyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRWYXJpZW50O1xyXG4gIH1cclxuICBnZXRQZXJjZW50YWdlKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIHJldHVybiAoKHByb2R1Y3QucHJpY2Uuc2VsbGluZ1ByaWNlIC0gcHJvZHVjdC5wcmljZS5kaXNjb3VudGVkUHJpY2UpIC8gMTAwKS50b0ZpeGVkKDApO1xyXG4gIH1cclxuICBnZXRTdXBwb3J0aW5nQ29sb3IoY29sb3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgaGV4ID0gY29sb3I7XHJcbiAgICBpZiAoIWhleClcclxuICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14jLywgJycpO1xyXG5cclxuICAgIGxldCBiaWdpbnQgPSBwYXJzZUludChoZXgsIDE2KTtcclxuICAgIGxldCByID0gKGJpZ2ludCA+PiAxNikgJiAyNTU7XHJcbiAgICBsZXQgZyA9IChiaWdpbnQgPj4gOCkgJiAyNTU7XHJcbiAgICBsZXQgYiA9IGJpZ2ludCAmIDI1NTtcclxuXHJcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgMC40KWA7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2Nyb2xsUmlnaHQoKSB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgbGV0IHNjcm9sbEFtb3VudCA9IDA7XHJcbiAgICAgIGNvbnN0IHNsaWRlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgY29udGFpbmVyLnNjcm9sbExlZnQgKz0gY29udGFpbmVyLmNsaWVudFdpZHRoIC8gMTI7XHJcbiAgICAgICAgc2Nyb2xsQW1vdW50ICs9IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDEyO1xyXG4gICAgICAgIGlmIChzY3JvbGxBbW91bnQgPj0gY29udGFpbmVyLmNsaWVudFdpZHRoIC8gMikge1xyXG4gICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoc2xpZGVUaW1lcik7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFycm93cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMjUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzY3JvbGxMZWZ0KCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIGxldCBzY3JvbGxBbW91bnQgPSAwO1xyXG4gICAgICBjb25zdCBzbGlkZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0IC09IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDEyO1xyXG4gICAgICAgIHNjcm9sbEFtb3VudCArPSBjb250YWluZXIuY2xpZW50V2lkdGggLyAxMjtcclxuICAgICAgICBpZiAoc2Nyb2xsQW1vdW50ID49IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDIpIHtcclxuICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHNsaWRlVGltZXIpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVBcnJvd3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDI1KTtcclxuICAgIH1cclxuICB9XHJcbiAgc2hvd1JpZ2h0QXJyb3cgPSB0cnVlO1xyXG4gIHNob3dMZWZ0QXJyb3cgPSBmYWxzZTtcclxuICB1cGRhdGVBcnJvd3MoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIHRoaXMuc2hvd1JpZ2h0QXJyb3cgPSAoZWwuc2Nyb2xsV2lkdGggLSBlbC5zY3JvbGxMZWZ0IC0gZWwuY2xpZW50V2lkdGgpID49IDE7XHJcbiAgICAgIHRoaXMuc2hvd0xlZnRBcnJvdyA9IGVsLnNjcm9sbExlZnQgPiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGVkaXRTZWN0aW9uKCl7XHJcblxyXG4gICAgaWYod2luZG93LmlubmVyV2lkdGggPD0gNDc1KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoe2RhdGE6dGhpcy5kYXRhfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcbiAgZ2V0IGdldFNwYWNpbmdMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4gey4uLnRoaXMuc3R5bGVzPy5sYXlvdXR9IGFzIExheU91dE1vZGVsO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiIFtpZF09XCJkYXRhPy5pZFwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgW2F0dHIuc3R5bGVdPVwiY3VzdG9tQ2xhc3NcIj5cclxuICA8c2VjdGlvbiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBkLWJsb2NrXCIgW2lkXT1cImRhdGE/LmlkXCJcclxuICAgIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCIgW3NwYWNpbmdIb3Jpem9udGFsXT1cImdldFNwYWNpbmdMYXlvdXRcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YT8uY29udGVudD8uaW5wdXRUZXh0XCI+XHJcbiAgICAgIDwhLS0gPGRpdiBbaW5uZXJIVE1MXT1cIml0ZW0udmFsdWUgfCBzYW5pdGl6ZUh0bWxcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0ubGFiZWwgPT09ICdIZWFkaW5nJyA/ICdoZWFkaW5nLWxhcmdlIGxoLTIgbWItMycgOiAnYm9keS1sYXJnZSdcIj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgWyh2YWx1ZSldPVwiaXRlbS52YWx1ZVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJtLWF1dG8gcG9zaXRpb24tcmVsYXRpdmUgdy0xMDBcIiBbbmdDbGFzc109XCJ7J2FkanVzdFBvc2l0aW9uJzogaXNNb2JpbGV9XCI+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcnlMaXN0OyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGNhdGVnb3J5LXRhZyBwb3NpdGlvbi1yZWxhdGl2ZVwiIHN0eWxlPVwiZ2FwOiA1cHg7XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJzZWxlY3RDYXRlZ29yeUlkID09PSBjYXRlZ29yeS5jYXRlZ29yeUlkID8gZ2V0U3VwcG9ydGluZ0NvbG9yKHN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgPz8gJyMwMDAwMDAnKSA6ICcnXCJcclxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cInNlbGVjdENhdGVnb3J5SWQgPT0gY2F0ZWdvcnkuY2F0ZWdvcnlJZCA/IHN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgOiAgJydcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnkuY2F0ZWdvcnlJZClcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImNhdGVnb3J5LmltZ1VybFswXVwiIGFsdD1cIlwiIGhlaWdodD1cIjMwcHhcIiB3aWR0aD1cIjMwcHhcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDUwJTtcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmltLXRleHRcIiBzdHlsZT1cImZvbnQtc2l6ZTogLjgxMjVyZW07IHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInNlbGVjdENhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmNhdGVnb3J5SWQgPyAoc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcikgOiAnJ1wiPnt7XHJcbiAgICAgICAgICAgICAgY2F0ZWdvcnkuY2F0ZWdvcnlOYW1lIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc01vYmlsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWFycm93XCIgKGNsaWNrKT1cInNjcm9sbExlZnQoKVwiICpuZ0lmPVwic2hvd0xlZnRBcnJvdyAmJiBjYXRlZ29yeUxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1hcnJvd1wiIChjbGljayk9XCJzY3JvbGxSaWdodCgpXCIgKm5nSWY9XCJzaG93UmlnaHRBcnJvdyAmJiBjYXRlZ29yeUxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwicHJvZHVjdC1saXN0IHBvc2l0aW9uLXJlbGF0aXZlXCIgW3N0eWxlLmJvcmRlclRvcExlZnRSYWRpdXMucHhdPScoc2VsZWN0Q2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlMaXN0Py5bMF0/LmNhdGVnb3J5SWQpID8gMCA6IDgnICNjb250YWluZXIgKm5nSWY9XCJkYXRhTGlzdC5sZW5ndGhcIlxyXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZC1mbGV4IG92ZXJmbG93LXNjcm9sbFwiIGlkPVwicHJvZHVjdFNjcm9sbEJhclwiICpuZ0lmPVwiIWFwaUxvYWRpbmdcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgZGF0YUxpc3RcIj5cclxuICAgICAgICAgICAgPHNpbXBvLXNtYWxsLXByb2R1Y3QtbGlzdGluZyBbcHJvZHVjdF09XCJwcm9kdWN0XCIgW2RhdGFdPVwiZGF0YVwiIFtpc1Njcm9sbGFibGVdPVwidHJ1ZVwiPjwvc2ltcG8tc21hbGwtcHJvZHVjdC1saXN0aW5nPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgIDxzaW1wby1jYXJkLXNrZWxldG9uLWxvYWRlciAgKm5nSWY9XCJhcGlMb2FkaW5nXCI+PC9zaW1wby1jYXJkLXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgPC9zZWN0aW9uPlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gIDwvc2VjdGlvbj5cclxuICBcclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGVzPy5kZXZpZGVyPy5kaXNwbGF5XCI+XHJcbiAgICA8c2ltcG8tc3ZnLWRpdmlkZXIgW2RpdmlkZXJUeXBlXT1cInN0eWxlcz8uZGV2aWRlcj8uZGV2aWRlclR5cGVcIiBbY29sb3JdPVwibmV4dENvbXBvbmVudENvbG9yPy5jb2xvclwiPjwvc2ltcG8tc3ZnLWRpdmlkZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cclxuICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG48bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cclxuICA8bmd4LXNrZWxldG9uLWxvYWRlciBjb3VudD1cIjFcIiBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIGhlaWdodDogJzQwdmgnLFxyXG4gICAgICAgICdib3JkZXItcmFkaXVzJzogJzEwcHgnLFxyXG4gICAgICAgICdwb3NpdGlvbic6ICdyZWxhdGl2ZScsXHJcbiAgICAgICAgJ3JpZ2h0JzogJzVweCdcclxuICAgIH1cIj5cclxuICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktcHJvZHVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9jYXRlZ29yeS1wcm9kdWN0L2NhdGVnb3J5LXByb2R1Y3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvY2F0ZWdvcnktcHJvZHVjdC9jYXRlZ29yeS1wcm9kdWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDMUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1B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QUMsQ0FBQztJQUNWLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBaUIsQ0FBQztJQUNuRCxDQUFDOytHQXBMVSx3QkFBd0I7bUdBQXhCLHdCQUF3QixvV0NsRHJDLDI4SEFrRWMsNjdCRGxDVixZQUFZLDJaQUNaLE9BQU8sMklBR1AsNEJBQTRCLHNLQUM1QixtQkFBbUIsMEdBQ25CLGNBQWMsZ0ZBQ2QsbUJBQW1CLGtGQUNuQixvQkFBb0Isb2hCQUVwQiwwQkFBMEIsMkdBQzFCLDJCQUEyQix3R0FBRSxtQkFBbUIsZ0dBQUUsbUJBQW1CLHFKQUNyRSxnQkFBZ0IscUZBQ2hCLGVBQWU7OzRGQUtOLHdCQUF3QjtrQkF0QnBDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AsZ0NBQWdDO3dCQUNoQyx5QkFBeUI7d0JBQ3pCLDRCQUE0Qjt3QkFDNUIsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLDBCQUEwQjt3QkFDMUIsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CO3dCQUNyRSxnQkFBZ0I7d0JBQ2hCLGVBQWU7cUJBQ2hCO3NJQU1RLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFa0IsWUFBWTtzQkFBbkMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2F0ZWdvcnlQcm9kdWN0Q29udGVudE1vZGFsLCBDYXRlZ29yeVByb2R1Y3RNb2RhbCwgQ2F0ZWdvcnlQcm9kdWN0U3R5bGVzTW9kZWwgfSBmcm9tICcuL2NhdGVnb3J5LXByb2R1Y3QubW9kZWwnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgRmVhdHVyZWRQcm9kdWN0c0NvbXBvbmVudCB9IGZyb20gJy4uL2ZlYXR1cmVkLXByb2R1Y3RzL2ZlYXR1cmVkLXByb2R1Y3RzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vc3R5bGVzL2NhdGVnb3J5Lm1vZGFsJztcclxuaW1wb3J0IHsgSXRlbVZhcmlhbnQsIFByb2R1Y3QgfSBmcm9tICcuLi8uLi9zdHlsZXMvcHJvZHVjdC5tb2RhbCc7XHJcbmltcG9ydCB7IEZlYXR1cmVkUHJvZHVjdE1vZGFsIH0gZnJvbSAnLi4vZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMubW9kYWwnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IE9yZGVyZWRJdGVtcyB9IGZyb20gJy4uLy4uL3N0eWxlcy9PcmRlcmVkSXRlbXMubW9kYWwnO1xyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU21hbGxQcm9kdWN0TGlzdGluZ0NvbXBvbmVudCB9IGZyb20gJy4uL3NtYWxsLXByb2R1Y3QtbGlzdGluZy9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2FuaXRpemVIdG1sUGlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Nhbml0aXplSHRtbCc7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgQ2FyZFNrZWxldG9uTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvY2FyZC1za2VsZXRvbi1sb2FkZXIvY2FyZC1za2VsZXRvbi1sb2FkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3ZnRGl2aWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL3N2Zy1kaXZpZGVyL3N2Zy1kaXZpZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRleHRFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1jYXRlZ29yeS1wcm9kdWN0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIEZlYXR1cmVkUHJvZHVjdHNDb21wb25lbnQsXHJcbiAgICBTbWFsbFByb2R1Y3RMaXN0aW5nQ29tcG9uZW50LFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgU2FuaXRpemVIdG1sUGlwZSxcclxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxyXG4gICAgQ2FyZFNrZWxldG9uTG9hZGVyQ29tcG9uZW50LCBTdmdEaXZpZGVyQ29tcG9uZW50LCBUZXh0RWRpdG9yQ29tcG9uZW50LFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIEJvcmRlckRpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhdGVnb3J5LXByb2R1Y3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jYXRlZ29yeS1wcm9kdWN0LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXRlZ29yeVByb2R1Y3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGE/OiBDYXRlZ29yeVByb2R1Y3RNb2RhbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5leHRDb21wb25lbnRDb2xvcj86IEJhY2tncm91bmRNb2RlbDtcclxuICBwdWJsaWMgYXBpTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoXCJjb250YWluZXJcIikgY29udGFpbmVyUmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgc3R5bGVzPzogQ2F0ZWdvcnlQcm9kdWN0U3R5bGVzTW9kZWw7XHJcbiAgY29udGVudD86IENhdGVnb3J5UHJvZHVjdENvbnRlbnRNb2RhbDtcclxuICBzZWxlY3RDYXRlZ29yeUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBjYXRlZ29yeUxpc3Q6IENhdGVnb3J5W10gPSBbXTtcclxuICBwcml2YXRlIFVTRVJfQ0FSVDogT3JkZXJlZEl0ZW1zW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgZmVhdHVyZVByb2R1Y3REYXRhOiBGZWF0dXJlZFByb2R1Y3RNb2RhbCB8IG51bGwgPSBudWxsO1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5mZWF0dXJlUHJvZHVjdERhdGEgPSBuZXcgRmVhdHVyZWRQcm9kdWN0TW9kYWwodGhpcy5kYXRhKTtcclxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLmdldEFsbENhdGVnb3JpZXNCeUlkKCk7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuY2F0ZWdvcnlQcm9kdWN0TGlzdC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdldEFsbENhdGVnb3JpZXNCeUlkKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlQXJyb3dzKCksIDIwMDApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxDYXRlZ29yaWVzQnlJZCgpIHtcclxuICAgIGlmICghdGhpcy5kYXRhPy5jb250ZW50LmNvbGxlY3Rpb25JZClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5hcGlMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0Q2F0ZWdvcmllc0J5Q29sbGVjdGlvbklkKHRoaXMuZGF0YT8uY29udGVudC5jb2xsZWN0aW9uSWQpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSByZXNwb25zZTtcclxuICAgICAgdGhpcy5hcGlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0Q2F0ZWdvcnkodGhpcy5jYXRlZ29yeUxpc3RbMF0uY2F0ZWdvcnlJZCk7XHJcbiAgICB9KVxyXG4gIH1cclxuICBkYXRhTGlzdDogUHJvZHVjdFtdID0gW107XHJcbiAgc2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnlJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlbGVjdENhdGVnb3J5SWQgPSBjYXRlZ29yeUlkO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRQcm9kdWN0QnlTZWxlY3RlZENhdGVnb3J5KGNhdGVnb3J5SWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFMaXN0ID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgbGV0IHByb2R1Y3RTY3JvbGxTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2R1Y3RTY3JvbGxCYXInKTtcclxuICAgICAgaWYgKHByb2R1Y3RTY3JvbGxTZWN0aW9uKVxyXG4gICAgICAgIHByb2R1Y3RTY3JvbGxTZWN0aW9uLnNjcm9sbExlZnQgPSAwXHJcbiAgICB9KVxyXG4gIH1cclxuICBhZGRJdGVtVG9DYXJ0KHByb2R1Y3Q6IFByb2R1Y3QsIHR5cGU6ICdBREQnIHwgJ1NVQlNUUkFDVCcpIHtcclxuICAgIC8vIGlmICh0aGlzLmlzSXRlbU91dE9mU3RvY2socHJvZHVjdCkpIHtcclxuICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnQ2FydCcsIGRldGFpbDogJ0l0ZW0gaXMgbm90IGF2YWlsYWJsZSBhcyBvZiBub3cuIFdlIHdpbGwgbm90aWZ5IHlvdSBvbmNlIGF2YWlsYWJsZScgfSk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAoIXByb2R1Y3Q/LnF1YW50aXR5KVxyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5ID0gMDtcclxuICAgIGlmICh0eXBlID09ICdBREQnKSB7XHJcbiAgICAgIHByb2R1Y3QucXVhbnRpdHkgKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5IC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICBpZiAoaXRlbVZhcmllbnQpIHtcclxuICAgICAgICBpdGVtVmFyaWVudC5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9DYXJ0KHByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0KTtcclxuICAgIH1cclxuICAgIGlmIChwcm9kdWN0LnF1YW50aXR5KSB7XHJcbiAgICAgIGxldCBpc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQ/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhcmllbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgaXRlbS5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKCFpc1ByZXNlbnQpXHJcbiAgICAgICAgdGhpcy5VU0VSX0NBUlQ/LnB1c2gobmV3IE9yZGVyZWRJdGVtcyhwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQgPSB0aGlzLlVTRVJfQ0FSVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEl0ZW1WYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnRJZDogc3RyaW5nKTogSXRlbVZhcmlhbnQgfCBudWxsIHtcclxuICAgIGxldCBzZWxlY3RlZFZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm9kdWN0Py5pdGVtVmFyaWFudD8uZm9yRWFjaCgodmFyaWVudDogSXRlbVZhcmlhbnQpID0+IHtcclxuICAgICAgaWYgKHZhcmllbnQudmFyaWFudElkID09IHZhcmllbnRJZClcclxuICAgICAgICBzZWxlY3RlZFZhcmllbnQgPSB2YXJpZW50O1xyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRWYXJpZW50O1xyXG4gIH1cclxuICBnZXRQZXJjZW50YWdlKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIHJldHVybiAoKHByb2R1Y3QucHJpY2Uuc2VsbGluZ1ByaWNlIC0gcHJvZHVjdC5wcmljZS5kaXNjb3VudGVkUHJpY2UpIC8gMTAwKS50b0ZpeGVkKDApO1xyXG4gIH1cclxuICBnZXRTdXBwb3J0aW5nQ29sb3IoY29sb3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgaGV4ID0gY29sb3I7XHJcbiAgICBpZiAoIWhleClcclxuICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14jLywgJycpO1xyXG5cclxuICAgIGxldCBiaWdpbnQgPSBwYXJzZUludChoZXgsIDE2KTtcclxuICAgIGxldCByID0gKGJpZ2ludCA+PiAxNikgJiAyNTU7XHJcbiAgICBsZXQgZyA9IChiaWdpbnQgPj4gOCkgJiAyNTU7XHJcbiAgICBsZXQgYiA9IGJpZ2ludCAmIDI1NTtcclxuXHJcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgMC40KWA7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2Nyb2xsUmlnaHQoKSB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgbGV0IHNjcm9sbEFtb3VudCA9IDA7XHJcbiAgICAgIGNvbnN0IHNsaWRlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgY29udGFpbmVyLnNjcm9sbExlZnQgKz0gY29udGFpbmVyLmNsaWVudFdpZHRoIC8gMTI7XHJcbiAgICAgICAgc2Nyb2xsQW1vdW50ICs9IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDEyO1xyXG4gICAgICAgIGlmIChzY3JvbGxBbW91bnQgPj0gY29udGFpbmVyLmNsaWVudFdpZHRoIC8gMikge1xyXG4gICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoc2xpZGVUaW1lcik7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFycm93cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMjUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzY3JvbGxMZWZ0KCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIGxldCBzY3JvbGxBbW91bnQgPSAwO1xyXG4gICAgICBjb25zdCBzbGlkZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0IC09IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDEyO1xyXG4gICAgICAgIHNjcm9sbEFtb3VudCArPSBjb250YWluZXIuY2xpZW50V2lkdGggLyAxMjtcclxuICAgICAgICBpZiAoc2Nyb2xsQW1vdW50ID49IGNvbnRhaW5lci5jbGllbnRXaWR0aCAvIDIpIHtcclxuICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHNsaWRlVGltZXIpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVBcnJvd3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDI1KTtcclxuICAgIH1cclxuICB9XHJcbiAgc2hvd1JpZ2h0QXJyb3cgPSB0cnVlO1xyXG4gIHNob3dMZWZ0QXJyb3cgPSBmYWxzZTtcclxuICB1cGRhdGVBcnJvd3MoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIHRoaXMuc2hvd1JpZ2h0QXJyb3cgPSAoZWwuc2Nyb2xsV2lkdGggLSBlbC5zY3JvbGxMZWZ0IC0gZWwuY2xpZW50V2lkdGgpID49IDE7XHJcbiAgICAgIHRoaXMuc2hvd0xlZnRBcnJvdyA9IGVsLnNjcm9sbExlZnQgPiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGVkaXRTZWN0aW9uKCkge1xyXG5cclxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA0NzUpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcbiAgZ2V0IGdldFNwYWNpbmdMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgW2lkXT1cImRhdGE/LmlkXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiBbYXR0ci5zdHlsZV09XCJjdXN0b21DbGFzc1wiXHJcbiAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbc2ltcG9Cb3JkZXJdPVwic3R5bGVzPy5ib3JkZXJcIj5cclxuICA8c2VjdGlvbiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBkLWJsb2NrXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCJcclxuICAgIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJnZXRTcGFjaW5nTGF5b3V0XCIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZXM/LmJhY2tncm91bmRcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YT8uY29udGVudD8uaW5wdXRUZXh0XCI+XHJcbiAgICAgIDwhLS0gPGRpdiBbaW5uZXJIVE1MXT1cIml0ZW0udmFsdWUgfCBzYW5pdGl6ZUh0bWxcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0ubGFiZWwgPT09ICdIZWFkaW5nJyA/ICdoZWFkaW5nLWxhcmdlIGxoLTIgbWItMycgOiAnYm9keS1sYXJnZSdcIj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgWyh2YWx1ZSldPVwiaXRlbS52YWx1ZVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJtLWF1dG8gcG9zaXRpb24tcmVsYXRpdmUgdy0xMDBcIiBbbmdDbGFzc109XCJ7J2FkanVzdFBvc2l0aW9uJzogaXNNb2JpbGV9XCI+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcnlMaXN0OyBsZXQgaWR4ID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGNhdGVnb3J5LXRhZyBwb3NpdGlvbi1yZWxhdGl2ZVwiIHN0eWxlPVwiZ2FwOiA1cHg7XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJzZWxlY3RDYXRlZ29yeUlkID09PSBjYXRlZ29yeS5jYXRlZ29yeUlkID8gZ2V0U3VwcG9ydGluZ0NvbG9yKHN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgPz8gJyMwMDAwMDAnKSA6ICcnXCJcclxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cInNlbGVjdENhdGVnb3J5SWQgPT0gY2F0ZWdvcnkuY2F0ZWdvcnlJZCA/IHN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgOiAgJydcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnkuY2F0ZWdvcnlJZClcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImNhdGVnb3J5LmltZ1VybFswXVwiIGFsdD1cIlwiIGhlaWdodD1cIjMwcHhcIiB3aWR0aD1cIjMwcHhcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDUwJTtcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmltLXRleHRcIiBzdHlsZT1cImZvbnQtc2l6ZTogLjgxMjVyZW07IHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInNlbGVjdENhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmNhdGVnb3J5SWQgPyAoc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcikgOiAnJ1wiPnt7XHJcbiAgICAgICAgICAgICAgY2F0ZWdvcnkuY2F0ZWdvcnlOYW1lIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc01vYmlsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWFycm93XCIgKGNsaWNrKT1cInNjcm9sbExlZnQoKVwiICpuZ0lmPVwic2hvd0xlZnRBcnJvdyAmJiBjYXRlZ29yeUxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1hcnJvd1wiIChjbGljayk9XCJzY3JvbGxSaWdodCgpXCIgKm5nSWY9XCJzaG93UmlnaHRBcnJvdyAmJiBjYXRlZ29yeUxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwicHJvZHVjdC1saXN0IHBvc2l0aW9uLXJlbGF0aXZlXCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cy5weF09JyhzZWxlY3RDYXRlZ29yeUlkID09PSBjYXRlZ29yeUxpc3Q/LlswXT8uY2F0ZWdvcnlJZCkgPyAwIDogOCcgI2NvbnRhaW5lclxyXG4gICAgICAgICpuZ0lmPVwiZGF0YUxpc3QubGVuZ3RoXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJzdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJkLWZsZXggb3ZlcmZsb3ctc2Nyb2xsXCIgaWQ9XCJwcm9kdWN0U2Nyb2xsQmFyXCIgKm5nSWY9XCIhYXBpTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBkYXRhTGlzdFwiPlxyXG4gICAgICAgICAgICA8c2ltcG8tc21hbGwtcHJvZHVjdC1saXN0aW5nIFtwcm9kdWN0XT1cInByb2R1Y3RcIiBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICBbaXNTY3JvbGxhYmxlXT1cInRydWVcIj48L3NpbXBvLXNtYWxsLXByb2R1Y3QtbGlzdGluZz5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICA8c2ltcG8tY2FyZC1za2VsZXRvbi1sb2FkZXIgKm5nSWY9XCJhcGlMb2FkaW5nXCI+PC9zaW1wby1jYXJkLXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgPC9zZWN0aW9uPlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gIDwvc2VjdGlvbj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlcz8uZGV2aWRlcj8uZGlzcGxheVwiPlxyXG4gICAgPHNpbXBvLXN2Zy1kaXZpZGVyIFtkaXZpZGVyVHlwZV09XCJzdHlsZXM/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcclxuICAgICAgW2NvbG9yXT1cIm5leHRDb21wb25lbnRDb2xvcj8uY29sb3JcIj48L3NpbXBvLXN2Zy1kaXZpZGVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuPG5nLXRlbXBsYXRlICNsb2FkaW5nVGVtcGxhdGU+XHJcbiAgPG5neC1za2VsZXRvbi1sb2FkZXIgY291bnQ9XCIxXCIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICBoZWlnaHQ6ICc0MHZoJyxcclxuICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICcxMHB4JyxcclxuICAgICAgICAncG9zaXRpb24nOiAncmVsYXRpdmUnLFxyXG4gICAgICAgICdyaWdodCc6ICc1cHgnXHJcbiAgICB9XCI+XHJcbiAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -10,4 +10,4 @@ export class FeaturedProductModal {
10
10
  this.content.inputText[0].value = "Recent Viewed Items";
11
11
  }
12
12
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZWQtcHJvZHVjdHMubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9mZWF0dXJlZC1wcm9kdWN0cy9mZWF0dXJlZC1wcm9kdWN0cy5tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sb0JBQW9CO0lBUS9CLFlBQVksSUFBMEIsRUFBRSxxQkFBOEIsS0FBSztRQUN6RSxJQUFJLENBQUMsRUFBRSxHQUFHLGtCQUFrQixDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRywwQkFBMEIsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUvQixJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztJQUM1RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dFRleHRNb2RlbCwgRGlzcGxheVNlY3Rpb24sIFN0eWxlc01vZGVsLCBJbWFnZVN0eWxlLCBBY3Rpb25Nb2RlbCwgSW1hZ2UsIEJhbm5lclN0eWxlc01vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb3JuZXJzLCBQcm9kdWN0Q2FyZFRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uLy4vc3R5bGVzL2luZGV4XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRmVhdHVyZWRQcm9kdWN0TW9kYWwge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgc2VjdGlvblR5cGU6IHN0cmluZztcclxuICBzZWN0aW9uTmFtZTogc3RyaW5nO1xyXG4gIGNvbnRlbnQ6IEZlYXR1cmVkUHJvZHVjdENvbnRlbnRNb2RhbDtcclxuICBzdHlsZXM6IEZlYXR1cmVkUHJvZHVjdFN0eWxlc01vZGVsO1xyXG4gIGFjdGlvbjogQWN0aW9uTW9kZWw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGpzb24/Ontba2V5OiBzdHJpbmddOiBhbnl9LCBpc1JlY2VudFZpZXdlZFByb2Q6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5pZCA9IFwiZmVhdHVyZWRfcHJvZHVjdFwiO1xyXG4gICAgdGhpcy5zZWN0aW9uVHlwZSA9IFwiZmVhdHVyZWRQcm9kdWN0XCI7XHJcbiAgICB0aGlzLnNlY3Rpb25OYW1lID0gXCJGZWF0dXJlZCBQcm9kdWN0IFNlY3Rpb25cIjtcclxuICAgIHRoaXMuYWN0aW9uID0ganNvbj8uW1wiYWN0aW9uXCJdO1xyXG4gICAgdGhpcy5jb250ZW50ID0ganNvbj8uW1wiY29udGVudFwiXTtcclxuICAgIHRoaXMuc3R5bGVzID0ganNvbj8uW1wic3R5bGVzXCJdO1xyXG5cclxuICAgIGlmIChpc1JlY2VudFZpZXdlZFByb2QgJiYgdGhpcy5jb250ZW50Py5pbnB1dFRleHQ/LlswXSlcclxuICAgICAgdGhpcy5jb250ZW50LmlucHV0VGV4dFswXS52YWx1ZSA9IFwiUmVjZW50IFZpZXdlZCBJdGVtc1wiO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlZFByb2R1Y3RDb250ZW50TW9kYWwge1xyXG4gIGlucHV0VGV4dCA6IElucHV0VGV4dE1vZGVsW11cclxuICBpbWFnZSA6IEltYWdlTW9kZWxcclxuICBkaXNwbGF5OiBEaXNwbGF5O1xyXG4gIGJ1dHRvbjogc3RyaW5nO1xyXG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VNb2RlbCBleHRlbmRzIEltYWdle1xyXG4gICAgc2hvd0ltYWdlOmJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5IHtcclxuICBzaG93SGVhZGluZzogYm9vbGVhbjtcclxuICBzaG93Q29udGVudDogYm9vbGVhbjtcclxuICBzaG93QnV0dG9uOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVkUHJvZHVjdFN0eWxlc01vZGVsIGV4dGVuZHMgU3R5bGVzTW9kZWwgLCBCYW5uZXJTdHlsZXNNb2RlbHtcclxuICBpbWFnZTogSW1hZ2VTdHlsZTtcclxuICBjb3JuZXJzOiBDb3JuZXJzO1xyXG4gIG1heGltdW1Qcm9kdWN0OiBudW1iZXI7XHJcbiAgZWxlbWVudEluUm93OiBudW1iZXI7XHJcbiAgbW9iaWxlQ29sdW1uOiBudW1iZXI7XHJcbiAgdGhlbWU6IFByb2R1Y3RDYXJkVGhlbWVcclxuICBkaXJlY3Rpb246IFwiUk9XXCIgfCBcIkNPTFVNTlwiXHJcbn1cclxuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZWQtcHJvZHVjdHMubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9mZWF0dXJlZC1wcm9kdWN0cy9mZWF0dXJlZC1wcm9kdWN0cy5tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sb0JBQW9CO0lBUS9CLFlBQVksSUFBMEIsRUFBRSxxQkFBOEIsS0FBSztRQUN6RSxJQUFJLENBQUMsRUFBRSxHQUFHLGtCQUFrQixDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRywwQkFBMEIsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztJQUM1RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dFRleHRNb2RlbCwgRGlzcGxheVNlY3Rpb24sIFN0eWxlc01vZGVsLCBJbWFnZVN0eWxlLCBBY3Rpb25Nb2RlbCwgSW1hZ2UsIEJhbm5lclN0eWxlc01vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb3JuZXJzLCBQcm9kdWN0Q2FyZFRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uLy4vc3R5bGVzL2luZGV4XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRmVhdHVyZWRQcm9kdWN0TW9kYWwge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgc2VjdGlvblR5cGU6IHN0cmluZztcclxuICBzZWN0aW9uTmFtZTogc3RyaW5nO1xyXG4gIGNvbnRlbnQ6IEZlYXR1cmVkUHJvZHVjdENvbnRlbnRNb2RhbDtcclxuICBzdHlsZXM6IEZlYXR1cmVkUHJvZHVjdFN0eWxlc01vZGVsO1xyXG4gIGFjdGlvbjogQWN0aW9uTW9kZWw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGpzb24/Ontba2V5OiBzdHJpbmddOiBhbnl9LCBpc1JlY2VudFZpZXdlZFByb2Q6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5pZCA9IFwiZmVhdHVyZWRfcHJvZHVjdFwiO1xyXG4gICAgdGhpcy5zZWN0aW9uVHlwZSA9IFwiZmVhdHVyZWRQcm9kdWN0XCI7XHJcbiAgICB0aGlzLnNlY3Rpb25OYW1lID0gXCJGZWF0dXJlZCBQcm9kdWN0IFNlY3Rpb25cIjtcclxuICAgIHRoaXMuYWN0aW9uID0ganNvbj8uW1wiYWN0aW9uXCJdO1xyXG4gICAgdGhpcy5jb250ZW50ID0ganNvbj8uW1wiY29udGVudFwiXTtcclxuICAgIHRoaXMuc3R5bGVzID0ganNvbj8uW1wic3R5bGVzXCJdO1xyXG4gICAgaWYgKGlzUmVjZW50Vmlld2VkUHJvZCAmJiB0aGlzLmNvbnRlbnQ/LmlucHV0VGV4dD8uWzBdKVxyXG4gICAgICB0aGlzLmNvbnRlbnQuaW5wdXRUZXh0WzBdLnZhbHVlID0gXCJSZWNlbnQgVmlld2VkIEl0ZW1zXCI7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVkUHJvZHVjdENvbnRlbnRNb2RhbCB7XHJcbiAgaW5wdXRUZXh0IDogSW5wdXRUZXh0TW9kZWxbXVxyXG4gIGltYWdlIDogSW1hZ2VNb2RlbFxyXG4gIGRpc3BsYXk6IERpc3BsYXk7XHJcbiAgYnV0dG9uOiBzdHJpbmc7XHJcbiAgY29sbGVjdGlvbklkOiBzdHJpbmc7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBJbWFnZU1vZGVsIGV4dGVuZHMgSW1hZ2V7XHJcbiAgICBzaG93SW1hZ2U6Ym9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpc3BsYXkge1xyXG4gIHNob3dIZWFkaW5nOiBib29sZWFuO1xyXG4gIHNob3dDb250ZW50OiBib29sZWFuO1xyXG4gIHNob3dCdXR0b246IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZWRQcm9kdWN0U3R5bGVzTW9kZWwgZXh0ZW5kcyBTdHlsZXNNb2RlbCAsIEJhbm5lclN0eWxlc01vZGVse1xyXG4gIGltYWdlOiBJbWFnZVN0eWxlO1xyXG4gIGNvcm5lcnM6IENvcm5lcnM7XHJcbiAgbWF4aW11bVByb2R1Y3Q6IG51bWJlcjtcclxuICBlbGVtZW50SW5Sb3c6IG51bWJlcjtcclxuICBtb2JpbGVDb2x1bW46IG51bWJlcjtcclxuICB0aGVtZTogUHJvZHVjdENhcmRUaGVtZVxyXG4gIGRpcmVjdGlvbjogXCJST1dcIiB8IFwiQ09MVU1OXCJcclxufVxyXG4iXX0=
@@ -7,6 +7,7 @@ import { ColorDirective } from '../../../directive/color.directive';
7
7
  import { ImageLoadingComponent } from '../../../components/image-loading/image-loading.component';
8
8
  import { RatingModule } from 'primeng/rating';
9
9
  import { FormsModule } from '@angular/forms';
10
+ import { MessageService } from 'primeng/api';
10
11
  import { ToastModule } from 'primeng/toast';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "../../../services/cart.service";
@@ -30,6 +31,7 @@ export class SmallProductListingComponent {
30
31
  }
31
32
  ngOnInit() {
32
33
  this.IsEcommerce = localStorage.getItem("websiteType") != 'STATIC' ? true : false;
34
+ console.log(this.data, this.product);
33
35
  }
34
36
  addItemToCart(event, product, type) {
35
37
  // if (this.isItemOutOfStock(product)) {
@@ -210,7 +212,7 @@ export class SmallProductListingComponent {
210
212
  return brightness < 128;
211
213
  }
212
214
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SmallProductListingComponent, deps: [{ token: i1.CartService }, { token: i2.Router }, { token: i3.RestService }, { token: i4.StorageServiceService }, { token: i5.MessageService }], target: i0.ɵɵFactoryTarget.Component }); }
213
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SmallProductListingComponent, isStandalone: true, selector: "simpo-small-product-listing", inputs: { product: "product", data: "data", isScrollable: "isScrollable", isCategoryProductList: "isCategoryProductList", customClass: "customClass", index: "index" }, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"></p-toast>\r\n<div class=\"product\" [ngClass]=\"{'width' : isScrollable, 'adjustHeightWidth': isCategoryProductList}\"\r\n [style.opacity]=\"product?.itemInventory?.openingStock == 0 ? 0.5 : 1\" [attr.style]=\"customClass\">\r\n <div class=\"prod-img\" [class.fade-out]=\"imageIndex == index\">\r\n <image-loading [imageUrl]=\"getProductImages(product)\" [hash]=\"product.itemImages?.[0]?.blurhash\"\r\n (click)=\"goToProductDetail(product)\" [theme]=\"data?.styles?.theme\"></image-loading>\r\n <div class=\"discount\" [style.backgroundColor]=\"data?.styles?.background?.color\"\r\n [simpoColor]=\"data?.styles?.background?.color\" *ngIf=\"getPercentage(product) > '0'\">{{getPercentage(product)}}%\r\n off</div>\r\n\r\n <div class=\"image-price\" *ngIf=\"product?.price\">\r\n <span class=\"selling-price\">\r\n <span [innerHTML]=\"currency\"></span> {{product?.price?.sellingPrice ?? 0}}\r\n </span>\r\n <span class=\"original-price\" *ngIf=\"product.price.value - product.price.discountedPrice > 2\">\r\n <span [innerHTML]=\"currency\"></span> {{product?.price?.value ?? 0}}\r\n </span>\r\n </div>\r\n\r\n <div class=\"carousel-buttons\" *ngIf=\"(product?.itemImages?.length || 0) > 1\">\r\n <div><mat-icon (click)=\"changeImage(product, 'PREV')\" class=\"clr-black\">keyboard_arrow_left</mat-icon></div>\r\n <div><mat-icon (click)=\"changeImage(product, 'NEXT')\" class=\"clr-black\">keyboard_arrow_right</mat-icon></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"product-heading h-38 text-center\" (click)=\"goToProductDetail(product)\">\r\n <span class=\"trim-text\" [style.color]=\"getTextColor()\">{{product.name}}</span>\r\n <div class=\"bottom\">\r\n <div class=\"review-rating\" *ngIf=\"getDisplayRating(product)\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/795141c1774591394997svgviewer-output.svg\" width=\"18\"\r\n height=\"18\"> \r\n <span class=\"rating-value\" [style.color]=\"getTextColor()\">{{ getDisplayRating(product) }}</span>\r\n </div>\r\n\r\n <div class=\"add-to-cart\" [style.borderColor]=\"data.styles?.background?.accentColor\"\r\n [ngClass]=\"{'justify-content-between p-0 d-flex': product.quantity, 'justify-content-center': !product.quantity}\"\r\n (click)=\"removeDefault($event)\">\r\n <!-- *ngIf=\"data?.content?.display?.showButton\" -->\r\n <ng-container *ngIf=\"product?.itemInventory?.openingStock\">\r\n <ng-container *ngIf=\"!product.quantity\">\r\n <div (click)=\"addItemToCart($event, product, 'ADD')\" [style.color]=\"data.styles?.background?.accentColor\"\r\n *ngIf=\"IsEcommerce\">\r\n Add to Cart</div>\r\n <div [style.color]=\"data.styles?.background?.accentColor\" *ngIf=\"!IsEcommerce\" (click)=\"raiseLead()\">Notify\r\n Me</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"product.quantity\">\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart($event, product, 'SUBSTRACT')\"\r\n [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\"\r\n [style.color]=\"data.styles?.background?.accentColor\">-</span>\r\n <span class=\"quantity\" [style.color]=\"data.styles?.background?.accentColor\">{{product.quantity}}</span>\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart($event, product, 'ADD')\"\r\n [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\"\r\n [style.color]=\"data.styles?.background?.accentColor\">+</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!product?.itemInventory?.openingStock\">\r\n <span class=\"d-flex align-items-center justify-content-center w-100\" [style.color]=\"getTextColor()\">\r\n <mat-icon>notification_important</mat-icon>\r\n <span class=\"ml-2\">Notify</span>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #loadingScreen>\r\n <ngx-skeleton-loader *ngIf=\"filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '100%',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\" />\r\n</ng-template> -->", styles: [".product{position:relative;display:flex;flex-direction:column;cursor:pointer;margin-bottom:10px;border-radius:10px;overflow:hidden;height:350px}.product .prod-img{position:relative;height:65%;width:100%;overflow:hidden;border:1.8px solid;border-radius:10px;border-color:#e5e7eb}.product .prod-img img{height:100%!important;width:100%!important;object-fit:cover}::ng-deep image-loading img{height:100%!important}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.width{margin-right:10px;min-width:195px;max-width:195px}.styling{height:30px;width:30px;border-radius:50%;background-color:#fff;position:absolute;bottom:0;right:-12px}.product-heading{padding:18px 10px 10px}.strike-through{text-decoration:line-through;font-size:12px;margin-left:5px;position:relative}.add-to-cart{width:100%;cursor:pointer;background-color:#fff;border:1.5px solid transparent;border-radius:5px;padding:5px;text-align:center;align-items:center}.add-to-cart .quantity-btn{padding:5px 10px;font-weight:700}.discount{position:absolute;top:0;left:0;padding:5px;width:60px;text-align:center;font-size:12px;border-bottom-right-radius:3px;z-index:2}.image-price{position:absolute;bottom:10px;right:10px;background:#fffffff2;padding:6px 10px;border-radius:8px;display:flex;align-items:center;gap:6px;z-index:2;box-shadow:0 2px 10px #0000001f;max-width:calc(100% - 20px);flex-wrap:wrap}.selling-price{font-weight:600;font-size:14px;line-height:1;color:#000}.original-price{text-decoration:line-through;font-size:12px;line-height:1}.review-rating{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 0}.rating-star{color:#e8e808;font-size:32px;line-height:1}.rating-value{font-size:16px;font-weight:600;line-height:1}@media screen and (max-width: 475px){.width{max-width:160px;min-width:160px;height:300px}.adjustHeightWidth{max-width:100%;min-width:100%}.image-price{bottom:8px;right:8px;padding:5px 8px;gap:4px}.selling-price{font-size:13px}.original-price{font-size:11px}.rating-star{font-size:22px}.rating-value{font-size:18px}}.h-40{height:45%;position:relative}.bottom{position:absolute;bottom:10px;width:93%;display:flex;flex-direction:column}.discount-price{font-weight:600;font-size:14px}.trim-text{text-align:inherit!important;font-weight:500}.product-img.fade-out{opacity:0;transform:scale(.95)}.gap-15{gap:15px}.flex-wrap{flex-wrap:wrap}.carousel-buttons{display:flex;gap:10px;position:absolute;bottom:-5px;left:10px;transform:translateY(-50%);pointer-events:none;color:#000}.carousel-buttons div{background:#fff;display:flex;align-items:center;border-radius:100%;height:30px;width:30px;justify-content:center;pointer-events:auto}.clr-black{color:#000!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ImageLoadingComponent, selector: "image-loading", inputs: ["hash", "imageUrl", "index", "product", "theme"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }, { kind: "ngmodule", type: RatingModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }] }); }
215
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SmallProductListingComponent, isStandalone: true, selector: "simpo-small-product-listing", inputs: { product: "product", data: "data", isScrollable: "isScrollable", isCategoryProductList: "isCategoryProductList", customClass: "customClass", index: "index" }, providers: [MessageService], ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"></p-toast>\r\n<div class=\"product\" [ngClass]=\"{'width' : isScrollable, 'adjustHeightWidth': isCategoryProductList}\"\r\n [style.opacity]=\"product?.itemInventory?.openingStock == 0 ? 0.5 : 1\" [attr.style]=\"customClass\">\r\n <div class=\"prod-img\" [class.fade-out]=\"imageIndex == index\">\r\n <image-loading [imageUrl]=\"getProductImages(product)\" [hash]=\"product.itemImages?.[0]?.blurhash\"\r\n (click)=\"goToProductDetail(product)\" [theme]=\"data?.styles?.theme\"></image-loading>\r\n <div class=\"discount\" [style.backgroundColor]=\"data?.styles?.background?.color\"\r\n [simpoColor]=\"data?.styles?.background?.color\" *ngIf=\"getPercentage(product) > '0'\">{{getPercentage(product)}}%\r\n off</div>\r\n\r\n <div class=\"image-price\" *ngIf=\"product?.price\">\r\n <span class=\"selling-price\">\r\n <span [innerHTML]=\"currency\"></span> {{product?.price?.sellingPrice ?? 0}}\r\n </span>\r\n <span class=\"original-price\" *ngIf=\"product.price.value - product.price.discountedPrice > 2\">\r\n <span [innerHTML]=\"currency\"></span> {{product?.price?.value ?? 0}}\r\n </span>\r\n </div>\r\n\r\n <div class=\"carousel-buttons\" *ngIf=\"(product?.itemImages?.length || 0) > 1\">\r\n <div><mat-icon (click)=\"changeImage(product, 'PREV')\" class=\"clr-black\">keyboard_arrow_left</mat-icon></div>\r\n <div><mat-icon (click)=\"changeImage(product, 'NEXT')\" class=\"clr-black\">keyboard_arrow_right</mat-icon></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"product-heading h-38 text-center\" (click)=\"goToProductDetail(product)\">\r\n <span class=\"trim-text\" [style.color]=\"getTextColor()\">{{product.name}}</span>\r\n <div class=\"bottom\">\r\n <div class=\"review-rating\" *ngIf=\"getDisplayRating(product)\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/795141c1774591394997svgviewer-output.svg\" width=\"18\"\r\n height=\"18\"> \r\n <span class=\"rating-value\" [style.color]=\"getTextColor()\">{{ getDisplayRating(product) }}</span>\r\n </div>\r\n\r\n <div class=\"add-to-cart\" [style.borderColor]=\"data.styles?.background?.accentColor\"\r\n [ngClass]=\"{'justify-content-between p-0 d-flex': product.quantity, 'justify-content-center': !product.quantity}\"\r\n (click)=\"removeDefault($event)\">\r\n <!-- *ngIf=\"data?.content?.display?.showButton\" -->\r\n <ng-container *ngIf=\"product?.itemInventory?.openingStock\">\r\n <ng-container *ngIf=\"!product.quantity\">\r\n <div (click)=\"addItemToCart($event, product, 'ADD')\" [style.color]=\"data.styles?.background?.accentColor\"\r\n *ngIf=\"IsEcommerce\">\r\n Add to Cart</div>\r\n <div [style.color]=\"data.styles?.background?.accentColor\" *ngIf=\"!IsEcommerce\" (click)=\"raiseLead()\">Notify\r\n Me</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"product.quantity\">\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart($event, product, 'SUBSTRACT')\"\r\n [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\"\r\n [style.color]=\"data.styles?.background?.accentColor\">-</span>\r\n <span class=\"quantity\" [style.color]=\"data.styles?.background?.accentColor\">{{product.quantity}}</span>\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart($event, product, 'ADD')\"\r\n [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\"\r\n [style.color]=\"data.styles?.background?.accentColor\">+</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!product?.itemInventory?.openingStock\">\r\n <span class=\"d-flex align-items-center justify-content-center w-100\" [style.color]=\"getTextColor()\">\r\n <mat-icon>notification_important</mat-icon>\r\n <span class=\"ml-2\">Notify</span>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #loadingScreen>\r\n <ngx-skeleton-loader *ngIf=\"filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '100%',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\" />\r\n</ng-template> -->", styles: [".product{position:relative;display:flex;flex-direction:column;cursor:pointer;margin-bottom:10px;border-radius:10px;overflow:hidden;height:350px}.product .prod-img{position:relative;height:65%;width:100%;overflow:hidden;border:1.8px solid;border-radius:10px;border-color:#e5e7eb}.product .prod-img img{height:100%!important;width:100%!important;object-fit:cover}::ng-deep image-loading img{height:100%!important}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.width{margin-right:10px;min-width:195px;max-width:195px}.styling{height:30px;width:30px;border-radius:50%;background-color:#fff;position:absolute;bottom:0;right:-12px}.product-heading{padding:18px 10px 10px}.strike-through{text-decoration:line-through;font-size:12px;margin-left:5px;position:relative}.add-to-cart{width:100%;cursor:pointer;background-color:#fff;border:1.5px solid transparent;border-radius:5px;padding:5px;text-align:center;align-items:center}.add-to-cart .quantity-btn{padding:5px 10px;font-weight:700}.discount{position:absolute;top:0;left:0;padding:5px;width:60px;text-align:center;font-size:12px;border-bottom-right-radius:3px;z-index:2}.image-price{position:absolute;bottom:10px;right:10px;background:#fffffff2;padding:6px 10px;border-radius:8px;display:flex;align-items:center;gap:6px;z-index:2;box-shadow:0 2px 10px #0000001f;max-width:calc(100% - 20px);flex-wrap:wrap}.selling-price{font-weight:600;font-size:14px;line-height:1;color:#000}.original-price{text-decoration:line-through;font-size:12px;line-height:1}.review-rating{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 0}.rating-star{color:#e8e808;font-size:32px;line-height:1}.rating-value{font-size:16px;font-weight:600;line-height:1}@media screen and (max-width: 475px){.width{max-width:160px;min-width:160px;height:300px}.adjustHeightWidth{max-width:100%;min-width:100%}.image-price{bottom:8px;right:8px;padding:5px 8px;gap:4px}.selling-price{font-size:13px}.original-price{font-size:11px}.rating-star{font-size:22px}.rating-value{font-size:18px}}.h-40{height:45%;position:relative}.bottom{position:absolute;bottom:10px;width:93%;display:flex;flex-direction:column}.discount-price{font-weight:600;font-size:14px}.trim-text{text-align:inherit!important;font-weight:500}.product-img.fade-out{opacity:0;transform:scale(.95)}.gap-15{gap:15px}.flex-wrap{flex-wrap:wrap}.carousel-buttons{display:flex;gap:10px;position:absolute;bottom:-5px;left:10px;transform:translateY(-50%);pointer-events:none;color:#000}.carousel-buttons div{background:#fff;display:flex;align-items:center;border-radius:100%;height:30px;width:30px;justify-content:center;pointer-events:auto}.clr-black{color:#000!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ImageLoadingComponent, selector: "image-loading", inputs: ["hash", "imageUrl", "index", "product", "theme"] }, { kind: "directive", type: ColorDirective, selector: "[simpoColor]", inputs: ["simpoColor"] }, { kind: "ngmodule", type: RatingModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }] }); }
214
216
  }
215
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SmallProductListingComponent, decorators: [{
216
218
  type: Component,
@@ -222,7 +224,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
222
224
  RatingModule,
223
225
  FormsModule,
224
226
  ToastModule
225
- ], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"></p-toast>\r\n<div class=\"product\" [ngClass]=\"{'width' : isScrollable, 'adjustHeightWidth': isCategoryProductList}\"\r\n [style.opacity]=\"product?.itemInventory?.openingStock == 0 ? 0.5 : 1\" [attr.style]=\"customClass\">\r\n <div class=\"prod-img\" [class.fade-out]=\"imageIndex == index\">\r\n <image-loading [imageUrl]=\"getProductImages(product)\" [hash]=\"product.itemImages?.[0]?.blurhash\"\r\n (click)=\"goToProductDetail(product)\" [theme]=\"data?.styles?.theme\"></image-loading>\r\n <div class=\"discount\" [style.backgroundColor]=\"data?.styles?.background?.color\"\r\n [simpoColor]=\"data?.styles?.background?.color\" *ngIf=\"getPercentage(product) > '0'\">{{getPercentage(product)}}%\r\n off</div>\r\n\r\n <div class=\"image-price\" *ngIf=\"product?.price\">\r\n <span class=\"selling-price\">\r\n <span [innerHTML]=\"currency\"></span> {{product?.price?.sellingPrice ?? 0}}\r\n </span>\r\n <span class=\"original-price\" *ngIf=\"product.price.value - product.price.discountedPrice > 2\">\r\n <span [innerHTML]=\"currency\"></span> {{product?.price?.value ?? 0}}\r\n </span>\r\n </div>\r\n\r\n <div class=\"carousel-buttons\" *ngIf=\"(product?.itemImages?.length || 0) > 1\">\r\n <div><mat-icon (click)=\"changeImage(product, 'PREV')\" class=\"clr-black\">keyboard_arrow_left</mat-icon></div>\r\n <div><mat-icon (click)=\"changeImage(product, 'NEXT')\" class=\"clr-black\">keyboard_arrow_right</mat-icon></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"product-heading h-38 text-center\" (click)=\"goToProductDetail(product)\">\r\n <span class=\"trim-text\" [style.color]=\"getTextColor()\">{{product.name}}</span>\r\n <div class=\"bottom\">\r\n <div class=\"review-rating\" *ngIf=\"getDisplayRating(product)\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/795141c1774591394997svgviewer-output.svg\" width=\"18\"\r\n height=\"18\"> \r\n <span class=\"rating-value\" [style.color]=\"getTextColor()\">{{ getDisplayRating(product) }}</span>\r\n </div>\r\n\r\n <div class=\"add-to-cart\" [style.borderColor]=\"data.styles?.background?.accentColor\"\r\n [ngClass]=\"{'justify-content-between p-0 d-flex': product.quantity, 'justify-content-center': !product.quantity}\"\r\n (click)=\"removeDefault($event)\">\r\n <!-- *ngIf=\"data?.content?.display?.showButton\" -->\r\n <ng-container *ngIf=\"product?.itemInventory?.openingStock\">\r\n <ng-container *ngIf=\"!product.quantity\">\r\n <div (click)=\"addItemToCart($event, product, 'ADD')\" [style.color]=\"data.styles?.background?.accentColor\"\r\n *ngIf=\"IsEcommerce\">\r\n Add to Cart</div>\r\n <div [style.color]=\"data.styles?.background?.accentColor\" *ngIf=\"!IsEcommerce\" (click)=\"raiseLead()\">Notify\r\n Me</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"product.quantity\">\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart($event, product, 'SUBSTRACT')\"\r\n [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\"\r\n [style.color]=\"data.styles?.background?.accentColor\">-</span>\r\n <span class=\"quantity\" [style.color]=\"data.styles?.background?.accentColor\">{{product.quantity}}</span>\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart($event, product, 'ADD')\"\r\n [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\"\r\n [style.color]=\"data.styles?.background?.accentColor\">+</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!product?.itemInventory?.openingStock\">\r\n <span class=\"d-flex align-items-center justify-content-center w-100\" [style.color]=\"getTextColor()\">\r\n <mat-icon>notification_important</mat-icon>\r\n <span class=\"ml-2\">Notify</span>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #loadingScreen>\r\n <ngx-skeleton-loader *ngIf=\"filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '100%',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\" />\r\n</ng-template> -->", styles: [".product{position:relative;display:flex;flex-direction:column;cursor:pointer;margin-bottom:10px;border-radius:10px;overflow:hidden;height:350px}.product .prod-img{position:relative;height:65%;width:100%;overflow:hidden;border:1.8px solid;border-radius:10px;border-color:#e5e7eb}.product .prod-img img{height:100%!important;width:100%!important;object-fit:cover}::ng-deep image-loading img{height:100%!important}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.width{margin-right:10px;min-width:195px;max-width:195px}.styling{height:30px;width:30px;border-radius:50%;background-color:#fff;position:absolute;bottom:0;right:-12px}.product-heading{padding:18px 10px 10px}.strike-through{text-decoration:line-through;font-size:12px;margin-left:5px;position:relative}.add-to-cart{width:100%;cursor:pointer;background-color:#fff;border:1.5px solid transparent;border-radius:5px;padding:5px;text-align:center;align-items:center}.add-to-cart .quantity-btn{padding:5px 10px;font-weight:700}.discount{position:absolute;top:0;left:0;padding:5px;width:60px;text-align:center;font-size:12px;border-bottom-right-radius:3px;z-index:2}.image-price{position:absolute;bottom:10px;right:10px;background:#fffffff2;padding:6px 10px;border-radius:8px;display:flex;align-items:center;gap:6px;z-index:2;box-shadow:0 2px 10px #0000001f;max-width:calc(100% - 20px);flex-wrap:wrap}.selling-price{font-weight:600;font-size:14px;line-height:1;color:#000}.original-price{text-decoration:line-through;font-size:12px;line-height:1}.review-rating{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 0}.rating-star{color:#e8e808;font-size:32px;line-height:1}.rating-value{font-size:16px;font-weight:600;line-height:1}@media screen and (max-width: 475px){.width{max-width:160px;min-width:160px;height:300px}.adjustHeightWidth{max-width:100%;min-width:100%}.image-price{bottom:8px;right:8px;padding:5px 8px;gap:4px}.selling-price{font-size:13px}.original-price{font-size:11px}.rating-star{font-size:22px}.rating-value{font-size:18px}}.h-40{height:45%;position:relative}.bottom{position:absolute;bottom:10px;width:93%;display:flex;flex-direction:column}.discount-price{font-weight:600;font-size:14px}.trim-text{text-align:inherit!important;font-weight:500}.product-img.fade-out{opacity:0;transform:scale(.95)}.gap-15{gap:15px}.flex-wrap{flex-wrap:wrap}.carousel-buttons{display:flex;gap:10px;position:absolute;bottom:-5px;left:10px;transform:translateY(-50%);pointer-events:none;color:#000}.carousel-buttons div{background:#fff;display:flex;align-items:center;border-radius:100%;height:30px;width:30px;justify-content:center;pointer-events:auto}.clr-black{color:#000!important}\n"] }]
227
+ ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"></p-toast>\r\n<div class=\"product\" [ngClass]=\"{'width' : isScrollable, 'adjustHeightWidth': isCategoryProductList}\"\r\n [style.opacity]=\"product?.itemInventory?.openingStock == 0 ? 0.5 : 1\" [attr.style]=\"customClass\">\r\n <div class=\"prod-img\" [class.fade-out]=\"imageIndex == index\">\r\n <image-loading [imageUrl]=\"getProductImages(product)\" [hash]=\"product.itemImages?.[0]?.blurhash\"\r\n (click)=\"goToProductDetail(product)\" [theme]=\"data?.styles?.theme\"></image-loading>\r\n <div class=\"discount\" [style.backgroundColor]=\"data?.styles?.background?.color\"\r\n [simpoColor]=\"data?.styles?.background?.color\" *ngIf=\"getPercentage(product) > '0'\">{{getPercentage(product)}}%\r\n off</div>\r\n\r\n <div class=\"image-price\" *ngIf=\"product?.price\">\r\n <span class=\"selling-price\">\r\n <span [innerHTML]=\"currency\"></span> {{product?.price?.sellingPrice ?? 0}}\r\n </span>\r\n <span class=\"original-price\" *ngIf=\"product.price.value - product.price.discountedPrice > 2\">\r\n <span [innerHTML]=\"currency\"></span> {{product?.price?.value ?? 0}}\r\n </span>\r\n </div>\r\n\r\n <div class=\"carousel-buttons\" *ngIf=\"(product?.itemImages?.length || 0) > 1\">\r\n <div><mat-icon (click)=\"changeImage(product, 'PREV')\" class=\"clr-black\">keyboard_arrow_left</mat-icon></div>\r\n <div><mat-icon (click)=\"changeImage(product, 'NEXT')\" class=\"clr-black\">keyboard_arrow_right</mat-icon></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"product-heading h-38 text-center\" (click)=\"goToProductDetail(product)\">\r\n <span class=\"trim-text\" [style.color]=\"getTextColor()\">{{product.name}}</span>\r\n <div class=\"bottom\">\r\n <div class=\"review-rating\" *ngIf=\"getDisplayRating(product)\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/795141c1774591394997svgviewer-output.svg\" width=\"18\"\r\n height=\"18\"> \r\n <span class=\"rating-value\" [style.color]=\"getTextColor()\">{{ getDisplayRating(product) }}</span>\r\n </div>\r\n\r\n <div class=\"add-to-cart\" [style.borderColor]=\"data.styles?.background?.accentColor\"\r\n [ngClass]=\"{'justify-content-between p-0 d-flex': product.quantity, 'justify-content-center': !product.quantity}\"\r\n (click)=\"removeDefault($event)\">\r\n <!-- *ngIf=\"data?.content?.display?.showButton\" -->\r\n <ng-container *ngIf=\"product?.itemInventory?.openingStock\">\r\n <ng-container *ngIf=\"!product.quantity\">\r\n <div (click)=\"addItemToCart($event, product, 'ADD')\" [style.color]=\"data.styles?.background?.accentColor\"\r\n *ngIf=\"IsEcommerce\">\r\n Add to Cart</div>\r\n <div [style.color]=\"data.styles?.background?.accentColor\" *ngIf=\"!IsEcommerce\" (click)=\"raiseLead()\">Notify\r\n Me</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"product.quantity\">\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart($event, product, 'SUBSTRACT')\"\r\n [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\"\r\n [style.color]=\"data.styles?.background?.accentColor\">-</span>\r\n <span class=\"quantity\" [style.color]=\"data.styles?.background?.accentColor\">{{product.quantity}}</span>\r\n <span class=\"quantity-btn\" (click)=\"addItemToCart($event, product, 'ADD')\"\r\n [style.backgroundColor]=\"getSupportingColor(data.styles?.background?.accentColor)\"\r\n [style.color]=\"data.styles?.background?.accentColor\">+</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!product?.itemInventory?.openingStock\">\r\n <span class=\"d-flex align-items-center justify-content-center w-100\" [style.color]=\"getTextColor()\">\r\n <mat-icon>notification_important</mat-icon>\r\n <span class=\"ml-2\">Notify</span>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <ng-template #loadingScreen>\r\n <ngx-skeleton-loader *ngIf=\"filterLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '100%',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\" />\r\n</ng-template> -->", styles: [".product{position:relative;display:flex;flex-direction:column;cursor:pointer;margin-bottom:10px;border-radius:10px;overflow:hidden;height:350px}.product .prod-img{position:relative;height:65%;width:100%;overflow:hidden;border:1.8px solid;border-radius:10px;border-color:#e5e7eb}.product .prod-img img{height:100%!important;width:100%!important;object-fit:cover}::ng-deep image-loading img{height:100%!important}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.width{margin-right:10px;min-width:195px;max-width:195px}.styling{height:30px;width:30px;border-radius:50%;background-color:#fff;position:absolute;bottom:0;right:-12px}.product-heading{padding:18px 10px 10px}.strike-through{text-decoration:line-through;font-size:12px;margin-left:5px;position:relative}.add-to-cart{width:100%;cursor:pointer;background-color:#fff;border:1.5px solid transparent;border-radius:5px;padding:5px;text-align:center;align-items:center}.add-to-cart .quantity-btn{padding:5px 10px;font-weight:700}.discount{position:absolute;top:0;left:0;padding:5px;width:60px;text-align:center;font-size:12px;border-bottom-right-radius:3px;z-index:2}.image-price{position:absolute;bottom:10px;right:10px;background:#fffffff2;padding:6px 10px;border-radius:8px;display:flex;align-items:center;gap:6px;z-index:2;box-shadow:0 2px 10px #0000001f;max-width:calc(100% - 20px);flex-wrap:wrap}.selling-price{font-weight:600;font-size:14px;line-height:1;color:#000}.original-price{text-decoration:line-through;font-size:12px;line-height:1}.review-rating{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 0}.rating-star{color:#e8e808;font-size:32px;line-height:1}.rating-value{font-size:16px;font-weight:600;line-height:1}@media screen and (max-width: 475px){.width{max-width:160px;min-width:160px;height:300px}.adjustHeightWidth{max-width:100%;min-width:100%}.image-price{bottom:8px;right:8px;padding:5px 8px;gap:4px}.selling-price{font-size:13px}.original-price{font-size:11px}.rating-star{font-size:22px}.rating-value{font-size:18px}}.h-40{height:45%;position:relative}.bottom{position:absolute;bottom:10px;width:93%;display:flex;flex-direction:column}.discount-price{font-weight:600;font-size:14px}.trim-text{text-align:inherit!important;font-weight:500}.product-img.fade-out{opacity:0;transform:scale(.95)}.gap-15{gap:15px}.flex-wrap{flex-wrap:wrap}.carousel-buttons{display:flex;gap:10px;position:absolute;bottom:-5px;left:10px;transform:translateY(-50%);pointer-events:none;color:#000}.carousel-buttons div{background:#fff;display:flex;align-items:center;border-radius:100%;height:30px;width:30px;justify-content:center;pointer-events:auto}.clr-black{color:#000!important}\n"] }]
226
228
  }], ctorParameters: () => [{ type: i1.CartService }, { type: i2.Router }, { type: i3.RestService }, { type: i4.StorageServiceService }, { type: i5.MessageService }], propDecorators: { product: [{
227
229
  type: Input
228
230
  }], data: [{
@@ -236,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
236
238
  }], index: [{
237
239
  type: Input
238
240
  }] } });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hbGwtcHJvZHVjdC1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL3NtYWxsLXByb2R1Y3QtbGlzdGluZy9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvc21hbGwtcHJvZHVjdC1saXN0aW5nL3NtYWxsLXByb2R1Y3QtbGlzdGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFpQjVDLE1BQU0sT0FBTyw0QkFBNEI7SUFFdkMsWUFDbUIsV0FBd0IsRUFDeEIsTUFBYyxFQUNkLFdBQXdCLEVBQ3hCLGNBQXFDLEVBQ3JDLGNBQThCO1FBSjlC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LE9BQU87d0JBQ1AscUJBQXFCO3dCQUNyQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxXQUFXO3FCQUNaO2dNQWVRLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSXRlbVZhcmlhbnQsIFByb2R1Y3QgfSBmcm9tICcuLi8uLi9zdHlsZXMvcHJvZHVjdC5tb2RhbCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJVU0lORVNTX0NPTlNUQU5UUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9idXNpbmVzcy5jb25zdGFudCc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgT3JkZXJlZEl0ZW1zIH0gZnJvbSAnLi4vLi4vc3R5bGVzL09yZGVyZWRJdGVtcy5tb2RhbCc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sb3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29sb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSW1hZ2VMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbWFnZS1sb2FkaW5nL2ltYWdlLWxvYWRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmF0aW5nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9yYXRpbmcnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tc21hbGwtcHJvZHVjdC1saXN0aW5nJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBJbWFnZUxvYWRpbmdDb21wb25lbnQsXHJcbiAgICBDb2xvckRpcmVjdGl2ZSxcclxuICAgIFJhdGluZ01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVG9hc3RNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYWxsUHJvZHVjdExpc3RpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBwcml2YXRlIFVTRVJfQ0FSVDogT3JkZXJlZEl0ZW1zW10gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBwcm9kdWN0ITogUHJvZHVjdDtcclxuICBASW5wdXQoKSBkYXRhPzogYW55O1xyXG4gIEBJbnB1dCgpIGlzU2Nyb2xsYWJsZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaXNDYXRlZ29yeVByb2R1Y3RMaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5kZXghOiBudW1iZXJcclxuICBJc0Vjb21tZXJjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5Jc0Vjb21tZXJjZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwid2Vic2l0ZVR5cGVcIikgIT0gJ1NUQVRJQycgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVG9DYXJ0KGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0LCB0eXBlOiAnQUREJyB8ICdTVUJTVFJBQ1QnKSB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuaXNJdGVtT3V0T2ZTdG9jayhwcm9kdWN0KSkge1xyXG4gICAgLy8gICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6ICdDYXJ0JywgZGV0YWlsOiAnSXRlbSBpcyBub3QgYXZhaWxhYmxlIGFzIG9mIG5vdy4gV2Ugd2lsbCBub3RpZnkgeW91IG9uY2UgYXZhaWxhYmxlJyB9KTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICghcHJvZHVjdD8ucXVhbnRpdHkpXHJcbiAgICAgIHByb2R1Y3QucXVhbnRpdHkgPSAwO1xyXG4gICAgaWYgKHR5cGUgPT0gJ0FERCcpIHtcclxuICAgICAgcHJvZHVjdC5xdWFudGl0eSArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHByb2R1Y3QucXVhbnRpdHkgLT0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocHJvZHVjdD8uaXRlbVZhcmlhbnQ/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBpdGVtVmFyaWVudDogSXRlbVZhcmlhbnQgfCBudWxsID0gdGhpcy5nZXRJdGVtVmFyaWVudChwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCk7XHJcbiAgICAgIGlmIChpdGVtVmFyaWVudCkge1xyXG4gICAgICAgIGl0ZW1WYXJpZW50LnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eTtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEl0ZW1Ub0NhcnQocHJvZHVjdCwgaXRlbVZhcmllbnQudmFyaWFudElkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9DYXJ0KHByb2R1Y3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2R1Y3QucXVhbnRpdHkpIHtcclxuICAgICAgbGV0IGlzUHJlc2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlVTRVJfQ0FSVD8uZm9yRWFjaCgoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0udmFyaWVudElkID09IHByb2R1Y3QudmFyaWVudElkKSB7XHJcbiAgICAgICAgICBpdGVtLnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eTtcclxuICAgICAgICAgIGlzUHJlc2VudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAoIWlzUHJlc2VudClcclxuICAgICAgICB0aGlzLlVTRVJfQ0FSVD8ucHVzaChuZXcgT3JkZXJlZEl0ZW1zKHByb2R1Y3QsIHByb2R1Y3QudmFyaWVudElkKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLlVTRVJfQ0FSVCA9IHRoaXMuVVNFUl9DQVJUPy5maWx0ZXIoKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4gaXRlbS52YXJpZW50SWQgIT0gcHJvZHVjdC52YXJpZW50SWQpID8/IFtdO1xyXG4gICAgfVxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVEZWZhdWx0KGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcbiAgcmFpc2VMZWFkKCkge1xyXG4gICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKTtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBidXNpbmVzc0lkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxyXG4gICAgICBlbWFpbDogdXNlckRldGFpbHM/LmNvbnRhY3Q/LmVtYWlsLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiLFxyXG4gICAgICBtb2JpbGVObzogXCJcIixcclxuICAgICAgbW9yZUluZm86IHtcclxuICAgICAgICBOYW1lOiB1c2VyRGV0YWlscz8uY29udGFjdD8ubmFtZSxcclxuICAgICAgICBcIk1vYmlsZSBOdW1iZXJcIjogdXNlckRldGFpbHM/LmNvbnRhY3Q/Lm1vYmlsZSxcclxuICAgICAgICBFbWFpbDogdXNlckRldGFpbHM/LmNvbnRhY3Q/LmVtYWlsLFxyXG4gICAgICAgIFwiTGVhZCBTb3VyY2VcIjogXCJXZWJzaXRlXCIsXHJcbiAgICAgICAgXCJMZWFkIFN0YXR1c1wiOiBcIk5FV1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIG5hbWU6IHVzZXJEZXRhaWxzPy5jb250YWN0Py5uYW1lXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmNyZWF0ZUxlYWQocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uZGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnVGhhbmsgeW91JywgZGV0YWlsOiAnT3VyIHRlYW0gd2lsbCBjb250YWN0IHlvdSBzb29uJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdFcnJvciBvY2N1cmVkIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0SXRlbVZhcmllbnQocHJvZHVjdDogUHJvZHVjdCwgdmFyaWVudElkOiBzdHJpbmcpOiBJdGVtVmFyaWFudCB8IG51bGwge1xyXG4gICAgbGV0IHNlbGVjdGVkVmFyaWVudDogSXRlbVZhcmlhbnQgfCBudWxsID0gbnVsbDtcclxuICAgIHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5mb3JFYWNoKCh2YXJpZW50OiBJdGVtVmFyaWFudCkgPT4ge1xyXG4gICAgICBpZiAodmFyaWVudC52YXJpYW50SWQgPT0gdmFyaWVudElkKVxyXG4gICAgICAgIHNlbGVjdGVkVmFyaWVudCA9IHZhcmllbnQ7XHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZFZhcmllbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQZXJjZW50YWdlKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIHJldHVybiAoKChwcm9kdWN0Py5wcmljZT8udmFsdWUgLSBwcm9kdWN0Py5wcmljZT8uZGlzY291bnRlZFByaWNlKSAvIHByb2R1Y3Q/LnByaWNlPy52YWx1ZSkgKiAxMDApLnRvRml4ZWQoMCk7XHJcbiAgfVxyXG5cclxuICBnb1RvUHJvZHVjdERldGFpbChwcm9kdWN0OiBQcm9kdWN0KSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYGRldGFpbHNgXSwgeyBxdWVyeVBhcmFtczogeyBpZDogcHJvZHVjdC5pdGVtSWQgLCB2YXJpZW50SWQ6IHByb2R1Y3QudmFyaWVudElkfSB9KTtcclxuICB9XHJcblxyXG4gIGdldFN1cHBvcnRpbmdDb2xvcihjb2xvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBoZXggPSBjb2xvcjtcclxuICAgIGlmICghaGV4KVxyXG4gICAgICByZXR1cm4gY29sb3I7XHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgvXiMvLCAnJyk7XHJcblxyXG4gICAgbGV0IGJpZ2ludCA9IHBhcnNlSW50KGhleCwgMTYpO1xyXG4gICAgbGV0IHIgPSAoYmlnaW50ID4+IDE2KSAmIDI1NTtcclxuICAgIGxldCBnID0gKGJpZ2ludCA+PiA4KSAmIDI1NTtcclxuICAgIGxldCBiID0gYmlnaW50ICYgMjU1O1xyXG5cclxuICAgIHJldHVybiBgcmdiYSgke3J9LCAke2d9LCAke2J9LCAwLjQpYDtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW5jeSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEJVU0lORVNTX0NPTlNUQU5UUy5DVVJSRU5DWTtcclxuICB9XHJcblxyXG4gIGdldFByb2R1Y3RJbWFnZXMocHJvZHVjdDogYW55KSB7XHJcbiAgICBpZiAoIXByb2R1Y3RbJ2N1cnJlbnRJbWFnZUluZGV4J10pXHJcbiAgICAgIHByb2R1Y3RbJ2N1cnJlbnRJbWFnZUluZGV4J10gPSAwO1xyXG5cclxuICAgIGxldCBpbWFnZUluZGV4OiBudW1iZXIgPSBwcm9kdWN0WydjdXJyZW50SW1hZ2VJbmRleCddICUgcHJvZHVjdD8uWydpdGVtSW1hZ2VzJ10/Lmxlbmd0aDtcclxuICAgIHJldHVybiBwcm9kdWN0Py5bJ2l0ZW1JbWFnZXMnXT8uW2ltYWdlSW5kZXhdPy5pbWdVcmxcclxuICB9XHJcblxyXG4gIGltYWdlSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIGFzeW5jIGNoYW5nZUltYWdlKHByb2R1Y3Q6IGFueSwgYWN0aW9uOiAnUFJFVicgfCAnTkVYVCcpIHtcclxuICAgIHRoaXMuaW1hZ2VJbmRleCA9IHRoaXMuaW5kZXg7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSk7XHJcblxyXG4gICAgaWYgKGFjdGlvbiA9PT0gJ05FWFQnKSB7XHJcbiAgICAgIHByb2R1Y3RbJ2N1cnJlbnRJbWFnZUluZGV4J10rKztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHByb2R1Y3RbJ2N1cnJlbnRJbWFnZUluZGV4J10tLTtcclxuXHJcbiAgICAgIGlmIChwcm9kdWN0WydjdXJyZW50SW1hZ2VJbmRleCddIDwgMClcclxuICAgICAgICBwcm9kdWN0WydjdXJyZW50SW1hZ2VJbmRleCddID0gcHJvZHVjdD8uWydpdGVtSW1hZ2VzJ10/Lmxlbmd0aCAtIDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmltYWdlSW5kZXggPSAtMTtcclxuICB9XHJcblxyXG4gIGdldFJhdGluZ3Mobm9vZnJhdGluZ3M6IGFueSkge1xyXG4gICAgaWYgKG5vb2ZyYXRpbmdzID49IDEwMDAgJiYgbm9vZnJhdGluZ3MgPD0gMTAwMDApIHtcclxuICAgICAgcmV0dXJuIChub29mcmF0aW5ncyAvIDEwMDApLnRvRml4ZWQoMSkgKyBcIksrXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub29mcmF0aW5ncyA+IDEwMDAwICYmIG5vb2ZyYXRpbmdzIDw9IDEwMDAwMCkge1xyXG4gICAgICByZXR1cm4gKG5vb2ZyYXRpbmdzIC8gMTAwMDApLnRvRml4ZWQoMSkgKyBcIksrXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub29mcmF0aW5ncyA+IDEwMDAwMCAmJiBub29mcmF0aW5ncyA8PSAxMDAwMDAwKSB7XHJcbiAgICAgIHJldHVybiAobm9vZnJhdGluZ3MgLyAxMDAwMDApLnRvRml4ZWQoMSkgKyBcIkwrXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub29mcmF0aW5ncyA+IDEwMDAwMDApIHtcclxuICAgICAgcmV0dXJuIChub29mcmF0aW5ncyAvIDEwMDAwMDApLnRvRml4ZWQoMSkgKyBcIk0rXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5vb2ZyYXRpbmdzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGlzcGxheVJhdGluZyhwcm9kdWN0OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmF0aW5nID0gTnVtYmVyKHByb2R1Y3Q/LmF2ZXJhZ2VSYXRpbmcgPz8gMCk7XHJcbiAgICBpZiAoIXJhdGluZykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmF0aW5nLnRvRml4ZWQoMSk7XHJcbiAgfVxyXG5cclxuICBnZXRCYWNrZ3JvdW5kQ29sb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uY29sb3IgfHwgJyNmZmZmZmYnO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGV4dENvbG9yKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmdldEJhY2tncm91bmRDb2xvcigpO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEYXJrQ29sb3IoYmFja2dyb3VuZENvbG9yKSA/ICcjZmZmZmZmJyA6ICcjMDAwMDAwJztcclxuICB9XHJcblxyXG4gIGlzRGFya0NvbG9yKGNvbG9yOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghY29sb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoZXggPSBjb2xvci50cmltKCk7XHJcblxyXG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCdyZ2InKSkge1xyXG4gICAgICBjb25zdCByZ2JWYWx1ZXMgPSBoZXgubWF0Y2goL1xcZCsvZyk7XHJcbiAgICAgIGlmICghcmdiVmFsdWVzIHx8IHJnYlZhbHVlcy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByID0gTnVtYmVyKHJnYlZhbHVlc1swXSk7XHJcbiAgICAgIGNvbnN0IGcgPSBOdW1iZXIocmdiVmFsdWVzWzFdKTtcclxuICAgICAgY29uc3QgYiA9IE51bWJlcihyZ2JWYWx1ZXNbMl0pO1xyXG4gICAgICBjb25zdCBicmlnaHRuZXNzID0gKHIgKiAyOTkgKyBnICogNTg3ICsgYiAqIDExNCkgLyAxMDAwO1xyXG5cclxuICAgICAgcmV0dXJuIGJyaWdodG5lc3MgPCAxMjg7XHJcbiAgICB9XHJcblxyXG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoJyMnLCAnJyk7XHJcblxyXG4gICAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcclxuICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKS5tYXAoKGNoYXIpID0+IGNoYXIgKyBjaGFyKS5qb2luKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGV4Lmxlbmd0aCAhPT0gNikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XHJcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIGNvbnN0IGJyaWdodG5lc3MgPSAociAqIDI5OSArIGcgKiA1ODcgKyBiICogMTE0KSAvIDEwMDA7XHJcblxyXG4gICAgcmV0dXJuIGJyaWdodG5lc3MgPCAxMjg7XHJcbiAgfVxyXG59IiwiPHAtdG9hc3QgcG9zaXRpb249XCJib3R0b20tcmlnaHRcIiBbYmFzZVpJbmRleF09XCIxMDAwMDAwMDAwMFwiIFthdXRvWkluZGV4XT1cInRydWVcIj48L3AtdG9hc3Q+XHJcbjxkaXYgY2xhc3M9XCJwcm9kdWN0XCIgW25nQ2xhc3NdPVwieyd3aWR0aCcgOiBpc1Njcm9sbGFibGUsICdhZGp1c3RIZWlnaHRXaWR0aCc6IGlzQ2F0ZWdvcnlQcm9kdWN0TGlzdH1cIlxyXG4gIFtzdHlsZS5vcGFjaXR5XT1cInByb2R1Y3Q/Lml0ZW1JbnZlbnRvcnk/Lm9wZW5pbmdTdG9jayA9PSAwID8gMC41IDogMVwiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInByb2QtaW1nXCIgW2NsYXNzLmZhZGUtb3V0XT1cImltYWdlSW5kZXggPT0gaW5kZXhcIj5cclxuICAgIDxpbWFnZS1sb2FkaW5nIFtpbWFnZVVybF09XCJnZXRQcm9kdWN0SW1hZ2VzKHByb2R1Y3QpXCIgW2hhc2hdPVwicHJvZHVjdC5pdGVtSW1hZ2VzPy5bMF0/LmJsdXJoYXNoXCJcclxuICAgICAgKGNsaWNrKT1cImdvVG9Qcm9kdWN0RGV0YWlsKHByb2R1Y3QpXCIgW3RoZW1lXT1cImRhdGE/LnN0eWxlcz8udGhlbWVcIj48L2ltYWdlLWxvYWRpbmc+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGlzY291bnRcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uY29sb3JcIlxyXG4gICAgICBbc2ltcG9Db2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmNvbG9yXCIgKm5nSWY9XCJnZXRQZXJjZW50YWdlKHByb2R1Y3QpID4gJzAnXCI+e3tnZXRQZXJjZW50YWdlKHByb2R1Y3QpfX0lXHJcbiAgICAgIG9mZjwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1wcmljZVwiICpuZ0lmPVwicHJvZHVjdD8ucHJpY2VcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzZWxsaW5nLXByaWNlXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjdXJyZW5jeVwiPjwvc3Bhbj4ge3twcm9kdWN0Py5wcmljZT8uc2VsbGluZ1ByaWNlID8/IDB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwib3JpZ2luYWwtcHJpY2VcIiAqbmdJZj1cInByb2R1Y3QucHJpY2UudmFsdWUgLSBwcm9kdWN0LnByaWNlLmRpc2NvdW50ZWRQcmljZSA+IDJcIj5cclxuICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPiB7e3Byb2R1Y3Q/LnByaWNlPy52YWx1ZSA/PyAwfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWJ1dHRvbnNcIiAqbmdJZj1cIihwcm9kdWN0Py5pdGVtSW1hZ2VzPy5sZW5ndGggfHwgMCkgPiAxXCI+XHJcbiAgICAgIDxkaXY+PG1hdC1pY29uIChjbGljayk9XCJjaGFuZ2VJbWFnZShwcm9kdWN0LCAnUFJFVicpXCIgY2xhc3M9XCJjbHItYmxhY2tcIj5rZXlib2FyZF9hcnJvd19sZWZ0PC9tYXQtaWNvbj48L2Rpdj5cclxuICAgICAgPGRpdj48bWF0LWljb24gKGNsaWNrKT1cImNoYW5nZUltYWdlKHByb2R1Y3QsICdORVhUJylcIiBjbGFzcz1cImNsci1ibGFja1wiPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvbj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1oZWFkaW5nIGgtMzggdGV4dC1jZW50ZXJcIiAoY2xpY2spPVwiZ29Ub1Byb2R1Y3REZXRhaWwocHJvZHVjdClcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwidHJpbS10ZXh0XCIgW3N0eWxlLmNvbG9yXT1cImdldFRleHRDb2xvcigpXCI+e3twcm9kdWN0Lm5hbWV9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJib3R0b21cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJldmlldy1yYXRpbmdcIiAqbmdJZj1cImdldERpc3BsYXlSYXRpbmcocHJvZHVjdClcIj5cclxuICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNzk1MTQxYzE3NzQ1OTEzOTQ5OTdzdmd2aWV3ZXItb3V0cHV0LnN2Z1wiIHdpZHRoPVwiMThcIlxyXG4gICAgICAgICAgaGVpZ2h0PVwiMThcIj4gXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyYXRpbmctdmFsdWVcIiBbc3R5bGUuY29sb3JdPVwiZ2V0VGV4dENvbG9yKClcIj57eyBnZXREaXNwbGF5UmF0aW5nKHByb2R1Y3QpIH19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhZGQtdG8tY2FydFwiIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJkYXRhLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnanVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0wIGQtZmxleCc6IHByb2R1Y3QucXVhbnRpdHksICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJzogIXByb2R1Y3QucXVhbnRpdHl9XCJcclxuICAgICAgICAoY2xpY2spPVwicmVtb3ZlRGVmYXVsdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPCEtLSAqbmdJZj1cImRhdGE/LmNvbnRlbnQ/LmRpc3BsYXk/LnNob3dCdXR0b25cIiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvZHVjdD8uaXRlbUludmVudG9yeT8ub3BlbmluZ1N0b2NrXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXByb2R1Y3QucXVhbnRpdHlcIj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiYWRkSXRlbVRvQ2FydCgkZXZlbnQsIHByb2R1Y3QsICdBREQnKVwiIFtzdHlsZS5jb2xvcl09XCJkYXRhLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiSXNFY29tbWVyY2VcIj5cclxuICAgICAgICAgICAgICBBZGQgdG8gQ2FydDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IFtzdHlsZS5jb2xvcl09XCJkYXRhLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cIiFJc0Vjb21tZXJjZVwiIChjbGljayk9XCJyYWlzZUxlYWQoKVwiPk5vdGlmeVxyXG4gICAgICAgICAgICAgIE1lPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9kdWN0LnF1YW50aXR5XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVhbnRpdHktYnRuXCIgKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQoJGV2ZW50LCBwcm9kdWN0LCAnU1VCU1RSQUNUJylcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZ2V0U3VwcG9ydGluZ0NvbG9yKGRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcilcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1YW50aXR5XCIgW3N0eWxlLmNvbG9yXT1cImRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPnt7cHJvZHVjdC5xdWFudGl0eX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1YW50aXR5LWJ0blwiIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KCRldmVudCwgcHJvZHVjdCwgJ0FERCcpXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImdldFN1cHBvcnRpbmdDb2xvcihkYXRhLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IpXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+Kzwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJvZHVjdD8uaXRlbUludmVudG9yeT8ub3BlbmluZ1N0b2NrXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMFwiIFtzdHlsZS5jb2xvcl09XCJnZXRUZXh0Q29sb3IoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bm90aWZpY2F0aW9uX2ltcG9ydGFudDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPk5vdGlmeTwvc3Bhbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ1NjcmVlbj5cclxuICA8bmd4LXNrZWxldG9uLWxvYWRlciAqbmdJZj1cImZpbHRlckxvYWRpbmdcIiBjb3VudD1cIjFcIiBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcclxuICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzEwcHgnLFxyXG4gICAgICAgICAgJ3Bvc2l0aW9uJzogJ3JlbGF0aXZlJyxcclxuICAgICAgICAgICdyaWdodCc6ICc1cHgnXHJcbiAgICAgICAgfVwiIC8+XHJcbjwvbmctdGVtcGxhdGU+IC0tPiJdfQ==
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hbGwtcHJvZHVjdC1saXN0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL3NtYWxsLXByb2R1Y3QtbGlzdGluZy9zbWFsbC1wcm9kdWN0LWxpc3RpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvc21hbGwtcHJvZHVjdC1saXN0aW5nL3NtYWxsLXByb2R1Y3QtbGlzdGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQWtCNUMsTUFBTSxPQUFPLDRCQUE0QjtJQUV2QyxZQUNtQixXQUF3QixFQUN4QixNQUFj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T0FBTywySUFDUCxxQkFBcUIscUhBQ3JCLGNBQWMsZ0ZBQ2QsWUFBWSw4QkFDWixXQUFXLDhCQUNYLFdBQVc7OzRGQU1GLDRCQUE0QjtrQkFoQnhDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBQzNCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AscUJBQXFCO3dCQUNyQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxXQUFXO3FCQUNaLGFBQ1UsQ0FBQyxjQUFjLENBQUM7Z01BZWxCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSXRlbVZhcmlhbnQsIFByb2R1Y3QgfSBmcm9tICcuLi8uLi9zdHlsZXMvcHJvZHVjdC5tb2RhbCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJVU0lORVNTX0NPTlNUQU5UUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9idXNpbmVzcy5jb25zdGFudCc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgT3JkZXJlZEl0ZW1zIH0gZnJvbSAnLi4vLi4vc3R5bGVzL09yZGVyZWRJdGVtcy5tb2RhbCc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sb3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29sb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSW1hZ2VMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbWFnZS1sb2FkaW5nL2ltYWdlLWxvYWRpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmF0aW5nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9yYXRpbmcnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tc21hbGwtcHJvZHVjdC1saXN0aW5nJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdEljb24sXHJcbiAgICBJbWFnZUxvYWRpbmdDb21wb25lbnQsXHJcbiAgICBDb2xvckRpcmVjdGl2ZSxcclxuICAgIFJhdGluZ01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVG9hc3RNb2R1bGVcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hbGwtcHJvZHVjdC1saXN0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc21hbGwtcHJvZHVjdC1saXN0aW5nLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFsbFByb2R1Y3RMaXN0aW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgcHJpdmF0ZSBVU0VSX0NBUlQ6IE9yZGVyZWRJdGVtc1tdIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgcHJvZHVjdCE6IFByb2R1Y3Q7XHJcbiAgQElucHV0KCkgZGF0YT86IGFueTtcclxuICBASW5wdXQoKSBpc1Njcm9sbGFibGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzQ2F0ZWdvcnlQcm9kdWN0TGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGluZGV4ITogbnVtYmVyXHJcbiAgSXNFY29tbWVyY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuSXNFY29tbWVyY2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIndlYnNpdGVUeXBlXCIpICE9ICdTVEFUSUMnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5kYXRhLCB0aGlzLnByb2R1Y3QpXHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVG9DYXJ0KGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0LCB0eXBlOiAnQUREJyB8ICdTVUJTVFJBQ1QnKSB7XHJcbiAgICAvLyBpZiAodGhpcy5pc0l0ZW1PdXRPZlN0b2NrKHByb2R1Y3QpKSB7XHJcbiAgICAvLyAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ0NhcnQnLCBkZXRhaWw6ICdJdGVtIGlzIG5vdCBhdmFpbGFibGUgYXMgb2Ygbm93LiBXZSB3aWxsIG5vdGlmeSB5b3Ugb25jZSBhdmFpbGFibGUnIH0pO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKCFwcm9kdWN0Py5xdWFudGl0eSlcclxuICAgICAgcHJvZHVjdC5xdWFudGl0eSA9IDA7XHJcbiAgICBpZiAodHlwZSA9PSAnQUREJykge1xyXG4gICAgICBwcm9kdWN0LnF1YW50aXR5ICs9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcHJvZHVjdC5xdWFudGl0eSAtPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1WYXJpZW50OiBJdGVtVmFyaWFudCB8IG51bGwgPSB0aGlzLmdldEl0ZW1WYXJpZW50KHByb2R1Y3QsIHByb2R1Y3QudmFyaWVudElkKTtcclxuICAgICAgaWYgKGl0ZW1WYXJpZW50KSB7XHJcbiAgICAgICAgaXRlbVZhcmllbnQucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0LCBpdGVtVmFyaWVudC52YXJpYW50SWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEl0ZW1Ub0NhcnQocHJvZHVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvZHVjdC5xdWFudGl0eSkge1xyXG4gICAgICBsZXQgaXNQcmVzZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuVVNFUl9DQVJUPy5mb3JFYWNoKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS52YXJpZW50SWQgPT0gcHJvZHVjdC52YXJpZW50SWQpIHtcclxuICAgICAgICAgIGl0ZW0ucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gICAgICAgICAgaXNQcmVzZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmICghaXNQcmVzZW50KVxyXG4gICAgICAgIHRoaXMuVVNFUl9DQVJUPy5wdXNoKG5ldyBPcmRlcmVkSXRlbXMocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuVVNFUl9DQVJUID0gdGhpcy5VU0VSX0NBUlQ/LmZpbHRlcigoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiBpdGVtLnZhcmllbnRJZCAhPSBwcm9kdWN0LnZhcmllbnRJZCkgPz8gW107XHJcbiAgICB9XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZURlZmF1bHQoZXZlbnQ6IFBvaW50ZXJFdmVudCB8IE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICByYWlzZUxlYWQoKSB7XHJcbiAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXHJcbiAgICAgIGVtYWlsOiB1c2VyRGV0YWlscz8uY29udGFjdD8uZW1haWwsXHJcbiAgICAgIG1lc3NhZ2U6IFwiXCIsXHJcbiAgICAgIG1vYmlsZU5vOiBcIlwiLFxyXG4gICAgICBtb3JlSW5mbzoge1xyXG4gICAgICAgIE5hbWU6IHVzZXJEZXRhaWxzPy5jb250YWN0Py5uYW1lLFxyXG4gICAgICAgIFwiTW9iaWxlIE51bWJlclwiOiB1c2VyRGV0YWlscz8uY29udGFjdD8ubW9iaWxlLFxyXG4gICAgICAgIEVtYWlsOiB1c2VyRGV0YWlscz8uY29udGFjdD8uZW1haWwsXHJcbiAgICAgICAgXCJMZWFkIFNvdXJjZVwiOiBcIldlYnNpdGVcIixcclxuICAgICAgICBcIkxlYWQgU3RhdHVzXCI6IFwiTkVXXCJcclxuICAgICAgfSxcclxuICAgICAgbmFtZTogdXNlckRldGFpbHM/LmNvbnRhY3Q/Lm5hbWVcclxuICAgIH1cclxuICAgIHRoaXMucmVzdFNlcnZpY2UuY3JlYXRlTGVhZChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5kYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdUaGFuayB5b3UnLCBkZXRhaWw6ICdPdXIgdGVhbSB3aWxsIGNvbnRhY3QgeW91IHNvb24nIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIG9jY3VyZWQgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXRJdGVtVmFyaWVudChwcm9kdWN0OiBQcm9kdWN0LCB2YXJpZW50SWQ6IHN0cmluZyk6IEl0ZW1WYXJpYW50IHwgbnVsbCB7XHJcbiAgICBsZXQgc2VsZWN0ZWRWYXJpZW50OiBJdGVtVmFyaWFudCB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJvZHVjdD8uaXRlbVZhcmlhbnQ/LmZvckVhY2goKHZhcmllbnQ6IEl0ZW1WYXJpYW50KSA9PiB7XHJcbiAgICAgIGlmICh2YXJpZW50LnZhcmlhbnRJZCA9PSB2YXJpZW50SWQpXHJcbiAgICAgICAgc2VsZWN0ZWRWYXJpZW50ID0gdmFyaWVudDtcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGVkVmFyaWVudDtcclxuICB9XHJcblxyXG4gIGdldFBlcmNlbnRhZ2UocHJvZHVjdDogUHJvZHVjdCkge1xyXG4gICAgcmV0dXJuICgoKHByb2R1Y3Q/LnByaWNlPy52YWx1ZSAtIHByb2R1Y3Q/LnByaWNlPy5kaXNjb3VudGVkUHJpY2UpIC8gcHJvZHVjdD8ucHJpY2U/LnZhbHVlKSAqIDEwMCkudG9GaXhlZCgwKTtcclxuICB9XHJcblxyXG4gIGdvVG9Qcm9kdWN0RGV0YWlsKHByb2R1Y3Q6IFByb2R1Y3QpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgZGV0YWlsc2BdLCB7IHF1ZXJ5UGFyYW1zOiB7IGlkOiBwcm9kdWN0Lml0ZW1JZCwgdmFyaWVudElkOiBwcm9kdWN0LnZhcmllbnRJZCB9IH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3VwcG9ydGluZ0NvbG9yKGNvbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhleCA9IGNvbG9yO1xyXG4gICAgaWYgKCFoZXgpXHJcbiAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIGhleCA9IGhleC5yZXBsYWNlKC9eIy8sICcnKTtcclxuXHJcbiAgICBsZXQgYmlnaW50ID0gcGFyc2VJbnQoaGV4LCAxNik7XHJcbiAgICBsZXQgciA9IChiaWdpbnQgPj4gMTYpICYgMjU1O1xyXG4gICAgbGV0IGcgPSAoYmlnaW50ID4+IDgpICYgMjU1O1xyXG4gICAgbGV0IGIgPSBiaWdpbnQgJiAyNTU7XHJcblxyXG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sIDAuNClgO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQlVTSU5FU1NfQ09OU1RBTlRTLkNVUlJFTkNZO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZHVjdEltYWdlcyhwcm9kdWN0OiBhbnkpIHtcclxuICAgIGlmICghcHJvZHVjdFsnY3VycmVudEltYWdlSW5kZXgnXSlcclxuICAgICAgcHJvZHVjdFsnY3VycmVudEltYWdlSW5kZXgnXSA9IDA7XHJcblxyXG4gICAgbGV0IGltYWdlSW5kZXg6IG51bWJlciA9IHByb2R1Y3RbJ2N1cnJlbnRJbWFnZUluZGV4J10gJSBwcm9kdWN0Py5bJ2l0ZW1JbWFnZXMnXT8ubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHByb2R1Y3Q/LlsnaXRlbUltYWdlcyddPy5baW1hZ2VJbmRleF0/LmltZ1VybFxyXG4gIH1cclxuXHJcbiAgaW1hZ2VJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgYXN5bmMgY2hhbmdlSW1hZ2UocHJvZHVjdDogYW55LCBhY3Rpb246ICdQUkVWJyB8ICdORVhUJykge1xyXG4gICAgdGhpcy5pbWFnZUluZGV4ID0gdGhpcy5pbmRleDtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDApKTtcclxuXHJcbiAgICBpZiAoYWN0aW9uID09PSAnTkVYVCcpIHtcclxuICAgICAgcHJvZHVjdFsnY3VycmVudEltYWdlSW5kZXgnXSsrO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcHJvZHVjdFsnY3VycmVudEltYWdlSW5kZXgnXS0tO1xyXG5cclxuICAgICAgaWYgKHByb2R1Y3RbJ2N1cnJlbnRJbWFnZUluZGV4J10gPCAwKVxyXG4gICAgICAgIHByb2R1Y3RbJ2N1cnJlbnRJbWFnZUluZGV4J10gPSBwcm9kdWN0Py5bJ2l0ZW1JbWFnZXMnXT8ubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHRoaXMuaW1hZ2VJbmRleCA9IC0xO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmF0aW5ncyhub29mcmF0aW5nczogYW55KSB7XHJcbiAgICBpZiAobm9vZnJhdGluZ3MgPj0gMTAwMCAmJiBub29mcmF0aW5ncyA8PSAxMDAwMCkge1xyXG4gICAgICByZXR1cm4gKG5vb2ZyYXRpbmdzIC8gMTAwMCkudG9GaXhlZCgxKSArIFwiSytcIjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vb2ZyYXRpbmdzID4gMTAwMDAgJiYgbm9vZnJhdGluZ3MgPD0gMTAwMDAwKSB7XHJcbiAgICAgIHJldHVybiAobm9vZnJhdGluZ3MgLyAxMDAwMCkudG9GaXhlZCgxKSArIFwiSytcIjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vb2ZyYXRpbmdzID4gMTAwMDAwICYmIG5vb2ZyYXRpbmdzIDw9IDEwMDAwMDApIHtcclxuICAgICAgcmV0dXJuIChub29mcmF0aW5ncyAvIDEwMDAwMCkudG9GaXhlZCgxKSArIFwiTCtcIjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vb2ZyYXRpbmdzID4gMTAwMDAwMCkge1xyXG4gICAgICByZXR1cm4gKG5vb2ZyYXRpbmdzIC8gMTAwMDAwMCkudG9GaXhlZCgxKSArIFwiTStcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gbm9vZnJhdGluZ3M7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREaXNwbGF5UmF0aW5nKHByb2R1Y3Q6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYXRpbmcgPSBOdW1iZXIocHJvZHVjdD8uYXZlcmFnZVJhdGluZyA/PyAwKTtcclxuICAgIGlmICghcmF0aW5nKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiByYXRpbmcudG9GaXhlZCgxKTtcclxuICB9XHJcblxyXG4gIGdldEJhY2tncm91bmRDb2xvcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvciB8fCAnI2ZmZmZmZic7XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0Q29sb3IoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHRoaXMuZ2V0QmFja2dyb3VuZENvbG9yKCk7XHJcbiAgICByZXR1cm4gdGhpcy5pc0RhcmtDb2xvcihiYWNrZ3JvdW5kQ29sb3IpID8gJyNmZmZmZmYnIDogJyMwMDAwMDAnO1xyXG4gIH1cclxuXHJcbiAgaXNEYXJrQ29sb3IoY29sb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjb2xvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGhleCA9IGNvbG9yLnRyaW0oKTtcclxuXHJcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ3JnYicpKSB7XHJcbiAgICAgIGNvbnN0IHJnYlZhbHVlcyA9IGhleC5tYXRjaCgvXFxkKy9nKTtcclxuICAgICAgaWYgKCFyZ2JWYWx1ZXMgfHwgcmdiVmFsdWVzLmxlbmd0aCA8IDMpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHIgPSBOdW1iZXIocmdiVmFsdWVzWzBdKTtcclxuICAgICAgY29uc3QgZyA9IE51bWJlcihyZ2JWYWx1ZXNbMV0pO1xyXG4gICAgICBjb25zdCBiID0gTnVtYmVyKHJnYlZhbHVlc1syXSk7XHJcbiAgICAgIGNvbnN0IGJyaWdodG5lc3MgPSAociAqIDI5OSArIGcgKiA1ODcgKyBiICogMTE0KSAvIDEwMDA7XHJcblxyXG4gICAgICByZXR1cm4gYnJpZ2h0bmVzcyA8IDEyODtcclxuICAgIH1cclxuXHJcbiAgICBoZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcclxuXHJcbiAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBoZXggPSBoZXguc3BsaXQoJycpLm1hcCgoY2hhcikgPT4gY2hhciArIGNoYXIpLmpvaW4oJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoZXgubGVuZ3RoICE9PSA2KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcblxyXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcclxuXHJcbiAgICByZXR1cm4gYnJpZ2h0bmVzcyA8IDEyODtcclxuICB9XHJcbn0iLCI8cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiIFtiYXNlWkluZGV4XT1cIjEwMDAwMDAwMDAwXCIgW2F1dG9aSW5kZXhdPVwidHJ1ZVwiPjwvcC10b2FzdD5cclxuPGRpdiBjbGFzcz1cInByb2R1Y3RcIiBbbmdDbGFzc109XCJ7J3dpZHRoJyA6IGlzU2Nyb2xsYWJsZSwgJ2FkanVzdEhlaWdodFdpZHRoJzogaXNDYXRlZ29yeVByb2R1Y3RMaXN0fVwiXHJcbiAgW3N0eWxlLm9wYWNpdHldPVwicHJvZHVjdD8uaXRlbUludmVudG9yeT8ub3BlbmluZ1N0b2NrID09IDAgPyAwLjUgOiAxXCIgW2F0dHIuc3R5bGVdPVwiY3VzdG9tQ2xhc3NcIj5cclxuICA8ZGl2IGNsYXNzPVwicHJvZC1pbWdcIiBbY2xhc3MuZmFkZS1vdXRdPVwiaW1hZ2VJbmRleCA9PSBpbmRleFwiPlxyXG4gICAgPGltYWdlLWxvYWRpbmcgW2ltYWdlVXJsXT1cImdldFByb2R1Y3RJbWFnZXMocHJvZHVjdClcIiBbaGFzaF09XCJwcm9kdWN0Lml0ZW1JbWFnZXM/LlswXT8uYmx1cmhhc2hcIlxyXG4gICAgICAoY2xpY2spPVwiZ29Ub1Byb2R1Y3REZXRhaWwocHJvZHVjdClcIiBbdGhlbWVdPVwiZGF0YT8uc3R5bGVzPy50aGVtZVwiPjwvaW1hZ2UtbG9hZGluZz5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXNjb3VudFwiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5jb2xvclwiXHJcbiAgICAgIFtzaW1wb0NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uY29sb3JcIiAqbmdJZj1cImdldFBlcmNlbnRhZ2UocHJvZHVjdCkgPiAnMCdcIj57e2dldFBlcmNlbnRhZ2UocHJvZHVjdCl9fSVcclxuICAgICAgb2ZmPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImltYWdlLXByaWNlXCIgKm5nSWY9XCJwcm9kdWN0Py5wcmljZVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInNlbGxpbmctcHJpY2VcIj5cclxuICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImN1cnJlbmN5XCI+PC9zcGFuPiB7e3Byb2R1Y3Q/LnByaWNlPy5zZWxsaW5nUHJpY2UgPz8gMH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmlnaW5hbC1wcmljZVwiICpuZ0lmPVwicHJvZHVjdC5wcmljZS52YWx1ZSAtIHByb2R1Y3QucHJpY2UuZGlzY291bnRlZFByaWNlID4gMlwiPlxyXG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY3VycmVuY3lcIj48L3NwYW4+IHt7cHJvZHVjdD8ucHJpY2U/LnZhbHVlID8/IDB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWwtYnV0dG9uc1wiICpuZ0lmPVwiKHByb2R1Y3Q/Lml0ZW1JbWFnZXM/Lmxlbmd0aCB8fCAwKSA+IDFcIj5cclxuICAgICAgPGRpdj48bWF0LWljb24gKGNsaWNrKT1cImNoYW5nZUltYWdlKHByb2R1Y3QsICdQUkVWJylcIiBjbGFzcz1cImNsci1ibGFja1wiPmtleWJvYXJkX2Fycm93X2xlZnQ8L21hdC1pY29uPjwvZGl2PlxyXG4gICAgICA8ZGl2PjxtYXQtaWNvbiAoY2xpY2spPVwiY2hhbmdlSW1hZ2UocHJvZHVjdCwgJ05FWFQnKVwiIGNsYXNzPVwiY2xyLWJsYWNrXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L21hdC1pY29uPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWhlYWRpbmcgaC0zOCB0ZXh0LWNlbnRlclwiIChjbGljayk9XCJnb1RvUHJvZHVjdERldGFpbChwcm9kdWN0KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJ0cmltLXRleHRcIiBbc3R5bGUuY29sb3JdPVwiZ2V0VGV4dENvbG9yKClcIj57e3Byb2R1Y3QubmFtZX19PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvdHRvbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmV2aWV3LXJhdGluZ1wiICpuZ0lmPVwiZ2V0RGlzcGxheVJhdGluZyhwcm9kdWN0KVwiPlxyXG4gICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kMno5NDk3eHA4eGIxMi5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy83OTUxNDFjMTc3NDU5MTM5NDk5N3N2Z3ZpZXdlci1vdXRwdXQuc3ZnXCIgd2lkdGg9XCIxOFwiXHJcbiAgICAgICAgICBoZWlnaHQ9XCIxOFwiPiBcclxuICAgICAgICA8c3BhbiBjbGFzcz1cInJhdGluZy12YWx1ZVwiIFtzdHlsZS5jb2xvcl09XCJnZXRUZXh0Q29sb3IoKVwiPnt7IGdldERpc3BsYXlSYXRpbmcocHJvZHVjdCkgfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImFkZC10by1jYXJ0XCIgW3N0eWxlLmJvcmRlckNvbG9yXT1cImRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwLTAgZC1mbGV4JzogcHJvZHVjdC5xdWFudGl0eSwgJ2p1c3RpZnktY29udGVudC1jZW50ZXInOiAhcHJvZHVjdC5xdWFudGl0eX1cIlxyXG4gICAgICAgIChjbGljayk9XCJyZW1vdmVEZWZhdWx0KCRldmVudClcIj5cclxuICAgICAgICA8IS0tICpuZ0lmPVwiZGF0YT8uY29udGVudD8uZGlzcGxheT8uc2hvd0J1dHRvblwiIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9kdWN0Py5pdGVtSW52ZW50b3J5Py5vcGVuaW5nU3RvY2tcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJvZHVjdC5xdWFudGl0eVwiPlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KCRldmVudCwgcHJvZHVjdCwgJ0FERCcpXCIgW3N0eWxlLmNvbG9yXT1cImRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJJc0Vjb21tZXJjZVwiPlxyXG4gICAgICAgICAgICAgIEFkZCB0byBDYXJ0PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLmNvbG9yXT1cImRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwiIUlzRWNvbW1lcmNlXCIgKGNsaWNrKT1cInJhaXNlTGVhZCgpXCI+Tm90aWZ5XHJcbiAgICAgICAgICAgICAgTWU8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2R1Y3QucXVhbnRpdHlcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxdWFudGl0eS1idG5cIiAoY2xpY2spPVwiYWRkSXRlbVRvQ2FydCgkZXZlbnQsIHByb2R1Y3QsICdTVUJTVFJBQ1QnKVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJnZXRTdXBwb3J0aW5nQ29sb3IoZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yKVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVhbnRpdHlcIiBbc3R5bGUuY29sb3JdPVwiZGF0YS5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+e3twcm9kdWN0LnF1YW50aXR5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVhbnRpdHktYnRuXCIgKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQoJGV2ZW50LCBwcm9kdWN0LCAnQUREJylcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZ2V0U3VwcG9ydGluZ0NvbG9yKGRhdGEuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcilcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIj4rPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcm9kdWN0Py5pdGVtSW52ZW50b3J5Py5vcGVuaW5nU3RvY2tcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwXCIgW3N0eWxlLmNvbG9yXT1cImdldFRleHRDb2xvcigpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5ub3RpZmljYXRpb25faW1wb3J0YW50PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+Tm90aWZ5PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPG5nLXRlbXBsYXRlICNsb2FkaW5nU2NyZWVuPlxyXG4gIDxuZ3gtc2tlbGV0b24tbG9hZGVyICpuZ0lmPVwiZmlsdGVyTG9hZGluZ1wiIGNvdW50PVwiMVwiIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMTBweCcsXHJcbiAgICAgICAgICAncG9zaXRpb24nOiAncmVsYXRpdmUnLFxyXG4gICAgICAgICAgJ3JpZ2h0JzogJzVweCdcclxuICAgICAgICB9XCIgLz5cclxuPC9uZy10ZW1wbGF0ZT4gLS0+Il19