@renaissancerentals/renaissance-component 12.4.24 → 13.0.4

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 (292) hide show
  1. package/lib/announcement/Banner.d.ts +1 -1
  2. package/lib/announcement/assets/Banner.css +65 -0
  3. package/lib/application/ApplicationCompletion.d.ts +1 -1
  4. package/lib/application/ApplicationModal.d.ts +1 -1
  5. package/lib/application/ApplicationSection.d.ts +1 -1
  6. package/lib/application/assets/ApplicationCompletion.css +44 -0
  7. package/lib/application/assets/{ApplicationModal.scss → ApplicationModal.css} +3 -5
  8. package/lib/application/assets/{ApplicationSection.scss → ApplicationSection.css} +12 -11
  9. package/lib/asset/AssetModal.d.ts +1 -1
  10. package/lib/asset/VideoModal.d.ts +1 -1
  11. package/lib/asset/assets/{AssetModal.scss → AssetModal.css} +1 -3
  12. package/lib/asset/assets/{VideoModal.scss → VideoModal.css} +1 -3
  13. package/lib/assets/App.css +3 -0
  14. package/lib/assets/form.css +89 -0
  15. package/lib/assets/variables.css +49 -0
  16. package/lib/banner/SubmissionRequestBanner.d.ts +1 -1
  17. package/lib/banner/assets/{SubmissionRequestBanner.scss → SubmissionRequestBanner.css} +0 -2
  18. package/lib/card/Card.d.ts +1 -1
  19. package/lib/card/assets/Card.css +45 -0
  20. package/lib/contact/ContactModal.d.ts +1 -1
  21. package/lib/contact/ContactSection.d.ts +1 -1
  22. package/lib/contact/ContactSectionSkeleton.d.ts +1 -1
  23. package/lib/contact/assets/{ContactModal.scss → ContactModal.css} +2 -4
  24. package/lib/contact/assets/{ContactSection.scss → ContactSection.css} +14 -12
  25. package/lib/contact/assets/{ContactSkeleton.scss → ContactSkeleton.css} +1 -1
  26. package/lib/faq/FaqsCard.d.ts +1 -1
  27. package/lib/faq/FaqsSection.d.ts +1 -1
  28. package/lib/faq/PropertyFaqSection.d.ts +1 -1
  29. package/lib/faq/ResidentFaqSection.d.ts +1 -1
  30. package/lib/faq/assets/{FaqsCard.scss → FaqsCard.css} +0 -2
  31. package/lib/faq/assets/{FaqsSection.scss → FaqsSection.css} +1 -3
  32. package/lib/faq/assets/{PropertyFaqSection.scss → PropertyFaqSection.css} +0 -2
  33. package/lib/faq/assets/{ResidentFaqSection.scss → ResidentFaqSection.css} +1 -3
  34. package/lib/feature/FeatureSection.d.ts +1 -1
  35. package/lib/feature/assets/{FeatureSection.scss → FeatureSection.css} +7 -6
  36. package/lib/floorplan/card/FloorplanCard.d.ts +1 -1
  37. package/lib/floorplan/card/FloorplanCardSkeleton.d.ts +1 -1
  38. package/lib/floorplan/card/FloorplanCardSlider.d.ts +1 -1
  39. package/lib/floorplan/card/FloorplanPrice.d.ts +1 -1
  40. package/lib/floorplan/card/SimilarFloorplanCard.d.ts +1 -1
  41. package/lib/floorplan/card/TestimonialsCard.d.ts +1 -1
  42. package/lib/floorplan/card/assets/{FloorplanCard.scss → FloorplanCard.css} +36 -35
  43. package/lib/floorplan/card/assets/{FloorplanCardSlider.scss → FloorplanCardSlider.css} +4 -6
  44. package/lib/floorplan/card/assets/{FloorplanFaqsCard.scss → FloorplanFaqsCard.css} +1 -3
  45. package/lib/floorplan/card/assets/FloorplanPrice.css +35 -0
  46. package/lib/floorplan/card/assets/{SimilarFloorplanCard.scss → SimilarFloorplanCard.css} +2 -4
  47. package/lib/floorplan/card/assets/{TestimonialsCard.scss → TestimonialsCard.css} +2 -4
  48. package/lib/floorplan/filter/FloorplanDropDown.d.ts +1 -1
  49. package/lib/floorplan/filter/assets/{FloorplanDropDown.scss → FloorplanDropDown.css} +0 -2
  50. package/lib/floorplan/section/FloorplanHero.d.ts +1 -1
  51. package/lib/floorplan/section/FloorplanSection.d.ts +1 -1
  52. package/lib/floorplan/section/FloorplanSectionSkeleton.d.ts +1 -1
  53. package/lib/floorplan/section/FloorplansHeader.d.ts +2 -2
  54. package/lib/floorplan/section/FloorplansHeaderSekeleton.d.ts +2 -2
  55. package/lib/floorplan/section/FloorplansSection.d.ts +1 -1
  56. package/lib/floorplan/section/HeroBadgeStats.d.ts +1 -1
  57. package/lib/floorplan/section/assets/BadgeStats.css +3 -0
  58. package/lib/floorplan/section/assets/{FloorplanHero.scss → FloorplanHero.css} +21 -20
  59. package/lib/floorplan/section/assets/{FloorplanSection.scss → FloorplanSection.css} +12 -12
  60. package/lib/{unit/section/assets/UnitsHeader.scss → floorplan/section/assets/FloorplansHeader.css} +8 -7
  61. package/lib/floorplan/section/assets/{FloorplansSection.scss → FloorplansSection.css} +0 -2
  62. package/lib/floorplan/section/assets/{HeroBadgeStats.scss → HeroBadgeStats.css} +5 -7
  63. package/lib/footer/Footer.d.ts +1 -1
  64. package/lib/footer/assets/{Footer.scss → Footer.css} +13 -12
  65. package/lib/gallery/DriveGallery.d.ts +1 -1
  66. package/lib/gallery/Gallery.d.ts +1 -1
  67. package/lib/gallery/GalleryModal.d.ts +1 -1
  68. package/lib/gallery/GridGallery.d.ts +1 -1
  69. package/lib/gallery/GridGalleryCover.d.ts +1 -1
  70. package/lib/gallery/GridGalleryMobile.d.ts +1 -1
  71. package/lib/gallery/GridGallerySkeleton.d.ts +1 -1
  72. package/lib/gallery/HeroImageCard.d.ts +1 -1
  73. package/lib/gallery/ImageCard.d.ts +1 -1
  74. package/lib/gallery/ImageCardSkeleton.d.ts +1 -1
  75. package/lib/gallery/assets/{DriveGallery.scss → DriveGallery.css} +0 -2
  76. package/lib/gallery/assets/{Gallery.scss → Gallery.css} +12 -14
  77. package/lib/gallery/assets/{GalleryModal.scss → GalleryModal.css} +3 -5
  78. package/lib/gallery/assets/{GridGallery.scss → GridGallery.css} +3 -5
  79. package/lib/gallery/assets/{GridGalleryMobile.scss → GridGalleryMobile.css} +3 -5
  80. package/lib/gallery/assets/{HeroImageCard.scss → HeroImageCard.css} +1 -3
  81. package/lib/gallery/assets/{ImageCard.scss → ImageCard.css} +1 -3
  82. package/lib/header/InfoHeader.d.ts +1 -1
  83. package/lib/header/assets/InfoHeader.css +29 -0
  84. package/lib/home-page-special/HomePageSpecialCard.d.ts +1 -1
  85. package/lib/home-page-special/HomePageSpecialModal.d.ts +1 -1
  86. package/lib/home-page-special/HomePageSpecialSection.d.ts +1 -1
  87. package/lib/home-page-special/assets/{HomePageSpecialCard.scss → HomePageSpecialCard.css} +0 -2
  88. package/lib/home-page-special/assets/{HomePageSpecialModal.scss → HomePageSpecialModal.css} +3 -5
  89. package/lib/home-page-special/assets/{HomePageSpecialSection.scss → HomePageSpecialSection.css} +0 -2
  90. package/lib/index.cjs.js +112 -0
  91. package/lib/index.css +10 -0
  92. package/lib/index.d.ts +1 -0
  93. package/lib/index.es.js +21817 -0
  94. package/lib/index.umd.js +112 -0
  95. package/lib/map/MapSection.d.ts +1 -1
  96. package/lib/map/assets/{Map.scss → Map.css} +0 -2
  97. package/lib/property/LeaseOfficeSkeleton.d.ts +1 -1
  98. package/lib/property/PropertyLocation.d.ts +1 -1
  99. package/lib/property/PropertyLocationSkeleton.d.ts +1 -1
  100. package/lib/property/assets/{PropertyLocation.scss → PropertyLocation.css} +3 -5
  101. package/lib/property/assets/{PropertyLocationSkeleton.scss → PropertyLocationSkeleton.css} +2 -4
  102. package/lib/review/ReviewSection.d.ts +1 -1
  103. package/lib/review/assets/{ReviewSection.scss → ReviewSection.css} +7 -9
  104. package/lib/short-term/Hostaway.d.ts +1 -1
  105. package/lib/short-term/ShortTermFloorplanCard.d.ts +1 -1
  106. package/lib/short-term/ShortTermFloorplanHero.d.ts +1 -1
  107. package/lib/short-term/ShortTermFloorplanSection.d.ts +1 -1
  108. package/lib/short-term/ShortTermFloorplansHeader.d.ts +2 -2
  109. package/lib/short-term/ShortTermFloorplansSection.d.ts +1 -1
  110. package/lib/short-term/ShortTermPricingCard.d.ts +1 -1
  111. package/lib/short-term/assets/{Hostaway.scss → Hostaway.css} +16 -15
  112. package/lib/short-term/assets/{ShortTermFloorplanCard.scss → ShortTermFloorplanCard.css} +20 -19
  113. package/lib/short-term/assets/{ShortTermFloorplanHero.scss → ShortTermFloorplanHero.css} +21 -20
  114. package/lib/short-term/assets/{ShortTermFloorplanSection.scss → ShortTermFloorplanSection.css} +17 -17
  115. package/lib/short-term/assets/{ShortTermFloorplansHeader.scss → ShortTermFloorplansHeader.css} +8 -7
  116. package/lib/short-term/assets/{ShortTermFloorplansSection.scss → ShortTermFloorplansSection.css} +0 -2
  117. package/lib/short-term/assets/{ShortTermPricingCard.scss → ShortTermPricingCard.css} +5 -7
  118. package/lib/special-offer/SpecialOfferBadge.d.ts +1 -1
  119. package/lib/special-offer/SpecialOfferButton.d.ts +1 -1
  120. package/lib/special-offer/assets/{SpecialOfferBadge.scss → SpecialOfferBadge.css} +3 -5
  121. package/lib/special-offer/assets/{SpecialOfferButton.scss → SpecialOfferButton.css} +2 -4
  122. package/lib/sublet/SubletCard.d.ts +1 -1
  123. package/lib/sublet/SubletImage.d.ts +1 -1
  124. package/lib/sublet/SubletMessageModal.d.ts +1 -1
  125. package/lib/sublet/SubletNotFound.d.ts +1 -1
  126. package/lib/sublet/SubletSection.d.ts +1 -1
  127. package/lib/sublet/SubletsSection.d.ts +1 -1
  128. package/lib/sublet/assets/{SubletCard.scss → SubletCard.css} +2 -4
  129. package/lib/sublet/assets/{SubletImage.scss → SubletImage.css} +2 -4
  130. package/lib/sublet/assets/{SubletMessageModal.scss → SubletMessageModal.css} +6 -8
  131. package/lib/sublet/assets/{SubletNotFound.scss → SubletNotFound.css} +0 -2
  132. package/lib/sublet/assets/{SubletSection.scss → SubletSection.css} +4 -6
  133. package/lib/sublet/assets/{SubletsSection.scss → SubletsSection.css} +1 -3
  134. package/lib/sublet/services/SubletService.d.ts +6 -2
  135. package/lib/summer-house/SummerHouseFeatures.d.ts +1 -1
  136. package/lib/summer-house/assets/{SummerHouseFeatures.scss → SummerHouseFeatures.css} +2 -4
  137. package/lib/summer-house/assets/{SummerHousePricing.scss → SummerHousePricing.css} +2 -4
  138. package/lib/team/TeamSection.d.ts +1 -1
  139. package/lib/team/assets/{Team.scss → Team.css} +0 -2
  140. package/lib/team/card/TeamCard.d.ts +1 -1
  141. package/lib/team/card/TeamCardSkeleton.d.ts +1 -1
  142. package/lib/team/card/assets/{TeamCard.scss → TeamCard.css} +6 -5
  143. package/lib/unit/card/UnitCard.d.ts +1 -1
  144. package/lib/unit/card/assets/{UnitCard.scss → UnitCard.css} +33 -32
  145. package/lib/unit/section/UnitHero.d.ts +1 -1
  146. package/lib/unit/section/UnitPrice.d.ts +1 -1
  147. package/lib/unit/section/UnitSection.d.ts +1 -1
  148. package/lib/unit/section/UnitsHeader.d.ts +1 -1
  149. package/lib/unit/section/UnitsSection.d.ts +1 -1
  150. package/lib/unit/section/assets/{UnitSection.scss → UnitSection.css} +12 -12
  151. package/lib/{floorplan/section/assets/FloorplansHeader.scss → unit/section/assets/UnitsHeader.css} +8 -7
  152. package/lib/unit/section/assets/{UnitsSection.scss → UnitsSection.css} +0 -2
  153. package/lib/video/Video.d.ts +1 -1
  154. package/lib/video/assets/{Video.scss → Video.css} +0 -2
  155. package/package.json +68 -72
  156. package/lib/announcement/Banner.js +0 -31
  157. package/lib/announcement/assets/Banner.scss +0 -65
  158. package/lib/application/ApplicationCompletion.js +0 -53
  159. package/lib/application/ApplicationModal.js +0 -38
  160. package/lib/application/ApplicationSection.js +0 -253
  161. package/lib/application/assets/ApplicationCompletion.scss +0 -44
  162. package/lib/application/data/RentalApplication.js +0 -15
  163. package/lib/application/service/ApplicationService.js +0 -13
  164. package/lib/asset/AssetModal.js +0 -42
  165. package/lib/asset/VideoModal.js +0 -48
  166. package/lib/asset/data/Asset.js +0 -6
  167. package/lib/asset/service/AssetService.js +0 -42
  168. package/lib/assets/App.scss +0 -96
  169. package/lib/assets/_variables.scss +0 -47
  170. package/lib/assets/form.scss +0 -90
  171. package/lib/banner/SubmissionRequestBanner.js +0 -16
  172. package/lib/captcha/data/CaptchaEnabledRequest.js +0 -6
  173. package/lib/card/Card.js +0 -26
  174. package/lib/card/assets/Card.scss +0 -44
  175. package/lib/contact/ContactModal.js +0 -42
  176. package/lib/contact/ContactSection.js +0 -345
  177. package/lib/contact/ContactSectionSkeleton.js +0 -33
  178. package/lib/contact/data/CommunityContact.js +0 -6
  179. package/lib/contact/data/Contact.js +0 -12
  180. package/lib/contact/data/ContactMessage.js +0 -24
  181. package/lib/contact/service/ContactService.js +0 -49
  182. package/lib/data/Calendar.js +0 -21
  183. package/lib/data/RenaissanceData.js +0 -16
  184. package/lib/data/SortField.js +0 -62
  185. package/lib/faq/FaqsCard.js +0 -26
  186. package/lib/faq/FaqsSection.js +0 -35
  187. package/lib/faq/PropertyFaqSection.js +0 -30
  188. package/lib/faq/ResidentFaqSection.js +0 -37
  189. package/lib/faq/data/Faq.js +0 -6
  190. package/lib/feature/FeatureSection.js +0 -19
  191. package/lib/floorplan/card/FloorplanCard.js +0 -148
  192. package/lib/floorplan/card/FloorplanCardSkeleton.js +0 -23
  193. package/lib/floorplan/card/FloorplanCardSlider.js +0 -45
  194. package/lib/floorplan/card/FloorplanPrice.js +0 -49
  195. package/lib/floorplan/card/SimilarFloorplanCard.js +0 -62
  196. package/lib/floorplan/card/TestimonialsCard.js +0 -25
  197. package/lib/floorplan/card/assets/FloorplanPrice.scss +0 -34
  198. package/lib/floorplan/data/Floorplan.js +0 -34
  199. package/lib/floorplan/data/FloorplanFilters.js +0 -6
  200. package/lib/floorplan/filter/FloorplanDropDown.js +0 -33
  201. package/lib/floorplan/section/FloorplanHero.js +0 -229
  202. package/lib/floorplan/section/FloorplanSection.js +0 -212
  203. package/lib/floorplan/section/FloorplanSectionSkeleton.js +0 -36
  204. package/lib/floorplan/section/FloorplansHeader.js +0 -214
  205. package/lib/floorplan/section/FloorplansHeaderSekeleton.js +0 -31
  206. package/lib/floorplan/section/FloorplansSection.js +0 -86
  207. package/lib/floorplan/section/HeroBadgeStats.js +0 -75
  208. package/lib/floorplan/section/assets/BadgeStats.scss +0 -5
  209. package/lib/floorplan/section/filter/Availability.js +0 -33
  210. package/lib/floorplan/section/filter/Bedroom.js +0 -32
  211. package/lib/floorplan/section/filter/Price.js +0 -36
  212. package/lib/floorplan/section/filter/Sort.js +0 -41
  213. package/lib/floorplan/section/filter/Style.js +0 -31
  214. package/lib/floorplan/service/FloorplanService.js +0 -290
  215. package/lib/footer/Footer.js +0 -98
  216. package/lib/gallery/DriveGallery.js +0 -67
  217. package/lib/gallery/Gallery.js +0 -116
  218. package/lib/gallery/GalleryModal.js +0 -74
  219. package/lib/gallery/GridGallery.js +0 -32
  220. package/lib/gallery/GridGalleryCover.js +0 -90
  221. package/lib/gallery/GridGalleryMobile.js +0 -88
  222. package/lib/gallery/GridGallerySkeleton.js +0 -19
  223. package/lib/gallery/HeroImageCard.js +0 -31
  224. package/lib/gallery/ImageCard.js +0 -28
  225. package/lib/gallery/ImageCardSkeleton.js +0 -22
  226. package/lib/gallery/VideoTours.js +0 -53
  227. package/lib/gallery/VirtualTour.js +0 -26
  228. package/lib/gallery/data/GalleryImage.js +0 -6
  229. package/lib/header/InfoHeader.js +0 -21
  230. package/lib/header/assets/InfoHeader.scss +0 -28
  231. package/lib/home-page-special/HomePageSpecialCard.js +0 -40
  232. package/lib/home-page-special/HomePageSpecialModal.js +0 -65
  233. package/lib/home-page-special/HomePageSpecialSection.js +0 -33
  234. package/lib/home-page-special/data/HomePageSpecial.js +0 -6
  235. package/lib/home-page-special/service/HomePageSpecialService.js +0 -24
  236. package/lib/index.js +0 -822
  237. package/lib/map/MapSection.js +0 -25
  238. package/lib/property/LeaseOfficeSkeleton.js +0 -17
  239. package/lib/property/PropertyLocation.js +0 -89
  240. package/lib/property/PropertyLocationSkeleton.js +0 -19
  241. package/lib/property/PropertyVideo.js +0 -21
  242. package/lib/property/data/Property.js +0 -36
  243. package/lib/property/service/PropertyService.js +0 -41
  244. package/lib/resident/data/Resident.js +0 -6
  245. package/lib/resident/service/ResidentService.js +0 -19
  246. package/lib/review/ReviewSection.js +0 -81
  247. package/lib/service/Api.js +0 -25
  248. package/lib/short-term/Hostaway.js +0 -63
  249. package/lib/short-term/ShortTermFloorplanCard.js +0 -112
  250. package/lib/short-term/ShortTermFloorplanHero.js +0 -231
  251. package/lib/short-term/ShortTermFloorplanSection.js +0 -135
  252. package/lib/short-term/ShortTermFloorplansHeader.js +0 -145
  253. package/lib/short-term/ShortTermFloorplansSection.js +0 -80
  254. package/lib/short-term/ShortTermPricingCard.js +0 -70
  255. package/lib/short-term/ShortTermSort.js +0 -41
  256. package/lib/short-term/ShortTermStyleFilter.js +0 -31
  257. package/lib/short-term/data/ShortTerm.js +0 -15
  258. package/lib/short-term/data/ShortTermFilters.js +0 -41
  259. package/lib/short-term/service/ShortTermService.js +0 -54
  260. package/lib/special-offer/SpecialOfferBadge.js +0 -24
  261. package/lib/special-offer/SpecialOfferButton.js +0 -30
  262. package/lib/sublet/SubletCard.js +0 -65
  263. package/lib/sublet/SubletImage.js +0 -59
  264. package/lib/sublet/SubletMessageModal.js +0 -120
  265. package/lib/sublet/SubletNotFound.js +0 -16
  266. package/lib/sublet/SubletSection.js +0 -447
  267. package/lib/sublet/SubletsSection.js +0 -41
  268. package/lib/sublet/data/Sublet.js +0 -28
  269. package/lib/sublet/data/SubletMessage.js +0 -6
  270. package/lib/sublet/services/SubletService.js +0 -52
  271. package/lib/summer-house/SummerHouseFeatures.js +0 -25
  272. package/lib/summer-house/data/SummerHouseAmenities.js +0 -8
  273. package/lib/team/TeamSection.js +0 -35
  274. package/lib/team/card/TeamCard.js +0 -38
  275. package/lib/team/card/TeamCardSkeleton.js +0 -25
  276. package/lib/team/data/TeamMember.js +0 -6
  277. package/lib/team/service/TeamService.js +0 -13
  278. package/lib/types/ga-gtag.d.js +0 -2
  279. package/lib/unit/card/UnitCard.js +0 -140
  280. package/lib/unit/data/Unit.js +0 -26
  281. package/lib/unit/data/UnitFilters.js +0 -6
  282. package/lib/unit/section/UnitHero.js +0 -234
  283. package/lib/unit/section/UnitPrice.js +0 -41
  284. package/lib/unit/section/UnitSection.js +0 -211
  285. package/lib/unit/section/UnitsHeader.js +0 -214
  286. package/lib/unit/section/UnitsSection.js +0 -87
  287. package/lib/unit/service/UnitService.js +0 -177
  288. package/lib/utils/PrettyPrintJson.js +0 -16
  289. package/lib/utils/Utils.js +0 -155
  290. package/lib/video/Video.js +0 -76
  291. package/lib/video/data/VideoAsset.js +0 -6
  292. /package/lib/heading/assets/{HeadingStory.scss → HeadingStory.css} +0 -0
