buildingproduct-library 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/assets/fonts/arial-webfont.woff +0 -0
- package/assets/fonts/arial-webfont.woff2 +0 -0
- package/assets/fonts/arialblack-webfont.woff +0 -0
- package/assets/fonts/arialblack-webfont.woff2 +0 -0
- package/assets/fonts/arialbold-webfont.woff +0 -0
- package/assets/fonts/arialbold-webfont.woff2 +0 -0
- package/assets/fonts/helveticaneue.woff +0 -0
- package/assets/fonts/helveticaneue.woff2 +0 -0
- package/assets/fonts/helveticaneuemedium-webfont.woff +0 -0
- package/assets/fonts/helveticaneuemedium-webfont.woff2 +0 -0
- package/assets/fonts/helveticaneuethin-webfont.woff +0 -0
- package/assets/fonts/helveticaneuethin-webfont.woff2 +0 -0
- package/assets/fonts/icomoon.ttf +0 -0
- package/assets/fonts/icomoon.woff +0 -0
- package/assets/images/ActivateIcon.svg +14 -0
- package/assets/images/AlertIcon.svg +3 -0
- package/assets/images/DisableIcon.svg +3 -0
- package/assets/images/Divider line.svg +3 -0
- package/assets/images/EditIconEnabled.svg +6 -0
- package/assets/images/EditIcondisabled.svg +6 -0
- package/assets/images/Grid-dark.svg +8 -0
- package/assets/images/Grid-light.svg +8 -0
- package/assets/images/Hamburger_icon_white.png +0 -0
- package/assets/images/Icon-awesome-user-alt-white.svg +13 -0
- package/assets/images/Icon-ionic-ios-arrow-down.svg +3 -0
- package/assets/images/Icon-ionic-ios-help-circle.svg +6 -0
- package/assets/images/Icon-ionic-ios-home.svg +6 -0
- package/assets/images/Icon-ionic-ios-settings.svg +6 -0
- package/assets/images/Icon-material-shopping-cart.svg +7 -0
- package/assets/images/Invited.svg +4 -0
- package/assets/images/List-dark.svg +3 -0
- package/assets/images/List-light.svg +3 -0
- package/assets/images/PDP-add-more.svg +3 -0
- package/assets/images/PDP-colour-selected.svg +7 -0
- package/assets/images/PDP-quote-exists.svg +12 -0
- package/assets/images/PDP-remove-icon.svg +3 -0
- package/assets/images/Selected icon.svg +3 -0
- package/assets/images/Selected-icon.svg +3 -0
- package/assets/images/banner-image.png +0 -0
- package/assets/images/br_down.png +0 -0
- package/assets/images/cart-shopping-fast.svg +6 -0
- package/assets/images/check-square.svg +3 -0
- package/assets/images/checkmark-circle-outline.svg +4 -0
- package/assets/images/closegrey.svg +71 -0
- package/assets/images/dashboard.svg +35 -0
- package/assets/images/delivery.svg +11 -0
- package/assets/images/download-icon.svg +7 -0
- package/assets/images/downloads-dark.svg +6 -0
- package/assets/images/downloads-light.svg +6 -0
- package/assets/images/erroricon.svg +3 -0
- package/assets/images/home-icon.svg +6 -0
- package/assets/images/home_banner.png +0 -0
- package/assets/images/ic_calender.svg +15 -0
- package/assets/images/icon-clock-icon.svg +10 -0
- package/assets/images/icon-feather-edit.svg +6 -0
- package/assets/images/icon-flashing-black.svg +3 -0
- package/assets/images/icon-flashing-white.svg +3 -0
- package/assets/images/icon-ionic-ios-search.svg +3 -0
- package/assets/images/icon-logout.svg +6 -0
- package/assets/images/icon-mail-icon.svg +7 -0
- package/assets/images/icon-metro-info.svg +3 -0
- package/assets/images/ionic-arrow-back.svg +3 -0
- package/assets/images/ionic-ios-feather-phone.svg +3 -0
- package/assets/images/ionic-ios-help-circle-outline.svg +6 -0
- package/assets/images/ionic-ios-location-outline.svg +3 -0
- package/assets/images/ionic-ios-my-location.svg +3 -0
- package/assets/images/ionic-ios-users-outline.svg +3 -0
- package/assets/images/ionic-trash.svg +3 -0
- package/assets/images/logo-black.svg +16 -0
- package/assets/images/logo-dark.svg +48 -0
- package/assets/images/logo.svg +16 -0
- package/assets/images/my-account.svg +21 -0
- package/assets/images/my-list.svg +43 -0
- package/assets/images/my-team.svg +17 -0
- package/assets/images/newsfeed-banner.jpg +0 -0
- package/assets/images/newtab.svg +11 -0
- package/assets/images/no-saved-cart.svg +3 -0
- package/assets/images/open-account-logout.png +0 -0
- package/assets/images/orders.svg +23 -0
- package/assets/images/pdf-icon.svg +45 -0
- package/assets/images/pdp-noimage.svg +21 -0
- package/assets/images/pickup.svg +8 -0
- package/assets/images/plp-grid-noimage.svg +22 -0
- package/assets/images/plp-list-noimage.svg +16 -0
- package/assets/images/product-banner.png +0 -0
- package/assets/images/product-details-dark.svg +10 -0
- package/assets/images/product-details-light.svg +10 -0
- package/assets/images/products.svg +34 -0
- package/assets/images/quotes.svg +12 -0
- package/assets/images/related-products-dark.svg +9 -0
- package/assets/images/related-products-light.svg +9 -0
- package/assets/images/search-noimage.svg +16 -0
- package/assets/images/see-more-bg-hover.svg +1 -0
- package/assets/images/see-more-bg.svg +1 -0
- package/assets/images/shopping-cart-icon.svg +14 -0
- package/assets/images/slash-small-white.svg +3 -0
- package/assets/images/warningicon.svg +3 -0
- package/assets/images/why-dimond.svg +7 -0
- package/buildingproduct-library-0.2.7.tgz +0 -0
- package/buildingproduct-library.d.ts +5 -0
- package/bundles/buildingproduct-library.umd.js +10979 -0
- package/bundles/buildingproduct-library.umd.js.map +1 -0
- package/esm2015/buildingproduct-library.js +5 -0
- package/esm2015/lib/account-dropdown/account-dropdown.component.js +159 -0
- package/esm2015/lib/account-dropdown/account-dropdown.module.js +59 -0
- package/esm2015/lib/account-dropdown/account-dropdown.service.js +55 -0
- package/esm2015/lib/checkout/add-new-address/add-new-address.component.js +442 -0
- package/esm2015/lib/checkout/checkout.module.js +149 -0
- package/esm2015/lib/checkout/custom-checkout/custom-checkout.component.js +348 -0
- package/esm2015/lib/checkout/order-confirmation/order-confirmation.component.js +37 -0
- package/esm2015/lib/checkout/order-review/delivery-information/delivery-information.component.js +32 -0
- package/esm2015/lib/checkout/order-review/order-review-grid/order-review-grid.component.js +162 -0
- package/esm2015/lib/checkout/order-review/order-review-list/order-review-list.component.js +151 -0
- package/esm2015/lib/checkout/order-review/order-review.component.js +123 -0
- package/esm2015/lib/constants/general.js +57 -0
- package/esm2015/lib/contact-us/contact-us.component.js +38 -0
- package/esm2015/lib/contact-us/contact-us.module.js +41 -0
- package/esm2015/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.js +48 -0
- package/esm2015/lib/custom-cart/custom-cart.component.js +70 -0
- package/esm2015/lib/custom-cart/custom-cart.module.js +91 -0
- package/esm2015/lib/custom-header-logo/custom-header-logo.component.js +27 -0
- package/esm2015/lib/custom-header-logo/custom-header-logo.module.js +54 -0
- package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.component.js +24 -0
- package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.module.js +48 -0
- package/esm2015/lib/custom-mini-cart/custom-mini-cart.component.js +239 -0
- package/esm2015/lib/custom-mini-cart/custom-mini-cart.module.js +64 -0
- package/esm2015/lib/custom-navigation/custom-navigation.component.js +122 -0
- package/esm2015/lib/custom-navigation/custom-navigation.module.js +79 -0
- package/esm2015/lib/custom-order-details/custom-order-details.component.js +205 -0
- package/esm2015/lib/custom-order-details/custom-order-details.module.js +99 -0
- package/esm2015/lib/custom-order-details/download-popup/download-popup.component.js +34 -0
- package/esm2015/lib/custom-order-details/order-detail-grid/order-detail-grid.component.js +191 -0
- package/esm2015/lib/custom-order-details/order-detail-list/order-detail-list.component.js +169 -0
- package/esm2015/lib/custom-order-history/custom-order-history.component.js +680 -0
- package/esm2015/lib/custom-order-history/custom-order-history.module.js +105 -0
- package/esm2015/lib/custom-order-history/slider-progress/slider-progress.component.js +62 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.js +108 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.js +125 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.js +91 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.js +56 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.js +51 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart.component.js +114 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart.module.js +89 -0
- package/esm2015/lib/custom-saved-cart/save-cart.service.js +67 -0
- package/esm2015/lib/custom-saved-cart/saved-cart-general.js +49 -0
- package/esm2015/lib/custom-saved-cart/saved-cart.service.js +48 -0
- package/esm2015/lib/custom-search/custom-search.component.js +132 -0
- package/esm2015/lib/custom-search/custom-search.module.js +46 -0
- package/esm2015/lib/custom-user-account/custom-user-account.component.js +92 -0
- package/esm2015/lib/custom-user-account/custom-user-account.module.js +63 -0
- package/esm2015/lib/directives/custom-directives.module.js +22 -0
- package/esm2015/lib/directives/custom-paginatior.directive.js +197 -0
- package/esm2015/lib/environments/environment.js +24 -0
- package/esm2015/lib/find-store/find-store.component.js +94 -0
- package/esm2015/lib/find-store/find-store.module.js +66 -0
- package/esm2015/lib/help-support/help-support.component.js +24 -0
- package/esm2015/lib/help-support/help-support.module.js +38 -0
- package/esm2015/lib/my-account/account-dashboard/account-dashboard.component.js +133 -0
- package/esm2015/lib/my-account/account-statements/account-statements.component.js +57 -0
- package/esm2015/lib/my-account/invoice-credit/invoice-credit.component.js +379 -0
- package/esm2015/lib/my-account/my-account.component.js +95 -0
- package/esm2015/lib/my-account/my-account.module.js +99 -0
- package/esm2015/lib/my-team/my-team.component.js +445 -0
- package/esm2015/lib/my-team/my-team.module.js +100 -0
- package/esm2015/lib/my-team/team-member.service.js +95 -0
- package/esm2015/lib/pipes/custom-date-pipe.pipe.js +26 -0
- package/esm2015/lib/services/account-dropdown-state.service.js +21 -0
- package/esm2015/lib/services/cart.service.js +70 -0
- package/esm2015/lib/services/checkout.service.js +69 -0
- package/esm2015/lib/services/endPointURL.js +192 -0
- package/esm2015/lib/services/find-store.service.js +50 -0
- package/esm2015/lib/services/logout.service.js +50 -0
- package/esm2015/lib/services/my-account.service.js +68 -0
- package/esm2015/lib/services/order-history.service.js +65 -0
- package/esm2015/lib/services/order.review.js +38 -0
- package/esm2015/lib/services/search.service.js +42 -0
- package/esm2015/lib/services/user-account-detail-service.service.js +207 -0
- package/esm2015/lib/shared/CustomProduct.js +48 -0
- package/esm2015/lib/shared/active-saved-cart/active-saved-cart.component.js +116 -0
- package/esm2015/lib/shared/custom-breadcrum/custom-breadcrum.component.js +102 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-cart-detail.component.js +95 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.js +477 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.js +431 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.js +622 -0
- package/esm2015/lib/shared/custom-cart-detail/split.pipe.js +17 -0
- package/esm2015/lib/shared/date-range-picker/date-range-picker.component.js +173 -0
- package/esm2015/lib/shared/regEx.validator.js +17 -0
- package/esm2015/lib/shared/saved-cart-popup/saved-cart-popup.component.js +83 -0
- package/esm2015/lib/shared/shared-components.module.js +119 -0
- package/esm2015/lib/shared/shared-download-order/shared-download-order.component.js +220 -0
- package/esm2015/lib/spa-custom-header.component.js +26 -0
- package/esm2015/lib/spa-custom-header.module.js +145 -0
- package/esm2015/lib/spa-custom-header.service.js +14 -0
- package/esm2015/lib/utils/utils.js +27 -0
- package/esm2015/lib/utils.js +27 -0
- package/esm2015/public-api.js +35 -0
- package/fesm2015/buildingproduct-library.js +10197 -0
- package/fesm2015/buildingproduct-library.js.map +1 -0
- package/lib/account-dropdown/account-dropdown.component.d.ts +24 -0
- package/lib/account-dropdown/account-dropdown.module.d.ts +11 -0
- package/lib/account-dropdown/account-dropdown.service.d.ts +14 -0
- package/lib/checkout/add-new-address/add-new-address.component.d.ts +30 -0
- package/lib/checkout/checkout.module.d.ts +28 -0
- package/lib/checkout/custom-checkout/custom-checkout.component.d.ts +77 -0
- package/lib/checkout/order-confirmation/order-confirmation.component.d.ts +23 -0
- package/lib/checkout/order-review/delivery-information/delivery-information.component.d.ts +13 -0
- package/lib/checkout/order-review/order-review-grid/order-review-grid.component.d.ts +33 -0
- package/lib/checkout/order-review/order-review-list/order-review-list.component.d.ts +31 -0
- package/lib/checkout/order-review/order-review.component.d.ts +41 -0
- package/lib/constants/general.d.ts +50 -0
- package/lib/contact-us/contact-us.component.d.ts +13 -0
- package/lib/contact-us/contact-us.module.d.ts +9 -0
- package/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.d.ts +18 -0
- package/lib/custom-cart/custom-cart.component.d.ts +22 -0
- package/lib/custom-cart/custom-cart.module.d.ts +15 -0
- package/lib/custom-header-logo/custom-header-logo.component.d.ts +11 -0
- package/lib/custom-header-logo/custom-header-logo.module.d.ts +11 -0
- package/lib/custom-header-paragraph/custom-header-paragraph.component.d.ts +11 -0
- package/lib/custom-header-paragraph/custom-header-paragraph.module.d.ts +10 -0
- package/lib/custom-mini-cart/custom-mini-cart.component.d.ts +62 -0
- package/lib/custom-mini-cart/custom-mini-cart.module.d.ts +13 -0
- package/lib/custom-navigation/custom-navigation.component.d.ts +37 -0
- package/lib/custom-navigation/custom-navigation.module.d.ts +21 -0
- package/lib/custom-order-details/custom-order-details.component.d.ts +63 -0
- package/lib/custom-order-details/custom-order-details.module.d.ts +19 -0
- package/lib/custom-order-details/download-popup/download-popup.component.d.ts +15 -0
- package/lib/custom-order-details/order-detail-grid/order-detail-grid.component.d.ts +40 -0
- package/lib/custom-order-details/order-detail-list/order-detail-list.component.d.ts +35 -0
- package/lib/custom-order-history/custom-order-history.component.d.ts +99 -0
- package/lib/custom-order-history/custom-order-history.module.d.ts +19 -0
- package/lib/custom-order-history/slider-progress/slider-progress.component.d.ts +15 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.d.ts +33 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.d.ts +20 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.d.ts +65 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.d.ts +31 -0
- package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.d.ts +19 -0
- package/lib/custom-saved-cart/custom-saved-cart.component.d.ts +59 -0
- package/lib/custom-saved-cart/custom-saved-cart.module.d.ts +16 -0
- package/lib/custom-saved-cart/save-cart.service.d.ts +17 -0
- package/lib/custom-saved-cart/saved-cart-general.d.ts +88 -0
- package/lib/custom-saved-cart/saved-cart.service.d.ts +12 -0
- package/lib/custom-search/custom-search.component.d.ts +35 -0
- package/lib/custom-search/custom-search.module.d.ts +10 -0
- package/lib/custom-user-account/custom-user-account.component.d.ts +35 -0
- package/lib/custom-user-account/custom-user-account.module.d.ts +12 -0
- package/lib/directives/custom-directives.module.d.ts +8 -0
- package/lib/directives/custom-paginatior.directive.d.ts +29 -0
- package/lib/environments/environment.d.ts +12 -0
- package/lib/find-store/find-store.component.d.ts +34 -0
- package/lib/find-store/find-store.module.d.ts +12 -0
- package/lib/help-support/help-support.component.d.ts +11 -0
- package/lib/help-support/help-support.module.d.ts +9 -0
- package/lib/my-account/account-dashboard/account-dashboard.component.d.ts +34 -0
- package/lib/my-account/account-statements/account-statements.component.d.ts +24 -0
- package/lib/my-account/invoice-credit/invoice-credit.component.d.ts +66 -0
- package/lib/my-account/my-account.component.d.ts +26 -0
- package/lib/my-account/my-account.module.d.ts +20 -0
- package/lib/my-team/my-team.component.d.ts +103 -0
- package/lib/my-team/my-team.module.d.ts +18 -0
- package/lib/my-team/team-member.service.d.ts +17 -0
- package/lib/pipes/custom-date-pipe.pipe.d.ts +11 -0
- package/lib/services/account-dropdown-state.service.d.ts +10 -0
- package/lib/services/cart.service.d.ts +15 -0
- package/lib/services/checkout.service.d.ts +17 -0
- package/lib/services/endPointURL.d.ts +156 -0
- package/lib/services/find-store.service.d.ts +14 -0
- package/lib/services/logout.service.d.ts +11 -0
- package/lib/services/my-account.service.d.ts +16 -0
- package/lib/services/order-history.service.d.ts +14 -0
- package/lib/services/order.review.d.ts +11 -0
- package/lib/services/search.service.d.ts +11 -0
- package/lib/services/user-account-detail-service.service.d.ts +40 -0
- package/lib/shared/CustomProduct.d.ts +28 -0
- package/lib/shared/active-saved-cart/active-saved-cart.component.d.ts +58 -0
- package/lib/shared/custom-breadcrum/custom-breadcrum.component.d.ts +30 -0
- package/lib/shared/custom-cart-detail/custom-cart-detail.component.d.ts +32 -0
- package/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.d.ts +81 -0
- package/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.d.ts +72 -0
- package/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.d.ts +100 -0
- package/lib/shared/custom-cart-detail/split.pipe.d.ts +7 -0
- package/lib/shared/date-range-picker/date-range-picker.component.d.ts +39 -0
- package/lib/shared/regEx.validator.d.ts +10 -0
- package/lib/shared/saved-cart-popup/saved-cart-popup.component.d.ts +37 -0
- package/lib/shared/shared-components.module.d.ts +26 -0
- package/lib/shared/shared-download-order/shared-download-order.component.d.ts +40 -0
- package/lib/spa-custom-header.component.d.ts +11 -0
- package/lib/spa-custom-header.module.d.ts +27 -0
- package/lib/spa-custom-header.service.d.ts +6 -0
- package/lib/utils/utils.d.ts +6 -0
- package/lib/utils.d.ts +5 -0
- package/package.json +92 -0
- package/public-api.d.ts +31 -0
|
@@ -0,0 +1,622 @@
|
|
|
1
|
+
import { __rest } from "tslib";
|
|
2
|
+
import { Component, ViewChild, Input, Output, EventEmitter, } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { FormGroup } from '@angular/forms';
|
|
5
|
+
import { AccessoriesQuantity, ProductQuantity } from '../../CustomProduct';
|
|
6
|
+
import { RegexValidator, RegexConstants } from '../../regEx.validator';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/forms";
|
|
9
|
+
import * as i2 from "../../../services/cart.service";
|
|
10
|
+
import * as i3 from "@angular/router";
|
|
11
|
+
import * as i4 from "@spartacus/core";
|
|
12
|
+
import * as i5 from "@ng-bootstrap/ng-bootstrap";
|
|
13
|
+
import * as i6 from "@spartacus/storefront";
|
|
14
|
+
import * as i7 from "@angular/common";
|
|
15
|
+
export class CustomProductQuantityFormComponent {
|
|
16
|
+
constructor(formBuilder, cdr, cartService, router, productService, cmsService, modalService, activeCartService, currentProductService) {
|
|
17
|
+
this.formBuilder = formBuilder;
|
|
18
|
+
this.cdr = cdr;
|
|
19
|
+
this.cartService = cartService;
|
|
20
|
+
this.router = router;
|
|
21
|
+
this.productService = productService;
|
|
22
|
+
this.cmsService = cmsService;
|
|
23
|
+
this.modalService = modalService;
|
|
24
|
+
this.activeCartService = activeCartService;
|
|
25
|
+
this.currentProductService = currentProductService;
|
|
26
|
+
this.env = sessionStorage.getItem('env');
|
|
27
|
+
this.environment = JSON.parse(this.env);
|
|
28
|
+
this.isDesktop = true;
|
|
29
|
+
this.isMobile = false;
|
|
30
|
+
this.isTablet = false;
|
|
31
|
+
this.totalPrice = "0.0";
|
|
32
|
+
this.hasBundle = false;
|
|
33
|
+
this.unitType = "per LM";
|
|
34
|
+
this.accessoriesPrice = 0;
|
|
35
|
+
this.selectedColour = null;
|
|
36
|
+
this.isFinishedProduct = false;
|
|
37
|
+
this.isFlashingProduct = false;
|
|
38
|
+
this.listView = true;
|
|
39
|
+
this.productForm = new FormGroup({});
|
|
40
|
+
this.disableAddMore = false;
|
|
41
|
+
this.bundleList = [];
|
|
42
|
+
this.errorIndex = [];
|
|
43
|
+
this.hasProdRefIndex = [];
|
|
44
|
+
this.hasProdRef = false;
|
|
45
|
+
this.hasMinlengthError = [];
|
|
46
|
+
this.rowIndex = 0;
|
|
47
|
+
this.showWaitCursor = new BehaviorSubject(true);
|
|
48
|
+
this.addToCartError = null;
|
|
49
|
+
this.modalBundleForm = new FormGroup({});
|
|
50
|
+
this.editProdBundle = "";
|
|
51
|
+
this.editProdRef = "";
|
|
52
|
+
this.selectedIndex = null;
|
|
53
|
+
this.hasData = false;
|
|
54
|
+
this.product$ = this.currentProductService.getProduct();
|
|
55
|
+
this.updateCartEntires = new EventEmitter();
|
|
56
|
+
this.addMoreClicked = new EventEmitter();
|
|
57
|
+
}
|
|
58
|
+
ngOnInit() {
|
|
59
|
+
var _a;
|
|
60
|
+
const cartObj = localStorage.getItem("spartacus⚿dimond-spa⚿cart");
|
|
61
|
+
this.cartId = (_a = JSON.parse(cartObj)) === null || _a === void 0 ? void 0 : _a.active;
|
|
62
|
+
this.screenWidth = window.innerWidth + "px";
|
|
63
|
+
if (this.productDetails) {
|
|
64
|
+
this.createProductForm();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
ngOnChanges(changes) {
|
|
68
|
+
var _a;
|
|
69
|
+
if (!((_a = changes === null || changes === void 0 ? void 0 : changes.productDetails) === null || _a === void 0 ? void 0 : _a.firstChange)) {
|
|
70
|
+
this.updateFormDetails();
|
|
71
|
+
this.cdr.detectChanges();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
updateFormDetails() {
|
|
75
|
+
var _a, _b, _c, _d, _e;
|
|
76
|
+
if (this.isFinishedProduct) {
|
|
77
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[0]) === null || _b === void 0 ? void 0 : _b.patchValue({
|
|
78
|
+
prodQty: (_c = this.productDetails) === null || _c === void 0 ? void 0 : _c.quantity,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
(_e = (_d = this.productDetails) === null || _d === void 0 ? void 0 : _d.subLineConfigInfos) === null || _e === void 0 ? void 0 : _e.forEach((val, index) => {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
if (!this.isNullOrEmpty(val === null || val === void 0 ? void 0 : val.bundleName)) {
|
|
85
|
+
this.hasBundle = true;
|
|
86
|
+
(_b = (_a = this.productForm) === null || _a === void 0 ? void 0 : _a.get("bundling")) === null || _b === void 0 ? void 0 : _b.setValue(true);
|
|
87
|
+
}
|
|
88
|
+
this.productQuantityForm.controls[index].patchValue({
|
|
89
|
+
prodBundle: val === null || val === void 0 ? void 0 : val.bundleName,
|
|
90
|
+
prodLen: this.pad3Digits(val === null || val === void 0 ? void 0 : val.length),
|
|
91
|
+
prodQty: val === null || val === void 0 ? void 0 : val.quantity,
|
|
92
|
+
prodRef: val === null || val === void 0 ? void 0 : val.reference,
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
this.cdr.detectChanges();
|
|
97
|
+
}
|
|
98
|
+
// Create a Product Quantity Form
|
|
99
|
+
createProductForm() {
|
|
100
|
+
var _a, _b, _c, _d, _e;
|
|
101
|
+
this.accessoriesPrice = 0;
|
|
102
|
+
this.totalLength = null;
|
|
103
|
+
this.totalPrice = "0.0";
|
|
104
|
+
this.hasBundle = false;
|
|
105
|
+
this.disableAddMore = false;
|
|
106
|
+
this.bundleList = [];
|
|
107
|
+
this.errorIndex = [];
|
|
108
|
+
this.hasProdRefIndex = [];
|
|
109
|
+
this.rowIndex = 0;
|
|
110
|
+
this.productForm = new FormGroup({});
|
|
111
|
+
this.addToCartError = null;
|
|
112
|
+
this.productForm = this.formBuilder.group({
|
|
113
|
+
bundling: [""],
|
|
114
|
+
productQuantity: this.formBuilder.array([]),
|
|
115
|
+
jobReference: ["", [RegexValidator(RegexConstants.JOB_REFERENCE)]],
|
|
116
|
+
});
|
|
117
|
+
this.editProdBundle = "";
|
|
118
|
+
this.editProdRef = "";
|
|
119
|
+
this.selectedIndex = null;
|
|
120
|
+
this.hasProdRef = false;
|
|
121
|
+
this.hasMinlengthError = [];
|
|
122
|
+
if (this.isFinishedProduct) {
|
|
123
|
+
this.addProductQuantityFormGroup();
|
|
124
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[0]) === null || _b === void 0 ? void 0 : _b.patchValue({
|
|
125
|
+
prodQty: (_c = this.productDetails) === null || _c === void 0 ? void 0 : _c.quantity,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.modalBundleForm = this.formBuilder.group({
|
|
130
|
+
modBundle: ["", [RegexValidator(RegexConstants.BUNDLE_NAME)]],
|
|
131
|
+
modRef: ["", [RegexValidator(RegexConstants.JOB_REFERENCE)]],
|
|
132
|
+
});
|
|
133
|
+
(_e = (_d = this.productDetails) === null || _d === void 0 ? void 0 : _d.subLineConfigInfos) === null || _e === void 0 ? void 0 : _e.forEach((val, index) => {
|
|
134
|
+
var _a, _b;
|
|
135
|
+
this.addProductQuantityFormGroup();
|
|
136
|
+
if (!this.isNullOrEmpty(val === null || val === void 0 ? void 0 : val.bundleName)) {
|
|
137
|
+
this.hasBundle = true;
|
|
138
|
+
(_b = (_a = this.productForm) === null || _a === void 0 ? void 0 : _a.get("bundling")) === null || _b === void 0 ? void 0 : _b.setValue(true);
|
|
139
|
+
}
|
|
140
|
+
this.productQuantityForm.controls[index].patchValue({
|
|
141
|
+
prodBundle: val === null || val === void 0 ? void 0 : val.bundleName,
|
|
142
|
+
prodLen: this.pad3Digits(val === null || val === void 0 ? void 0 : val.length),
|
|
143
|
+
prodQty: val === null || val === void 0 ? void 0 : val.quantity,
|
|
144
|
+
prodRef: val === null || val === void 0 ? void 0 : val.reference,
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
this.cdr.detectChanges();
|
|
149
|
+
}
|
|
150
|
+
// Updating the Bundle
|
|
151
|
+
updateBundling(event) {
|
|
152
|
+
var _a, _b, _c;
|
|
153
|
+
this.hasBundle = ((_a = event.currentTarget) === null || _a === void 0 ? void 0 : _a.checked) === true;
|
|
154
|
+
if (this.hasBundle) {
|
|
155
|
+
(_c = (_b = this.productQuantityForm) === null || _b === void 0 ? void 0 : _b.controls) === null || _c === void 0 ? void 0 : _c.forEach((element, index) => {
|
|
156
|
+
this.updateSameBundleReference(null, index);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
this.updateTotal();
|
|
160
|
+
}
|
|
161
|
+
// Check if any value is empty or undefined
|
|
162
|
+
isNullOrEmpty(value) {
|
|
163
|
+
return value == null || value == undefined || value == "";
|
|
164
|
+
}
|
|
165
|
+
// Check for any errors while updating the quantity
|
|
166
|
+
hasErrorIndex(index) {
|
|
167
|
+
return this.errorIndex[index] == true;
|
|
168
|
+
}
|
|
169
|
+
// Check if any Same Reference Error
|
|
170
|
+
hasProdRefErrorIndex(index) {
|
|
171
|
+
return this.hasProdRefIndex[index] == true;
|
|
172
|
+
}
|
|
173
|
+
// Group the Quantity values based on bundle
|
|
174
|
+
groupByBundle(items, key) {
|
|
175
|
+
return items.reduce((result, item) => (Object.assign(Object.assign({}, result), { [item[key]]: [...(result[item[key]] || []), item] })), {});
|
|
176
|
+
}
|
|
177
|
+
// Check the total bundle weight and update the error if it reaches to maximum bundle size for each bundle
|
|
178
|
+
checkTotalBundleWeight(formValues) {
|
|
179
|
+
var _a, _b;
|
|
180
|
+
let groupTotal = 0;
|
|
181
|
+
formValues === null || formValues === void 0 ? void 0 : formValues.forEach((currentValue) => {
|
|
182
|
+
const qty = parseFloat(currentValue === null || currentValue === void 0 ? void 0 : currentValue.prodQty);
|
|
183
|
+
const len = parseFloat(currentValue === null || currentValue === void 0 ? void 0 : currentValue.prodLen);
|
|
184
|
+
if (!this.isNullOrEmpty(qty) && !this.isNullOrEmpty(len)) {
|
|
185
|
+
groupTotal += qty * len;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
groupTotal = groupTotal * (((_a = this.cuttingValidation) === null || _a === void 0 ? void 0 : _a.weightPerLM) || 1);
|
|
189
|
+
return groupTotal > (((_b = this.cuttingValidation) === null || _b === void 0 ? void 0 : _b.maxBundleLoad) || 1000);
|
|
190
|
+
}
|
|
191
|
+
// Get the last row of a bundle based on bundle name
|
|
192
|
+
getLastBundleIndex(bundleName) {
|
|
193
|
+
var _a, _b;
|
|
194
|
+
let indexValue = null;
|
|
195
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.getRawValue()) === null || _b === void 0 ? void 0 : _b.forEach((element, index) => {
|
|
196
|
+
var _a;
|
|
197
|
+
if (((_a = element === null || element === void 0 ? void 0 : element.prodBundle) === null || _a === void 0 ? void 0 : _a.toUpperCase()) == (bundleName === null || bundleName === void 0 ? void 0 : bundleName.toUpperCase())) {
|
|
198
|
+
indexValue = index;
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
return indexValue;
|
|
202
|
+
}
|
|
203
|
+
// Get the Reference value of the same bundle and update
|
|
204
|
+
getPrevBundleReferenceValue(index) {
|
|
205
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
206
|
+
const bundleName = this.selectedIndex == null
|
|
207
|
+
? (_d = (_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("prodBundle")) === null || _c === void 0 ? void 0 : _c.value) === null || _d === void 0 ? void 0 : _d.toUpperCase()
|
|
208
|
+
: (_g = (_f = (_e = this.modalBundleForm) === null || _e === void 0 ? void 0 : _e.get("modBundle")) === null || _f === void 0 ? void 0 : _f.value) === null || _g === void 0 ? void 0 : _g.toUpperCase();
|
|
209
|
+
let refValue = "";
|
|
210
|
+
(_h = this.productQuantityForm) === null || _h === void 0 ? void 0 : _h.controls.forEach((element, ind) => {
|
|
211
|
+
var _a, _b, _c, _d, _e;
|
|
212
|
+
const otherRefValue = (_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[ind]) === null || _b === void 0 ? void 0 : _b.get("prodRef")) === null || _c === void 0 ? void 0 : _c.value;
|
|
213
|
+
if (((_e = (_d = element === null || element === void 0 ? void 0 : element.value) === null || _d === void 0 ? void 0 : _d.prodBundle) === null || _e === void 0 ? void 0 : _e.toUpperCase()) ==
|
|
214
|
+
(bundleName === null || bundleName === void 0 ? void 0 : bundleName.toUpperCase()) &&
|
|
215
|
+
(ind != index || this.selectedIndex != null) &&
|
|
216
|
+
!this.isNullOrEmpty(otherRefValue)) {
|
|
217
|
+
refValue = otherRefValue;
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
return refValue || "";
|
|
221
|
+
}
|
|
222
|
+
// Check if Same Refrence is already used
|
|
223
|
+
checkHasSameReference(index, currentReference, bundleName) {
|
|
224
|
+
var _a, _b;
|
|
225
|
+
let hasRef = false;
|
|
226
|
+
const prodRefValues = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls) === null || _b === void 0 ? void 0 : _b.filter((element) => {
|
|
227
|
+
var _a, _b, _c;
|
|
228
|
+
return (((_a = element === null || element === void 0 ? void 0 : element.value) === null || _a === void 0 ? void 0 : _a.prodRef) == currentReference &&
|
|
229
|
+
((_c = (_b = element === null || element === void 0 ? void 0 : element.value) === null || _b === void 0 ? void 0 : _b.prodBundle) === null || _c === void 0 ? void 0 : _c.toUpperCase()) !=
|
|
230
|
+
(bundleName === null || bundleName === void 0 ? void 0 : bundleName.toUpperCase()) &&
|
|
231
|
+
!this.isNullOrEmpty(currentReference));
|
|
232
|
+
});
|
|
233
|
+
if ((prodRefValues === null || prodRefValues === void 0 ? void 0 : prodRefValues.length) > 0) {
|
|
234
|
+
this.hasProdRefIndex[index] = true;
|
|
235
|
+
hasRef = true;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
this.hasProdRefIndex[index] = false;
|
|
239
|
+
}
|
|
240
|
+
this.cdr.detectChanges();
|
|
241
|
+
return hasRef;
|
|
242
|
+
}
|
|
243
|
+
// Update the Reference Value if already the same bundle is present
|
|
244
|
+
updateSameBundleReference(event, index, isReference = false) {
|
|
245
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
246
|
+
const bundleName = ((_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("prodBundle")) === null || _c === void 0 ? void 0 : _c.value) ||
|
|
247
|
+
((_d = this.modalBundleForm.get("modBundle")) === null || _d === void 0 ? void 0 : _d.value);
|
|
248
|
+
const newRefValue = event != null
|
|
249
|
+
? event.currentTarget.value
|
|
250
|
+
: ((_g = (_f = (_e = this.productQuantityForm) === null || _e === void 0 ? void 0 : _e.controls[index]) === null || _f === void 0 ? void 0 : _f.get("prodRef")) === null || _g === void 0 ? void 0 : _g.value) ||
|
|
251
|
+
((_h = this.modalBundleForm) === null || _h === void 0 ? void 0 : _h.get("modRef").value);
|
|
252
|
+
isReference = isReference
|
|
253
|
+
? this.checkHasSameReference(index, newRefValue, bundleName)
|
|
254
|
+
: false;
|
|
255
|
+
if (!isReference) {
|
|
256
|
+
this.productQuantityForm.controls.forEach((element, ind) => {
|
|
257
|
+
var _a, _b, _c, _d, _e;
|
|
258
|
+
if (((_b = (_a = element === null || element === void 0 ? void 0 : element.value) === null || _a === void 0 ? void 0 : _a.prodBundle) === null || _b === void 0 ? void 0 : _b.toUpperCase()) ==
|
|
259
|
+
(bundleName === null || bundleName === void 0 ? void 0 : bundleName.toUpperCase()) &&
|
|
260
|
+
ind != index &&
|
|
261
|
+
!this.isNullOrEmpty(newRefValue) &&
|
|
262
|
+
!this.isNullOrEmpty(bundleName)) {
|
|
263
|
+
(_e = (_d = (_c = this.productQuantityForm) === null || _c === void 0 ? void 0 : _c.controls[ind]) === null || _d === void 0 ? void 0 : _d.get("prodRef")) === null || _e === void 0 ? void 0 : _e.setValue(newRefValue);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
this.cdr.detectChanges();
|
|
268
|
+
}
|
|
269
|
+
// Update the same Bundle Refrence Value to all other Bundles if any changes in Reference Value
|
|
270
|
+
populateSameBundleReference(event, index) {
|
|
271
|
+
var _a, _b, _c, _d, _e;
|
|
272
|
+
if (event) {
|
|
273
|
+
const prevRefValue = this.getPrevBundleReferenceValue(index);
|
|
274
|
+
if (!this.isNullOrEmpty(prevRefValue)) {
|
|
275
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index].get("prodRef")) === null || _b === void 0 ? void 0 : _b.setValue(prevRefValue);
|
|
276
|
+
this.modalBundleForm.get("modRef").setValue(prevRefValue);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
if (!this.isNullOrEmpty(this.getPrevBundleReferenceValue(index))) {
|
|
281
|
+
(_e = (_d = (_c = this.productQuantityForm) === null || _c === void 0 ? void 0 : _c.controls[index]) === null || _d === void 0 ? void 0 : _d.get("prodRef")) === null || _e === void 0 ? void 0 : _e.setValue(this.getPrevBundleReferenceValue(index) || "");
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
this.cdr.detectChanges();
|
|
285
|
+
}
|
|
286
|
+
// Update the Bundle List if more than one bundle/rows
|
|
287
|
+
updateBundleList() {
|
|
288
|
+
var _a, _b;
|
|
289
|
+
const formValues = this.groupByBundle((_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.getRawValue(), "prodBundle");
|
|
290
|
+
if (((_b = Object.keys(formValues)) === null || _b === void 0 ? void 0 : _b.length) > 1) {
|
|
291
|
+
this.bundleList = Object.keys(formValues);
|
|
292
|
+
}
|
|
293
|
+
this.cdr.detectChanges();
|
|
294
|
+
}
|
|
295
|
+
// Get Bundle values only for mobile view
|
|
296
|
+
getBundleValues(index) {
|
|
297
|
+
var _a, _b, _c, _d, _e, _f;
|
|
298
|
+
const bundleValues = [];
|
|
299
|
+
bundleValues.push((_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("prodBundle")) === null || _c === void 0 ? void 0 : _c.value);
|
|
300
|
+
bundleValues.push((_f = (_e = (_d = this.productQuantityForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get("prodRef")) === null || _f === void 0 ? void 0 : _f.value);
|
|
301
|
+
return bundleValues;
|
|
302
|
+
}
|
|
303
|
+
// Edit Bundle Values
|
|
304
|
+
editBundleValue(index) {
|
|
305
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
306
|
+
this.selectedIndex = index;
|
|
307
|
+
(_a = this.modalBundleForm) === null || _a === void 0 ? void 0 : _a.get("modBundle").setValue((_e = (_d = (_c = (_b = this.productQuantityForm) === null || _b === void 0 ? void 0 : _b.controls[index]) === null || _c === void 0 ? void 0 : _c.get("prodBundle")) === null || _d === void 0 ? void 0 : _d.value) === null || _e === void 0 ? void 0 : _e.toUpperCase());
|
|
308
|
+
(_g = (_f = this.modalBundleForm) === null || _f === void 0 ? void 0 : _f.get("modRef")) === null || _g === void 0 ? void 0 : _g.setValue((_k = (_j = (_h = this.productQuantityForm) === null || _h === void 0 ? void 0 : _h.controls[index]) === null || _j === void 0 ? void 0 : _j.get("prodRef")) === null || _k === void 0 ? void 0 : _k.value);
|
|
309
|
+
this.cdr.detectChanges();
|
|
310
|
+
}
|
|
311
|
+
// Update/Save Bundle values
|
|
312
|
+
saveBundleDetails(event) {
|
|
313
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
314
|
+
(_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[this.selectedIndex]) === null || _b === void 0 ? void 0 : _b.get("prodBundle")) === null || _c === void 0 ? void 0 : _c.setValue((_e = (_d = this.modalBundleForm) === null || _d === void 0 ? void 0 : _d.get("modBundle")) === null || _e === void 0 ? void 0 : _e.value.toUpperCase());
|
|
315
|
+
(_h = (_g = (_f = this.productQuantityForm) === null || _f === void 0 ? void 0 : _f.controls[this.selectedIndex]) === null || _g === void 0 ? void 0 : _g.get("prodRef")) === null || _h === void 0 ? void 0 : _h.setValue((_k = (_j = this.modalBundleForm) === null || _j === void 0 ? void 0 : _j.get("modRef")) === null || _k === void 0 ? void 0 : _k.value);
|
|
316
|
+
this.updateSameBundleReference(null, this.selectedIndex, true);
|
|
317
|
+
this.updateTotal();
|
|
318
|
+
this.selectedIndex = null;
|
|
319
|
+
this.closebutton.nativeElement.click();
|
|
320
|
+
}
|
|
321
|
+
// Update Cart Deatils
|
|
322
|
+
updateCartDetails() {
|
|
323
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
324
|
+
if (this.isValidForm()) {
|
|
325
|
+
let payLoad = {};
|
|
326
|
+
if (this.isFinishedProduct) {
|
|
327
|
+
payLoad = {
|
|
328
|
+
quantity: (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[0].get("prodQty")) === null || _b === void 0 ? void 0 : _b.value,
|
|
329
|
+
product: {
|
|
330
|
+
code: (_d = (_c = this.productDetails) === null || _c === void 0 ? void 0 : _c.product) === null || _d === void 0 ? void 0 : _d.code,
|
|
331
|
+
},
|
|
332
|
+
jobReference: (_f = (_e = this.productDetails) === null || _e === void 0 ? void 0 : _e.product) === null || _f === void 0 ? void 0 : _f.jobReference,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
payLoad = {
|
|
337
|
+
quantity: 1,
|
|
338
|
+
configurationInfos: [(_g = this.productDetails) === null || _g === void 0 ? void 0 : _g.configValues],
|
|
339
|
+
subLineConfigInfos: [],
|
|
340
|
+
jobReference: (_j = (_h = this.productDetails) === null || _h === void 0 ? void 0 : _h.product) === null || _j === void 0 ? void 0 : _j.jobReference,
|
|
341
|
+
};
|
|
342
|
+
(_l = (_k = this.productQuantityForm) === null || _k === void 0 ? void 0 : _k.controls) === null || _l === void 0 ? void 0 : _l.forEach((element, index) => {
|
|
343
|
+
var _a, _b, _c, _d, _e;
|
|
344
|
+
const configInfos = {
|
|
345
|
+
configuratorType: "CUTTING",
|
|
346
|
+
quantity: (_a = element === null || element === void 0 ? void 0 : element.value) === null || _a === void 0 ? void 0 : _a.prodQty,
|
|
347
|
+
length: (_b = element === null || element === void 0 ? void 0 : element.value) === null || _b === void 0 ? void 0 : _b.prodLen,
|
|
348
|
+
};
|
|
349
|
+
if (this.hasBundle && ((_c = element === null || element === void 0 ? void 0 : element.value) === null || _c === void 0 ? void 0 : _c.prodBundle)) {
|
|
350
|
+
configInfos.bundleName = (_d = element === null || element === void 0 ? void 0 : element.value) === null || _d === void 0 ? void 0 : _d.prodBundle;
|
|
351
|
+
configInfos.reference = (_e = element === null || element === void 0 ? void 0 : element.value) === null || _e === void 0 ? void 0 : _e.prodRef;
|
|
352
|
+
}
|
|
353
|
+
payLoad.subLineConfigInfos.push(configInfos);
|
|
354
|
+
});
|
|
355
|
+
if ((payLoad === null || payLoad === void 0 ? void 0 : payLoad.configurationInfos) &&
|
|
356
|
+
((_m = payLoad === null || payLoad === void 0 ? void 0 : payLoad.configurationInfos) === null || _m === void 0 ? void 0 : _m.length) > 0 &&
|
|
357
|
+
this.isNullOrEmpty(payLoad === null || payLoad === void 0 ? void 0 : payLoad.configurationInfos[0])) {
|
|
358
|
+
payLoad === null || payLoad === void 0 ? true : delete payLoad.configurationInfos;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
this.cartService
|
|
362
|
+
.updateCartEntry(this.cartId, (_o = this.productDetails) === null || _o === void 0 ? void 0 : _o.entryNumber, payLoad)
|
|
363
|
+
.subscribe((response) => {
|
|
364
|
+
var _a;
|
|
365
|
+
if (response) {
|
|
366
|
+
if (((_a = response === null || response === void 0 ? void 0 : response.statusCode) === null || _a === void 0 ? void 0 : _a.toLowerCase()) == "success") {
|
|
367
|
+
this.activeCartService.reloadActiveCart();
|
|
368
|
+
this.updateCartEntires.emit(true);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
if (response === null || response === void 0 ? void 0 : response.configurationLineNumber) {
|
|
372
|
+
this.errorIndex[(response === null || response === void 0 ? void 0 : response.configurationLineNumber) - 1] = true;
|
|
373
|
+
}
|
|
374
|
+
this.addToCartError =
|
|
375
|
+
(response === null || response === void 0 ? void 0 : response.message) ||
|
|
376
|
+
(response === null || response === void 0 ? void 0 : response.errorMessage) ||
|
|
377
|
+
(response === null || response === void 0 ? void 0 : response.statusMessage);
|
|
378
|
+
this.cdr.detectChanges();
|
|
379
|
+
//this.updateCartEntires.emit(this.addToCartError);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}, (error) => {
|
|
383
|
+
var _a, _b, _c, _d;
|
|
384
|
+
this.addToCartError =
|
|
385
|
+
((_b = (_a = error === null || error === void 0 ? void 0 : error.error) === null || _a === void 0 ? void 0 : _a.errors[0]) === null || _b === void 0 ? void 0 : _b.message) ||
|
|
386
|
+
((_d = (_c = error === null || error === void 0 ? void 0 : error.error) === null || _c === void 0 ? void 0 : _c.errors[0]) === null || _d === void 0 ? void 0 : _d.errorMessage);
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// Update Total Price and Total length based on user inputs on each row
|
|
391
|
+
updateTotal() {
|
|
392
|
+
var _a, _b, _c, _d;
|
|
393
|
+
this.totalLength = 0;
|
|
394
|
+
this.totalPrice = 0;
|
|
395
|
+
if (!this.isFinishedProduct) {
|
|
396
|
+
const formValues = this.groupByBundle((_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.getRawValue(), "prodBundle");
|
|
397
|
+
this.productQuantityForm.controls.forEach((element, index) => {
|
|
398
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
399
|
+
const qty = parseFloat((_a = element === null || element === void 0 ? void 0 : element.value) === null || _a === void 0 ? void 0 : _a.prodQty);
|
|
400
|
+
const len = parseFloat((_b = element === null || element === void 0 ? void 0 : element.value) === null || _b === void 0 ? void 0 : _b.prodLen);
|
|
401
|
+
const currentBundleName = (_d = (_c = element === null || element === void 0 ? void 0 : element.value) === null || _c === void 0 ? void 0 : _c.prodBundle) === null || _d === void 0 ? void 0 : _d.toUpperCase();
|
|
402
|
+
let total = 0;
|
|
403
|
+
if (!this.isNullOrEmpty(qty) &&
|
|
404
|
+
!this.isNullOrEmpty(len) &&
|
|
405
|
+
!isNaN(qty) &&
|
|
406
|
+
!isNaN(len)) {
|
|
407
|
+
total = qty * len;
|
|
408
|
+
if (!this.hasBundle) {
|
|
409
|
+
this.errorIndex[index] =
|
|
410
|
+
total * (((_e = this.cuttingValidation) === null || _e === void 0 ? void 0 : _e.weightPerLM) || 1) >
|
|
411
|
+
(((_f = this.cuttingValidation) === null || _f === void 0 ? void 0 : _f.maxBundleLoad) || 1000)
|
|
412
|
+
? true
|
|
413
|
+
: false;
|
|
414
|
+
}
|
|
415
|
+
else if (this.checkTotalBundleWeight(formValues[currentBundleName])) {
|
|
416
|
+
const errorIndexNo = this.getLastBundleIndex(currentBundleName);
|
|
417
|
+
if (!this.isNullOrEmpty(errorIndexNo)) {
|
|
418
|
+
this.errorIndex[errorIndexNo] = true;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
this.errorIndex[index] = false;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
if (!isNaN(qty) && !isNaN(len)) {
|
|
426
|
+
this.totalLength = this.totalLength + total;
|
|
427
|
+
this.totalPrice =
|
|
428
|
+
this.totalLength * ((_h = (_g = this.productDetails) === null || _g === void 0 ? void 0 : _g.price) === null || _h === void 0 ? void 0 : _h.value);
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
this.totalLength = null;
|
|
434
|
+
const qty = (_d = (_c = (_b = this.productQuantityForm) === null || _b === void 0 ? void 0 : _b.controls[0]) === null || _c === void 0 ? void 0 : _c.get("prodQty")) === null || _d === void 0 ? void 0 : _d.value;
|
|
435
|
+
if (!isNaN(qty)) {
|
|
436
|
+
this.totalPrice = qty * this.accessoriesPrice;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
this.updateCartDetails();
|
|
440
|
+
}
|
|
441
|
+
// Utility Function to get Key Values
|
|
442
|
+
getKeyValues(source, search) {
|
|
443
|
+
if (typeof source !== "object") {
|
|
444
|
+
return [];
|
|
445
|
+
}
|
|
446
|
+
const [key, next] = Object.keys(source);
|
|
447
|
+
const _a = source, _b = key, value = _a[_b], rest = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
|
|
448
|
+
return [
|
|
449
|
+
...(key === search ? [value] : this.getKeyValues(value, search)),
|
|
450
|
+
...(next ? this.getKeyValues(rest, search) : []),
|
|
451
|
+
];
|
|
452
|
+
}
|
|
453
|
+
// Get the values of Quantity Form
|
|
454
|
+
getProductQuantityFormGroup() {
|
|
455
|
+
return this.formBuilder.group(this.isFinishedProduct ? new AccessoriesQuantity() : new ProductQuantity());
|
|
456
|
+
}
|
|
457
|
+
get productQuantityForm() {
|
|
458
|
+
return this.productForm.get("productQuantity");
|
|
459
|
+
}
|
|
460
|
+
// Add the Quanity Form when user clicks on Add More button
|
|
461
|
+
addProductQuantityFormGroup(event) {
|
|
462
|
+
var _a, _b, _c;
|
|
463
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
464
|
+
(_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.push(this.getProductQuantityFormGroup());
|
|
465
|
+
const bundles = this.groupByBundle((_b = this.productQuantityForm) === null || _b === void 0 ? void 0 : _b.getRawValue(), "prodBundle");
|
|
466
|
+
this.disableAddMore = ((_c = this.productQuantityForm) === null || _c === void 0 ? void 0 : _c.length) > 99;
|
|
467
|
+
this.errorIndex[this.rowIndex] = false;
|
|
468
|
+
this.hasProdRefIndex[this.rowIndex++] = false;
|
|
469
|
+
this.cdr.detectChanges();
|
|
470
|
+
this.addMoreClicked.emit();
|
|
471
|
+
}
|
|
472
|
+
// Update the Quantity form if user clicks on remove button
|
|
473
|
+
removeProductQuantityForm(index, event) {
|
|
474
|
+
var _a;
|
|
475
|
+
event.preventDefault();
|
|
476
|
+
this.productQuantityForm.removeAt(index);
|
|
477
|
+
this.rowIndex--;
|
|
478
|
+
this.disableAddMore = ((_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.length) > 99;
|
|
479
|
+
this.cdr.detectChanges();
|
|
480
|
+
this.updateTotal();
|
|
481
|
+
this.addMoreClicked.emit();
|
|
482
|
+
}
|
|
483
|
+
// Get Job Reference Errors
|
|
484
|
+
jobReferenceErrors() {
|
|
485
|
+
var _a, _b;
|
|
486
|
+
return (_b = (_a = this.productForm) === null || _a === void 0 ? void 0 : _a.get("jobReference")) === null || _b === void 0 ? void 0 : _b.errors;
|
|
487
|
+
}
|
|
488
|
+
// Get Product Quantity Errors
|
|
489
|
+
prodQtyErrors(index) {
|
|
490
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
491
|
+
return ((((_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("prodQty")) === null || _c === void 0 ? void 0 : _c.errors) ||
|
|
492
|
+
((_f = (_e = (_d = this.productQuantityForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get("prodQty")) === null || _f === void 0 ? void 0 : _f.invalid)) &&
|
|
493
|
+
(((_j = (_h = (_g = this.productQuantityForm) === null || _g === void 0 ? void 0 : _g.controls[index]) === null || _h === void 0 ? void 0 : _h.get("prodQty")) === null || _j === void 0 ? void 0 : _j.dirty) ||
|
|
494
|
+
((_m = (_l = (_k = this.productQuantityForm) === null || _k === void 0 ? void 0 : _k.controls[index]) === null || _l === void 0 ? void 0 : _l.get("prodQty")) === null || _m === void 0 ? void 0 : _m.touched)));
|
|
495
|
+
}
|
|
496
|
+
// Get Product Length Errors
|
|
497
|
+
prodLenErrors(index) {
|
|
498
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
499
|
+
return ((((_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("prodLen")) === null || _c === void 0 ? void 0 : _c.errors) ||
|
|
500
|
+
((_f = (_e = (_d = this.productQuantityForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get("prodLen")) === null || _f === void 0 ? void 0 : _f.invalid)) &&
|
|
501
|
+
(((_j = (_h = (_g = this.productQuantityForm) === null || _g === void 0 ? void 0 : _g.controls[index]) === null || _h === void 0 ? void 0 : _h.get("prodLen")) === null || _j === void 0 ? void 0 : _j.dirty) ||
|
|
502
|
+
((_m = (_l = (_k = this.productQuantityForm) === null || _k === void 0 ? void 0 : _k.controls[index]) === null || _l === void 0 ? void 0 : _l.get("prodLen")) === null || _m === void 0 ? void 0 : _m.touched)));
|
|
503
|
+
}
|
|
504
|
+
// Get Product Length Errors
|
|
505
|
+
minLenErrors(index) {
|
|
506
|
+
var _a;
|
|
507
|
+
return ((_a = this.hasMinlengthError) === null || _a === void 0 ? void 0 : _a.indexOf(index)) !== -1;
|
|
508
|
+
}
|
|
509
|
+
// Get Product Bundle Errors
|
|
510
|
+
prodBundleErrors(index) {
|
|
511
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
512
|
+
return ((((_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("prodBundle")) === null || _c === void 0 ? void 0 : _c.errors) ||
|
|
513
|
+
((_f = (_e = (_d = this.productQuantityForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get("prodBundle")) === null || _f === void 0 ? void 0 : _f.invalid)) &&
|
|
514
|
+
(((_j = (_h = (_g = this.productQuantityForm) === null || _g === void 0 ? void 0 : _g.controls[index]) === null || _h === void 0 ? void 0 : _h.get("prodBundle")) === null || _j === void 0 ? void 0 : _j.dirty) ||
|
|
515
|
+
((_m = (_l = (_k = this.productQuantityForm) === null || _k === void 0 ? void 0 : _k.controls[index]) === null || _l === void 0 ? void 0 : _l.get("prodBundle")) === null || _m === void 0 ? void 0 : _m.touched)));
|
|
516
|
+
}
|
|
517
|
+
// Get Product Bunlde Reference Errors
|
|
518
|
+
prodRefErrors(index) {
|
|
519
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
520
|
+
return ((((_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("prodRef")) === null || _c === void 0 ? void 0 : _c.errors) ||
|
|
521
|
+
((_f = (_e = (_d = this.productQuantityForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get("prodRef")) === null || _f === void 0 ? void 0 : _f.invalid)) &&
|
|
522
|
+
(((_j = (_h = (_g = this.productQuantityForm) === null || _g === void 0 ? void 0 : _g.controls[index]) === null || _h === void 0 ? void 0 : _h.get("prodRef")) === null || _j === void 0 ? void 0 : _j.dirty) ||
|
|
523
|
+
((_m = (_l = (_k = this.productQuantityForm) === null || _k === void 0 ? void 0 : _k.controls[index]) === null || _l === void 0 ? void 0 : _l.get("prodRef")) === null || _m === void 0 ? void 0 : _m.touched)));
|
|
524
|
+
}
|
|
525
|
+
// Check if form is Valid or not
|
|
526
|
+
isValidForm() {
|
|
527
|
+
var _a, _b, _c;
|
|
528
|
+
let valid = true;
|
|
529
|
+
if (this.hasBundle) {
|
|
530
|
+
return (_a = this.productForm) === null || _a === void 0 ? void 0 : _a.valid;
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
(_c = (_b = this.productQuantityForm) === null || _b === void 0 ? void 0 : _b.controls) === null || _c === void 0 ? void 0 : _c.forEach((element) => {
|
|
534
|
+
var _a, _b, _c;
|
|
535
|
+
valid = this.isFinishedProduct
|
|
536
|
+
? (_a = element === null || element === void 0 ? void 0 : element.get("prodQty")) === null || _a === void 0 ? void 0 : _a.valid
|
|
537
|
+
: ((_b = element === null || element === void 0 ? void 0 : element.get("prodLen")) === null || _b === void 0 ? void 0 : _b.valid) && ((_c = element === null || element === void 0 ? void 0 : element.get("prodQty")) === null || _c === void 0 ? void 0 : _c.valid);
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
return valid;
|
|
541
|
+
}
|
|
542
|
+
// Check if any errors present on any row and diplay it on UI
|
|
543
|
+
hasErrors(index) {
|
|
544
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
545
|
+
return ((_c = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("prodQty")) === null || _c === void 0 ? void 0 : _c.errors) ||
|
|
546
|
+
((_f = (_e = (_d = this.productQuantityForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get("prodLen")) === null || _f === void 0 ? void 0 : _f.errors) ||
|
|
547
|
+
((_j = (_h = (_g = this.productQuantityForm) === null || _g === void 0 ? void 0 : _g.controls[index]) === null || _h === void 0 ? void 0 : _h.get("prodBundle")) === null || _j === void 0 ? void 0 : _j.errors) ||
|
|
548
|
+
((_m = (_l = (_k = this.productQuantityForm) === null || _k === void 0 ? void 0 : _k.controls[index]) === null || _l === void 0 ? void 0 : _l.get("prodRef")) === null || _m === void 0 ? void 0 : _m.errors)
|
|
549
|
+
? true
|
|
550
|
+
: false;
|
|
551
|
+
}
|
|
552
|
+
// Check if Any Entry has less than Minimum length
|
|
553
|
+
checkHasMinLengthQty() {
|
|
554
|
+
var _a, _b;
|
|
555
|
+
this.hasMinlengthError = [];
|
|
556
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls) === null || _b === void 0 ? void 0 : _b.forEach((element, ind) => {
|
|
557
|
+
var _a, _b, _c;
|
|
558
|
+
if (((_a = element === null || element === void 0 ? void 0 : element.value) === null || _a === void 0 ? void 0 : _a.prodLen) < ((_b = this.cuttingValidation) === null || _b === void 0 ? void 0 : _b.minLength) &&
|
|
559
|
+
!this.isNullOrEmpty((_c = element === null || element === void 0 ? void 0 : element.value) === null || _c === void 0 ? void 0 : _c.prodLen)) {
|
|
560
|
+
this.hasMinlengthError.push(ind);
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
this.cdr.detectChanges();
|
|
564
|
+
}
|
|
565
|
+
pad3Digits(value) {
|
|
566
|
+
var _a, _b;
|
|
567
|
+
const qty = value;
|
|
568
|
+
if (!this.isNullOrEmpty(qty) && !isNaN(qty)) {
|
|
569
|
+
return (_b = (_a = parseFloat(qty)) === null || _a === void 0 ? void 0 : _a.toFixed(3)) === null || _b === void 0 ? void 0 : _b.replace(/(\d)(?=(\d{3})+\b)/g, "$1,");
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
// Convert Length to demial format after blur
|
|
573
|
+
updateLenthValue(element) {
|
|
574
|
+
if (!this.isNullOrEmpty(element === null || element === void 0 ? void 0 : element.value)) {
|
|
575
|
+
element.value = this.pad3Digits(element.value);
|
|
576
|
+
}
|
|
577
|
+
this.checkHasMinLengthQty();
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
CustomProductQuantityFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomProductQuantityFormComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i2.CartService }, { token: i3.Router }, { token: i4.ProductService }, { token: i4.CmsService }, { token: i5.NgbModal }, { token: i4.ActiveCartService }, { token: i6.CurrentProductService }], target: i0.ɵɵFactoryTarget.Component });
|
|
581
|
+
CustomProductQuantityFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomProductQuantityFormComponent, selector: "app-custom-product-quantity-form", inputs: { hasBundle: "hasBundle", productCode: "productCode", productDetails: "productDetails", unitType: "unitType", accessoriesPrice: "accessoriesPrice", selectedColour: "selectedColour", cuttingValidation: "cuttingValidation", finishedAvailableColours: "finishedAvailableColours", isFinishedProduct: "isFinishedProduct", isFlashingProduct: "isFlashingProduct", listView: "listView" }, outputs: { updateCartEntires: "updateCartEntires", addMoreClicked: "addMoreClicked" }, viewQueries: [{ propertyName: "closeInviteModal", first: true, predicate: ["closeInviteModal"], descendants: true }, { propertyName: "closebutton", first: true, predicate: ["closebutton"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"productDetails\" [formGroup]=\"productForm\">\r\n <div class=\"row\">\r\n <ng-container>\r\n <div\r\n class=\"col p-0 bundling pr-2\"\r\n *ngIf=\"!isFinishedProduct && !isFlashingProduct\"\r\n >\r\n <span class=\"pr-2 font-weight-bold text\">Bundling </span>\r\n <span>\r\n <label class=\"switch\">\r\n <input\r\n type=\"checkbox\"\r\n formControlName=\"bundling\"\r\n (change)=\"updateBundling($event)\"\r\n [value]=\"hasBundle\"\r\n [checked]=\"hasBundle\"\r\n />\r\n <span class=\"slider round\"></span>\r\n </label>\r\n </span>\r\n </div>\r\n </ng-container>\r\n <div class=\"quantity border p-2 mt-4\">\r\n <ng-container formArrayName=\"productQuantity\">\r\n <datalist id=\"bundleList\">\r\n <option *ngFor=\"let bundle of bundleList\">\r\n {{ bundle }}\r\n </option>\r\n </datalist>\r\n <table\r\n class=\"no-border\"\r\n [ngClass]=\"{\r\n 'has-bundle': hasBundle,\r\n accessories: isFinishedProduct\r\n }\"\r\n >\r\n <thead>\r\n <th>Quantity</th>\r\n <th *ngIf=\"!isFinishedProduct\">Length (LM)</th>\r\n <th *ngIf=\"hasBundle\">\r\n Bundle\r\n <span\r\n class=\"info-icon\"\r\n ngbTooltip=\"Bundle Information goes here....\"\r\n placement=\"bottom\"\r\n >\r\n </span>\r\n </th>\r\n <th\r\n *ngIf=\"hasBundle\"\r\n class=\"d-none\"\r\n [ngClass]=\"{ 'd-lg-block': listView }\"\r\n >\r\n Reference\r\n <span\r\n class=\"info-icon\"\r\n ngbTooltip=\"Reference Information goes here....\"\r\n placement=\"bottom\"\r\n >\r\n </span>\r\n </th>\r\n <th></th>\r\n </thead>\r\n <tbody>\r\n <ng-container\r\n *ngFor=\"\r\n let val of productForm.get('productQuantity')['controls'];\r\n let i = index\r\n \"\r\n [formGroupName]=\"i\"\r\n >\r\n <tr>\r\n <td>\r\n <input\r\n inputmode=\"numeric\"\r\n class=\"form-control prod-qty\"\r\n formControlName=\"prodQty\"\r\n minlength=\"1\"\r\n maxlength=\"2\"\r\n OnlyNumber=\"true\"\r\n (blur)=\"updateTotal()\"\r\n />\r\n </td>\r\n <td *ngIf=\"!isFinishedProduct\">\r\n <input\r\n inputmode=\"decimal\"\r\n class=\"form-control prod-len\"\r\n formControlName=\"prodLen\"\r\n #prodLen\r\n minlength=\"1\"\r\n maxlength=\"7\"\r\n OnlyNumber=\"true\"\r\n (blur)=\"updateTotal(); updateLenthValue(prodLen)\"\r\n />\r\n </td>\r\n <td *ngIf=\"hasBundle && !isFinishedProduct\">\r\n <div class=\"d-none\" [ngClass]=\"{ 'd-lg-block': listView }\">\r\n <input\r\n class=\"form-control prod-bundle\"\r\n formControlName=\"prodBundle\"\r\n #prodBundle\r\n (input)=\"\r\n prodBundle.value = prodBundle.value.toUpperCase()\r\n \"\r\n minlength=\"1\"\r\n maxlength=\"2\"\r\n (blur)=\"\r\n updateTotal(); populateSameBundleReference(null, i)\r\n \"\r\n (focus)=\"updateBundleList()\"\r\n list=\"bundleList\"\r\n />\r\n </div>\r\n <div [ngClass]=\"{ 'd-lg-none d-xl-none': listView }\">\r\n <p class=\"p-0 m-0\" *ngFor=\"let value of getBundleValues(i)\">\r\n {{ value }}\r\n </p>\r\n </div>\r\n <div class=\"side-menu-button\" *ngIf=\"!listView\">\r\n <div class=\"btn-group dropleft\" *ngIf=\"hasBundle\">\r\n <a\r\n type=\"button\"\r\n class=\"dropdown-toggle\"\r\n href=\"#\"\r\n role=\"button\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n >\r\n <i class=\"fa fa-ellipsis-v\"></i>\r\n </a>\r\n <div class=\"dropdown-menu\">\r\n <a\r\n class=\"dropdown-item m-0\"\r\n data-toggle=\"modal\"\r\n data-target=\"#bundleModal\"\r\n (click)=\"editBundleValue(i)\"\r\n >\r\n Edit Bundle Value\r\n </a>\r\n <a\r\n class=\"dropdown-item m-0\"\r\n *ngIf=\"i > 0 || productQuantityForm.length > 1\"\r\n (click)=\"removeProductQuantityForm(i, $event)\"\r\n >\r\n Remove\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td *ngIf=\"hasBundle && !isFinishedProduct && listView\">\r\n <div class=\"d-none\" [ngClass]=\"{ 'd-lg-block': listView }\">\r\n <input\r\n class=\"form-control prod-reference\"\r\n minlength=\"1\"\r\n maxlength=\"15\"\r\n (focus)=\"populateSameBundleReference($event, i)\"\r\n formControlName=\"prodRef\"\r\n (blur)=\"\r\n updateTotal();\r\n updateSameBundleReference($event, i, true)\r\n \"\r\n />\r\n </div>\r\n </td>\r\n <td *ngIf=\"listView || !hasBundle\">\r\n <button\r\n *ngIf=\"i > 0 || productQuantityForm.length > 1\"\r\n class=\"simple close d-sm-none d-md-none d-lg-block d-xl-block\"\r\n (click)=\"removeProductQuantityForm(i, $event)\"\r\n >\r\n <i class=\"fas fa-times-circle custom-arrow remove-icon\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"hasErrors(i)\">\r\n <td colspan=\"4\" class=\"text-danger\">\r\n <div class=\"mt-0\" *ngIf=\"prodQtyErrors(i)\">\r\n Please enter valid Quantity\r\n </div>\r\n <div class=\"mt-2\" *ngIf=\"prodLenErrors(i)\">\r\n Please enter valid Length\r\n </div>\r\n <div class=\"mt-2\" *ngIf=\"minLenErrors(i)\">\r\n Minimum length should be at least\r\n {{ cuttingValidation?.minLength }}\r\n </div>\r\n <div class=\"mt-2\" *ngIf=\"prodBundleErrors(i)\">\r\n Please enter valid Bundle Name\r\n </div>\r\n <div class=\"mt-2\" *ngIf=\"prodRefErrors(i)\">\r\n Please enter valid Reference\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"hasErrorIndex(i)\">\r\n <td colspan=\"4\" class=\"text-danger\">\r\n {{ this.addToCartError || 'Should not exceed maximum bundle size' }}\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"hasProdRefErrorIndex(i)\">\r\n <td colspan=\"4\" class=\"text-danger\">\r\n This Reference value is already used. Please use other value\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n <button\r\n class=\"simple pl-2\"\r\n *ngIf=\"!isFinishedProduct && !disableAddMore\"\r\n (click)=\"addProductQuantityFormGroup($event)\"\r\n >\r\n <span class=\"mr-1 add-more\"> </span>\r\n Add more\r\n </button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<!-- <div\r\n class=\"row mt-4 col-sm-12 alert alert-danger justify-content-start\"\r\n role=\"alert\"\r\n *ngIf=\"addToCartError\"\r\n>\r\n <img\r\n class=\"mr-3\"\r\n src=\"../../../../../assets/images/erroricon.svg\"\r\n alt=\"alert\"\r\n />\r\n <span>\r\n {{ addToCartError }}\r\n </span>\r\n</div> -->\r\n\r\n<div\r\n class=\"modal fade edit-bundle-form\"\r\n id=\"bundleModal\"\r\n role=\"dialog\"\r\n aria-hidden=\"true\"\r\n>\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Bundle Value</h4>\r\n <i\r\n class=\"icon-close invite-pop-close\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body m-0 pl-2 pr-2\">\r\n <table class=\"table no-border\" *ngIf=\"!isFinishedProduct\">\r\n <thead>\r\n <th>\r\n Bundle\r\n <span\r\n class=\"info-icon\"\r\n ngbTooltip=\"Bundle Information goes here....\"\r\n placement=\"bottom\"\r\n >\r\n </span>\r\n </th>\r\n <th>\r\n Reference\r\n <span\r\n class=\"info-icon\"\r\n ngbTooltip=\"Reference Information goes here....\"\r\n placement=\"bottom\"\r\n >\r\n </span>\r\n </th>\r\n </thead>\r\n <tbody [formGroup]=\"modalBundleForm\">\r\n <tr>\r\n <td>\r\n <datalist id=\"modBundleList\">\r\n <option *ngFor=\"let bundle of bundleList\">\r\n {{ bundle }}\r\n </option>\r\n </datalist>\r\n <input\r\n class=\"form-control\"\r\n maxlength=\"2\"\r\n formControlName=\"modBundle\"\r\n #modBundle\r\n (focus)=\"updateBundleList()\"\r\n (input)=\"modBundle.value = modBundle.value.toUpperCase()\"\r\n list=\"modBundleList\"\r\n (blur)=\"populateSameBundleReference(null, selectedIndex)\"\r\n />\r\n </td>\r\n <td>\r\n <input\r\n class=\"form-control\"\r\n maxlength=\"15\"\r\n (focus)=\"populateSameBundleReference($event, selectedIndex)\"\r\n formControlName=\"modRef\"\r\n />\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"modal-footer\">\r\n <button\r\n type=\"submit\"\r\n data-dismiss=\"modal\"\r\n #closebutton\r\n class=\"btn btn-light\"\r\n >\r\n Cancel\r\n </button>\r\n <button type=\"submit\" (click)=\"saveBundleDetails($event)\" class=\"btn\">\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@media screen and (min-width: 1366px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: 1.063rem;--fontsize17-5: 1.1rem;--fontsize18: 1.125rem;--fontsize18-4: 1.5rem;--fontsize20: 1.25rem;--fontsize21: 1.313rem;--fontsize22: 1.375rem;--fontsize23: 1.438rem;--fontsize24: 1.5rem;--fontsize26: 1.625rem;--fontsize28: 1.75rem;--fontsize30: 1.625rem;--fontsize32: 2rem;--fontsize34: 2.125rem;--fontsize36: 2rem;--fontsize40: 2.25rem;--fontsize46: 2.875rem;--fontsize80: 5rem}}@media screen and (max-width: 1365px) and (min-width: 768px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2.875rem;--fontsize80: 3.5rem}}@media screen and (max-width: 767px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize16-5: .77rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize19: .938rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize26: 1.25rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2rem;--fontsize80: 2.5rem}}@font-face{font-family:icomoon;font-weight:400;src:url(../assets/fonts/icomoon.ttf) format(\"ttf\"),url(../assets/fonts/icomoon.woff) format(\"woff\");font-weight:normal;font-style:normal;font-display:swap}@font-face{font-family:\"Arial Regular\";src:url(../assets/fonts/arial-webfont.woff) format(\"woff\"),url(../assets/fonts/arial-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Bold\";src:url(../assets/fonts/arialbold-webfont.woff) format(\"woff\"),url(../assets/fonts/arialbold-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Black\";src:url(../assets/fonts/arialblack-webfont.woff) format(\"woff\"),url(../assets/fonts/arialblack-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Reqular\";src:url(../assets/fonts/helveticaneue.woff) format(\"woff\"),url(../assets/fonts/helveticaneue.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Thin\";src:url(../assets/fonts/helveticaneuethin-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuethin-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Medium\";src:url(../assets/fonts/helveticaneuemedium-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuemedium-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;font-feature-settings:normal;font-variant:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:400;line-height:1;text-transform:none;font-display:swap}.icon-right:before{content:\"\\e902\"}.icon-materials:before{content:\"\\e900\"}.icon-natural-lighting:before{content:\"\\e90a\"}.icon-rainwater:before{content:\"\\e901\"}.icon-roofing:before{content:\"\\e90b\"}.icon-flashing{position:relative;display:inline-block;height:32px;text-align:center;width:32px}.icon-flashing:before,.mainnav-link-level-2.show .navTagChild .icon-flashing:before{content:url(../assets/images/icon-flashing-white.svg);height:20px;width:20px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);line-height:15px}li.megamenuSubChild:hover .icon-flashing:before{content:url(../assets/images/icon-flashing-black.svg)}.icon-structural:before{content:\"\\e90c\"}.icon-accessories-old .path1:before{content:\"\\e903\"}.icon-accessories-old .path2:before{margin-left:-1em;content:\"\\e904\"}.icon-accessories-old .path3:before{margin-left:-1em;content:\"\\e905\"}.icon-cladding-old .path1:before{content:\"\\e90d\"}.icon-cladding-old .path2:before{margin-left:-1em;content:\"\\e90e\"}.icon-close:before{content:\"\\e90f\"}.icon-message:before{content:\"\\e910\"}.icon-search .path1:before{content:\"\\e906\"}.icon-search .path2:before{content:\"\\e907\"}.icon-search .path3:before{margin-left:-1.0156em;content:\"\\e908\"}.icon-summary:before{content:\"\\e911\"}.icon-branch:before{content:\"\\e912\"}.icon-delivery:before{content:\"\\e913\"}.icon-downloads:before{content:\"\\e909\"}.icon-drawings:before{content:\"\\e914\"}.icon-full:before{content:\"\\e915\"}.icon-manual:before{content:\"\\e916\"}.icon-payment:before{content:\"\\e917\"}.icon-empty .path1:before{content:\"\\e918\"}.icon-empty .path2:before{margin-left:-1em;content:\"\\e919\"}.icon-empty .path3:before{margin-left:-1em;content:\"\\e91a\"}.icon-product-overview:before{content:\"\\e91b\"}.icon-arrows:before{content:\"\\e91c\"}.icon-selected:before{content:\"\\e91d\"}.icon-accessories:before{content:\"\\e91b\"}.icon-cladding:before{content:\"\\e91e\"}.icon-Triangle:before{content:\"\\e91f\"}.icon-home:before{content:\"\\e920\"}.icon-faq:before{content:\"\\e921\"}.icon-temperature:before{content:\"\\e922\"}body header{font-family:\"Arial Regular\",sans-serif}header{background-color:#1d1d1b;position:sticky;top:0;background-size:100% 25%!important;background-repeat:no-repeat;z-index:10}header .header{max-width:100%;padding:0}header cx-banner cx-media img{margin-top:.7rem;margin-bottom:0}header label{display:inline-flex}header .SiteLinks{height:52px;display:flex;align-items:center;justify-content:space-between;padding-top:5px;padding-bottom:5px}header .SiteLinks cx-paragraph p{color:#fff;font-size:var(--fontsize16);line-height:var(--fontsize16);margin-bottom:0}header .SiteLinks cx-paragraph{font-size:var(--fontsize16)}header .SiteLinks app-account-dropdown,header .SiteLinks app-find-store{width:calc(25% - 25px);max-width:328px;margin-right:25px}header .SiteLinks app-contact-us{width:calc(20% - 25px);max-width:100px;margin-left:auto}header .SiteLinks app-custom-mini-cart{width:10%}header .SiteLinks .preferenceLink{margin-left:auto}header .SiteLinks .preferenceLink cx-generic-link{margin:0}header .SiteLinks .preferenceLink cx-generic-link cx-media img{height:22px;margin:0}header .SiteLogo .storeLogo{position:absolute;z-index:99;left:40px;bottom:10px}header .SiteLogo .homeLogo{max-width:28px;height:28px;position:absolute;z-index:99;bottom:47px}header .NavigationBar{flex:70%;background-color:#b61828;min-height:40px;display:flex;align-items:center;position:relative}header .logoutMenu{margin-top:0!important}header .logoutMenu li{cursor:pointer;background-color:#4c4c4c;color:#fff}header .logoutMenu li:hover{text-decoration:underline;background-color:#4c4c4c}header .MarketingContext{width:100%;margin:auto}.customer-service-icon{cursor:pointer}.helpSupport{width:20rem;border:0;margin-top:.5rem!important;transform:translate(-42%,36px)!important;padding:1rem 1rem 0;background-color:#393939;color:#fff;top:0}.helpSupport .arrow-up{position:absolute;top:-8px;right:44%;width:0;height:0;border-left:15px solid rgba(0,0,0,0);border-right:15px solid rgba(0,0,0,0);border-bottom:15px solid #393939}.helpSupport .contact-us-info .heading{font-family:\"Arial Bold\",sans-serif}.helpSupport .contact-us-info .detail{font-size:var(--fontsize14);line-height:2rem}.helpSupport .contact-us-info .detail .service-icon{height:20px;width:20px;margin-right:10px}.helpSupport .contact-us-info .contactLink a{font-size:var(--fontsize14);text-decoration:underline;text-transform:uppercase}.helpSupport .contact-us-info a{color:#fff;text-decoration:none}.helpSupport .contact-us-info a:hover{text-decoration:underline}.pageTitle{font-family:\"Helvetica Neue Regular\",sans-serif;font-size:var(--fontsize54)}#visualization-container{text-align:center;margin:0 auto}#cds-viewer-container-3d{width:320px;height:200px}#cds-viewer-container-2d{width:320px;height:200px}[aria-label=Close]{cursor:pointer}cx-media.is-missing{background:url(./assets/images/search-noimage.svg);background-size:cover;background-position:center;background-repeat:no-repeat}cx-global-message{position:fixed;top:9rem;width:100%;z-index:13}@media screen and (max-width: 991px){cx-global-message{top:3.75rem}cx-storefront header{background-color:#b61828}cx-storefront header cx-banner cx-media img{margin:auto}cx-storefront header .SiteLogo{width:100%;max-width:211px;margin:auto;padding-left:30px;box-sizing:border-box}cx-storefront header .SiteLogo .storeLogo{position:unset}cx-storefront header .SearchBox{margin:14px 0 10px;width:30px}cx-storefront header .SiteLinks{background-color:transparent;width:110px;margin:auto 25px auto 0}cx-storefront header .SiteLinks app-account-dropdown,cx-storefront header .SiteLinks app-find-store,cx-storefront header .SiteLinks app-contact-us,cx-storefront header .SiteLinks cx-paragraph,cx-storefront header .SiteLinks .preferenceLink{display:none}cx-storefront header .SiteLinks app-custom-mini-cart,cx-storefront header .SiteLinks app-custom-user-account{width:35px}cx-storefront header.is-expanded{overflow-y:auto;position:fixed;bottom:0;top:0;width:calc(100% - 99px)}cx-storefront header.is-expanded .header{background-color:#b61828;margin-left:0}cx-storefront header.is-expanded .PreHeader{position:absolute;right:15px;top:15px}cx-storefront header.is-expanded .SearchBox{display:none}cx-storefront header.is-expanded .SiteLogo{position:absolute;top:25px;z-index:9}cx-storefront header.is-expanded .SiteLinks{background-color:#1d1d1b;width:100%;margin:15px auto 15px 0;height:unset;padding:15px;max-width:100%;position:relative;z-index:9;top:60px}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-account-dropdown{width:100%;max-width:100%}cx-storefront header.is-expanded .SiteLinks app-find-store{width:50%;max-width:328px;min-width:328px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-right:15px;margin-left:auto;width:115px;max-width:unset}cx-storefront header.is-expanded .navigation{position:relative;top:45px}cx-storefront header.is-expanded:before{background-color:#0000004d;right:0;content:\"\";position:fixed;z-index:2;top:0;bottom:0;height:100vh;width:99px}cx-storefront header.is-expanded:after{background-color:transparent}}@media screen and (max-width: 576px){cx-storefront header .SiteLogo{max-width:80px}cx-storefront header .SiteLogo .storeLogo{display:none}cx-storefront header .searchBox{height:45px}cx-storefront header.is-expanded{width:100%}cx-storefront header.is-expanded .header,cx-storefront header.is-expanded .navigation{width:100%}cx-storefront header.is-expanded .SiteLogo{max-width:211px!important}cx-storefront header.is-expanded .SiteLogo .storeLogo{display:block}cx-storefront header.is-expanded .SiteLinks{max-width:100%;width:100%}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-find-store{width:100%;max-width:100%;margin-bottom:10px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-left:0}cx-storefront header.is-expanded .SiteLinks cx-paragraph{margin-left:auto}cx-storefront header.is-expanded:before{display:none}.pageTitle{font-size:28px}}.product-code{color:#6f6f6f}.category-image{width:250px;height:180px}.display_color{text-align:center;position:relative;top:4px;font-family:\"Arial Bold\",sans-serif}.colours .colour{padding:0 15px;position:relative}.colours .colour .checkbox{display:none}.colours .colour .colour-title{position:absolute;bottom:-48px;width:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:var(--fontsize14);text-align:center;cursor:grabbing}.colours .colour.selected{border:1px solid #000000}.colours .colour.selected .checkbox{position:absolute;background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2217.186%22 height%3D%2217.186%22 viewBox%3D%220 0 17.186 17.186%22%3E%0D %3Cg id%3D%22Group_12857%22 data-name%3D%22Group 12857%22 transform%3D%22translate(0.25 0.25)%22%3E%0D %3Ccircle id%3D%22Ellipse_14%22 data-name%3D%22Ellipse 14%22 cx%3D%228.316%22 cy%3D%228.316%22 r%3D%228.316%22 transform%3D%22translate(0 0.039)%22%2F%3E%0D %3Cpath id%3D%22Icon_ionic-md-checkmark-circle%22 data-name%3D%22Icon ionic-md-checkmark-circle%22 d%3D%22M11.718%2C3.375a8.343%2C8.343%2C0%2C1%2C0%2C8.343%2C8.343A8.367%2C8.367%2C0%2C0%2C0%2C11.718%2C3.375ZM10.005%2C16.166%2C5.729%2C11.89l1.2-1.2%2C3.08%2C3.08%2C6.5-6.5%2C1.2%2C1.2Z%22 transform%3D%22translate(-3.375 -3.375)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Icon_ionic-md-checkmark-circle_-_Outline%22 data-name%3D%22Icon ionic-md-checkmark-circle - Outline%22 d%3D%22M11.718%2C3.125a8.583%2C8.583%2C0%2C0%2C1%2C6.069%2C14.662A8.583%2C8.583%2C0%2C1%2C1%2C5.649%2C5.649%2C8.532%2C8.532%2C0%2C0%2C1%2C11.718%2C3.125Zm0%2C16.686A8.117%2C8.117%2C0%2C1%2C0%2C6%2C17.433%2C8.035%2C8.035%2C0%2C0%2C0%2C11.718%2C19.811ZM16.511%2C6.916l1.553%2C1.553-8.059%2C8.05L5.376%2C11.89l1.553-1.553%2C3.08%2C3.08Zm.846%2C1.553-.846-.846-6.5%2C6.5-3.08-3.08-.846.846%2C3.922%2C3.922Z%22 transform%3D%22translate(-3.375 -3.375)%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center;width:20px;height:20px;display:inline-block;top:10px;left:10px}.colours .colour.main{box-sizing:border-box;width:40px;height:40px;display:inline-block;padding:0;border:1px solid #C6C6C6}.bundling{text-align:right;top:30px}.bundling span.text{display:inline-block;position:relative;top:-10px}.switch{position:relative;display:inline-block;width:50px;margin-top:-4px;height:22px}.switch input{opacity:0;width:0;height:0}.switch input:not(:checked)+.slider:after{content:\"NO\";right:6px;position:absolute;color:#fff;top:3px;font-size:var(--fontsize12);font-family:\"Arial Bold\",sans-serif}.switch input:checked+.slider{background-color:#b61828}.switch input:checked+.slider:before{transform:translate(26px);left:5px}.switch input:checked+.slider:after{content:\"YES\";left:5px;position:absolute;color:#fff;top:3px;font-size:var(--fontsize12);font-family:\"Arial Bold\",sans-serif}.switch input:focus+.slider{box-shadow:0 0 1px #2196f3}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#a6a6a5;transition:.4s}.slider:before{position:absolute;content:\"\";height:16px;width:16px;top:3px;left:3px;bottom:3px;background-color:#fff;transition:.4s}.slider.round{border-radius:34px}.slider.round:before{border-radius:50%}::ng-deep .info-icon{position:relative;background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22%3E%0D %3Cpath id%3D%22Icon_metro-info%22 data-name%3D%22Icon metro-info%22 d%3D%22M9.571%2C6.678a.752.752%2C0%2C0%2C1%2C.75-.75h.5a.752.752%2C0%2C0%2C1%2C.75.75v.5a.752.752%2C0%2C0%2C1-.75.75h-.5a.752.752%2C0%2C0%2C1-.75-.75Zm3%2C7.25h-4v-1h1v-3h-1v-1h3v4h1Zm-2-12a8%2C8%2C0%2C1%2C0%2C8%2C8%2C8%2C8%2C0%2C0%2C0-8-8Zm0%2C14.5a6.5%2C6.5%2C0%2C1%2C1%2C6.5-6.5A6.5%2C6.5%2C0%2C0%2C1%2C10.571%2C16.428Z%22 transform%3D%22translate(-2.571 -1.928)%22 fill%3D%22%23c6c6c6%22%2F%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center;width:16px;height:16px;display:inline-block;top:3px}::ng-deep .edit-bundle-form .modal-dialog{padding:10px;transform:translateY(-50%);top:30%;margin:0 auto}::ng-deep .edit-bundle-form .modal-header{border-bottom:0}::ng-deep .edit-bundle-form .modal-body{padding-top:0;padding-bottom:0}::ng-deep .edit-bundle-form .modal-footer{border-top:none}::ng-deep .edit-bundle-form .modal-footer button{background-color:#1d1d1b;text-transform:uppercase;text-decoration:none;height:44px;font-family:\"Arial Bold\",sans-serif;min-width:86px;color:#fff;font-size:var(--fontsize14)}::ng-deep .edit-bundle-form .modal-footer button.btn-light{border:none;background-color:#fff;color:#1d1d1b;text-decoration:underline;text-transform:capitalize;font-size:var(--fontsize16);font-family:\"Arial Regular\",sans-serif}::ng-deep .edit-bundle-form .table th{text-transform:capitalize}::ng-deep .edit-bundle-form .table tr,::ng-deep .edit-bundle-form .table td,::ng-deep .edit-bundle-form .table th{border:none;text-align:left;padding-bottom:0;padding-top:10px}::ng-deep .edit-bundle-form .table td:nth-child(1){width:100px;max-width:100px;min-width:100px;padding-right:15px}::ng-deep .edit-bundle-form .table td:nth-child(2){width:150px}::ng-deep main{overflow-x:hidden}::ng-deep main .no-border{border:none!important}::ng-deep main .full-width{max-width:100%!important}::ng-deep main .add-more{position:relative;background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2219%22 height%3D%2219%22 viewBox%3D%220 0 19 19%22%3E%0D %3Cpath id%3D%22Icon_awesome-plus-circle%22 data-name%3D%22Icon awesome-plus-circle%22 d%3D%22M10.063.563a9.5%2C9.5%2C0%2C1%2C0%2C9.5%2C9.5A9.5%2C9.5%2C0%2C0%2C0%2C10.063.563Zm5.516%2C10.573a.461.461%2C0%2C0%2C1-.46.46H11.595v3.524a.461.461%2C0%2C0%2C1-.46.46H8.99a.461.461%2C0%2C0%2C1-.46-.46V11.595H5.006a.461.461%2C0%2C0%2C1-.46-.46V8.99a.461.461%2C0%2C0%2C1%2C.46-.46H8.53V5.006a.461.461%2C0%2C0%2C1%2C.46-.46h2.145a.461.461%2C0%2C0%2C1%2C.46.46V8.53h3.524a.461.461%2C0%2C0%2C1%2C.46.46Z%22 transform%3D%22translate(-0.563 -0.563)%22%2F%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center;width:20px;height:20px;display:inline-block;top:4px}::ng-deep main .remove-icon{position:relative;top:-4px}::ng-deep main .bg-white{background:#ffffff;border-radius:5px}::ng-deep main sub{bottom:0em;font-size:var(--fontsize12)}::ng-deep main hr{border-top:2px solid #C6C6C6}::ng-deep main .product-name{font-family:\"Helvetica Neue Regular\",sans-serif;font-size:var(--fontsize54)}::ng-deep main .colours-link{color:#000;text-decoration:underline;font-size:var(--fontsize14);cursor:pointer}::ng-deep main .colours-link:hover{color:#fa4d56}::ng-deep main .quantity{width:100%}::ng-deep main .quantity .simple{background:none;border:none}::ng-deep main .quantity table{min-width:80%}::ng-deep main .quantity table th{padding:0 10px}::ng-deep main .quantity table th:nth-child(3){min-width:92px}::ng-deep main .quantity table td{padding:10px;box-sizing:border-box}::ng-deep main .quantity table td:nth-child(1){width:80px;min-width:80px}::ng-deep main .quantity table td:nth-child(2){width:110px;min-width:110px}::ng-deep main .quantity table td:nth-child(3){width:100%;text-align:left;position:relative}::ng-deep main .quantity table td:nth-child(3) button{position:absolute;top:23%}::ng-deep main .quantity table td input{width:100%}::ng-deep main .quantity table td .dropleft .dropdown-menu{top:35px!important}::ng-deep main .quantity table td .dropleft .dropdown-menu .dropdown-item{cursor:pointer}::ng-deep main .quantity table td .dropleft .dropdown-toggle:before{display:none}::ng-deep main .quantity table td .side-menu-button{position:absolute;right:10px;top:16px}::ng-deep main .quantity table.accessories .prod-qty{max-width:65px}::ng-deep main .quantity table.has-bundle td:nth-child(3){width:95px}::ng-deep main .quantity table.has-bundle td:nth-child(4){width:170px}@media screen and (max-width: 767px){::ng-deep main .quantity table.has-bundle td:nth-child(4){display:none}}::ng-deep main .table.attributes-table{border:none}::ng-deep main .table.attributes-table th{background-color:#646363;font-family:\"Arial Bold\",sans-serif;color:#fff;height:35px;vertical-align:middle}::ng-deep main .table.attributes-table td{vertical-align:top}::ng-deep main .add-to-cart{background:#1D1D1B;width:100%;height:44px;font-family:\"Arial Bold\",sans-serif;text-align:center;color:#fff;font-size:var(--fontsize14)}::ng-deep main .add-to-cart:disabled{cursor:not-allowed;border:1px solid #A6A6A5;background:#A6A6A5}::ng-deep main .disable{cursor:not-allowed!important}::ng-deep main .tabs{display:flex;align-items:center;padding:15px;width:100%}::ng-deep main .tabs .tab-link{display:flex;width:31.7%;box-sizing:border-box;margin-right:2%;border:1px solid #1D1D1B;padding:0;background-color:#fff;align-items:center;cursor:pointer}::ng-deep main .tabs .tab-link:last-child{margin-right:0}::ng-deep main .tabs .tab-link .icon{width:44px;min-width:44px;height:44px;border-right:1px solid #1D1D1B}::ng-deep main .tabs .tab-link .icon.product-overiew{background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2226%22 height%3D%2222%22 viewBox%3D%220 0 26 22%22%3E%0D %3Cg id%3D%22Group_14012%22 data-name%3D%22Group 14012%22 transform%3D%22translate(-316 -1291)%22%3E%0D %3Cpath id%3D%22Rectangle_1493%22 data-name%3D%22Rectangle 1493%22 d%3D%22M1%2C1V5H5V1H1M0%2C0H6V6H0Z%22 transform%3D%22translate(316 1291)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cpath id%3D%22Rectangle_1494%22 data-name%3D%22Rectangle 1494%22 d%3D%22M1%2C1V5H5V1H1M0%2C0H6V6H0Z%22 transform%3D%22translate(316 1299)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cpath id%3D%22Rectangle_1495%22 data-name%3D%22Rectangle 1495%22 d%3D%22M1%2C1V5H5V1H1M0%2C0H6V6H0Z%22 transform%3D%22translate(316 1307)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cpath id%3D%22Line_464%22 data-name%3D%22Line 464%22 d%3D%22M18%2C.5H0v-1H18Z%22 transform%3D%22translate(324 1294)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cpath id%3D%22Line_465%22 data-name%3D%22Line 465%22 d%3D%22M18%2C.5H0v-1H18Z%22 transform%3D%22translate(324 1302)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cpath id%3D%22Line_466%22 data-name%3D%22Line 466%22 d%3D%22M18%2C.5H0v-1H18Z%22 transform%3D%22translate(324 1310)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center}::ng-deep main .tabs .tab-link .icon.downloads{background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2221%22 height%3D%2221%22 viewBox%3D%220 0 21 21%22%3E%0D %3Cg id%3D%22Group_14014%22 data-name%3D%22Group 14014%22 transform%3D%22translate(0.5 0.5)%22%3E%0D %3Cpath id%3D%22Path_11231%22 data-name%3D%22Path 11231%22 d%3D%22M23.848%2C18.9%2C15.99%2C11.175h4.558V1.282h6.6v9.893h4.558Zm-5.414-6.724L23.848%2C17.5l5.414-5.322H26.147V2.282h-4.6v9.893Z%22 transform%3D%22translate(-13.85 -1.782)%22%2F%3E%0D %3Cpath id%3D%22Path_11232%22 data-name%3D%22Path 11232%22 d%3D%22M22.282%2C69.593h-21V62.275h1v6.318h19V62.275h1Z%22 transform%3D%22translate(-1.781 -49.093)%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center}::ng-deep main .tabs .tab-link .icon.related-products{position:relative;background:url(\"data:image/svg+xml,%3Csvg id%3D%22Group_14016%22 data-name%3D%22Group 14016%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22%3E%0D %3Cpath id%3D%22Rectangle_1364%22 data-name%3D%22Rectangle 1364%22 d%3D%22M1%2C1V8H8V1H1M0%2C0H9V9H0Z%22 transform%3D%22translate(0 11)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cpath id%3D%22Rectangle_1366%22 data-name%3D%22Rectangle 1366%22 d%3D%22M1%2C1V8H8V1H1M0%2C0H9V9H0Z%22 transform%3D%22translate(11 11)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cpath id%3D%22Rectangle_1365%22 data-name%3D%22Rectangle 1365%22 d%3D%22M1%2C1V8H8V1H1M0%2C0H9V9H0Z%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cg id%3D%22Group_13038%22 data-name%3D%22Group 13038%22 transform%3D%22translate(11)%22%3E%0D %3Cpath id%3D%22Line_321%22 data-name%3D%22Line 321%22 d%3D%22M.5%2C9h-1V0h1Z%22 transform%3D%22translate(4.5)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cpath id%3D%22Line_322%22 data-name%3D%22Line 322%22 d%3D%22M9%2C.5H0v-1H9Z%22 transform%3D%22translate(0 4.5)%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center}::ng-deep main .tabs .tab-link .label{font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif;text-transform:uppercase;text-align:center;width:100%;padding:8px}::ng-deep main .tabs .tab-link:hover,::ng-deep main .tabs .tab-link.active{color:#fff;background:#1D1D1B}::ng-deep main .tabs .tab-link:hover .icon,::ng-deep main .tabs .tab-link.active .icon{border-right:1px solid #ffffff}::ng-deep main .tabs .tab-link:hover .icon.product-overiew,::ng-deep main .tabs .tab-link.active .icon.product-overiew{background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2226%22 height%3D%2222%22 viewBox%3D%220 0 26 22%22%3E%0D %3Cg id%3D%22Group_14011%22 data-name%3D%22Group 14011%22 transform%3D%22translate(-316 -1291)%22%3E%0D %3Cpath id%3D%22Rectangle_1493%22 data-name%3D%22Rectangle 1493%22 d%3D%22M1%2C1V5H5V1H1M0%2C0H6V6H0Z%22 transform%3D%22translate(316 1291)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Rectangle_1494%22 data-name%3D%22Rectangle 1494%22 d%3D%22M1%2C1V5H5V1H1M0%2C0H6V6H0Z%22 transform%3D%22translate(316 1299)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Rectangle_1495%22 data-name%3D%22Rectangle 1495%22 d%3D%22M1%2C1V5H5V1H1M0%2C0H6V6H0Z%22 transform%3D%22translate(316 1307)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Line_464%22 data-name%3D%22Line 464%22 d%3D%22M18%2C.5H0v-1H18Z%22 transform%3D%22translate(324 1294)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Line_465%22 data-name%3D%22Line 465%22 d%3D%22M18%2C.5H0v-1H18Z%22 transform%3D%22translate(324 1302)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Line_466%22 data-name%3D%22Line 466%22 d%3D%22M18%2C.5H0v-1H18Z%22 transform%3D%22translate(324 1310)%22 fill%3D%22%23fff%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center}::ng-deep main .tabs .tab-link:hover .icon.downloads,::ng-deep main .tabs .tab-link.active .icon.downloads{background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2221%22 height%3D%2221%22 viewBox%3D%220 0 21 21%22%3E%0D %3Cg id%3D%22Group_14017%22 data-name%3D%22Group 14017%22 transform%3D%22translate(0.5 0.5)%22%3E%0D %3Cpath id%3D%22Path_11231%22 data-name%3D%22Path 11231%22 d%3D%22M23.848%2C18.9%2C15.99%2C11.175h4.558V1.282h6.6v9.893h4.558Zm-5.414-6.724L23.848%2C17.5l5.414-5.322H26.147V2.282h-4.6v9.893Z%22 transform%3D%22translate(-13.85 -1.782)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Path_11232%22 data-name%3D%22Path 11232%22 d%3D%22M22.282%2C69.593h-21V62.275h1v6.318h19V62.275h1Z%22 transform%3D%22translate(-1.781 -49.093)%22 fill%3D%22%23fff%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center}::ng-deep main .tabs .tab-link:hover .icon.related-products,::ng-deep main .tabs .tab-link.active .icon.related-products{background:url(\"data:image/svg+xml,%3Csvg id%3D%22Group_14015%22 data-name%3D%22Group 14015%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22%3E%0D %3Cpath id%3D%22Rectangle_1364%22 data-name%3D%22Rectangle 1364%22 d%3D%22M1%2C1V8H8V1H1M0%2C0H9V9H0Z%22 transform%3D%22translate(0 11)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Rectangle_1366%22 data-name%3D%22Rectangle 1366%22 d%3D%22M1%2C1V8H8V1H1M0%2C0H9V9H0Z%22 transform%3D%22translate(11 11)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Rectangle_1365%22 data-name%3D%22Rectangle 1365%22 d%3D%22M1%2C1V8H8V1H1M0%2C0H9V9H0Z%22 fill%3D%22%23fff%22%2F%3E%0D %3Cg id%3D%22Group_13038%22 data-name%3D%22Group 13038%22 transform%3D%22translate(11)%22%3E%0D %3Cpath id%3D%22Line_321%22 data-name%3D%22Line 321%22 d%3D%22M.5%2C9h-1V0h1Z%22 transform%3D%22translate(4.5)%22 fill%3D%22%23fff%22%2F%3E%0D %3Cpath id%3D%22Line_322%22 data-name%3D%22Line 322%22 d%3D%22M9%2C.5H0v-1H9Z%22 transform%3D%22translate(0 4.5)%22 fill%3D%22%23fff%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center}.modal-title{font-family:\"Arial Bold\",sans-serif}.invite-pop-close{cursor:pointer}.more-content{display:flex;border:1px solid #548AF7;padding:8px;background-color:#edf5ff}.more-content img{position:relative;top:-12px}@media screen and (max-width: 767px){::ng-deep main .category-image{max-width:320px;width:100%!important}::ng-deep main .tabs{flex-direction:row;align-items:stretch}::ng-deep main .tabs .tab-link{align-items:center;flex-direction:column}::ng-deep main .tabs .tab-link .icon{border-right:none}}.alert-danger{margin:0 auto}\n"], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }] });
|
|
582
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomProductQuantityFormComponent, decorators: [{
|
|
583
|
+
type: Component,
|
|
584
|
+
args: [{
|
|
585
|
+
selector: 'app-custom-product-quantity-form',
|
|
586
|
+
templateUrl: './custom-product-quantity-form.component.html',
|
|
587
|
+
styleUrls: ['./custom-product-quantity-form.component.scss'],
|
|
588
|
+
}]
|
|
589
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.CartService }, { type: i3.Router }, { type: i4.ProductService }, { type: i4.CmsService }, { type: i5.NgbModal }, { type: i4.ActiveCartService }, { type: i6.CurrentProductService }]; }, propDecorators: { hasBundle: [{
|
|
590
|
+
type: Input
|
|
591
|
+
}], productCode: [{
|
|
592
|
+
type: Input
|
|
593
|
+
}], productDetails: [{
|
|
594
|
+
type: Input
|
|
595
|
+
}], unitType: [{
|
|
596
|
+
type: Input
|
|
597
|
+
}], accessoriesPrice: [{
|
|
598
|
+
type: Input
|
|
599
|
+
}], selectedColour: [{
|
|
600
|
+
type: Input
|
|
601
|
+
}], cuttingValidation: [{
|
|
602
|
+
type: Input
|
|
603
|
+
}], finishedAvailableColours: [{
|
|
604
|
+
type: Input
|
|
605
|
+
}], isFinishedProduct: [{
|
|
606
|
+
type: Input
|
|
607
|
+
}], isFlashingProduct: [{
|
|
608
|
+
type: Input
|
|
609
|
+
}], listView: [{
|
|
610
|
+
type: Input
|
|
611
|
+
}], closeInviteModal: [{
|
|
612
|
+
type: ViewChild,
|
|
613
|
+
args: ["closeInviteModal"]
|
|
614
|
+
}], closebutton: [{
|
|
615
|
+
type: ViewChild,
|
|
616
|
+
args: ["closebutton"]
|
|
617
|
+
}], updateCartEntires: [{
|
|
618
|
+
type: Output
|
|
619
|
+
}], addMoreClicked: [{
|
|
620
|
+
type: Output
|
|
621
|
+
}] } });
|
|
622
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWlsZGluZ3Byb2R1Y3RfbGlicmFyeS9zcmMvbGliL3NoYXJlZC9jdXN0b20tY2FydC1kZXRhaWwvY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybS9jdXN0b20tcHJvZHVjdC1xdWFudGl0eS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1aWxkaW5ncHJvZHVjdF9saWJyYXJ5L3NyYy9saWIvc2hhcmVkL2N1c3RvbS1jYXJ0LWRldGFpbC9jdXN0b20tcHJvZHVjdC1xdWFudGl0eS1mb3JtL2N1c3RvbS1wcm9kdWN0LXF1YW50aXR5LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBSVQsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUEwQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyxrQ0FBa0M7SUF3RDdDLFlBQ1UsV0FBd0IsRUFDeEIsR0FBc0IsRUFDdEIsV0FBd0IsRUFDeEIsTUFBYyxFQUNkLGNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLFlBQXNCLEVBQ3RCLGlCQUFvQyxFQUNwQyxxQkFBNEM7UUFSNUMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsUUFBRyxHQUFI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QUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7O2dJQXJxQlUsa0NBQWtDO29IQUFsQyxrQ0FBa0MsMndCQzFCL0MseThYQW1VQTs0RkR6U2Esa0NBQWtDO2tCQUw5QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQ0FBa0M7b0JBQzVDLFdBQVcsRUFBRSwrQ0FBK0M7b0JBQzVELFNBQVMsRUFBRSxDQUFDLCtDQUErQyxDQUFDO2lCQUM3RDtrVUFXVSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQTRCeUIsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDSCxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBRWQsaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEN1cnJlbnRQcm9kdWN0U2VydmljZSB9IGZyb20gJ0BzcGFydGFjdXMvc3RvcmVmcm9udCc7XHJcbmltcG9ydCB7IEFjdGl2ZUNhcnRTZXJ2aWNlLCBDbXNTZXJ2aWNlLCBQcm9kdWN0LCBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0BzcGFydGFjdXMvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWNjZXNzb3JpZXNRdWFudGl0eSwgUHJvZHVjdFF1YW50aXR5IH0gZnJvbSAnLi4vLi4vQ3VzdG9tUHJvZHVjdCc7XHJcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yLCBSZWdleENvbnN0YW50cyB9IGZyb20gJy4uLy4uL3JlZ0V4LnZhbGlkYXRvcic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1wcm9kdWN0LXF1YW50aXR5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1wcm9kdWN0LXF1YW50aXR5LWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbVByb2R1Y3RRdWFudGl0eUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgZW52OiBhbnkgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlbnYnKTtcclxuICBlbnZpcm9ubWVudCA6IGFueSA9IEpTT04ucGFyc2UodGhpcy5lbnYpO1xyXG4gIGlzRGVza3RvcDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1RhYmxldDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB0b3RhbExlbmd0aDogYW55O1xyXG4gIHRvdGFsUHJpY2U6IGFueSA9IFwiMC4wXCI7XHJcblxyXG4gIEBJbnB1dCgpIGhhc0J1bmRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByb2R1Y3RDb2RlOiBhbnk7XHJcbiAgQElucHV0KCkgcHJvZHVjdERldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSB1bml0VHlwZTogYW55ID0gXCJwZXIgTE1cIjtcclxuICBASW5wdXQoKSBhY2Nlc3Nvcmllc1ByaWNlID0gMDtcclxuICBASW5wdXQoKSBzZWxlY3RlZENvbG91cjogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBjdXR0aW5nVmFsaWRhdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIGZpbmlzaGVkQXZhaWxhYmxlQ29sb3VyczogYW55O1xyXG4gIEBJbnB1dCgpIGlzRmluaXNoZWRQcm9kdWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNGbGFzaGluZ1Byb2R1Y3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsaXN0VmlldzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByb2R1Y3RGb3JtOiBhbnkgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgZGlzYWJsZUFkZE1vcmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYnVuZGxlTGlzdDogYW55ID0gW107XHJcblxyXG4gIGVycm9ySW5kZXg6IGFueSA9IFtdO1xyXG4gIGhhc1Byb2RSZWZJbmRleDogYW55ID0gW107XHJcbiAgaGFzUHJvZFJlZjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc01pbmxlbmd0aEVycm9yOiBhbnkgPSBbXTtcclxuICByb3dJbmRleCA9IDA7XHJcbiAgY2FydElkOiBhbnk7XHJcblxyXG4gIHNob3dXYWl0Q3Vyc29yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgYWRkVG9DYXJ0RXJyb3I6IGFueSA9IG51bGw7XHJcbiAgbW9kYWxCdW5kbGVGb3JtOiBhbnkgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBlZGl0UHJvZEJ1bmRsZTogYW55ID0gXCJcIjtcclxuICBlZGl0UHJvZFJlZjogYW55ID0gXCJcIjtcclxuICBzZWxlY3RlZEluZGV4OiBhbnkgPSBudWxsO1xyXG5cclxuICBoYXNEYXRhOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByb2R1Y3QkOiBPYnNlcnZhYmxlPFByb2R1Y3QgfCBudWxsPiA9XHJcbiAgICB0aGlzLmN1cnJlbnRQcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJjbG9zZUludml0ZU1vZGFsXCIpIGNsb3NlSW52aXRlTW9kYWw6IGFueTtcclxuICBAVmlld0NoaWxkKFwiY2xvc2VidXR0b25cIikgY2xvc2VidXR0b246IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHVwZGF0ZUNhcnRFbnRpcmVzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWRkTW9yZUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBzY3JlZW5XaWR0aDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNtc1NlcnZpY2U6IENtc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIGFjdGl2ZUNhcnRTZXJ2aWNlOiBBY3RpdmVDYXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgY3VycmVudFByb2R1Y3RTZXJ2aWNlOiBDdXJyZW50UHJvZHVjdFNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2FydE9iajogYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzcGFydGFjdXPimr9kaW1vbmQtc3Bh4pq/Y2FydFwiKTtcclxuICAgIHRoaXMuY2FydElkID0gSlNPTi5wYXJzZShjYXJ0T2JqKT8uYWN0aXZlO1xyXG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoICsgXCJweFwiO1xyXG4gICAgaWYgKHRoaXMucHJvZHVjdERldGFpbHMpIHtcclxuICAgICAgdGhpcy5jcmVhdGVQcm9kdWN0Rm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCFjaGFuZ2VzPy5wcm9kdWN0RGV0YWlscz8uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy51cGRhdGVGb3JtRGV0YWlscygpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGb3JtRGV0YWlscygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRmluaXNoZWRQcm9kdWN0KSB7XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbMF0/LnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIHByb2RRdHk6IHRoaXMucHJvZHVjdERldGFpbHM/LnF1YW50aXR5LFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvZHVjdERldGFpbHM/LnN1YkxpbmVDb25maWdJbmZvcz8uZm9yRWFjaChcclxuICAgICAgICAodmFsOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHZhbD8uYnVuZGxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNCdW5kbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RGb3JtPy5nZXQoXCJidW5kbGluZ1wiKT8uc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0uY29udHJvbHNbaW5kZXhdLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBwcm9kQnVuZGxlOiB2YWw/LmJ1bmRsZU5hbWUsXHJcbiAgICAgICAgICAgIHByb2RMZW46IHRoaXMucGFkM0RpZ2l0cyh2YWw/Lmxlbmd0aCksXHJcbiAgICAgICAgICAgIHByb2RRdHk6IHZhbD8ucXVhbnRpdHksXHJcbiAgICAgICAgICAgIHByb2RSZWY6IHZhbD8ucmVmZXJlbmNlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ3JlYXRlIGEgUHJvZHVjdCBRdWFudGl0eSBGb3JtXHJcbiAgY3JlYXRlUHJvZHVjdEZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjY2Vzc29yaWVzUHJpY2UgPSAwO1xyXG4gICAgdGhpcy50b3RhbExlbmd0aCA9IG51bGw7XHJcbiAgICB0aGlzLnRvdGFsUHJpY2UgPSBcIjAuMFwiO1xyXG4gICAgdGhpcy5oYXNCdW5kbGUgPSBmYWxzZTtcclxuICAgIHRoaXMuZGlzYWJsZUFkZE1vcmUgPSBmYWxzZTtcclxuICAgIHRoaXMuYnVuZGxlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5lcnJvckluZGV4ID0gW107XHJcbiAgICB0aGlzLmhhc1Byb2RSZWZJbmRleCA9IFtdO1xyXG4gICAgdGhpcy5yb3dJbmRleCA9IDA7XHJcbiAgICB0aGlzLnByb2R1Y3RGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLmFkZFRvQ2FydEVycm9yID0gbnVsbDtcclxuICAgIHRoaXMucHJvZHVjdEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgYnVuZGxpbmc6IFtcIlwiXSxcclxuICAgICAgcHJvZHVjdFF1YW50aXR5OiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgam9iUmVmZXJlbmNlOiBbXCJcIiwgW1JlZ2V4VmFsaWRhdG9yKFJlZ2V4Q29uc3RhbnRzLkpPQl9SRUZFUkVOQ0UpXV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmVkaXRQcm9kQnVuZGxlID0gXCJcIjtcclxuICAgIHRoaXMuZWRpdFByb2RSZWYgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gbnVsbDtcclxuICAgIHRoaXMuaGFzUHJvZFJlZiA9IGZhbHNlO1xyXG4gICAgdGhpcy5oYXNNaW5sZW5ndGhFcnJvciA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRmluaXNoZWRQcm9kdWN0KSB7XHJcbiAgICAgIHRoaXMuYWRkUHJvZHVjdFF1YW50aXR5Rm9ybUdyb3VwKCk7XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbMF0/LnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIHByb2RRdHk6IHRoaXMucHJvZHVjdERldGFpbHM/LnF1YW50aXR5LFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kYWxCdW5kbGVGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgbW9kQnVuZGxlOiBbXCJcIiwgW1JlZ2V4VmFsaWRhdG9yKFJlZ2V4Q29uc3RhbnRzLkJVTkRMRV9OQU1FKV1dLFxyXG4gICAgICAgIG1vZFJlZjogW1wiXCIsIFtSZWdleFZhbGlkYXRvcihSZWdleENvbnN0YW50cy5KT0JfUkVGRVJFTkNFKV1dLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wcm9kdWN0RGV0YWlscz8uc3ViTGluZUNvbmZpZ0luZm9zPy5mb3JFYWNoKFxyXG4gICAgICAgICh2YWw6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZGRQcm9kdWN0UXVhbnRpdHlGb3JtR3JvdXAoKTtcclxuICAgICAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHZhbD8uYnVuZGxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNCdW5kbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RGb3JtPy5nZXQoXCJidW5kbGluZ1wiKT8uc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0uY29udHJvbHNbaW5kZXhdLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBwcm9kQnVuZGxlOiB2YWw/LmJ1bmRsZU5hbWUsXHJcbiAgICAgICAgICAgIHByb2RMZW46IHRoaXMucGFkM0RpZ2l0cyh2YWw/Lmxlbmd0aCksXHJcbiAgICAgICAgICAgIHByb2RRdHk6IHZhbD8ucXVhbnRpdHksXHJcbiAgICAgICAgICAgIHByb2RSZWY6IHZhbD8ucmVmZXJlbmNlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRpbmcgdGhlIEJ1bmRsZVxyXG4gIHVwZGF0ZUJ1bmRsaW5nKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFzQnVuZGxlID0gZXZlbnQuY3VycmVudFRhcmdldD8uY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmhhc0J1bmRsZSkge1xyXG4gICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzPy5mb3JFYWNoKFxyXG4gICAgICAgIChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlU2FtZUJ1bmRsZVJlZmVyZW5jZShudWxsLCBpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVUb3RhbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgYW55IHZhbHVlIGlzIGVtcHR5IG9yIHVuZGVmaW5lZFxyXG4gIGlzTnVsbE9yRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBmb3IgYW55IGVycm9ycyB3aGlsZSB1cGRhdGluZyB0aGUgcXVhbnRpdHlcclxuICBoYXNFcnJvckluZGV4KGluZGV4OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmVycm9ySW5kZXhbaW5kZXhdID09IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiBhbnkgU2FtZSBSZWZlcmVuY2UgRXJyb3JcclxuICBoYXNQcm9kUmVmRXJyb3JJbmRleChpbmRleDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNQcm9kUmVmSW5kZXhbaW5kZXhdID09IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBHcm91cCB0aGUgUXVhbnRpdHkgdmFsdWVzIGJhc2VkIG9uIGJ1bmRsZVxyXG4gIGdyb3VwQnlCdW5kbGUoaXRlbXM6IGFueSwga2V5OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZShcclxuICAgICAgKHJlc3VsdDogYW55LCBpdGVtOiBhbnkpID0+ICh7XHJcbiAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgIFtpdGVtW2tleV1dOiBbLi4uKHJlc3VsdFtpdGVtW2tleV1dIHx8IFtdKSwgaXRlbV0sXHJcbiAgICAgIH0pLFxyXG4gICAgICB7fVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIHRoZSB0b3RhbCBidW5kbGUgd2VpZ2h0IGFuZCB1cGRhdGUgdGhlIGVycm9yIGlmIGl0IHJlYWNoZXMgdG8gbWF4aW11bSBidW5kbGUgc2l6ZSBmb3IgZWFjaCBidW5kbGVcclxuICBjaGVja1RvdGFsQnVuZGxlV2VpZ2h0KGZvcm1WYWx1ZXM6IGFueSk6IGFueSB7XHJcbiAgICBsZXQgZ3JvdXBUb3RhbCA9IDA7XHJcbiAgICBmb3JtVmFsdWVzPy5mb3JFYWNoKChjdXJyZW50VmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBxdHkgPSBwYXJzZUZsb2F0KGN1cnJlbnRWYWx1ZT8ucHJvZFF0eSk7XHJcbiAgICAgIGNvbnN0IGxlbiA9IHBhcnNlRmxvYXQoY3VycmVudFZhbHVlPy5wcm9kTGVuKTtcclxuICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkocXR5KSAmJiAhdGhpcy5pc051bGxPckVtcHR5KGxlbikpIHtcclxuICAgICAgICBncm91cFRvdGFsICs9IHF0eSAqIGxlbjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBncm91cFRvdGFsID0gZ3JvdXBUb3RhbCAqICh0aGlzLmN1dHRpbmdWYWxpZGF0aW9uPy53ZWlnaHRQZXJMTSB8fCAxKTtcclxuICAgIHJldHVybiBncm91cFRvdGFsID4gKHRoaXMuY3V0dGluZ1ZhbGlkYXRpb24/Lm1heEJ1bmRsZUxvYWQgfHwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgdGhlIGxhc3Qgcm93IG9mIGEgYnVuZGxlIGJhc2VkIG9uIGJ1bmRsZSBuYW1lXHJcbiAgZ2V0TGFzdEJ1bmRsZUluZGV4KGJ1bmRsZU5hbWU6IGFueSk6IGFueSB7XHJcbiAgICBsZXQgaW5kZXhWYWx1ZTogYW55ID0gbnVsbDtcclxuICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybVxyXG4gICAgICA/LmdldFJhd1ZhbHVlKClcclxuICAgICAgPy5mb3JFYWNoKChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudD8ucHJvZEJ1bmRsZT8udG9VcHBlckNhc2UoKSA9PSBidW5kbGVOYW1lPy50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBpbmRleFZhbHVlID0gaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBpbmRleFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSBSZWZlcmVuY2UgdmFsdWUgb2YgdGhlIHNhbWUgYnVuZGxlIGFuZCB1cGRhdGVcclxuICBnZXRQcmV2QnVuZGxlUmVmZXJlbmNlVmFsdWUoaW5kZXg6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBidW5kbGVOYW1lID1cclxuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID09IG51bGxcclxuICAgICAgICA/IHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdXHJcbiAgICAgICAgICAgID8uZ2V0KFwicHJvZEJ1bmRsZVwiKVxyXG4gICAgICAgICAgICA/LnZhbHVlPy50b1VwcGVyQ2FzZSgpXHJcbiAgICAgICAgOiB0aGlzLm1vZGFsQnVuZGxlRm9ybT8uZ2V0KFwibW9kQnVuZGxlXCIpPy52YWx1ZT8udG9VcHBlckNhc2UoKTtcclxuICAgIGxldCByZWZWYWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaW5kOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb3RoZXJSZWZWYWx1ZSA9XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRdPy5nZXQoXCJwcm9kUmVmXCIpPy52YWx1ZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGVsZW1lbnQ/LnZhbHVlPy5wcm9kQnVuZGxlPy50b1VwcGVyQ2FzZSgpID09XHJcbiAgICAgICAgICBidW5kbGVOYW1lPy50b1VwcGVyQ2FzZSgpICYmXHJcbiAgICAgICAgKGluZCAhPSBpbmRleCB8fCB0aGlzLnNlbGVjdGVkSW5kZXggIT0gbnVsbCkgJiZcclxuICAgICAgICAhdGhpcy5pc051bGxPckVtcHR5KG90aGVyUmVmVmFsdWUpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJlZlZhbHVlID0gb3RoZXJSZWZWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVmVmFsdWUgfHwgXCJcIjtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIFNhbWUgUmVmcmVuY2UgaXMgYWxyZWFkeSB1c2VkXHJcbiAgY2hlY2tIYXNTYW1lUmVmZXJlbmNlKFxyXG4gICAgaW5kZXg6IGFueSxcclxuICAgIGN1cnJlbnRSZWZlcmVuY2U6IGFueSxcclxuICAgIGJ1bmRsZU5hbWU6IGFueVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGhhc1JlZiA9IGZhbHNlO1xyXG4gICAgY29uc3QgcHJvZFJlZlZhbHVlcyA9IHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHM/LmZpbHRlcihcclxuICAgICAgKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBlbGVtZW50Py52YWx1ZT8ucHJvZFJlZiA9PSBjdXJyZW50UmVmZXJlbmNlICYmXHJcbiAgICAgICAgICBlbGVtZW50Py52YWx1ZT8ucHJvZEJ1bmRsZT8udG9VcHBlckNhc2UoKSAhPVxyXG4gICAgICAgICAgICBidW5kbGVOYW1lPy50b1VwcGVyQ2FzZSgpICYmXHJcbiAgICAgICAgICAhdGhpcy5pc051bGxPckVtcHR5KGN1cnJlbnRSZWZlcmVuY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGlmIChwcm9kUmVmVmFsdWVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzUHJvZFJlZkluZGV4W2luZGV4XSA9IHRydWU7XHJcbiAgICAgIGhhc1JlZiA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhhc1Byb2RSZWZJbmRleFtpbmRleF0gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiBoYXNSZWY7XHJcbiAgfVxyXG5cclxuICAvLyBVcGRhdGUgdGhlIFJlZmVyZW5jZSBWYWx1ZSBpZiBhbHJlYWR5IHRoZSBzYW1lIGJ1bmRsZSBpcyBwcmVzZW50XHJcbiAgdXBkYXRlU2FtZUJ1bmRsZVJlZmVyZW5jZShcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBpbmRleDogYW55LFxyXG4gICAgaXNSZWZlcmVuY2U6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgYnVuZGxlTmFtZSA9XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kQnVuZGxlXCIpPy52YWx1ZSB8fFxyXG4gICAgICB0aGlzLm1vZGFsQnVuZGxlRm9ybS5nZXQoXCJtb2RCdW5kbGVcIik/LnZhbHVlO1xyXG4gICAgY29uc3QgbmV3UmVmVmFsdWUgPVxyXG4gICAgICBldmVudCAhPSBudWxsXHJcbiAgICAgICAgPyBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgOiB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFJlZlwiKT8udmFsdWUgfHxcclxuICAgICAgICAgIHRoaXMubW9kYWxCdW5kbGVGb3JtPy5nZXQoXCJtb2RSZWZcIikudmFsdWU7XHJcbiAgICBpc1JlZmVyZW5jZSA9IGlzUmVmZXJlbmNlXHJcbiAgICAgID8gdGhpcy5jaGVja0hhc1NhbWVSZWZlcmVuY2UoaW5kZXgsIG5ld1JlZlZhbHVlLCBidW5kbGVOYW1lKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgaWYgKCFpc1JlZmVyZW5jZSkge1xyXG4gICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0uY29udHJvbHMuZm9yRWFjaCgoZWxlbWVudDogYW55LCBpbmQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGVsZW1lbnQ/LnZhbHVlPy5wcm9kQnVuZGxlPy50b1VwcGVyQ2FzZSgpID09XHJcbiAgICAgICAgICAgIGJ1bmRsZU5hbWU/LnRvVXBwZXJDYXNlKCkgJiZcclxuICAgICAgICAgIGluZCAhPSBpbmRleCAmJlxyXG4gICAgICAgICAgIXRoaXMuaXNOdWxsT3JFbXB0eShuZXdSZWZWYWx1ZSkgJiZcclxuICAgICAgICAgICF0aGlzLmlzTnVsbE9yRW1wdHkoYnVuZGxlTmFtZSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kXVxyXG4gICAgICAgICAgICA/LmdldChcInByb2RSZWZcIilcclxuICAgICAgICAgICAgPy5zZXRWYWx1ZShuZXdSZWZWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSB0aGUgc2FtZSBCdW5kbGUgUmVmcmVuY2UgVmFsdWUgdG8gYWxsIG90aGVyIEJ1bmRsZXMgaWYgYW55IGNoYW5nZXMgaW4gUmVmZXJlbmNlIFZhbHVlXHJcbiAgcG9wdWxhdGVTYW1lQnVuZGxlUmVmZXJlbmNlKGV2ZW50OiBhbnksIGluZGV4OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBjb25zdCBwcmV2UmVmVmFsdWUgPSB0aGlzLmdldFByZXZCdW5kbGVSZWZlcmVuY2VWYWx1ZShpbmRleCk7XHJcbiAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHByZXZSZWZWYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XVxyXG4gICAgICAgICAgLmdldChcInByb2RSZWZcIilcclxuICAgICAgICAgID8uc2V0VmFsdWUocHJldlJlZlZhbHVlKTtcclxuICAgICAgICB0aGlzLm1vZGFsQnVuZGxlRm9ybS5nZXQoXCJtb2RSZWZcIikuc2V0VmFsdWUocHJldlJlZlZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkodGhpcy5nZXRQcmV2QnVuZGxlUmVmZXJlbmNlVmFsdWUoaW5kZXgpKSkge1xyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdXHJcbiAgICAgICAgICA/LmdldChcInByb2RSZWZcIilcclxuICAgICAgICAgID8uc2V0VmFsdWUodGhpcy5nZXRQcmV2QnVuZGxlUmVmZXJlbmNlVmFsdWUoaW5kZXgpIHx8IFwiXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVcGRhdGUgdGhlIEJ1bmRsZSBMaXN0IGlmIG1vcmUgdGhhbiBvbmUgYnVuZGxlL3Jvd3NcclxuICB1cGRhdGVCdW5kbGVMaXN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZ3JvdXBCeUJ1bmRsZShcclxuICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICBcInByb2RCdW5kbGVcIlxyXG4gICAgKTtcclxuICAgIGlmIChPYmplY3Qua2V5cyhmb3JtVmFsdWVzKT8ubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLmJ1bmRsZUxpc3QgPSBPYmplY3Qua2V5cyhmb3JtVmFsdWVzKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBCdW5kbGUgdmFsdWVzIG9ubHkgZm9yIG1vYmlsZSB2aWV3XHJcbiAgZ2V0QnVuZGxlVmFsdWVzKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgY29uc3QgYnVuZGxlVmFsdWVzID0gW107XHJcbiAgICBidW5kbGVWYWx1ZXMucHVzaChcclxuICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcInByb2RCdW5kbGVcIik/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgYnVuZGxlVmFsdWVzLnB1c2goXHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kUmVmXCIpPy52YWx1ZVxyXG4gICAgKTtcclxuICAgIHJldHVybiBidW5kbGVWYWx1ZXM7XHJcbiAgfVxyXG5cclxuICAvLyBFZGl0IEJ1bmRsZSBWYWx1ZXNcclxuICBlZGl0QnVuZGxlVmFsdWUoaW5kZXg6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLm1vZGFsQnVuZGxlRm9ybVxyXG4gICAgICA/LmdldChcIm1vZEJ1bmRsZVwiKVxyXG4gICAgICAuc2V0VmFsdWUoXHJcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF1cclxuICAgICAgICAgID8uZ2V0KFwicHJvZEJ1bmRsZVwiKVxyXG4gICAgICAgICAgPy52YWx1ZT8udG9VcHBlckNhc2UoKVxyXG4gICAgICApO1xyXG4gICAgdGhpcy5tb2RhbEJ1bmRsZUZvcm1cclxuICAgICAgPy5nZXQoXCJtb2RSZWZcIilcclxuICAgICAgPy5zZXRWYWx1ZShcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFJlZlwiKT8udmFsdWVcclxuICAgICAgKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZS9TYXZlIEJ1bmRsZSB2YWx1ZXNcclxuICBzYXZlQnVuZGxlRGV0YWlscyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW3RoaXMuc2VsZWN0ZWRJbmRleF1cclxuICAgICAgPy5nZXQoXCJwcm9kQnVuZGxlXCIpXHJcbiAgICAgID8uc2V0VmFsdWUodGhpcy5tb2RhbEJ1bmRsZUZvcm0/LmdldChcIm1vZEJ1bmRsZVwiKT8udmFsdWUudG9VcHBlckNhc2UoKSk7XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW3RoaXMuc2VsZWN0ZWRJbmRleF1cclxuICAgICAgPy5nZXQoXCJwcm9kUmVmXCIpXHJcbiAgICAgID8uc2V0VmFsdWUodGhpcy5tb2RhbEJ1bmRsZUZvcm0/LmdldChcIm1vZFJlZlwiKT8udmFsdWUpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlU2FtZUJ1bmRsZVJlZmVyZW5jZShudWxsLCB0aGlzLnNlbGVjdGVkSW5kZXgsIHRydWUpO1xyXG4gICAgdGhpcy51cGRhdGVUb3RhbCgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmNsb3NlYnV0dG9uLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSBDYXJ0IERlYXRpbHNcclxuICB1cGRhdGVDYXJ0RGV0YWlscygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWRGb3JtKCkpIHtcclxuICAgICAgbGV0IHBheUxvYWQ6IGFueSA9IHt9O1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNGaW5pc2hlZFByb2R1Y3QpIHtcclxuICAgICAgICBwYXlMb2FkID0ge1xyXG4gICAgICAgICAgcXVhbnRpdHk6IHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbMF0uZ2V0KFwicHJvZFF0eVwiKT8udmFsdWUsXHJcbiAgICAgICAgICBwcm9kdWN0OiB7XHJcbiAgICAgICAgICAgIGNvZGU6IHRoaXMucHJvZHVjdERldGFpbHM/LnByb2R1Y3Q/LmNvZGUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgam9iUmVmZXJlbmNlOiB0aGlzLnByb2R1Y3REZXRhaWxzPy5wcm9kdWN0Py5qb2JSZWZlcmVuY2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXlMb2FkID0ge1xyXG4gICAgICAgICAgcXVhbnRpdHk6IDEsXHJcbiAgICAgICAgICBjb25maWd1cmF0aW9uSW5mb3M6IFt0aGlzLnByb2R1Y3REZXRhaWxzPy5jb25maWdWYWx1ZXNdLFxyXG4gICAgICAgICAgc3ViTGluZUNvbmZpZ0luZm9zOiBbXSxcclxuICAgICAgICAgIGpvYlJlZmVyZW5jZTogdGhpcy5wcm9kdWN0RGV0YWlscz8ucHJvZHVjdD8uam9iUmVmZXJlbmNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9scz8uZm9yRWFjaChcclxuICAgICAgICAgIChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlnSW5mb3M6IGFueSA9IHtcclxuICAgICAgICAgICAgICBjb25maWd1cmF0b3JUeXBlOiBcIkNVVFRJTkdcIixcclxuICAgICAgICAgICAgICBxdWFudGl0eTogZWxlbWVudD8udmFsdWU/LnByb2RRdHksXHJcbiAgICAgICAgICAgICAgbGVuZ3RoOiBlbGVtZW50Py52YWx1ZT8ucHJvZExlbixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQnVuZGxlICYmIGVsZW1lbnQ/LnZhbHVlPy5wcm9kQnVuZGxlKSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnSW5mb3MuYnVuZGxlTmFtZSA9IGVsZW1lbnQ/LnZhbHVlPy5wcm9kQnVuZGxlO1xyXG4gICAgICAgICAgICAgIGNvbmZpZ0luZm9zLnJlZmVyZW5jZSA9IGVsZW1lbnQ/LnZhbHVlPy5wcm9kUmVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBheUxvYWQuc3ViTGluZUNvbmZpZ0luZm9zLnB1c2goY29uZmlnSW5mb3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcGF5TG9hZD8uY29uZmlndXJhdGlvbkluZm9zICYmXHJcbiAgICAgICAgICBwYXlMb2FkPy5jb25maWd1cmF0aW9uSW5mb3M/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgIHRoaXMuaXNOdWxsT3JFbXB0eShwYXlMb2FkPy5jb25maWd1cmF0aW9uSW5mb3NbMF0pXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkZWxldGUgcGF5TG9hZD8uY29uZmlndXJhdGlvbkluZm9zO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jYXJ0U2VydmljZVxyXG4gICAgICAgIC51cGRhdGVDYXJ0RW50cnkodGhpcy5jYXJ0SWQsIHRoaXMucHJvZHVjdERldGFpbHM/LmVudHJ5TnVtYmVyLCBwYXlMb2FkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LnN0YXR1c0NvZGU/LnRvTG93ZXJDYXNlKCkgPT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FydFNlcnZpY2UucmVsb2FkQWN0aXZlQ2FydCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0RW50aXJlcy5lbWl0KHRydWUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmNvbmZpZ3VyYXRpb25MaW5lTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JJbmRleFtyZXNwb25zZT8uY29uZmlndXJhdGlvbkxpbmVOdW1iZXIgLSAxXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2FydEVycm9yID1cclxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2U/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2U/LmVycm9yTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICAgICByZXNwb25zZT8uc3RhdHVzTWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMudXBkYXRlQ2FydEVudGlyZXMuZW1pdCh0aGlzLmFkZFRvQ2FydEVycm9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFRvQ2FydEVycm9yID1cclxuICAgICAgICAgICAgICBlcnJvcj8uZXJyb3I/LmVycm9yc1swXT8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3JzWzBdPy5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSBUb3RhbCBQcmljZSBhbmQgVG90YWwgbGVuZ3RoIGJhc2VkIG9uIHVzZXIgaW5wdXRzIG9uIGVhY2ggcm93XHJcbiAgdXBkYXRlVG90YWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvdGFsTGVuZ3RoID0gMDtcclxuICAgIHRoaXMudG90YWxQcmljZSA9IDA7XHJcbiAgICBpZiAoIXRoaXMuaXNGaW5pc2hlZFByb2R1Y3QpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZ3JvdXBCeUJ1bmRsZShcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmdldFJhd1ZhbHVlKCksXHJcbiAgICAgICAgXCJwcm9kQnVuZGxlXCJcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtLmNvbnRyb2xzLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF0eSA9IHBhcnNlRmxvYXQoZWxlbWVudD8udmFsdWU/LnByb2RRdHkpO1xyXG4gICAgICAgIGNvbnN0IGxlbiA9IHBhcnNlRmxvYXQoZWxlbWVudD8udmFsdWU/LnByb2RMZW4pO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRCdW5kbGVOYW1lID0gZWxlbWVudD8udmFsdWU/LnByb2RCdW5kbGU/LnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhdGhpcy5pc051bGxPckVtcHR5KHF0eSkgJiZcclxuICAgICAgICAgICF0aGlzLmlzTnVsbE9yRW1wdHkobGVuKSAmJlxyXG4gICAgICAgICAgIWlzTmFOKHF0eSkgJiZcclxuICAgICAgICAgICFpc05hTihsZW4pXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0b3RhbCA9IHF0eSAqIGxlbjtcclxuICAgICAgICAgIGlmICghdGhpcy5oYXNCdW5kbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckluZGV4W2luZGV4XSA9XHJcbiAgICAgICAgICAgICAgdG90YWwgKiAodGhpcy5jdXR0aW5nVmFsaWRhdGlvbj8ud2VpZ2h0UGVyTE0gfHwgMSkgPlxyXG4gICAgICAgICAgICAgICh0aGlzLmN1dHRpbmdWYWxpZGF0aW9uPy5tYXhCdW5kbGVMb2FkIHx8IDEwMDApXHJcbiAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrVG90YWxCdW5kbGVXZWlnaHQoZm9ybVZhbHVlc1tjdXJyZW50QnVuZGxlTmFtZV0pXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JJbmRleE5vID0gdGhpcy5nZXRMYXN0QnVuZGxlSW5kZXgoY3VycmVudEJ1bmRsZU5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShlcnJvckluZGV4Tm8pKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvckluZGV4W2Vycm9ySW5kZXhOb10gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9ySW5kZXhbaW5kZXhdID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4ocXR5KSAmJiAhaXNOYU4obGVuKSkge1xyXG4gICAgICAgICAgdGhpcy50b3RhbExlbmd0aCA9IHRoaXMudG90YWxMZW5ndGggKyB0b3RhbDtcclxuICAgICAgICAgIHRoaXMudG90YWxQcmljZSA9XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxMZW5ndGggKiB0aGlzLnByb2R1Y3REZXRhaWxzPy5wcmljZT8udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG90YWxMZW5ndGggPSBudWxsO1xyXG4gICAgICBjb25zdCBxdHkgPSB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzWzBdPy5nZXQoXCJwcm9kUXR5XCIpPy52YWx1ZTtcclxuICAgICAgaWYgKCFpc05hTihxdHkpKSB7XHJcbiAgICAgICAgdGhpcy50b3RhbFByaWNlID0gcXR5ICogdGhpcy5hY2Nlc3Nvcmllc1ByaWNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUNhcnREZXRhaWxzKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVdGlsaXR5IEZ1bmN0aW9uIHRvIGdldCBLZXkgVmFsdWVzXHJcbiAgZ2V0S2V5VmFsdWVzKHNvdXJjZTogYW55LCBzZWFyY2g6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgW2tleSwgbmV4dF0gPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xyXG4gICAgY29uc3QgeyBba2V5XTogdmFsdWUsIC4uLnJlc3QgfSA9IHNvdXJjZTtcclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAuLi4oa2V5ID09PSBzZWFyY2ggPyBbdmFsdWVdIDogdGhpcy5nZXRLZXlWYWx1ZXModmFsdWUsIHNlYXJjaCkpLFxyXG4gICAgICAuLi4obmV4dCA/IHRoaXMuZ2V0S2V5VmFsdWVzKHJlc3QsIHNlYXJjaCkgOiBbXSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSB2YWx1ZXMgb2YgUXVhbnRpdHkgRm9ybVxyXG4gIGdldFByb2R1Y3RRdWFudGl0eUZvcm1Hcm91cCgpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgIHRoaXMuaXNGaW5pc2hlZFByb2R1Y3QgPyBuZXcgQWNjZXNzb3JpZXNRdWFudGl0eSgpIDogbmV3IFByb2R1Y3RRdWFudGl0eSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByb2R1Y3RRdWFudGl0eUZvcm0oKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLnByb2R1Y3RGb3JtLmdldChcInByb2R1Y3RRdWFudGl0eVwiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvLyBBZGQgdGhlIFF1YW5pdHkgRm9ybSB3aGVuIHVzZXIgY2xpY2tzIG9uIEFkZCBNb3JlIGJ1dHRvblxyXG4gIGFkZFByb2R1Y3RRdWFudGl0eUZvcm1Hcm91cChldmVudD86IGFueSk6IHZvaWQge1xyXG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LnB1c2godGhpcy5nZXRQcm9kdWN0UXVhbnRpdHlGb3JtR3JvdXAoKSk7XHJcbiAgICBjb25zdCBidW5kbGVzID0gdGhpcy5ncm91cEJ5QnVuZGxlKFxyXG4gICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmdldFJhd1ZhbHVlKCksXHJcbiAgICAgIFwicHJvZEJ1bmRsZVwiXHJcbiAgICApO1xyXG4gICAgdGhpcy5kaXNhYmxlQWRkTW9yZSA9IHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8ubGVuZ3RoID4gOTk7XHJcbiAgICB0aGlzLmVycm9ySW5kZXhbdGhpcy5yb3dJbmRleF0gPSBmYWxzZTtcclxuICAgIHRoaXMuaGFzUHJvZFJlZkluZGV4W3RoaXMucm93SW5kZXgrK10gPSBmYWxzZTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuYWRkTW9yZUNsaWNrZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRlIHRoZSBRdWFudGl0eSBmb3JtIGlmIHVzZXIgY2xpY2tzIG9uIHJlbW92ZSBidXR0b25cclxuICByZW1vdmVQcm9kdWN0UXVhbnRpdHlGb3JtKGluZGV4OiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0ucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5yb3dJbmRleC0tO1xyXG4gICAgdGhpcy5kaXNhYmxlQWRkTW9yZSA9IHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8ubGVuZ3RoID4gOTk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVRvdGFsKCk7XHJcbiAgICB0aGlzLmFkZE1vcmVDbGlja2VkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBKb2IgUmVmZXJlbmNlIEVycm9yc1xyXG4gIGpvYlJlZmVyZW5jZUVycm9ycygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZHVjdEZvcm0/LmdldChcImpvYlJlZmVyZW5jZVwiKT8uZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IFByb2R1Y3QgUXVhbnRpdHkgRXJyb3JzXHJcbiAgcHJvZFF0eUVycm9ycyhpbmRleDogYW55KTogYW55IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFF0eVwiKT8uZXJyb3JzIHx8XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcInByb2RRdHlcIik/LmludmFsaWQpICYmXHJcbiAgICAgICh0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFF0eVwiKT8uZGlydHkgfHxcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFF0eVwiKT8udG91Y2hlZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgUHJvZHVjdCBMZW5ndGggRXJyb3JzXHJcbiAgcHJvZExlbkVycm9ycyhpbmRleDogYW55KTogYW55IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZExlblwiKT8uZXJyb3JzIHx8XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcInByb2RMZW5cIik/LmludmFsaWQpICYmXHJcbiAgICAgICh0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZExlblwiKT8uZGlydHkgfHxcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZExlblwiKT8udG91Y2hlZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgUHJvZHVjdCBMZW5ndGggRXJyb3JzXHJcbiAgbWluTGVuRXJyb3JzKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzTWlubGVuZ3RoRXJyb3I/LmluZGV4T2YoaW5kZXgpICE9PSAtMTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBQcm9kdWN0IEJ1bmRsZSBFcnJvcnNcclxuICBwcm9kQnVuZGxlRXJyb3JzKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kQnVuZGxlXCIpPy5lcnJvcnMgfHxcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZEJ1bmRsZVwiKVxyXG4gICAgICAgICAgPy5pbnZhbGlkKSAmJlxyXG4gICAgICAodGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcInByb2RCdW5kbGVcIik/LmRpcnR5IHx8XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcInByb2RCdW5kbGVcIik/LnRvdWNoZWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IFByb2R1Y3QgQnVubGRlIFJlZmVyZW5jZSBFcnJvcnNcclxuICBwcm9kUmVmRXJyb3JzKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kUmVmXCIpPy5lcnJvcnMgfHxcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFJlZlwiKT8uaW52YWxpZCkgJiZcclxuICAgICAgKHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kUmVmXCIpPy5kaXJ0eSB8fFxyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kUmVmXCIpPy50b3VjaGVkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIGZvcm0gaXMgVmFsaWQgb3Igbm90XHJcbiAgaXNWYWxpZEZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaGFzQnVuZGxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2R1Y3RGb3JtPy52YWxpZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHZhbGlkID0gdGhpcy5pc0ZpbmlzaGVkUHJvZHVjdFxyXG4gICAgICAgICAgPyBlbGVtZW50Py5nZXQoXCJwcm9kUXR5XCIpPy52YWxpZFxyXG4gICAgICAgICAgOiBlbGVtZW50Py5nZXQoXCJwcm9kTGVuXCIpPy52YWxpZCAmJiBlbGVtZW50Py5nZXQoXCJwcm9kUXR5XCIpPy52YWxpZDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWQ7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiBhbnkgZXJyb3JzIHByZXNlbnQgb24gYW55IHJvdyBhbmQgZGlwbGF5IGl0IG9uIFVJXHJcbiAgaGFzRXJyb3JzKGluZGV4OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFF0eVwiKT8uZXJyb3JzIHx8XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kTGVuXCIpPy5lcnJvcnMgfHxcclxuICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcInByb2RCdW5kbGVcIik/LmVycm9ycyB8fFxyXG4gICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFJlZlwiKT8uZXJyb3JzXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgQW55IEVudHJ5IGhhcyBsZXNzIHRoYW4gTWluaW11bSBsZW5ndGhcclxuICBjaGVja0hhc01pbkxlbmd0aFF0eSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFzTWlubGVuZ3RoRXJyb3IgPSBbXTtcclxuICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaW5kOiBhbnkpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGVsZW1lbnQ/LnZhbHVlPy5wcm9kTGVuIDwgdGhpcy5jdXR0aW5nVmFsaWRhdGlvbj8ubWluTGVuZ3RoICYmXHJcbiAgICAgICAgIXRoaXMuaXNOdWxsT3JFbXB0eShlbGVtZW50Py52YWx1ZT8ucHJvZExlbilcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5oYXNNaW5sZW5ndGhFcnJvci5wdXNoKGluZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcGFkM0RpZ2l0cyh2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGNvbnN0IHF0eSA9IHZhbHVlO1xyXG4gICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkocXR5KSAmJiAhaXNOYU4ocXR5KSkge1xyXG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChxdHkpXHJcbiAgICAgICAgPy50b0ZpeGVkKDMpXHJcbiAgICAgICAgPy5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pK1xcYikvZywgXCIkMSxcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDb252ZXJ0IExlbmd0aCB0byBkZW1pYWwgZm9ybWF0IGFmdGVyIGJsdXJcclxuICB1cGRhdGVMZW50aFZhbHVlKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkoZWxlbWVudD8udmFsdWUpKSB7XHJcbiAgICAgIGVsZW1lbnQudmFsdWUgPSB0aGlzLnBhZDNEaWdpdHMoZWxlbWVudC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoZWNrSGFzTWluTGVuZ3RoUXR5KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9kdWN0RGV0YWlsc1wiIFtmb3JtR3JvdXBdPVwicHJvZHVjdEZvcm1cIj5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJjb2wgcC0wIGJ1bmRsaW5nIHByLTJcIlxyXG4gICAgICAgICpuZ0lmPVwiIWlzRmluaXNoZWRQcm9kdWN0ICYmICFpc0ZsYXNoaW5nUHJvZHVjdFwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInByLTIgZm9udC13ZWlnaHQtYm9sZCB0ZXh0XCI+QnVuZGxpbmcgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3dpdGNoXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnVuZGxpbmdcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlQnVuZGxpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImhhc0J1bmRsZVwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaGFzQnVuZGxlXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGlkZXIgcm91bmRcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgY2xhc3M9XCJxdWFudGl0eSBib3JkZXIgcC0yIG10LTRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwicHJvZHVjdFF1YW50aXR5XCI+XHJcbiAgICAgICAgPGRhdGFsaXN0IGlkPVwiYnVuZGxlTGlzdFwiPlxyXG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGJ1bmRsZUxpc3RcIj5cclxuICAgICAgICAgICAge3sgYnVuZGxlIH19XHJcbiAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICA8L2RhdGFsaXN0PlxyXG4gICAgICAgIDx0YWJsZVxyXG4gICAgICAgICAgY2xhc3M9XCJuby1ib3JkZXJcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAnaGFzLWJ1bmRsZSc6IGhhc0J1bmRsZSxcclxuICAgICAgICAgICAgYWNjZXNzb3JpZXM6IGlzRmluaXNoZWRQcm9kdWN0XHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0aD5RdWFudGl0eTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFpc0ZpbmlzaGVkUHJvZHVjdFwiPkxlbmd0aCAoTE0pPC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwiaGFzQnVuZGxlXCI+XHJcbiAgICAgICAgICAgICAgQnVuZGxlXHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5mby1pY29uXCJcclxuICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJCdW5kbGUgSW5mb3JtYXRpb24gZ29lcyBoZXJlLi4uLlwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzQnVuZGxlXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImQtbm9uZVwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZC1sZy1ibG9jayc6IGxpc3RWaWV3IH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5mby1pY29uXCJcclxuICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJSZWZlcmVuY2UgSW5mb3JtYXRpb24gZ29lcyBoZXJlLi4uLlwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbCBvZiBwcm9kdWN0Rm9ybS5nZXQoJ3Byb2R1Y3RRdWFudGl0eScpWydjb250cm9scyddO1xyXG4gICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHByb2QtcXR5XCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9kUXR5XCJcclxuICAgICAgICAgICAgICAgICAgICBtaW5sZW5ndGg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICBPbmx5TnVtYmVyPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidXBkYXRlVG90YWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWlzRmluaXNoZWRQcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0bW9kZT1cImRlY2ltYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHByb2QtbGVuXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9kTGVuXCJcclxuICAgICAgICAgICAgICAgICAgICAjcHJvZExlblxyXG4gICAgICAgICAgICAgICAgICAgIG1pbmxlbmd0aD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjdcIlxyXG4gICAgICAgICAgICAgICAgICAgIE9ubHlOdW1iZXI9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJ1cGRhdGVUb3RhbCgpOyB1cGRhdGVMZW50aFZhbHVlKHByb2RMZW4pXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJoYXNCdW5kbGUgJiYgIWlzRmluaXNoZWRQcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmVcIiBbbmdDbGFzc109XCJ7ICdkLWxnLWJsb2NrJzogbGlzdFZpZXcgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHJvZC1idW5kbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZEJ1bmRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjcHJvZEJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kQnVuZGxlLnZhbHVlID0gcHJvZEJ1bmRsZS52YWx1ZS50b1VwcGVyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbWlubGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUb3RhbCgpOyBwb3B1bGF0ZVNhbWVCdW5kbGVSZWZlcmVuY2UobnVsbCwgaSlcclxuICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwidXBkYXRlQnVuZGxlTGlzdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGxpc3Q9XCJidW5kbGVMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdkLWxnLW5vbmUgZC14bC1ub25lJzogbGlzdFZpZXcgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicC0wIG0tMFwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBnZXRCdW5kbGVWYWx1ZXMoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudS1idXR0b25cIiAqbmdJZj1cIiFsaXN0Vmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZHJvcGxlZnRcIiAqbmdJZj1cImhhc0J1bmRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cIiNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbS0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRhcmdldD1cIiNidW5kbGVNb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRCdW5kbGVWYWx1ZShpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0IEJ1bmRsZSBWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG0tMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpID4gMCB8fCBwcm9kdWN0UXVhbnRpdHlGb3JtLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVQcm9kdWN0UXVhbnRpdHlGb3JtKGksICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJoYXNCdW5kbGUgJiYgIWlzRmluaXNoZWRQcm9kdWN0ICYmIGxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmVcIiBbbmdDbGFzc109XCJ7ICdkLWxnLWJsb2NrJzogbGlzdFZpZXcgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHJvZC1yZWZlcmVuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbWlubGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwicG9wdWxhdGVTYW1lQnVuZGxlUmVmZXJlbmNlKCRldmVudCwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZFJlZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVG90YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU2FtZUJ1bmRsZVJlZmVyZW5jZSgkZXZlbnQsIGksIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxpc3RWaWV3IHx8ICFoYXNCdW5kbGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA+IDAgfHwgcHJvZHVjdFF1YW50aXR5Rm9ybS5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZSBjbG9zZSBkLXNtLW5vbmUgZC1tZC1ub25lIGQtbGctYmxvY2sgZC14bC1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVByb2R1Y3RRdWFudGl0eUZvcm0oaSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcy1jaXJjbGUgY3VzdG9tLWFycm93IHJlbW92ZS1pY29uXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJoYXNFcnJvcnMoaSlcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTBcIiAqbmdJZj1cInByb2RRdHlFcnJvcnMoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgdmFsaWQgUXVhbnRpdHlcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJwcm9kTGVuRXJyb3JzKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIHZhbGlkIExlbmd0aFxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cIm1pbkxlbkVycm9ycyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE1pbmltdW0gbGVuZ3RoIHNob3VsZCBiZSBhdCBsZWFzdFxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGN1dHRpbmdWYWxpZGF0aW9uPy5taW5MZW5ndGggfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJwcm9kQnVuZGxlRXJyb3JzKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIHZhbGlkIEJ1bmRsZSBOYW1lXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwicHJvZFJlZkVycm9ycyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciB2YWxpZCBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiaGFzRXJyb3JJbmRleChpKVwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyB0aGlzLmFkZFRvQ2FydEVycm9yIHx8ICdTaG91bGQgbm90IGV4Y2VlZCBtYXhpbXVtIGJ1bmRsZSBzaXplJyB9fVxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImhhc1Byb2RSZWZFcnJvckluZGV4KGkpXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIFRoaXMgUmVmZXJlbmNlIHZhbHVlIGlzIGFscmVhZHkgdXNlZC4gUGxlYXNlIHVzZSBvdGhlciB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cInNpbXBsZSBwbC0yXCJcclxuICAgICAgICAgICpuZ0lmPVwiIWlzRmluaXNoZWRQcm9kdWN0ICYmICFkaXNhYmxlQWRkTW9yZVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiYWRkUHJvZHVjdFF1YW50aXR5Rm9ybUdyb3VwKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMSBhZGQtbW9yZVwiPiA8L3NwYW4+XHJcbiAgICAgICAgICBBZGQgbW9yZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjwhLS0gPGRpdlxyXG4gIGNsYXNzPVwicm93IG10LTQgY29sLXNtLTEyIGFsZXJ0IGFsZXJ0LWRhbmdlciBqdXN0aWZ5LWNvbnRlbnQtc3RhcnRcIlxyXG4gIHJvbGU9XCJhbGVydFwiXHJcbiAgKm5nSWY9XCJhZGRUb0NhcnRFcnJvclwiXHJcbj5cclxuICA8aW1nXHJcbiAgICBjbGFzcz1cIm1yLTNcIlxyXG4gICAgc3JjPVwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9lcnJvcmljb24uc3ZnXCJcclxuICAgIGFsdD1cImFsZXJ0XCJcclxuICAvPlxyXG4gIDxzcGFuPlxyXG4gICAge3sgYWRkVG9DYXJ0RXJyb3IgfX1cclxuICA8L3NwYW4+XHJcbjwvZGl2PiAtLT5cclxuXHJcbjxkaXZcclxuICBjbGFzcz1cIm1vZGFsIGZhZGUgZWRpdC1idW5kbGUtZm9ybVwiXHJcbiAgaWQ9XCJidW5kbGVNb2RhbFwiXHJcbiAgcm9sZT1cImRpYWxvZ1wiXHJcbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPkJ1bmRsZSBWYWx1ZTwvaDQ+XHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbi1jbG9zZSBpbnZpdGUtcG9wLWNsb3NlXCJcclxuICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcbiAgICAgICAgPjwvaT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG0tMCBwbC0yIHByLTJcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBuby1ib3JkZXJcIiAqbmdJZj1cIiFpc0ZpbmlzaGVkUHJvZHVjdFwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgQnVuZGxlXHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5mby1pY29uXCJcclxuICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJCdW5kbGUgSW5mb3JtYXRpb24gZ29lcyBoZXJlLi4uLlwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICBSZWZlcmVuY2VcclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZvLWljb25cIlxyXG4gICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlJlZmVyZW5jZSBJbmZvcm1hdGlvbiBnb2VzIGhlcmUuLi4uXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgW2Zvcm1Hcm91cF09XCJtb2RhbEJ1bmRsZUZvcm1cIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkYXRhbGlzdCBpZD1cIm1vZEJ1bmRsZUxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGJ1bmRsZUxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBidW5kbGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L2RhdGFsaXN0PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1vZEJ1bmRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICNtb2RCdW5kbGVcclxuICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInVwZGF0ZUJ1bmRsZUxpc3QoKVwiXHJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJtb2RCdW5kbGUudmFsdWUgPSBtb2RCdW5kbGUudmFsdWUudG9VcHBlckNhc2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgIGxpc3Q9XCJtb2RCdW5kbGVMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicG9wdWxhdGVTYW1lQnVuZGxlUmVmZXJlbmNlKG51bGwsIHNlbGVjdGVkSW5kZXgpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNVwiXHJcbiAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJwb3B1bGF0ZVNhbWVCdW5kbGVSZWZlcmVuY2UoJGV2ZW50LCBzZWxlY3RlZEluZGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1vZFJlZlwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgI2Nsb3NlYnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJzYXZlQnVuZGxlRGV0YWlscygkZXZlbnQpXCIgY2xhc3M9XCJidG5cIj5cclxuICAgICAgICAgIFNhdmVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|