buildingproduct-library 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +24 -0
  2. package/assets/fonts/arial-webfont.woff +0 -0
  3. package/assets/fonts/arial-webfont.woff2 +0 -0
  4. package/assets/fonts/arialblack-webfont.woff +0 -0
  5. package/assets/fonts/arialblack-webfont.woff2 +0 -0
  6. package/assets/fonts/arialbold-webfont.woff +0 -0
  7. package/assets/fonts/arialbold-webfont.woff2 +0 -0
  8. package/assets/fonts/helveticaneue.woff +0 -0
  9. package/assets/fonts/helveticaneue.woff2 +0 -0
  10. package/assets/fonts/helveticaneuemedium-webfont.woff +0 -0
  11. package/assets/fonts/helveticaneuemedium-webfont.woff2 +0 -0
  12. package/assets/fonts/helveticaneuethin-webfont.woff +0 -0
  13. package/assets/fonts/helveticaneuethin-webfont.woff2 +0 -0
  14. package/assets/fonts/icomoon.ttf +0 -0
  15. package/assets/fonts/icomoon.woff +0 -0
  16. package/assets/images/ActivateIcon.svg +14 -0
  17. package/assets/images/AlertIcon.svg +3 -0
  18. package/assets/images/DisableIcon.svg +3 -0
  19. package/assets/images/Divider line.svg +3 -0
  20. package/assets/images/EditIconEnabled.svg +6 -0
  21. package/assets/images/EditIcondisabled.svg +6 -0
  22. package/assets/images/Grid-dark.svg +8 -0
  23. package/assets/images/Grid-light.svg +8 -0
  24. package/assets/images/Hamburger_icon_white.png +0 -0
  25. package/assets/images/Icon-awesome-user-alt-white.svg +13 -0
  26. package/assets/images/Icon-ionic-ios-arrow-down.svg +3 -0
  27. package/assets/images/Icon-ionic-ios-help-circle.svg +6 -0
  28. package/assets/images/Icon-ionic-ios-home.svg +6 -0
  29. package/assets/images/Icon-ionic-ios-settings.svg +6 -0
  30. package/assets/images/Icon-material-shopping-cart.svg +7 -0
  31. package/assets/images/Invited.svg +4 -0
  32. package/assets/images/List-dark.svg +3 -0
  33. package/assets/images/List-light.svg +3 -0
  34. package/assets/images/PDP-add-more.svg +3 -0
  35. package/assets/images/PDP-colour-selected.svg +7 -0
  36. package/assets/images/PDP-quote-exists.svg +12 -0
  37. package/assets/images/PDP-remove-icon.svg +3 -0
  38. package/assets/images/Selected icon.svg +3 -0
  39. package/assets/images/Selected-icon.svg +3 -0
  40. package/assets/images/banner-image.png +0 -0
  41. package/assets/images/br_down.png +0 -0
  42. package/assets/images/cart-shopping-fast.svg +6 -0
  43. package/assets/images/check-square.svg +3 -0
  44. package/assets/images/checkmark-circle-outline.svg +4 -0
  45. package/assets/images/closegrey.svg +71 -0
  46. package/assets/images/dashboard.svg +35 -0
  47. package/assets/images/delivery.svg +11 -0
  48. package/assets/images/download-icon.svg +7 -0
  49. package/assets/images/downloads-dark.svg +6 -0
  50. package/assets/images/downloads-light.svg +6 -0
  51. package/assets/images/erroricon.svg +3 -0
  52. package/assets/images/home-icon.svg +6 -0
  53. package/assets/images/home_banner.png +0 -0
  54. package/assets/images/ic_calender.svg +15 -0
  55. package/assets/images/icon-clock-icon.svg +10 -0
  56. package/assets/images/icon-feather-edit.svg +6 -0
  57. package/assets/images/icon-flashing-black.svg +3 -0
  58. package/assets/images/icon-flashing-white.svg +3 -0
  59. package/assets/images/icon-ionic-ios-search.svg +3 -0
  60. package/assets/images/icon-logout.svg +6 -0
  61. package/assets/images/icon-mail-icon.svg +7 -0
  62. package/assets/images/icon-metro-info.svg +3 -0
  63. package/assets/images/ionic-arrow-back.svg +3 -0
  64. package/assets/images/ionic-ios-feather-phone.svg +3 -0
  65. package/assets/images/ionic-ios-help-circle-outline.svg +6 -0
  66. package/assets/images/ionic-ios-location-outline.svg +3 -0
  67. package/assets/images/ionic-ios-my-location.svg +3 -0
  68. package/assets/images/ionic-ios-users-outline.svg +3 -0
  69. package/assets/images/ionic-trash.svg +3 -0
  70. package/assets/images/logo-black.svg +16 -0
  71. package/assets/images/logo-dark.svg +48 -0
  72. package/assets/images/logo.svg +16 -0
  73. package/assets/images/my-account.svg +21 -0
  74. package/assets/images/my-list.svg +43 -0
  75. package/assets/images/my-team.svg +17 -0
  76. package/assets/images/newsfeed-banner.jpg +0 -0
  77. package/assets/images/newtab.svg +11 -0
  78. package/assets/images/no-saved-cart.svg +3 -0
  79. package/assets/images/open-account-logout.png +0 -0
  80. package/assets/images/orders.svg +23 -0
  81. package/assets/images/pdf-icon.svg +45 -0
  82. package/assets/images/pdp-noimage.svg +21 -0
  83. package/assets/images/pickup.svg +8 -0
  84. package/assets/images/plp-grid-noimage.svg +22 -0
  85. package/assets/images/plp-list-noimage.svg +16 -0
  86. package/assets/images/product-banner.png +0 -0
  87. package/assets/images/product-details-dark.svg +10 -0
  88. package/assets/images/product-details-light.svg +10 -0
  89. package/assets/images/products.svg +34 -0
  90. package/assets/images/quotes.svg +12 -0
  91. package/assets/images/related-products-dark.svg +9 -0
  92. package/assets/images/related-products-light.svg +9 -0
  93. package/assets/images/search-noimage.svg +16 -0
  94. package/assets/images/see-more-bg-hover.svg +1 -0
  95. package/assets/images/see-more-bg.svg +1 -0
  96. package/assets/images/shopping-cart-icon.svg +14 -0
  97. package/assets/images/slash-small-white.svg +3 -0
  98. package/assets/images/warningicon.svg +3 -0
  99. package/assets/images/why-dimond.svg +7 -0
  100. package/buildingproduct-library-0.2.7.tgz +0 -0
  101. package/buildingproduct-library.d.ts +5 -0
  102. package/bundles/buildingproduct-library.umd.js +10979 -0
  103. package/bundles/buildingproduct-library.umd.js.map +1 -0
  104. package/esm2015/buildingproduct-library.js +5 -0
  105. package/esm2015/lib/account-dropdown/account-dropdown.component.js +159 -0
  106. package/esm2015/lib/account-dropdown/account-dropdown.module.js +59 -0
  107. package/esm2015/lib/account-dropdown/account-dropdown.service.js +55 -0
  108. package/esm2015/lib/checkout/add-new-address/add-new-address.component.js +442 -0
  109. package/esm2015/lib/checkout/checkout.module.js +149 -0
  110. package/esm2015/lib/checkout/custom-checkout/custom-checkout.component.js +348 -0
  111. package/esm2015/lib/checkout/order-confirmation/order-confirmation.component.js +37 -0
  112. package/esm2015/lib/checkout/order-review/delivery-information/delivery-information.component.js +32 -0
  113. package/esm2015/lib/checkout/order-review/order-review-grid/order-review-grid.component.js +162 -0
  114. package/esm2015/lib/checkout/order-review/order-review-list/order-review-list.component.js +151 -0
  115. package/esm2015/lib/checkout/order-review/order-review.component.js +123 -0
  116. package/esm2015/lib/constants/general.js +57 -0
  117. package/esm2015/lib/contact-us/contact-us.component.js +38 -0
  118. package/esm2015/lib/contact-us/contact-us.module.js +41 -0
  119. package/esm2015/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.js +48 -0
  120. package/esm2015/lib/custom-cart/custom-cart.component.js +70 -0
  121. package/esm2015/lib/custom-cart/custom-cart.module.js +91 -0
  122. package/esm2015/lib/custom-header-logo/custom-header-logo.component.js +27 -0
  123. package/esm2015/lib/custom-header-logo/custom-header-logo.module.js +54 -0
  124. package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.component.js +24 -0
  125. package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.module.js +48 -0
  126. package/esm2015/lib/custom-mini-cart/custom-mini-cart.component.js +239 -0
  127. package/esm2015/lib/custom-mini-cart/custom-mini-cart.module.js +64 -0
  128. package/esm2015/lib/custom-navigation/custom-navigation.component.js +122 -0
  129. package/esm2015/lib/custom-navigation/custom-navigation.module.js +79 -0
  130. package/esm2015/lib/custom-order-details/custom-order-details.component.js +205 -0
  131. package/esm2015/lib/custom-order-details/custom-order-details.module.js +99 -0
  132. package/esm2015/lib/custom-order-details/download-popup/download-popup.component.js +34 -0
  133. package/esm2015/lib/custom-order-details/order-detail-grid/order-detail-grid.component.js +191 -0
  134. package/esm2015/lib/custom-order-details/order-detail-list/order-detail-list.component.js +169 -0
  135. package/esm2015/lib/custom-order-history/custom-order-history.component.js +680 -0
  136. package/esm2015/lib/custom-order-history/custom-order-history.module.js +105 -0
  137. package/esm2015/lib/custom-order-history/slider-progress/slider-progress.component.js +62 -0
  138. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.js +108 -0
  139. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.js +125 -0
  140. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.js +91 -0
  141. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.js +56 -0
  142. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.js +51 -0
  143. package/esm2015/lib/custom-saved-cart/custom-saved-cart.component.js +114 -0
  144. package/esm2015/lib/custom-saved-cart/custom-saved-cart.module.js +89 -0
  145. package/esm2015/lib/custom-saved-cart/save-cart.service.js +67 -0
  146. package/esm2015/lib/custom-saved-cart/saved-cart-general.js +49 -0
  147. package/esm2015/lib/custom-saved-cart/saved-cart.service.js +48 -0
  148. package/esm2015/lib/custom-search/custom-search.component.js +132 -0
  149. package/esm2015/lib/custom-search/custom-search.module.js +46 -0
  150. package/esm2015/lib/custom-user-account/custom-user-account.component.js +92 -0
  151. package/esm2015/lib/custom-user-account/custom-user-account.module.js +63 -0
  152. package/esm2015/lib/directives/custom-directives.module.js +22 -0
  153. package/esm2015/lib/directives/custom-paginatior.directive.js +197 -0
  154. package/esm2015/lib/environments/environment.js +24 -0
  155. package/esm2015/lib/find-store/find-store.component.js +94 -0
  156. package/esm2015/lib/find-store/find-store.module.js +66 -0
  157. package/esm2015/lib/help-support/help-support.component.js +24 -0
  158. package/esm2015/lib/help-support/help-support.module.js +38 -0
  159. package/esm2015/lib/my-account/account-dashboard/account-dashboard.component.js +133 -0
  160. package/esm2015/lib/my-account/account-statements/account-statements.component.js +57 -0
  161. package/esm2015/lib/my-account/invoice-credit/invoice-credit.component.js +379 -0
  162. package/esm2015/lib/my-account/my-account.component.js +95 -0
  163. package/esm2015/lib/my-account/my-account.module.js +99 -0
  164. package/esm2015/lib/my-team/my-team.component.js +445 -0
  165. package/esm2015/lib/my-team/my-team.module.js +100 -0
  166. package/esm2015/lib/my-team/team-member.service.js +95 -0
  167. package/esm2015/lib/pipes/custom-date-pipe.pipe.js +26 -0
  168. package/esm2015/lib/services/account-dropdown-state.service.js +21 -0
  169. package/esm2015/lib/services/cart.service.js +70 -0
  170. package/esm2015/lib/services/checkout.service.js +69 -0
  171. package/esm2015/lib/services/endPointURL.js +192 -0
  172. package/esm2015/lib/services/find-store.service.js +50 -0
  173. package/esm2015/lib/services/logout.service.js +50 -0
  174. package/esm2015/lib/services/my-account.service.js +68 -0
  175. package/esm2015/lib/services/order-history.service.js +65 -0
  176. package/esm2015/lib/services/order.review.js +38 -0
  177. package/esm2015/lib/services/search.service.js +42 -0
  178. package/esm2015/lib/services/user-account-detail-service.service.js +207 -0
  179. package/esm2015/lib/shared/CustomProduct.js +48 -0
  180. package/esm2015/lib/shared/active-saved-cart/active-saved-cart.component.js +116 -0
  181. package/esm2015/lib/shared/custom-breadcrum/custom-breadcrum.component.js +102 -0
  182. package/esm2015/lib/shared/custom-cart-detail/custom-cart-detail.component.js +95 -0
  183. package/esm2015/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.js +477 -0
  184. package/esm2015/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.js +431 -0
  185. package/esm2015/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.js +622 -0
  186. package/esm2015/lib/shared/custom-cart-detail/split.pipe.js +17 -0
  187. package/esm2015/lib/shared/date-range-picker/date-range-picker.component.js +173 -0
  188. package/esm2015/lib/shared/regEx.validator.js +17 -0
  189. package/esm2015/lib/shared/saved-cart-popup/saved-cart-popup.component.js +83 -0
  190. package/esm2015/lib/shared/shared-components.module.js +119 -0
  191. package/esm2015/lib/shared/shared-download-order/shared-download-order.component.js +220 -0
  192. package/esm2015/lib/spa-custom-header.component.js +26 -0
  193. package/esm2015/lib/spa-custom-header.module.js +145 -0
  194. package/esm2015/lib/spa-custom-header.service.js +14 -0
  195. package/esm2015/lib/utils/utils.js +27 -0
  196. package/esm2015/lib/utils.js +27 -0
  197. package/esm2015/public-api.js +35 -0
  198. package/fesm2015/buildingproduct-library.js +10197 -0
  199. package/fesm2015/buildingproduct-library.js.map +1 -0
  200. package/lib/account-dropdown/account-dropdown.component.d.ts +24 -0
  201. package/lib/account-dropdown/account-dropdown.module.d.ts +11 -0
  202. package/lib/account-dropdown/account-dropdown.service.d.ts +14 -0
  203. package/lib/checkout/add-new-address/add-new-address.component.d.ts +30 -0
  204. package/lib/checkout/checkout.module.d.ts +28 -0
  205. package/lib/checkout/custom-checkout/custom-checkout.component.d.ts +77 -0
  206. package/lib/checkout/order-confirmation/order-confirmation.component.d.ts +23 -0
  207. package/lib/checkout/order-review/delivery-information/delivery-information.component.d.ts +13 -0
  208. package/lib/checkout/order-review/order-review-grid/order-review-grid.component.d.ts +33 -0
  209. package/lib/checkout/order-review/order-review-list/order-review-list.component.d.ts +31 -0
  210. package/lib/checkout/order-review/order-review.component.d.ts +41 -0
  211. package/lib/constants/general.d.ts +50 -0
  212. package/lib/contact-us/contact-us.component.d.ts +13 -0
  213. package/lib/contact-us/contact-us.module.d.ts +9 -0
  214. package/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.d.ts +18 -0
  215. package/lib/custom-cart/custom-cart.component.d.ts +22 -0
  216. package/lib/custom-cart/custom-cart.module.d.ts +15 -0
  217. package/lib/custom-header-logo/custom-header-logo.component.d.ts +11 -0
  218. package/lib/custom-header-logo/custom-header-logo.module.d.ts +11 -0
  219. package/lib/custom-header-paragraph/custom-header-paragraph.component.d.ts +11 -0
  220. package/lib/custom-header-paragraph/custom-header-paragraph.module.d.ts +10 -0
  221. package/lib/custom-mini-cart/custom-mini-cart.component.d.ts +62 -0
  222. package/lib/custom-mini-cart/custom-mini-cart.module.d.ts +13 -0
  223. package/lib/custom-navigation/custom-navigation.component.d.ts +37 -0
  224. package/lib/custom-navigation/custom-navigation.module.d.ts +21 -0
  225. package/lib/custom-order-details/custom-order-details.component.d.ts +63 -0
  226. package/lib/custom-order-details/custom-order-details.module.d.ts +19 -0
  227. package/lib/custom-order-details/download-popup/download-popup.component.d.ts +15 -0
  228. package/lib/custom-order-details/order-detail-grid/order-detail-grid.component.d.ts +40 -0
  229. package/lib/custom-order-details/order-detail-list/order-detail-list.component.d.ts +35 -0
  230. package/lib/custom-order-history/custom-order-history.component.d.ts +99 -0
  231. package/lib/custom-order-history/custom-order-history.module.d.ts +19 -0
  232. package/lib/custom-order-history/slider-progress/slider-progress.component.d.ts +15 -0
  233. package/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.d.ts +33 -0
  234. package/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.d.ts +20 -0
  235. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.d.ts +65 -0
  236. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.d.ts +31 -0
  237. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.d.ts +19 -0
  238. package/lib/custom-saved-cart/custom-saved-cart.component.d.ts +59 -0
  239. package/lib/custom-saved-cart/custom-saved-cart.module.d.ts +16 -0
  240. package/lib/custom-saved-cart/save-cart.service.d.ts +17 -0
  241. package/lib/custom-saved-cart/saved-cart-general.d.ts +88 -0
  242. package/lib/custom-saved-cart/saved-cart.service.d.ts +12 -0
  243. package/lib/custom-search/custom-search.component.d.ts +35 -0
  244. package/lib/custom-search/custom-search.module.d.ts +10 -0
  245. package/lib/custom-user-account/custom-user-account.component.d.ts +35 -0
  246. package/lib/custom-user-account/custom-user-account.module.d.ts +12 -0
  247. package/lib/directives/custom-directives.module.d.ts +8 -0
  248. package/lib/directives/custom-paginatior.directive.d.ts +29 -0
  249. package/lib/environments/environment.d.ts +12 -0
  250. package/lib/find-store/find-store.component.d.ts +34 -0
  251. package/lib/find-store/find-store.module.d.ts +12 -0
  252. package/lib/help-support/help-support.component.d.ts +11 -0
  253. package/lib/help-support/help-support.module.d.ts +9 -0
  254. package/lib/my-account/account-dashboard/account-dashboard.component.d.ts +34 -0
  255. package/lib/my-account/account-statements/account-statements.component.d.ts +24 -0
  256. package/lib/my-account/invoice-credit/invoice-credit.component.d.ts +66 -0
  257. package/lib/my-account/my-account.component.d.ts +26 -0
  258. package/lib/my-account/my-account.module.d.ts +20 -0
  259. package/lib/my-team/my-team.component.d.ts +103 -0
  260. package/lib/my-team/my-team.module.d.ts +18 -0
  261. package/lib/my-team/team-member.service.d.ts +17 -0
  262. package/lib/pipes/custom-date-pipe.pipe.d.ts +11 -0
  263. package/lib/services/account-dropdown-state.service.d.ts +10 -0
  264. package/lib/services/cart.service.d.ts +15 -0
  265. package/lib/services/checkout.service.d.ts +17 -0
  266. package/lib/services/endPointURL.d.ts +156 -0
  267. package/lib/services/find-store.service.d.ts +14 -0
  268. package/lib/services/logout.service.d.ts +11 -0
  269. package/lib/services/my-account.service.d.ts +16 -0
  270. package/lib/services/order-history.service.d.ts +14 -0
  271. package/lib/services/order.review.d.ts +11 -0
  272. package/lib/services/search.service.d.ts +11 -0
  273. package/lib/services/user-account-detail-service.service.d.ts +40 -0
  274. package/lib/shared/CustomProduct.d.ts +28 -0
  275. package/lib/shared/active-saved-cart/active-saved-cart.component.d.ts +58 -0
  276. package/lib/shared/custom-breadcrum/custom-breadcrum.component.d.ts +30 -0
  277. package/lib/shared/custom-cart-detail/custom-cart-detail.component.d.ts +32 -0
  278. package/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.d.ts +81 -0
  279. package/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.d.ts +72 -0
  280. package/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.d.ts +100 -0
  281. package/lib/shared/custom-cart-detail/split.pipe.d.ts +7 -0
  282. package/lib/shared/date-range-picker/date-range-picker.component.d.ts +39 -0
  283. package/lib/shared/regEx.validator.d.ts +10 -0
  284. package/lib/shared/saved-cart-popup/saved-cart-popup.component.d.ts +37 -0
  285. package/lib/shared/shared-components.module.d.ts +26 -0
  286. package/lib/shared/shared-download-order/shared-download-order.component.d.ts +40 -0
  287. package/lib/spa-custom-header.component.d.ts +11 -0
  288. package/lib/spa-custom-header.module.d.ts +27 -0
  289. package/lib/spa-custom-header.service.d.ts +6 -0
  290. package/lib/utils/utils.d.ts +6 -0
  291. package/lib/utils.d.ts +5 -0
  292. package/package.json +92 -0
  293. package/public-api.d.ts +31 -0