@@ -1,211 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.UnitSection = void 0;
7
- var _react = _interopRequireWildcard(require("react"));
8
- var _Floorplan = require("../../floorplan/data/Floorplan");
9
- var _FloorplanService = require("../../floorplan/service/FloorplanService");
10
- require("./assets/UnitSection.scss");
11
- var _GridGallerySkeleton = require("../../gallery/GridGallerySkeleton");
12
- var _Utils = require("../../utils/Utils");
13
- var _Card = require("../../card/Card");
14
- var _TestimonialsCard = require("../../floorplan/card/TestimonialsCard");
15
- var _MapSection = require("../../map/MapSection");
16
- var _SimilarFloorplanCard = require("../../floorplan/card/SimilarFloorplanCard");
17
- var _muncherUi = require("@contentmunch/muncher-ui");
18
- var _moment = _interopRequireDefault(require("moment"));
19
- var _Property = require("../../property/data/Property");
20
- var _ShortTermFloorplanSection = require("../../short-term/ShortTermFloorplanSection");
21
- var _FaqsCard = require("../../faq/FaqsCard");
22
- var _UnitService = require("../service/UnitService");
23
- var _UnitHero = require("./UnitHero");
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
26
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
27
- const UnitSection = _ref => {
28
- var _unitFloorplan$floorp, _unitFloorplan$floorp2;
29
- let {
30
- contactClickHandler,
31
- applyClickHandler,
32
- unitId,
33
- locationRef,
34
- handleRefToLocation,
35
- handleHtmlTitleUpdate
36
- } = _ref;
37
- const [unitFloorplan, setUnitFloorplan] = (0, _react.useState)({});
38
- const [similarFloorplans, setSimilarFloorplans] = (0, _react.useState)([]);
39
- const [floorplanVariations, setFloorplanVariations] = (0, _react.useState)([]);
40
- const [testimonials, setTestimonials] = (0, _react.useState)([]);
41
- const [webSpecials, setWebSpecials] = (0, _react.useState)([]);
42
- const [floorplanFaqs, setFloorplanFaqs] = (0, _react.useState)([]);
43
- const [isLoading, setIsLoading] = (0, _react.useState)(true);
44
- const [errorLoading, setErrorLoading] = (0, _react.useState)(false);
45
- const mapRef = (0, _react.useRef)(null);
46
- const handleRefToMap = () => {
47
- if (handleRefToLocation) handleRefToLocation();else {
48
- var _mapRef$current;
49
- (_mapRef$current = mapRef.current) === null || _mapRef$current === void 0 || _mapRef$current.scrollIntoView({
50
- behavior: "smooth",
51
- block: "start"
52
- });
53
- }
54
- };
55
- (0, _react.useEffect)(() => {
56
- (0, _UnitService.getUnit)(unitId).then(unitData => {
57
- setUnitFloorplan(unitData);
58
- if (handleHtmlTitleUpdate) {
59
- handleHtmlTitleUpdate(unitData.floorplan.htmlTitle);
60
- }
61
- if (_Property.LeaseType.SHORT_TERM === unitData.floorplan.property.leaseType) {
62
- setIsLoading(false);
63
- } else {
64
- Promise.all([(0, _FloorplanService.getFloorplanVariations)(unitData.floorplan.id), (0, _FloorplanService.getSimilarFloorplans)(unitData.floorplan.id), (0, _FloorplanService.getTestimonials)(unitData.floorplan.id), (0, _FloorplanService.getWebSpecials)(unitData.floorplan.id), (0, _FloorplanService.getFloorplanFaqs)(unitData.floorplan.id)]).then(data => {
65
- const today = (0, _moment.default)();
66
- setFloorplanVariations(data[0]);
67
- setSimilarFloorplans(data[1]);
68
- setTestimonials(data[2]);
69
- const validWebSpecials = [];
70
- data[3].forEach(webSpecial => {
71
- if ((0, _Utils.dateToMoment)(webSpecial.startDate).isBefore(today) && (0, _Utils.dateToMoment)(webSpecial.endDate).isAfter(today)) {
72
- validWebSpecials.push(webSpecial);
73
- }
74
- });
75
- setWebSpecials(validWebSpecials);
76
- setFloorplanFaqs(data[4].sort((a, b) => a.sortOrder - b.sortOrder));
77
- }).catch(() => {
78
- setErrorLoading(true);
79
- }).finally(() => {
80
- setIsLoading(false);
81
- });
82
- }
83
- }).catch(() => {
84
- setErrorLoading(true);
85
- setIsLoading(false);
86
- });
87
- }, [unitId]);
88
- const availableDates = () => {
89
- const sortAvailableDates = (a, b) => (0, _moment.default)(a, _FloorplanService.MONTH_YEAR_FORMAT).diff((0, _moment.default)(b, _FloorplanService.MONTH_YEAR_FORMAT));
90
- const dates = new Set();
91
- const today = (0, _moment.default)();
92
- const tomorrow = today.add(1, "day");
93
- const isAvailableNow = moveInDate => moveInDate.isBefore(tomorrow);
94
- const moveInDate = (0, _Utils.dateToMoment)(unitFloorplan.moveInDate);
95
- if (isAvailableNow(moveInDate)) {
96
- dates.add(today.format(_FloorplanService.MONTH_YEAR_FORMAT));
97
- if (unitFloorplan.availabilityExtensionMonths && unitFloorplan.availabilityExtensionMonths > 0) {
98
- for (let i = 1; i <= unitFloorplan.availabilityExtensionMonths; i++) {
99
- let extensionDate = (0, _moment.default)().add(i, 'month');
100
- dates.add(extensionDate.format(_FloorplanService.MONTH_YEAR_FORMAT));
101
- }
102
- }
103
- } else {
104
- dates.add(moveInDate.format(_FloorplanService.MONTH_YEAR_FORMAT));
105
- if (unitFloorplan.availabilityExtensionMonths && unitFloorplan.availabilityExtensionMonths > 0) {
106
- for (let i = 1; i <= unitFloorplan.availabilityExtensionMonths; i++) {
107
- let extensionDate = (0, _Utils.dateToMoment)(unitFloorplan.moveInDate).add(i, 'month');
108
- dates.add(extensionDate.format(_FloorplanService.MONTH_YEAR_FORMAT));
109
- }
110
- }
111
- }
112
- return Array.from(dates).sort(sortAvailableDates);
113
- };
114
- const residentUtilityDetails = utility => utility.averageMonthlyBill ? (0, _Utils.capitalizeFirstLetter)(utility.name) + " - Avg/Mo " + (0, _Utils.toUSD)(utility.averageMonthlyBill) : (0, _Utils.capitalizeFirstLetter)(utility.name);
115
- const isAverageMonthlyBillPresent = () => unitFloorplan.floorplan.utilities.filter(utility => utility.type === _Floorplan.UtilityType.RESIDENT_UTILITY).some(utility => utility.averageMonthlyBill != null);
116
- const isWithinTwelveMonths = date => {
117
- const current = (0, _moment.default)(date, "MMM YYYY");
118
- const twelveMonthsFromNow = (0, _moment.default)().add(1, "year");
119
- return current.isBefore(twelveMonthsFromNow);
120
- };
121
- return _Property.LeaseType.SHORT_TERM === ((_unitFloorplan$floorp = unitFloorplan.floorplan) === null || _unitFloorplan$floorp === void 0 || (_unitFloorplan$floorp = _unitFloorplan$floorp.property) === null || _unitFloorplan$floorp === void 0 ? void 0 : _unitFloorplan$floorp.leaseType) ? /*#__PURE__*/_react.default.createElement(_ShortTermFloorplanSection.ShortTermFloorplanSection, {
122
- contactClickHandler: contactClickHandler,
123
- applyClickHandler: applyClickHandler,
124
- floorplanId: unitId
125
- }) : /*#__PURE__*/_react.default.createElement("section", {
126
- className: "section-unit"
127
- }, isLoading ? /*#__PURE__*/_react.default.createElement("section", {
128
- className: "section-floorplan--hero"
129
- }, /*#__PURE__*/_react.default.createElement(_GridGallerySkeleton.GridGallerySkeleton, null)) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, errorLoading ? /*#__PURE__*/_react.default.createElement("section", {
130
- className: "div-full--center"
131
- }, /*#__PURE__*/_react.default.createElement("h2", null, "Uh-oh, this is a 404")) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_UnitHero.UnitHero, {
132
- unit: unitFloorplan,
133
- contactClickHandler: contactClickHandler,
134
- webSpecials: webSpecials,
135
- applyClickHandler: applyClickHandler,
136
- handleRefToMap: handleRefToMap
137
- }), /*#__PURE__*/_react.default.createElement("div", {
138
- className: "container"
139
- }, /*#__PURE__*/_react.default.createElement("div", {
140
- className: "unit--cards"
141
- }, /*#__PURE__*/_react.default.createElement(_Card.Card, {
142
- title: "Details"
143
- }, /*#__PURE__*/_react.default.createElement("p", {
144
- className: "unit-card--featured"
145
- }, unitFloorplan.floorplan.bedroom, " Bedroom | ", unitFloorplan.floorplan.bathroom, " Bathroom ", (0, _Utils.enumToString)(unitFloorplan.floorplan.style)), /*#__PURE__*/_react.default.createElement("p", {
146
- className: "unit-card--featured"
147
- }, "$", unitFloorplan.squareFoot, " Square Feet"), /*#__PURE__*/_react.default.createElement("p", {
148
- className: "unit-card--featured"
149
- }, "$", unitFloorplan.rent, " /mo"), /*#__PURE__*/_react.default.createElement("p", {
150
- className: "unit-card--featured"
151
- }, "$", unitFloorplan.deposit, " Security Deposit"), /*#__PURE__*/_react.default.createElement("p", null, unitFloorplan.floorplan.description)), unitFloorplan.floorplan.amenities.length > 0 ? /*#__PURE__*/_react.default.createElement(_Card.Card, {
152
- title: "Amenities"
153
- }, /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, unitFloorplan.floorplan.amenities.filter(amenity => amenity.featured).map(amenity => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
154
- key: "unitFloorplan-amenity-" + amenity.id,
155
- bulletIcon: "star",
156
- isFeatured: true
157
- }, amenity.name)), unitFloorplan.floorplan.amenities.filter(amenity => !amenity.featured).map(amenity => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
158
- key: "unitFloorplan-amenity-" + amenity.id,
159
- bulletIcon: "dot"
160
- }, amenity.name))), floorplanVariations.length > 0 ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h5", null, "Variations"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, floorplanVariations.map((variation, i) => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
161
- key: "unitFloorplan-variation-" + i
162
- }, variation.variation)))) : "") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), testimonials.length > 0 ? /*#__PURE__*/_react.default.createElement(_TestimonialsCard.TestimonialsCard, {
163
- testimonials: testimonials
164
- }) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), /*#__PURE__*/_react.default.createElement(_Card.Card, {
165
- title: "Pets"
166
- }, /*#__PURE__*/_react.default.createElement("h5", null, "Permitted"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, (0, _UnitService.permittedPets)(unitFloorplan).map((pet, i) => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
167
- key: "unitFloorplan-permitted-pet-" + i,
168
- bulletIcon: "check",
169
- bulletColor: "green"
170
- }, pet))), (0, _UnitService.notPermittedPets)(unitFloorplan).length > 0 ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h5", null, "Not Permitted"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, (0, _UnitService.notPermittedPets)(unitFloorplan).map((pet, i) => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
171
- key: "unitFloorplan-not-permitted-pet-" + i,
172
- bulletColor: "brown",
173
- bulletIcon: "close"
174
- }, pet)))) : "", unitFloorplan.petPolicy ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h5", null, "Additional Information"), /*#__PURE__*/_react.default.createElement("p", null, unitFloorplan.petPolicy)) : ""), /*#__PURE__*/_react.default.createElement(_Card.Card, {
175
- title: "Availability"
176
- }, /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, availableDates().filter(availableDate => isWithinTwelveMonths(availableDate)).map(availableDate => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
177
- key: "unitFloorplan-unit-availability-" + availableDate,
178
- bulletIcon: "calendar"
179
- }, "Available in ", /*#__PURE__*/_react.default.createElement("strong", null, (0, _Utils.capitalizeFirstLetter)(availableDate)))))), /*#__PURE__*/_react.default.createElement(_Card.Card, {
180
- title: "Utilities"
181
- }, /*#__PURE__*/_react.default.createElement("h5", null, "Paid By Landlord"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, unitFloorplan.floorplan.utilities.filter(utility => utility.type === _Floorplan.UtilityType.INCLUDED_UTILITY).map(utility => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
182
- key: "unitFloorplan-included-utility-" + utility.id,
183
- bulletIcon: "home"
184
- }, (0, _Utils.capitalizeFirstLetter)(utility.name)))), /*#__PURE__*/_react.default.createElement("h5", null, "Paid By Resident"), /*#__PURE__*/_react.default.createElement(_muncherUi.Ul, null, unitFloorplan.floorplan.utilities.filter(utility => utility.type === _Floorplan.UtilityType.RESIDENT_UTILITY).map(utility => /*#__PURE__*/_react.default.createElement(_muncherUi.Li, {
185
- key: "unitFloorplan-resident-utility-" + utility.id,
186
- bulletIcon: "dollar"
187
- }, residentUtilityDetails(utility)))), isAverageMonthlyBillPresent() ? /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("i", null, "**Average utilities shown above are an estimate. Actual monthly utility costs can vary significantly based on individual usage, time of year, the weather, and other factors")) : ""), similarFloorplans.length > 0 ? /*#__PURE__*/_react.default.createElement(_SimilarFloorplanCard.SimilarFloorplanCard, {
188
- similarFloorplans: similarFloorplans
189
- }) : "", floorplanFaqs.length > 0 ? /*#__PURE__*/_react.default.createElement(_FaqsCard.FaqsCard, {
190
- faqs: floorplanFaqs,
191
- title: "Frequently Asked Questions"
192
- }) : "", /*#__PURE__*/_react.default.createElement("div", {
193
- className: "contact-card"
194
- }, /*#__PURE__*/_react.default.createElement(_Card.Card, {
195
- featured: true
196
- }, /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("i", null, "Questions?")), /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("i", null, "Call or text us anytime:")), (_unitFloorplan$floorp2 = unitFloorplan.floorplan.property) !== null && _unitFloorplan$floorp2 !== void 0 && _unitFloorplan$floorp2.phone ? /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("a", {
197
- href: "tel:" + unitFloorplan.floorplan.property.phone
198
- }, (0, _Utils.formatPhoneNumber)(unitFloorplan.floorplan.property.phone))) : "", /*#__PURE__*/_react.default.createElement(_muncherUi.Button, {
199
- variant: "tertiary",
200
- onClick: contactClickHandler,
201
- size: "large"
202
- }, "Contact Us \xBB")))), /*#__PURE__*/_react.default.createElement(_Card.Card, null, /*#__PURE__*/_react.default.createElement("div", {
203
- ref: locationRef ? locationRef : mapRef,
204
- id: "location",
205
- className: "reference"
206
- }), /*#__PURE__*/_react.default.createElement(_MapSection.MapSection, {
207
- src: (0, _Utils.floorplanAddressToGoogleMap)((0, _UnitService.addressFromUnit)(unitFloorplan))
208
- }))))));
209
- };
210
- exports.UnitSection = UnitSection;
211
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfRmxvb3JwbGFuIiwiX0Zsb29ycGxhblNlcnZpY2UiLCJfR3JpZEdhbGxlcnlTa2VsZXRvbiIsIl9VdGlscyIsIl9DYXJkIiwiX1Rlc3RpbW9uaWFsc0NhcmQiLCJfTWFwU2VjdGlvbiIsIl9TaW1pbGFyRmxvb3JwbGFuQ2FyZCIsIl9tdW5jaGVyVWkiLCJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9Qcm9wZXJ0eSIsIl9TaG9ydFRlcm1GbG9vcnBsYW5TZWN0aW9uIiwiX0ZhcXNDYXJkIiwiX1VuaXRTZXJ2aWNlIiwiX1VuaXRIZXJvIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiVW5pdFNlY3Rpb24iLCJfcmVmIiwiX3VuaXRGbG9vcnBsYW4kZmxvb3JwIiwiX3VuaXRGbG9vcnBsYW4kZmxvb3JwMiIsImNvbnRhY3RDbGlja0hhbmRsZXIiLCJhcHBseUNsaWNrSGFuZGxlciIsInVuaXRJZCIsImxvY2F0aW9uUmVmIiwiaGFuZGxlUmVmVG9Mb2NhdGlvbiIsImhhbmRsZUh0bWxUaXRsZVVwZGF0ZSIsInVuaXRGbG9vcnBsYW4iLCJzZXRVbml0Rmxvb3JwbGFuIiwidXNlU3RhdGUiLCJzaW1pbGFyRmxvb3JwbGFucyIsInNldFNpbWlsYXJGbG9vcnBsYW5zIiwiZmxvb3JwbGFuVmFyaWF0aW9ucyIsInNldEZsb29ycGxhblZhcmlhdGlvbnMiLCJ0ZXN0aW1vbmlhbHMiLCJzZXRUZXN0aW1vbmlhbHMiLCJ3ZWJTcGVjaWFscyIsInNldFdlYlNwZWNpYWxzIiwiZmxvb3JwbGFuRmFxcyIsInNldEZsb29ycGxhbkZhcXMiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJlcnJvckxvYWRpbmciLCJzZXRFcnJvckxvYWRpbmciLCJtYXBSZWYiLCJ1c2VSZWYiLCJoYW5kbGVSZWZUb01hcCIsIl9tYXBSZWYkY3VycmVudCIsImN1cnJlbnQiLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJ1c2VFZmZlY3QiLCJnZXRVbml0IiwidGhlbiIsInVuaXREYXRhIiwiZmxvb3JwbGFuIiwiaHRtbFRpdGxlIiwiTGVhc2VUeXBlIiwiU0hPUlRfVEVSTSIsInByb3BlcnR5IiwibGVhc2VUeXBlIiwiUHJvbWlzZSIsImFsbCIsImdldEZsb29ycGxhblZhcmlhdGlvbnMiLCJpZCIsImdldFNpbWlsYXJGbG9vcnBsYW5zIiwiZ2V0VGVzdGltb25pYWxzIiwiZ2V0V2ViU3BlY2lhbHMiLCJnZXRGbG9vcnBsYW5GYXFzIiwiZGF0YSIsInRvZGF5IiwibW9tZW50IiwidmFsaWRXZWJTcGVjaWFscyIsImZvckVhY2giLCJ3ZWJTcGVjaWFsIiwiZGF0ZVRvTW9tZW50Iiwic3RhcnREYXRlIiwiaXNCZWZvcmUiLCJlbmREYXRlIiwiaXNBZnRlciIsInB1c2giLCJzb3J0IiwiYiIsInNvcnRPcmRlciIsImNhdGNoIiwiZmluYWxseSIsImF2YWlsYWJsZURhdGVzIiwic29ydEF2YWlsYWJsZURhdGVzIiwiTU9OVEhfWUVBUl9GT1JNQVQiLCJkaWZmIiwiZGF0ZXMiLCJTZXQiLCJ0b21vcnJvdyIsImFkZCIsImlzQXZhaWxhYmxlTm93IiwibW92ZUluRGF0ZSIsImZvcm1hdCIsImF2YWlsYWJpbGl0eUV4dGVuc2lvbk1vbnRocyIsImV4dGVuc2lvbkRhdGUiLCJBcnJheSIsImZyb20iLCJyZXNpZGVudFV0aWxpdHlEZXRhaWxzIiwidXRpbGl0eSIsImF2ZXJhZ2VNb250aGx5QmlsbCIsImNhcGl0YWxpemVGaXJzdExldHRlciIsIm5hbWUiLCJ0b1VTRCIsImlzQXZlcmFnZU1vbnRobHlCaWxsUHJlc2VudCIsInV0aWxpdGllcyIsImZpbHRlciIsInR5cGUiLCJVdGlsaXR5VHlwZSIsIlJFU0lERU5UX1VUSUxJVFkiLCJzb21lIiwiaXNXaXRoaW5Ud2VsdmVNb250aHMiLCJkYXRlIiwidHdlbHZlTW9udGhzRnJvbU5vdyIsImNyZWF0ZUVsZW1lbnQiLCJTaG9ydFRlcm1GbG9vcnBsYW5TZWN0aW9uIiwiZmxvb3JwbGFuSWQiLCJjbGFzc05hbWUiLCJHcmlkR2FsbGVyeVNrZWxldG9uIiwiRnJhZ21lbnQiLCJVbml0SGVybyIsInVuaXQiLCJDYXJkIiwidGl0bGUiLCJiZWRyb29tIiwiYmF0aHJvb20iLCJlbnVtVG9TdHJpbmciLCJzdHlsZSIsInNxdWFyZUZvb3QiLCJyZW50IiwiZGVwb3NpdCIsImRlc2NyaXB0aW9uIiwiYW1lbml0aWVzIiwibGVuZ3RoIiwiVWwiLCJhbWVuaXR5IiwiZmVhdHVyZWQiLCJtYXAiLCJMaSIsImtleSIsImJ1bGxldEljb24iLCJpc0ZlYXR1cmVkIiwidmFyaWF0aW9uIiwiVGVzdGltb25pYWxzQ2FyZCIsInBlcm1pdHRlZFBldHMiLCJwZXQiLCJidWxsZXRDb2xvciIsIm5vdFBlcm1pdHRlZFBldHMiLCJwZXRQb2xpY3kiLCJhdmFpbGFibGVEYXRlIiwiSU5DTFVERURfVVRJTElUWSIsIlNpbWlsYXJGbG9vcnBsYW5DYXJkIiwiRmFxc0NhcmQiLCJmYXFzIiwicGhvbmUiLCJocmVmIiwiZm9ybWF0UGhvbmVOdW1iZXIiLCJCdXR0b24iLCJ2YXJpYW50Iiwib25DbGljayIsInNpemUiLCJyZWYiLCJNYXBTZWN0aW9uIiwic3JjIiwiZmxvb3JwbGFuQWRkcmVzc1RvR29vZ2xlTWFwIiwiYWRkcmVzc0Zyb21Vbml0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bml0L3NlY3Rpb24vVW5pdFNlY3Rpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICAgIEZsb29ycGxhbkZhcSxcbiAgICBGbG9vcnBsYW5WYXJpYXRpb24sXG4gICAgU2ltaWxhckZsb29ycGxhbixcbiAgICBUZXN0aW1vbmlhbCxcbiAgICBVdGlsaXR5TmFtZSxcbiAgICBVdGlsaXR5VHlwZSxcbiAgICBXZWJTcGVjaWFsXG59IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vZGF0YS9GbG9vcnBsYW5cIjtcbmltcG9ydCB7XG4gICAgZ2V0Rmxvb3JwbGFuRmFxcyxcbiAgICBnZXRGbG9vcnBsYW5WYXJpYXRpb25zLFxuICAgIGdldFNpbWlsYXJGbG9vcnBsYW5zLFxuICAgIGdldFRlc3RpbW9uaWFscyxcbiAgICBnZXRXZWJTcGVjaWFscyxcbiAgICBNT05USF9ZRUFSX0ZPUk1BVFxufSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL3NlcnZpY2UvRmxvb3JwbGFuU2VydmljZVwiO1xuaW1wb3J0IFwiLi9hc3NldHMvVW5pdFNlY3Rpb24uc2Nzc1wiO1xuaW1wb3J0IHtHcmlkR2FsbGVyeVNrZWxldG9ufSBmcm9tIFwiLi4vLi4vZ2FsbGVyeS9HcmlkR2FsbGVyeVNrZWxldG9uXCI7XG5pbXBvcnQge1xuICAgIGNhcGl0YWxpemVGaXJzdExldHRlcixcbiAgICBkYXRlVG9Nb21lbnQsXG4gICAgZW51bVRvU3RyaW5nLFxuICAgIGZsb29ycGxhbkFkZHJlc3NUb0dvb2dsZU1hcCxcbiAgICBmb3JtYXRQaG9uZU51bWJlcixcbiAgICB0b1VTRFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvVXRpbHNcIjtcbmltcG9ydCB7Q2FyZH0gZnJvbSBcIi4uLy4uL2NhcmQvQ2FyZFwiO1xuaW1wb3J0IHtUZXN0aW1vbmlhbHNDYXJkfSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL2NhcmQvVGVzdGltb25pYWxzQ2FyZFwiO1xuaW1wb3J0IHtNYXBTZWN0aW9ufSBmcm9tIFwiLi4vLi4vbWFwL01hcFNlY3Rpb25cIjtcbmltcG9ydCB7U2ltaWxhckZsb29ycGxhbkNhcmR9IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vY2FyZC9TaW1pbGFyRmxvb3JwbGFuQ2FyZFwiO1xuaW1wb3J0IHtCdXR0b24sIExpLCBVbH0gZnJvbSBcIkBjb250ZW50bXVuY2gvbXVuY2hlci11aVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQge0xlYXNlVHlwZX0gZnJvbSBcIi4uLy4uL3Byb3BlcnR5L2RhdGEvUHJvcGVydHlcIjtcbmltcG9ydCB7U2hvcnRUZXJtRmxvb3JwbGFuU2VjdGlvbn0gZnJvbSBcIi4uLy4uL3Nob3J0LXRlcm0vU2hvcnRUZXJtRmxvb3JwbGFuU2VjdGlvblwiO1xuaW1wb3J0IHtGYXFzQ2FyZH0gZnJvbSBcIi4uLy4uL2ZhcS9GYXFzQ2FyZFwiO1xuaW1wb3J0IHthZGRyZXNzRnJvbVVuaXQsIGdldFVuaXQsIG5vdFBlcm1pdHRlZFBldHMsIHBlcm1pdHRlZFBldHN9IGZyb20gXCIuLi9zZXJ2aWNlL1VuaXRTZXJ2aWNlXCI7XG5pbXBvcnQge1VuaXRGbG9vcnBsYW59IGZyb20gXCIuLi9kYXRhL1VuaXRcIjtcbmltcG9ydCB7VW5pdEhlcm99IGZyb20gXCIuL1VuaXRIZXJvXCI7XG5cbmV4cG9ydCBjb25zdCBVbml0U2VjdGlvbjogUmVhY3QuRkM8VW5pdFNlY3Rpb25Qcm9wcz4gPSAoXG4gICAge1xuICAgICAgICBjb250YWN0Q2xpY2tIYW5kbGVyLFxuICAgICAgICBhcHBseUNsaWNrSGFuZGxlcixcbiAgICAgICAgdW5pdElkLFxuICAgICAgICBsb2NhdGlvblJlZixcbiAgICAgICAgaGFuZGxlUmVmVG9Mb2NhdGlvbixcbiAgICAgICAgaGFuZGxlSHRtbFRpdGxlVXBkYXRlXG4gICAgfSkgPT4ge1xuICAgIGNvbnN0IFt1bml0Rmxvb3JwbGFuLCBzZXRVbml0Rmxvb3JwbGFuXSA9IHVzZVN0YXRlPFVuaXRGbG9vcnBsYW4+KHt9IGFzIFVuaXRGbG9vcnBsYW4pO1xuICAgIGNvbnN0IFtzaW1pbGFyRmxvb3JwbGFucywgc2V0U2ltaWxhckZsb29ycGxhbnNdID0gdXNlU3RhdGU8U2ltaWxhckZsb29ycGxhbltdPihbXSk7XG4gICAgY29uc3QgW2Zsb29ycGxhblZhcmlhdGlvbnMsIHNldEZsb29ycGxhblZhcmlhdGlvbnNdID0gdXNlU3RhdGU8Rmxvb3JwbGFuVmFyaWF0aW9uW10+KFtdKTtcbiAgICBjb25zdCBbdGVzdGltb25pYWxzLCBzZXRUZXN0aW1vbmlhbHNdID0gdXNlU3RhdGU8VGVzdGltb25pYWxbXT4oW10pO1xuICAgIGNvbnN0IFt3ZWJTcGVjaWFscywgc2V0V2ViU3BlY2lhbHNdID0gdXNlU3RhdGU8V2ViU3BlY2lhbFtdPihbXSk7XG4gICAgY29uc3QgW2Zsb29ycGxhbkZhcXMsIHNldEZsb29ycGxhbkZhcXNdID0gdXNlU3RhdGU8Rmxvb3JwbGFuRmFxW10+KFtdKTtcblxuICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbZXJyb3JMb2FkaW5nLCBzZXRFcnJvckxvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3QgbWFwUmVmOiBSZWFjdC5SZWY8SFRNTERpdkVsZW1lbnQ+ID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgICBjb25zdCBoYW5kbGVSZWZUb01hcCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGhhbmRsZVJlZlRvTG9jYXRpb24pXG4gICAgICAgICAgICBoYW5kbGVSZWZUb0xvY2F0aW9uKCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWFwUmVmLmN1cnJlbnQ/LnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICAgICAgICBiZWhhdmlvcjogXCJzbW9vdGhcIixcbiAgICAgICAgICAgICAgICBibG9jazogXCJzdGFydFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZ2V0VW5pdCh1bml0SWQpLnRoZW4odW5pdERhdGEgPT4ge1xuICAgICAgICAgICAgc2V0VW5pdEZsb29ycGxhbih1bml0RGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChoYW5kbGVIdG1sVGl0bGVVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVIdG1sVGl0bGVVcGRhdGUodW5pdERhdGEuZmxvb3JwbGFuLmh0bWxUaXRsZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChMZWFzZVR5cGUuU0hPUlRfVEVSTSA9PT0gdW5pdERhdGEuZmxvb3JwbGFuLnByb3BlcnR5LmxlYXNlVHlwZSkge1xuICAgICAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Rmxvb3JwbGFuVmFyaWF0aW9ucyh1bml0RGF0YS5mbG9vcnBsYW4uaWQpLFxuICAgICAgICAgICAgICAgICAgICBnZXRTaW1pbGFyRmxvb3JwbGFucyh1bml0RGF0YS5mbG9vcnBsYW4uaWQpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUZXN0aW1vbmlhbHModW5pdERhdGEuZmxvb3JwbGFuLmlkKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0V2ViU3BlY2lhbHModW5pdERhdGEuZmxvb3JwbGFuLmlkKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Rmxvb3JwbGFuRmFxcyh1bml0RGF0YS5mbG9vcnBsYW4uaWQpLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rmxvb3JwbGFuVmFyaWF0aW9ucyhkYXRhWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNpbWlsYXJGbG9vcnBsYW5zKGRhdGFbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGVzdGltb25pYWxzKGRhdGFbMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRXZWJTcGVjaWFsczogV2ViU3BlY2lhbFtdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzNdLmZvckVhY2god2ViU3BlY2lhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVUb01vbWVudCh3ZWJTcGVjaWFsLnN0YXJ0RGF0ZSkuaXNCZWZvcmUodG9kYXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVUb01vbWVudCh3ZWJTcGVjaWFsLmVuZERhdGUpLmlzQWZ0ZXIodG9kYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkV2ViU3BlY2lhbHMucHVzaCh3ZWJTcGVjaWFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFdlYlNwZWNpYWxzKHZhbGlkV2ViU3BlY2lhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rmxvb3JwbGFuRmFxcyhkYXRhWzRdLnNvcnQoKGEsIGIpID0+IGEuc29ydE9yZGVyIC0gYi5zb3J0T3JkZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yTG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHNldEVycm9yTG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSwgW3VuaXRJZF0pO1xuXG4gICAgY29uc3QgYXZhaWxhYmxlRGF0ZXMgPSAoKTogc3RyaW5nW10gPT4ge1xuICAgICAgICBjb25zdCBzb3J0QXZhaWxhYmxlRGF0ZXMgPSAoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IG1vbWVudChhLCBNT05USF9ZRUFSX0ZPUk1BVCkuZGlmZihtb21lbnQoYiwgTU9OVEhfWUVBUl9GT1JNQVQpKTtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcblxuICAgICAgICBjb25zdCB0b21vcnJvdyA9IHRvZGF5LmFkZCgxLCBcImRheVwiKTtcbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGVOb3cgPSAobW92ZUluRGF0ZTogbW9tZW50Lk1vbWVudCkgPT4gbW92ZUluRGF0ZS5pc0JlZm9yZSh0b21vcnJvdyk7XG5cblxuICAgICAgICBjb25zdCBtb3ZlSW5EYXRlID0gZGF0ZVRvTW9tZW50KHVuaXRGbG9vcnBsYW4ubW92ZUluRGF0ZSk7XG4gICAgICAgIGlmIChpc0F2YWlsYWJsZU5vdyhtb3ZlSW5EYXRlKSkge1xuICAgICAgICAgICAgZGF0ZXMuYWRkKHRvZGF5LmZvcm1hdChNT05USF9ZRUFSX0ZPUk1BVCkpO1xuICAgICAgICAgICAgaWYgKHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzICYmIHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVuc2lvbkRhdGUgPSBtb21lbnQoKS5hZGQoaSwgJ21vbnRoJyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmFkZChleHRlbnNpb25EYXRlLmZvcm1hdChNT05USF9ZRUFSX0ZPUk1BVCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVzLmFkZChtb3ZlSW5EYXRlLmZvcm1hdChNT05USF9ZRUFSX0ZPUk1BVCkpO1xuICAgICAgICAgICAgaWYgKHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzICYmIHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHVuaXRGbG9vcnBsYW4uYXZhaWxhYmlsaXR5RXh0ZW5zaW9uTW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVuc2lvbkRhdGUgPSBkYXRlVG9Nb21lbnQodW5pdEZsb29ycGxhbi5tb3ZlSW5EYXRlKS5hZGQoaSwgJ21vbnRoJyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmFkZChleHRlbnNpb25EYXRlLmZvcm1hdChNT05USF9ZRUFSX0ZPUk1BVCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZGF0ZXMpLnNvcnQoc29ydEF2YWlsYWJsZURhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNpZGVudFV0aWxpdHlEZXRhaWxzID0gKHV0aWxpdHk6IFV0aWxpdHlOYW1lKSA9PlxuICAgICAgICB1dGlsaXR5LmF2ZXJhZ2VNb250aGx5QmlsbCA/XG4gICAgICAgICAgICBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodXRpbGl0eS5uYW1lKSArIFwiIC0gQXZnL01vIFwiICsgdG9VU0QodXRpbGl0eS5hdmVyYWdlTW9udGhseUJpbGwpXG4gICAgICAgICAgICA6IGNhcGl0YWxpemVGaXJzdExldHRlcih1dGlsaXR5Lm5hbWUpO1xuXG4gICAgY29uc3QgaXNBdmVyYWdlTW9udGhseUJpbGxQcmVzZW50ID0gKCkgPT4gdW5pdEZsb29ycGxhbi5mbG9vcnBsYW4udXRpbGl0aWVzLmZpbHRlcih1dGlsaXR5ID0+IHV0aWxpdHkudHlwZSA9PT0gVXRpbGl0eVR5cGUuUkVTSURFTlRfVVRJTElUWSkuc29tZSh1dGlsaXR5ID0+IHV0aWxpdHkuYXZlcmFnZU1vbnRobHlCaWxsICE9IG51bGwpO1xuXG5cbiAgICBjb25zdCBpc1dpdGhpblR3ZWx2ZU1vbnRocyA9IChkYXRlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IG1vbWVudChkYXRlLCBcIk1NTSBZWVlZXCIpO1xuICAgICAgICBjb25zdCB0d2VsdmVNb250aHNGcm9tTm93ID0gbW9tZW50KCkuYWRkKDEsIFwieWVhclwiKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQuaXNCZWZvcmUodHdlbHZlTW9udGhzRnJvbU5vdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcblxuICAgICAgICBMZWFzZVR5cGUuU0hPUlRfVEVSTSA9PT0gdW5pdEZsb29ycGxhbi5mbG9vcnBsYW4/LnByb3BlcnR5Py5sZWFzZVR5cGUgP1xuICAgICAgICAgICAgPFNob3J0VGVybUZsb29ycGxhblNlY3Rpb24gY29udGFjdENsaWNrSGFuZGxlcj17Y29udGFjdENsaWNrSGFuZGxlcn0gYXBwbHlDbGlja0hhbmRsZXI9e2FwcGx5Q2xpY2tIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvb3JwbGFuSWQ9e3VuaXRJZH0vPiA6XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJzZWN0aW9uLXVuaXRcIj5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZyA/IDxzZWN0aW9uIGNsYXNzTmFtZT1cInNlY3Rpb24tZmxvb3JwbGFuLS1oZXJvXCI+PEdyaWRHYWxsZXJ5U2tlbGV0b24vPjwvc2VjdGlvbj4gOiA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yTG9hZGluZyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiZGl2LWZ1bGwtLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+VWgtb2gsIHRoaXMgaXMgYSA0MDQ8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbml0SGVybyB1bml0PXt1bml0Rmxvb3JwbGFufSBjb250YWN0Q2xpY2tIYW5kbGVyPXtjb250YWN0Q2xpY2tIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViU3BlY2lhbHM9e3dlYlNwZWNpYWxzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlDbGlja0hhbmRsZXI9e2FwcGx5Q2xpY2tIYW5kbGVyfSBoYW5kbGVSZWZUb01hcD17aGFuZGxlUmVmVG9NYXB9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidW5pdC0tY2FyZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZCB0aXRsZT1cIkRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidW5pdC1jYXJkLS1mZWF0dXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3VuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLmJlZHJvb219IEJlZHJvb21cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwge3VuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLmJhdGhyb29tfSBCYXRocm9vbSB7ZW51bVRvU3RyaW5nKHVuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLnN0eWxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInVuaXQtY2FyZC0tZmVhdHVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dW5pdEZsb29ycGxhbi5zcXVhcmVGb290fSBTcXVhcmUgRmVldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInVuaXQtY2FyZC0tZmVhdHVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dW5pdEZsb29ycGxhbi5yZW50fSAvbW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ1bml0LWNhcmQtLWZlYXR1cmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3VuaXRGbG9vcnBsYW4uZGVwb3NpdH0gU2VjdXJpdHkgRGVwb3NpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3VuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdEZsb29ycGxhbi5mbG9vcnBsYW4uYW1lbml0aWVzLmxlbmd0aCA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhcmQgdGl0bGU9XCJBbWVuaXRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLmFtZW5pdGllcy5maWx0ZXIoYW1lbml0eSA9PiBhbWVuaXR5LmZlYXR1cmVkKS5tYXAoYW1lbml0eSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaSBrZXk9e1widW5pdEZsb29ycGxhbi1hbWVuaXR5LVwiICsgYW1lbml0eS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVsbGV0SWNvbj1cInN0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZlYXR1cmVkPXt0cnVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FtZW5pdHkubmFtZX1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0Rmxvb3JwbGFuLmZsb29ycGxhbi5hbWVuaXRpZXMuZmlsdGVyKGFtZW5pdHkgPT4gIWFtZW5pdHkuZmVhdHVyZWQpLm1hcChhbWVuaXR5ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLWFtZW5pdHktXCIgKyBhbWVuaXR5LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWxsZXRJY29uPVwiZG90XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthbWVuaXR5Lm5hbWV9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb29ycGxhblZhcmlhdGlvbnMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5WYXJpYXRpb25zPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb29ycGxhblZhcmlhdGlvbnMubWFwKCh2YXJpYXRpb24sIGkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLXZhcmlhdGlvbi1cIiArIGl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFyaWF0aW9uLnZhcmlhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDogXCJcIn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkPiA6IDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aW1vbmlhbHMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGVzdGltb25pYWxzQ2FyZCB0ZXN0aW1vbmlhbHM9e3Rlc3RpbW9uaWFsc30vPiA6IDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZCB0aXRsZT1cIlBldHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PlBlcm1pdHRlZDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXR0ZWRQZXRzKHVuaXRGbG9vcnBsYW4pLm1hcCgocGV0LCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGkga2V5PXtcInVuaXRGbG9vcnBsYW4tcGVybWl0dGVkLXBldC1cIiArIGl9IGJ1bGxldEljb249XCJjaGVja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWxsZXRDb2xvcj1cImdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGV0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25vdFBlcm1pdHRlZFBldHModW5pdEZsb29ycGxhbikubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjxoNT5Ob3QgUGVybWl0dGVkPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdFBlcm1pdHRlZFBldHModW5pdEZsb29ycGxhbikubWFwKChwZXQsIGkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLW5vdC1wZXJtaXR0ZWQtcGV0LVwiICsgaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVsbGV0Q29sb3I9XCJicm93blwiIGJ1bGxldEljb249XCJjbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGV0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDogXCJcIn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0Rmxvb3JwbGFuLnBldFBvbGljeSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PkFkZGl0aW9uYWwgSW5mb3JtYXRpb248L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57dW5pdEZsb29ycGxhbi5wZXRQb2xpY3l9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6IFwiXCJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZCB0aXRsZT1cIkF2YWlsYWJpbGl0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlRGF0ZXMoKS5maWx0ZXIoYXZhaWxhYmxlRGF0ZSA9PiBpc1dpdGhpblR3ZWx2ZU1vbnRocyhhdmFpbGFibGVEYXRlKSkubWFwKGF2YWlsYWJsZURhdGUgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLXVuaXQtYXZhaWxhYmlsaXR5LVwiICsgYXZhaWxhYmxlRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bGxldEljb249XCJjYWxlbmRhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiA8c3Ryb25nPntjYXBpdGFsaXplRmlyc3RMZXR0ZXIoYXZhaWxhYmxlRGF0ZSl9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1VsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENhcmQgdGl0bGU9XCJVdGlsaXRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PlBhaWQgQnkgTGFuZGxvcmQ8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdEZsb29ycGxhbi5mbG9vcnBsYW4udXRpbGl0aWVzLmZpbHRlcih1dGlsaXR5ID0+IHV0aWxpdHkudHlwZSA9PT0gVXRpbGl0eVR5cGUuSU5DTFVERURfVVRJTElUWSkubWFwKHV0aWxpdHkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpIGtleT17XCJ1bml0Rmxvb3JwbGFuLWluY2x1ZGVkLXV0aWxpdHktXCIgKyB1dGlsaXR5LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVsbGV0SWNvbj1cImhvbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjYXBpdGFsaXplRmlyc3RMZXR0ZXIodXRpbGl0eS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5QYWlkIEJ5IFJlc2lkZW50PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLnV0aWxpdGllcy5maWx0ZXIodXRpbGl0eSA9PiB1dGlsaXR5LnR5cGUgPT09IFV0aWxpdHlUeXBlLlJFU0lERU5UX1VUSUxJVFkpLm1hcCh1dGlsaXR5ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaSBrZXk9e1widW5pdEZsb29ycGxhbi1yZXNpZGVudC11dGlsaXR5LVwiICsgdXRpbGl0eS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bGxldEljb249XCJkb2xsYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZXNpZGVudFV0aWxpdHlEZXRhaWxzKHV0aWxpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzQXZlcmFnZU1vbnRobHlCaWxsUHJlc2VudCgpID8gPHA+PGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkF2ZXJhZ2UgdXRpbGl0aWVzIHNob3duIGFib3ZlIGFyZSBhbiBlc3RpbWF0ZS4gQWN0dWFsIG1vbnRobHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc3RzIGNhbiB2YXJ5IHNpZ25pZmljYW50bHkgYmFzZWQgb24gaW5kaXZpZHVhbCB1c2FnZSwgdGltZSBvZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB3ZWF0aGVyLCBhbmQgb3RoZXIgZmFjdG9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+PC9wPiA6IFwiXCJ9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmQ+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzaW1pbGFyRmxvb3JwbGFucy5sZW5ndGggPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNpbWlsYXJGbG9vcnBsYW5DYXJkIHNpbWlsYXJGbG9vcnBsYW5zPXtzaW1pbGFyRmxvb3JwbGFuc30vPiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Zsb29ycGxhbkZhcXMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGYXFzQ2FyZCBmYXFzPXtmbG9vcnBsYW5GYXFzfSB0aXRsZT1cIkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zXCIvPiA6IFwiXCJ9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhY3QtY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZCBmZWF0dXJlZD17dHJ1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48aT5RdWVzdGlvbnM/PC9pPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxpPkNhbGwgb3IgdGV4dCB1cyBhbnl0aW1lOjwvaT48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dW5pdEZsb29ycGxhbi5mbG9vcnBsYW4ucHJvcGVydHk/LnBob25lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtcInRlbDpcIiArIHVuaXRGbG9vcnBsYW4uZmxvb3JwbGFuLnByb3BlcnR5LnBob25lfT57Zm9ybWF0UGhvbmVOdW1iZXIodW5pdEZsb29ycGxhbi5mbG9vcnBsYW4ucHJvcGVydHkucGhvbmUpfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwidGVydGlhcnlcIiBvbkNsaWNrPXtjb250YWN0Q2xpY2tIYW5kbGVyfSBzaXplPVwibGFyZ2VcIj5Db250YWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDCuzwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXJkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgcmVmPXtsb2NhdGlvblJlZiA/IGxvY2F0aW9uUmVmIDogbWFwUmVmfSBpZD1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlZmVyZW5jZVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1hcFNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtmbG9vcnBsYW5BZGRyZXNzVG9Hb29nbGVNYXAoYWRkcmVzc0Zyb21Vbml0KHVuaXRGbG9vcnBsYW4pKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pdFNlY3Rpb25Qcm9wcyB7XG4gICAgY29udGFjdENsaWNrSGFuZGxlcjogKCkgPT4gdm9pZDtcbiAgICBhcHBseUNsaWNrSGFuZGxlcjogKCkgPT4gdm9pZDtcbiAgICB1bml0SWQ6IHN0cmluZztcbiAgICBsb2NhdGlvblJlZj86IFJlYWN0LlJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgaGFuZGxlUmVmVG9Mb2NhdGlvbj86ICgpID0+IHZvaWQ7XG4gICAgaGFuZGxlSHRtbFRpdGxlVXBkYXRlPzogKHRpdGxlOiBzdHJpbmcpID0+IHZvaWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQVNBLElBQUFFLGlCQUFBLEdBQUFGLE9BQUE7QUFRQUEsT0FBQTtBQUNBLElBQUFHLG9CQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFRQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEscUJBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFVBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQVgsT0FBQTtBQUNBLElBQUFZLFNBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLDBCQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxTQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxZQUFBLEdBQUFmLE9BQUE7QUFFQSxJQUFBZ0IsU0FBQSxHQUFBaEIsT0FBQTtBQUFvQyxTQUFBVyx1QkFBQU0sR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUFBLFNBQUFHLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUF0Qix3QkFBQXNCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEs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
@@ -1,214 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.UnitsHeader = void 0;
7
- var _react = _interopRequireWildcard(require("react"));
8
- require("./assets/UnitsHeader.scss");
9
- var _muncherUi = require("@contentmunch/muncher-ui");
10
- var _Utils = require("../../utils/Utils");
11
- var _FloorplanService = require("../../floorplan/service/FloorplanService");
12
- var _Floorplan = require("../../floorplan/data/Floorplan");
13
- var _UnitService = require("../service/UnitService");
14
- var _Bedroom = require("../../floorplan/section/filter/Bedroom");
15
- var _Availability = require("../../floorplan/section/filter/Availability");
16
- var _Price = require("../../floorplan/section/filter/Price");
17
- var _Style = require("../../floorplan/section/filter/Style");
18
- var _Sort = require("../../floorplan/section/filter/Sort");
19
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
- const UnitsHeader = _ref => {
22
- let {
23
- title,
24
- filters,
25
- units,
26
- setCurrentUnits,
27
- isCondensed,
28
- currentUnitCounts,
29
- defaultFloorplanStyle,
30
- defaultBedRooms,
31
- defaultAvailability,
32
- defaultMaxRent,
33
- defaultMinRent,
34
- defaultFloorplanIds
35
- } = _ref;
36
- const [bedroomFilters, setBedroomFilters] = (0, _react.useState)(defaultBedRooms ? [defaultBedRooms] : []);
37
- const [availabilityFilters, setAvailabilityFilters] = (0, _react.useState)(defaultAvailability ? [(0, _FloorplanService.defaultAvailabilityToMonthYear)(defaultAvailability)] : []);
38
- const [styleFilters, setStyleFilters] = (0, _react.useState)(defaultFloorplanStyle ? [defaultFloorplanStyle] : []);
39
- const [minRent, setMinRent] = (0, _react.useState)(defaultMinRent ? defaultMinRent : _Floorplan.MIN_RENT);
40
- const [maxRent, setMaxRent] = (0, _react.useState)(defaultMaxRent ? defaultMaxRent : _Floorplan.MAX_RENT);
41
- const [sortBy, setSortBy] = (0, _react.useState)("featured");
42
- const [floorplanIds, setFloorplanIds] = (0, _react.useState)(defaultFloorplanIds ? defaultFloorplanIds : []);
43
- const currentFilters = {
44
- bedroomFilters,
45
- availabilityFilters,
46
- styleFilters,
47
- minRent,
48
- maxRent,
49
- sortBy,
50
- floorplanIds
51
- };
52
- const handleSortAndFilter = withCurrentFilters => {
53
- setCurrentUnits((0, _UnitService.sortAndFilterUnits)(units, withCurrentFilters));
54
- };
55
- const handleMinRentChange = rent => {
56
- setMinRent(rent);
57
- handleSortAndFilter({
58
- ...currentFilters,
59
- minRent: rent
60
- });
61
- };
62
- const handleMaxRentChange = rent => {
63
- setMaxRent(rent);
64
- handleSortAndFilter({
65
- ...currentFilters,
66
- maxRent: rent
67
- });
68
- };
69
- const handleBedroomFilterChange = filter => {
70
- const index = bedroomFilters.indexOf(filter);
71
- const currentBedroomFilters = [...bedroomFilters];
72
- if (index > -1) {
73
- currentBedroomFilters.splice(index, 1);
74
- } else {
75
- currentBedroomFilters.push(filter);
76
- }
77
- setBedroomFilters(currentBedroomFilters);
78
- handleSortAndFilter({
79
- ...currentFilters,
80
- bedroomFilters: currentBedroomFilters
81
- });
82
- };
83
- const handleAvailabilityFilterChange = filter => {
84
- const index = availabilityFilters.indexOf(filter);
85
- const currentAvailabilityFilters = [...availabilityFilters];
86
- if (index > -1) {
87
- currentAvailabilityFilters.splice(index, 1);
88
- } else {
89
- currentAvailabilityFilters.push(filter);
90
- }
91
- setAvailabilityFilters(currentAvailabilityFilters);
92
- handleSortAndFilter({
93
- ...currentFilters,
94
- availabilityFilters: currentAvailabilityFilters
95
- });
96
- };
97
- const handleFloorplanIdChange = floorplanId => {
98
- const index = floorplanIds.indexOf(floorplanId);
99
- const currentFloorplanIds = [...floorplanIds];
100
- if (index > -1) {
101
- currentFloorplanIds.splice(index, 1);
102
- }
103
- setFloorplanIds(currentFloorplanIds);
104
- handleSortAndFilter({
105
- ...currentFilters,
106
- floorplanIds: currentFloorplanIds
107
- });
108
- };
109
- const handlePriceChange = range => {
110
- setMinRent(range.min);
111
- setMaxRent(range.max);
112
- handleSortAndFilter({
113
- ...currentFilters,
114
- minRent: range.min,
115
- maxRent: range.max
116
- });
117
- };
118
- const handleStyleFilterChange = filter => {
119
- const index = styleFilters.indexOf(filter);
120
- const currentSyleFilters = [...styleFilters];
121
- if (index > -1) {
122
- currentSyleFilters.splice(index, 1);
123
- } else {
124
- currentSyleFilters.push(filter);
125
- }
126
- setStyleFilters(currentSyleFilters);
127
- handleSortAndFilter({
128
- ...currentFilters,
129
- styleFilters: currentSyleFilters
130
- });
131
- };
132
- const handleSortChange = sortBy => {
133
- setSortBy(sortBy);
134
- handleSortAndFilter({
135
- ...currentFilters,
136
- sortBy: sortBy
137
- });
138
- };
139
- return /*#__PURE__*/_react.default.createElement("header", {
140
- className: "units-header"
141
- }, /*#__PURE__*/_react.default.createElement("div", {
142
- className: isCondensed ? "" : "container"
143
- }, /*#__PURE__*/_react.default.createElement("h2", null, title), /*#__PURE__*/_react.default.createElement("div", {
144
- className: "units-filters"
145
- }, /*#__PURE__*/_react.default.createElement("div", {
146
- className: "filter-group"
147
- }, /*#__PURE__*/_react.default.createElement("label", {
148
- className: "filter-label"
149
- }, "Filter By:"), /*#__PURE__*/_react.default.createElement("div", {
150
- className: "filters"
151
- }, /*#__PURE__*/_react.default.createElement(_Bedroom.BedroomFilter, {
152
- filters: filters.bedroom,
153
- handleFilterChange: handleBedroomFilterChange,
154
- currentFilters: bedroomFilters
155
- }), /*#__PURE__*/_react.default.createElement(_Availability.AvailabilityFilter, {
156
- filters: filters.availability,
157
- handleFilterChange: handleAvailabilityFilterChange,
158
- currentFilters: availabilityFilters
159
- }), /*#__PURE__*/_react.default.createElement(_Price.PriceFilter, {
160
- minValue: minRent,
161
- maxValue: maxRent,
162
- setMinValue: handleMinRentChange,
163
- setMaxValue: handleMaxRentChange
164
- }), /*#__PURE__*/_react.default.createElement(_Style.StyleFilter, {
165
- filters: filters.style,
166
- handleFilterChange: handleStyleFilterChange,
167
- currentFilters: styleFilters
168
- }))), /*#__PURE__*/_react.default.createElement("div", {
169
- className: "filter-group"
170
- }, /*#__PURE__*/_react.default.createElement("label", {
171
- className: "filter-label"
172
- }, "Sort By:"), /*#__PURE__*/_react.default.createElement("div", {
173
- className: "filters"
174
- }, /*#__PURE__*/_react.default.createElement(_Sort.Sort, {
175
- sortBy: sortBy,
176
- handleSortChange: handleSortChange
177
- })))), /*#__PURE__*/_react.default.createElement("div", {
178
- className: "pills"
179
- }, bedroomFilters.sort(_Bedroom.sortBedrooms).map(bedroom => /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
180
- key: bedroom,
181
- pillCloseHandler: () => {
182
- handleBedroomFilterChange(bedroom);
183
- }
184
- }, bedroom + " bedroom")), availabilityFilters.sort(_Availability.sortAvailability).map(availability => /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
185
- key: availability.toString(),
186
- pillCloseHandler: () => {
187
- handleAvailabilityFilterChange(availability);
188
- }
189
- }, _FloorplanService.AVAILABLE_NOW === availability ? availability.toString() : availability.toString() + " availability")), minRent === _Floorplan.MIN_RENT && maxRent === _Floorplan.MAX_RENT ? "" : /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
190
- key: "rent",
191
- pillCloseHandler: () => {
192
- handlePriceChange({
193
- min: _Floorplan.MIN_RENT,
194
- max: _Floorplan.MAX_RENT
195
- });
196
- }
197
- }, "$" + minRent + " - $" + maxRent), styleFilters.map(style => /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
198
- key: style,
199
- pillCloseHandler: () => {
200
- handleStyleFilterChange(style);
201
- }
202
- }, (0, _Utils.capitalizeFirstLetter)((0, _Utils.enumToString)(style)))), floorplanIds.sort().map(floorplanId => /*#__PURE__*/_react.default.createElement(_muncherUi.Pill, {
203
- key: floorplanId,
204
- pillCloseHandler: () => {
205
- handleFloorplanIdChange(floorplanId);
206
- }
207
- }, floorplanId)), /*#__PURE__*/_react.default.createElement("div", {
208
- className: "filter-result"
209
- }, /*#__PURE__*/_react.default.createElement(_muncherUi.Icon, {
210
- name: "filter"
211
- }), "\xA0Total: ", currentUnitCounts, " Results"))));
212
- };
213
- exports.UnitsHeader = UnitsHeader;
214
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbXVuY2hlclVpIiwiX1V0aWxzIiwiX0Zsb29ycGxhblNlcnZpY2UiLCJfRmxvb3JwbGFuIiwiX1VuaXRTZXJ2aWNlIiwiX0JlZHJvb20iLCJfQXZhaWxhYmlsaXR5IiwiX1ByaWNlIiwiX1N0eWxlIiwiX1NvcnQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJVbml0c0hlYWRlciIsIl9yZWYiLCJ0aXRsZSIsImZpbHRlcnMiLCJ1bml0cyIsInNldEN1cnJlbnRVbml0cyIsImlzQ29uZGVuc2VkIiwiY3VycmVudFVuaXRDb3VudHMiLCJkZWZhdWx0Rmxvb3JwbGFuU3R5bGUiLCJkZWZhdWx0QmVkUm9vbXMiLCJkZWZhdWx0QXZhaWxhYmlsaXR5IiwiZGVmYXVsdE1heFJlbnQiLCJkZWZhdWx0TWluUmVudCIsImRlZmF1bHRGbG9vcnBsYW5JZHMiLCJiZWRyb29tRmlsdGVycyIsInNldEJlZHJvb21GaWx0ZXJzIiwidXNlU3RhdGUiLCJhdmFpbGFiaWxpdHlGaWx0ZXJzIiwic2V0QXZhaWxhYmlsaXR5RmlsdGVycyIsImRlZmF1bHRBdmFpbGFiaWxpdHlUb01vbnRoWWVhciIsInN0eWxlRmlsdGVycyIsInNldFN0eWxlRmlsdGVycyIsIm1pblJlbnQiLCJzZXRNaW5SZW50IiwiTUlOX1JFTlQiLCJtYXhSZW50Iiwic2V0TWF4UmVudCIsIk1BWF9SRU5UIiwic29ydEJ5Iiwic2V0U29ydEJ5IiwiZmxvb3JwbGFuSWRzIiwic2V0Rmxvb3JwbGFuSWRzIiwiY3VycmVudEZpbHRlcnMiLCJoYW5kbGVTb3J0QW5kRmlsdGVyIiwid2l0aEN1cnJlbnRGaWx0ZXJzIiwic29ydEFuZEZpbHRlclVuaXRzIiwiaGFuZGxlTWluUmVudENoYW5nZSIsInJlbnQiLCJoYW5kbGVNYXhSZW50Q2hhbmdlIiwiaGFuZGxlQmVkcm9vbUZpbHRlckNoYW5nZSIsImZpbHRlciIsImluZGV4IiwiaW5kZXhPZiIsImN1cnJlbnRCZWRyb29tRmlsdGVycyIsInNwbGljZSIsInB1c2giLCJoYW5kbGVBdmFpbGFiaWxpdHlGaWx0ZXJDaGFuZ2UiLCJjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVycyIsImhhbmRsZUZsb29ycGxhbklkQ2hhbmdlIiwiZmxvb3JwbGFuSWQiLCJjdXJyZW50Rmxvb3JwbGFuSWRzIiwiaGFuZGxlUHJpY2VDaGFuZ2UiLCJyYW5nZSIsIm1pbiIsIm1heCIsImhhbmRsZVN0eWxlRmlsdGVyQ2hhbmdlIiwiY3VycmVudFN5bGVGaWx0ZXJzIiwiaGFuZGxlU29ydENoYW5nZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJCZWRyb29tRmlsdGVyIiwiYmVkcm9vbSIsImhhbmRsZUZpbHRlckNoYW5nZSIsIkF2YWlsYWJpbGl0eUZpbHRlciIsImF2YWlsYWJpbGl0eSIsIlByaWNlRmlsdGVyIiwibWluVmFsdWUiLCJtYXhWYWx1ZSIsInNldE1pblZhbHVlIiwic2V0TWF4VmFsdWUiLCJTdHlsZUZpbHRlciIsInN0eWxlIiwiU29ydCIsInNvcnQiLCJzb3J0QmVkcm9vbXMiLCJtYXAiLCJQaWxsIiwia2V5IiwicGlsbENsb3NlSGFuZGxlciIsInNvcnRBdmFpbGFiaWxpdHkiLCJ0b1N0cmluZyIsIkFWQUlMQUJMRV9OT1ciLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJlbnVtVG9TdHJpbmciLCJJY29uIiwibmFtZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5pdC9zZWN0aW9uL1VuaXRzSGVhZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuL2Fzc2V0cy9Vbml0c0hlYWRlci5zY3NzXCI7XG5pbXBvcnQge0ljb24sIFBpbGwsIFJhbmdlfSBmcm9tIFwiQGNvbnRlbnRtdW5jaC9tdW5jaGVyLXVpXCI7XG5pbXBvcnQge2NhcGl0YWxpemVGaXJzdExldHRlciwgZW51bVRvU3RyaW5nfSBmcm9tIFwiLi4vLi4vdXRpbHMvVXRpbHNcIjtcbmltcG9ydCB7U29ydEJ5fSBmcm9tIFwiLi4vLi4vZGF0YS9Tb3J0RmllbGRcIjtcbmltcG9ydCB7RGVmYXVsdEZsb29ycGxhbkZpbHRlcnN9IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vc2VjdGlvbi9GbG9vcnBsYW5zU2VjdGlvblwiO1xuaW1wb3J0IHtVbml0Q2FyZERhdGF9IGZyb20gXCIuLi9kYXRhL1VuaXRcIjtcbmltcG9ydCB7QVZBSUxBQkxFX05PVywgZGVmYXVsdEF2YWlsYWJpbGl0eVRvTW9udGhZZWFyfSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL3NlcnZpY2UvRmxvb3JwbGFuU2VydmljZVwiO1xuaW1wb3J0IHtGbG9vcnBsYW5TdHlsZSwgTUFYX1JFTlQsIE1JTl9SRU5UfSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL2RhdGEvRmxvb3JwbGFuXCI7XG5pbXBvcnQge0N1cnJlbnRGbG9vcnBsYW5GaWx0ZXJzLCBGbG9vcnBsYW5GaWx0ZXJzfSBmcm9tIFwiLi4vLi4vZmxvb3JwbGFuL2RhdGEvRmxvb3JwbGFuRmlsdGVyc1wiO1xuaW1wb3J0IHtzb3J0QW5kRmlsdGVyVW5pdHN9IGZyb20gXCIuLi9zZXJ2aWNlL1VuaXRTZXJ2aWNlXCI7XG5pbXBvcnQge0JlZHJvb21GaWx0ZXIsIHNvcnRCZWRyb29tc30gZnJvbSBcIi4uLy4uL2Zsb29ycGxhbi9zZWN0aW9uL2ZpbHRlci9CZWRyb29tXCI7XG5pbXBvcnQge0F2YWlsYWJpbGl0eUZpbHRlciwgc29ydEF2YWlsYWJpbGl0eX0gZnJvbSBcIi4uLy4uL2Zsb29ycGxhbi9zZWN0aW9uL2ZpbHRlci9BdmFpbGFiaWxpdHlcIjtcbmltcG9ydCB7UHJpY2VGaWx0ZXJ9IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vc2VjdGlvbi9maWx0ZXIvUHJpY2VcIjtcbmltcG9ydCB7U3R5bGVGaWx0ZXJ9IGZyb20gXCIuLi8uLi9mbG9vcnBsYW4vc2VjdGlvbi9maWx0ZXIvU3R5bGVcIjtcbmltcG9ydCB7U29ydH0gZnJvbSBcIi4uLy4uL2Zsb29ycGxhbi9zZWN0aW9uL2ZpbHRlci9Tb3J0XCI7XG5cbmV4cG9ydCBjb25zdCBVbml0c0hlYWRlcjogUmVhY3QuRkM8VW5pdHNIZWFkZXJQcm9wcz4gPSAoXG4gICAge1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgdW5pdHMsXG4gICAgICAgIHNldEN1cnJlbnRVbml0cyxcbiAgICAgICAgaXNDb25kZW5zZWQsXG4gICAgICAgIGN1cnJlbnRVbml0Q291bnRzLFxuICAgICAgICBkZWZhdWx0Rmxvb3JwbGFuU3R5bGUsIGRlZmF1bHRCZWRSb29tcywgZGVmYXVsdEF2YWlsYWJpbGl0eSwgZGVmYXVsdE1heFJlbnQsIGRlZmF1bHRNaW5SZW50LCBkZWZhdWx0Rmxvb3JwbGFuSWRzXG4gICAgfSkgPT4ge1xuXG4gICAgY29uc3QgW2JlZHJvb21GaWx0ZXJzLCBzZXRCZWRyb29tRmlsdGVyc10gPSB1c2VTdGF0ZTxudW1iZXJbXT4oZGVmYXVsdEJlZFJvb21zID8gW2RlZmF1bHRCZWRSb29tc10gOiBbXSk7XG4gICAgY29uc3QgW2F2YWlsYWJpbGl0eUZpbHRlcnMsIHNldEF2YWlsYWJpbGl0eUZpbHRlcnNdID0gdXNlU3RhdGU8c3RyaW5nW10+KGRlZmF1bHRBdmFpbGFiaWxpdHkgPyBbZGVmYXVsdEF2YWlsYWJpbGl0eVRvTW9udGhZZWFyKGRlZmF1bHRBdmFpbGFiaWxpdHkpXSA6IFtdKTtcbiAgICBjb25zdCBbc3R5bGVGaWx0ZXJzLCBzZXRTdHlsZUZpbHRlcnNdID0gdXNlU3RhdGU8Rmxvb3JwbGFuU3R5bGVbXT4oZGVmYXVsdEZsb29ycGxhblN0eWxlID8gW2RlZmF1bHRGbG9vcnBsYW5TdHlsZV0gOiBbXSk7XG4gICAgY29uc3QgW21pblJlbnQsIHNldE1pblJlbnRdID0gdXNlU3RhdGU8bnVtYmVyPihkZWZhdWx0TWluUmVudCA/IGRlZmF1bHRNaW5SZW50IDogTUlOX1JFTlQpO1xuICAgIGNvbnN0IFttYXhSZW50LCBzZXRNYXhSZW50XSA9IHVzZVN0YXRlPG51bWJlcj4oZGVmYXVsdE1heFJlbnQgPyBkZWZhdWx0TWF4UmVudCA6IE1BWF9SRU5UKTtcbiAgICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydEJ5PihcImZlYXR1cmVkXCIpO1xuICAgIGNvbnN0IFtmbG9vcnBsYW5JZHMsIHNldEZsb29ycGxhbklkc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oZGVmYXVsdEZsb29ycGxhbklkcyA/IGRlZmF1bHRGbG9vcnBsYW5JZHMgOiBbXSk7XG5cbiAgICBjb25zdCBjdXJyZW50RmlsdGVyczogQ3VycmVudEZsb29ycGxhbkZpbHRlcnMgPSB7XG4gICAgICAgIGJlZHJvb21GaWx0ZXJzLCBhdmFpbGFiaWxpdHlGaWx0ZXJzLCBzdHlsZUZpbHRlcnMsIG1pblJlbnQsIG1heFJlbnQsIHNvcnRCeSwgZmxvb3JwbGFuSWRzXG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVNvcnRBbmRGaWx0ZXIgPSAod2l0aEN1cnJlbnRGaWx0ZXJzOiBDdXJyZW50Rmxvb3JwbGFuRmlsdGVycykgPT4ge1xuICAgICAgICBzZXRDdXJyZW50VW5pdHMoc29ydEFuZEZpbHRlclVuaXRzKHVuaXRzLCB3aXRoQ3VycmVudEZpbHRlcnMpKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZU1pblJlbnRDaGFuZ2UgPSAocmVudDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHNldE1pblJlbnQocmVudCk7XG4gICAgICAgIGhhbmRsZVNvcnRBbmRGaWx0ZXIoey4uLmN1cnJlbnRGaWx0ZXJzLCBtaW5SZW50OiByZW50fSk7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZU1heFJlbnRDaGFuZ2UgPSAocmVudDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHNldE1heFJlbnQocmVudCk7XG4gICAgICAgIGhhbmRsZVNvcnRBbmRGaWx0ZXIoey4uLmN1cnJlbnRGaWx0ZXJzLCBtYXhSZW50OiByZW50fSk7XG4gICAgfVxuICAgIGNvbnN0IGhhbmRsZUJlZHJvb21GaWx0ZXJDaGFuZ2UgPSAoZmlsdGVyOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBiZWRyb29tRmlsdGVycy5pbmRleE9mKGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRCZWRyb29tRmlsdGVycyA9IFsuLi5iZWRyb29tRmlsdGVyc107XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBjdXJyZW50QmVkcm9vbUZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRCZWRyb29tRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QmVkcm9vbUZpbHRlcnMoY3VycmVudEJlZHJvb21GaWx0ZXJzKTtcbiAgICAgICAgaGFuZGxlU29ydEFuZEZpbHRlcih7Li4uY3VycmVudEZpbHRlcnMsIGJlZHJvb21GaWx0ZXJzOiBjdXJyZW50QmVkcm9vbUZpbHRlcnN9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUF2YWlsYWJpbGl0eUZpbHRlckNoYW5nZSA9IChmaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGF2YWlsYWJpbGl0eUZpbHRlcnMuaW5kZXhPZihmaWx0ZXIpO1xuICAgICAgICBjb25zdCBjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVycyA9IFsuLi5hdmFpbGFiaWxpdHlGaWx0ZXJzXTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGN1cnJlbnRBdmFpbGFiaWxpdHlGaWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QXZhaWxhYmlsaXR5RmlsdGVycyhjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVycyk7XG4gICAgICAgIGhhbmRsZVNvcnRBbmRGaWx0ZXIoey4uLmN1cnJlbnRGaWx0ZXJzLCBhdmFpbGFiaWxpdHlGaWx0ZXJzOiBjdXJyZW50QXZhaWxhYmlsaXR5RmlsdGVyc30pO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlRmxvb3JwbGFuSWRDaGFuZ2UgPSAoZmxvb3JwbGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZsb29ycGxhbklkcy5pbmRleE9mKGZsb29ycGxhbklkKTtcbiAgICAgICAgY29uc3QgY3VycmVudEZsb29ycGxhbklkcyA9IFsuLi5mbG9vcnBsYW5JZHNdO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgY3VycmVudEZsb29ycGxhbklkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHNldEZsb29ycGxhbklkcyhjdXJyZW50Rmxvb3JwbGFuSWRzKTtcbiAgICAgICAgaGFuZGxlU29ydEFuZEZpbHRlcih7Li4uY3VycmVudEZpbHRlcnMsIGZsb29ycGxhbklkczogY3VycmVudEZsb29ycGxhbklkc30pO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlUHJpY2VDaGFuZ2UgPSAocmFuZ2U6IFJhbmdlKSA9PiB7XG4gICAgICAgIHNldE1pblJlbnQocmFuZ2UubWluKTtcbiAgICAgICAgc2V0TWF4UmVudChyYW5nZS5tYXgpO1xuICAgICAgICBoYW5kbGVTb3J0QW5kRmlsdGVyKHsuLi5jdXJyZW50RmlsdGVycywgbWluUmVudDogcmFuZ2UubWluLCBtYXhSZW50OiByYW5nZS5tYXh9KTtcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlU3R5bGVGaWx0ZXJDaGFuZ2UgPSAoZmlsdGVyOiBGbG9vcnBsYW5TdHlsZSkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHN0eWxlRmlsdGVycy5pbmRleE9mKGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTeWxlRmlsdGVycyA9IFsuLi5zdHlsZUZpbHRlcnNdO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgY3VycmVudFN5bGVGaWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50U3lsZUZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHNldFN0eWxlRmlsdGVycyhjdXJyZW50U3lsZUZpbHRlcnMpO1xuICAgICAgICBoYW5kbGVTb3J0QW5kRmlsdGVyKHsuLi5jdXJyZW50RmlsdGVycywgc3R5bGVGaWx0ZXJzOiBjdXJyZW50U3lsZUZpbHRlcnN9KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVNvcnRDaGFuZ2UgPSAoc29ydEJ5OiBTb3J0QnkpID0+IHtcbiAgICAgICAgc2V0U29ydEJ5KHNvcnRCeSk7XG4gICAgICAgIGhhbmRsZVNvcnRBbmRGaWx0ZXIoey4uLmN1cnJlbnRGaWx0ZXJzLCBzb3J0Qnk6IHNvcnRCeX0pO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cInVuaXRzLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2lzQ29uZGVuc2VkID8gXCJcIiA6IFwiY29udGFpbmVyXCJ9PlxuICAgICAgICAgICAgICAgIDxoMj57dGl0bGV9PC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVuaXRzLWZpbHRlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmaWx0ZXItbGFiZWxcIj5GaWx0ZXIgQnk6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCZWRyb29tRmlsdGVyIGZpbHRlcnM9e2ZpbHRlcnMuYmVkcm9vbX0gaGFuZGxlRmlsdGVyQ2hhbmdlPXtoYW5kbGVCZWRyb29tRmlsdGVyQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJzPXtiZWRyb29tRmlsdGVyc30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBdmFpbGFiaWxpdHlGaWx0ZXIgZmlsdGVycz17ZmlsdGVycy5hdmFpbGFiaWxpdHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXJDaGFuZ2U9e2hhbmRsZUF2YWlsYWJpbGl0eUZpbHRlckNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJzPXthdmFpbGFiaWxpdHlGaWx0ZXJzfS8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJpY2VGaWx0ZXIgbWluVmFsdWU9e21pblJlbnR9IG1heFZhbHVlPXttYXhSZW50fSBzZXRNaW5WYWx1ZT17aGFuZGxlTWluUmVudENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF4VmFsdWU9e2hhbmRsZU1heFJlbnRDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVGaWx0ZXIgZmlsdGVycz17ZmlsdGVycy5zdHlsZX0gaGFuZGxlRmlsdGVyQ2hhbmdlPXtoYW5kbGVTdHlsZUZpbHRlckNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpbHRlcnM9e3N0eWxlRmlsdGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZpbHRlci1sYWJlbFwiPlNvcnQgQnk6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTb3J0IHNvcnRCeT17c29ydEJ5fSBoYW5kbGVTb3J0Q2hhbmdlPXtoYW5kbGVTb3J0Q2hhbmdlfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWxsc1wiPlxuICAgICAgICAgICAgICAgICAgICB7YmVkcm9vbUZpbHRlcnMuc29ydChzb3J0QmVkcm9vbXMpLm1hcChiZWRyb29tID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxQaWxsIGtleT17YmVkcm9vbX0gcGlsbENsb3NlSGFuZGxlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJlZHJvb21GaWx0ZXJDaGFuZ2UoYmVkcm9vbSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtiZWRyb29tICsgXCIgYmVkcm9vbVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9QaWxsPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAge2F2YWlsYWJpbGl0eUZpbHRlcnMuc29ydChzb3J0QXZhaWxhYmlsaXR5KS5tYXAoKGF2YWlsYWJpbGl0eTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8UGlsbCBrZXk9e2F2YWlsYWJpbGl0eS50b1N0cmluZygpfSBwaWxsQ2xvc2VIYW5kbGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQXZhaWxhYmlsaXR5RmlsdGVyQ2hhbmdlKGF2YWlsYWJpbGl0eSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBVkFJTEFCTEVfTk9XID09PSBhdmFpbGFiaWxpdHkgPyBhdmFpbGFiaWxpdHkudG9TdHJpbmcoKSA6IGF2YWlsYWJpbGl0eS50b1N0cmluZygpICsgXCIgYXZhaWxhYmlsaXR5XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1BpbGw+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5SZW50ID09PSBNSU5fUkVOVCAmJiBtYXhSZW50ID09PSBNQVhfUkVOVCA/IFwiXCIgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQaWxsIGtleT1cInJlbnRcIiBwaWxsQ2xvc2VIYW5kbGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVByaWNlQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogTUlOX1JFTlQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IE1BWF9SRU5UXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcIiRcIiArIG1pblJlbnQgKyBcIiAtICRcIiArIG1heFJlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9QaWxsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZUZpbHRlcnMubWFwKHN0eWxlID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxQaWxsIGtleT17c3R5bGV9IHBpbGxDbG9zZUhhbmRsZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdHlsZUZpbHRlckNoYW5nZShzdHlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjYXBpdGFsaXplRmlyc3RMZXR0ZXIoZW51bVRvU3RyaW5nKHN0eWxlKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1BpbGw+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICB7Zmxvb3JwbGFuSWRzLnNvcnQoKS5tYXAoZmxvb3JwbGFuSWQgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFBpbGwga2V5PXtmbG9vcnBsYW5JZH0gcGlsbENsb3NlSGFuZGxlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUZsb29ycGxhbklkQ2hhbmdlKGZsb29ycGxhbklkKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2Zsb29ycGxhbklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9QaWxsPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItcmVzdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsdGVyXCIvPiZuYnNwO1RvdGFsOiB7Y3VycmVudFVuaXRDb3VudHN9IFJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbml0c0hlYWRlclByb3BzIGV4dGVuZHMgRGVmYXVsdEZsb29ycGxhbkZpbHRlcnMge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGZpbHRlcnM6IEZsb29ycGxhbkZpbHRlcnM7XG4gICAgdW5pdHM6IFVuaXRDYXJkRGF0YVtdO1xuICAgIHNldEN1cnJlbnRVbml0czogKHVuaXRzOiBVbml0Q2FyZERhdGFbXSkgPT4gdm9pZDtcbiAgICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gICAgY3VycmVudFVuaXRDb3VudHM6IG51bWJlcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0FBLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFJQSxJQUFBRyxpQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsTUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsTUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsS0FBQSxHQUFBVixPQUFBO0FBQXlELFNBQUFXLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENB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