buildingproduct-library 0.2.73
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/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/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.73.tgz +0 -0
- package/buildingproduct-library.d.ts +5 -0
- package/bundles/buildingproduct-library.umd.js +9907 -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 +126 -0
- package/esm2015/lib/account-dropdown/account-dropdown.module.js +55 -0
- package/esm2015/lib/account-dropdown/account-dropdown.service.js +55 -0
- package/esm2015/lib/checkout/add-new-address/add-new-address.component.js +435 -0
- package/esm2015/lib/checkout/checkout.module.js +141 -0
- package/esm2015/lib/checkout/custom-checkout/custom-checkout.component.js +362 -0
- package/esm2015/lib/checkout/order-confirmation/order-confirmation.component.js +41 -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 +92 -0
- package/esm2015/lib/checkout/order-review/order-review-list/order-review-list.component.js +94 -0
- package/esm2015/lib/checkout/order-review/order-review.component.js +147 -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 +94 -0
- package/esm2015/lib/custom-cart/custom-cart.module.js +91 -0
- package/esm2015/lib/custom-header-logo/custom-header-logo.component.js +26 -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 +138 -0
- package/esm2015/lib/custom-mini-cart/custom-mini-cart.module.js +68 -0
- package/esm2015/lib/custom-navigation/custom-navigation/custom-navigation.component.js +121 -0
- package/esm2015/lib/custom-navigation/custom-navigation.module.js +89 -0
- package/esm2015/lib/custom-order-details/custom-order-details.component.js +197 -0
- package/esm2015/lib/custom-order-details/custom-order-details.module.js +91 -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 +108 -0
- package/esm2015/lib/custom-order-details/order-detail-list/order-detail-list.component.js +103 -0
- package/esm2015/lib/custom-order-history/custom-order-history.component.js +652 -0
- package/esm2015/lib/custom-order-history/custom-order-history.module.js +97 -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 +96 -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 +115 -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 +33 -0
- package/esm2015/lib/custom-saved-cart/custom-saved-cart.component.js +107 -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 +39 -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 +127 -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 +134 -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 +342 -0
- package/esm2015/lib/my-account/my-account.component.js +85 -0
- package/esm2015/lib/my-account/my-account.module.js +91 -0
- package/esm2015/lib/my-team/my-team.component.js +418 -0
- package/esm2015/lib/my-team/my-team.module.js +96 -0
- package/esm2015/lib/my-team/team-member.service.js +123 -0
- package/esm2015/lib/pipes/custom-date-pipe.pipe.js +26 -0
- package/esm2015/lib/preference/preference.component.js +19 -0
- package/esm2015/lib/preference/preference.module.js +45 -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 +73 -0
- package/esm2015/lib/services/endPointURL.js +187 -0
- package/esm2015/lib/services/find-store.service.js +61 -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 +44 -0
- package/esm2015/lib/shared/CustomProduct.js +47 -0
- package/esm2015/lib/shared/active-saved-cart/active-saved-cart.component.js +105 -0
- package/esm2015/lib/shared/custom-breadcrum/custom-breadcrum.component.js +92 -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 +355 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.js +360 -0
- package/esm2015/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.js +575 -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 +123 -0
- package/esm2015/lib/shared/regEx.validator.js +15 -0
- package/esm2015/lib/shared/saved-cart-popup/saved-cart-popup.component.js +85 -0
- package/esm2015/lib/shared/shared-components.module.js +108 -0
- package/esm2015/lib/shared/shared-download-order/shared-download-order.component.js +143 -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 +9190 -0
- package/fesm2015/buildingproduct-library.js.map +1 -0
- package/lib/account-dropdown/account-dropdown.component.d.ts +22 -0
- package/lib/account-dropdown/account-dropdown.module.d.ts +10 -0
- package/lib/account-dropdown/account-dropdown.service.d.ts +14 -0
- package/lib/checkout/add-new-address/add-new-address.component.d.ts +29 -0
- package/lib/checkout/checkout.module.d.ts +26 -0
- package/lib/checkout/custom-checkout/custom-checkout.component.d.ts +80 -0
- package/lib/checkout/order-confirmation/order-confirmation.component.d.ts +26 -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 +27 -0
- package/lib/checkout/order-review/order-review-list/order-review-list.component.d.ts +28 -0
- package/lib/checkout/order-review/order-review.component.d.ts +44 -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 +25 -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 +45 -0
- package/lib/custom-mini-cart/custom-mini-cart.module.d.ts +14 -0
- package/lib/custom-navigation/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 +60 -0
- package/lib/custom-order-details/custom-order-details.module.d.ts +17 -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 +30 -0
- package/lib/custom-order-details/order-detail-list/order-detail-list.component.d.ts +28 -0
- package/lib/custom-order-history/custom-order-history.component.d.ts +96 -0
- package/lib/custom-order-history/custom-order-history.module.d.ts +17 -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 +32 -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 +68 -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 +15 -0
- package/lib/custom-saved-cart/custom-saved-cart.component.d.ts +57 -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 +11 -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 +24 -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 +62 -0
- package/lib/my-account/my-account.component.d.ts +26 -0
- package/lib/my-account/my-account.module.d.ts +18 -0
- package/lib/my-team/my-team.component.d.ts +96 -0
- package/lib/my-team/my-team.module.d.ts +17 -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/preference/preference.component.d.ts +8 -0
- package/lib/preference/preference.module.d.ts +10 -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 +153 -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 +15 -0
- package/lib/shared/CustomProduct.d.ts +27 -0
- package/lib/shared/active-saved-cart/active-saved-cart.component.d.ts +56 -0
- package/lib/shared/custom-breadcrum/custom-breadcrum.component.d.ts +28 -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 +74 -0
- package/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.d.ts +79 -0
- package/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.d.ts +93 -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 +31 -0
- package/lib/shared/regEx.validator.d.ts +8 -0
- package/lib/shared/saved-cart-popup/saved-cart-popup.component.d.ts +37 -0
- package/lib/shared/shared-components.module.d.ts +24 -0
- package/lib/shared/shared-download-order/shared-download-order.component.d.ts +37 -0
- package/lib/spa-custom-header.component.d.ts +11 -0
- package/lib/spa-custom-header.module.d.ts +28 -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 +90 -0
- package/public-api.d.ts +31 -0
|
@@ -0,0 +1,575 @@
|
|
|
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 "@spartacus/core";
|
|
11
|
+
import * as i4 from "@spartacus/storefront";
|
|
12
|
+
import * as i5 from "@angular/common";
|
|
13
|
+
import * as i6 from "@ng-bootstrap/ng-bootstrap";
|
|
14
|
+
export class CustomProductQuantityFormComponent {
|
|
15
|
+
constructor(formBuilder, cdr, cartService, activeCartService, currentProductService) {
|
|
16
|
+
this.formBuilder = formBuilder;
|
|
17
|
+
this.cdr = cdr;
|
|
18
|
+
this.cartService = cartService;
|
|
19
|
+
this.activeCartService = activeCartService;
|
|
20
|
+
this.currentProductService = currentProductService;
|
|
21
|
+
this.env = sessionStorage.getItem('env');
|
|
22
|
+
this.environment = JSON.parse(this.env);
|
|
23
|
+
this.isDesktop = true;
|
|
24
|
+
this.isMobile = false;
|
|
25
|
+
this.isTablet = false;
|
|
26
|
+
this.totalPrice = '0.0';
|
|
27
|
+
this.hasBundle = false;
|
|
28
|
+
this.unitType = 'per LM';
|
|
29
|
+
this.accessoriesPrice = 0;
|
|
30
|
+
this.selectedColour = null;
|
|
31
|
+
this.isFinishedProduct = false;
|
|
32
|
+
this.isFlashingProduct = false;
|
|
33
|
+
this.listView = true;
|
|
34
|
+
this.productForm = new FormGroup({});
|
|
35
|
+
this.disableAddMore = false;
|
|
36
|
+
this.bundleList = [];
|
|
37
|
+
this.errorIndex = [];
|
|
38
|
+
this.hasProdRefIndex = [];
|
|
39
|
+
this.hasProdRef = false;
|
|
40
|
+
this.hasMinlengthError = [];
|
|
41
|
+
this.rowIndex = 0;
|
|
42
|
+
this.showWaitCursor = new BehaviorSubject(true);
|
|
43
|
+
this.addToCartError = null;
|
|
44
|
+
this.modalBundleForm = new FormGroup({});
|
|
45
|
+
this.editProdBundle = '';
|
|
46
|
+
this.editProdRef = '';
|
|
47
|
+
this.selectedIndex = null;
|
|
48
|
+
this.hasData = false;
|
|
49
|
+
this.product$ = this.currentProductService.getProduct();
|
|
50
|
+
this.updateCartEntires = new EventEmitter();
|
|
51
|
+
}
|
|
52
|
+
ngOnInit() {
|
|
53
|
+
var _a;
|
|
54
|
+
const cartObj = localStorage.getItem('spartacus⚿dimond-spa⚿cart');
|
|
55
|
+
this.cartId = (_a = JSON.parse(cartObj)) === null || _a === void 0 ? void 0 : _a.active;
|
|
56
|
+
this.screenWidth = window.innerWidth + 'px';
|
|
57
|
+
if (this.productDetails) {
|
|
58
|
+
this.createProductForm();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
ngOnChanges(changes) {
|
|
62
|
+
var _a;
|
|
63
|
+
if (!((_a = changes === null || changes === void 0 ? void 0 : changes.productDetails) === null || _a === void 0 ? void 0 : _a.firstChange)) {
|
|
64
|
+
this.cdr.detectChanges();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Create a Product Quantity Form
|
|
68
|
+
createProductForm() {
|
|
69
|
+
var _a, _b, _c, _d, _e;
|
|
70
|
+
this.accessoriesPrice = 0;
|
|
71
|
+
this.totalLength = null;
|
|
72
|
+
this.totalPrice = '0.0';
|
|
73
|
+
this.hasBundle = false;
|
|
74
|
+
this.disableAddMore = false;
|
|
75
|
+
this.bundleList = [];
|
|
76
|
+
this.errorIndex = [];
|
|
77
|
+
this.hasProdRefIndex = [];
|
|
78
|
+
this.rowIndex = 0;
|
|
79
|
+
this.productForm = new FormGroup({});
|
|
80
|
+
this.addToCartError = null;
|
|
81
|
+
this.productForm = this.formBuilder.group({
|
|
82
|
+
bundling: [''],
|
|
83
|
+
productQuantity: this.formBuilder.array([]),
|
|
84
|
+
jobReference: ['', [RegexValidator(RegexConstants.JOB_REFERENCE)]],
|
|
85
|
+
});
|
|
86
|
+
this.editProdBundle = '';
|
|
87
|
+
this.editProdRef = '';
|
|
88
|
+
this.selectedIndex = null;
|
|
89
|
+
this.hasProdRef = false;
|
|
90
|
+
this.hasMinlengthError = [];
|
|
91
|
+
if (this.isFinishedProduct) {
|
|
92
|
+
this.addProductQuantityFormGroup();
|
|
93
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[0]) === null || _b === void 0 ? void 0 : _b.patchValue({
|
|
94
|
+
prodQty: (_c = this.productDetails) === null || _c === void 0 ? void 0 : _c.quantity,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.modalBundleForm = this.formBuilder.group({
|
|
99
|
+
modBundle: ['', [RegexValidator(RegexConstants.BUNDLE_NAME)]],
|
|
100
|
+
modRef: ['', [RegexValidator(RegexConstants.JOB_REFERENCE)]],
|
|
101
|
+
});
|
|
102
|
+
(_e = (_d = this.productDetails) === null || _d === void 0 ? void 0 : _d.subLineConfigInfos) === null || _e === void 0 ? void 0 : _e.forEach((val, index) => {
|
|
103
|
+
var _a, _b;
|
|
104
|
+
this.addProductQuantityFormGroup();
|
|
105
|
+
if (!this.isNullOrEmpty(val === null || val === void 0 ? void 0 : val.bundleName)) {
|
|
106
|
+
this.hasBundle = true;
|
|
107
|
+
(_b = (_a = this.productForm) === null || _a === void 0 ? void 0 : _a.get('bundling')) === null || _b === void 0 ? void 0 : _b.setValue(true);
|
|
108
|
+
}
|
|
109
|
+
this.productQuantityForm.controls[index].patchValue({
|
|
110
|
+
prodBundle: val === null || val === void 0 ? void 0 : val.bundleName,
|
|
111
|
+
prodLen: this.pad3Digits(val === null || val === void 0 ? void 0 : val.length),
|
|
112
|
+
prodQty: val === null || val === void 0 ? void 0 : val.quantity,
|
|
113
|
+
prodRef: val === null || val === void 0 ? void 0 : val.reference,
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
this.cdr.detectChanges();
|
|
118
|
+
}
|
|
119
|
+
// Updating the Bundle
|
|
120
|
+
updateBundling(event) {
|
|
121
|
+
var _a, _b, _c;
|
|
122
|
+
this.hasBundle = ((_a = event.currentTarget) === null || _a === void 0 ? void 0 : _a.checked) === true;
|
|
123
|
+
if (this.hasBundle) {
|
|
124
|
+
(_c = (_b = this.productQuantityForm) === null || _b === void 0 ? void 0 : _b.controls) === null || _c === void 0 ? void 0 : _c.forEach((element, index) => {
|
|
125
|
+
this.updateSameBundleReference(null, index);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
this.updateTotal();
|
|
129
|
+
}
|
|
130
|
+
// Check if any value is empty or undefined
|
|
131
|
+
isNullOrEmpty(value) {
|
|
132
|
+
return value == null || value == undefined || value == '';
|
|
133
|
+
}
|
|
134
|
+
// Check for any errors while updating the quantity
|
|
135
|
+
hasErrorIndex(index) {
|
|
136
|
+
return this.errorIndex[index] == true;
|
|
137
|
+
}
|
|
138
|
+
// Check if any Same Reference Error
|
|
139
|
+
hasProdRefErrorIndex(index) {
|
|
140
|
+
return this.hasProdRefIndex[index] == true;
|
|
141
|
+
}
|
|
142
|
+
// Group the Quantity values based on bundle
|
|
143
|
+
groupByBundle(items, key) {
|
|
144
|
+
return items.reduce((result, item) => (Object.assign(Object.assign({}, result), { [item[key]]: [...(result[item[key]] || []), item] })), {});
|
|
145
|
+
}
|
|
146
|
+
// Check the total bundle weight and update the error if it reaches to maximum bundle size for each bundle
|
|
147
|
+
checkTotalBundleWeight(formValues) {
|
|
148
|
+
var _a, _b;
|
|
149
|
+
let groupTotal = 0;
|
|
150
|
+
formValues === null || formValues === void 0 ? void 0 : formValues.forEach((currentValue) => {
|
|
151
|
+
const qty = parseFloat(currentValue === null || currentValue === void 0 ? void 0 : currentValue.prodQty);
|
|
152
|
+
const len = parseFloat(currentValue === null || currentValue === void 0 ? void 0 : currentValue.prodLen);
|
|
153
|
+
if (!this.isNullOrEmpty(qty) && !this.isNullOrEmpty(len)) {
|
|
154
|
+
groupTotal += qty * len;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
groupTotal = groupTotal * (((_a = this.cuttingValidation) === null || _a === void 0 ? void 0 : _a.weightPerLM) || 1);
|
|
158
|
+
return groupTotal > (((_b = this.cuttingValidation) === null || _b === void 0 ? void 0 : _b.maxBundleLoad) || 1000);
|
|
159
|
+
}
|
|
160
|
+
// Get the last row of a bundle based on bundle name
|
|
161
|
+
getLastBundleIndex(bundleName) {
|
|
162
|
+
var _a, _b;
|
|
163
|
+
let indexValue = null;
|
|
164
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.getRawValue()) === null || _b === void 0 ? void 0 : _b.forEach((element, index) => {
|
|
165
|
+
var _a;
|
|
166
|
+
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())) {
|
|
167
|
+
indexValue = index;
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
return indexValue;
|
|
171
|
+
}
|
|
172
|
+
// Get the Reference value of the same bundle and update
|
|
173
|
+
getPrevBundleReferenceValue(index) {
|
|
174
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
175
|
+
const bundleName = this.selectedIndex == null
|
|
176
|
+
? (_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()
|
|
177
|
+
: (_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();
|
|
178
|
+
let refValue = '';
|
|
179
|
+
(_h = this.productQuantityForm) === null || _h === void 0 ? void 0 : _h.controls.forEach((element, ind) => {
|
|
180
|
+
var _a, _b, _c, _d, _e;
|
|
181
|
+
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;
|
|
182
|
+
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()) ==
|
|
183
|
+
(bundleName === null || bundleName === void 0 ? void 0 : bundleName.toUpperCase()) &&
|
|
184
|
+
(ind != index || this.selectedIndex != null) &&
|
|
185
|
+
!this.isNullOrEmpty(otherRefValue)) {
|
|
186
|
+
refValue = otherRefValue;
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
return refValue || '';
|
|
190
|
+
}
|
|
191
|
+
// Check if Same Refrence is already used
|
|
192
|
+
checkHasSameReference(index, currentReference, bundleName) {
|
|
193
|
+
var _a, _b;
|
|
194
|
+
let hasRef = false;
|
|
195
|
+
const prodRefValues = (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls) === null || _b === void 0 ? void 0 : _b.filter((element) => {
|
|
196
|
+
var _a, _b, _c;
|
|
197
|
+
return (((_a = element === null || element === void 0 ? void 0 : element.value) === null || _a === void 0 ? void 0 : _a.prodRef) == currentReference &&
|
|
198
|
+
((_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()) !=
|
|
199
|
+
(bundleName === null || bundleName === void 0 ? void 0 : bundleName.toUpperCase()) &&
|
|
200
|
+
!this.isNullOrEmpty(currentReference));
|
|
201
|
+
});
|
|
202
|
+
if ((prodRefValues === null || prodRefValues === void 0 ? void 0 : prodRefValues.length) > 0) {
|
|
203
|
+
this.hasProdRefIndex[index] = true;
|
|
204
|
+
hasRef = true;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this.hasProdRefIndex[index] = false;
|
|
208
|
+
}
|
|
209
|
+
this.cdr.detectChanges();
|
|
210
|
+
return hasRef;
|
|
211
|
+
}
|
|
212
|
+
// Update the Reference Value if already the same bundle is present
|
|
213
|
+
updateSameBundleReference(event, index, isReference = false) {
|
|
214
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
215
|
+
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) ||
|
|
216
|
+
((_d = this.modalBundleForm.get('modBundle')) === null || _d === void 0 ? void 0 : _d.value);
|
|
217
|
+
const newRefValue = event != null
|
|
218
|
+
? event.currentTarget.value
|
|
219
|
+
: ((_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) ||
|
|
220
|
+
((_h = this.modalBundleForm) === null || _h === void 0 ? void 0 : _h.get('modRef').value);
|
|
221
|
+
isReference = isReference
|
|
222
|
+
? this.checkHasSameReference(index, newRefValue, bundleName)
|
|
223
|
+
: false;
|
|
224
|
+
if (!isReference) {
|
|
225
|
+
this.productQuantityForm.controls.forEach((element, ind) => {
|
|
226
|
+
var _a, _b, _c, _d, _e;
|
|
227
|
+
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()) ==
|
|
228
|
+
(bundleName === null || bundleName === void 0 ? void 0 : bundleName.toUpperCase()) &&
|
|
229
|
+
ind != index &&
|
|
230
|
+
!this.isNullOrEmpty(newRefValue) &&
|
|
231
|
+
!this.isNullOrEmpty(bundleName)) {
|
|
232
|
+
(_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);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
this.cdr.detectChanges();
|
|
237
|
+
}
|
|
238
|
+
// Update the same Bundle Refrence Value to all other Bundles if any changes in Reference Value
|
|
239
|
+
populateSameBundleReference(event, index) {
|
|
240
|
+
var _a, _b, _c, _d, _e;
|
|
241
|
+
if (event) {
|
|
242
|
+
const prevRefValue = this.getPrevBundleReferenceValue(index);
|
|
243
|
+
if (!this.isNullOrEmpty(prevRefValue)) {
|
|
244
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[index].get('prodRef')) === null || _b === void 0 ? void 0 : _b.setValue(prevRefValue);
|
|
245
|
+
this.modalBundleForm.get('modRef').setValue(prevRefValue);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
if (!this.isNullOrEmpty(this.getPrevBundleReferenceValue(index))) {
|
|
250
|
+
(_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) || '');
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
this.cdr.detectChanges();
|
|
254
|
+
}
|
|
255
|
+
// Update the Bundle List if more than one bundle/rows
|
|
256
|
+
updateBundleList() {
|
|
257
|
+
var _a, _b;
|
|
258
|
+
const formValues = this.groupByBundle((_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.getRawValue(), 'prodBundle');
|
|
259
|
+
if (((_b = Object.keys(formValues)) === null || _b === void 0 ? void 0 : _b.length) > 1) {
|
|
260
|
+
this.bundleList = Object.keys(formValues);
|
|
261
|
+
}
|
|
262
|
+
this.cdr.detectChanges();
|
|
263
|
+
}
|
|
264
|
+
// Get Bundle values only for mobile view
|
|
265
|
+
getBundleValues(index) {
|
|
266
|
+
var _a, _b, _c, _d, _e, _f;
|
|
267
|
+
const bundleValues = [];
|
|
268
|
+
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);
|
|
269
|
+
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);
|
|
270
|
+
return bundleValues;
|
|
271
|
+
}
|
|
272
|
+
// Edit Bundle Values
|
|
273
|
+
editBundleValue(index) {
|
|
274
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
275
|
+
this.selectedIndex = index;
|
|
276
|
+
(_a = this.modalBundleForm) === null || _a === void 0 ? void 0 : _a.get('modBundle').setValue((_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.toUpperCase());
|
|
277
|
+
(_f = (_e = this.modalBundleForm) === null || _e === void 0 ? void 0 : _e.get('modRef')) === null || _f === void 0 ? void 0 : _f.setValue((_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.value);
|
|
278
|
+
this.cdr.detectChanges();
|
|
279
|
+
}
|
|
280
|
+
// Update/Save Bundle values
|
|
281
|
+
saveBundleDetails(event) {
|
|
282
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
283
|
+
(_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());
|
|
284
|
+
(_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);
|
|
285
|
+
this.updateSameBundleReference(null, this.selectedIndex, true);
|
|
286
|
+
this.updateTotal();
|
|
287
|
+
this.selectedIndex = null;
|
|
288
|
+
this.closebutton.nativeElement.click();
|
|
289
|
+
}
|
|
290
|
+
// Update Cart Deatils
|
|
291
|
+
updateCartDetails() {
|
|
292
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
293
|
+
if (this.isValidForm()) {
|
|
294
|
+
let payLoad = {};
|
|
295
|
+
if (this.isFinishedProduct) {
|
|
296
|
+
payLoad = {
|
|
297
|
+
quantity: (_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls[0].get('prodQty')) === null || _b === void 0 ? void 0 : _b.value,
|
|
298
|
+
product: {
|
|
299
|
+
code: (_d = (_c = this.productDetails) === null || _c === void 0 ? void 0 : _c.product) === null || _d === void 0 ? void 0 : _d.code,
|
|
300
|
+
},
|
|
301
|
+
jobReference: (_f = (_e = this.productDetails) === null || _e === void 0 ? void 0 : _e.product) === null || _f === void 0 ? void 0 : _f.jobReference,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
payLoad = {
|
|
306
|
+
quantity: 1,
|
|
307
|
+
configurationInfos: [(_g = this.productDetails) === null || _g === void 0 ? void 0 : _g.configValues],
|
|
308
|
+
subLineConfigInfos: [],
|
|
309
|
+
jobReference: (_j = (_h = this.productDetails) === null || _h === void 0 ? void 0 : _h.product) === null || _j === void 0 ? void 0 : _j.jobReference,
|
|
310
|
+
};
|
|
311
|
+
(_l = (_k = this.productQuantityForm) === null || _k === void 0 ? void 0 : _k.controls) === null || _l === void 0 ? void 0 : _l.forEach((element, index) => {
|
|
312
|
+
var _a, _b, _c, _d, _e;
|
|
313
|
+
const configInfos = {
|
|
314
|
+
configuratorType: 'CUTTING',
|
|
315
|
+
quantity: (_a = element === null || element === void 0 ? void 0 : element.value) === null || _a === void 0 ? void 0 : _a.prodQty,
|
|
316
|
+
length: (_b = element === null || element === void 0 ? void 0 : element.value) === null || _b === void 0 ? void 0 : _b.prodLen,
|
|
317
|
+
};
|
|
318
|
+
if (this.hasBundle && ((_c = element === null || element === void 0 ? void 0 : element.value) === null || _c === void 0 ? void 0 : _c.prodBundle)) {
|
|
319
|
+
configInfos.bundleName = (_d = element === null || element === void 0 ? void 0 : element.value) === null || _d === void 0 ? void 0 : _d.prodBundle;
|
|
320
|
+
configInfos.reference = (_e = element === null || element === void 0 ? void 0 : element.value) === null || _e === void 0 ? void 0 : _e.prodRef;
|
|
321
|
+
}
|
|
322
|
+
payLoad.subLineConfigInfos.push(configInfos);
|
|
323
|
+
});
|
|
324
|
+
if ((payLoad === null || payLoad === void 0 ? void 0 : payLoad.configurationInfos) &&
|
|
325
|
+
((_m = payLoad === null || payLoad === void 0 ? void 0 : payLoad.configurationInfos) === null || _m === void 0 ? void 0 : _m.length) > 0 &&
|
|
326
|
+
this.isNullOrEmpty(payLoad === null || payLoad === void 0 ? void 0 : payLoad.configurationInfos[0])) {
|
|
327
|
+
payLoad === null || payLoad === void 0 ? true : delete payLoad.configurationInfos;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
this.cartService
|
|
331
|
+
.updateCartEntry(this.cartId, (_o = this.productDetails) === null || _o === void 0 ? void 0 : _o.entryNumber, payLoad)
|
|
332
|
+
.subscribe((response) => {
|
|
333
|
+
if (response) {
|
|
334
|
+
this.activeCartService.reloadActiveCart();
|
|
335
|
+
this.updateCartEntires.emit(true);
|
|
336
|
+
}
|
|
337
|
+
}, (error) => {
|
|
338
|
+
var _a, _b, _c, _d;
|
|
339
|
+
this.addToCartError =
|
|
340
|
+
((_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) ||
|
|
341
|
+
((_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);
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// Update Total Price and Total length based on user inputs on each row
|
|
346
|
+
updateTotal() {
|
|
347
|
+
var _a, _b, _c, _d;
|
|
348
|
+
this.totalLength = 0;
|
|
349
|
+
this.totalPrice = 0;
|
|
350
|
+
if (!this.isFinishedProduct) {
|
|
351
|
+
const formValues = this.groupByBundle((_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.getRawValue(), 'prodBundle');
|
|
352
|
+
this.productQuantityForm.controls.forEach((element, index) => {
|
|
353
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
354
|
+
const qty = parseFloat((_a = element === null || element === void 0 ? void 0 : element.value) === null || _a === void 0 ? void 0 : _a.prodQty);
|
|
355
|
+
const len = parseFloat((_b = element === null || element === void 0 ? void 0 : element.value) === null || _b === void 0 ? void 0 : _b.prodLen);
|
|
356
|
+
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();
|
|
357
|
+
let total = 0;
|
|
358
|
+
if (!this.isNullOrEmpty(qty) &&
|
|
359
|
+
!this.isNullOrEmpty(len) &&
|
|
360
|
+
!isNaN(qty) &&
|
|
361
|
+
!isNaN(len)) {
|
|
362
|
+
total = qty * len;
|
|
363
|
+
if (!this.hasBundle) {
|
|
364
|
+
this.errorIndex[index] =
|
|
365
|
+
total * (((_e = this.cuttingValidation) === null || _e === void 0 ? void 0 : _e.weightPerLM) || 1) >
|
|
366
|
+
(((_f = this.cuttingValidation) === null || _f === void 0 ? void 0 : _f.maxBundleLoad) || 1000)
|
|
367
|
+
? true
|
|
368
|
+
: false;
|
|
369
|
+
}
|
|
370
|
+
else if (this.checkTotalBundleWeight(formValues[currentBundleName])) {
|
|
371
|
+
const errorIndexNo = this.getLastBundleIndex(currentBundleName);
|
|
372
|
+
if (!this.isNullOrEmpty(errorIndexNo)) {
|
|
373
|
+
this.errorIndex[errorIndexNo] = true;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
this.errorIndex[index] = false;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
if (!isNaN(qty) && !isNaN(len)) {
|
|
381
|
+
this.totalLength = this.totalLength + total;
|
|
382
|
+
this.totalPrice =
|
|
383
|
+
this.totalLength * ((_h = (_g = this.productDetails) === null || _g === void 0 ? void 0 : _g.price) === null || _h === void 0 ? void 0 : _h.value);
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
this.totalLength = null;
|
|
389
|
+
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;
|
|
390
|
+
if (!isNaN(qty)) {
|
|
391
|
+
this.totalPrice = qty * this.accessoriesPrice;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
this.updateCartDetails();
|
|
395
|
+
}
|
|
396
|
+
// Utility Function to get Key Values
|
|
397
|
+
getKeyValues(source, search) {
|
|
398
|
+
if (typeof source !== 'object') {
|
|
399
|
+
return [];
|
|
400
|
+
}
|
|
401
|
+
const [key, next] = Object.keys(source);
|
|
402
|
+
const _a = source, _b = key, value = _a[_b], rest = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
|
|
403
|
+
return [
|
|
404
|
+
...(key === search ? [value] : this.getKeyValues(value, search)),
|
|
405
|
+
...(next ? this.getKeyValues(rest, search) : []),
|
|
406
|
+
];
|
|
407
|
+
}
|
|
408
|
+
// Get the values of Quantity Form
|
|
409
|
+
getProductQuantityFormGroup() {
|
|
410
|
+
return this.formBuilder.group(this.isFinishedProduct ? new AccessoriesQuantity() : new ProductQuantity());
|
|
411
|
+
}
|
|
412
|
+
get productQuantityForm() {
|
|
413
|
+
return this.productForm.get('productQuantity');
|
|
414
|
+
}
|
|
415
|
+
// Add the Quanity Form when user clicks on Add More button
|
|
416
|
+
addProductQuantityFormGroup(event) {
|
|
417
|
+
var _a, _b, _c;
|
|
418
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
419
|
+
(_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.push(this.getProductQuantityFormGroup());
|
|
420
|
+
const bundles = this.groupByBundle((_b = this.productQuantityForm) === null || _b === void 0 ? void 0 : _b.getRawValue(), 'prodBundle');
|
|
421
|
+
this.disableAddMore = ((_c = this.productQuantityForm) === null || _c === void 0 ? void 0 : _c.length) > 99;
|
|
422
|
+
this.errorIndex[this.rowIndex] = false;
|
|
423
|
+
this.hasProdRefIndex[this.rowIndex++] = false;
|
|
424
|
+
this.cdr.detectChanges();
|
|
425
|
+
}
|
|
426
|
+
// Update the Quantity form if user clicks on remove button
|
|
427
|
+
removeProductQuantityForm(index, event) {
|
|
428
|
+
var _a;
|
|
429
|
+
event.preventDefault();
|
|
430
|
+
this.productQuantityForm.removeAt(index);
|
|
431
|
+
this.rowIndex--;
|
|
432
|
+
this.disableAddMore = ((_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.length) > 99;
|
|
433
|
+
this.cdr.detectChanges();
|
|
434
|
+
this.updateTotal();
|
|
435
|
+
}
|
|
436
|
+
// Get Job Reference Errors
|
|
437
|
+
jobReferenceErrors() {
|
|
438
|
+
var _a, _b;
|
|
439
|
+
return (_b = (_a = this.productForm) === null || _a === void 0 ? void 0 : _a.get('jobReference')) === null || _b === void 0 ? void 0 : _b.errors;
|
|
440
|
+
}
|
|
441
|
+
// Get Product Quantity Errors
|
|
442
|
+
prodQtyErrors(index) {
|
|
443
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
444
|
+
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) ||
|
|
445
|
+
((_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)) &&
|
|
446
|
+
(((_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) ||
|
|
447
|
+
((_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)));
|
|
448
|
+
}
|
|
449
|
+
// Get Product Length Errors
|
|
450
|
+
prodLenErrors(index) {
|
|
451
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
452
|
+
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) ||
|
|
453
|
+
((_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)) &&
|
|
454
|
+
(((_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) ||
|
|
455
|
+
((_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)));
|
|
456
|
+
}
|
|
457
|
+
// Get Product Length Errors
|
|
458
|
+
minLenErrors(index) {
|
|
459
|
+
var _a;
|
|
460
|
+
return ((_a = this.hasMinlengthError) === null || _a === void 0 ? void 0 : _a.indexOf(index)) !== -1;
|
|
461
|
+
}
|
|
462
|
+
// Get Product Bundle Errors
|
|
463
|
+
prodBundleErrors(index) {
|
|
464
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
465
|
+
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) ||
|
|
466
|
+
((_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)) &&
|
|
467
|
+
(((_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) ||
|
|
468
|
+
((_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)));
|
|
469
|
+
}
|
|
470
|
+
// Get Product Bunlde Reference Errors
|
|
471
|
+
prodRefErrors(index) {
|
|
472
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
473
|
+
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) ||
|
|
474
|
+
((_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)) &&
|
|
475
|
+
(((_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) ||
|
|
476
|
+
((_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)));
|
|
477
|
+
}
|
|
478
|
+
// Check if form is Valid or not
|
|
479
|
+
isValidForm() {
|
|
480
|
+
var _a, _b, _c;
|
|
481
|
+
let valid = true;
|
|
482
|
+
if (this.hasBundle) {
|
|
483
|
+
return (_a = this.productForm) === null || _a === void 0 ? void 0 : _a.valid;
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
(_c = (_b = this.productQuantityForm) === null || _b === void 0 ? void 0 : _b.controls) === null || _c === void 0 ? void 0 : _c.forEach((element) => {
|
|
487
|
+
var _a, _b, _c;
|
|
488
|
+
valid = this.isFinishedProduct
|
|
489
|
+
? (_a = element === null || element === void 0 ? void 0 : element.get('prodQty')) === null || _a === void 0 ? void 0 : _a.valid
|
|
490
|
+
: ((_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);
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
return valid;
|
|
494
|
+
}
|
|
495
|
+
// Check if any errors present on any row and diplay it on UI
|
|
496
|
+
hasErrors(index) {
|
|
497
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
498
|
+
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) ||
|
|
499
|
+
((_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) ||
|
|
500
|
+
((_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) ||
|
|
501
|
+
((_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)
|
|
502
|
+
? true
|
|
503
|
+
: false;
|
|
504
|
+
}
|
|
505
|
+
// Check if Any Entry has less than Minimum length
|
|
506
|
+
checkHasMinLengthQty() {
|
|
507
|
+
var _a, _b;
|
|
508
|
+
this.hasMinlengthError = [];
|
|
509
|
+
(_b = (_a = this.productQuantityForm) === null || _a === void 0 ? void 0 : _a.controls) === null || _b === void 0 ? void 0 : _b.forEach((element, ind) => {
|
|
510
|
+
var _a, _b, _c;
|
|
511
|
+
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) &&
|
|
512
|
+
!this.isNullOrEmpty((_c = element === null || element === void 0 ? void 0 : element.value) === null || _c === void 0 ? void 0 : _c.prodLen)) {
|
|
513
|
+
this.hasMinlengthError.push(ind);
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
this.cdr.detectChanges();
|
|
517
|
+
}
|
|
518
|
+
pad3Digits(value) {
|
|
519
|
+
var _a, _b;
|
|
520
|
+
const qty = value;
|
|
521
|
+
if (!this.isNullOrEmpty(qty) && !isNaN(qty)) {
|
|
522
|
+
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,');
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
// Convert Length to demial format after blur
|
|
526
|
+
updateLenthValue(element) {
|
|
527
|
+
if (!this.isNullOrEmpty(element === null || element === void 0 ? void 0 : element.value)) {
|
|
528
|
+
element.value = this.pad3Digits(element.value);
|
|
529
|
+
}
|
|
530
|
+
this.checkHasMinLengthQty();
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
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.ActiveCartService }, { token: i4.CurrentProductService }], target: i0.ɵɵFactoryTarget.Component });
|
|
534
|
+
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", finishedVariantDetails: "finishedVariantDetails", finishedAvailableColours: "finishedAvailableColours", isFinishedProduct: "isFinishedProduct", isFlashingProduct: "isFlashingProduct", listView: "listView" }, outputs: { updateCartEntires: "updateCartEntires" }, 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\"\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 />\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-3 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 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 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\">\r\n <button\r\n *ngIf=\"\r\n i > 0 || (productQuantityForm.length > 1 && listView)\r\n \"\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\r\n <div [ngClass]=\"{ 'd-lg-none d-xl-none': 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 </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 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 | async\"\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 {{ addToCartError }}\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;z-index:10}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:-18px}.switch{position:relative;display:inline-block;width:60px;margin-top:-4px;height:30px}.switch input{opacity:0;width:0;height:0}.switch input:not(:checked)+.slider:after{content:\"NO\";right:10px;position:absolute;color:#fff;top:5px;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:8px}.switch input:checked+.slider:after{content:\"YES\";left:8px;position:absolute;color:#fff;top:6px;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:21px;width:22px;top:4px;left:5px;bottom:4px;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}}\n"], directives: [{ type: i5.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: i5.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: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.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"] }], pipes: { "async": i5.AsyncPipe } });
|
|
535
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomProductQuantityFormComponent, decorators: [{
|
|
536
|
+
type: Component,
|
|
537
|
+
args: [{
|
|
538
|
+
selector: 'app-custom-product-quantity-form',
|
|
539
|
+
templateUrl: './custom-product-quantity-form.component.html',
|
|
540
|
+
styleUrls: ['./custom-product-quantity-form.component.scss'],
|
|
541
|
+
}]
|
|
542
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.CartService }, { type: i3.ActiveCartService }, { type: i4.CurrentProductService }]; }, propDecorators: { hasBundle: [{
|
|
543
|
+
type: Input
|
|
544
|
+
}], productCode: [{
|
|
545
|
+
type: Input
|
|
546
|
+
}], productDetails: [{
|
|
547
|
+
type: Input
|
|
548
|
+
}], unitType: [{
|
|
549
|
+
type: Input
|
|
550
|
+
}], accessoriesPrice: [{
|
|
551
|
+
type: Input
|
|
552
|
+
}], selectedColour: [{
|
|
553
|
+
type: Input
|
|
554
|
+
}], cuttingValidation: [{
|
|
555
|
+
type: Input
|
|
556
|
+
}], finishedVariantDetails: [{
|
|
557
|
+
type: Input
|
|
558
|
+
}], finishedAvailableColours: [{
|
|
559
|
+
type: Input
|
|
560
|
+
}], isFinishedProduct: [{
|
|
561
|
+
type: Input
|
|
562
|
+
}], isFlashingProduct: [{
|
|
563
|
+
type: Input
|
|
564
|
+
}], listView: [{
|
|
565
|
+
type: Input
|
|
566
|
+
}], closeInviteModal: [{
|
|
567
|
+
type: ViewChild,
|
|
568
|
+
args: ['closeInviteModal']
|
|
569
|
+
}], closebutton: [{
|
|
570
|
+
type: ViewChild,
|
|
571
|
+
args: ['closebutton']
|
|
572
|
+
}], updateCartEntires: [{
|
|
573
|
+
type: Output
|
|
574
|
+
}] } });
|
|
575
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWlsZGluZ3Byb2R1Y3RfbGlicmFyeS9zcmMvbGliL3NoYXJlZC9jdXN0b20tY2FydC1kZXRhaWwvY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybS9jdXN0b20tcHJvZHVjdC1xdWFudGl0eS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1aWxkaW5ncHJvZHVjdF9saWJyYXJ5L3NyYy9saWIvc2hhcmVkL2N1c3RvbS1jYXJ0LWRldGFpbC9jdXN0b20tcHJvZHVjdC1xdWFudGl0eS1mb3JtL2N1c3RvbS1wcm9kdWN0LXF1YW50aXR5LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBSVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUEwQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFPdkUsTUFBTSxPQUFPLGtDQUFrQztJQXdEN0MsWUFDVSxXQUF3QixFQUN4QixHQUFzQixFQUN0QixXQUF3QixFQUN4QixpQkFBb0MsRUFDcEMscUJBQTRDO1FBSjVDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNC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QUFLLENBQUMsRUFBRTtZQUN2QyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQzs7Z0lBem5CVSxrQ0FBa0M7b0hBQWxDLGtDQUFrQywyeEJDekIvQywrdGFBZ1dBOzRGRHZVYSxrQ0FBa0M7a0JBTDlDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtDQUFrQztvQkFDNUMsV0FBVyxFQUFFLCtDQUErQztvQkFDNUQsU0FBUyxFQUFFLENBQUMsK0NBQStDLENBQUM7aUJBQzdEO2dPQVdVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQTRCeUIsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDSCxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBRWQsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ3VycmVudFByb2R1Y3RTZXJ2aWNlIH0gZnJvbSAnQHNwYXJ0YWN1cy9zdG9yZWZyb250JztcclxuaW1wb3J0IHsgQWN0aXZlQ2FydFNlcnZpY2UsIFByb2R1Y3QgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY2Vzc29yaWVzUXVhbnRpdHksIFByb2R1Y3RRdWFudGl0eSB9IGZyb20gJy4uLy4uL0N1c3RvbVByb2R1Y3QnO1xyXG5pbXBvcnQgeyBSZWdleFZhbGlkYXRvciwgUmVnZXhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9yZWdFeC52YWxpZGF0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1wcm9kdWN0LXF1YW50aXR5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1wcm9kdWN0LXF1YW50aXR5LWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbVByb2R1Y3RRdWFudGl0eUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgZW52OiBhbnkgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlbnYnKTtcclxuICBlbnZpcm9ubWVudCA6IGFueSA9IEpTT04ucGFyc2UodGhpcy5lbnYpO1xyXG4gIGlzRGVza3RvcDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1RhYmxldDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB0b3RhbExlbmd0aDogYW55O1xyXG4gIHRvdGFsUHJpY2U6IGFueSA9ICcwLjAnO1xyXG5cclxuICBASW5wdXQoKSBoYXNCdW5kbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwcm9kdWN0Q29kZTogYW55O1xyXG4gIEBJbnB1dCgpIHByb2R1Y3REZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgdW5pdFR5cGU6IGFueSA9ICdwZXIgTE0nO1xyXG4gIEBJbnB1dCgpIGFjY2Vzc29yaWVzUHJpY2UgPSAwO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ29sb3VyOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGN1dHRpbmdWYWxpZGF0aW9uOiBhbnk7XHJcbiAgQElucHV0KCkgZmluaXNoZWRWYXJpYW50RGV0YWlsczogYW55O1xyXG4gIEBJbnB1dCgpIGZpbmlzaGVkQXZhaWxhYmxlQ29sb3VyczogYW55O1xyXG4gIEBJbnB1dCgpIGlzRmluaXNoZWRQcm9kdWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNGbGFzaGluZ1Byb2R1Y3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsaXN0VmlldzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByb2R1Y3RGb3JtOiBhbnkgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgZGlzYWJsZUFkZE1vcmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYnVuZGxlTGlzdDogYW55ID0gW107XHJcblxyXG4gIGVycm9ySW5kZXg6IGFueSA9IFtdO1xyXG4gIGhhc1Byb2RSZWZJbmRleDogYW55ID0gW107XHJcbiAgaGFzUHJvZFJlZjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc01pbmxlbmd0aEVycm9yOiBhbnkgPSBbXTtcclxuICByb3dJbmRleCA9IDA7XHJcbiAgY2FydElkOiBhbnk7XHJcblxyXG4gIHNob3dXYWl0Q3Vyc29yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgYWRkVG9DYXJ0RXJyb3I6IGFueSA9IG51bGw7XHJcbiAgbW9kYWxCdW5kbGVGb3JtOiBhbnkgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBlZGl0UHJvZEJ1bmRsZTogYW55ID0gJyc7XHJcbiAgZWRpdFByb2RSZWY6IGFueSA9ICcnO1xyXG4gIHNlbGVjdGVkSW5kZXg6IGFueSA9IG51bGw7XHJcblxyXG4gIGhhc0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJvZHVjdCQ6IE9ic2VydmFibGU8UHJvZHVjdCB8IG51bGw+ID1cclxuICAgIHRoaXMuY3VycmVudFByb2R1Y3RTZXJ2aWNlLmdldFByb2R1Y3QoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2xvc2VJbnZpdGVNb2RhbCcpIGNsb3NlSW52aXRlTW9kYWw6IGFueTtcclxuICBAVmlld0NoaWxkKCdjbG9zZWJ1dHRvbicpIGNsb3NlYnV0dG9uOiBhbnk7XHJcblxyXG4gIEBPdXRwdXQoKSB1cGRhdGVDYXJ0RW50aXJlczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHNjcmVlbldpZHRoOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZlQ2FydFNlcnZpY2U6IEFjdGl2ZUNhcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjdXJyZW50UHJvZHVjdFNlcnZpY2U6IEN1cnJlbnRQcm9kdWN0U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjYXJ0T2JqOiBhbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3BhcnRhY3Vz4pq/ZGltb25kLXNwYeKav2NhcnQnKTtcclxuICAgIHRoaXMuY2FydElkID0gSlNPTi5wYXJzZShjYXJ0T2JqKT8uYWN0aXZlO1xyXG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoICsgJ3B4JztcclxuICAgIGlmICh0aGlzLnByb2R1Y3REZXRhaWxzKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlUHJvZHVjdEZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICghY2hhbmdlcz8ucHJvZHVjdERldGFpbHM/LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENyZWF0ZSBhIFByb2R1Y3QgUXVhbnRpdHkgRm9ybVxyXG4gIGNyZWF0ZVByb2R1Y3RGb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hY2Nlc3Nvcmllc1ByaWNlID0gMDtcclxuICAgIHRoaXMudG90YWxMZW5ndGggPSBudWxsO1xyXG4gICAgdGhpcy50b3RhbFByaWNlID0gJzAuMCc7XHJcbiAgICB0aGlzLmhhc0J1bmRsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5kaXNhYmxlQWRkTW9yZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5idW5kbGVMaXN0ID0gW107XHJcbiAgICB0aGlzLmVycm9ySW5kZXggPSBbXTtcclxuICAgIHRoaXMuaGFzUHJvZFJlZkluZGV4ID0gW107XHJcbiAgICB0aGlzLnJvd0luZGV4ID0gMDtcclxuICAgIHRoaXMucHJvZHVjdEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuYWRkVG9DYXJ0RXJyb3IgPSBudWxsO1xyXG4gICAgdGhpcy5wcm9kdWN0Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBidW5kbGluZzogWycnXSxcclxuICAgICAgcHJvZHVjdFF1YW50aXR5OiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgam9iUmVmZXJlbmNlOiBbJycsIFtSZWdleFZhbGlkYXRvcihSZWdleENvbnN0YW50cy5KT0JfUkVGRVJFTkNFKV1dLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lZGl0UHJvZEJ1bmRsZSA9ICcnO1xyXG4gICAgdGhpcy5lZGl0UHJvZFJlZiA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gbnVsbDtcclxuICAgIHRoaXMuaGFzUHJvZFJlZiA9IGZhbHNlO1xyXG4gICAgdGhpcy5oYXNNaW5sZW5ndGhFcnJvciA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRmluaXNoZWRQcm9kdWN0KSB7XHJcbiAgICAgIHRoaXMuYWRkUHJvZHVjdFF1YW50aXR5Rm9ybUdyb3VwKCk7XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbMF0/LnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIHByb2RRdHk6IHRoaXMucHJvZHVjdERldGFpbHM/LnF1YW50aXR5LFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9kYWxCdW5kbGVGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgbW9kQnVuZGxlOiBbJycsIFtSZWdleFZhbGlkYXRvcihSZWdleENvbnN0YW50cy5CVU5ETEVfTkFNRSldXSxcclxuICAgICAgICBtb2RSZWY6IFsnJywgW1JlZ2V4VmFsaWRhdG9yKFJlZ2V4Q29uc3RhbnRzLkpPQl9SRUZFUkVOQ0UpXV0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnByb2R1Y3REZXRhaWxzPy5zdWJMaW5lQ29uZmlnSW5mb3M/LmZvckVhY2goXHJcbiAgICAgICAgKHZhbDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFkZFByb2R1Y3RRdWFudGl0eUZvcm1Hcm91cCgpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkodmFsPy5idW5kbGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhc0J1bmRsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdEZvcm0/LmdldCgnYnVuZGxpbmcnKT8uc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0uY29udHJvbHNbaW5kZXhdLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBwcm9kQnVuZGxlOiB2YWw/LmJ1bmRsZU5hbWUsXHJcbiAgICAgICAgICAgIHByb2RMZW46IHRoaXMucGFkM0RpZ2l0cyh2YWw/Lmxlbmd0aCksXHJcbiAgICAgICAgICAgIHByb2RRdHk6IHZhbD8ucXVhbnRpdHksXHJcbiAgICAgICAgICAgIHByb2RSZWY6IHZhbD8ucmVmZXJlbmNlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRpbmcgdGhlIEJ1bmRsZVxyXG4gIHVwZGF0ZUJ1bmRsaW5nKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFzQnVuZGxlID0gZXZlbnQuY3VycmVudFRhcmdldD8uY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmhhc0J1bmRsZSkge1xyXG4gICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzPy5mb3JFYWNoKFxyXG4gICAgICAgIChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlU2FtZUJ1bmRsZVJlZmVyZW5jZShudWxsLCBpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVUb3RhbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgYW55IHZhbHVlIGlzIGVtcHR5IG9yIHVuZGVmaW5lZFxyXG4gIGlzTnVsbE9yRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09ICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgZm9yIGFueSBlcnJvcnMgd2hpbGUgdXBkYXRpbmcgdGhlIHF1YW50aXR5XHJcbiAgaGFzRXJyb3JJbmRleChpbmRleDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5lcnJvckluZGV4W2luZGV4XSA9PSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgYW55IFNhbWUgUmVmZXJlbmNlIEVycm9yXHJcbiAgaGFzUHJvZFJlZkVycm9ySW5kZXgoaW5kZXg6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvZFJlZkluZGV4W2luZGV4XSA9PSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gR3JvdXAgdGhlIFF1YW50aXR5IHZhbHVlcyBiYXNlZCBvbiBidW5kbGVcclxuICBncm91cEJ5QnVuZGxlKGl0ZW1zOiBhbnksIGtleTogYW55KTogYW55IHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoXHJcbiAgICAgIChyZXN1bHQ6IGFueSwgaXRlbTogYW55KSA9PiAoe1xyXG4gICAgICAgIC4uLnJlc3VsdCxcclxuICAgICAgICBbaXRlbVtrZXldXTogWy4uLihyZXN1bHRbaXRlbVtrZXldXSB8fCBbXSksIGl0ZW1dLFxyXG4gICAgICB9KSxcclxuICAgICAge31cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayB0aGUgdG90YWwgYnVuZGxlIHdlaWdodCBhbmQgdXBkYXRlIHRoZSBlcnJvciBpZiBpdCByZWFjaGVzIHRvIG1heGltdW0gYnVuZGxlIHNpemUgZm9yIGVhY2ggYnVuZGxlXHJcbiAgY2hlY2tUb3RhbEJ1bmRsZVdlaWdodChmb3JtVmFsdWVzOiBhbnkpOiBhbnkge1xyXG4gICAgbGV0IGdyb3VwVG90YWwgPSAwO1xyXG4gICAgZm9ybVZhbHVlcz8uZm9yRWFjaCgoY3VycmVudFZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgcXR5ID0gcGFyc2VGbG9hdChjdXJyZW50VmFsdWU/LnByb2RRdHkpO1xyXG4gICAgICBjb25zdCBsZW4gPSBwYXJzZUZsb2F0KGN1cnJlbnRWYWx1ZT8ucHJvZExlbik7XHJcbiAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHF0eSkgJiYgIXRoaXMuaXNOdWxsT3JFbXB0eShsZW4pKSB7XHJcbiAgICAgICAgZ3JvdXBUb3RhbCArPSBxdHkgKiBsZW47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgZ3JvdXBUb3RhbCA9IGdyb3VwVG90YWwgKiAodGhpcy5jdXR0aW5nVmFsaWRhdGlvbj8ud2VpZ2h0UGVyTE0gfHwgMSk7XHJcbiAgICByZXR1cm4gZ3JvdXBUb3RhbCA+ICh0aGlzLmN1dHRpbmdWYWxpZGF0aW9uPy5tYXhCdW5kbGVMb2FkIHx8IDEwMDApO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSBsYXN0IHJvdyBvZiBhIGJ1bmRsZSBiYXNlZCBvbiBidW5kbGUgbmFtZVxyXG4gIGdldExhc3RCdW5kbGVJbmRleChidW5kbGVOYW1lOiBhbnkpOiBhbnkge1xyXG4gICAgbGV0IGluZGV4VmFsdWU6IGFueSA9IG51bGw7XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm1cclxuICAgICAgPy5nZXRSYXdWYWx1ZSgpXHJcbiAgICAgID8uZm9yRWFjaCgoZWxlbWVudDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQ/LnByb2RCdW5kbGU/LnRvVXBwZXJDYXNlKCkgPT0gYnVuZGxlTmFtZT8udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgaW5kZXhWYWx1ZSA9IGluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gaW5kZXhWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIEdldCB0aGUgUmVmZXJlbmNlIHZhbHVlIG9mIHRoZSBzYW1lIGJ1bmRsZSBhbmQgdXBkYXRlXHJcbiAgZ2V0UHJldkJ1bmRsZVJlZmVyZW5jZVZhbHVlKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgY29uc3QgYnVuZGxlTmFtZSA9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9PSBudWxsXHJcbiAgICAgICAgPyB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XVxyXG4gICAgICAgICAgICA/LmdldCgncHJvZEJ1bmRsZScpXHJcbiAgICAgICAgICAgID8udmFsdWU/LnRvVXBwZXJDYXNlKClcclxuICAgICAgICA6IHRoaXMubW9kYWxCdW5kbGVGb3JtPy5nZXQoJ21vZEJ1bmRsZScpPy52YWx1ZT8udG9VcHBlckNhc2UoKTtcclxuICAgIGxldCByZWZWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9scy5mb3JFYWNoKChlbGVtZW50OiBhbnksIGluZDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG90aGVyUmVmVmFsdWUgPVxyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kXT8uZ2V0KCdwcm9kUmVmJyk/LnZhbHVlO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZWxlbWVudD8udmFsdWU/LnByb2RCdW5kbGU/LnRvVXBwZXJDYXNlKCkgPT1cclxuICAgICAgICAgIGJ1bmRsZU5hbWU/LnRvVXBwZXJDYXNlKCkgJiZcclxuICAgICAgICAoaW5kICE9IGluZGV4IHx8IHRoaXMuc2VsZWN0ZWRJbmRleCAhPSBudWxsKSAmJlxyXG4gICAgICAgICF0aGlzLmlzTnVsbE9yRW1wdHkob3RoZXJSZWZWYWx1ZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVmVmFsdWUgPSBvdGhlclJlZlZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZWZWYWx1ZSB8fCAnJztcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIFNhbWUgUmVmcmVuY2UgaXMgYWxyZWFkeSB1c2VkXHJcbiAgY2hlY2tIYXNTYW1lUmVmZXJlbmNlKFxyXG4gICAgaW5kZXg6IGFueSxcclxuICAgIGN1cnJlbnRSZWZlcmVuY2U6IGFueSxcclxuICAgIGJ1bmRsZU5hbWU6IGFueVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGhhc1JlZiA9IGZhbHNlO1xyXG4gICAgY29uc3QgcHJvZFJlZlZhbHVlcyA9IHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHM/LmZpbHRlcihcclxuICAgICAgKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICBlbGVtZW50Py52YWx1ZT8ucHJvZFJlZiA9PSBjdXJyZW50UmVmZXJlbmNlICYmXHJcbiAgICAgICAgICBlbGVtZW50Py52YWx1ZT8ucHJvZEJ1bmRsZT8udG9VcHBlckNhc2UoKSAhPVxyXG4gICAgICAgICAgICBidW5kbGVOYW1lPy50b1VwcGVyQ2FzZSgpICYmXHJcbiAgICAgICAgICAhdGhpcy5pc051bGxPckVtcHR5KGN1cnJlbnRSZWZlcmVuY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGlmIChwcm9kUmVmVmFsdWVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzUHJvZFJlZkluZGV4W2luZGV4XSA9IHRydWU7XHJcbiAgICAgIGhhc1JlZiA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhhc1Byb2RSZWZJbmRleFtpbmRleF0gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiBoYXNSZWY7XHJcbiAgfVxyXG5cclxuICAvLyBVcGRhdGUgdGhlIFJlZmVyZW5jZSBWYWx1ZSBpZiBhbHJlYWR5IHRoZSBzYW1lIGJ1bmRsZSBpcyBwcmVzZW50XHJcbiAgdXBkYXRlU2FtZUJ1bmRsZVJlZmVyZW5jZShcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBpbmRleDogYW55LFxyXG4gICAgaXNSZWZlcmVuY2U6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgYnVuZGxlTmFtZSA9XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RCdW5kbGUnKT8udmFsdWUgfHxcclxuICAgICAgdGhpcy5tb2RhbEJ1bmRsZUZvcm0uZ2V0KCdtb2RCdW5kbGUnKT8udmFsdWU7XHJcbiAgICBjb25zdCBuZXdSZWZWYWx1ZSA9XHJcbiAgICAgIGV2ZW50ICE9IG51bGxcclxuICAgICAgICA/IGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWVcclxuICAgICAgICA6IHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RSZWYnKT8udmFsdWUgfHxcclxuICAgICAgICAgIHRoaXMubW9kYWxCdW5kbGVGb3JtPy5nZXQoJ21vZFJlZicpLnZhbHVlO1xyXG4gICAgaXNSZWZlcmVuY2UgPSBpc1JlZmVyZW5jZVxyXG4gICAgICA/IHRoaXMuY2hlY2tIYXNTYW1lUmVmZXJlbmNlKGluZGV4LCBuZXdSZWZWYWx1ZSwgYnVuZGxlTmFtZSlcclxuICAgICAgOiBmYWxzZTtcclxuICAgIGlmICghaXNSZWZlcmVuY2UpIHtcclxuICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtLmNvbnRyb2xzLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaW5kOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBlbGVtZW50Py52YWx1ZT8ucHJvZEJ1bmRsZT8udG9VcHBlckNhc2UoKSA9PVxyXG4gICAgICAgICAgICBidW5kbGVOYW1lPy50b1VwcGVyQ2FzZSgpICYmXHJcbiAgICAgICAgICBpbmQgIT0gaW5kZXggJiZcclxuICAgICAgICAgICF0aGlzLmlzTnVsbE9yRW1wdHkobmV3UmVmVmFsdWUpICYmXHJcbiAgICAgICAgICAhdGhpcy5pc051bGxPckVtcHR5KGJ1bmRsZU5hbWUpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZF1cclxuICAgICAgICAgICAgPy5nZXQoJ3Byb2RSZWYnKVxyXG4gICAgICAgICAgICA/LnNldFZhbHVlKG5ld1JlZlZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRlIHRoZSBzYW1lIEJ1bmRsZSBSZWZyZW5jZSBWYWx1ZSB0byBhbGwgb3RoZXIgQnVuZGxlcyBpZiBhbnkgY2hhbmdlcyBpbiBSZWZlcmVuY2UgVmFsdWVcclxuICBwb3B1bGF0ZVNhbWVCdW5kbGVSZWZlcmVuY2UoZXZlbnQ6IGFueSwgaW5kZXg6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IHByZXZSZWZWYWx1ZSA9IHRoaXMuZ2V0UHJldkJ1bmRsZVJlZmVyZW5jZVZhbHVlKGluZGV4KTtcclxuICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkocHJldlJlZlZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdXHJcbiAgICAgICAgICAuZ2V0KCdwcm9kUmVmJylcclxuICAgICAgICAgID8uc2V0VmFsdWUocHJldlJlZlZhbHVlKTtcclxuICAgICAgICB0aGlzLm1vZGFsQnVuZGxlRm9ybS5nZXQoJ21vZFJlZicpLnNldFZhbHVlKHByZXZSZWZWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHRoaXMuZ2V0UHJldkJ1bmRsZVJlZmVyZW5jZVZhbHVlKGluZGV4KSkpIHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XVxyXG4gICAgICAgICAgPy5nZXQoJ3Byb2RSZWYnKVxyXG4gICAgICAgICAgPy5zZXRWYWx1ZSh0aGlzLmdldFByZXZCdW5kbGVSZWZlcmVuY2VWYWx1ZShpbmRleCkgfHwgJycpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVcGRhdGUgdGhlIEJ1bmRsZSBMaXN0IGlmIG1vcmUgdGhhbiBvbmUgYnVuZGxlL3Jvd3NcclxuICB1cGRhdGVCdW5kbGVMaXN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZ3JvdXBCeUJ1bmRsZShcclxuICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICAncHJvZEJ1bmRsZSdcclxuICAgICk7XHJcbiAgICBpZiAoT2JqZWN0LmtleXMoZm9ybVZhbHVlcyk/Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5idW5kbGVMaXN0ID0gT2JqZWN0LmtleXMoZm9ybVZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgQnVuZGxlIHZhbHVlcyBvbmx5IGZvciBtb2JpbGUgdmlld1xyXG4gIGdldEJ1bmRsZVZhbHVlcyhpbmRleDogYW55KTogYW55IHtcclxuICAgIGNvbnN0IGJ1bmRsZVZhbHVlcyA9IFtdO1xyXG4gICAgYnVuZGxlVmFsdWVzLnB1c2goXHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RCdW5kbGUnKT8udmFsdWVcclxuICAgICk7XHJcbiAgICBidW5kbGVWYWx1ZXMucHVzaChcclxuICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFJlZicpPy52YWx1ZVxyXG4gICAgKTtcclxuICAgIHJldHVybiBidW5kbGVWYWx1ZXM7XHJcbiAgfVxyXG5cclxuICAvLyBFZGl0IEJ1bmRsZSBWYWx1ZXNcclxuICBlZGl0QnVuZGxlVmFsdWUoaW5kZXg6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLm1vZGFsQnVuZGxlRm9ybVxyXG4gICAgICA/LmdldCgnbW9kQnVuZGxlJylcclxuICAgICAgLnNldFZhbHVlKFxyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdXHJcbiAgICAgICAgICA/LmdldCgncHJvZEJ1bmRsZScpXHJcbiAgICAgICAgICA/LnZhbHVlLnRvVXBwZXJDYXNlKClcclxuICAgICAgKTtcclxuICAgIHRoaXMubW9kYWxCdW5kbGVGb3JtXHJcbiAgICAgID8uZ2V0KCdtb2RSZWYnKVxyXG4gICAgICA/LnNldFZhbHVlKFxyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RSZWYnKT8udmFsdWVcclxuICAgICAgKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZS9TYXZlIEJ1bmRsZSB2YWx1ZXNcclxuICBzYXZlQnVuZGxlRGV0YWlscyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW3RoaXMuc2VsZWN0ZWRJbmRleF1cclxuICAgICAgPy5nZXQoJ3Byb2RCdW5kbGUnKVxyXG4gICAgICA/LnNldFZhbHVlKHRoaXMubW9kYWxCdW5kbGVGb3JtPy5nZXQoJ21vZEJ1bmRsZScpPy52YWx1ZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbdGhpcy5zZWxlY3RlZEluZGV4XVxyXG4gICAgICA/LmdldCgncHJvZFJlZicpXHJcbiAgICAgID8uc2V0VmFsdWUodGhpcy5tb2RhbEJ1bmRsZUZvcm0/LmdldCgnbW9kUmVmJyk/LnZhbHVlKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNhbWVCdW5kbGVSZWZlcmVuY2UobnVsbCwgdGhpcy5zZWxlY3RlZEluZGV4LCB0cnVlKTtcclxuICAgIHRoaXMudXBkYXRlVG90YWwoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5jbG9zZWJ1dHRvbi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVcGRhdGUgQ2FydCBEZWF0aWxzXHJcbiAgdXBkYXRlQ2FydERldGFpbHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1ZhbGlkRm9ybSgpKSB7XHJcbiAgICAgIGxldCBwYXlMb2FkOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzRmluaXNoZWRQcm9kdWN0KSB7XHJcbiAgICAgICAgcGF5TG9hZCA9IHtcclxuICAgICAgICAgIHF1YW50aXR5OiB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzWzBdLmdldCgncHJvZFF0eScpPy52YWx1ZSxcclxuICAgICAgICAgIHByb2R1Y3Q6IHtcclxuICAgICAgICAgICAgY29kZTogdGhpcy5wcm9kdWN0RGV0YWlscz8ucHJvZHVjdD8uY29kZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBqb2JSZWZlcmVuY2U6IHRoaXMucHJvZHVjdERldGFpbHM/LnByb2R1Y3Q/LmpvYlJlZmVyZW5jZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBheUxvYWQgPSB7XHJcbiAgICAgICAgICBxdWFudGl0eTogMSxcclxuICAgICAgICAgIGNvbmZpZ3VyYXRpb25JbmZvczogW3RoaXMucHJvZHVjdERldGFpbHM/LmNvbmZpZ1ZhbHVlc10sXHJcbiAgICAgICAgICBzdWJMaW5lQ29uZmlnSW5mb3M6IFtdLFxyXG4gICAgICAgICAgam9iUmVmZXJlbmNlOiB0aGlzLnByb2R1Y3REZXRhaWxzPy5wcm9kdWN0Py5qb2JSZWZlcmVuY2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzPy5mb3JFYWNoKFxyXG4gICAgICAgICAgKGVsZW1lbnQ6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWdJbmZvczogYW55ID0ge1xyXG4gICAgICAgICAgICAgIGNvbmZpZ3VyYXRvclR5cGU6ICdDVVRUSU5HJyxcclxuICAgICAgICAgICAgICBxdWFudGl0eTogZWxlbWVudD8udmFsdWU/LnByb2RRdHksXHJcbiAgICAgICAgICAgICAgbGVuZ3RoOiBlbGVtZW50Py52YWx1ZT8ucHJvZExlbixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQnVuZGxlICYmIGVsZW1lbnQ/LnZhbHVlPy5wcm9kQnVuZGxlKSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnSW5mb3MuYnVuZGxlTmFtZSA9IGVsZW1lbnQ/LnZhbHVlPy5wcm9kQnVuZGxlO1xyXG4gICAgICAgICAgICAgIGNvbmZpZ0luZm9zLnJlZmVyZW5jZSA9IGVsZW1lbnQ/LnZhbHVlPy5wcm9kUmVmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBheUxvYWQuc3ViTGluZUNvbmZpZ0luZm9zLnB1c2goY29uZmlnSW5mb3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcGF5TG9hZD8uY29uZmlndXJhdGlvbkluZm9zICYmXHJcbiAgICAgICAgICBwYXlMb2FkPy5jb25maWd1cmF0aW9uSW5mb3M/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgIHRoaXMuaXNOdWxsT3JFbXB0eShwYXlMb2FkPy5jb25maWd1cmF0aW9uSW5mb3NbMF0pXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkZWxldGUgcGF5TG9hZD8uY29uZmlndXJhdGlvbkluZm9zO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jYXJ0U2VydmljZVxyXG4gICAgICAgIC51cGRhdGVDYXJ0RW50cnkodGhpcy5jYXJ0SWQsIHRoaXMucHJvZHVjdERldGFpbHM/LmVudHJ5TnVtYmVyLCBwYXlMb2FkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUNhcnRTZXJ2aWNlLnJlbG9hZEFjdGl2ZUNhcnQoKTtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRFbnRpcmVzLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFRvQ2FydEVycm9yID1cclxuICAgICAgICAgICAgICBlcnJvcj8uZXJyb3I/LmVycm9yc1swXT8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgIGVycm9yPy5lcnJvcj8uZXJyb3JzWzBdPy5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSBUb3RhbCBQcmljZSBhbmQgVG90YWwgbGVuZ3RoIGJhc2VkIG9uIHVzZXIgaW5wdXRzIG9uIGVhY2ggcm93XHJcbiAgdXBkYXRlVG90YWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvdGFsTGVuZ3RoID0gMDtcclxuICAgIHRoaXMudG90YWxQcmljZSA9IDA7XHJcbiAgICBpZiAoIXRoaXMuaXNGaW5pc2hlZFByb2R1Y3QpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZ3JvdXBCeUJ1bmRsZShcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmdldFJhd1ZhbHVlKCksXHJcbiAgICAgICAgJ3Byb2RCdW5kbGUnXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybS5jb250cm9scy5mb3JFYWNoKChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBxdHkgPSBwYXJzZUZsb2F0KGVsZW1lbnQ/LnZhbHVlPy5wcm9kUXR5KTtcclxuICAgICAgICBjb25zdCBsZW4gPSBwYXJzZUZsb2F0KGVsZW1lbnQ/LnZhbHVlPy5wcm9kTGVuKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50QnVuZGxlTmFtZSA9IGVsZW1lbnQ/LnZhbHVlPy5wcm9kQnVuZGxlPy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMuaXNOdWxsT3JFbXB0eShxdHkpICYmXHJcbiAgICAgICAgICAhdGhpcy5pc051bGxPckVtcHR5KGxlbikgJiZcclxuICAgICAgICAgICFpc05hTihxdHkpICYmXHJcbiAgICAgICAgICAhaXNOYU4obGVuKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdG90YWwgPSBxdHkgKiBsZW47XHJcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzQnVuZGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JJbmRleFtpbmRleF0gPVxyXG4gICAgICAgICAgICAgIHRvdGFsICogKHRoaXMuY3V0dGluZ1ZhbGlkYXRpb24/LndlaWdodFBlckxNIHx8IDEpID5cclxuICAgICAgICAgICAgICAodGhpcy5jdXR0aW5nVmFsaWRhdGlvbj8ubWF4QnVuZGxlTG9hZCB8fCAxMDAwKVxyXG4gICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGhpcy5jaGVja1RvdGFsQnVuZGxlV2VpZ2h0KGZvcm1WYWx1ZXNbY3VycmVudEJ1bmRsZU5hbWVdKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9ySW5kZXhObyA9IHRoaXMuZ2V0TGFzdEJ1bmRsZUluZGV4KGN1cnJlbnRCdW5kbGVOYW1lKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkoZXJyb3JJbmRleE5vKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JJbmRleFtlcnJvckluZGV4Tm9dID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckluZGV4W2luZGV4XSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKHF0eSkgJiYgIWlzTmFOKGxlbikpIHtcclxuICAgICAgICAgIHRoaXMudG90YWxMZW5ndGggPSB0aGlzLnRvdGFsTGVuZ3RoICsgdG90YWw7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPVxyXG4gICAgICAgICAgICB0aGlzLnRvdGFsTGVuZ3RoICogdGhpcy5wcm9kdWN0RGV0YWlscz8ucHJpY2U/LnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvdGFsTGVuZ3RoID0gbnVsbDtcclxuICAgICAgY29uc3QgcXR5ID0gdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1swXT8uZ2V0KCdwcm9kUXR5Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIWlzTmFOKHF0eSkpIHtcclxuICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSBxdHkgKiB0aGlzLmFjY2Vzc29yaWVzUHJpY2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQ2FydERldGFpbHMoKTtcclxuICB9XHJcblxyXG4gIC8vIFV0aWxpdHkgRnVuY3Rpb24gdG8gZ2V0IEtleSBWYWx1ZXNcclxuICBnZXRLZXlWYWx1ZXMoc291cmNlOiBhbnksIHNlYXJjaDogYW55KTogYW55IHtcclxuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgW2tleSwgbmV4dF0gPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xyXG4gICAgY29uc3QgeyBba2V5XTogdmFsdWUsIC4uLnJlc3QgfSA9IHNvdXJjZTtcclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAuLi4oa2V5ID09PSBzZWFyY2ggPyBbdmFsdWVdIDogdGhpcy5nZXRLZXlWYWx1ZXModmFsdWUsIHNlYXJjaCkpLFxyXG4gICAgICAuLi4obmV4dCA/IHRoaXMuZ2V0S2V5VmFsdWVzKHJlc3QsIHNlYXJjaCkgOiBbXSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IHRoZSB2YWx1ZXMgb2YgUXVhbnRpdHkgRm9ybVxyXG4gIGdldFByb2R1Y3RRdWFudGl0eUZvcm1Hcm91cCgpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgIHRoaXMuaXNGaW5pc2hlZFByb2R1Y3QgPyBuZXcgQWNjZXNzb3JpZXNRdWFudGl0eSgpIDogbmV3IFByb2R1Y3RRdWFudGl0eSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByb2R1Y3RRdWFudGl0eUZvcm0oKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLnByb2R1Y3RGb3JtLmdldCgncHJvZHVjdFF1YW50aXR5JykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgLy8gQWRkIHRoZSBRdWFuaXR5IEZvcm0gd2hlbiB1c2VyIGNsaWNrcyBvbiBBZGQgTW9yZSBidXR0b25cclxuICBhZGRQcm9kdWN0UXVhbnRpdHlGb3JtR3JvdXAoZXZlbnQ/OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5wdXNoKHRoaXMuZ2V0UHJvZHVjdFF1YW50aXR5Rm9ybUdyb3VwKCkpO1xyXG4gICAgY29uc3QgYnVuZGxlcyA9IHRoaXMuZ3JvdXBCeUJ1bmRsZShcclxuICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5nZXRSYXdWYWx1ZSgpLFxyXG4gICAgICAncHJvZEJ1bmRsZSdcclxuICAgICk7XHJcbiAgICB0aGlzLmRpc2FibGVBZGRNb3JlID0gdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5sZW5ndGggPiA5OTtcclxuICAgIHRoaXMuZXJyb3JJbmRleFt0aGlzLnJvd0luZGV4XSA9IGZhbHNlO1xyXG4gICAgdGhpcy5oYXNQcm9kUmVmSW5kZXhbdGhpcy5yb3dJbmRleCsrXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRlIHRoZSBRdWFudGl0eSBmb3JtIGlmIHVzZXIgY2xpY2tzIG9uIHJlbW92ZSBidXR0b25cclxuICByZW1vdmVQcm9kdWN0UXVhbnRpdHlGb3JtKGluZGV4OiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0ucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5yb3dJbmRleC0tO1xyXG4gICAgdGhpcy5kaXNhYmxlQWRkTW9yZSA9IHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8ubGVuZ3RoID4gOTk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVRvdGFsKCk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgSm9iIFJlZmVyZW5jZSBFcnJvcnNcclxuICBqb2JSZWZlcmVuY2VFcnJvcnMoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb2R1Y3RGb3JtPy5nZXQoJ2pvYlJlZmVyZW5jZScpPy5lcnJvcnM7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgUHJvZHVjdCBRdWFudGl0eSBFcnJvcnNcclxuICBwcm9kUXR5RXJyb3JzKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8uZXJyb3JzIHx8XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy5pbnZhbGlkKSAmJlxyXG4gICAgICAodGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFF0eScpPy5kaXJ0eSB8fFxyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RRdHknKT8udG91Y2hlZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgUHJvZHVjdCBMZW5ndGggRXJyb3JzXHJcbiAgcHJvZExlbkVycm9ycyhpbmRleDogYW55KTogYW55IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kTGVuJyk/LmVycm9ycyB8fFxyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RMZW4nKT8uaW52YWxpZCkgJiZcclxuICAgICAgKHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RMZW4nKT8uZGlydHkgfHxcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kTGVuJyk/LnRvdWNoZWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IFByb2R1Y3QgTGVuZ3RoIEVycm9yc1xyXG4gIG1pbkxlbkVycm9ycyhpbmRleDogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmhhc01pbmxlbmd0aEVycm9yPy5pbmRleE9mKGluZGV4KSAhPT0gLTE7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgUHJvZHVjdCBCdW5kbGUgRXJyb3JzXHJcbiAgcHJvZEJ1bmRsZUVycm9ycyhpbmRleDogYW55KTogYW55IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kQnVuZGxlJyk/LmVycm9ycyB8fFxyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RCdW5kbGUnKVxyXG4gICAgICAgICAgPy5pbnZhbGlkKSAmJlxyXG4gICAgICAodGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZEJ1bmRsZScpPy5kaXJ0eSB8fFxyXG4gICAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoJ3Byb2RCdW5kbGUnKT8udG91Y2hlZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgUHJvZHVjdCBCdW5sZGUgUmVmZXJlbmNlIEVycm9yc1xyXG4gIHByb2RSZWZFcnJvcnMoaW5kZXg6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFJlZicpPy5lcnJvcnMgfHxcclxuICAgICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUmVmJyk/LmludmFsaWQpICYmXHJcbiAgICAgICh0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUmVmJyk/LmRpcnR5IHx8XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0UXVhbnRpdHlGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldCgncHJvZFJlZicpPy50b3VjaGVkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIGZvcm0gaXMgVmFsaWQgb3Igbm90XHJcbiAgaXNWYWxpZEZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaGFzQnVuZGxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2R1Y3RGb3JtPy52YWxpZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvZHVjdFF1YW50aXR5Rm9ybT8uY29udHJvbHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHZhbGlkID0gdGhpcy5pc0ZpbmlzaGVkUHJvZHVjdFxyXG4gICAgICAgICAgPyBlbGVtZW50Py5nZXQoJ3Byb2RRdHknKT8udmFsaWRcclxuICAgICAgICAgIDogZWxlbWVudD8uZ2V0KCdwcm9kTGVuJyk/LnZhbGlkICYmIGVsZW1lbnQ/LmdldCgncHJvZFF0eScpPy52YWxpZDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWQ7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiBhbnkgZXJyb3JzIHByZXNlbnQgb24gYW55IHJvdyBhbmQgZGlwbGF5IGl0IG9uIFVJXHJcbiAgaGFzRXJyb3JzKGluZGV4OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUXR5Jyk/LmVycm9ycyB8fFxyXG4gICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kTGVuJyk/LmVycm9ycyB8fFxyXG4gICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kQnVuZGxlJyk/LmVycm9ycyB8fFxyXG4gICAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KCdwcm9kUmVmJyk/LmVycm9yc1xyXG4gICAgICA/IHRydWVcclxuICAgICAgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIEFueSBFbnRyeSBoYXMgbGVzcyB0aGFuIE1pbmltdW0gbGVuZ3RoXHJcbiAgY2hlY2tIYXNNaW5MZW5ndGhRdHkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhc01pbmxlbmd0aEVycm9yID0gW107XHJcbiAgICB0aGlzLnByb2R1Y3RRdWFudGl0eUZvcm0/LmNvbnRyb2xzPy5mb3JFYWNoKChlbGVtZW50OiBhbnksIGluZDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBlbGVtZW50Py52YWx1ZT8ucHJvZExlbiA8IHRoaXMuY3V0dGluZ1ZhbGlkYXRpb24/Lm1pbkxlbmd0aCAmJlxyXG4gICAgICAgICF0aGlzLmlzTnVsbE9yRW1wdHkoZWxlbWVudD8udmFsdWU/LnByb2RMZW4pXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuaGFzTWlubGVuZ3RoRXJyb3IucHVzaChpbmQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHBhZDNEaWdpdHModmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBxdHkgPSB2YWx1ZTtcclxuICAgIGlmICghdGhpcy5pc051bGxPckVtcHR5KHF0eSkgJiYgIWlzTmFOKHF0eSkpIHtcclxuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocXR5KVxyXG4gICAgICAgID8udG9GaXhlZCgzKVxyXG4gICAgICAgID8ucmVwbGFjZSgvKFxcZCkoPz0oXFxkezN9KStcXGIpL2csICckMSwnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENvbnZlcnQgTGVuZ3RoIHRvIGRlbWlhbCBmb3JtYXQgYWZ0ZXIgYmx1clxyXG4gIHVwZGF0ZUxlbnRoVmFsdWUoZWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNOdWxsT3JFbXB0eShlbGVtZW50Py52YWx1ZSkpIHtcclxuICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMucGFkM0RpZ2l0cyhlbGVtZW50LnZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hlY2tIYXNNaW5MZW5ndGhRdHkoKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2R1Y3REZXRhaWxzXCIgW2Zvcm1Hcm91cF09XCJwcm9kdWN0Rm9ybVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImNvbCBwLTAgYnVuZGxpbmdcIlxyXG4gICAgICAgICpuZ0lmPVwiIWlzRmluaXNoZWRQcm9kdWN0ICYmICFpc0ZsYXNoaW5nUHJvZHVjdFwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInByLTIgZm9udC13ZWlnaHQtYm9sZCB0ZXh0XCI+QnVuZGxpbmcgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3dpdGNoXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnVuZGxpbmdcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlQnVuZGxpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyIHJvdW5kXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicXVhbnRpdHkgYm9yZGVyIHAtMyBtdC00XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cInByb2R1Y3RRdWFudGl0eVwiPlxyXG4gICAgICAgIDxkYXRhbGlzdCBpZD1cImJ1bmRsZUxpc3RcIj5cclxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBidW5kbGVMaXN0XCI+XHJcbiAgICAgICAgICAgIHt7IGJ1bmRsZSB9fVxyXG4gICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgPC9kYXRhbGlzdD5cclxuICAgICAgICA8dGFibGVcclxuICAgICAgICAgIGNsYXNzPVwibm8tYm9yZGVyXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ2hhcy1idW5kbGUnOiBoYXNCdW5kbGUsXHJcbiAgICAgICAgICAgIGFjY2Vzc29yaWVzOiBpc0ZpbmlzaGVkUHJvZHVjdFxyXG4gICAgICAgICAgfVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dGg+UXVhbnRpdHk8L3RoPlxyXG4gICAgICAgICAgICA8dGggKm5nSWY9XCIhaXNGaW5pc2hlZFByb2R1Y3RcIj5MZW5ndGggKExNKTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cImhhc0J1bmRsZVwiPlxyXG4gICAgICAgICAgICAgIEJ1bmRsZVxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImluZm8taWNvblwiXHJcbiAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiQnVuZGxlIEluZm9ybWF0aW9uIGdvZXMgaGVyZS4uLi5cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAqbmdJZj1cImhhc0J1bmRsZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLW5vbmVcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2QtbGctYmxvY2snOiBsaXN0VmlldyB9XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIFJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImluZm8taWNvblwiXHJcbiAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiUmVmZXJlbmNlIEluZm9ybWF0aW9uIGdvZXMgaGVyZS4uLi5cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgIGxldCB2YWwgb2YgcHJvZHVjdEZvcm0uZ2V0KCdwcm9kdWN0UXVhbnRpdHknKVsnY29udHJvbHMnXTtcclxuICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBwcm9kLXF0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZFF0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWlubGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgT25seU51bWJlcj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cInVwZGF0ZVRvdGFsKClcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFpc0ZpbmlzaGVkUHJvZHVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBwcm9kLWxlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZExlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgI3Byb2RMZW5cclxuICAgICAgICAgICAgICAgICAgICBtaW5sZW5ndGg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI3XCJcclxuICAgICAgICAgICAgICAgICAgICBPbmx5TnVtYmVyPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidXBkYXRlVG90YWwoKTsgdXBkYXRlTGVudGhWYWx1ZShwcm9kTGVuKVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiaGFzQnVuZGxlICYmICFpc0ZpbmlzaGVkUHJvZHVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lXCIgW25nQ2xhc3NdPVwieyAnZC1sZy1ibG9jayc6IGxpc3RWaWV3IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHByb2QtYnVuZGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb2RCdW5kbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgI3Byb2RCdW5kbGVcclxuICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZEJ1bmRsZS52YWx1ZSA9IHByb2RCdW5kbGUudmFsdWUudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG1pbmxlbmd0aD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVG90YWwoKTsgcG9wdWxhdGVTYW1lQnVuZGxlUmVmZXJlbmNlKG51bGwsIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInVwZGF0ZUJ1bmRsZUxpc3QoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsaXN0PVwiYnVuZGxlTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnZC1sZy1ub25lIGQteGwtbm9uZSc6IGxpc3RWaWV3IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInAtMCBtLTBcIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0QnVuZGxlVmFsdWVzKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW1lbnUtYnV0dG9uXCIgKm5nSWY9XCIhbGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGRyb3BsZWZ0XCIgKm5nSWY9XCJoYXNCdW5kbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtdlwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG0tMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10YXJnZXQ9XCIjYnVuZGxlTW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0QnVuZGxlVmFsdWUoaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdCBCdW5kbGUgVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBtLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA+IDAgfHwgcHJvZHVjdFF1YW50aXR5Rm9ybS5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUHJvZHVjdFF1YW50aXR5Rm9ybShpLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiaGFzQnVuZGxlICYmICFpc0ZpbmlzaGVkUHJvZHVjdCAmJiBsaXN0Vmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lXCIgW25nQ2xhc3NdPVwieyAnZC1sZy1ibG9jayc6IGxpc3RWaWV3IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHByb2QtcmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG1pbmxlbmd0aD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInBvcHVsYXRlU2FtZUJ1bmRsZVJlZmVyZW5jZSgkZXZlbnQsIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb2RSZWZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRvdGFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNhbWVCdW5kbGVSZWZlcmVuY2UoJGV2ZW50LCBpLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsaXN0Vmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGkgPiAwIHx8IChwcm9kdWN0UXVhbnRpdHlGb3JtLmxlbmd0aCA+IDEgJiYgbGlzdFZpZXcpXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZSBjbG9zZSBkLXNtLW5vbmUgZC1tZC1ub25lIGQtbGctYmxvY2sgZC14bC1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVByb2R1Y3RRdWFudGl0eUZvcm0oaSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcy1jaXJjbGUgY3VzdG9tLWFycm93IHJlbW92ZS1pY29uXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnZC1sZy1ub25lIGQteGwtbm9uZSc6IGxpc3RWaWV3IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGRyb3BsZWZ0XCIgKm5nSWY9XCJoYXNCdW5kbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtdlwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG0tMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10YXJnZXQ9XCIjYnVuZGxlTW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0QnVuZGxlVmFsdWUoaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdCBCdW5kbGUgVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBtLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA+IDAgfHwgcHJvZHVjdFF1YW50aXR5Rm9ybS5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUHJvZHVjdFF1YW50aXR5Rm9ybShpLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiaGFzRXJyb3JzKGkpXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0wXCIgKm5nSWY9XCJwcm9kUXR5RXJyb3JzKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIHZhbGlkIFF1YW50aXR5XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwicHJvZExlbkVycm9ycyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciB2YWxpZCBMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJtaW5MZW5FcnJvcnMoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIGxlbmd0aCBzaG91bGQgYmUgYXQgbGVhc3RcclxuICAgICAgICAgICAgICAgICAgICB7eyBjdXR0aW5nVmFsaWRhdGlvbj8ubWluTGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwicHJvZEJ1bmRsZUVycm9ycyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciB2YWxpZCBCdW5kbGUgTmFtZVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cInByb2RSZWZFcnJvcnMoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgdmFsaWQgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImhhc0Vycm9ySW5kZXgoaSlcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgU2hvdWxkIG5vdCBleGNlZWQgbWF4aW11bSBidW5kbGUgc2l6ZVxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImhhc1Byb2RSZWZFcnJvckluZGV4KGkpXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIFRoaXMgUmVmZXJlbmNlIHZhbHVlIGlzIGFscmVhZHkgdXNlZC4gUGxlYXNlIHVzZSBvdGhlciB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cInNpbXBsZSBwbC0yXCJcclxuICAgICAgICAgICpuZ0lmPVwiIWlzRmluaXNoZWRQcm9kdWN0ICYmICFkaXNhYmxlQWRkTW9yZVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiYWRkUHJvZHVjdFF1YW50aXR5Rm9ybUdyb3VwKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMSBhZGQtbW9yZVwiPiA8L3NwYW4+XHJcbiAgICAgICAgICBBZGQgbW9yZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXZcclxuICBjbGFzcz1cInJvdyBtdC00IGNvbC1zbS0xMiBhbGVydCBhbGVydC1kYW5nZXIganVzdGlmeS1jb250ZW50LXN0YXJ0XCJcclxuICByb2xlPVwiYWxlcnRcIlxyXG4gICpuZ0lmPVwiYWRkVG9DYXJ0RXJyb3IgfCBhc3luY1wiXHJcbj5cclxuICA8aW1nXHJcbiAgICBjbGFzcz1cIm1yLTNcIlxyXG4gICAgc3JjPVwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9lcnJvcmljb24uc3ZnXCJcclxuICAgIGFsdD1cImFsZXJ0XCJcclxuICAvPlxyXG4gIHt7IGFkZFRvQ2FydEVycm9yIH19XHJcbjwvZGl2PlxyXG5cclxuPGRpdlxyXG4gIGNsYXNzPVwibW9kYWwgZmFkZSBlZGl0LWJ1bmRsZS1mb3JtXCJcclxuICBpZD1cImJ1bmRsZU1vZGFsXCJcclxuICByb2xlPVwiZGlhbG9nXCJcclxuICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+QnVuZGxlIFZhbHVlPC9oND5cclxuICAgICAgICA8aVxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uLWNsb3NlIGludml0ZS1wb3AtY2xvc2VcIlxyXG4gICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcclxuICAgICAgICA+PC9pPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgbS0wIHBsLTIgcHItMlwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG5vLWJvcmRlclwiICpuZ0lmPVwiIWlzRmluaXNoZWRQcm9kdWN0XCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICBCdW5kbGVcclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZvLWljb25cIlxyXG4gICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIkJ1bmRsZSBJbmZvcm1hdGlvbiBnb2VzIGhlcmUuLi4uXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgIFJlZmVyZW5jZVxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImluZm8taWNvblwiXHJcbiAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiUmVmZXJlbmNlIEluZm9ybWF0aW9uIGdvZXMgaGVyZS4uLi5cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBbZm9ybUdyb3VwXT1cIm1vZGFsQnVuZGxlRm9ybVwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRhdGFsaXN0IGlkPVwibW9kQnVuZGxlTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgYnVuZGxlTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGJ1bmRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvZGF0YWxpc3Q+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibW9kQnVuZGxlXCJcclxuICAgICAgICAgICAgICAgICAgI21vZEJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgICAoZm9jdXMpPVwidXBkYXRlQnVuZGxlTGlzdCgpXCJcclxuICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm1vZEJ1bmRsZS52YWx1ZSA9IG1vZEJ1bmRsZS52YWx1ZS50b1VwcGVyQ2FzZSgpXCJcclxuICAgICAgICAgICAgICAgICAgbGlzdD1cIm1vZEJ1bmRsZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJwb3B1bGF0ZVNhbWVCdW5kbGVSZWZlcmVuY2UobnVsbCwgc2VsZWN0ZWRJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjE1XCJcclxuICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInBvcHVsYXRlU2FtZUJ1bmRsZVJlZmVyZW5jZSgkZXZlbnQsIHNlbGVjdGVkSW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibW9kUmVmXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAjY2xvc2VidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInNhdmVCdW5kbGVEZXRhaWxzKCRldmVudClcIiBjbGFzcz1cImJ0blwiPlxyXG4gICAgICAgICAgU2F2ZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|