simpo-component-library 3.6.447 → 3.6.449

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 (227) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/delete-hover-element/delete-hover-element.component.mjs +3 -3
  3. package/esm2022/lib/components/document/document.component.mjs +3 -3
  4. package/esm2022/lib/components/image-loading/image-loading.component.mjs +3 -3
  5. package/esm2022/lib/components/payment-details/payment-details.component.mjs +3 -3
  6. package/esm2022/lib/constants/business.constant.mjs +1 -1
  7. package/esm2022/lib/directive/alignment.directive.mjs +1 -1
  8. package/esm2022/lib/directive/blur-content.directive.mjs +1 -1
  9. package/esm2022/lib/directive/borderlessImage.directive.mjs +1 -1
  10. package/esm2022/lib/directive/button-directive.directive.mjs +1 -1
  11. package/esm2022/lib/directive/button-editor.directive.mjs +1 -1
  12. package/esm2022/lib/directive/color.directive.mjs +1 -1
  13. package/esm2022/lib/directive/column-directive.directive.mjs +1 -1
  14. package/esm2022/lib/directive/container-alignment.directive.mjs +1 -1
  15. package/esm2022/lib/directive/container-fir.directive.mjs +1 -1
  16. package/esm2022/lib/directive/content-title-spacing.directive.mjs +1 -1
  17. package/esm2022/lib/directive/contenteditable.directive.mjs +1 -1
  18. package/esm2022/lib/directive/corner-directive.mjs +1 -1
  19. package/esm2022/lib/directive/height.directive.mjs +1 -1
  20. package/esm2022/lib/directive/hover-animation.directive.mjs +1 -1
  21. package/esm2022/lib/directive/hoverborder.directive.mjs +1 -1
  22. package/esm2022/lib/directive/icon-directive.directive.mjs +1 -1
  23. package/esm2022/lib/directive/image-container.directive.mjs +1 -1
  24. package/esm2022/lib/directive/image-directive.directive.mjs +1 -1
  25. package/esm2022/lib/directive/image-editor.directive.mjs +1 -1
  26. package/esm2022/lib/directive/image-position.directive.mjs +1 -1
  27. package/esm2022/lib/directive/merge-header.directive.mjs +1 -1
  28. package/esm2022/lib/directive/position-layout-directive.directive.mjs +1 -1
  29. package/esm2022/lib/directive/set-dynamic-background.directive.mjs +1 -1
  30. package/esm2022/lib/directive/spacing-around.directive.mjs +1 -1
  31. package/esm2022/lib/directive/spacing-horizontal.directive.mjs +1 -1
  32. package/esm2022/lib/directive/spacing.directive.mjs +1 -1
  33. package/esm2022/lib/directive/sticky-directive.mjs +1 -1
  34. package/esm2022/lib/directive/text-background-directive.directive.mjs +1 -1
  35. package/esm2022/lib/directive/text-size.directive.mjs +1 -1
  36. package/esm2022/lib/directive/translate-onhover.directive.mjs +3 -3
  37. package/esm2022/lib/directive/wrap-containers.directive.mjs +1 -1
  38. package/esm2022/lib/ecommerce/sections/address/address.component.mjs +3 -3
  39. package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +3 -3
  40. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +3 -3
  41. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
  42. package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +3 -3
  43. package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.model.mjs +1 -1
  44. package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +3 -3
  45. package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
  46. package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
  47. package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
  48. package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +3 -3
  49. package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
  50. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +3 -3
  51. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
  52. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +3 -3
  53. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.model.mjs +1 -1
  54. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +3 -3
  55. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
  56. package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +3 -3
  57. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +3 -3
  58. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
  59. package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +3 -3
  60. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.component.mjs +3 -3
  61. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.modal.mjs +1 -1
  62. package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +3 -3
  63. package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +3 -3
  64. package/esm2022/lib/ecommerce/sections/passbook-transactions/passbook-transactions.component.mjs +3 -3
  65. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +3 -3
  66. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
  67. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +3 -3
  68. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
  69. package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +3 -3
  70. package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
  71. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.component.mjs +3 -3
  72. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.model.mjs +1 -1
  73. package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +7 -19
  74. package/esm2022/lib/ecommerce/sections/scheme-selection/scheme-selection.component.mjs +3 -3
  75. package/esm2022/lib/ecommerce/sections/schemes/schemes.component.mjs +3 -3
  76. package/esm2022/lib/ecommerce/sections/schemes/schemes.component.model.mjs +1 -1
  77. package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +3 -3
  78. package/esm2022/lib/ecommerce/sections/store-list/store-list.component.mjs +3 -3
  79. package/esm2022/lib/ecommerce/sections/store-list/store-list.modal.mjs +1 -1
  80. package/esm2022/lib/ecommerce/sections/store-page/store-page.component.mjs +3 -3
  81. package/esm2022/lib/ecommerce/sections/store-page/store-page.model.mjs +1 -1
  82. package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +3 -3
  83. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +3 -3
  84. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
  85. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +3 -3
  86. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
  87. package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
  88. package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
  89. package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +1 -1
  90. package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
  91. package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
  92. package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
  93. package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
  94. package/esm2022/lib/ecommerce/styles/category.modal.mjs +1 -1
  95. package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
  96. package/esm2022/lib/ecommerce/styles/product.modal.mjs +1 -1
  97. package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
  98. package/esm2022/lib/ecommerce/styles/user.modal.mjs +1 -1
  99. package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -3
  100. package/esm2022/lib/elements/address-list/address-list.component.mjs +3 -3
  101. package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
  102. package/esm2022/lib/elements/button/button.component.mjs +3 -3
  103. package/esm2022/lib/elements/button/button.model.mjs +1 -1
  104. package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +3 -3
  105. package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
  106. package/esm2022/lib/elements/editor-service.service.mjs +29 -6
  107. package/esm2022/lib/elements/heading-element/heading-element.component.mjs +3 -3
  108. package/esm2022/lib/elements/image-editor/image-editor.component.mjs +3 -3
  109. package/esm2022/lib/elements/index.mjs +1 -1
  110. package/esm2022/lib/elements/link-editor/link-editor.component.mjs +3 -3
  111. package/esm2022/lib/elements/list-home-appointment/list-home-appointment.component.mjs +3 -3
  112. package/esm2022/lib/elements/media-selector/media-selector.component.mjs +3 -3
  113. package/esm2022/lib/elements/portfolio/portfolio.component.mjs +3 -3
  114. package/esm2022/lib/elements/pricing-s1/pricing-s1.component.mjs +3 -3
  115. package/esm2022/lib/elements/property/property.component.mjs +3 -3
  116. package/esm2022/lib/elements/schedule-video-call/schedule-video-call.component.mjs +3 -3
  117. package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +3 -3
  118. package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +3 -3
  119. package/esm2022/lib/elements/text/text.component.mjs +3 -3
  120. package/esm2022/lib/elements/text-editor/text-editor.component.mjs +3 -3
  121. package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
  122. package/esm2022/lib/pipes/amount.pipe.mjs +1 -1
  123. package/esm2022/lib/pipes/gender.pipe.mjs +1 -1
  124. package/esm2022/lib/sections/BaseSection.mjs +1 -1
  125. package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +3 -3
  126. package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +3 -3
  127. package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
  128. package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +3 -3
  129. package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
  130. package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +19 -17
  131. package/esm2022/lib/sections/blog-list/blog-list.component.mjs +4 -4
  132. package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
  133. package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +3 -3
  134. package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
  135. package/esm2022/lib/sections/faq-section/faq-section.component.mjs +3 -3
  136. package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
  137. package/esm2022/lib/sections/features-section/features-section.component.mjs +3 -3
  138. package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
  139. package/esm2022/lib/sections/footer/footer.component.mjs +3 -3
  140. package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
  141. package/esm2022/lib/sections/header-section/header-section.component.mjs +25 -41
  142. package/esm2022/lib/sections/header-section/header-section.model.mjs +1 -1
  143. package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
  144. package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
  145. package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +3 -3
  146. package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
  147. package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +3 -3
  148. package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
  149. package/esm2022/lib/sections/image-section/image-section.component.mjs +3 -3
  150. package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
  151. package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
  152. package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
  153. package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +3 -3
  154. package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
  155. package/esm2022/lib/sections/moving-text/moving-text.component.mjs +3 -3
  156. package/esm2022/lib/sections/moving-text/moving-text.modal.mjs +1 -1
  157. package/esm2022/lib/sections/new-services/new-services.component.mjs +3 -3
  158. package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
  159. package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +3 -3
  160. package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
  161. package/esm2022/lib/sections/news-letter-component/news-letter-component.component.mjs +3 -3
  162. package/esm2022/lib/sections/news-letter-component/news-letter.modal.mjs +1 -1
  163. package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +3 -3
  164. package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
  165. package/esm2022/lib/sections/process-modern/process-modern.component.mjs +3 -3
  166. package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
  167. package/esm2022/lib/sections/process-section/process-section.component.mjs +3 -3
  168. package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
  169. package/esm2022/lib/sections/property-component/property-component.component.mjs +3 -3
  170. package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
  171. package/esm2022/lib/sections/property-list/property-list.component.mjs +3 -3
  172. package/esm2022/lib/sections/property-list/property-list.modal.mjs +1 -1
  173. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +3 -3
  174. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
  175. package/esm2022/lib/sections/registration-form/registration-form.component.mjs +3 -3
  176. package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
  177. package/esm2022/lib/sections/scheme-detail/scheme-detail.component.mjs +3 -3
  178. package/esm2022/lib/sections/scheme-detail/scheme-detail.modal.mjs +1 -1
  179. package/esm2022/lib/sections/service-section/service-section.component.mjs +3 -3
  180. package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
  181. package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +3 -3
  182. package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
  183. package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
  184. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +3 -3
  185. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
  186. package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +3 -3
  187. package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
  188. package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +3 -3
  189. package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
  190. package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
  191. package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +3 -3
  192. package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
  193. package/esm2022/lib/sections/video-section/video-section.component.mjs +3 -3
  194. package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
  195. package/esm2022/lib/sections/view-blog/view-blog.component.mjs +3 -3
  196. package/esm2022/lib/services/cart.service.mjs +1 -1
  197. package/esm2022/lib/services/endUser.service.mjs +1 -1
  198. package/esm2022/lib/services/image-upload-service.service.mjs +1 -1
  199. package/esm2022/lib/services/local-storage.token.mjs +23 -0
  200. package/esm2022/lib/services/rest.service.mjs +27 -8
  201. package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
  202. package/esm2022/lib/services/storage-like.mjs +2 -0
  203. package/esm2022/lib/services/storage.service.mjs +52 -35
  204. package/esm2022/lib/styles/index.mjs +1 -1
  205. package/esm2022/lib/styles/style.model.mjs +1 -1
  206. package/esm2022/lib/styles/types.mjs +1 -1
  207. package/esm2022/lib/tokens/api-token.mjs +1 -1
  208. package/esm2022/public-api.mjs +3 -1
  209. package/fesm2022/simpo-component-library.mjs +365 -300
  210. package/fesm2022/simpo-component-library.mjs.map +1 -1
  211. package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +1 -1
  212. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +1 -1
  213. package/lib/ecommerce/sections/scheme-details/scheme-details.component.d.ts +1 -4
  214. package/lib/ecommerce/sections/schemes/schemes.component.d.ts +1 -1
  215. package/lib/elements/editor-service.service.d.ts +4 -1
  216. package/lib/elements/pricing-s1/pricing-s1.component.d.ts +1 -1
  217. package/lib/sections/header-section/header-section.component.d.ts +3 -1
  218. package/lib/sections/pricing-section/pricing-section.component.d.ts +1 -1
  219. package/lib/services/local-storage.token.d.ts +3 -0
  220. package/lib/services/rest.service.d.ts +4 -1
  221. package/lib/services/storage-like.d.ts +8 -0
  222. package/lib/services/storage.service.d.ts +2 -1
  223. package/package.json +1 -1
  224. package/public-api.d.ts +2 -0
  225. package/simpo-component-library-3.6.449.tgz +0 -0
  226. package/src/lib/styles/global-styles.css +272 -272
  227. package/simpo-component-library-3.6.447.tgz +0 -0
@@ -371,7 +371,7 @@ export class EnrollmentFormComponent extends BaseSection {
371
371
  }
372
372
  }