@@ -0,0 +1,431 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, } from "@angular/core";
2
+ import { BehaviorSubject } from "rxjs";
3
+ import { FormGroup } from "@angular/forms";
4
+ import { CartForm } from "../../CustomProduct";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../services/cart.service";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@spartacus/core";
9
+ import * as i4 from "../../../custom-saved-cart/custom-saved-cart-details/saved-cart-details.service";
10
+ import * as i5 from "@angular/router";
11
+ import * as i6 from "@spartacus/storefront";
12
+ import * as i7 from "../custom-product-quantity-form/custom-product-quantity-form.component";
13
+ import * as i8 from "@ng-bootstrap/ng-bootstrap";
14
+ import * as i9 from "@angular/common";
15
+ import * as i10 from "../split.pipe";
16
+ export class CustomCartListComponent {
17
+ constructor(cartService, formBuilder, cdr, activeCartService, cmsService, savedCartService, route) {
18
+ this.cartService = cartService;
19
+ this.formBuilder = formBuilder;
20
+ this.cdr = cdr;
21
+ this.activeCartService = activeCartService;
22
+ this.cmsService = cmsService;
23
+ this.savedCartService = savedCartService;
24
+ this.route = route;
25
+ this.updateCartEntry = new EventEmitter();
26
+ this.additinalselectedColour = [];
27
+ this.modalSelectedColour = [];
28
+ this.showDetails = [];
29
+ this.showWaitCursor = new BehaviorSubject(false);
30
+ this.errorMessage = "Some error occurred while processing data";
31
+ this.defaultConfigInfo = {
32
+ configuratorType: "TEXTFIELD",
33
+ configurationLabel: "COLOR",
34
+ configurationValue: "",
35
+ };
36
+ this.isModalSelectedColor = [];
37
+ this.productForm = new FormGroup({});
38
+ this.addToCartError = null;
39
+ this.showToast = false;
40
+ this.cartPageData = true;
41
+ this.env = sessionStorage.getItem('env');
42
+ this.environment = JSON.parse(this.env);
43
+ }
44
+ ngOnInit() {
45
+ var _a;
46
+ const cartObj = localStorage.getItem("spartacus⚿dimond-spa⚿cart");
47
+ this.cartId = (_a = JSON.parse(cartObj)) === null || _a === void 0 ? void 0 : _a.active;
48
+ this.saveCardOrderId = this.route.snapshot.params["savedCartId"];
49
+ this.productForm = this.formBuilder.group({
50
+ cart: this.formBuilder.array([]),
51
+ });
52
+ this.updateDefaultCartDetails();
53
+ this.cartService.expandAll.subscribe((data) => {
54
+ for (let i = 0; i < this.cartDetails.length; i++) {
55
+ this.showDetails[i] = data;
56
+ this.cartDetails[i].isExpand = false;
57
+ }
58
+ });
59
+ this.cmsService.getCurrentPage().subscribe((data) => {
60
+ if (data.template == "SavedCartDetailsPageTemplate") {
61
+ this.cartPageData = false;
62
+ }
63
+ else {
64
+ this.cartPageData = true;
65
+ }
66
+ });
67
+ this.cdr.detectChanges();
68
+ }
69
+ get cartForm() {
70
+ return this.productForm.get("cart");
71
+ }
72
+ hasCartDetails() {
73
+ var _a;
74
+ return this.cartForm && ((_a = Object.keys(this.cartForm)) === null || _a === void 0 ? void 0 : _a.length) > 0;
75
+ }
76
+ updateDefaultCartDetails() {
77
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
78
+ for (let i = 0; i < ((_a = this.cartDetails) === null || _a === void 0 ? void 0 : _a.length); i++) {
79
+ (_b = this.cartForm) === null || _b === void 0 ? void 0 : _b.push(this.formBuilder.group(new CartForm()));
80
+ (_d = (_c = this.cartForm) === null || _c === void 0 ? void 0 : _c.controls[i].get("jobReference")) === null || _d === void 0 ? void 0 : _d.setValue((_e = this.cartDetails[i]) === null || _e === void 0 ? void 0 : _e.jobReference);
81
+ const qty = ((_g = (_f = this.cartDetails[i]) === null || _f === void 0 ? void 0 : _f.product) === null || _g === void 0 ? void 0 : _g.finishedProduct)
82
+ ? parseInt((_h = this.cartDetails[i]) === null || _h === void 0 ? void 0 : _h.quantity)
83
+ : (_j = this.cartDetails[i]) === null || _j === void 0 ? void 0 : _j.quantityDouble;
84
+ (_l = (_k = this.cartForm) === null || _k === void 0 ? void 0 : _k.controls[i].get("prodQty")) === null || _l === void 0 ? void 0 : _l.setValue(qty);
85
+ this.isModalSelectedColor.push(false);
86
+ this.showDetails.push(false);
87
+ if (((_m = this.cartDetails[i]) === null || _m === void 0 ? void 0 : _m.configurationInfos) &&
88
+ ((_p = (_o = this.cartDetails[i]) === null || _o === void 0 ? void 0 : _o.configurationInfos) === null || _p === void 0 ? void 0 : _p.length) > 0) {
89
+ for (const config of (_q = this.cartDetails[i]) === null || _q === void 0 ? void 0 : _q.configurationInfos) {
90
+ if ((config === null || config === void 0 ? void 0 : config.configurationLabel) == "COLOR") {
91
+ this.defaultConfigInfo.configurationValue =
92
+ ((_r = config === null || config === void 0 ? void 0 : config.configurationValue) === null || _r === void 0 ? void 0 : _r.split("|")[0]) || "";
93
+ }
94
+ }
95
+ if (((_s = this.cartDetails[i]) === null || _s === void 0 ? void 0 : _s.configValues) &&
96
+ ((_u = (_t = this.cartDetails[i]) === null || _t === void 0 ? void 0 : _t.configValues) === null || _u === void 0 ? void 0 : _u.length) > 0)
97
+ this.cartDetails[i]["configValues"] = this.defaultConfigInfo;
98
+ }
99
+ }
100
+ }
101
+ ngOnChanges(changes) {
102
+ var _a;
103
+ if (!((_a = changes === null || changes === void 0 ? void 0 : changes.cartDetails) === null || _a === void 0 ? void 0 : _a.firstChange)) {
104
+ this.updateDefaultCartDetails();
105
+ this.cdr.detectChanges();
106
+ }
107
+ }
108
+ showHide(ind) {
109
+ this.showDetails[ind] = !this.showDetails[ind];
110
+ }
111
+ getColourDetails(configInfo, type) {
112
+ var _a, _b, _c, _d;
113
+ let name;
114
+ let background;
115
+ if (configInfo && (configInfo === null || configInfo === void 0 ? void 0 : configInfo.length) > 0) {
116
+ const colour = configInfo === null || configInfo === void 0 ? void 0 : configInfo.filter((col) => {
117
+ var _a;
118
+ return ((_a = col === null || col === void 0 ? void 0 : col.configurationLabel) === null || _a === void 0 ? void 0 : _a.toLowerCase()) == "color";
119
+ });
120
+ if (colour && (colour === null || colour === void 0 ? void 0 : colour.length)) {
121
+ name = (_b = (_a = colour[0]) === null || _a === void 0 ? void 0 : _a.configurationValue) === null || _b === void 0 ? void 0 : _b.split('|')[1];
122
+ background = (_d = (_c = colour[0]) === null || _c === void 0 ? void 0 : _c.configurationValue) === null || _d === void 0 ? void 0 : _d.split('|')[2];
123
+ }
124
+ }
125
+ return (type == "background") ? background : name;
126
+ }
127
+ getColours(cartDetails, index, event) {
128
+ event.preventDefault();
129
+ // this.selectedColour =
130
+ // cartDetails?.configurationInfos[0]?.configurationValue.split('|')[2];
131
+ this.selectedIndex = index;
132
+ for (let i = 0; i < this.cartDetails.length; i++) {
133
+ if (i != index) {
134
+ this.cartDetails[i].isExpand = false;
135
+ }
136
+ else {
137
+ this.cartDetails[index].isExpand = !this.cartDetails[index].isExpand;
138
+ }
139
+ }
140
+ }
141
+ updateSelectedColourCode(code) {
142
+ var _a;
143
+ if (this.cartDetails[this.selectedIndex] &&
144
+ ((_a = this.cartDetails[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.configValues)) {
145
+ this.cartDetails[this.selectedIndex].configValues.configurationValue =
146
+ code;
147
+ }
148
+ }
149
+ modalSelectedColor(event, colour, ind, skuCode) {
150
+ var _a, _b;
151
+ event.preventDefault();
152
+ if (((_b = (_a = this.cartDetails[ind]) === null || _a === void 0 ? void 0 : _a.product) === null || _b === void 0 ? void 0 : _b.finishedProduct) === true) {
153
+ this.modalSelectedColour[ind] = colour;
154
+ this.isModalSelectedColor[ind] = true;
155
+ }
156
+ else {
157
+ this.modalSelectedColour[ind] = colour;
158
+ this.isModalSelectedColor[ind] = true;
159
+ }
160
+ this.updateSelectedColourCode(colour === null || colour === void 0 ? void 0 : colour.code);
161
+ this.cdr.detectChanges();
162
+ this.updateProductColor(this.cartDetails[ind], colour, ind, skuCode);
163
+ }
164
+ addtionalModalSelectedColor(event, colour, ind) {
165
+ var _a, _b;
166
+ event.preventDefault();
167
+ if (((_b = (_a = this.cartDetails[ind]) === null || _a === void 0 ? void 0 : _a.product) === null || _b === void 0 ? void 0 : _b.finishedProduct) === true) {
168
+ this.additinalselectedColour[ind] = colour;
169
+ }
170
+ else {
171
+ this.additinalselectedColour[ind] = colour;
172
+ }
173
+ this.updateSelectedColourCode(colour === null || colour === void 0 ? void 0 : colour.code);
174
+ this.cdr.detectChanges();
175
+ }
176
+ proceedWithSubmit(color, ind) {
177
+ this.isModalSelectedColor[ind] = true;
178
+ this.modalSelectedColour[ind] = color;
179
+ this.closeInviteModal.nativeElement.click();
180
+ this.getColours(color, ind, event);
181
+ this.updateProductColor(this.cartDetails[ind], color, ind);
182
+ }
183
+ cancel() {
184
+ this.additinalselectedColour = [];
185
+ }
186
+ deleteEntry(entNumber) {
187
+ this.showWaitCursor.next(true);
188
+ if (this.cartPageData == true) {
189
+ this.cartService.deleteCartEntry(this.cartId, entNumber).subscribe((data) => {
190
+ this.cdr.detectChanges();
191
+ this.updateCartEntry.emit();
192
+ this.activeCartService.reloadActiveCart();
193
+ this.cdr.detectChanges();
194
+ this.showToast = true;
195
+ this.showWaitCursor.next(false);
196
+ setTimeout(() => {
197
+ this.showToast = false;
198
+ }, 4000);
199
+ }, (error) => {
200
+ this.showWaitCursor.next(false);
201
+ });
202
+ }
203
+ else {
204
+ if (this.cartDetails.length == 1) {
205
+ this.savedCartService
206
+ .deleteSavdCart(this.saveCardOrderId)
207
+ .subscribe(() => {
208
+ this.showToast = true;
209
+ this.showWaitCursor.next(false);
210
+ window.location.href = "my-account/saved-carts";
211
+ setTimeout(() => {
212
+ this.showToast = false;
213
+ }, 4000);
214
+ });
215
+ }
216
+ this.savedCartService
217
+ .deleteSaveCartEntry(this.saveCardOrderId, entNumber)
218
+ .subscribe((data) => {
219
+ this.cdr.detectChanges();
220
+ this.showToast = true;
221
+ this.showWaitCursor.next(false);
222
+ setTimeout(() => {
223
+ this.updateCartEntry.emit();
224
+ this.showToast = false;
225
+ }, 4000);
226
+ }, (error) => {
227
+ this.showWaitCursor.next(false);
228
+ }, () => {
229
+ window.location.reload();
230
+ });
231
+ }
232
+ }
233
+ reoladCartEntires(event) {
234
+ this.updateCartEntry.emit();
235
+ }
236
+ // Check if any value is empty or undefined
237
+ isNullOrEmpty(value) {
238
+ return value == null || value == undefined || value == "";
239
+ }
240
+ updateProductColor(cart, color, index, skuCode) {
241
+ //event.preventDefault();
242
+ const obj = [];
243
+ obj.push({
244
+ configuratorType: "TEXTFIELD",
245
+ configurationLabel: "COLOR",
246
+ configurationValue: color === null || color === void 0 ? void 0 : color.code,
247
+ });
248
+ this.updateCartDetails(cart, index, obj, skuCode);
249
+ }
250
+ // Update Cart Details if Quantity Changed for Accessories only
251
+ updateCartDetails(cart, index, color, skuCode) {
252
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
253
+ let payLoad = {};
254
+ this.showWaitCursor.next(true);
255
+ const entryNumber = ((_a = cart === null || cart === void 0 ? void 0 : cart.product) === null || _a === void 0 ? void 0 : _a.entryNumber) || (cart === null || cart === void 0 ? void 0 : cart.entryNumber);
256
+ if (color) {
257
+ payLoad = {
258
+ quantity: parseInt((_d = (_c = (_b = this.cartForm) === null || _b === void 0 ? void 0 : _b.controls[index]) === null || _c === void 0 ? void 0 : _c.get("prodQty")) === null || _d === void 0 ? void 0 : _d.value),
259
+ product: {
260
+ code: skuCode
261
+ },
262
+ configurationInfos: color,
263
+ };
264
+ }
265
+ else if ((_e = cart === null || cart === void 0 ? void 0 : cart.product) === null || _e === void 0 ? void 0 : _e.finishedProduct) {
266
+ payLoad = {
267
+ quantity: parseInt((_h = (_g = (_f = this.cartForm) === null || _f === void 0 ? void 0 : _f.controls[index]) === null || _g === void 0 ? void 0 : _g.get("prodQty")) === null || _h === void 0 ? void 0 : _h.value),
268
+ jobReference: (_l = (_k = (_j = this.cartForm) === null || _j === void 0 ? void 0 : _j.controls[index]) === null || _k === void 0 ? void 0 : _k.get("jobReference")) === null || _l === void 0 ? void 0 : _l.value,
269
+ };
270
+ }
271
+ else {
272
+ payLoad = {
273
+ quantity: 1,
274
+ product: {
275
+ code: (_m = cart === null || cart === void 0 ? void 0 : cart.product) === null || _m === void 0 ? void 0 : _m.code,
276
+ },
277
+ jobReference: (_q = (_p = (_o = this.cartForm) === null || _o === void 0 ? void 0 : _o.controls[index]) === null || _p === void 0 ? void 0 : _p.get("jobReference")) === null || _q === void 0 ? void 0 : _q.value,
278
+ };
279
+ }
280
+ this.cartService
281
+ .updateCartEntry(this.cartId, entryNumber, payLoad)
282
+ .subscribe((response) => {
283
+ var _a, _b, _c;
284
+ if (((_a = response === null || response === void 0 ? void 0 : response.statusCode) === null || _a === void 0 ? void 0 : _a.toLowerCase()) == "success") {
285
+ this.activeCartService.reloadActiveCart();
286
+ this.updateCartEntry.emit();
287
+ this.cdr.detectChanges();
288
+ this.showToast = true;
289
+ this.showWaitCursor.next(false);
290
+ setTimeout(() => {
291
+ this.showToast = false;
292
+ }, 4000);
293
+ }
294
+ else {
295
+ this.addToCartError =
296
+ ((_b = response === null || response === void 0 ? void 0 : response.errors[0]) === null || _b === void 0 ? void 0 : _b.message) ||
297
+ ((_c = response === null || response === void 0 ? void 0 : response.errors[0]) === null || _c === void 0 ? void 0 : _c.errorMessage) ||
298
+ this.errorMessage;
299
+ this.showWaitCursor.next(false);
300
+ }
301
+ }, (error) => {
302
+ var _a, _b, _c, _d;
303
+ this.addToCartError =
304
+ ((_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) ||
305
+ ((_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) ||
306
+ this.errorMessage;
307
+ this.showWaitCursor.next(false);
308
+ });
309
+ }
310
+ // Get Product Quantity Errors
311
+ prodQtyErrors(index) {
312
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
313
+ return ((((_c = (_b = (_a = this.cartForm) === 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) ||
314
+ ((_f = (_e = (_d = this.cartForm) === 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)) &&
315
+ (((_j = (_h = (_g = this.cartForm) === 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) ||
316
+ ((_m = (_l = (_k = this.cartForm) === 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)));
317
+ }
318
+ // Get Job Reference Errors
319
+ jobReferenceErrors(index) {
320
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
321
+ return ((((_c = (_b = (_a = this.cartForm) === null || _a === void 0 ? void 0 : _a.controls[index]) === null || _b === void 0 ? void 0 : _b.get("jobReference")) === null || _c === void 0 ? void 0 : _c.errors) ||
322
+ ((_f = (_e = (_d = this.cartForm) === null || _d === void 0 ? void 0 : _d.controls[index]) === null || _e === void 0 ? void 0 : _e.get("jobReference")) === null || _f === void 0 ? void 0 : _f.invalid)) &&
323
+ (((_j = (_h = (_g = this.cartForm) === null || _g === void 0 ? void 0 : _g.controls[index]) === null || _h === void 0 ? void 0 : _h.get("jobReference")) === null || _j === void 0 ? void 0 : _j.dirty) ||
324
+ ((_m = (_l = (_k = this.cartForm) === null || _k === void 0 ? void 0 : _k.controls[index]) === null || _l === void 0 ? void 0 : _l.get("jobReference")) === null || _m === void 0 ? void 0 : _m.touched)));
325
+ }
326
+ // Check is Form Valid
327
+ isFormValid(index, cart) {
328
+ var _a, _b, _c, _d, _e, _f, _g, _h;
329
+ return (((_a = this.cartForm) === null || _a === void 0 ? void 0 : _a.controls[index]) &&
330
+ ((_d = (_c = (_b = this.cartForm) === null || _b === void 0 ? void 0 : _b.controls[index]) === null || _c === void 0 ? void 0 : _c.get("jobReference")) === null || _d === void 0 ? void 0 : _d.valid) &&
331
+ (((_g = (_f = (_e = this.cartForm) === null || _e === void 0 ? void 0 : _e.controls[index]) === null || _f === void 0 ? void 0 : _f.get("prodQty")) === null || _g === void 0 ? void 0 : _g.valid) ||
332
+ !((_h = cart === null || cart === void 0 ? void 0 : cart.product) === null || _h === void 0 ? void 0 : _h.finishedProduct)));
333
+ }
334
+ // Update Cart Details on change of Job Reference or Quantity
335
+ updateCart(event, cart, index) {
336
+ var _a;
337
+ event.preventDefault();
338
+ const qty = (_a = event === null || event === void 0 ? void 0 : event.currentTarget) === null || _a === void 0 ? void 0 : _a.value;
339
+ if (!this.isNullOrEmpty(qty) && this.isFormValid(index, cart)) {
340
+ this.updateCartDetails(cart, index);
341
+ }
342
+ }
343
+ updateJobReference(event, cart, index) {
344
+ event.preventDefault();
345
+ this.updateCartDetails(cart, index);
346
+ }
347
+ // Get the Image Details based on Products
348
+ getImageDetails(cartDetails, thumbnail = true) {
349
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
350
+ let imageUrl = (_a = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _a === void 0 ? void 0 : _a.images;
351
+ if (this.isCardData) {
352
+ const colorCode = (cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.configurationInfos) || (cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.configurationInfos[0])
353
+ ? (_c = (_b = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.configurationInfos[0]) === null || _b === void 0 ? void 0 : _b.configurationValue) === null || _c === void 0 ? void 0 : _c.split('|')[0]
354
+ : "";
355
+ imageUrl = (_e = (_d = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _d === void 0 ? void 0 : _d.images) === null || _e === void 0 ? void 0 : _e.filter((img) => { var _a, _b; return ((img === null || img === void 0 ? void 0 : img.format) == "cartIcon" && (img === null || img === void 0 ? void 0 : img.colorCode) == colorCode) || ((img === null || img === void 0 ? void 0 : img.format) == "cartIcon" && this.isNullOrEmpty(colorCode) && ((_b = (_a = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _a === void 0 ? void 0 : _a.images) === null || _b === void 0 ? void 0 : _b.length) <= 4); });
356
+ }
357
+ else {
358
+ imageUrl = (_h = (_g = (_f = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _f === void 0 ? void 0 : _f.images) === null || _g === void 0 ? void 0 : _g.GALLERY) === null || _h === void 0 ? void 0 : _h.cartIcon;
359
+ }
360
+ let srcUrl;
361
+ if ((cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments) &&
362
+ ((_j = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments) === null || _j === void 0 ? void 0 : _j.length) &&
363
+ ((_k = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.product) === null || _k === void 0 ? void 0 : _k.flashingProduct)) {
364
+ srcUrl =
365
+ thumbnail && ((_l = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments) === null || _l === void 0 ? void 0 : _l.length) > 1
366
+ ? (_m = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments[1]) === null || _m === void 0 ? void 0 : _m.downloadURL
367
+ : (_o = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments[0]) === null || _o === void 0 ? void 0 : _o.downloadURL;
368
+ imageUrl = {
369
+ url: (_p = (this.environment.occBaseUrl.slice(0, this.environment.occBaseUrl.length - 1) +
370
+ srcUrl)) === null || _p === void 0 ? void 0 : _p.replace("&attachment=true", ""),
371
+ };
372
+ }
373
+ return imageUrl;
374
+ }
375
+ viewImage(event, cartDetails) {
376
+ var _a;
377
+ event === null || event === void 0 ? void 0 : event.preventDefault();
378
+ this.imageModalSrc = (_a = this.getImageDetails(cartDetails, false)) === null || _a === void 0 ? void 0 : _a.url;
379
+ }
380
+ getPdfLink(cartDetails) {
381
+ var _a;
382
+ return (_a = this.getImageDetails(cartDetails, false)) === null || _a === void 0 ? void 0 : _a.url;
383
+ }
384
+ // Get Summary Heading
385
+ getClassifications(data) {
386
+ let featureArray = [];
387
+ data === null || data === void 0 ? void 0 : data.forEach((element) => {
388
+ element === null || element === void 0 ? void 0 : element.features.forEach((feature) => {
389
+ var _a, _b, _c;
390
+ if (feature === null || feature === void 0 ? void 0 : feature.featureUnit) {
391
+ featureArray.push(((_a = feature === null || feature === void 0 ? void 0 : feature.featureValues[0]) === null || _a === void 0 ? void 0 : _a.value) + ' ' + ((_b = feature === null || feature === void 0 ? void 0 : feature.featureUnit) === null || _b === void 0 ? void 0 : _b.symbol));
392
+ }
393
+ else {
394
+ featureArray.push((_c = feature === null || feature === void 0 ? void 0 : feature.featureValues[0]) === null || _c === void 0 ? void 0 : _c.value);
395
+ }
396
+ });
397
+ });
398
+ return featureArray === null || featureArray === void 0 ? void 0 : featureArray.join(" | ");
399
+ }
400
+ hasImage(cartDetails) {
401
+ var _a;
402
+ const mimeType = (_a = cartDetails === null || cartDetails === void 0 ? void 0 : cartDetails.attachments[0]) === null || _a === void 0 ? void 0 : _a.mime;
403
+ const mimeArray = ["image/png", "image/jpg", "image/jpeg"];
404
+ return mimeArray.includes(mimeType);
405
+ }
406
+ closeToast() {
407
+ this.showToast = false;
408
+ }
409
+ }
410
+ CustomCartListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCartListComponent, deps: [{ token: i1.CartService }, { token: i2.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.ActiveCartService }, { token: i3.CmsService }, { token: i4.SavedCartDetailsService }, { token: i5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
411
+ CustomCartListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomCartListComponent, selector: "app-custom-cart-list", inputs: { cartDetails: "cartDetails", isCardData: "isCardData", additionalPara: "additionalPara" }, outputs: { updateCartEntry: "updateCartEntry" }, viewQueries: [{ propertyName: "closeInviteModal", first: true, predicate: ["closeInviteModal"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"loading\" *ngIf=\"showWaitCursor | async\">Loading&#8230;</div>\r\n\r\n<div class=\"row list-head\">\r\n <div class=\"col-sm-3\">ITEM</div>\r\n <div class=\"col-sm-3\">JOB REFERENCE</div>\r\n <div class=\"col-sm-2\">TOTAL QTY</div>\r\n <div class=\"col-sm-2\">UNIT PRICE</div>\r\n <div class=\"col-sm-2\">TOTAL PRICE</div>\r\n</div>\r\n<ng-container [formGroup]=\"productForm\">\r\n <ng-container formArrayName=\"cart\" *ngIf=\"hasCartDetails()\">\r\n <ng-container\r\n *ngFor=\"\r\n let cart of cartForm.controls;\r\n let i = index;\r\n let lastIndex = last\r\n \"\r\n [formGroupName]=\"i\"\r\n >\r\n <div\r\n class=\"item-space\"\r\n [ngClass]=\"{ 'item-space-last': i == cartDetails.length - 1 }\"\r\n *ngIf=\"!isNullOrEmpty(cartDetails[i]?.product?.code)\"\r\n >\r\n <div class=\"row\">\r\n <div class=\"col-sm-3\">\r\n <div class=\"d-flex\">\r\n <div class=\"product-img\">\r\n <ng-container\r\n *ngIf=\"\r\n cartDetails[i]?.product?.flashingProduct;\r\n else normalImage\r\n \"\r\n >\r\n <a\r\n data-toggle=\"modal\"\r\n class=\"flashing-expand\"\r\n (click)=\"viewImage($event, cartDetails[i])\"\r\n [attr.data-target]=\"'#imageModal'\"\r\n *ngIf=\"hasImage(cartDetails[i]); else hasPdf\"\r\n >\r\n <cx-media\r\n [container]=\"getImageDetails(cartDetails[i])\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media>\r\n </a>\r\n <ng-template #hasPdf>\r\n <a\r\n class=\"flashing-expand flashing-open\"\r\n [href]=\"getPdfLink(cartDetails[i])\"\r\n target=\"_blank\"\r\n >\r\n <img\r\n class=\"pdf-icon\"\r\n src=\"../../../../../assets/images/pdf-icon.svg\"\r\n alt=\"Click to open PDF\"\r\n title=\"Click to open PDF\"\r\n />\r\n </a>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #normalImage>\r\n <cx-media\r\n [container]=\"getImageDetails(cartDetails[i])\"\r\n format=\"cartIcon\"\r\n role=\"presentation\"\r\n ></cx-media>\r\n </ng-template>\r\n </div>\r\n <div class=\"p-2\">\r\n <div class=\"product_name\">\r\n {{ cartDetails[i]?.product?.name }}\r\n </div>\r\n <div class=\"sku\">SKU: {{ cartDetails[i]?.product?.code }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-3\">\r\n <input\r\n class=\"refernce-input\"\r\n type=\"text\"\r\n formControlName=\"jobReference\"\r\n (blur)=\"updateJobReference($event, cartDetails[i], i)\"\r\n />\r\n <div class=\"mt-2 text-danger\" *ngIf=\"jobReferenceErrors(i)\">\r\n Please enter valid Job Reference\r\n </div>\r\n </div>\r\n <div class=\"col-sm-2 totalQty\">\r\n <span\r\n *ngIf=\"\r\n !cartDetails[i]?.product.finishedProduct;\r\n else nonAccessories\r\n \"\r\n >\r\n {{ cartDetails[i]?.quantityDouble }}\r\n {{ cartDetails[i]?.basePrice?.unitType }}\r\n <input\r\n type=\"hidden\"\r\n formControlName=\"prodQty\"\r\n [value]=\"cartDetails[i]?.quantityDouble\"\r\n />\r\n </span>\r\n <ng-template #nonAccessories>\r\n <span>\r\n <input\r\n class=\"qty_input refernce-input\"\r\n type=\"text\"\r\n formControlName=\"prodQty\"\r\n minlength=\"1\"\r\n maxlength=\"2\"\r\n (blur)=\"updateCart($event, cartDetails[i], i)\"\r\n />\r\n </span>\r\n </ng-template>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"prodQtyErrors(i)\">\r\n Please enter valid Quantity\r\n </div>\r\n </div>\r\n <div class=\"col-sm-2 totalQty\">\r\n {{ cartDetails[i]?.basePrice?.formattedValue }}/{{\r\n cartDetails[i]?.basePrice?.unitType\r\n }}\r\n </div>\r\n <div class=\"col-sm-2 totalQty\">\r\n {{ cartDetails[i]?.totalPrice?.formattedValue }}\r\n <span\r\n class=\"img-align\"\r\n (click)=\"deleteEntry(cartDetails[i]?.entryNumber)\"\r\n ><img\r\n src=\"../../../../../assets/images/ionic-trash.svg\"\r\n alt=\"delete\"\r\n /></span>\r\n <br />\r\n excl GST\r\n </div>\r\n </div>\r\n\r\n <div class=\"custom-padding\">\r\n <p class=\"mt-3 mb-0\">\r\n <span\r\n *ngIf=\"\r\n cartDetails[i]?.product &&\r\n cartDetails[i]?.product?.classifications &&\r\n cartDetails[i]?.product?.classifications[0] &&\r\n cartDetails[i]?.product?.classifications[0]?.features\r\n \"\r\n >\r\n {{ getClassifications(cartDetails[i]?.product?.classifications) }}\r\n </span>\r\n </p>\r\n </div>\r\n\r\n <div class=\"custom-padding\">\r\n <div\r\n class=\"d-flex\"\r\n *ngIf=\"\r\n cartDetails[i]?.product.finishedProduct &&\r\n !isModalSelectedColor[i]\r\n \"\r\n >\r\n <div\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i]?.product &&\r\n cartDetails[i]?.product.bpAdditionalAttribute &&\r\n cartDetails[i]?.product.bpAdditionalAttribute?.colours &&\r\n cartDetails[i]?.product.bpAdditionalAttribute?.colours[0]\r\n \"\r\n class=\"selected_color\"\r\n [ngStyle]=\"{\r\n background:\r\n cartDetails[i]?.product?.bpAdditionalAttribute?.colours[0]\r\n ?.hexadecimalCode\r\n }\"\r\n ></div>\r\n <a\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i]?.product &&\r\n cartDetails[i]?.product.bpAdditionalAttribute &&\r\n cartDetails[i]?.product.bpAdditionalAttribute?.colours &&\r\n cartDetails[i]?.product.bpAdditionalAttribute?.colours[0]\r\n \"\r\n class=\"color_link\"\r\n data-toggle=\"collapse\"\r\n [attr.data-target]=\"'#collapseColours' + i\"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cart, i, $event)\r\n \"\r\n >\r\n <span\r\n [ngClass]=\"{\r\n flashingProductBorder:\r\n cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n class=\"color_part\"\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i]?.product &&\r\n cartDetails[i]?.product.bpAdditionalAttribute &&\r\n cartDetails[i]?.product.bpAdditionalAttribute?.colours &&\r\n cartDetails[i]?.product.bpAdditionalAttribute?.colours[0]\r\n \"\r\n >\r\n {{\r\n cartDetails[i]?.product?.bpAdditionalAttribute?.colours[0]\r\n ?.name\r\n }}</span\r\n >\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n\r\n <div\r\n class=\"d-flex align-center\"\r\n *ngIf=\"cartDetails[i]?.product?.flashingProduct\"\r\n >\r\n <div\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i]?.product &&\r\n cartDetails[i]?.configurationInfos &&\r\n cartDetails[i]?.configurationInfos?.length\r\n \"\r\n class=\"selected_color\"\r\n [ngStyle]=\"{\r\n background: getColourDetails(\r\n cartDetails[i]?.configurationInfos,\r\n 'background'\r\n )\r\n }\"\r\n ></div>\r\n <a class=\"ml-2 nolinkForflash\">\r\n <span>{{\r\n getColourDetails(cartDetails[i]?.configurationInfos, \"name\")\r\n }}</span>\r\n </a>\r\n </div>\r\n <div\r\n class=\"d-flex\"\r\n *ngIf=\"\r\n !isModalSelectedColor[i] &&\r\n !cartDetails[i]?.product?.flashingProduct\r\n \"\r\n >\r\n <div\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i]?.configurationInfos &&\r\n cartDetails[i]?.configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n class=\"selected_color\"\r\n [ngStyle]=\"{\r\n background:\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n | split : '|' : 2\r\n }\"\r\n ></div>\r\n <a\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i]?.configurationInfos &&\r\n cartDetails[i]?.configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n class=\"color_link\"\r\n data-toggle=\"collapse\"\r\n [attr.data-target]=\"'#collapseColours' + i\"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cart, i, $event)\r\n \"\r\n [ngClass]=\"{\r\n flashingProductColor: cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n >\r\n <span\r\n [ngClass]=\"{\r\n flashingProductBorder:\r\n cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n class=\"color_part\"\r\n *ngIf=\"\r\n cartDetails[i] &&\r\n cartDetails[i]?.configurationInfos &&\r\n cartDetails[i]?.configurationInfos[0] &&\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n \"\r\n >\r\n {{\r\n cartDetails[i]?.configurationInfos[0]?.configurationValue\r\n | split : \"|\" : 1\r\n }}</span\r\n >\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n <div class=\"d-flex\" *ngIf=\"isModalSelectedColor[i]\">\r\n <div\r\n class=\"selected_color\"\r\n [ngStyle]=\"{\r\n background: modalSelectedColour[i]?.hexadecimalCode\r\n }\"\r\n ></div>\r\n <a\r\n class=\"color_link popup_recent\"\r\n data-toggle=\"collapse\"\r\n [attr.data-target]=\"'#collapseColours' + i\"\r\n (click)=\"\r\n !cartDetails[i]?.product?.flashingProduct &&\r\n getColours(cart, i, $event)\r\n \"\r\n >\r\n <span\r\n [ngClass]=\"{\r\n flashingProductBorder:\r\n cartDetails[i]?.product?.flashingProduct\r\n }\"\r\n class=\"color_part\"\r\n >\r\n {{ modalSelectedColour[i]?.name }}</span\r\n >\r\n <i\r\n *ngIf=\"!cartDetails[i]?.product?.flashingProduct\"\r\n class=\"fas fa-chevron-down dropdown-icon\"\r\n ></i\r\n ></a>\r\n </div>\r\n\r\n <!-- avaialable colours popup -->\r\n <div\r\n *ngIf=\"cartDetails[i]?.isExpand\"\r\n class=\"collapse colours_container\"\r\n [attr.id]=\"'collapseColours' + i\"\r\n >\r\n <div class=\"card card-body\">\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.finishedProduct &&\r\n cartDetails[i]?.product?.variantOptions\r\n \"\r\n class=\"colours m-1 pt-3\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product?.variantOptions;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"\r\n modalSelectedColor(\r\n $event,\r\n modalcolour.colours[0],\r\n i,\r\n modalcolour?.code\r\n )\r\n \"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.colours[0]?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.colours[0]?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.colours[0]?.name }}\"\r\n >\r\n {{ modalcolour?.colours[0]?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n !cartDetails[i]?.product?.finishedProduct &&\r\n cartDetails[i]?.product?.bpAdditionalAttribute?.colours\r\n \"\r\n class=\"colours m-1 pt-3\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.colours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"modalSelectedColor($event, modalcolour, i)\"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{\r\n background: modalcolour?.hexadecimalCode\r\n }\"\r\n [ngClass]=\"{\r\n selected:\r\n modalSelectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.bpAdditionalAttribute\r\n ?.additionalColours?.length > 0\r\n \"\r\n >\r\n <a\r\n data-toggle=\"modal\"\r\n [attr.data-target]=\"'#additionalColorsModal' + i\"\r\n >\r\n <u> Additional colors may be avialable </u></a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Additional colours popup-->\r\n <div\r\n class=\"modal fade\"\r\n id=\"additionalColorsModal{{ i }}\"\r\n role=\"dialog\"\r\n aria-labelledby=\"inviteMemberLabel\"\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\">Additional Colours</h4>\r\n <i\r\n class=\"icon-close invite-pop-close\"\r\n #closeInviteModal\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"more-content\">\r\n <img\r\n class=\"mr-3\"\r\n src=\"../../../../assets/images/warningicon.svg\"\r\n alt=\"alert\"\r\n />\r\n <div>{{ additionalPara?.content }}.</div>\r\n </div>\r\n\r\n <div class=\"colours m-1 pt-3\">\r\n <ng-container\r\n *ngFor=\"\r\n let modalcolour of cartDetails[i]?.product\r\n ?.bpAdditionalAttribute?.additionalColours;\r\n let j = index\r\n \"\r\n >\r\n <div\r\n (click)=\"\r\n addtionalModalSelectedColor($event, modalcolour, i)\r\n \"\r\n class=\"colour m-1 mb-3 main\"\r\n [ngStyle]=\"{ background: modalcolour?.hexadecimalCode }\"\r\n [ngClass]=\"{\r\n selected:\r\n additinalselectedColour[i]?.hexadecimalCode ==\r\n modalcolour?.hexadecimalCode\r\n }\"\r\n >\r\n <div class=\"checkbox\"></div>\r\n <p\r\n class=\"colour-title\"\r\n placement=\"bottom\"\r\n ngbTooltip=\"{{ modalcolour?.name }}\"\r\n >\r\n {{ modalcolour?.name }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"m-1 pt-3\" *ngIf=\"additinalselectedColour[i]\">\r\n <h6 class=\"font-weight-bold\">Colour Selection</h6>\r\n <div class=\"selected_color_section\">\r\n <div\r\n class=\"selected_color\"\r\n [ngStyle]=\"{\r\n background:\r\n additinalselectedColour[i]?.hexadecimalCode\r\n }\"\r\n ></div>\r\n <div>{{ additinalselectedColour[i]?.name }}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-sm-flex justify-content-end d-block\">\r\n <button\r\n type=\"button\"\r\n (click)=\"cancel()\"\r\n data-dismiss=\"modal\"\r\n class=\"btn mobile-cancel-btn dimond-secondary-btn mr-lg-5\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n (click)=\"proceedWithSubmit(additinalselectedColour[i], i)\"\r\n type=\"submit\"\r\n class=\"btn mobile-save-btn dimond-primary-btn float-right\"\r\n data-dismiss=\"modal\"\r\n >\r\n Proceed\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <a\r\n *ngIf=\"!cartDetails[i]?.product?.finishedProduct\"\r\n class=\"see-more-link\"\r\n (click)=\"showHide(i)\"\r\n [ngClass]=\"{ block: cartDetails[i]?.product?.flashingProduct }\"\r\n >\r\n {{ showDetails[i] == true ? \"Hide\" : \"See\" }} more details\r\n </a>\r\n <div\r\n class=\"col-sm-6\"\r\n *ngIf=\"showDetails[i]\"\r\n [ngClass]=\"{\r\n 'quantity-form-details': !cartDetails[i]?.product?.finishedProduct\r\n }\"\r\n >\r\n <div id=\"cartMoreDetails{{ i }}\">\r\n <app-custom-product-quantity-form\r\n [productCode]=\"cartDetails[i]?.product?.code\"\r\n [productDetails]=\"cartDetails[i]\"\r\n [listView]=\"true\"\r\n [accessoriesPrice]=\"cartDetails[i]?.basePrice?.value\"\r\n [selectedColour]=\"selectedColour\"\r\n [isFinishedProduct]=\"cartDetails[i]?.product?.finishedProduct\"\r\n [isFlashingProduct]=\"cartDetails[i]?.product?.flashingProduct\"\r\n (updateCartEntires)=\"reoladCartEntires($event)\"\r\n ></app-custom-product-quantity-form>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n cartDetails[i]?.product?.flashingProduct &&\r\n cartDetails[i]?.productConfiguredInfos &&\r\n cartDetails[i]?.productConfiguredInfos?.length > 0\r\n \"\r\n >\r\n <div\r\n class=\"flashing-block\"\r\n *ngFor=\"let data of cartDetails[i]?.productConfiguredInfos\"\r\n >\r\n <div class=\"row\">\r\n <div class=\"col-sm-3\">\r\n <h3 class=\"flash-title\">{{ data?.product?.name }}</h3>\r\n <h6 class=\"skuId\">SKU: {{ data?.product?.code }}</h6>\r\n <span *ngIf=\"data?.girth\">Grith: +{{ data?.girth }}mm </span>\r\n </div>\r\n <div class=\"offset-sm-3 col-sm-2\">\r\n {{ data?.quantityDouble }}{{ data?.unitType }}\r\n </div>\r\n <div class=\"col-sm-2\">\r\n {{ data?.basePrice?.formattedValue }}/{{ data?.unitType }}\r\n </div>\r\n <div class=\"col-sm-2\">\r\n {{ data?.totalPrice?.formattedValue }}\r\n <span class=\"gst-text\">excl GST</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n<!-- colours popup -->\r\n\r\n<div\r\n class=\"modal fade\"\r\n id=\"imageModal\"\r\n role=\"dialog\"\r\n aria-labelledby=\"imageModal\"\r\n aria-hidden=\"true\"\r\n #imageModal\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 <i\r\n class=\"icon-close invite-pop-close\"\r\n #closeInviteModal\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n ></i>\r\n </div>\r\n <div class=\"modal-body m-4\">\r\n <img [src]=\"imageModalSrc\" alt=\"alert\" />\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ngb-toast *ngIf=\"showToast\" [autohide]=\"true\" [delay]=\"4000\">\r\n <img src=\"../../../../assets/images/Invited.svg\" /> Cart updated successfully!\r\n <i\r\n class=\"icon-close toast-close\"\r\n aria-label=\"Close\"\r\n (click)=\"closeToast()\"\r\n ></i>\r\n</ngb-toast>\r\n", styles: ["@charset \"UTF-8\";@media screen and (min-width: 1366px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: 1.063rem;--fontsize17-5: 1.1rem;--fontsize18: 1.125rem;--fontsize18-4: 1.5rem;--fontsize20: 1.25rem;--fontsize21: 1.313rem;--fontsize22: 1.375rem;--fontsize23: 1.438rem;--fontsize24: 1.5rem;--fontsize26: 1.625rem;--fontsize28: 1.75rem;--fontsize30: 1.625rem;--fontsize32: 2rem;--fontsize34: 2.125rem;--fontsize36: 2rem;--fontsize40: 2.25rem;--fontsize46: 2.875rem;--fontsize80: 5rem}}@media screen and (max-width: 1365px) and (min-width: 768px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2.875rem;--fontsize80: 3.5rem}}@media screen and (max-width: 767px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize16-5: .77rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize19: .938rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize26: 1.25rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2rem;--fontsize80: 2.5rem}}@font-face{font-family:icomoon;font-weight:400;src:url(../assets/fonts/icomoon.ttf) format(\"ttf\"),url(../assets/fonts/icomoon.woff) format(\"woff\");font-weight:normal;font-style:normal;font-display:swap}@font-face{font-family:\"Arial Regular\";src:url(../assets/fonts/arial-webfont.woff) format(\"woff\"),url(../assets/fonts/arial-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Bold\";src:url(../assets/fonts/arialbold-webfont.woff) format(\"woff\"),url(../assets/fonts/arialbold-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Black\";src:url(../assets/fonts/arialblack-webfont.woff) format(\"woff\"),url(../assets/fonts/arialblack-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Reqular\";src:url(../assets/fonts/helveticaneue.woff) format(\"woff\"),url(../assets/fonts/helveticaneue.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Thin\";src:url(../assets/fonts/helveticaneuethin-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuethin-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Medium\";src:url(../assets/fonts/helveticaneuemedium-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuemedium-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;font-feature-settings:normal;font-variant:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:400;line-height:1;text-transform:none;font-display:swap}.icon-right:before{content:\"\\e902\"}.icon-materials:before{content:\"\\e900\"}.icon-natural-lighting:before{content:\"\\e90a\"}.icon-rainwater:before{content:\"\\e901\"}.icon-roofing:before{content:\"\\e90b\"}.icon-flashing{position:relative;display:inline-block;height:32px;text-align:center;width:32px}.icon-flashing:before,.mainnav-link-level-2.show .navTagChild .icon-flashing:before{content:url(../assets/images/icon-flashing-white.svg);height:20px;width:20px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);line-height:15px}li.megamenuSubChild:hover .icon-flashing:before{content:url(../assets/images/icon-flashing-black.svg)}.icon-structural:before{content:\"\\e90c\"}.icon-accessories-old .path1:before{content:\"\\e903\"}.icon-accessories-old .path2:before{margin-left:-1em;content:\"\\e904\"}.icon-accessories-old .path3:before{margin-left:-1em;content:\"\\e905\"}.icon-cladding-old .path1:before{content:\"\\e90d\"}.icon-cladding-old .path2:before{margin-left:-1em;content:\"\\e90e\"}.icon-close:before{content:\"\\e90f\"}.icon-message:before{content:\"\\e910\"}.icon-search .path1:before{content:\"\\e906\"}.icon-search .path2:before{content:\"\\e907\"}.icon-search .path3:before{margin-left:-1.0156em;content:\"\\e908\"}.icon-summary:before{content:\"\\e911\"}.icon-branch:before{content:\"\\e912\"}.icon-delivery:before{content:\"\\e913\"}.icon-downloads:before{content:\"\\e909\"}.icon-drawings:before{content:\"\\e914\"}.icon-full:before{content:\"\\e915\"}.icon-manual:before{content:\"\\e916\"}.icon-payment:before{content:\"\\e917\"}.icon-empty .path1:before{content:\"\\e918\"}.icon-empty .path2:before{margin-left:-1em;content:\"\\e919\"}.icon-empty .path3:before{margin-left:-1em;content:\"\\e91a\"}.icon-product-overview:before{content:\"\\e91b\"}.icon-arrows:before{content:\"\\e91c\"}.icon-selected:before{content:\"\\e91d\"}.icon-accessories:before{content:\"\\e91b\"}.icon-cladding:before{content:\"\\e91e\"}.icon-Triangle:before{content:\"\\e91f\"}.icon-home:before{content:\"\\e920\"}.icon-faq:before{content:\"\\e921\"}.icon-temperature:before{content:\"\\e922\"}body header{font-family:\"Arial Regular\",sans-serif}header{background-color:#1d1d1b;position:sticky;top:0;background-size:100% 25%!important;background-repeat:no-repeat;z-index:10}header .header{max-width:100%;padding:0}header cx-banner cx-media img{margin-top:.7rem;margin-bottom:0}header label{display:inline-flex}header .SiteLinks{height:52px;display:flex;align-items:center;justify-content:space-between;padding-top:5px;padding-bottom:5px}header .SiteLinks cx-paragraph p{color:#fff;font-size:var(--fontsize16);line-height:var(--fontsize16);margin-bottom:0}header .SiteLinks cx-paragraph{font-size:var(--fontsize16)}header .SiteLinks app-account-dropdown,header .SiteLinks app-find-store{width:calc(25% - 25px);max-width:328px;margin-right:25px}header .SiteLinks app-contact-us{width:calc(20% - 25px);max-width:100px;margin-left:auto}header .SiteLinks app-custom-mini-cart{width:10%}header .SiteLinks .preferenceLink{margin-left:auto}header .SiteLinks .preferenceLink cx-generic-link{margin:0}header .SiteLinks .preferenceLink cx-generic-link cx-media img{height:22px;margin:0}header .SiteLogo .storeLogo{position:absolute;z-index:99;left:40px;bottom:10px}header .SiteLogo .homeLogo{max-width:28px;height:28px;position:absolute;z-index:99;bottom:47px}header .NavigationBar{flex:70%;background-color:#b61828;min-height:40px;display:flex;align-items:center;position:relative}header .logoutMenu{margin-top:0!important}header .logoutMenu li{cursor:pointer;background-color:#4c4c4c;color:#fff}header .logoutMenu li:hover{text-decoration:underline;background-color:#4c4c4c}header .MarketingContext{width:100%;margin:auto}.customer-service-icon{cursor:pointer}.helpSupport{width:20rem;border:0;margin-top:.5rem!important;transform:translate(-42%,36px)!important;padding:1rem 1rem 0;background-color:#393939;color:#fff;top:0}.helpSupport .arrow-up{position:absolute;top:-8px;right:44%;width:0;height:0;border-left:15px solid rgba(0,0,0,0);border-right:15px solid rgba(0,0,0,0);border-bottom:15px solid #393939}.helpSupport .contact-us-info .heading{font-family:\"Arial Bold\",sans-serif}.helpSupport .contact-us-info .detail{font-size:var(--fontsize14);line-height:2rem}.helpSupport .contact-us-info .detail .service-icon{height:20px;width:20px;margin-right:10px}.helpSupport .contact-us-info .contactLink a{font-size:var(--fontsize14);text-decoration:underline;text-transform:uppercase}.helpSupport .contact-us-info a{color:#fff;text-decoration:none}.helpSupport .contact-us-info a:hover{text-decoration:underline}.pageTitle{font-family:\"Helvetica Neue Regular\",sans-serif;font-size:var(--fontsize54)}#visualization-container{text-align:center;margin:0 auto}#cds-viewer-container-3d{width:320px;height:200px}#cds-viewer-container-2d{width:320px;height:200px}[aria-label=Close]{cursor:pointer}cx-media.is-missing{background:url(./assets/images/search-noimage.svg);background-size:cover;background-position:center;background-repeat:no-repeat}cx-global-message{position:fixed;top:9rem;width:100%;z-index:13}@media screen and (max-width: 991px){cx-global-message{top:3.75rem}cx-storefront header{background-color:#b61828}cx-storefront header cx-banner cx-media img{margin:auto}cx-storefront header .SiteLogo{width:100%;max-width:211px;margin:auto;padding-left:30px;box-sizing:border-box}cx-storefront header .SiteLogo .storeLogo{position:unset}cx-storefront header .SearchBox{margin:14px 0 10px;width:30px}cx-storefront header .SiteLinks{background-color:transparent;width:110px;margin:auto 25px auto 0}cx-storefront header .SiteLinks app-account-dropdown,cx-storefront header .SiteLinks app-find-store,cx-storefront header .SiteLinks app-contact-us,cx-storefront header .SiteLinks cx-paragraph,cx-storefront header .SiteLinks .preferenceLink{display:none}cx-storefront header .SiteLinks app-custom-mini-cart,cx-storefront header .SiteLinks app-custom-user-account{width:35px}cx-storefront header.is-expanded{overflow-y:auto;position:fixed;bottom:0;top:0;width:calc(100% - 99px)}cx-storefront header.is-expanded .header{background-color:#b61828;margin-left:0}cx-storefront header.is-expanded .PreHeader{position:absolute;right:15px;top:15px}cx-storefront header.is-expanded .SearchBox{display:none}cx-storefront header.is-expanded .SiteLogo{position:absolute;top:25px;z-index:9}cx-storefront header.is-expanded .SiteLinks{background-color:#1d1d1b;width:100%;margin:15px auto 15px 0;height:unset;padding:15px;max-width:100%;position:relative;z-index:9;top:60px}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-account-dropdown{width:100%;max-width:100%}cx-storefront header.is-expanded .SiteLinks app-find-store{width:50%;max-width:328px;min-width:328px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-right:15px;margin-left:auto;width:115px;max-width:unset}cx-storefront header.is-expanded .navigation{position:relative;top:45px}cx-storefront header.is-expanded:before{background-color:#0000004d;right:0;content:\"\";position:fixed;z-index:2;top:0;bottom:0;height:100vh;width:99px}cx-storefront header.is-expanded:after{background-color:transparent}}@media screen and (max-width: 576px){cx-storefront header .SiteLogo{max-width:80px}cx-storefront header .SiteLogo .storeLogo{display:none}cx-storefront header .searchBox{height:45px}cx-storefront header.is-expanded{width:100%}cx-storefront header.is-expanded .header,cx-storefront header.is-expanded .navigation{width:100%}cx-storefront header.is-expanded .SiteLogo{max-width:211px!important}cx-storefront header.is-expanded .SiteLogo .storeLogo{display:block}cx-storefront header.is-expanded .SiteLinks{max-width:100%;width:100%}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-find-store{width:100%;max-width:100%;margin-bottom:10px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-left:0}cx-storefront header.is-expanded .SiteLinks cx-paragraph{margin-left:auto}cx-storefront header.is-expanded:before{display:none}.pageTitle{font-size:28px}}.list-head{background-color:#646363;padding:8px;color:#fff;font-family:\"Arial Bold\",sans-serif;margin:0}.selected_color_section{display:flex}.align-center{align-items:center}.item-space{padding:20px 10px;color:#161616;background-color:#fff;border-bottom:1px solid #E0E0E0}.item-space.item-space-last{margin-bottom:13rem}.item-space .product_name{font-size:15px;font-family:\"Arial Bold\",sans-serif}.item-space .totalQty{padding-left:36px}.item-space .totalQty .qty_input{width:50px}.item-space .sku{color:#6f6f6f;font-size:14px;font-family:\"Arial Bold\",sans-serif}.item-space .refernce-input{border:1px solid #C6C6C6;padding:0 8px;height:40px;top:8px;position:relative}.item-space .selected_color{width:20px;height:20px;border:1px solid #C6C6C6}.item-space .img-align{padding:0 12px;cursor:pointer;position:relative;left:30px}.item-space .flashingProductColor{cursor:auto!important}.item-space .flashingProductColor span{border-bottom:none!important}.item-space .color_link{color:#b61828;margin:0 8px;cursor:pointer}.item-space .color_link .dropdown-icon{padding-left:3px}.item-space .color_link .color_part{position:relative;top:-4px}.item-space .color_link:hover{text-decoration:none}.item-space .color_link span{border-bottom:2px dashed #B61828}.item-space .color_link .flashingProductBorder{border:none}.item-space .fas fa-chevron-down dropdown-icon{border:none}.item-space .see_more{text-decoration:underline}.item-space .custom-padding{padding:4px 8px}.product-img{border:1px solid #E0E0E0;padding:5px;width:70px;height:62px;top:12px;position:relative;text-align:center}.product-img .pdf-icon{max-width:43px;max-height:43px}.more-content{display:flex;border:1px solid #548AF7;padding:8px;background-color:#edf5ff}.more-content img{position:relative;top:-12px}.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}.colours_container{width:320px;height:auto;position:absolute;z-index:10}.cart-details-table th{font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif}.see-more-link{z-index:2;position:relative;top:10px;cursor:pointer;text-decoration:underline}.see-more-link:hover{color:#d51317}.see-more-link.block{display:inline-block;margin-bottom:15px;padding-bottom:15px}.quantity-form-details{margin-top:-40px;z-index:0}#imageModal.show{display:flex!important;vertical-align:middle!important;align-items:center!important}#imageModal.show .modal-header{justify-content:right;border:none}#imageModal.show .modal-body{text-align:center;vertical-align:middle;margin:0 auto}#imageModal.show .modal-body img{max-width:100%;max-height:80vh}::ng-deep .toast{top:20%;left:50%;position:fixed;min-width:500px;max-width:500px;transform:translate(-50%);z-index:9999;background-color:#1d1d1b}::ng-deep .toast .toast-body{color:#fff}::ng-deep .toast .toast-body img{margin-right:10px}::ng-deep .toast .toast-body .toast-close{top:50%;right:5%;position:absolute;transform:translate(-50%,-50%);cursor:pointer}::ng-deep .toast .toast-header{background-color:#1d1d1b;color:#fff;padding:15px;border-radius:0}::ng-deep .toast .toast-header .close{color:#fff;opacity:1;text-shadow:none}::ng-deep .flashing-expand{cursor:pointer}::ng-deep .flashing-expand:after{background:url(../../../../../assets/images/expand-icon.svg) no-repeat center;z-index:2;width:24px;content:\"\";height:24px;position:absolute;top:0;right:0}::ng-deep .flashing-expand img{max-height:55px;max-width:60px;background:#ffffff}::ng-deep .flashing-expand.flashing-open:after{background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22%3E%0D %3Cg id%3D%22Group_14477%22 data-name%3D%22Group 14477%22 transform%3D%22translate(-5533.5 11452.992)%22%3E%0D %3Cg id%3D%22Group_14476%22 data-name%3D%22Group 14476%22%3E%0D %3Cg id%3D%22Group_14475%22 data-name%3D%22Group 14475%22 transform%3D%22translate(5164.5 -12321.992)%22%3E%0D %3Crect id%3D%22Rectangle_1116%22 data-name%3D%22Rectangle 1116%22 width%3D%2224%22 height%3D%2224%22 transform%3D%22translate(369 869)%22 fill%3D%22%23fff%22%2F%3E%0D %3C%2Fg%3E%0D %3Cpath id%3D%22Path_11366%22 data-name%3D%22Path 11366%22 d%3D%22M142.587%2C65.954v4.569a1.963%2C1.963%2C0%2C0%2C1-1.839%2C2.068H127.833a1.965%2C1.965%2C0%2C0%2C1-1.839-2.068V58.066A1.963%2C1.963%2C0%2C0%2C1%2C127.833%2C56h4.8a.83.83%2C0%2C1%2C1%2C0%2C1.659h-4.505a.516.516%2C0%2C0%2C0-.472.553V70.378a.521.521%2C0%2C0%2C0%2C.472.553h12.33a.516.516%2C0%2C0%2C0%2C.472-.553V65.954a.83.83%2C0%2C1%2C1%2C1.659%2C0Z%22 transform%3D%22translate(5411.209 -11505.287)%22 fill-rule%3D%22evenodd%22%2F%3E%0D %3C%2Fg%3E%0D %3Cpath id%3D%22Path_11367%22 data-name%3D%22Path 11367%22 d%3D%22M26.413%2C4.5H21.5a.607.607%2C0%2C0%2C0-.608.608v.009a.607.607%2C0%2C0%2C0%2C.608.608h3.4l-5.091%2C5.126a.608.608%2C0%2C0%2C0%2C.858.862l5.126-5.1v3.4a.607.607%2C0%2C0%2C0%2C.608.608h.009a.607.607%2C0%2C0%2C0%2C.608-.608V5.108A.607.607%2C0%2C0%2C0%2C26.413%2C4.5Z%22 transform%3D%22translate(5526.775 -11453.789)%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center}.flashing-block{background-color:#e8e8e8;padding:12px;border-bottom:1px solid #C6C6C6}.flashing-block .flash-title{font-size:var(--fontsize16);font-family:\"Arial Bold\",sans-serif}.flashing-block .skuId{color:#707070;font-size:var(--fontsize14);font-family:\"Arial Bold\",sans-serif}.flashing-block .gst-text{display:block;font-size:var(--fontsize16);font-family:\"Arial Regular\",sans-serif}\n"], components: [{ type: i6.MediaComponent, selector: "cx-media", inputs: ["container", "format", "alt", "role", "loading"], outputs: ["loaded"] }, { type: i7.CustomProductQuantityFormComponent, selector: "app-custom-product-quantity-form", inputs: ["hasBundle", "productCode", "productDetails", "unitType", "accessoriesPrice", "selectedColour", "cuttingValidation", "finishedAvailableColours", "isFinishedProduct", "isFlashingProduct", "listView"], outputs: ["updateCartEntires", "addMoreClicked"] }, { type: i8.NgbToast, selector: "ngb-toast", inputs: ["delay", "autohide", "animation", "header"], outputs: ["shown", "hidden"], exportAs: ["ngbToast"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], pipes: { "async": i9.AsyncPipe, "split": i10.SplitPipe } });
412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCartListComponent, decorators: [{
413
+ type: Component,
414
+ args: [{
415
+ selector: "app-custom-cart-list",
416
+ templateUrl: "./custom-cart-list.component.html",
417
+ styleUrls: ["./custom-cart-list.component.scss"],
418
+ }]
419
+ }], ctorParameters: function () { return [{ type: i1.CartService }, { type: i2.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i3.ActiveCartService }, { type: i3.CmsService }, { type: i4.SavedCartDetailsService }, { type: i5.ActivatedRoute }]; }, propDecorators: { cartDetails: [{
420
+ type: Input
421
+ }], isCardData: [{
422
+ type: Input
423
+ }], updateCartEntry: [{
424
+ type: Output
425
+ }], additionalPara: [{
426
+ type: Input
427
+ }], closeInviteModal: [{
428
+ type: ViewChild,
429
+ args: ["closeInviteModal"]
430
+ }] } });
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNhcnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWlsZGluZ3Byb2R1Y3RfbGlicmFyeS9zcmMvbGliL3NoYXJlZC9jdXN0b20tY2FydC1kZXRhaWwvY3VzdG9tLWNhcnQtbGlzdC9jdXN0b20tY2FydC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1aWxkaW5ncHJvZHVjdF9saWJyYXJ5L3NyYy9saWIvc2hhcmVkL2N1c3RvbS1jYXJ0LWRldGFpbC9jdXN0b20tY2FydC1saXN0L2N1c3RvbS1jYXJ0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBQTBCLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBVS9DLE1BQU0sT0FBTyx1QkFBdUI7SUE0QmxDLFlBQ1UsV0FBd0IsRUFDeEIsV0FBd0IsRUFDeEIsR0FBc0IsRUFDdEIsaUJBQW9DLEVBQ3BDLFVBQXNCLEVBQ3RCLGdCQUF5QyxFQUN6QyxLQUFxQjtRQU5yQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxVQUFLLEdBQUws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QUUsS0FBSyxDQUFDLENBQUE7aUJBQ3BEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLElBQUksQ0FBRSxLQUFLLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFDLFdBQWdCOztRQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLDBDQUFFLElBQUksQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDM0QsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQzs7cUhBdGJVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLDRWQzFCcEMsODl3QkE4bkJBOzRGRHBtQmEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUNqRDt3UkFFVSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRSxjQUFjO3NCQUF0QixLQUFLO2dCQUN5QixnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBY3RpdmVDYXJ0U2VydmljZSwgQ21zU2VydmljZSB9IGZyb20gXCJAc3BhcnRhY3VzL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5pbXBvcnQgeyBDYXJ0Rm9ybSB9IGZyb20gXCIuLi8uLi9DdXN0b21Qcm9kdWN0XCI7XHJcblxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU2F2ZWRDYXJ0RGV0YWlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY3VzdG9tLXNhdmVkLWNhcnQvY3VzdG9tLXNhdmVkLWNhcnQtZGV0YWlscy9zYXZlZC1jYXJ0LWRldGFpbHMuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLWN1c3RvbS1jYXJ0LWxpc3RcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2N1c3RvbS1jYXJ0LWxpc3QuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vY3VzdG9tLWNhcnQtbGlzdC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbUNhcnRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGNhcnREZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgaXNDYXJkRGF0YTogYW55O1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVDYXJ0RW50cnkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBASW5wdXQoKSBhZGRpdGlvbmFsUGFyYTogYW55O1xyXG4gIEBWaWV3Q2hpbGQoXCJjbG9zZUludml0ZU1vZGFsXCIpIGNsb3NlSW52aXRlTW9kYWw6IGFueTtcclxuICBhZGRpdGluYWxzZWxlY3RlZENvbG91cjogYW55ID0gW107XHJcbiAgbW9kYWxTZWxlY3RlZENvbG91cjogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRDb2xvdXI6IGFueTtcclxuICBjYXJ0SWQ6IGFueTtcclxuICBzaG93RGV0YWlsczogYW55ID0gW107XHJcbiAgc2hvd1dhaXRDdXJzb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBlcnJvck1lc3NhZ2UgPSBcIlNvbWUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyBkYXRhXCI7XHJcbiAgc2VsZWN0ZWRJbmRleDogYW55O1xyXG4gIGRlZmF1bHRDb25maWdJbmZvOiBhbnkgPSB7XHJcbiAgICBjb25maWd1cmF0b3JUeXBlOiBcIlRFWFRGSUVMRFwiLFxyXG4gICAgY29uZmlndXJhdGlvbkxhYmVsOiBcIkNPTE9SXCIsXHJcbiAgICBjb25maWd1cmF0aW9uVmFsdWU6IFwiXCIsXHJcbiAgfTtcclxuICBpc01vZGFsU2VsZWN0ZWRDb2xvcjogYW55ID0gW107XHJcbiAgcHJvZHVjdEZvcm06IGFueSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGFkZFRvQ2FydEVycm9yOiBhbnkgPSBudWxsO1xyXG4gIGltYWdlTW9kYWxTcmM6IGFueTtcclxuICBzaG93VG9hc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYXJ0UGFnZURhdGE6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNhdmVDYXJkT3JkZXJJZDogYW55O1xyXG4gIGVudjogYW55ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZW52Jyk7XHJcbiAgZW52aXJvbm1lbnQgOiBhbnkgPSBKU09OLnBhcnNlKHRoaXMuZW52KTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGFjdGl2ZUNhcnRTZXJ2aWNlOiBBY3RpdmVDYXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgY21zU2VydmljZTogQ21zU2VydmljZSxcclxuICAgIHByaXZhdGUgc2F2ZWRDYXJ0U2VydmljZTogU2F2ZWRDYXJ0RGV0YWlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2FydE9iajogYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzcGFydGFjdXPimr9kaW1vbmQtc3Bh4pq/Y2FydFwiKTtcclxuICAgIHRoaXMuY2FydElkID0gSlNPTi5wYXJzZShjYXJ0T2JqKT8uYWN0aXZlO1xyXG4gICAgdGhpcy5zYXZlQ2FyZE9yZGVySWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1tcInNhdmVkQ2FydElkXCJdO1xyXG4gICAgdGhpcy5wcm9kdWN0Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBjYXJ0OiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlRGVmYXVsdENhcnREZXRhaWxzKCk7XHJcbiAgICB0aGlzLmNhcnRTZXJ2aWNlLmV4cGFuZEFsbC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FydERldGFpbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxzW2ldID0gZGF0YTtcclxuICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldLmlzRXhwYW5kID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jbXNTZXJ2aWNlLmdldEN1cnJlbnRQYWdlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhLnRlbXBsYXRlID09IFwiU2F2ZWRDYXJ0RGV0YWlsc1BhZ2VUZW1wbGF0ZVwiKSB7XHJcbiAgICAgICAgdGhpcy5jYXJ0UGFnZURhdGEgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNhcnRQYWdlRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhcnRGb3JtKCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9kdWN0Rm9ybS5nZXQoXCJjYXJ0XCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGhhc0NhcnREZXRhaWxzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FydEZvcm0gJiYgT2JqZWN0LmtleXModGhpcy5jYXJ0Rm9ybSk/Lmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEZWZhdWx0Q2FydERldGFpbHMoKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FydERldGFpbHM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuY2FydEZvcm0/LnB1c2godGhpcy5mb3JtQnVpbGRlci5ncm91cChuZXcgQ2FydEZvcm0oKSkpO1xyXG4gICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpXVxyXG4gICAgICAgIC5nZXQoXCJqb2JSZWZlcmVuY2VcIilcclxuICAgICAgICA/LnNldFZhbHVlKHRoaXMuY2FydERldGFpbHNbaV0/LmpvYlJlZmVyZW5jZSk7XHJcbiAgICAgIGNvbnN0IHF0eSA9IHRoaXMuY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZpbmlzaGVkUHJvZHVjdFxyXG4gICAgICAgID8gcGFyc2VJbnQodGhpcy5jYXJ0RGV0YWlsc1tpXT8ucXVhbnRpdHkpXHJcbiAgICAgICAgOiB0aGlzLmNhcnREZXRhaWxzW2ldPy5xdWFudGl0eURvdWJsZTtcclxuICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaV0uZ2V0KFwicHJvZFF0eVwiKT8uc2V0VmFsdWUocXR5KTtcclxuICAgICAgdGhpcy5pc01vZGFsU2VsZWN0ZWRDb2xvci5wdXNoKGZhbHNlKTtcclxuICAgICAgdGhpcy5zaG93RGV0YWlscy5wdXNoKGZhbHNlKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvcyAmJlxyXG4gICAgICAgIHRoaXMuY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvcz8ubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiB0aGlzLmNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3MpIHtcclxuICAgICAgICAgIGlmIChjb25maWc/LmNvbmZpZ3VyYXRpb25MYWJlbCA9PSBcIkNPTE9SXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnSW5mby5jb25maWd1cmF0aW9uVmFsdWUgPVxyXG4gICAgICAgICAgICAgIGNvbmZpZz8uY29uZmlndXJhdGlvblZhbHVlPy5zcGxpdChcInxcIilbMF0gfHwgXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5jYXJ0RGV0YWlsc1tpXT8uY29uZmlnVmFsdWVzICYmXHJcbiAgICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldPy5jb25maWdWYWx1ZXM/Lmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2ldW1wiY29uZmlnVmFsdWVzXCJdID0gdGhpcy5kZWZhdWx0Q29uZmlnSW5mbztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCFjaGFuZ2VzPy5jYXJ0RGV0YWlscz8uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy51cGRhdGVEZWZhdWx0Q2FydERldGFpbHMoKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0hpZGUoaW5kOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2hvd0RldGFpbHNbaW5kXSA9ICF0aGlzLnNob3dEZXRhaWxzW2luZF07XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvdXJEZXRhaWxzKGNvbmZpZ0luZm86IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBsZXQgbmFtZTogYW55O1xyXG4gICAgbGV0IGJhY2tncm91bmQ6IGFueTtcclxuICAgIGlmIChjb25maWdJbmZvICYmIGNvbmZpZ0luZm8/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgY29sb3VyID0gY29uZmlnSW5mbz8uZmlsdGVyKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBjb2w/LmNvbmZpZ3VyYXRpb25MYWJlbD8udG9Mb3dlckNhc2UoKSA9PSBcImNvbG9yXCJcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChjb2xvdXIgJiYgY29sb3VyPy5sZW5ndGgpIHtcclxuICAgICAgICBuYW1lID0gY29sb3VyWzBdPy5jb25maWd1cmF0aW9uVmFsdWU/LnNwbGl0KCd8JylbMV07XHJcbiAgICAgICAgYmFja2dyb3VuZCA9IGNvbG91clswXT8uY29uZmlndXJhdGlvblZhbHVlPy5zcGxpdCgnfCcpWzJdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHR5cGUgPT0gXCJiYWNrZ3JvdW5kXCIpID8gYmFja2dyb3VuZCA6IG5hbWU7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvdXJzKGNhcnREZXRhaWxzOiBhbnksIGluZGV4OiBudW1iZXIsIGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkQ29sb3VyID1cclxuICAgIC8vICAgY2FydERldGFpbHM/LmNvbmZpZ3VyYXRpb25JbmZvc1swXT8uY29uZmlndXJhdGlvblZhbHVlLnNwbGl0KCd8JylbMl07XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jYXJ0RGV0YWlscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaSAhPSBpbmRleCkge1xyXG4gICAgICAgIHRoaXMuY2FydERldGFpbHNbaV0uaXNFeHBhbmQgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNhcnREZXRhaWxzW2luZGV4XS5pc0V4cGFuZCA9ICF0aGlzLmNhcnREZXRhaWxzW2luZGV4XS5pc0V4cGFuZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRDb2xvdXJDb2RlKGNvZGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNhcnREZXRhaWxzW3RoaXMuc2VsZWN0ZWRJbmRleF0gJiZcclxuICAgICAgdGhpcy5jYXJ0RGV0YWlsc1t0aGlzLnNlbGVjdGVkSW5kZXhdPy5jb25maWdWYWx1ZXNcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNhcnREZXRhaWxzW3RoaXMuc2VsZWN0ZWRJbmRleF0uY29uZmlnVmFsdWVzLmNvbmZpZ3VyYXRpb25WYWx1ZSA9XHJcbiAgICAgICAgY29kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vZGFsU2VsZWN0ZWRDb2xvcihldmVudDogYW55LCBjb2xvdXI6IGFueSwgaW5kOiBudW1iZXIsIHNrdUNvZGU/OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAodGhpcy5jYXJ0RGV0YWlsc1tpbmRdPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3QgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5tb2RhbFNlbGVjdGVkQ29sb3VyW2luZF0gPSBjb2xvdXI7XHJcbiAgICAgIHRoaXMuaXNNb2RhbFNlbGVjdGVkQ29sb3JbaW5kXSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGFsU2VsZWN0ZWRDb2xvdXJbaW5kXSA9IGNvbG91cjtcclxuICAgICAgdGhpcy5pc01vZGFsU2VsZWN0ZWRDb2xvcltpbmRdID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRDb2xvdXJDb2RlKGNvbG91cj8uY29kZSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVByb2R1Y3RDb2xvcih0aGlzLmNhcnREZXRhaWxzW2luZF0sIGNvbG91ciwgaW5kLCBza3VDb2RlKTtcclxuICB9XHJcblxyXG4gIGFkZHRpb25hbE1vZGFsU2VsZWN0ZWRDb2xvcihldmVudDogYW55LCBjb2xvdXI6IGFueSwgaW5kOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAodGhpcy5jYXJ0RGV0YWlsc1tpbmRdPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3QgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hZGRpdGluYWxzZWxlY3RlZENvbG91cltpbmRdID0gY29sb3VyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRpdGluYWxzZWxlY3RlZENvbG91cltpbmRdID0gY29sb3VyO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZENvbG91ckNvZGUoY29sb3VyPy5jb2RlKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByb2NlZWRXaXRoU3VibWl0KGNvbG9yOiBhbnksIGluZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmlzTW9kYWxTZWxlY3RlZENvbG9yW2luZF0gPSB0cnVlO1xyXG4gICAgdGhpcy5tb2RhbFNlbGVjdGVkQ29sb3VyW2luZF0gPSBjb2xvcjtcclxuICAgIHRoaXMuY2xvc2VJbnZpdGVNb2RhbC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICB0aGlzLmdldENvbG91cnMoY29sb3IsIGluZCwgZXZlbnQpO1xyXG4gICAgdGhpcy51cGRhdGVQcm9kdWN0Q29sb3IodGhpcy5jYXJ0RGV0YWlsc1tpbmRdLCBjb2xvciwgaW5kKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuYWRkaXRpbmFsc2VsZWN0ZWRDb2xvdXIgPSBbXTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUVudHJ5KGVudE51bWJlcjogYW55KSB7XHJcbiAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5jYXJ0UGFnZURhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRFbnRyeSh0aGlzLmNhcnRJZCwgZW50TnVtYmVyKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDYXJ0RW50cnkuZW1pdCgpO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVDYXJ0U2VydmljZS5yZWxvYWRBY3RpdmVDYXJ0KCk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCA0MDAwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmNhcnREZXRhaWxzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlZENhcnRTZXJ2aWNlXHJcbiAgICAgICAgICAuZGVsZXRlU2F2ZENhcnQodGhpcy5zYXZlQ2FyZE9yZGVySWQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93VG9hc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwibXktYWNjb3VudC9zYXZlZC1jYXJ0c1wiO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNob3dUb2FzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCA0MDAwKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2F2ZWRDYXJ0U2VydmljZVxyXG4gICAgICAgIC5kZWxldGVTYXZlQ2FydEVudHJ5KHRoaXMuc2F2ZUNhcmRPcmRlcklkLCBlbnROdW1iZXIpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydEVudHJ5LmVtaXQoKTtcclxuICAgICAgICAgICAgICB0aGlzLnNob3dUb2FzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCA0MDAwKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW9sYWRDYXJ0RW50aXJlcyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNhcnRFbnRyeS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiBhbnkgdmFsdWUgaXMgZW1wdHkgb3IgdW5kZWZpbmVkXHJcbiAgaXNOdWxsT3JFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gXCJcIjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVByb2R1Y3RDb2xvcihjYXJ0OiBhbnksIGNvbG9yOiBhbnksIGluZGV4OiBhbnksIHNrdUNvZGU/OiBhbnkpOiB2b2lkIHtcclxuICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IG9iaiA9IFtdO1xyXG4gICAgb2JqLnB1c2goe1xyXG4gICAgICBjb25maWd1cmF0b3JUeXBlOiBcIlRFWFRGSUVMRFwiLFxyXG4gICAgICBjb25maWd1cmF0aW9uTGFiZWw6IFwiQ09MT1JcIixcclxuICAgICAgY29uZmlndXJhdGlvblZhbHVlOiBjb2xvcj8uY29kZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlQ2FydERldGFpbHMoY2FydCwgaW5kZXgsIG9iaiwgc2t1Q29kZSk7XHJcbiAgfVxyXG5cclxuICAvLyBVcGRhdGUgQ2FydCBEZXRhaWxzIGlmIFF1YW50aXR5IENoYW5nZWQgZm9yIEFjY2Vzc29yaWVzIG9ubHlcclxuICB1cGRhdGVDYXJ0RGV0YWlscyhjYXJ0OiBhbnksIGluZGV4OiBhbnksIGNvbG9yPzogYW55LCBza3VDb2RlPzogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgcGF5TG9hZDogYW55ID0ge307XHJcbiAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBlbnRyeU51bWJlciA9IGNhcnQ/LnByb2R1Y3Q/LmVudHJ5TnVtYmVyIHx8IGNhcnQ/LmVudHJ5TnVtYmVyO1xyXG4gICAgaWYgKGNvbG9yKSB7XHJcbiAgICAgIHBheUxvYWQgPSB7XHJcbiAgICAgICAgcXVhbnRpdHk6IHBhcnNlSW50KFxyXG4gICAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kUXR5XCIpPy52YWx1ZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgcHJvZHVjdDoge1xyXG4gICAgICAgICAgY29kZTogc2t1Q29kZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29uZmlndXJhdGlvbkluZm9zOiBjb2xvcixcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSBpZiAoY2FydD8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0KSB7XHJcbiAgICAgIHBheUxvYWQgPSB7XHJcbiAgICAgICAgcXVhbnRpdHk6IHBhcnNlSW50KFxyXG4gICAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kUXR5XCIpPy52YWx1ZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgam9iUmVmZXJlbmNlOlxyXG4gICAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJqb2JSZWZlcmVuY2VcIik/LnZhbHVlLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGF5TG9hZCA9IHtcclxuICAgICAgICBxdWFudGl0eTogMSxcclxuICAgICAgICBwcm9kdWN0OiB7XHJcbiAgICAgICAgICBjb2RlOiBjYXJ0Py5wcm9kdWN0Py5jb2RlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgam9iUmVmZXJlbmNlOlxyXG4gICAgICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJqb2JSZWZlcmVuY2VcIik/LnZhbHVlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYXJ0U2VydmljZVxyXG4gICAgICAudXBkYXRlQ2FydEVudHJ5KHRoaXMuY2FydElkLCBlbnRyeU51bWJlciwgcGF5TG9hZClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5zdGF0dXNDb2RlPy50b0xvd2VyQ2FzZSgpID09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FydFNlcnZpY2UucmVsb2FkQWN0aXZlQ2FydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRFbnRyeS5lbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VG9hc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNob3dUb2FzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCA0MDAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVG9DYXJ0RXJyb3IgPVxyXG4gICAgICAgICAgICAgIHJlc3BvbnNlPy5lcnJvcnNbMF0/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICByZXNwb25zZT8uZXJyb3JzWzBdPy5lcnJvck1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFkZFRvQ2FydEVycm9yID1cclxuICAgICAgICAgICAgZXJyb3I/LmVycm9yPy5lcnJvcnNbMF0/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgZXJyb3I/LmVycm9yPy5lcnJvcnNbMF0/LmVycm9yTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IFByb2R1Y3QgUXVhbnRpdHkgRXJyb3JzXHJcbiAgcHJvZFF0eUVycm9ycyhpbmRleDogYW55KTogYW55IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcInByb2RRdHlcIik/LmVycm9ycyB8fFxyXG4gICAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFF0eVwiKT8uaW52YWxpZCkgJiZcclxuICAgICAgKHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwicHJvZFF0eVwiKT8uZGlydHkgfHxcclxuICAgICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcInByb2RRdHlcIik/LnRvdWNoZWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IEpvYiBSZWZlcmVuY2UgRXJyb3JzXHJcbiAgam9iUmVmZXJlbmNlRXJyb3JzKGluZGV4OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwiam9iUmVmZXJlbmNlXCIpPy5lcnJvcnMgfHxcclxuICAgICAgICB0aGlzLmNhcnRGb3JtPy5jb250cm9sc1tpbmRleF0/LmdldChcImpvYlJlZmVyZW5jZVwiKT8uaW52YWxpZCkgJiZcclxuICAgICAgKHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwiam9iUmVmZXJlbmNlXCIpPy5kaXJ0eSB8fFxyXG4gICAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwiam9iUmVmZXJlbmNlXCIpPy50b3VjaGVkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlzIEZvcm0gVmFsaWRcclxuICBpc0Zvcm1WYWxpZChpbmRleDogYW55LCBjYXJ0OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdICYmXHJcbiAgICAgIHRoaXMuY2FydEZvcm0/LmNvbnRyb2xzW2luZGV4XT8uZ2V0KFwiam9iUmVmZXJlbmNlXCIpPy52YWxpZCAmJlxyXG4gICAgICAodGhpcy5jYXJ0Rm9ybT8uY29udHJvbHNbaW5kZXhdPy5nZXQoXCJwcm9kUXR5XCIpPy52YWxpZCB8fFxyXG4gICAgICAgICFjYXJ0Py5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3QpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRlIENhcnQgRGV0YWlscyBvbiBjaGFuZ2Ugb2YgSm9iIFJlZmVyZW5jZSBvciBRdWFudGl0eVxyXG4gIHVwZGF0ZUNhcnQoZXZlbnQ6IGFueSwgY2FydDogYW55LCBpbmRleDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgcXR5ID0gZXZlbnQ/LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xyXG4gICAgaWYgKCF0aGlzLmlzTnVsbE9yRW1wdHkocXR5KSAmJiB0aGlzLmlzRm9ybVZhbGlkKGluZGV4LCBjYXJ0KSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUNhcnREZXRhaWxzKGNhcnQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUpvYlJlZmVyZW5jZShldmVudDogYW55LCBjYXJ0OiBhbnksIGluZGV4OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLnVwZGF0ZUNhcnREZXRhaWxzKGNhcnQsIGluZGV4KTtcclxuICB9XHJcblxyXG4gIC8vIEdldCB0aGUgSW1hZ2UgRGV0YWlscyBiYXNlZCBvbiBQcm9kdWN0c1xyXG4gIGdldEltYWdlRGV0YWlscyhjYXJ0RGV0YWlsczogYW55LCB0aHVtYm5haWw6IGFueSA9IHRydWUpOiBhbnkge1xyXG4gICAgbGV0IGltYWdlVXJsOiBhbnkgPSBjYXJ0RGV0YWlscz8ucHJvZHVjdD8uaW1hZ2VzO1xyXG4gICAgaWYgKHRoaXMuaXNDYXJkRGF0YSkge1xyXG4gICAgICBjb25zdCBjb2xvckNvZGUgPVxyXG4gICAgICAgIGNhcnREZXRhaWxzPy5jb25maWd1cmF0aW9uSW5mb3MgfHwgY2FydERldGFpbHM/LmNvbmZpZ3VyYXRpb25JbmZvc1swXVxyXG4gICAgICAgICAgPyBjYXJ0RGV0YWlscz8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWU/LnNwbGl0KCd8JylbMF1cclxuICAgICAgICAgIDogXCJcIjtcclxuICAgICAgaW1hZ2VVcmwgPSBjYXJ0RGV0YWlscz8ucHJvZHVjdD8uaW1hZ2VzPy5maWx0ZXIoXHJcbiAgICAgICAgKGltZzogYW55KSA9PiAoaW1nPy5mb3JtYXQgPT0gXCJjYXJ0SWNvblwiICYmIGltZz8uY29sb3JDb2RlID09IGNvbG9yQ29kZSkgfHwgKGltZz8uZm9ybWF0ID09IFwiY2FydEljb25cIiAmJiB0aGlzLmlzTnVsbE9yRW1wdHkoY29sb3JDb2RlKSAmJiBjYXJ0RGV0YWlscz8ucHJvZHVjdD8uaW1hZ2VzPy5sZW5ndGggPD0gNClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGltYWdlVXJsID0gY2FydERldGFpbHM/LnByb2R1Y3Q/LmltYWdlcz8uR0FMTEVSWT8uY2FydEljb247XHJcbiAgICB9XHJcbiAgICBsZXQgc3JjVXJsOiBhbnk7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNhcnREZXRhaWxzPy5hdHRhY2htZW50cyAmJlxyXG4gICAgICBjYXJ0RGV0YWlscz8uYXR0YWNobWVudHM/Lmxlbmd0aCAmJlxyXG4gICAgICBjYXJ0RGV0YWlscz8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0XHJcbiAgICApIHtcclxuICAgICAgc3JjVXJsID1cclxuICAgICAgICB0aHVtYm5haWwgJiYgY2FydERldGFpbHM/LmF0dGFjaG1lbnRzPy5sZW5ndGggPiAxXHJcbiAgICAgICAgICA/IGNhcnREZXRhaWxzPy5hdHRhY2htZW50c1sxXT8uZG93bmxvYWRVUkxcclxuICAgICAgICAgIDogY2FydERldGFpbHM/LmF0dGFjaG1lbnRzWzBdPy5kb3dubG9hZFVSTDtcclxuICAgICAgaW1hZ2VVcmwgPSB7XHJcbiAgICAgICAgdXJsOiAoXHJcbiAgICAgICAgICB0aGlzLmVudmlyb25tZW50Lm9jY0Jhc2VVcmwuc2xpY2UoMCwgdGhpcy5lbnZpcm9ubWVudC5vY2NCYXNlVXJsLmxlbmd0aCAtIDEpICtcclxuICAgICAgICAgIHNyY1VybFxyXG4gICAgICAgICk/LnJlcGxhY2UoXCImYXR0YWNobWVudD10cnVlXCIsIFwiXCIpLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGltYWdlVXJsO1xyXG4gIH1cclxuXHJcbiAgdmlld0ltYWdlKGV2ZW50OiBhbnksIGNhcnREZXRhaWxzOiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5pbWFnZU1vZGFsU3JjID0gdGhpcy5nZXRJbWFnZURldGFpbHMoY2FydERldGFpbHMsIGZhbHNlKT8udXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGRmTGluayhjYXJ0RGV0YWlsczogYW55KTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRJbWFnZURldGFpbHMoY2FydERldGFpbHMsIGZhbHNlKT8udXJsO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0IFN1bW1hcnkgSGVhZGluZ1xyXG4gIGdldENsYXNzaWZpY2F0aW9ucyhkYXRhOiBhbnkpOiBhbnkge1xyXG4gICAgbGV0IGZlYXR1cmVBcnJheTogYW55ID0gW107XHJcbiAgICBkYXRhPy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgZWxlbWVudD8uZmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGZlYXR1cmU/LmZlYXR1cmVVbml0KSB7XHJcbiAgICAgICAgICBmZWF0dXJlQXJyYXkucHVzaChmZWF0dXJlPy5mZWF0dXJlVmFsdWVzWzBdPy52YWx1ZSArICcgJyArIGZlYXR1cmU/LmZlYXR1cmVVbml0Py5zeW1ib2wpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZlYXR1cmVBcnJheS5wdXNoKGZlYXR1cmU/LmZlYXR1cmVWYWx1ZXNbMF0/LnZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmZWF0dXJlQXJyYXk/LmpvaW4oIFwiIHwgXCIpXHJcbiAgfVxyXG5cclxuICBoYXNJbWFnZShjYXJ0RGV0YWlsczogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtaW1lVHlwZSA9IGNhcnREZXRhaWxzPy5hdHRhY2htZW50c1swXT8ubWltZTtcclxuICAgIGNvbnN0IG1pbWVBcnJheSA9IFtcImltYWdlL3BuZ1wiLCBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIl07XHJcbiAgICByZXR1cm4gbWltZUFycmF5LmluY2x1ZGVzKG1pbWVUeXBlKTtcclxuICB9XHJcblxyXG4gIGNsb3NlVG9hc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dUb2FzdCA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibG9hZGluZ1wiICpuZ0lmPVwic2hvd1dhaXRDdXJzb3IgfCBhc3luY1wiPkxvYWRpbmcmIzgyMzA7PC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicm93IGxpc3QtaGVhZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtc20tM1wiPklURU08L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTNcIj5KT0IgUkVGRVJFTkNFPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+VE9UQUwgUVRZPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+VU5JVCBQUklDRTwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtc20tMlwiPlRPVEFMIFBSSUNFPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwicHJvZHVjdEZvcm1cIj5cclxuICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJjYXJ0XCIgKm5nSWY9XCJoYXNDYXJ0RGV0YWlscygpXCI+XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgIGxldCBjYXJ0IG9mIGNhcnRGb3JtLmNvbnRyb2xzO1xyXG4gICAgICAgIGxldCBpID0gaW5kZXg7XHJcbiAgICAgICAgbGV0IGxhc3RJbmRleCA9IGxhc3RcclxuICAgICAgXCJcclxuICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIml0ZW0tc3BhY2VcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2l0ZW0tc3BhY2UtbGFzdCc6IGkgPT0gY2FydERldGFpbHMubGVuZ3RoIC0gMSB9XCJcclxuICAgICAgICAqbmdJZj1cIiFpc051bGxPckVtcHR5KGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jb2RlKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWltZ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBub3JtYWxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxhc2hpbmctZXhwYW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0ltYWdlKCRldmVudCwgY2FydERldGFpbHNbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRhcmdldF09XCInI2ltYWdlTW9kYWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc0ltYWdlKGNhcnREZXRhaWxzW2ldKTsgZWxzZSBoYXNQZGZcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGN4LW1lZGlhXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29udGFpbmVyXT1cImdldEltYWdlRGV0YWlscyhjYXJ0RGV0YWlsc1tpXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PVwiY2FydEljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvY3gtbWVkaWE+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNoYXNQZGY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxhc2hpbmctZXhwYW5kIGZsYXNoaW5nLW9wZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZ2V0UGRmTGluayhjYXJ0RGV0YWlsc1tpXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGRmLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL3BkZi1pY29uLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIkNsaWNrIHRvIG9wZW4gUERGXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDbGljayB0byBvcGVuIFBERlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxJbWFnZT5cclxuICAgICAgICAgICAgICAgICAgPGN4LW1lZGlhXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lcl09XCJnZXRJbWFnZURldGFpbHMoY2FydERldGFpbHNbaV0pXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9XCJjYXJ0SWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgID48L2N4LW1lZGlhPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdF9uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJza3VcIj5TS1U6IHt7IGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jb2RlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWZlcm5jZS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImpvYlJlZmVyZW5jZVwiXHJcbiAgICAgICAgICAgICAgKGJsdXIpPVwidXBkYXRlSm9iUmVmZXJlbmNlKCRldmVudCwgY2FydERldGFpbHNbaV0sIGkpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImpvYlJlZmVyZW5jZUVycm9ycyhpKVwiPlxyXG4gICAgICAgICAgICAgIFBsZWFzZSBlbnRlciB2YWxpZCBKb2IgUmVmZXJlbmNlXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgdG90YWxRdHlcIj5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0LmZpbmlzaGVkUHJvZHVjdDtcclxuICAgICAgICAgICAgICAgIGVsc2Ugbm9uQWNjZXNzb3JpZXNcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgY2FydERldGFpbHNbaV0/LnF1YW50aXR5RG91YmxlIH19XHJcbiAgICAgICAgICAgICAge3sgY2FydERldGFpbHNbaV0/LmJhc2VQcmljZT8udW5pdFR5cGUgfX1cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZFF0eVwiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2FydERldGFpbHNbaV0/LnF1YW50aXR5RG91YmxlXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uQWNjZXNzb3JpZXM+XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJxdHlfaW5wdXQgcmVmZXJuY2UtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb2RRdHlcIlxyXG4gICAgICAgICAgICAgICAgICBtaW5sZW5ndGg9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInVwZGF0ZUNhcnQoJGV2ZW50LCBjYXJ0RGV0YWlsc1tpXSwgaSlcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJwcm9kUXR5RXJyb3JzKGkpXCI+XHJcbiAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIHZhbGlkIFF1YW50aXR5XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgdG90YWxRdHlcIj5cclxuICAgICAgICAgICAge3sgY2FydERldGFpbHNbaV0/LmJhc2VQcmljZT8uZm9ybWF0dGVkVmFsdWUgfX0ve3tcclxuICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uYmFzZVByaWNlPy51bml0VHlwZVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgdG90YWxRdHlcIj5cclxuICAgICAgICAgICAge3sgY2FydERldGFpbHNbaV0/LnRvdGFsUHJpY2U/LmZvcm1hdHRlZFZhbHVlIH19XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbWctYWxpZ25cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVFbnRyeShjYXJ0RGV0YWlsc1tpXT8uZW50cnlOdW1iZXIpXCJcclxuICAgICAgICAgICAgICA+PGltZ1xyXG4gICAgICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9pb25pYy10cmFzaC5zdmdcIlxyXG4gICAgICAgICAgICAgICAgYWx0PVwiZGVsZXRlXCJcclxuICAgICAgICAgICAgLz48L3NwYW4+XHJcbiAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICBleGNsIEdTVFxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcGFkZGluZ1wiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtdC0zIG1iLTBcIj5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jbGFzc2lmaWNhdGlvbnMgJiZcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jbGFzc2lmaWNhdGlvbnNbMF0gJiZcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jbGFzc2lmaWNhdGlvbnNbMF0/LmZlYXR1cmVzXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IGdldENsYXNzaWZpY2F0aW9ucyhjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uY2xhc3NpZmljYXRpb25zKSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcGFkZGluZ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3QuZmluaXNoZWRQcm9kdWN0ICYmXHJcbiAgICAgICAgICAgICAgIWlzTW9kYWxTZWxlY3RlZENvbG9yW2ldXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0gJiZcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0ICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdC5icEFkZGl0aW9uYWxBdHRyaWJ1dGUgJiZcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0LmJwQWRkaXRpb25hbEF0dHJpYnV0ZT8uY29sb3VycyAmJlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3QuYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5jb2xvdXJzWzBdXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkX2NvbG9yXCJcclxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxyXG4gICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5jb2xvdXJzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXSAmJlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0LmJwQWRkaXRpb25hbEF0dHJpYnV0ZSAmJlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3QuYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5jb2xvdXJzICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdC5icEFkZGl0aW9uYWxBdHRyaWJ1dGU/LmNvbG91cnNbMF1cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sb3JfbGlua1wiXHJcbiAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10YXJnZXRdPVwiJyNjb2xsYXBzZUNvbG91cnMnICsgaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgZ2V0Q29sb3VycyhjYXJ0LCBpLCAkZXZlbnQpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgIGZsYXNoaW5nUHJvZHVjdEJvcmRlcjpcclxuICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0XHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3JfcGFydFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXSAmJlxyXG4gICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdCAmJlxyXG4gICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdC5icEFkZGl0aW9uYWxBdHRyaWJ1dGUgJiZcclxuICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3QuYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5jb2xvdXJzICYmXHJcbiAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0LmJwQWRkaXRpb25hbEF0dHJpYnV0ZT8uY29sb3Vyc1swXVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5jb2xvdXJzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgPy5uYW1lXHJcbiAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLWRvd24gZHJvcGRvd24taWNvblwiXHJcbiAgICAgICAgICAgICAgPjwvaVxyXG4gICAgICAgICAgICA+PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdCAmJlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvcyAmJlxyXG4gICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvcz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkX2NvbG9yXCJcclxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBnZXRDb2xvdXJEZXRhaWxzKFxyXG4gICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zLFxyXG4gICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCdcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cIm1sLTIgbm9saW5rRm9yZmxhc2hcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgZ2V0Q29sb3VyRGV0YWlscyhjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zLCBcIm5hbWVcIilcclxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAhaXNNb2RhbFNlbGVjdGVkQ29sb3JbaV0gJiZcclxuICAgICAgICAgICAgICAhY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRfY29sb3JcIlxyXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6XHJcbiAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3NbMF0/LmNvbmZpZ3VyYXRpb25WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICB8IHNwbGl0IDogJ3wnIDogMlxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdICYmXHJcbiAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sb3JfbGlua1wiXHJcbiAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10YXJnZXRdPVwiJyNjb2xsYXBzZUNvbG91cnMnICsgaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgZ2V0Q29sb3VycyhjYXJ0LCBpLCAkZXZlbnQpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICBmbGFzaGluZ1Byb2R1Y3RDb2xvcjogY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgZmxhc2hpbmdQcm9kdWN0Qm9yZGVyOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvcl9wYXJ0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldICYmXHJcbiAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5jb25maWd1cmF0aW9uSW5mb3MgJiZcclxuICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXSAmJlxyXG4gICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8uY29uZmlndXJhdGlvbkluZm9zWzBdPy5jb25maWd1cmF0aW9uVmFsdWVcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LmNvbmZpZ3VyYXRpb25JbmZvc1swXT8uY29uZmlndXJhdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfCBzcGxpdCA6IFwifFwiIDogMVxyXG4gICAgICAgICAgICAgICAgfX08L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duIGRyb3Bkb3duLWljb25cIlxyXG4gICAgICAgICAgICAgID48L2lcclxuICAgICAgICAgICAgPjwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwiaXNNb2RhbFNlbGVjdGVkQ29sb3JbaV1cIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRfY29sb3JcIlxyXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZVxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvcl9saW5rIHBvcHVwX3JlY2VudFwiXHJcbiAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10YXJnZXRdPVwiJyNjb2xsYXBzZUNvbG91cnMnICsgaVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgZ2V0Q29sb3VycyhjYXJ0LCBpLCAkZXZlbnQpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgIGZsYXNoaW5nUHJvZHVjdEJvcmRlcjpcclxuICAgICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmxhc2hpbmdQcm9kdWN0XHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3JfcGFydFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgbW9kYWxTZWxlY3RlZENvbG91cltpXT8ubmFtZSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLWRvd24gZHJvcGRvd24taWNvblwiXHJcbiAgICAgICAgICAgICAgPjwvaVxyXG4gICAgICAgICAgICA+PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBhdmFpYWxhYmxlIGNvbG91cnMgcG9wdXAgLS0+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FydERldGFpbHNbaV0/LmlzRXhwYW5kXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJjb2xsYXBzZSBjb2xvdXJzX2NvbnRhaW5lclwiXHJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIidjb2xsYXBzZUNvbG91cnMnICsgaVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LnZhcmlhbnRPcHRpb25zXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXJzIG0tMSBwdC0zXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtb2RhbGNvbG91ciBvZiBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8udmFyaWFudE9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbW9kYWxTZWxlY3RlZENvbG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyLmNvbG91cnNbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyPy5jb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ciBtLTEgbWItMyBtYWluXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBtb2RhbGNvbG91cj8uY29sb3Vyc1swXT8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsU2VsZWN0ZWRDb2xvdXJbaV0/LmhleGFkZWNpbWFsQ29kZSA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbGNvbG91cj8uY29sb3Vyc1swXT8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvdXItdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBtb2RhbGNvbG91cj8uY29sb3Vyc1swXT8ubmFtZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgbW9kYWxjb2xvdXI/LmNvbG91cnNbMF0/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIWNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3QgJiZcclxuICAgICAgICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmJwQWRkaXRpb25hbEF0dHJpYnV0ZT8uY29sb3Vyc1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VycyBtLTEgcHQtM1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbW9kYWxjb2xvdXIgb2YgY2FydERldGFpbHNbaV0/LnByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAgID8uYnBBZGRpdGlvbmFsQXR0cmlidXRlPy5jb2xvdXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbFNlbGVjdGVkQ29sb3IoJGV2ZW50LCBtb2RhbGNvbG91ciwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3VyIG0tMSBtYi0zIG1haW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IG1vZGFsY29sb3VyPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxTZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsY29sb3VyPy5oZXhhZGVjaW1hbENvZGVcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ci10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IG1vZGFsY29sb3VyPy5uYW1lIH19XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBtb2RhbGNvbG91cj8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uYnBBZGRpdGlvbmFsQXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgICAgICAgPy5hZGRpdGlvbmFsQ29sb3Vycz8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10YXJnZXRdPVwiJyNhZGRpdGlvbmFsQ29sb3JzTW9kYWwnICsgaVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDx1PiBBZGRpdGlvbmFsIGNvbG9ycyBtYXkgYmUgYXZpYWxhYmxlIDwvdT48L2FcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIEFkZGl0aW9uYWwgY29sb3VycyBwb3B1cC0tPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1vZGFsIGZhZGVcIlxyXG4gICAgICAgICAgICBpZD1cImFkZGl0aW9uYWxDb2xvcnNNb2RhbHt7IGkgfX1cIlxyXG4gICAgICAgICAgICByb2xlPVwiZGlhbG9nXCJcclxuICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiaW52aXRlTWVtYmVyTGFiZWxcIlxyXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BZGRpdGlvbmFsIENvbG91cnM8L2g0PlxyXG4gICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1jbG9zZSBpbnZpdGUtcG9wLWNsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICAjY2xvc2VJbnZpdGVNb2RhbFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9yZS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvd2FybmluZ2ljb24uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFsdD1cImFsZXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgYWRkaXRpb25hbFBhcmE/LmNvbnRlbnQgfX0uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG91cnMgbS0xIHB0LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGFsY29sb3VyIG9mIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPy5icEFkZGl0aW9uYWxBdHRyaWJ1dGU/LmFkZGl0aW9uYWxDb2xvdXJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHRpb25hbE1vZGFsU2VsZWN0ZWRDb2xvcigkZXZlbnQsIG1vZGFsY29sb3VyLCBpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ciBtLTEgbWItMyBtYWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBtb2RhbGNvbG91cj8uaGV4YWRlY2ltYWxDb2RlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGluYWxzZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbGNvbG91cj8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG91ci10aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgbW9kYWxjb2xvdXI/Lm5hbWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9kYWxjb2xvdXI/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMSBwdC0zXCIgKm5nSWY9XCJhZGRpdGluYWxzZWxlY3RlZENvbG91cltpXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGRcIj5Db2xvdXIgU2VsZWN0aW9uPC9oNj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRfY29sb3Jfc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkX2NvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGluYWxzZWxlY3RlZENvbG91cltpXT8uaGV4YWRlY2ltYWxDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBhZGRpdGluYWxzZWxlY3RlZENvbG91cltpXT8ubmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLXNtLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gbW9iaWxlLWNhbmNlbC1idG4gZGltb25kLXNlY29uZGFyeS1idG4gbXItbGctNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByb2NlZWRXaXRoU3VibWl0KGFkZGl0aW5hbHNlbGVjdGVkQ29sb3VyW2ldLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIG1vYmlsZS1zYXZlLWJ0biBkaW1vbmQtcHJpbWFyeS1idG4gZmxvYXQtcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIFByb2NlZWRcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAqbmdJZj1cIiFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWUtbW9yZS1saW5rXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dIaWRlKGkpXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBibG9jazogY2FydERldGFpbHNbaV0/LnByb2R1Y3Q/LmZsYXNoaW5nUHJvZHVjdCB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgc2hvd0RldGFpbHNbaV0gPT0gdHJ1ZSA/IFwiSGlkZVwiIDogXCJTZWVcIiB9fSBtb3JlIGRldGFpbHNcclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtc20tNlwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0RldGFpbHNbaV1cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ3F1YW50aXR5LWZvcm0tZGV0YWlscyc6ICFjYXJ0RGV0YWlsc1tpXT8ucHJvZHVjdD8uZmluaXNoZWRQcm9kdWN0XHJcbiAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwiY2FydE1vcmVEZXRhaWxze3sgaSB9fVwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXByb2R1Y3QtcXVhbnRpdHktZm9ybVxyXG4gICAgICAgICAgICAgICAgW3Byb2R1Y3RDb2RlXT1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5jb2RlXCJcclxuICAgICAgICAgICAgICAgIFtwcm9kdWN0RGV0YWlsc109XCJjYXJ0RGV0YWlsc1tpXVwiXHJcbiAgICAgICAgICAgICAgICBbbGlzdFZpZXddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbYWNjZXNzb3JpZXNQcmljZV09XCJjYXJ0RGV0YWlsc1tpXT8uYmFzZVByaWNlPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRDb2xvdXJdPVwic2VsZWN0ZWRDb2xvdXJcIlxyXG4gICAgICAgICAgICAgICAgW2lzRmluaXNoZWRQcm9kdWN0XT1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5maW5pc2hlZFByb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgW2lzRmxhc2hpbmdQcm9kdWN0XT1cImNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgKHVwZGF0ZUNhcnRFbnRpcmVzKT1cInJlb2xhZENhcnRFbnRpcmVzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgID48L2FwcC1jdXN0b20tcHJvZHVjdC1xdWFudGl0eS1mb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGNhcnREZXRhaWxzW2ldPy5wcm9kdWN0Py5mbGFzaGluZ1Byb2R1Y3QgJiZcclxuICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3RDb25maWd1cmVkSW5mb3MgJiZcclxuICAgICAgICAgICAgY2FydERldGFpbHNbaV0/LnByb2R1Y3RDb25maWd1cmVkSW5mb3M/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsYXNoaW5nLWJsb2NrXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgY2FydERldGFpbHNbaV0/LnByb2R1Y3RDb25maWd1cmVkSW5mb3NcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJmbGFzaC10aXRsZVwiPnt7IGRhdGE/LnByb2R1Y3Q/Lm5hbWUgfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic2t1SWRcIj5TS1U6IHt7IGRhdGE/LnByb2R1Y3Q/LmNvZGUgfX08L2g2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhPy5naXJ0aFwiPkdyaXRoOiAre3sgZGF0YT8uZ2lydGggfX1tbSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9mZnNldC1zbS0zIGNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhPy5xdWFudGl0eURvdWJsZSB9fXt7IGRhdGE/LnVuaXRUeXBlIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhPy5iYXNlUHJpY2U/LmZvcm1hdHRlZFZhbHVlIH19L3t7IGRhdGE/LnVuaXRUeXBlIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhPy50b3RhbFByaWNlPy5mb3JtYXR0ZWRWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnc3QtdGV4dFwiPmV4Y2wgR1NUPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPCEtLSBjb2xvdXJzIHBvcHVwIC0tPlxyXG5cclxuPGRpdlxyXG4gIGNsYXNzPVwibW9kYWwgZmFkZVwiXHJcbiAgaWQ9XCJpbWFnZU1vZGFsXCJcclxuICByb2xlPVwiZGlhbG9nXCJcclxuICBhcmlhLWxhYmVsbGVkYnk9XCJpbWFnZU1vZGFsXCJcclxuICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICNpbWFnZU1vZGFsXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiaWNvbi1jbG9zZSBpbnZpdGUtcG9wLWNsb3NlXCJcclxuICAgICAgICAgICNjbG9zZUludml0ZU1vZGFsXHJcbiAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgID48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBtLTRcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VNb2RhbFNyY1wiIGFsdD1cImFsZXJ0XCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmdiLXRvYXN0ICpuZ0lmPVwic2hvd1RvYXN0XCIgW2F1dG9oaWRlXT1cInRydWVcIiBbZGVsYXldPVwiNDAwMFwiPlxyXG4gIDxpbWcgc3JjPVwiLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9JbnZpdGVkLnN2Z1wiIC8+IENhcnQgdXBkYXRlZCBzdWNjZXNzZnVsbHkhXHJcbiAgPGlcclxuICAgIGNsYXNzPVwiaWNvbi1jbG9zZSB0b2FzdC1jbG9zZVwiXHJcbiAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgKGNsaWNrKT1cImNsb3NlVG9hc3QoKVwiXHJcbiAgPjwvaT5cclxuPC9uZ2ItdG9hc3Q+XHJcbiJdfQ==