373
373
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnrollmentFormComponent, deps: [{ token: i1.RestService }, { token: i2.ActivatedRoute }, { token: i3.StorageServiceService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
374
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EnrollmentFormComponent, isStandalone: true, selector: "simpo-enrollment-form", inputs: { data: "data", edit: "edit", customClass: "customClass", delete: "delete", index: "index" }, usesInheritance: true, ngImport: i0, template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\r\n <div class=\"form-container\">\r\n <div class=\"section-title\">Customer Information</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\r\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\"\r\n [class.error-border]=\"!validObject['NAME']\">\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\r\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\r\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\"\r\n [class.error-border]=\"!validObject['EMAIL']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\r\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\r\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\"\r\n [class.error-border]=\"!validObject['MOBILE']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\r\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\r\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\"\r\n [class.error-border]=\"!validObject['DOB']\">\r\n </div>\r\n </div>\r\n\r\n <!-- Scheme Information -->\r\n <div class=\"section-title\">Scheme Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\r\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\r\n <option [ngValue]=\"\">Select Scheme</option>\r\n <ng-container *ngFor=\"let scheme of schemesData\">\r\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\r\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\r\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\r\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\r\n <option [ngValue]=\"\">Select Amount Plan</option>\r\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\r\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Information -->\r\n <div class=\"section-title\">Store Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\r\n <option [ngValue]=\"\">Select Store</option>\r\n <ng-container *ngFor=\"let store of storeData\">\r\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\r\n [(ngModel)]=\"enrollementPayload.custodian\">\r\n <option [ngValue]=\"\">Select Custodian</option>\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Enter Your Address -->\r\n <div class=\"section-title\">Enter Your Address</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\"\r\n (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\r\n (ngModelChange)=\"getCityByStateId()\">\r\n <option [ngValue]=\"\">Select State</option>\r\n <ng-container *ngFor=\"let state of stateData\">\r\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\r\n <option [ngValue]=\"\">Select City</option>\r\n <ng-container *ngFor=\"let city of cityData\">\r\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\"\r\n (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Enter Nominee Details</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\"\r\n (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\r\n <!-- <option value=\"\">Select Relationship</option> -->\r\n <option value=\"Spouse\">Spouse</option>\r\n <option value=\"Child\">Child</option>\r\n <option value=\"Mother\">Mother</option>\r\n <option value=\"Father\">Father</option>\r\n <option value=\"Sibling\">Sibling</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\r\n\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\"\r\n (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\"\r\n [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Account Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\r\n class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\"\r\n (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\"\r\n (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\r\n </div>\r\n </div>\r\n <div class=\"d-grid mt-4\">\r\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\r\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\r\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\r\n [buttonData]=\"getButtonContent(0)\">Submit\r\n Enrollment</button>\r\n </div>\r\n <div *ngIf=\"validator\" [class.error-color]=\"validator\">Fill all mandatory fields to proceed*</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Add this block in your Angular payment step (page === 'PAYMENT') -->\r\n <!-- payment-simulation.component.html -->\r\n <div class=\"container-fluid min-vh-100 d-flex align-items-center justify-content-center bg-light\"\r\n *ngIf=\"page === 'PAYMENT'\">\r\n <div class=\"payment-container\">\r\n\r\n <!-- Header -->\r\n <div class=\"payment-header mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <h1 class=\"payment-title\">Payment Method</h1>\r\n <span class=\"badge bg-success rounded-pill px-3 py-2\">Credit Card</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Credit Card -->\r\n <div class=\"credit-card mb-4\">\r\n <div class=\"card-inner\">\r\n <div class=\"card-shine\"></div>\r\n <div class=\"card-content\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"visa-logo\"></div>\r\n <span class=\"visa-text\">VISA</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cardholder-name mb-4\">\r\n turquoisecoyote\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <div class=\"card-dots\">\r\n <span class=\"dot\" *ngFor=\"let dot of [1,2,3,4,5,6,7,8,9,10,11,12]\"></span>\r\n </div>\r\n <span class=\"card-number\">1111</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- OTP Section -->\r\n <div class=\"otp-section mb-4\">\r\n <p class=\"otp-label\">Enter OTP sent to your xxx xxx 4839</p>\r\n <input type=\"text\" class=\"form-control otp-input\" placeholder=\"Enter OTP\">\r\n <small class=\"text-muted mt-2 d-block\">Hint: OTP is 111000</small>\r\n </div>\r\n\r\n <!-- Simulation Buttons -->\r\n <div class=\"row g-3 mb-4\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-danger btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('failure')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate failure\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('success')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate success\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Processing State -->\r\n <div *ngIf=\"isProcessing\" class=\"d-flex align-items-center justify-content-center py-3\">\r\n <div class=\"spinner-border text-primary me-3\" role=\"status\" style=\"width: 1.5rem; height: 1.5rem;\">\r\n </div>\r\n <span class=\"text-muted\">Processing payment...</span>\r\n </div>\r\n\r\n <!-- Result Alert -->\r\n <div *ngIf=\"result && showResult\" class=\"alert text-center result-alert\" [ngClass]=\"{\r\n 'alert-success': result.type === 'success',\r\n 'alert-danger': result.type === 'failure'\r\n }\">\r\n <strong>{{ result.title }}</strong> {{ result.message }}\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"text-center mt-4\">\r\n <small class=\"text-muted\">\r\n Click buttons to simulate payment scenarios\r\n </small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.error-color{color:#e53e3e!important;font-weight:600;font-size:13px}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}.payment-container{width:100%;max-width:430px;padding:20px}.payment-title{font-size:2rem;font-weight:700;color:#333;margin:0}.credit-card{perspective:1000px}.card-inner{background:linear-gradient(135deg,#2d3748,#1a202c);border-radius:20px;padding:30px;position:relative;overflow:hidden;box-shadow:0 20px 40px #0000004d;color:#fff;min-height:200px}.card-shine{position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.1) 45%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.1) 55%,transparent 100%);pointer-events:none}.card-content{position:relative;z-index:2}.visa-logo{width:32px;height:20px;background:#fff;border-radius:3px}.visa-text{font-weight:700;font-size:1.2rem;letter-spacing:2px}.cardholder-name{font-size:1.1rem;letter-spacing:1px;text-transform:lowercase}.card-dots{display:flex;gap:4px}.dot{width:8px;height:8px;background:#fff;border-radius:50%;display:inline-block}.card-number{font-family:Courier New,monospace;font-size:1.3rem;font-weight:700;letter-spacing:3px}.otp-section{margin:30px 0}.otp-label{color:#6c757d;margin-bottom:12px;font-size:.95rem}.otp-input{padding:16px 20px;border-radius:12px;border:2px solid #e9ecef;font-size:1.1rem;transition:all .3s ease}.otp-input:focus{border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.simulation-btn{padding:16px 20px;border-radius:12px;font-weight:700;font-size:1rem;transition:all .3s ease;border:none;white-space:nowrap}.simulation-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #00000026}.simulation-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-danger.simulation-btn{background:linear-gradient(135deg,#dc3545,#c82333)}.btn-success.simulation-btn{background:linear-gradient(135deg,#28a745,#20c997)}.result-alert{border-radius:12px;padding:16px 20px;border:none;font-weight:500;animation:slideInUp .3s ease-out}.alert-success{background:linear-gradient(135deg,#d4edda,#c3e6cb);color:#155724;border-left:4px solid #28a745}.alert-danger{background:linear-gradient(135deg,#f8d7da,#f5c6cb);color:#721c24;border-left:4px solid #dc3545}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.payment-container{padding:15px}.payment-title{font-size:1.5rem}.card-inner{padding:25px;min-height:180px}.simulation-btn{padding:14px 16px;font-size:.9rem}.form-container{width:100%!important}}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i6.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i7.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId"] }] }); }
374
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EnrollmentFormComponent, isStandalone: true, selector: "simpo-enrollment-form", inputs: { data: "data", edit: "edit", customClass: "customClass", delete: "delete", index: "index" }, usesInheritance: true, ngImport: i0, template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\n <div class=\"form-container\">\n <div class=\"section-title\">Customer Information</div>\n\n <div class=\"mb-3\">\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\"\n [class.error-border]=\"!validObject['NAME']\">\n </div>\n\n <div class=\"mb-3\">\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\"\n [class.error-border]=\"!validObject['EMAIL']\">\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\"\n [class.error-border]=\"!validObject['MOBILE']\">\n </div>\n <div class=\"col-md-6\">\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\"\n [class.error-border]=\"!validObject['DOB']\">\n </div>\n </div>\n\n <!-- Scheme Information -->\n <div class=\"section-title\">Scheme Information</div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\n <option [ngValue]=\"\">Select Scheme</option>\n <ng-container *ngFor=\"let scheme of schemesData\">\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n <div class=\"col-md-6\">\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\n <option [ngValue]=\"\">Select Amount Plan</option>\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n </div>\n\n <!-- Store Information -->\n <div class=\"section-title\">Store Information</div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\n <option [ngValue]=\"\">Select Store</option>\n <ng-container *ngFor=\"let store of storeData\">\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n <div class=\"col-md-6\">\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\n [(ngModel)]=\"enrollementPayload.custodian\">\n <option [ngValue]=\"\">Select Custodian</option>\n <ng-container *ngFor=\"let staff of staffData\">\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n </div>\n\n <!-- Enter Your Address -->\n <div class=\"section-title\">Enter Your Address</div>\n\n <div class=\"mb-3\">\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\"\n (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\n (ngModelChange)=\"getCityByStateId()\">\n <option [ngValue]=\"\">Select State</option>\n <ng-container *ngFor=\"let state of stateData\">\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n <div class=\"col-md-6\">\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\n <option [ngValue]=\"\">Select City</option>\n <ng-container *ngFor=\"let city of cityData\">\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\"\n (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\n </div>\n </div>\n\n <div class=\"section-title\">Enter Nominee Details</div>\n\n <div class=\"mb-3\">\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\"\n (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\n class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\n <!-- <option value=\"\">Select Relationship</option> -->\n <option value=\"Spouse\">Spouse</option>\n <option value=\"Child\">Child</option>\n <option value=\"Mother\">Mother</option>\n <option value=\"Father\">Father</option>\n <option value=\"Sibling\">Sibling</option>\n </select>\n </div>\n <div class=\"col-md-6\">\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\n\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\"\n (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\"\n [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\n </div>\n </div>\n\n <div class=\"section-title\">Account Information</div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\n class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\"\n (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\"\n [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\n </div>\n <div class=\"col-md-6\">\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\"\n (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\"\n [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\n </div>\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\"\n (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\n </div>\n <div class=\"col-md-6\">\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\"\n (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\n </div>\n </div>\n <div class=\"d-grid mt-4\">\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\n [buttonData]=\"getButtonContent(0)\">Submit\n Enrollment</button>\n </div>\n <div *ngIf=\"validator\" [class.error-color]=\"validator\">Fill all mandatory fields to proceed*</div>\n </div>\n </div>\n\n <!-- Add this block in your Angular payment step (page === 'PAYMENT') -->\n <!-- payment-simulation.component.html -->\n <div class=\"container-fluid min-vh-100 d-flex align-items-center justify-content-center bg-light\"\n *ngIf=\"page === 'PAYMENT'\">\n <div class=\"payment-container\">\n\n <!-- Header -->\n <div class=\"payment-header mb-4\">\n <div class=\"d-flex align-items-center justify-content-between\">\n <h1 class=\"payment-title\">Payment Method</h1>\n <span class=\"badge bg-success rounded-pill px-3 py-2\">Credit Card</span>\n </div>\n </div>\n\n <!-- Credit Card -->\n <div class=\"credit-card mb-4\">\n <div class=\"card-inner\">\n <div class=\"card-shine\"></div>\n <div class=\"card-content\">\n <div class=\"d-flex align-items-center justify-content-between mb-4\">\n <div class=\"d-flex align-items-center gap-2\">\n <div class=\"visa-logo\"></div>\n <span class=\"visa-text\">VISA</span>\n </div>\n </div>\n\n <div class=\"cardholder-name mb-4\">\n turquoisecoyote\n </div>\n\n <div class=\"d-flex align-items-center justify-content-between\">\n <div class=\"card-dots\">\n <span class=\"dot\" *ngFor=\"let dot of [1,2,3,4,5,6,7,8,9,10,11,12]\"></span>\n </div>\n <span class=\"card-number\">1111</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- OTP Section -->\n <div class=\"otp-section mb-4\">\n <p class=\"otp-label\">Enter OTP sent to your xxx xxx 4839</p>\n <input type=\"text\" class=\"form-control otp-input\" placeholder=\"Enter OTP\">\n <small class=\"text-muted mt-2 d-block\">Hint: OTP is 111000</small>\n </div>\n\n <!-- Simulation Buttons -->\n <div class=\"row g-3 mb-4\">\n <div class=\"col-6\">\n <button class=\"btn btn-danger btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('failure')\"\n [disabled]=\"isProcessing\">\n Simulate failure\n </button>\n </div>\n <div class=\"col-6\">\n <button class=\"btn btn-success btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('success')\"\n [disabled]=\"isProcessing\">\n Simulate success\n </button>\n </div>\n </div>\n\n <!-- Processing State -->\n <div *ngIf=\"isProcessing\" class=\"d-flex align-items-center justify-content-center py-3\">\n <div class=\"spinner-border text-primary me-3\" role=\"status\" style=\"width: 1.5rem; height: 1.5rem;\">\n </div>\n <span class=\"text-muted\">Processing payment...</span>\n </div>\n\n <!-- Result Alert -->\n <div *ngIf=\"result && showResult\" class=\"alert text-center result-alert\" [ngClass]=\"{\n 'alert-success': result.type === 'success',\n 'alert-danger': result.type === 'failure'\n }\">\n <strong>{{ result.title }}</strong> {{ result.message }}\n </div>\n\n <!-- Footer -->\n <div class=\"text-center mt-4\">\n <small class=\"text-muted\">\n Click buttons to simulate payment scenarios\n </small>\n </div>\n\n </div>\n </div>\n\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.error-color{color:#e53e3e!important;font-weight:600;font-size:13px}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}.payment-container{width:100%;max-width:430px;padding:20px}.payment-title{font-size:2rem;font-weight:700;color:#333;margin:0}.credit-card{perspective:1000px}.card-inner{background:linear-gradient(135deg,#2d3748,#1a202c);border-radius:20px;padding:30px;position:relative;overflow:hidden;box-shadow:0 20px 40px #0000004d;color:#fff;min-height:200px}.card-shine{position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.1) 45%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.1) 55%,transparent 100%);pointer-events:none}.card-content{position:relative;z-index:2}.visa-logo{width:32px;height:20px;background:#fff;border-radius:3px}.visa-text{font-weight:700;font-size:1.2rem;letter-spacing:2px}.cardholder-name{font-size:1.1rem;letter-spacing:1px;text-transform:lowercase}.card-dots{display:flex;gap:4px}.dot{width:8px;height:8px;background:#fff;border-radius:50%;display:inline-block}.card-number{font-family:Courier New,monospace;font-size:1.3rem;font-weight:700;letter-spacing:3px}.otp-section{margin:30px 0}.otp-label{color:#6c757d;margin-bottom:12px;font-size:.95rem}.otp-input{padding:16px 20px;border-radius:12px;border:2px solid #e9ecef;font-size:1.1rem;transition:all .3s ease}.otp-input:focus{border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.simulation-btn{padding:16px 20px;border-radius:12px;font-weight:700;font-size:1rem;transition:all .3s ease;border:none;white-space:nowrap}.simulation-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #00000026}.simulation-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-danger.simulation-btn{background:linear-gradient(135deg,#dc3545,#c82333)}.btn-success.simulation-btn{background:linear-gradient(135deg,#28a745,#20c997)}.result-alert{border-radius:12px;padding:16px 20px;border:none;font-weight:500;animation:slideInUp .3s ease-out}.alert-success{background:linear-gradient(135deg,#d4edda,#c3e6cb);color:#155724;border-left:4px solid #28a745}.alert-danger{background:linear-gradient(135deg,#f8d7da,#f5c6cb);color:#721c24;border-left:4px solid #dc3545}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.payment-container{padding:15px}.payment-title{font-size:1.5rem}.card-inner{padding:25px;min-height:180px}.simulation-btn{padding:14px 16px;font-size:.9rem}.form-container{width:100%!important}}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i6.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i7.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId"] }] }); }
375
375
  }
376
376
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnrollmentFormComponent, decorators: [{
377
377
  type: Component,
@@ -390,7 +390,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
390
390
  SpacingHorizontalDirective,
391
391
  ButtonEditorDirective,
392
392
  MatIcon
393
- ], template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\r\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\r\n <div class=\"form-container\">\r\n <div class=\"section-title\">Customer Information</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\r\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\"\r\n [class.error-border]=\"!validObject['NAME']\">\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\r\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\r\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\"\r\n [class.error-border]=\"!validObject['EMAIL']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\r\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\r\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\"\r\n [class.error-border]=\"!validObject['MOBILE']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\r\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\r\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\"\r\n [class.error-border]=\"!validObject['DOB']\">\r\n </div>\r\n </div>\r\n\r\n <!-- Scheme Information -->\r\n <div class=\"section-title\">Scheme Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\r\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\r\n <option [ngValue]=\"\">Select Scheme</option>\r\n <ng-container *ngFor=\"let scheme of schemesData\">\r\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\r\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\r\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\r\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\r\n <option [ngValue]=\"\">Select Amount Plan</option>\r\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\r\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Information -->\r\n <div class=\"section-title\">Store Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\r\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\r\n <option [ngValue]=\"\">Select Store</option>\r\n <ng-container *ngFor=\"let store of storeData\">\r\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\r\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\r\n [(ngModel)]=\"enrollementPayload.custodian\">\r\n <option [ngValue]=\"\">Select Custodian</option>\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Enter Your Address -->\r\n <div class=\"section-title\">Enter Your Address</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\"\r\n (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\r\n (ngModelChange)=\"getCityByStateId()\">\r\n <option [ngValue]=\"\">Select State</option>\r\n <ng-container *ngFor=\"let state of stateData\">\r\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\r\n <option [ngValue]=\"\">Select City</option>\r\n <ng-container *ngFor=\"let city of cityData\">\r\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\r\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\"\r\n (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Enter Nominee Details</div>\r\n\r\n <div class=\"mb-3\">\r\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\"\r\n (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\r\n class=\"required\">*</span></label>\r\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\r\n <!-- <option value=\"\">Select Relationship</option> -->\r\n <option value=\"Spouse\">Spouse</option>\r\n <option value=\"Child\">Child</option>\r\n <option value=\"Mother\">Mother</option>\r\n <option value=\"Father\">Father</option>\r\n <option value=\"Sibling\">Sibling</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\r\n\r\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\r\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\"\r\n (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\"\r\n [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title\">Account Information</div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\r\n class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\"\r\n (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\"\r\n [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\"\r\n (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\r\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\r\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\"\r\n (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\r\n </div>\r\n </div>\r\n <div class=\"d-grid mt-4\">\r\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\r\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\r\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\r\n [buttonData]=\"getButtonContent(0)\">Submit\r\n Enrollment</button>\r\n </div>\r\n <div *ngIf=\"validator\" [class.error-color]=\"validator\">Fill all mandatory fields to proceed*</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Add this block in your Angular payment step (page === 'PAYMENT') -->\r\n <!-- payment-simulation.component.html -->\r\n <div class=\"container-fluid min-vh-100 d-flex align-items-center justify-content-center bg-light\"\r\n *ngIf=\"page === 'PAYMENT'\">\r\n <div class=\"payment-container\">\r\n\r\n <!-- Header -->\r\n <div class=\"payment-header mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <h1 class=\"payment-title\">Payment Method</h1>\r\n <span class=\"badge bg-success rounded-pill px-3 py-2\">Credit Card</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Credit Card -->\r\n <div class=\"credit-card mb-4\">\r\n <div class=\"card-inner\">\r\n <div class=\"card-shine\"></div>\r\n <div class=\"card-content\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-4\">\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"visa-logo\"></div>\r\n <span class=\"visa-text\">VISA</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cardholder-name mb-4\">\r\n turquoisecoyote\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <div class=\"card-dots\">\r\n <span class=\"dot\" *ngFor=\"let dot of [1,2,3,4,5,6,7,8,9,10,11,12]\"></span>\r\n </div>\r\n <span class=\"card-number\">1111</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- OTP Section -->\r\n <div class=\"otp-section mb-4\">\r\n <p class=\"otp-label\">Enter OTP sent to your xxx xxx 4839</p>\r\n <input type=\"text\" class=\"form-control otp-input\" placeholder=\"Enter OTP\">\r\n <small class=\"text-muted mt-2 d-block\">Hint: OTP is 111000</small>\r\n </div>\r\n\r\n <!-- Simulation Buttons -->\r\n <div class=\"row g-3 mb-4\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-danger btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('failure')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate failure\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('success')\"\r\n [disabled]=\"isProcessing\">\r\n Simulate success\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Processing State -->\r\n <div *ngIf=\"isProcessing\" class=\"d-flex align-items-center justify-content-center py-3\">\r\n <div class=\"spinner-border text-primary me-3\" role=\"status\" style=\"width: 1.5rem; height: 1.5rem;\">\r\n </div>\r\n <span class=\"text-muted\">Processing payment...</span>\r\n </div>\r\n\r\n <!-- Result Alert -->\r\n <div *ngIf=\"result && showResult\" class=\"alert text-center result-alert\" [ngClass]=\"{\r\n 'alert-success': result.type === 'success',\r\n 'alert-danger': result.type === 'failure'\r\n }\">\r\n <strong>{{ result.title }}</strong> {{ result.message }}\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"text-center mt-4\">\r\n <small class=\"text-muted\">\r\n Click buttons to simulate payment scenarios\r\n </small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.error-color{color:#e53e3e!important;font-weight:600;font-size:13px}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}.payment-container{width:100%;max-width:430px;padding:20px}.payment-title{font-size:2rem;font-weight:700;color:#333;margin:0}.credit-card{perspective:1000px}.card-inner{background:linear-gradient(135deg,#2d3748,#1a202c);border-radius:20px;padding:30px;position:relative;overflow:hidden;box-shadow:0 20px 40px #0000004d;color:#fff;min-height:200px}.card-shine{position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.1) 45%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.1) 55%,transparent 100%);pointer-events:none}.card-content{position:relative;z-index:2}.visa-logo{width:32px;height:20px;background:#fff;border-radius:3px}.visa-text{font-weight:700;font-size:1.2rem;letter-spacing:2px}.cardholder-name{font-size:1.1rem;letter-spacing:1px;text-transform:lowercase}.card-dots{display:flex;gap:4px}.dot{width:8px;height:8px;background:#fff;border-radius:50%;display:inline-block}.card-number{font-family:Courier New,monospace;font-size:1.3rem;font-weight:700;letter-spacing:3px}.otp-section{margin:30px 0}.otp-label{color:#6c757d;margin-bottom:12px;font-size:.95rem}.otp-input{padding:16px 20px;border-radius:12px;border:2px solid #e9ecef;font-size:1.1rem;transition:all .3s ease}.otp-input:focus{border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.simulation-btn{padding:16px 20px;border-radius:12px;font-weight:700;font-size:1rem;transition:all .3s ease;border:none;white-space:nowrap}.simulation-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #00000026}.simulation-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-danger.simulation-btn{background:linear-gradient(135deg,#dc3545,#c82333)}.btn-success.simulation-btn{background:linear-gradient(135deg,#28a745,#20c997)}.result-alert{border-radius:12px;padding:16px 20px;border:none;font-weight:500;animation:slideInUp .3s ease-out}.alert-success{background:linear-gradient(135deg,#d4edda,#c3e6cb);color:#155724;border-left:4px solid #28a745}.alert-danger{background:linear-gradient(135deg,#f8d7da,#f5c6cb);color:#721c24;border-left:4px solid #dc3545}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.payment-container{padding:15px}.payment-title{font-size:1.5rem}.card-inner{padding:25px;min-height:180px}.simulation-btn{padding:14px 16px;font-size:.9rem}.form-container{width:100%!important}}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"] }]
393
+ ], template: "<div class=\"total-container position-relative\" simpoHover (hovering)=\"showEditTabs($event)\" [id]=\"data?.id\">\n <div class=\"container py-5\" *ngIf=\"page === 'ENROLLMENT'\">\n <div class=\"form-container\">\n <div class=\"section-title\">Customer Information</div>\n\n <div class=\"mb-3\">\n <label for=\"fullName\" class=\"form-label\">Full Name <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"fullName\" required\n [(ngModel)]=\"enrollementPayload.name\" (ngModelChange)=\"validateForm('NAME')\"\n [class.error-border]=\"!validObject['NAME']\">\n </div>\n\n <div class=\"mb-3\">\n <label for=\"email\" class=\"form-label\">Email Address <span class=\"required\">*</span></label>\n <input type=\"email\" class=\"form-control custom-form-control\" id=\"email\" required\n [(ngModel)]=\"enrollementPayload.mailId\" (ngModelChange)=\"validateForm('EMAIL')\"\n [class.error-border]=\"!validObject['EMAIL']\">\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"mobile\" class=\"form-label\">Mobile <span class=\"required\">*</span></label>\n <input type=\"tel\" class=\"form-control custom-form-control\" id=\"mobile\" required\n [(ngModel)]=\"enrollementPayload.mobileNumber\" (ngModelChange)=\"validateForm('MOBILE')\"\n [class.error-border]=\"!validObject['MOBILE']\">\n </div>\n <div class=\"col-md-6\">\n <label for=\"dateOfBirth\" class=\"form-label\">Date of Birth <span class=\"required\">*</span></label>\n <input type=\"date\" class=\"form-control custom-form-control\" id=\"dateOfBirth\" required\n [(ngModel)]=\"enrollementPayload.dateOfBirth\" (ngModelChange)=\"validateForm('DOB')\"\n [class.error-border]=\"!validObject['DOB']\">\n </div>\n </div>\n\n <!-- Scheme Information -->\n <div class=\"section-title\">Scheme Information</div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"scheme\" class=\"form-label\">Scheme <span class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" id=\"scheme\" required [(ngModel)]=\"selectedScheme\"\n (ngModelChange)=\"setMonthlyInstallmentAmount()\">\n <option [ngValue]=\"\">Select Scheme</option>\n <ng-container *ngFor=\"let scheme of schemesData\">\n <option [ngValue]=\"scheme\">{{scheme.schemeName ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n <div class=\"col-md-6\">\n <label for=\"monthlyAmount\" class=\"form-label\">Monthly Amount <span class=\"required\">*</span></label>\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"monthlyAmount\" required disabled\n *ngIf=\"selectedScheme?.schemeType == 'INDIVIDUAL'\"\n [(ngModel)]=\"enrollementPayload.monthlyInstallmentAmount\">\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\n *ngIf=\"selectedScheme?.schemeType == 'GROUP'\"\n [(ngModel)]=\"enrollementPayload.enrolledGroup.schemeSlab\">\n <option [ngValue]=\"\">Select Amount Plan</option>\n <ng-container *ngFor=\"let slab of selectedScheme.schemeSlabs\">\n <option [ngValue]=\"slab\">{{slab.monthlyInstallmentAmount ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n </div>\n\n <!-- Store Information -->\n <div class=\"section-title\">Store Information</div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" id=\"subdivision\" required\n [(ngModel)]=\"enrollementPayload.storeDetails\" (ngModelChange)=\"getStaffById()\">\n <option [ngValue]=\"\">Select Store</option>\n <ng-container *ngFor=\"let store of storeData\">\n <option [ngValue]=\"store\">{{store.storeName ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n <div class=\"col-md-6\">\n <label for=\"subdivision\" class=\"form-label\">Custodian</label>\n <select class=\"form-select custom-form-select\" id=\"subdivision\"\n [(ngModel)]=\"enrollementPayload.custodian\">\n <option [ngValue]=\"\">Select Custodian</option>\n <ng-container *ngFor=\"let staff of staffData\">\n <option [ngValue]=\"staff\">{{staff.personalInfo.name ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n </div>\n\n <!-- Enter Your Address -->\n <div class=\"section-title\">Enter Your Address</div>\n\n <div class=\"mb-3\">\n <label for=\"address\" class=\"form-label\">Address <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"address\" required\n [(ngModel)]=\"enrollementPayload.addressDetails.addressLine\"\n (ngModelChange)=\"validateForm('ADDRESS')\" [class.error-border]=\"!validObject['ADDRESS']\">\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"state\" class=\"form-label\">State <span class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.state\"\n (ngModelChange)=\"getCityByStateId()\">\n <option [ngValue]=\"\">Select State</option>\n <ng-container *ngFor=\"let state of stateData\">\n <option [ngValue]=\"state\">{{state.name ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n <div class=\"col-md-6\">\n <label for=\"city\" class=\"form-label\">City <span class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" [(ngModel)]=\"enrollementPayload.addressDetails.city\">\n <option [ngValue]=\"\">Select City</option>\n <ng-container *ngFor=\"let city of cityData\">\n <option [ngValue]=\"city\">{{city.name ?? \"-\"}}</option>\n </ng-container>\n </select>\n </div>\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"pincode\" class=\"form-label\">Pincode <span class=\"required\">*</span></label>\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"pincode\" required\n [(ngModel)]=\"enrollementPayload.addressDetails.pinCode\"\n (ngModelChange)=\"validateForm('PINCODE')\" [class.error-border]=\"!validObject['PINCODE']\">\n </div>\n </div>\n\n <div class=\"section-title\">Enter Nominee Details</div>\n\n <div class=\"mb-3\">\n <label for=\"nomineeName\" class=\"form-label\">Full Name of Nominee <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"nomineeName\" required\n [(ngModel)]=\"enrollementPayload.nomineeDetails.nomineeName\"\n (ngModelChange)=\"validateForm('NOMINEE_NAME')\" [class.error-border]=\"!validObject['NOMINEE_NAME']\">\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"relationship\" class=\"form-label\">Select Relationship <span\n class=\"required\">*</span></label>\n <select class=\"form-select custom-form-select\" id=\"relationship\" required\n [(ngModel)]=\"enrollementPayload.nomineeDetails.relationShip\">\n <!-- <option value=\"\">Select Relationship</option> -->\n <option value=\"Spouse\">Spouse</option>\n <option value=\"Child\">Child</option>\n <option value=\"Mother\">Mother</option>\n <option value=\"Father\">Father</option>\n <option value=\"Sibling\">Sibling</option>\n </select>\n </div>\n <div class=\"col-md-6\">\n <label for=\"nomineePhone\" class=\"form-label\">Mobile Number <span class=\"required\">*</span></label>\n\n <input type=\"number\" class=\"form-control custom-form-control\" id=\"nomineePhone\" required\n [(ngModel)]=\"enrollementPayload.nomineeDetails.mobile\"\n (ngModelChange)=\"validateForm('NOMINEE_MOBILE')\"\n [class.error-border]=\"!validObject['NOMINEE_MOBILE']\">\n </div>\n </div>\n\n <div class=\"section-title\">Account Information</div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"accountHolder\" class=\"form-label\">Account Holder Name <span\n class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountHolder\" required\n [(ngModel)]=\"enrollementPayload.bankDetails.accountHolderName\"\n (ngModelChange)=\"validateForm('ACCOUNT_HOLDER_NAME')\"\n [class.error-border]=\"!validObject['ACCOUNT_HOLDER_NAME']\">\n </div>\n <div class=\"col-md-6\">\n <label for=\"accountNumber\" class=\"form-label\">Account Number <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"accountNumber\" required\n [(ngModel)]=\"enrollementPayload.bankDetails.accountNumber\"\n (ngModelChange)=\"validateForm('ACCOUNT_NUMBER')\"\n [class.error-border]=\"!validObject['ACCOUNT_NUMBER']\">\n </div>\n </div>\n\n <div class=\"row mb-3\">\n <div class=\"col-md-6\">\n <label for=\"bankName\" class=\"form-label\">Bank Name <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"bankName\" required\n [(ngModel)]=\"enrollementPayload.bankDetails.bankName\"\n (ngModelChange)=\"validateForm('BANK_NAME')\" [class.error-border]=\"!validObject['BANK_NAME']\">\n </div>\n <div class=\"col-md-6\">\n <label for=\"ifscCode\" class=\"form-label\">IFSC Code <span class=\"required\">*</span></label>\n <input type=\"text\" class=\"form-control custom-form-control\" id=\"ifscCode\" required\n [(ngModel)]=\"enrollementPayload.bankDetails.ifscCode\"\n (ngModelChange)=\"validateForm('IFSC_CODE')\" [class.error-border]=\"!validObject['IFSC_CODE']\">\n </div>\n </div>\n <div class=\"d-grid mt-4\">\n <button type=\"submit\" class=\"btn btn-submit\" (click)=\"createEnrollment()\"\n [appButtonEditor]=\"edit ?? false\" simpoButtonDirective [buttonStyle]=\"getButtonStyle(0)\"\n [buttonId]=\"getButtonId(0)\" [sectionId]=\"data?.id\" [id]=\"data?.id+getButtonId(0)\"\n [buttonData]=\"getButtonContent(0)\">Submit\n Enrollment</button>\n </div>\n <div *ngIf=\"validator\" [class.error-color]=\"validator\">Fill all mandatory fields to proceed*</div>\n </div>\n </div>\n\n <!-- Add this block in your Angular payment step (page === 'PAYMENT') -->\n <!-- payment-simulation.component.html -->\n <div class=\"container-fluid min-vh-100 d-flex align-items-center justify-content-center bg-light\"\n *ngIf=\"page === 'PAYMENT'\">\n <div class=\"payment-container\">\n\n <!-- Header -->\n <div class=\"payment-header mb-4\">\n <div class=\"d-flex align-items-center justify-content-between\">\n <h1 class=\"payment-title\">Payment Method</h1>\n <span class=\"badge bg-success rounded-pill px-3 py-2\">Credit Card</span>\n </div>\n </div>\n\n <!-- Credit Card -->\n <div class=\"credit-card mb-4\">\n <div class=\"card-inner\">\n <div class=\"card-shine\"></div>\n <div class=\"card-content\">\n <div class=\"d-flex align-items-center justify-content-between mb-4\">\n <div class=\"d-flex align-items-center gap-2\">\n <div class=\"visa-logo\"></div>\n <span class=\"visa-text\">VISA</span>\n </div>\n </div>\n\n <div class=\"cardholder-name mb-4\">\n turquoisecoyote\n </div>\n\n <div class=\"d-flex align-items-center justify-content-between\">\n <div class=\"card-dots\">\n <span class=\"dot\" *ngFor=\"let dot of [1,2,3,4,5,6,7,8,9,10,11,12]\"></span>\n </div>\n <span class=\"card-number\">1111</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- OTP Section -->\n <div class=\"otp-section mb-4\">\n <p class=\"otp-label\">Enter OTP sent to your xxx xxx 4839</p>\n <input type=\"text\" class=\"form-control otp-input\" placeholder=\"Enter OTP\">\n <small class=\"text-muted mt-2 d-block\">Hint: OTP is 111000</small>\n </div>\n\n <!-- Simulation Buttons -->\n <div class=\"row g-3 mb-4\">\n <div class=\"col-6\">\n <button class=\"btn btn-danger btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('failure')\"\n [disabled]=\"isProcessing\">\n Simulate failure\n </button>\n </div>\n <div class=\"col-6\">\n <button class=\"btn btn-success btn-lg w-100 simulation-btn\" (click)=\"simulatePayment('success')\"\n [disabled]=\"isProcessing\">\n Simulate success\n </button>\n </div>\n </div>\n\n <!-- Processing State -->\n <div *ngIf=\"isProcessing\" class=\"d-flex align-items-center justify-content-center py-3\">\n <div class=\"spinner-border text-primary me-3\" role=\"status\" style=\"width: 1.5rem; height: 1.5rem;\">\n </div>\n <span class=\"text-muted\">Processing payment...</span>\n </div>\n\n <!-- Result Alert -->\n <div *ngIf=\"result && showResult\" class=\"alert text-center result-alert\" [ngClass]=\"{\n 'alert-success': result.type === 'success',\n 'alert-danger': result.type === 'failure'\n }\">\n <strong>{{ result.title }}</strong> {{ result.message }}\n </div>\n\n <!-- Footer -->\n <div class=\"text-center mt-4\">\n <small class=\"text-muted\">\n Click buttons to simulate payment scenarios\n </small>\n </div>\n\n </div>\n </div>\n\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n</div>", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.form-container{width:60%;border-radius:12px;padding:30px;margin:0 auto;box-shadow:0 2px 10px #0000001a}.section-title{font-size:18px;font-weight:600;margin-bottom:20px;margin-top:30px}.section-title:first-child{margin-top:0}.custom-form-control{border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;transition:all .2s}.custom-form-control:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-control::placeholder{color:#a0aec0;font-weight:400}.custom-form-control.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.custom-form-select{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;font-size:14px;color:#2d3748;font-weight:500;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e\");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;appearance:none}.custom-form-select:focus{background-color:#f7fafc;border-color:#667eea;box-shadow:0 0 0 .2rem #667eea40}.custom-form-select.filled{background-color:#edf2f7;border-color:#cbd5e0;font-weight:600}.form-label{font-size:14px;font-weight:500;color:#718096;margin-bottom:8px}.required{color:#e53e3e}.phone-input-group{display:flex;gap:0}.phone-code{background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px 0 0 8px;border-right:none;padding:12px 16px;display:flex;align-items:center;gap:8px;font-size:14px;color:#4a5568;font-weight:500}.phone-code:after{content:\"\\25bc\";color:#a0aec0;font-size:12px}.error-border{border:2px solid #e53e3e!important}.error-color{color:#e53e3e!important;font-weight:600;font-size:13px}.phone-input-group .custom-form-control{border-radius:0 8px 8px 0;border-left:none}.radio-group{display:flex;gap:12px;margin-top:12px}.radio-option{flex:1;background-color:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;padding:16px;cursor:pointer;transition:all .2s;position:relative}.radio-option:hover{background-color:#edf2f7}.radio-option.selected{background-color:#e6fffa;border-color:#38b2ac}.radio-option input[type=radio]{position:absolute;opacity:0;cursor:pointer}.radio-option .radio-circle{width:20px;height:20px;border:2px solid #cbd5e0;border-radius:50%;position:absolute;top:16px;right:16px;background:#fff}.radio-option.selected .radio-circle{border-color:#38b2ac}.radio-option.selected .radio-circle:after{content:\"\";width:10px;height:10px;background:#38b2ac;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.radio-option label{font-size:14px;font-weight:500;color:#4a5568;cursor:pointer;display:block;margin-bottom:0;padding-right:30px}.btn-submit{border:none;padding:14px 30px;border-radius:8px;font-weight:600;font-size:16px;transition:transform .2s}.btn-submit:hover{transform:translateY(-1px);color:#fff}.mb-3{margin-bottom:1rem!important}.mt-4{margin-top:1.5rem!important}.payment-card{max-width:500px;width:100%;border-radius:15px;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2}.card-header{background:linear-gradient(135deg,#007bff,#0056b3)!important;border-bottom:none}.payment-btn{position:relative;overflow:hidden;border:none;border-radius:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;transition:all .3s ease;box-shadow:0 4px 15px #0003}.payment-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #0000004d}.payment-btn:active:not(:disabled){transform:translateY(0)}.payment-btn:disabled{opacity:.6;cursor:not-allowed;transform:none!important}.btn-overlay{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);transition:left .5s}.payment-btn:hover:not(:disabled) .btn-overlay{left:100%}.btn-success{background:linear-gradient(45deg,#28a745,#20c997);border-color:#28a745}.btn-success:hover:not(:disabled){background:linear-gradient(45deg,#218838,#1aa085);border-color:#1e7e34}.btn-danger{background:linear-gradient(45deg,#dc3545,#e74c3c);border-color:#dc3545}.btn-danger:hover:not(:disabled){background:linear-gradient(45deg,#c82333,#d62c1a);border-color:#bd2130}.alert{border:none;border-radius:10px;font-weight:500;box-shadow:0 4px 15px #0000001a}.alert-success{background:linear-gradient(45deg,#d4edda,#c3e6cb);color:#155724}.alert-danger{background:linear-gradient(45deg,#f8d7da,#f5c6cb);color:#721c24}.min-vh-100{min-height:100vh}.card-footer{background:#f8f9facc!important;border-top:1px solid rgba(0,0,0,.125)}body{background:linear-gradient(135deg,#667eea,#764ba2);font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.alert.show{animation:fadeInUp .3s ease-out}.spinner-border{width:1.5rem;height:1.5rem}.payment-container{width:100%;max-width:430px;padding:20px}.payment-title{font-size:2rem;font-weight:700;color:#333;margin:0}.credit-card{perspective:1000px}.card-inner{background:linear-gradient(135deg,#2d3748,#1a202c);border-radius:20px;padding:30px;position:relative;overflow:hidden;box-shadow:0 20px 40px #0000004d;color:#fff;min-height:200px}.card-shine{position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.1) 45%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.1) 55%,transparent 100%);pointer-events:none}.card-content{position:relative;z-index:2}.visa-logo{width:32px;height:20px;background:#fff;border-radius:3px}.visa-text{font-weight:700;font-size:1.2rem;letter-spacing:2px}.cardholder-name{font-size:1.1rem;letter-spacing:1px;text-transform:lowercase}.card-dots{display:flex;gap:4px}.dot{width:8px;height:8px;background:#fff;border-radius:50%;display:inline-block}.card-number{font-family:Courier New,monospace;font-size:1.3rem;font-weight:700;letter-spacing:3px}.otp-section{margin:30px 0}.otp-label{color:#6c757d;margin-bottom:12px;font-size:.95rem}.otp-input{padding:16px 20px;border-radius:12px;border:2px solid #e9ecef;font-size:1.1rem;transition:all .3s ease}.otp-input:focus{border-color:#007bff;box-shadow:0 0 0 .2rem #007bff40}.simulation-btn{padding:16px 20px;border-radius:12px;font-weight:700;font-size:1rem;transition:all .3s ease;border:none;white-space:nowrap}.simulation-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #00000026}.simulation-btn:disabled{opacity:.6;cursor:not-allowed;transform:none}.btn-danger.simulation-btn{background:linear-gradient(135deg,#dc3545,#c82333)}.btn-success.simulation-btn{background:linear-gradient(135deg,#28a745,#20c997)}.result-alert{border-radius:12px;padding:16px 20px;border:none;font-weight:500;animation:slideInUp .3s ease-out}.alert-success{background:linear-gradient(135deg,#d4edda,#c3e6cb);color:#155724;border-left:4px solid #28a745}.alert-danger{background:linear-gradient(135deg,#f8d7da,#f5c6cb);color:#721c24;border-left:4px solid #dc3545}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.payment-container{padding:15px}.payment-title{font-size:1.5rem}.card-inner{padding:25px;min-height:180px}.simulation-btn{padding:14px 16px;font-size:.9rem}.form-container{width:100%!important}}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}\n"] }]
394
394
  }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.ActivatedRoute }, { type: i3.StorageServiceService }, { type: i2.Router }], propDecorators: { data: [{
395
395
  type: Input
396
396
  }], edit: [{
@@ -402,4 +402,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
402
402
  }], index: [{
403
403
  type: Input
404
404
  }] } });
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsbWVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL2Vucm9sbG1lbnQtZm9ybS9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZW5yb2xsbWVudC1mb3JtL2Vucm9sbG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxp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QkF0Qm5DLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLE9BQU87cUJBQ1I7c0tBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBOZ01vZHVsZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi8uLi8uLi9zZWN0aW9ucy9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFbnJvbGxtZW50Rm9ybU1vZGVsLCBFbnJvbGxtZW50Rm9ybVN0eWxlTW9kZWwgfSBmcm9tICcuL2Vucm9sbG1lbnQtZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi8uLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1lbnJvbGxtZW50LWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0SWNvbixcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRWRpdG9yRGlyZWN0aXZlLFxyXG4gICAgTWF0SWNvblxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Vucm9sbG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2Vucm9sbG1lbnQtZm9ybS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW5yb2xsbWVudEZvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGE/OiBFbnJvbGxtZW50Rm9ybU1vZGVsO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIHN0eWxlcz86IEVucm9sbG1lbnRGb3JtU3R5bGVNb2RlbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY2hlY2tVc2VyTG9nZ2VkSW4oKTtcclxuICAgIHRoaXMuZ2V0U2NoZW1lcygpO1xyXG4gICAgdGhpcy5nZXRBbGxTdG9yZXMoKTtcclxuICAgIHRoaXMuZ2V0QWxsU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrVXNlckxvZ2dlZEluKCkge1xyXG4gICAgaWYgKCF0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddLCB7IHF1ZXJ5UGFyYW1zOiB7IHNjaGVtZXM6IHRydWUgfSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCAgdXNlciAgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlPy5nZXRVc2VyKClcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubmFtZSA9IHVzZXI/LmNvbnRhY3Q/Lm5hbWVcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubWFpbElkID0gdXNlcj8uY29udGFjdD8uZW1haWxcclxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9iaWxlTnVtYmVyID0gdXNlcj8uY29udGFjdD8ubW9iaWxlXHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLnB3Y1VzZXJDb2RlID0gdXNlcj8ucHdjVXNlckNvZGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBhZ2U6ICdFTlJPTExNRU5UJyB8ICdQQVlNRU5UJyA9ICdFTlJPTExNRU5UJztcclxuXHJcbiAgZW5yb2xsZW1lbnRQYXlsb2FkOiBhbnkgPSB7XHJcbiAgICBuYW1lOiBcIlwiLFxyXG4gICAgbWFpbElkOiBcIlwiLFxyXG4gICAgbW9iaWxlTnVtYmVyOiBcIlwiLFxyXG4gICAgZGF0ZU9mQmlydGg6IFwiXCIsXHJcbiAgICBzY2hlbWVEZXRhaWxzOiB7XHJcbiAgICAgIHNjaGVtZUlkOiBcIlwiLFxyXG4gICAgICBzY2hlbWVOYW1lOiBcIlwiLFxyXG4gICAgICBzY2hlbWVUeXBlOiBcIlwiLFxyXG4gICAgICBwd2NTY2hlbWVDb2RlOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgcHdjVXNlckNvZGU6IFwiXCIsXHJcbiAgICBhZGRyZXNzRGV0YWlsczoge1xyXG4gICAgICBzdGF0ZToge1xyXG4gICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgIG5hbWU6IFwiXCJcclxuICAgICAgfSxcclxuICAgICAgY2l0eToge1xyXG4gICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgIG5hbWU6IFwiXCJcclxuICAgICAgfSxcclxuICAgICAgYWRkcmVzc0xpbmU6IFwiXCIsXHJcbiAgICAgIHBpbkNvZGU6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwaW5jb2RlJykgfHwgMCxcclxuICAgIH0sXHJcbiAgICBiYW5rRGV0YWlsczoge1xyXG4gICAgICBiYW5rTmFtZTogXCJcIixcclxuICAgICAgYWNjb3VudE51bWJlcjogMCxcclxuICAgICAgaWZzY0NvZGU6IFwiXCIsXHJcbiAgICAgIGFjY291bnRIb2xkZXJOYW1lOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgbm9taW5lZURldGFpbHM6IHtcclxuICAgICAgbm9taW5lZU5hbWU6IFwiXCIsXHJcbiAgICAgIG1vYmlsZTogXCJcIixcclxuICAgICAgcmVsYXRpb25TaGlwOiBcIkZhdGhlclwiLFxyXG4gICAgfSxcclxuICAgIGN1c3RvZGlhbjoge1xyXG4gICAgICBzdGFmZklkOiBcIlwiLFxyXG4gICAgICBzdGFmZk5hbWU6IFwiXCIsXHJcbiAgICAgIG1vYmlsZU51bWJlcjogXCJcIixcclxuICAgICAgZW1haWw6IFwiXCIsXHJcbiAgICAgIHN0YWZmQ29kZTogXCJcIixcclxuICAgICAgcHJvZmlsZUltZ1VybDogXCJcIlxyXG4gICAgfSxcclxuICAgIHN0b3JlRGV0YWlsczoge30sXHJcbiAgICBlbnJvbGxlZEdyb3VwOiB7fSxcclxuICAgIG1vbnRobHlJbnN0YWxsbWVudEFtb3VudDogMCxcclxuICAgIHB3Y1N0b3JlQ29kZTogXCJcIixcclxuICAgIHN1YnNjcmlwdGlvbkNoYXJnZURhdGU6IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpXHJcbiAgfVxyXG5cclxuICBzY2hlbWVzRGF0YTogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRTY2hlbWU6IGFueTtcclxuICBnZXRTY2hlbWVzKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRBbGxTY2hlbWUoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc2NoZW1lc0RhdGEgPSByZXM/LmRhdGEgfHwgW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTY2hlbWUgPSB0aGlzLnNjaGVtZXNEYXRhWzBdO1xyXG4gICAgICB0aGlzLnNldE1vbnRobHlJbnN0YWxsbWVudEFtb3VudCgpO1xyXG4gICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc2NoZW1lczogXCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgc3RvcmVEYXRhOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZFN0b3JlOiBhbnk7XHJcbiAgZ2V0QWxsU3RvcmVzKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRBbGxTdG9yZXNPcnJhKDAsIDEwMDAwKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmVEYXRhID0gcmVzPy5kYXRhPy5kYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5zdG9yZURldGFpbHMgPSB0aGlzLnN0b3JlRGF0YVswXTtcclxuICAgICAgdGhpcy5nZXRTdGFmZkJ5SWQoKTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0b3JlczogXCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgc3RhZmZEYXRhOiBhbnkgPSBbXTtcclxuICBnZXRTdGFmZkJ5SWQoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldHN0YWZmQnlTdG9yZUlkKHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLnN0b3JlRGV0YWlscy5zdG9yZUlkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhZmZEYXRhID0gcmVzPy5kYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4gPSB0aGlzLnN0YWZmRGF0YVswXSB8fCB7fTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0YWZmOiBcIiwgZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgc3RhdGVEYXRhOiBhbnkgPSBbXTtcclxuICBnZXRBbGxTdGF0ZSgpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsU3RhdGUoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhdGVEYXRhID0gcmVzPy5kYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZSA9IHRoaXMuc3RhdGVEYXRhWzBdIHx8IHt9O1xyXG4gICAgICB0aGlzLmdldENpdHlCeVN0YXRlSWQoKTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0YXRlczogXCIsIGVycm9yKTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIGNpdHlEYXRhOiBhbnkgPSBbXTtcclxuICBnZXRDaXR5QnlTdGF0ZUlkKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRDaXR5QnlTdGF0ZUJ5cGFnaW5hdGVkKHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlLmlkLCAwLCAxMDAwMCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNpdHlEYXRhID0gcmVzPy5kYXRhLmRhdGEgfHwgW107XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLmNpdHkgPSB0aGlzLmNpdHlEYXRhWzBdIHx8IHt9O1xyXG4gICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgQ2l0aWVzOiBcIiwgZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2V0TW9udGhseUluc3RhbGxtZW50QW1vdW50KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTY2hlbWUuc2NoZW1lVHlwZSA9PSAnSU5ESVZJRFVBTCcgJiYgdGhpcy5zZWxlY3RlZFNjaGVtZS5taW5JbnN0YWxsbWVudEFtb3VudCkge1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5tb250aGx5SW5zdGFsbG1lbnRBbW91bnQgPSB0aGlzLnNlbGVjdGVkU2NoZW1lLm1pbkluc3RhbGxtZW50QW1vdW50O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRTdG9yZVNsYWJzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9yZVNsYWJzOiBhbnkgPSBbXTtcclxuICBnZXRTdG9yZVNsYWJzKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRTdG9yZUJ5U2xhYih7IHN0b3Jlc0xpc3Q6IHRoaXMuc2VsZWN0ZWRTY2hlbWUuc2NoZW1lU2xhYnNbMF0uc2xhYlN0b3JlcyB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmVTbGFicyA9IHJlcz8uZGF0YSB8fCBbXTtcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0b3JlIHNsYWJzOiBcIiwgZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gIH1cclxuICB2YWxpZGF0b3I6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGNyZWF0ZUVucm9sbG1lbnQoKSB7XHJcblxyXG4gICAgZm9yIChsZXQgZWxlIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsaWRPYmplY3QpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVyKGVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy52YWxpZE9iamVjdCkuc29tZSh2YWx1ZSA9PiAhdmFsdWUpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdG9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLnB3Y1N0b3JlQ29kZSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLnN0b3JlRGV0YWlscz8ucHdjU3RvcmVDb2RlIHx8IHRoaXMuc2VsZWN0ZWRTY2hlbWU/LnB3Y1N0b3JlQ29kZTtcclxuXHJcbiAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5zY2hlbWVEZXRhaWxzID0gWydzY2hlbWVJZCcsICdzY2hlbWVOYW1lJywgJ3NjaGVtZVR5cGUnLCAncHdjU2NoZW1lQ29kZSddLnJlZHVjZSgoYWNjOiBhbnksIGtleTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2NoZW1lW2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5zZWxlY3RlZFNjaGVtZVtrZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChrZXkgPT0gJ3B3Y1NjaGVtZUNvZGUnKSB7XHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLnNlbGVjdGVkU2NoZW1lPy5wd2NJbmRpdmlkdWFsU2NoZW1lQ29kZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwge30pO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2NoZW1lLnNjaGVtZVR5cGUgPT0gJ0dST1VQJykge1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnNjaGVtZUlkID0gdGhpcy5zZWxlY3RlZFNjaGVtZT8uc2NoZW1lSWQ7XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmVucm9sbGVkR3JvdXAuc2NoZW1lTmFtZSA9IHRoaXMuc2VsZWN0ZWRTY2hlbWU/LnNjaGVtZU5hbWU7XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmVucm9sbGVkR3JvdXAuc3RvcmVJZCA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5zdG9yZURldGFpbHM/LnN0b3JlSWQ7XHJcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmVucm9sbGVkR3JvdXAuc3RvcmVOYW1lID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LnN0b3JlRGV0YWlscz8uc3RvcmVOYW1lO1xyXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5tb250aGx5SW5zdGFsbG1lbnRBbW91bnQgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uZW5yb2xsZWRHcm91cD8uc2NoZW1lU2xhYj8ubW9udGhseUluc3RhbGxtZW50QW1vdW50O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZSA9IFsnaWQnLCAnbmFtZSddLnJlZHVjZSgoYWNjOiBhbnksIGtleTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuc3RhdGVba2V5XTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwge30pO1xyXG5cclxuXHJcbiAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5ID0gWydpZCcsICduYW1lJ10ucmVkdWNlKChhY2M6IGFueSwga2V5OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLmNpdHk/LltrZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLmNpdHlba2V5XTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwge30pO1xyXG5cclxuXHJcbiAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4gPSBbXHJcbiAgICAgICdzdGFmZklkJywgJ3N0YWZmTmFtZScsICdtb2JpbGVOdW1iZXInLCAnZW1haWwnLCAnc3RhZmZDb2RlJywgJ3Byb2ZpbGVJbWdVcmwnXHJcbiAgICBdLnJlZHVjZSgoYWNjOiBhbnksIGtleTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4/LltrZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbltrZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChrZXkgPT0gJ3N0YWZmTmFtZScpXHJcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4/LnBlcnNvbmFsSW5mbz8ubmFtZVxyXG4gICAgICBpZiAoa2V5ID09ICdtb2JpbGVOdW1iZXInKVxyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5jb250YWN0RGV0YWlscz8ubW9iaWxlXHJcbiAgICAgIGlmIChrZXkgPT0gJ2VtYWlsJylcclxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8uY29udGFjdERldGFpbHM/LmVtYWlsXHJcbiAgICAgIGlmIChrZXkgPT0gJ3Byb2ZpbGVJbWdVcmwnKVxyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5wZXJzb25hbEluZm8/LnByb2ZpbGVJbWFnZVxyXG4gICAgICBpZiAoa2V5ID09ICdzdGFmZkNvZGUnKVxyXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5zdGFmZldvcmtJbmZvPy5zdGFmZkNvZGU7XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcbiAgICB0aGlzLnBhZ2UgPSAnUEFZTUVOVCc7XHJcbiAgfVxyXG5cclxuICBzdWNjZXNzKCkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5jcmVhdGVFbnJvbGxtZW50U2NoZW1lKHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Byb2ZpbGUnXSlcclxuICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaW11bGF0ZVBheW1lbnQoJ2ZhaWx1cmUnKTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcmVzdWx0OiBhbnlcclxuICBzaG93UmVzdWx0ID0gdHJ1ZTtcclxuICBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuXHJcbiAgc2ltdWxhdGVQYXltZW50KHR5cGU6ICdzdWNjZXNzJyB8ICdmYWlsdXJlJykge1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93UmVzdWx0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlc3VsdCA9IHt9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICh0eXBlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdCA9IHtcclxuICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHRpdGxlOiAnUGF5bWVudCBTdWNjZXNzZnVsIScsXHJcbiAgICAgICAgICBtZXNzYWdlOiAnWW91ciB0cmFuc2FjdGlvbiBoYXMgYmVlbiBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5LicsXHJcbiAgICAgICAgICBpY29uQ2xhc3M6ICdmYXMgZmEtY2hlY2stY2lyY2xlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHQgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnZmFpbHVyZScsXHJcbiAgICAgICAgICB0aXRsZTogJ1BheW1lbnQgRmFpbGVkIScsXHJcbiAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgd2FzIGFuIGVycm9yIHByb2Nlc3NpbmcgeW91ciBwYXltZW50LiBQbGVhc2UgdHJ5IGFnYWluLicsXHJcbiAgICAgICAgICBpY29uQ2xhc3M6ICdmYXMgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUnXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dSZXN1bHQgPSB0cnVlO1xyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25JZChpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5hY3Rpb24/LmJ1dHRvbnNbaW5kZXhdPy5pZCA/PyBcIlwiO1xyXG4gIH1cclxuICBnZXRCdXR0b25TdHlsZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5hY3Rpb24/LmJ1dHRvbnNbaW5kZXhdPy5zdHlsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Db250ZW50KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmFjdGlvbj8uYnV0dG9uc1tpbmRleF0/LmNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgZGVib3VuY2VUaW1lcjogYW55O1xyXG4gIHZhbGlkYXRlRm9ybShmaWVsZFR5cGU6IHN0cmluZykge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lcik7XHJcbiAgICB0aGlzLmRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy52YWxpZGF0ZXIoZmllbGRUeXBlKVxyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcbiAgdmFsaWRPYmplY3Q6IGFueSA9IHtcclxuICAgIE5BTUU6IHRydWUsXHJcbiAgICBFTUFJTDogdHJ1ZSxcclxuICAgIE1PQklMRTogdHJ1ZSxcclxuICAgIERPQjogdHJ1ZSxcclxuICAgIFNDSEVNRTogdHJ1ZSxcclxuICAgIE1PTlRITFlfQU1PVU5UOiB0cnVlLFxyXG4gICAgU1RPUkU6IHRydWUsXHJcbiAgICBBRERSRVNTOiB0cnVlLFxyXG4gICAgU1RBVEU6IHRydWUsXHJcbiAgICBDSVRZOiB0cnVlLFxyXG4gICAgUElOQ09ERTogdHJ1ZSxcclxuICAgIE5PTUlORUVfTkFNRTogdHJ1ZSxcclxuICAgIE5PTUlORUVfTU9CSUxFOiB0cnVlLFxyXG4gICAgTk9NSU5FRV9SRUxBVElPTlNISVA6IHRydWUsXHJcbiAgICBCQU5LX05BTUU6IHRydWUsXHJcbiAgICBBQ0NPVU5UX05VTUJFUjogdHJ1ZSxcclxuICAgIElGU0NfQ09ERTogdHJ1ZSxcclxuICAgIEFDQ09VTlRfSE9MREVSX05BTUU6IHRydWUsXHJcbiAgfVxyXG4gIHZhbGlkYXRlcihmaWVsZFR5cGU6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSAnTkFNRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk5BTUUgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5uYW1lLnRyaW0oKS5sZW5ndGggPiAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0VNQUlMJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuRU1BSUwgPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1haWxJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnTU9CSUxFJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTU9CSUxFID0gL15cXGR7MTB9JC8udGVzdCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5tb2JpbGVOdW1iZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0RPQic6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkRPQiA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuZGF0ZU9mQmlydGg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnU0NIRU1FJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuU0NIRU1FID0gISF0aGlzLnNlbGVjdGVkU2NoZW1lO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ01PTlRITFlfQU1PVU5UJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTU9OVEhMWV9BTU9VTlQgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8ubW9udGhseUluc3RhbGxtZW50QW1vdW50ID4gMDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdTVE9SRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LlNUT1JFID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uc3RvcmVEZXRhaWxzPy5zdG9yZUlkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FERFJFU1MnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5BRERSRVNTID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYWRkcmVzc0RldGFpbHM/LmFkZHJlc3NMaW5lLnRyaW0oKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdTVEFURSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LlNUQVRFID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYWRkcmVzc0RldGFpbHM/LnN0YXRlPy5pZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdDSVRZJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuQ0lUWSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmFkZHJlc3NEZXRhaWxzPy5jaXR5Py5pZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdQSU5DT0RFJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuUElOQ09ERSA9IC9eXFxkezZ9JC8udGVzdCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYWRkcmVzc0RldGFpbHM/LnBpbkNvZGU/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ05PTUlORUVfTkFNRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk5PTUlORUVfTkFNRSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5ub21pbmVlRGV0YWlscz8ubm9taW5lZU5hbWU/LnRyaW0oKT8ubGVuZ3RoID4gMDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdOT01JTkVFX01PQklMRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk5PTUlORUVfTU9CSUxFID0gL15cXGR7MTB9JC8udGVzdCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8ubm9taW5lZURldGFpbHM/Lm1vYmlsZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnTk9NSU5FRV9SRUxBVElPTlNISVAnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OT01JTkVFX1JFTEFUSU9OU0hJUCA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/Lm5vbWluZWVEZXRhaWxzPy5yZWxhdGlvblNoaXA/LnRyaW0oKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdCQU5LX05BTUUnOiB7XHJcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5CQU5LX05BTUUgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5iYW5rRGV0YWlscz8uYmFua05hbWUudHJpbSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FDQ09VTlRfTlVNQkVSJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuQUNDT1VOVF9OVU1CRVIgPSAvXlxcZCskLy50ZXN0KHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5iYW5rRGV0YWlscz8uYWNjb3VudE51bWJlcj8udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnSUZTQ19DT0RFJzoge1xyXG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuSUZTQ19DT0RFID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYmFua0RldGFpbHM/Lmlmc2NDb2RlPy50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnQUNDT1VOVF9IT0xERVJfTkFNRSc6IHtcclxuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0LkFDQ09VTlRfSE9MREVSX05BTUUgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYmFua0RldGFpbHM/LmFjY291bnRIb2xkZXJOYW1lPy50cmltKCkubGVuZ3RoID4gMDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0b3RhbC1jb250YWluZXIgcG9zaXRpb24tcmVsYXRpdmVcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIFtpZF09XCJkYXRhPy5pZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBweS01XCIgKm5nSWY9XCJwYWdlID09PSAnRU5ST0xMTUVOVCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5DdXN0b21lciBJbmZvcm1hdGlvbjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmdWxsTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkZ1bGwgTmFtZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiZnVsbE5hbWVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm5hbWVcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ05BTUUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ05BTUUnXVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZW1haWxcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5FbWFpbCBBZGRyZXNzIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiZW1haWxcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm1haWxJZFwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnRU1BSUwnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0VNQUlMJ11cIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJtb2JpbGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Nb2JpbGUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRlbFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cIm1vYmlsZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm1vYmlsZU51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnTU9CSUxFJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnTU9CSUxFJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRhdGVPZkJpcnRoXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RGF0ZSBvZiBCaXJ0aCA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImRhdGVPZkJpcnRoXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuZGF0ZU9mQmlydGhcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0RPQicpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0RPQiddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFNjaGVtZSBJbmZvcm1hdGlvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5TY2hlbWUgSW5mb3JtYXRpb248L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNjaGVtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlNjaGVtZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInNjaGVtZVwiIHJlcXVpcmVkIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTY2hlbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRNb250aGx5SW5zdGFsbG1lbnRBbW91bnQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIlwiPlNlbGVjdCBTY2hlbWU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2NoZW1lIG9mIHNjaGVtZXNEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cInNjaGVtZVwiPnt7c2NoZW1lLnNjaGVtZU5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm1vbnRobHlBbW91bnRcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Nb250aGx5IEFtb3VudCA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwibW9udGhseUFtb3VudFwiIHJlcXVpcmVkIGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRTY2hlbWU/LnNjaGVtZVR5cGUgPT0gJ0lORElWSURVQUwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubW9udGhseUluc3RhbGxtZW50QW1vdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1mb3JtLXNlbGVjdFwiIGlkPVwic3ViZGl2aXNpb25cIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkU2NoZW1lPy5zY2hlbWVUeXBlID09ICdHUk9VUCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnNjaGVtZVNsYWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgQW1vdW50IFBsYW48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2xhYiBvZiBzZWxlY3RlZFNjaGVtZS5zY2hlbWVTbGFic1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzbGFiXCI+e3tzbGFiLm1vbnRobHlJbnN0YWxsbWVudEFtb3VudCA/PyBcIi1cIn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBTdG9yZSBJbmZvcm1hdGlvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5TdG9yZSBJbmZvcm1hdGlvbjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3RvcmVOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmUgTmFtZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInN1YmRpdmlzaW9uXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuc3RvcmVEZXRhaWxzXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZ2V0U3RhZmZCeUlkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgU3RvcmU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RvcmUgb2Ygc3RvcmVEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cInN0b3JlXCI+e3tzdG9yZS5zdG9yZU5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN1YmRpdmlzaW9uXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q3VzdG9kaWFuPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgY3VzdG9tLWZvcm0tc2VsZWN0XCIgaWQ9XCJzdWJkaXZpc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIlwiPlNlbGVjdCBDdXN0b2RpYW48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RhZmYgb2Ygc3RhZmZEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cInN0YWZmXCI+e3tzdGFmZi5wZXJzb25hbEluZm8ubmFtZSA/PyBcIi1cIn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBFbnRlciBZb3VyIEFkZHJlc3MgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RW50ZXIgWW91ciBBZGRyZXNzPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFkZHJlc3NcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5BZGRyZXNzIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJhZGRyZXNzXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5hZGRyZXNzTGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdBRERSRVNTJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnQUREUkVTUyddXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3RhdGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdGF0ZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImdldENpdHlCeVN0YXRlSWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIlwiPlNlbGVjdCBTdGF0ZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdGF0ZSBvZiBzdGF0ZURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwic3RhdGVcIj57e3N0YXRlLm5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNpdHlcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5DaXR5IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1mb3JtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLmNpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj5TZWxlY3QgQ2l0eTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaXR5IG9mIGNpdHlEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImNpdHlcIj57e2NpdHkubmFtZSA/PyBcIi1cIn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGluY29kZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpbmNvZGUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cInBpbmNvZGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5waW5Db2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdQSU5DT0RFJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnUElOQ09ERSddXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkVudGVyIE5vbWluZWUgRGV0YWlsczwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJub21pbmVlTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkZ1bGwgTmFtZSBvZiBOb21pbmVlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJub21pbmVlTmFtZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubm9taW5lZURldGFpbHMubm9taW5lZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnTk9NSU5FRV9OQU1FJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnTk9NSU5FRV9OQU1FJ11cIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZWxhdGlvbnNoaXBcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TZWxlY3QgUmVsYXRpb25zaGlwIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInJlbGF0aW9uc2hpcFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm5vbWluZWVEZXRhaWxzLnJlbGF0aW9uU2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgUmVsYXRpb25zaGlwPC9vcHRpb24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiU3BvdXNlXCI+U3BvdXNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDaGlsZFwiPkNoaWxkPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJNb3RoZXJcIj5Nb3RoZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkZhdGhlclwiPkZhdGhlcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiU2libGluZ1wiPlNpYmxpbmc8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5vbWluZWVQaG9uZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk1vYmlsZSBOdW1iZXIgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJub21pbmVlUGhvbmVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5ub21pbmVlRGV0YWlscy5tb2JpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ05PTUlORUVfTU9CSUxFJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnTk9NSU5FRV9NT0JJTEUnXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5BY2NvdW50IEluZm9ybWF0aW9uPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2NvdW50SG9sZGVyXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWNjb3VudCBIb2xkZXIgTmFtZSA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJhY2NvdW50SG9sZGVyXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYWNjb3VudEhvbGRlck5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0FDQ09VTlRfSE9MREVSX05BTUUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydBQ0NPVU5UX0hPTERFUl9OQU1FJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFjY291bnROdW1iZXJcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5BY2NvdW50IE51bWJlciA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImFjY291bnROdW1iZXJcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5iYW5rRGV0YWlscy5hY2NvdW50TnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdBQ0NPVU5UX05VTUJFUicpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0FDQ09VTlRfTlVNQkVSJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImJhbmtOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QmFuayBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYmFua05hbWVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5iYW5rRGV0YWlscy5iYW5rTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnQkFOS19OQU1FJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnQkFOS19OQU1FJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlmc2NDb2RlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+SUZTQyBDb2RlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiaWZzY0NvZGVcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5iYW5rRGV0YWlscy5pZnNjQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnSUZTQ19DT0RFJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnSUZTQ19DT0RFJ11cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZ3JpZCBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VibWl0XCIgKGNsaWNrKT1cImNyZWF0ZUVucm9sbG1lbnQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2J1dHRvblN0eWxlXT1cImdldEJ1dHRvblN0eWxlKDApXCJcclxuICAgICAgICAgICAgICAgICAgICBbYnV0dG9uSWRdPVwiZ2V0QnV0dG9uSWQoMClcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCIgW2lkXT1cImRhdGE/LmlkK2dldEJ1dHRvbklkKDApXCJcclxuICAgICAgICAgICAgICAgICAgICBbYnV0dG9uRGF0YV09XCJnZXRCdXR0b25Db250ZW50KDApXCI+U3VibWl0XHJcbiAgICAgICAgICAgICAgICAgICAgRW5yb2xsbWVudDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRvclwiIFtjbGFzcy5lcnJvci1jb2xvcl09XCJ2YWxpZGF0b3JcIj5GaWxsIGFsbCBtYW5kYXRvcnkgZmllbGRzIHRvIHByb2NlZWQqPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFkZCB0aGlzIGJsb2NrIGluIHlvdXIgQW5ndWxhciBwYXltZW50IHN0ZXAgKHBhZ2UgPT09ICdQQVlNRU5UJykgLS0+XHJcbiAgICA8IS0tIHBheW1lbnQtc2ltdWxhdGlvbi5jb21wb25lbnQuaHRtbCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgbWluLXZoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYmctbGlnaHRcIlxyXG4gICAgICAgICpuZ0lmPVwicGFnZSA9PT0gJ1BBWU1FTlQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBheW1lbnQtY29udGFpbmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEhlYWRlciAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBheW1lbnQtaGVhZGVyIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwicGF5bWVudC10aXRsZVwiPlBheW1lbnQgTWV0aG9kPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXN1Y2Nlc3Mgcm91bmRlZC1waWxsIHB4LTMgcHktMlwiPkNyZWRpdCBDYXJkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDcmVkaXQgQ2FyZCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyZWRpdC1jYXJkIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtc2hpbmVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpc2EtbG9nb1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzYS10ZXh0XCI+VklTQTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkaG9sZGVyLW5hbWUgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVycXVvaXNlY295b3RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWRvdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiICpuZ0Zvcj1cImxldCBkb3Qgb2YgWzEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLW51bWJlclwiPjExMTE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBPVFAgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm90cC1zZWN0aW9uIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwib3RwLWxhYmVsXCI+RW50ZXIgT1RQIHNlbnQgdG8geW91ciB4eHggeHh4IDQ4Mzk8L3A+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBvdHAtaW5wdXRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIE9UUFwiPlxyXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBtdC0yIGQtYmxvY2tcIj5IaW50OiBPVFAgaXMgMTExMDAwPC9zbWFsbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFNpbXVsYXRpb24gQnV0dG9ucyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTMgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi1sZyB3LTEwMCBzaW11bGF0aW9uLWJ0blwiIChjbGljayk9XCJzaW11bGF0ZVBheW1lbnQoJ2ZhaWx1cmUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU2ltdWxhdGUgZmFpbHVyZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1sZyB3LTEwMCBzaW11bGF0aW9uLWJ0blwiIChjbGljayk9XCJzaW11bGF0ZVBheW1lbnQoJ3N1Y2Nlc3MnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU2ltdWxhdGUgc3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBQcm9jZXNzaW5nIFN0YXRlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNQcm9jZXNzaW5nXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeSBtZS0zXCIgcm9sZT1cInN0YXR1c1wiIHN0eWxlPVwid2lkdGg6IDEuNXJlbTsgaGVpZ2h0OiAxLjVyZW07XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPlByb2Nlc3NpbmcgcGF5bWVudC4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFJlc3VsdCBBbGVydCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJlc3VsdCAmJiBzaG93UmVzdWx0XCIgY2xhc3M9XCJhbGVydCB0ZXh0LWNlbnRlciByZXN1bHQtYWxlcnRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAnYWxlcnQtc3VjY2Vzcyc6IHJlc3VsdC50eXBlID09PSAnc3VjY2VzcycsXHJcbiAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyJzogcmVzdWx0LnR5cGUgPT09ICdmYWlsdXJlJ1xyXG4gICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcmVzdWx0LnRpdGxlIH19PC9zdHJvbmc+IHt7IHJlc3VsdC5tZXNzYWdlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBGb290ZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xpY2sgYnV0dG9ucyB0byBzaW11bGF0ZSBwYXltZW50IHNjZW5hcmlvc1xyXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cclxuICAgICAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsbWVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWNvbW1lcmNlL3NlY3Rpb25zL2Vucm9sbG1lbnQtZm9ybS9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZW5yb2xsbWVudC1mb3JtL2Vucm9sbG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxp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QkF0Qm5DLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLE9BQU87cUJBQ1I7c0tBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBOZ01vZHVsZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvc3BhY2luZy1ob3Jpem9udGFsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFbnJvbGxtZW50Rm9ybU1vZGVsLCBFbnJvbGxtZW50Rm9ybVN0eWxlTW9kZWwgfSBmcm9tICcuL2Vucm9sbG1lbnQtZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBCdXR0b25FZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWVkaXRvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi8uLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaW1wby1lbnJvbGxtZW50LWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0SWNvbixcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcbiAgICBDb3JuZXJEaXJlY3RpdmUsXG4gICAgSG92ZXJEaXJlY3RpdmUsXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXG4gICAgQnV0dG9uRWRpdG9yRGlyZWN0aXZlLFxuICAgIE1hdEljb25cbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Vucm9sbG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9lbnJvbGxtZW50LWZvcm0uY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgRW5yb2xsbWVudEZvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiB7XG5cbiAgQElucHV0KCkgZGF0YT86IEVucm9sbG1lbnRGb3JtTW9kZWw7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xuICBzdHlsZXM/OiBFbnJvbGxtZW50Rm9ybVN0eWxlTW9kZWw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2hlY2tVc2VyTG9nZ2VkSW4oKTtcbiAgICB0aGlzLmdldFNjaGVtZXMoKTtcbiAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xuICAgIHRoaXMuZ2V0QWxsU3RhdGUoKTtcbiAgfVxuXG4gIGNoZWNrVXNlckxvZ2dlZEluKCkge1xuICAgIGlmICghdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10sIHsgcXVlcnlQYXJhbXM6IHsgc2NoZW1lczogdHJ1ZSB9IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgIHVzZXIgID0gdGhpcy5zdG9yYWdlU2VydmljZT8uZ2V0VXNlcigpXG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5uYW1lID0gdXNlcj8uY29udGFjdD8ubmFtZVxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubWFpbElkID0gdXNlcj8uY29udGFjdD8uZW1haWxcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1vYmlsZU51bWJlciA9IHVzZXI/LmNvbnRhY3Q/Lm1vYmlsZVxuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQucHdjVXNlckNvZGUgPSB1c2VyPy5wd2NVc2VyQ29kZVxuICAgIH1cbiAgfVxuXG4gIHBhZ2U6ICdFTlJPTExNRU5UJyB8ICdQQVlNRU5UJyA9ICdFTlJPTExNRU5UJztcblxuICBlbnJvbGxlbWVudFBheWxvYWQ6IGFueSA9IHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIG1haWxJZDogXCJcIixcbiAgICBtb2JpbGVOdW1iZXI6IFwiXCIsXG4gICAgZGF0ZU9mQmlydGg6IFwiXCIsXG4gICAgc2NoZW1lRGV0YWlsczoge1xuICAgICAgc2NoZW1lSWQ6IFwiXCIsXG4gICAgICBzY2hlbWVOYW1lOiBcIlwiLFxuICAgICAgc2NoZW1lVHlwZTogXCJcIixcbiAgICAgIHB3Y1NjaGVtZUNvZGU6IFwiXCJcbiAgICB9LFxuICAgIHB3Y1VzZXJDb2RlOiBcIlwiLFxuICAgIGFkZHJlc3NEZXRhaWxzOiB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICBpZDogXCJcIixcbiAgICAgICAgbmFtZTogXCJcIlxuICAgICAgfSxcbiAgICAgIGNpdHk6IHtcbiAgICAgICAgaWQ6IFwiXCIsXG4gICAgICAgIG5hbWU6IFwiXCJcbiAgICAgIH0sXG4gICAgICBhZGRyZXNzTGluZTogXCJcIixcbiAgICAgIHBpbkNvZGU6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwaW5jb2RlJykgfHwgMCxcbiAgICB9LFxuICAgIGJhbmtEZXRhaWxzOiB7XG4gICAgICBiYW5rTmFtZTogXCJcIixcbiAgICAgIGFjY291bnROdW1iZXI6IDAsXG4gICAgICBpZnNjQ29kZTogXCJcIixcbiAgICAgIGFjY291bnRIb2xkZXJOYW1lOiBcIlwiXG4gICAgfSxcbiAgICBub21pbmVlRGV0YWlsczoge1xuICAgICAgbm9taW5lZU5hbWU6IFwiXCIsXG4gICAgICBtb2JpbGU6IFwiXCIsXG4gICAgICByZWxhdGlvblNoaXA6IFwiRmF0aGVyXCIsXG4gICAgfSxcbiAgICBjdXN0b2RpYW46IHtcbiAgICAgIHN0YWZmSWQ6IFwiXCIsXG4gICAgICBzdGFmZk5hbWU6IFwiXCIsXG4gICAgICBtb2JpbGVOdW1iZXI6IFwiXCIsXG4gICAgICBlbWFpbDogXCJcIixcbiAgICAgIHN0YWZmQ29kZTogXCJcIixcbiAgICAgIHByb2ZpbGVJbWdVcmw6IFwiXCJcbiAgICB9LFxuICAgIHN0b3JlRGV0YWlsczoge30sXG4gICAgZW5yb2xsZWRHcm91cDoge30sXG4gICAgbW9udGhseUluc3RhbGxtZW50QW1vdW50OiAwLFxuICAgIHB3Y1N0b3JlQ29kZTogXCJcIixcbiAgICBzdWJzY3JpcHRpb25DaGFyZ2VEYXRlOiBuZXcgRGF0ZSgpLmdldERhdGUoKVxuICB9XG5cbiAgc2NoZW1lc0RhdGE6IGFueSA9IFtdO1xuICBzZWxlY3RlZFNjaGVtZTogYW55O1xuICBnZXRTY2hlbWVzKCkge1xuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsU2NoZW1lKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zY2hlbWVzRGF0YSA9IHJlcz8uZGF0YSB8fCBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTY2hlbWUgPSB0aGlzLnNjaGVtZXNEYXRhWzBdO1xuICAgICAgdGhpcy5zZXRNb250aGx5SW5zdGFsbG1lbnRBbW91bnQoKTtcbiAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNjaGVtZXM6IFwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgc3RvcmVEYXRhOiBhbnkgPSBbXTtcbiAgc2VsZWN0ZWRTdG9yZTogYW55O1xuICBnZXRBbGxTdG9yZXMoKSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRBbGxTdG9yZXNPcnJhKDAsIDEwMDAwKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLnN0b3JlRGF0YSA9IHJlcz8uZGF0YT8uZGF0YSB8fCBbXTtcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLnN0b3JlRGV0YWlscyA9IHRoaXMuc3RvcmVEYXRhWzBdO1xuICAgICAgdGhpcy5nZXRTdGFmZkJ5SWQoKTtcbiAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0b3JlczogXCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICBzdGFmZkRhdGE6IGFueSA9IFtdO1xuICBnZXRTdGFmZkJ5SWQoKSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRzdGFmZkJ5U3RvcmVJZCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5zdG9yZURldGFpbHMuc3RvcmVJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zdGFmZkRhdGEgPSByZXM/LmRhdGEgfHwgW107XG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4gPSB0aGlzLnN0YWZmRGF0YVswXSB8fCB7fTtcbiAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0YWZmOiBcIiwgZXJyb3IpO1xuICAgICAgfSlcbiAgfVxuXG4gIHN0YXRlRGF0YTogYW55ID0gW107XG4gIGdldEFsbFN0YXRlKCkge1xuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsU3RhdGUoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLnN0YXRlRGF0YSA9IHJlcz8uZGF0YSB8fCBbXTtcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlID0gdGhpcy5zdGF0ZURhdGFbMF0gfHwge307XG4gICAgICB0aGlzLmdldENpdHlCeVN0YXRlSWQoKTtcbiAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0YXRlczogXCIsIGVycm9yKTtcbiAgICAgIH0pXG4gIH1cblxuICBjaXR5RGF0YTogYW55ID0gW107XG4gIGdldENpdHlCeVN0YXRlSWQoKSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRDaXR5QnlTdGF0ZUJ5cGFnaW5hdGVkKHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlLmlkLCAwLCAxMDAwMCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jaXR5RGF0YSA9IHJlcz8uZGF0YS5kYXRhIHx8IFtdO1xuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eSA9IHRoaXMuY2l0eURhdGFbMF0gfHwge307XG4gICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBDaXRpZXM6IFwiLCBlcnJvcik7XG4gICAgICB9KVxuICB9XG5cbiAgc2V0TW9udGhseUluc3RhbGxtZW50QW1vdW50KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkU2NoZW1lLnNjaGVtZVR5cGUgPT0gJ0lORElWSURVQUwnICYmIHRoaXMuc2VsZWN0ZWRTY2hlbWUubWluSW5zdGFsbG1lbnRBbW91bnQpIHtcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1vbnRobHlJbnN0YWxsbWVudEFtb3VudCA9IHRoaXMuc2VsZWN0ZWRTY2hlbWUubWluSW5zdGFsbG1lbnRBbW91bnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0U3RvcmVTbGFicygpO1xuICAgIH1cbiAgfVxuXG4gIHN0b3JlU2xhYnM6IGFueSA9IFtdO1xuICBnZXRTdG9yZVNsYWJzKCkge1xuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0U3RvcmVCeVNsYWIoeyBzdG9yZXNMaXN0OiB0aGlzLnNlbGVjdGVkU2NoZW1lLnNjaGVtZVNsYWJzWzBdLnNsYWJTdG9yZXMgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zdG9yZVNsYWJzID0gcmVzPy5kYXRhIHx8IFtdO1xuICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc3RvcmUgc2xhYnM6IFwiLCBlcnJvcik7XG4gICAgICB9KVxuICB9XG4gIHZhbGlkYXRvcjogYm9vbGVhbiA9IGZhbHNlXG4gIGNyZWF0ZUVucm9sbG1lbnQoKSB7XG5cbiAgICBmb3IgKGxldCBlbGUgb2YgT2JqZWN0LmtleXModGhpcy52YWxpZE9iamVjdCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVyKGVsZSk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy52YWxpZE9iamVjdCkuc29tZSh2YWx1ZSA9PiAhdmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvciA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQucHdjU3RvcmVDb2RlID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuc3RvcmVEZXRhaWxzPy5wd2NTdG9yZUNvZGUgfHwgdGhpcy5zZWxlY3RlZFNjaGVtZT8ucHdjU3RvcmVDb2RlO1xuXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuc2NoZW1lRGV0YWlscyA9IFsnc2NoZW1lSWQnLCAnc2NoZW1lTmFtZScsICdzY2hlbWVUeXBlJywgJ3B3Y1NjaGVtZUNvZGUnXS5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IGFueSkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTY2hlbWVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjY1trZXldID0gdGhpcy5zZWxlY3RlZFNjaGVtZVtrZXldO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PSAncHdjU2NoZW1lQ29kZScpIHtcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLnNlbGVjdGVkU2NoZW1lPy5wd2NJbmRpdmlkdWFsU2NoZW1lQ29kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTY2hlbWUuc2NoZW1lVHlwZSA9PSAnR1JPVVAnKSB7XG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnNjaGVtZUlkID0gdGhpcy5zZWxlY3RlZFNjaGVtZT8uc2NoZW1lSWQ7XG4gICAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnNjaGVtZU5hbWUgPSB0aGlzLnNlbGVjdGVkU2NoZW1lPy5zY2hlbWVOYW1lO1xuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuZW5yb2xsZWRHcm91cC5zdG9yZUlkID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LnN0b3JlRGV0YWlscz8uc3RvcmVJZDtcbiAgICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmVucm9sbGVkR3JvdXAuc3RvcmVOYW1lID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LnN0b3JlRGV0YWlscz8uc3RvcmVOYW1lO1xuICAgICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9udGhseUluc3RhbGxtZW50QW1vdW50ID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmVucm9sbGVkR3JvdXA/LnNjaGVtZVNsYWI/Lm1vbnRobHlJbnN0YWxsbWVudEFtb3VudDtcbiAgICB9XG5cblxuICAgIHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlID0gWydpZCcsICduYW1lJ10ucmVkdWNlKChhY2M6IGFueSwga2V5OiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnN0YXRlW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuXG4gICAgdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eSA9IFsnaWQnLCAnbmFtZSddLnJlZHVjZSgoYWNjOiBhbnksIGtleTogYW55KSA9PiB7XG4gICAgICBpZiAodGhpcy5lbnJvbGxlbWVudFBheWxvYWQuYWRkcmVzc0RldGFpbHMuY2l0eT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLmNpdHlba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG5cbiAgICB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4gPSBbXG4gICAgICAnc3RhZmZJZCcsICdzdGFmZk5hbWUnLCAnbW9iaWxlTnVtYmVyJywgJ2VtYWlsJywgJ3N0YWZmQ29kZScsICdwcm9maWxlSW1nVXJsJ1xuICAgIF0ucmVkdWNlKChhY2M6IGFueSwga2V5OiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW4/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWNjW2tleV0gPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5jdXN0b2RpYW5ba2V5XTtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT0gJ3N0YWZmTmFtZScpXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5wZXJzb25hbEluZm8/Lm5hbWVcbiAgICAgIGlmIChrZXkgPT0gJ21vYmlsZU51bWJlcicpXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5jb250YWN0RGV0YWlscz8ubW9iaWxlXG4gICAgICBpZiAoa2V5ID09ICdlbWFpbCcpXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5jb250YWN0RGV0YWlscz8uZW1haWxcbiAgICAgIGlmIChrZXkgPT0gJ3Byb2ZpbGVJbWdVcmwnKVxuICAgICAgICBhY2Nba2V5XSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLmN1c3RvZGlhbj8ucGVyc29uYWxJbmZvPy5wcm9maWxlSW1hZ2VcbiAgICAgIGlmIChrZXkgPT0gJ3N0YWZmQ29kZScpXG4gICAgICAgIGFjY1trZXldID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuPy5zdGFmZldvcmtJbmZvPy5zdGFmZkNvZGU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICB0aGlzLnBhZ2UgPSAnUEFZTUVOVCc7XG4gIH1cblxuICBzdWNjZXNzKCkge1xuICAgIHRoaXMucmVzdFNlcnZpY2UuY3JlYXRlRW5yb2xsbWVudFNjaGVtZSh0aGlzLmVucm9sbGVtZW50UGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKVxuICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNpbXVsYXRlUGF5bWVudCgnZmFpbHVyZScpO1xuICAgICAgfSlcbiAgfVxuXG5cblxuICByZXN1bHQ6IGFueVxuICBzaG93UmVzdWx0ID0gdHJ1ZTtcbiAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgc2ltdWxhdGVQYXltZW50KHR5cGU6ICdzdWNjZXNzJyB8ICdmYWlsdXJlJykge1xuICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcbiAgICB0aGlzLnJlc3VsdCA9IHt9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMucmVzdWx0ID0ge1xuICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1BheW1lbnQgU3VjY2Vzc2Z1bCEnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdZb3VyIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICAgICAgICBpY29uQ2xhc3M6ICdmYXMgZmEtY2hlY2stY2lyY2xlJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN1Y2Nlc3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzdWx0ID0ge1xuICAgICAgICAgIHR5cGU6ICdmYWlsdXJlJyxcbiAgICAgICAgICB0aXRsZTogJ1BheW1lbnQgRmFpbGVkIScsXG4gICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHdhcyBhbiBlcnJvciBwcm9jZXNzaW5nIHlvdXIgcGF5bWVudC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAgIGljb25DbGFzczogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dSZXN1bHQgPSB0cnVlO1xuICAgICAgfSwgMTAwKTtcbiAgICB9LCAyMDAwKTtcbiAgfVxuXG4gIGdldEJ1dHRvbklkKGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5hY3Rpb24/LmJ1dHRvbnNbaW5kZXhdPy5pZCA/PyBcIlwiO1xuICB9XG4gIGdldEJ1dHRvblN0eWxlKGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5hY3Rpb24/LmJ1dHRvbnNbaW5kZXhdPy5zdHlsZXM7XG4gIH1cblxuICBnZXRCdXR0b25Db250ZW50KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5hY3Rpb24/LmJ1dHRvbnNbaW5kZXhdPy5jb250ZW50O1xuICB9XG5cblxuICBkZWJvdW5jZVRpbWVyOiBhbnk7XG4gIHZhbGlkYXRlRm9ybShmaWVsZFR5cGU6IHN0cmluZykge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xuICAgIHRoaXMuZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZXIoZmllbGRUeXBlKVxuICAgIH0sIDMwMCk7XG4gIH1cbiAgdmFsaWRPYmplY3Q6IGFueSA9IHtcbiAgICBOQU1FOiB0cnVlLFxuICAgIEVNQUlMOiB0cnVlLFxuICAgIE1PQklMRTogdHJ1ZSxcbiAgICBET0I6IHRydWUsXG4gICAgU0NIRU1FOiB0cnVlLFxuICAgIE1PTlRITFlfQU1PVU5UOiB0cnVlLFxuICAgIFNUT1JFOiB0cnVlLFxuICAgIEFERFJFU1M6IHRydWUsXG4gICAgU1RBVEU6IHRydWUsXG4gICAgQ0lUWTogdHJ1ZSxcbiAgICBQSU5DT0RFOiB0cnVlLFxuICAgIE5PTUlORUVfTkFNRTogdHJ1ZSxcbiAgICBOT01JTkVFX01PQklMRTogdHJ1ZSxcbiAgICBOT01JTkVFX1JFTEFUSU9OU0hJUDogdHJ1ZSxcbiAgICBCQU5LX05BTUU6IHRydWUsXG4gICAgQUNDT1VOVF9OVU1CRVI6IHRydWUsXG4gICAgSUZTQ19DT0RFOiB0cnVlLFxuICAgIEFDQ09VTlRfSE9MREVSX05BTUU6IHRydWUsXG4gIH1cbiAgdmFsaWRhdGVyKGZpZWxkVHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgIGNhc2UgJ05BTUUnOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTkFNRSA9IHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm5hbWUudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRU1BSUwnOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuRU1BSUwgPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkLm1haWxJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTU9CSUxFJzoge1xuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk1PQklMRSA9IC9eXFxkezEwfSQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQubW9iaWxlTnVtYmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdET0InOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuRE9CID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZC5kYXRlT2ZCaXJ0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTQ0hFTUUnOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuU0NIRU1FID0gISF0aGlzLnNlbGVjdGVkU2NoZW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ01PTlRITFlfQU1PVU5UJzoge1xuICAgICAgICB0aGlzLnZhbGlkT2JqZWN0Lk1PTlRITFlfQU1PVU5UID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/Lm1vbnRobHlJbnN0YWxsbWVudEFtb3VudCA+IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnU1RPUkUnOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuU1RPUkUgPSAhIXRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5zdG9yZURldGFpbHM/LnN0b3JlSWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQUREUkVTUyc6IHtcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5BRERSRVNTID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYWRkcmVzc0RldGFpbHM/LmFkZHJlc3NMaW5lLnRyaW0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTVEFURSc6IHtcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5TVEFURSA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmFkZHJlc3NEZXRhaWxzPy5zdGF0ZT8uaWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQ0lUWSc6IHtcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5DSVRZID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYWRkcmVzc0RldGFpbHM/LmNpdHk/LmlkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1BJTkNPREUnOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuUElOQ09ERSA9IC9eXFxkezZ9JC8udGVzdCh0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYWRkcmVzc0RldGFpbHM/LnBpbkNvZGU/LnRvU3RyaW5nKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ05PTUlORUVfTkFNRSc6IHtcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OT01JTkVFX05BTUUgPSB0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8ubm9taW5lZURldGFpbHM/Lm5vbWluZWVOYW1lPy50cmltKCk/Lmxlbmd0aCA+IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTk9NSU5FRV9NT0JJTEUnOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuTk9NSU5FRV9NT0JJTEUgPSAvXlxcZHsxMH0kLy50ZXN0KHRoaXMuZW5yb2xsZW1lbnRQYXlsb2FkPy5ub21pbmVlRGV0YWlscz8ubW9iaWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdOT01JTkVFX1JFTEFUSU9OU0hJUCc6IHtcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5OT01JTkVFX1JFTEFUSU9OU0hJUCA9ICEhdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/Lm5vbWluZWVEZXRhaWxzPy5yZWxhdGlvblNoaXA/LnRyaW0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdCQU5LX05BTUUnOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuQkFOS19OQU1FID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYmFua0RldGFpbHM/LmJhbmtOYW1lLnRyaW0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBQ0NPVU5UX05VTUJFUic6IHtcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5BQ0NPVU5UX05VTUJFUiA9IC9eXFxkKyQvLnRlc3QodGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmJhbmtEZXRhaWxzPy5hY2NvdW50TnVtYmVyPy50b1N0cmluZygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdJRlNDX0NPREUnOiB7XG4gICAgICAgIHRoaXMudmFsaWRPYmplY3QuSUZTQ19DT0RFID0gISF0aGlzLmVucm9sbGVtZW50UGF5bG9hZD8uYmFua0RldGFpbHM/Lmlmc2NDb2RlPy50cmltKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQUNDT1VOVF9IT0xERVJfTkFNRSc6IHtcbiAgICAgICAgdGhpcy52YWxpZE9iamVjdC5BQ0NPVU5UX0hPTERFUl9OQU1FID0gdGhpcy5lbnJvbGxlbWVudFBheWxvYWQ/LmJhbmtEZXRhaWxzPy5hY2NvdW50SG9sZGVyTmFtZT8udHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lciBwb3NpdGlvbi1yZWxhdGl2ZVwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgW2lkXT1cImRhdGE/LmlkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBweS01XCIgKm5nSWY9XCJwYWdlID09PSAnRU5ST0xMTUVOVCdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkN1c3RvbWVyIEluZm9ybWF0aW9uPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZ1bGxOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RnVsbCBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiZnVsbE5hbWVcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5uYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdOQU1FJylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnTkFNRSddXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZW1haWxcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5FbWFpbCBBZGRyZXNzIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImVtYWlsXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubWFpbElkXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdFTUFJTCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ0VNQUlMJ11cIj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm1vYmlsZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk1vYmlsZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRlbFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cIm1vYmlsZVwiIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5tb2JpbGVOdW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ01PQklMRScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydNT0JJTEUnXVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGF0ZU9mQmlydGhcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5EYXRlIG9mIEJpcnRoIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cImRhdGVPZkJpcnRoXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmRhdGVPZkJpcnRoXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdET0InKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnRE9CJ11cIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFNjaGVtZSBJbmZvcm1hdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U2NoZW1lIEluZm9ybWF0aW9uPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic2NoZW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2NoZW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInNjaGVtZVwiIHJlcXVpcmVkIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTY2hlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0TW9udGhseUluc3RhbGxtZW50QW1vdW50KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IFNjaGVtZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2NoZW1lIG9mIHNjaGVtZXNEYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzY2hlbWVcIj57e3NjaGVtZS5zY2hlbWVOYW1lID8/IFwiLVwifX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm1vbnRobHlBbW91bnRcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Nb250aGx5IEFtb3VudCA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cIm1vbnRobHlBbW91bnRcIiByZXF1aXJlZCBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFNjaGVtZT8uc2NoZW1lVHlwZSA9PSAnSU5ESVZJRFVBTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubW9udGhseUluc3RhbGxtZW50QW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInN1YmRpdmlzaW9uXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRTY2hlbWU/LnNjaGVtZVR5cGUgPT0gJ0dST1VQJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5lbnJvbGxlZEdyb3VwLnNjaGVtZVNsYWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IEFtb3VudCBQbGFuPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzbGFiIG9mIHNlbGVjdGVkU2NoZW1lLnNjaGVtZVNsYWJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzbGFiXCI+e3tzbGFiLm1vbnRobHlJbnN0YWxsbWVudEFtb3VudCA/PyBcIi1cIn19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBTdG9yZSBJbmZvcm1hdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U3RvcmUgSW5mb3JtYXRpb248L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdG9yZU5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBpZD1cInN1YmRpdmlzaW9uXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLnN0b3JlRGV0YWlsc1wiIChuZ01vZGVsQ2hhbmdlKT1cImdldFN0YWZmQnlJZCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIlwiPlNlbGVjdCBTdG9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RvcmUgb2Ygc3RvcmVEYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzdG9yZVwiPnt7c3RvcmUuc3RvcmVOYW1lID8/IFwiLVwifX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN1YmRpdmlzaW9uXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q3VzdG9kaWFuPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1mb3JtLXNlbGVjdFwiIGlkPVwic3ViZGl2aXNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuY3VzdG9kaWFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIlwiPlNlbGVjdCBDdXN0b2RpYW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YWZmIG9mIHN0YWZmRGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwic3RhZmZcIj57e3N0YWZmLnBlcnNvbmFsSW5mby5uYW1lID8/IFwiLVwifX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEVudGVyIFlvdXIgQWRkcmVzcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RW50ZXIgWW91ciBBZGRyZXNzPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFkZHJlc3NcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5BZGRyZXNzIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYWRkcmVzc1wiIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLmFkZHJlc3NMaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdBRERSRVNTJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnQUREUkVTUyddXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0ZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0YXRlIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5zdGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJnZXRDaXR5QnlTdGF0ZUlkKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+U2VsZWN0IFN0YXRlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdGF0ZSBvZiBzdGF0ZURhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cInN0YXRlXCI+e3tzdGF0ZS5uYW1lID8/IFwiLVwifX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNpdHlcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5DaXR5IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBjdXN0b20tZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5hZGRyZXNzRGV0YWlscy5jaXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIlwiPlNlbGVjdCBDaXR5PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaXR5IG9mIGNpdHlEYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJjaXR5XCI+e3tjaXR5Lm5hbWUgPz8gXCItXCJ9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGluY29kZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpbmNvZGUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJwaW5jb2RlXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLmFkZHJlc3NEZXRhaWxzLnBpbkNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdQSU5DT0RFJylcIiBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnUElOQ09ERSddXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5FbnRlciBOb21pbmVlIERldGFpbHM8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibm9taW5lZU5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5GdWxsIE5hbWUgb2YgTm9taW5lZSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1c3RvbS1mb3JtLWNvbnRyb2xcIiBpZD1cIm5vbWluZWVOYW1lXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubm9taW5lZURldGFpbHMubm9taW5lZU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ05PTUlORUVfTkFNRScpXCIgW2NsYXNzLmVycm9yLWJvcmRlcl09XCIhdmFsaWRPYmplY3RbJ05PTUlORUVfTkFNRSddXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZWxhdGlvbnNoaXBcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TZWxlY3QgUmVsYXRpb25zaGlwIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGN1c3RvbS1mb3JtLXNlbGVjdFwiIGlkPVwicmVsYXRpb25zaGlwXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsZW1lbnRQYXlsb2FkLm5vbWluZWVEZXRhaWxzLnJlbGF0aW9uU2hpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IFJlbGF0aW9uc2hpcDwvb3B0aW9uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJTcG91c2VcIj5TcG91c2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDaGlsZFwiPkNoaWxkPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTW90aGVyXCI+TW90aGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRmF0aGVyXCI+RmF0aGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiU2libGluZ1wiPlNpYmxpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJub21pbmVlUGhvbmVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Nb2JpbGUgTnVtYmVyIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20tZm9ybS1jb250cm9sXCIgaWQ9XCJub21pbmVlUGhvbmVcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQubm9taW5lZURldGFpbHMubW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnTk9NSU5FRV9NT0JJTEUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnTk9NSU5FRV9NT0JJTEUnXVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+QWNjb3VudCBJbmZvcm1hdGlvbjwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFjY291bnRIb2xkZXJcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5BY2NvdW50IEhvbGRlciBOYW1lIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYWNjb3VudEhvbGRlclwiIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5iYW5rRGV0YWlscy5hY2NvdW50SG9sZGVyTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZvcm0oJ0FDQ09VTlRfSE9MREVSX05BTUUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnQUNDT1VOVF9IT0xERVJfTkFNRSddXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhY2NvdW50TnVtYmVyXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWNjb3VudCBOdW1iZXIgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYWNjb3VudE51bWJlclwiIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbGVtZW50UGF5bG9hZC5iYW5rRGV0YWlscy5hY2NvdW50TnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRm9ybSgnQUNDT1VOVF9OVU1CRVInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3ItYm9yZGVyXT1cIiF2YWxpZE9iamVjdFsnQUNDT1VOVF9OVU1CRVInXVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYmFua05hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5CYW5rIE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiYmFua05hbWVcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuYmFua05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdCQU5LX05BTUUnKVwiIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydCQU5LX05BTUUnXVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiaWZzY0NvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5JRlNDIENvZGUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWZvcm0tY29udHJvbFwiIGlkPVwiaWZzY0NvZGVcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxlbWVudFBheWxvYWQuYmFua0RldGFpbHMuaWZzY0NvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGb3JtKCdJRlNDX0NPREUnKVwiIFtjbGFzcy5lcnJvci1ib3JkZXJdPVwiIXZhbGlkT2JqZWN0WydJRlNDX0NPREUnXVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ncmlkIG10LTRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VibWl0XCIgKGNsaWNrKT1cImNyZWF0ZUVucm9sbG1lbnQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtidXR0b25TdHlsZV09XCJnZXRCdXR0b25TdHlsZSgwKVwiXG4gICAgICAgICAgICAgICAgICAgIFtidXR0b25JZF09XCJnZXRCdXR0b25JZCgwKVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIiBbaWRdPVwiZGF0YT8uaWQrZ2V0QnV0dG9uSWQoMClcIlxuICAgICAgICAgICAgICAgICAgICBbYnV0dG9uRGF0YV09XCJnZXRCdXR0b25Db250ZW50KDApXCI+U3VibWl0XG4gICAgICAgICAgICAgICAgICAgIEVucm9sbG1lbnQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRvclwiIFtjbGFzcy5lcnJvci1jb2xvcl09XCJ2YWxpZGF0b3JcIj5GaWxsIGFsbCBtYW5kYXRvcnkgZmllbGRzIHRvIHByb2NlZWQqPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBZGQgdGhpcyBibG9jayBpbiB5b3VyIEFuZ3VsYXIgcGF5bWVudCBzdGVwIChwYWdlID09PSAnUEFZTUVOVCcpIC0tPlxuICAgIDwhLS0gcGF5bWVudC1zaW11bGF0aW9uLmNvbXBvbmVudC5odG1sIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgbWluLXZoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYmctbGlnaHRcIlxuICAgICAgICAqbmdJZj1cInBhZ2UgPT09ICdQQVlNRU5UJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGF5bWVudC1jb250YWluZXJcIj5cblxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF5bWVudC1oZWFkZXIgbWItNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInBheW1lbnQtdGl0bGVcIj5QYXltZW50IE1ldGhvZDwvaDE+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctc3VjY2VzcyByb3VuZGVkLXBpbGwgcHgtMyBweS0yXCI+Q3JlZGl0IENhcmQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDcmVkaXQgQ2FyZCAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcmVkaXQtY2FyZCBtYi00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtc2hpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aXNhLWxvZ29cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXNhLXRleHRcIj5WSVNBPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkaG9sZGVyLW5hbWUgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cnF1b2lzZWNveW90ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZG90c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdFwiICpuZ0Zvcj1cImxldCBkb3Qgb2YgWzEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbnVtYmVyXCI+MTExMTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE9UUCBTZWN0aW9uIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm90cC1zZWN0aW9uIG1iLTRcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm90cC1sYWJlbFwiPkVudGVyIE9UUCBzZW50IHRvIHlvdXIgeHh4IHh4eCA0ODM5PC9wPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIG90cC1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgT1RQXCI+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBtdC0yIGQtYmxvY2tcIj5IaW50OiBPVFAgaXMgMTExMDAwPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFNpbXVsYXRpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zIG1iLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi1sZyB3LTEwMCBzaW11bGF0aW9uLWJ0blwiIChjbGljayk9XCJzaW11bGF0ZVBheW1lbnQoJ2ZhaWx1cmUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBTaW11bGF0ZSBmYWlsdXJlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1sZyB3LTEwMCBzaW11bGF0aW9uLWJ0blwiIChjbGljayk9XCJzaW11bGF0ZVBheW1lbnQoJ3N1Y2Nlc3MnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBTaW11bGF0ZSBzdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUHJvY2Vzc2luZyBTdGF0ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1Byb2Nlc3NpbmdcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweS0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeSBtZS0zXCIgcm9sZT1cInN0YXR1c1wiIHN0eWxlPVwid2lkdGg6IDEuNXJlbTsgaGVpZ2h0OiAxLjVyZW07XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+UHJvY2Vzc2luZyBwYXltZW50Li4uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUmVzdWx0IEFsZXJ0IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJlc3VsdCAmJiBzaG93UmVzdWx0XCIgY2xhc3M9XCJhbGVydCB0ZXh0LWNlbnRlciByZXN1bHQtYWxlcnRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgJ2FsZXJ0LXN1Y2Nlc3MnOiByZXN1bHQudHlwZSA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICdhbGVydC1kYW5nZXInOiByZXN1bHQudHlwZSA9PT0gJ2ZhaWx1cmUnXG4gICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJlc3VsdC50aXRsZSB9fTwvc3Ryb25nPiB7eyByZXN1bHQubWVzc2FnZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRm9vdGVyIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTRcIj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIENsaWNrIGJ1dHRvbnMgdG8gc2ltdWxhdGUgcGF5bWVudCBzY2VuYXJpb3NcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XG4gICAgICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cbiAgICAgICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19