@envive-ai/react-hooks 0.1.6 → 0.1.8

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 (686) hide show
  1. package/dist/NewOrgConfig-BU6uJT74.js +15 -0
  2. package/dist/NewOrgConfig-DmidHiyj.cjs +20 -0
  3. package/dist/SystemSettingsContext-BbobkM82.cjs +20 -0
  4. package/dist/SystemSettingsContext-gtrccL_q.js +13 -0
  5. package/dist/TrackComponentVisibleEvent-CqjMiZCS.cjs +59 -0
  6. package/dist/TrackComponentVisibleEvent-D9kpqKM4.js +52 -0
  7. package/dist/amplitudeContext-B73xamNe.d.cts +52 -0
  8. package/dist/amplitudeContext-BhhYPJSL.d.ts +52 -0
  9. package/dist/amplitudeContext-Dr1jHI13.cjs +309 -0
  10. package/dist/amplitudeContext-YRS1QOO3.js +287 -0
  11. package/dist/api-DYjHj_hR.cjs +239 -0
  12. package/dist/api-d5uWvb3-.js +166 -0
  13. package/dist/{app-CjsQ2_n-.js → app-B9r0MF9n.js} +7 -7
  14. package/dist/{app-CnKRZ9RW.cjs → app-Bgr-mAvr.cjs} +10 -10
  15. package/dist/application/models/graphql/index.cjs +2 -1
  16. package/dist/application/models/graphql/index.d.ts +1 -1
  17. package/dist/application/models/graphql/index.js +2 -1
  18. package/dist/application/models/guards/api/index.cjs +3 -1
  19. package/dist/application/models/guards/api/index.d.ts +2 -2
  20. package/dist/application/models/guards/api/index.js +3 -1
  21. package/dist/application/models/guards/utils.cjs +3 -0
  22. package/dist/application/models/guards/utils.d.cts +2 -0
  23. package/dist/application/models/guards/utils.d.ts +2 -0
  24. package/dist/application/models/guards/utils.js +3 -0
  25. package/dist/application/models/index.cjs +13 -10
  26. package/dist/application/models/index.d.cts +9 -4
  27. package/dist/application/models/index.d.ts +12 -7
  28. package/dist/application/models/index.js +11 -7
  29. package/dist/application/models/utilityTypes/index.cjs +1 -1
  30. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  31. package/dist/application/models/utilityTypes/index.js +1 -1
  32. package/dist/application/models/variantInfo/index.cjs +1 -1
  33. package/dist/application/models/variantInfo/index.d.cts +1 -1
  34. package/dist/application/models/variantInfo/index.d.ts +1 -1
  35. package/dist/application/models/variantInfo/index.js +1 -1
  36. package/dist/application/utils/index.cjs +47 -40
  37. package/dist/application/utils/index.d.cts +13 -8
  38. package/dist/application/utils/index.d.ts +15 -10
  39. package/dist/application/utils/index.js +20 -13
  40. package/dist/{atomStore-D8pjE1vL.js → atomStore-BuopbV9k.js} +1 -1
  41. package/dist/{atomStore-B4jIaDPd.cjs → atomStore-CZKe3itM.cjs} +1 -1
  42. package/dist/atoms/app/index.cjs +14 -9
  43. package/dist/atoms/app/index.d.cts +16 -11
  44. package/dist/atoms/app/index.d.ts +19 -14
  45. package/dist/atoms/app/index.js +14 -9
  46. package/dist/atoms/atomStore/index.cjs +2 -2
  47. package/dist/atoms/atomStore/index.d.cts +1 -1
  48. package/dist/atoms/atomStore/index.js +2 -2
  49. package/dist/atoms/chat/index.cjs +35 -28
  50. package/dist/atoms/chat/index.d.cts +36 -31
  51. package/dist/atoms/chat/index.d.ts +39 -34
  52. package/dist/atoms/chat/index.js +21 -14
  53. package/dist/atoms/globalSearch/index.cjs +1 -1
  54. package/dist/atoms/globalSearch/index.d.cts +5 -5
  55. package/dist/atoms/globalSearch/index.d.ts +6 -6
  56. package/dist/atoms/globalSearch/index.js +1 -1
  57. package/dist/atoms/org/index.cjs +6 -14
  58. package/dist/atoms/org/index.d.cts +28 -32
  59. package/dist/atoms/org/index.d.ts +31 -35
  60. package/dist/atoms/org/index.js +5 -11
  61. package/dist/atoms/search/index.cjs +46 -34
  62. package/dist/atoms/search/index.d.cts +10 -4
  63. package/dist/atoms/search/index.d.ts +13 -7
  64. package/dist/atoms/search/index.js +28 -16
  65. package/dist/atoms/search/types.cjs +5 -0
  66. package/dist/atoms/search/types.d.cts +2 -0
  67. package/dist/atoms/search/types.d.ts +2 -0
  68. package/dist/atoms/search/types.js +3 -0
  69. package/dist/atoms/search/utils.cjs +3 -0
  70. package/dist/atoms/search/utils.d.cts +5 -0
  71. package/dist/atoms/search/utils.d.ts +5 -0
  72. package/dist/atoms/search/utils.js +3 -0
  73. package/dist/cdnContext-CVgXkdV2.cjs +53 -0
  74. package/dist/cdnContext-DdE6VPIF.js +38 -0
  75. package/dist/chat-BNDYKsqF.js +258 -0
  76. package/dist/{chat-BubCW1as.cjs → chat-BkjIKhc5.cjs} +1 -1
  77. package/dist/chat-Br5FhtRs.cjs +394 -0
  78. package/dist/{chat-CV6MXeID.js → chat-CgLypC3w.js} +1 -1
  79. package/dist/chatElementDisplayLocation-BwiXrkN7.d.ts +25 -0
  80. package/dist/chatElementDisplayLocation-DWmfNX_u.d.cts +25 -0
  81. package/dist/chatSearch-BiF2__V0.js +295 -0
  82. package/dist/chatSearch-BrzfJOto.cjs +418 -0
  83. package/dist/chatState-BDsqKE-B.cjs +120 -0
  84. package/dist/chatState-ie771Hwy.js +34 -0
  85. package/dist/commerce-api-Dz1jxPOJ.js +311 -0
  86. package/dist/commerce-api-KoiUki51.cjs +318 -0
  87. package/dist/{components-Cw9WjA6g.cjs → components-Cby-Cma3.cjs} +1 -1
  88. package/dist/{components-B4T3Uzth.js → components-D1mg1-Br.js} +1 -1
  89. package/dist/config/locators/components/chat/index.cjs +1 -1
  90. package/dist/config/locators/components/chat/index.d.cts +1 -1
  91. package/dist/config/locators/components/chat/index.d.ts +1 -1
  92. package/dist/config/locators/components/chat/index.js +1 -1
  93. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  94. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  95. package/dist/config/locators/components/index.cjs +1 -1
  96. package/dist/config/locators/components/index.d.cts +1 -1
  97. package/dist/config/locators/components/index.d.ts +1 -1
  98. package/dist/config/locators/components/index.js +1 -1
  99. package/dist/config/locators/components/search/index.d.cts +1 -1
  100. package/dist/config/locators/index.cjs +42 -22
  101. package/dist/config/locators/index.d.cts +2 -2
  102. package/dist/config/locators/index.d.ts +3 -3
  103. package/dist/config/locators/index.js +25 -5
  104. package/dist/contexts/amplitudeContext/index.cjs +22 -0
  105. package/dist/contexts/amplitudeContext/index.d.cts +2 -0
  106. package/dist/contexts/amplitudeContext/index.d.ts +2 -0
  107. package/dist/contexts/amplitudeContext/index.js +20 -0
  108. package/dist/contexts/cdnContext/index.cjs +7 -0
  109. package/dist/contexts/cdnContext/index.d.cts +15 -0
  110. package/dist/contexts/cdnContext/index.d.ts +15 -0
  111. package/dist/contexts/cdnContext/index.js +6 -0
  112. package/dist/contexts/chatContext/index.cjs +331 -0
  113. package/dist/contexts/chatContext/index.d.cts +15 -0
  114. package/dist/contexts/chatContext/index.d.ts +15 -0
  115. package/dist/contexts/chatContext/index.js +324 -0
  116. package/dist/contexts/enviveConfigContext/index.cjs +7 -0
  117. package/dist/contexts/enviveConfigContext/index.d.cts +30 -0
  118. package/dist/contexts/enviveConfigContext/index.d.ts +30 -0
  119. package/dist/contexts/enviveConfigContext/index.js +6 -0
  120. package/dist/contexts/enviveCssContext/index.cjs +66 -0
  121. package/dist/contexts/enviveCssContext/index.d.cts +10 -0
  122. package/dist/contexts/enviveCssContext/index.d.ts +10 -0
  123. package/dist/contexts/enviveCssContext/index.js +63 -0
  124. package/dist/contexts/featureFlagContext/index.cjs +107 -0
  125. package/dist/contexts/featureFlagContext/index.d.cts +20 -0
  126. package/dist/contexts/featureFlagContext/index.d.ts +20 -0
  127. package/dist/contexts/featureFlagContext/index.js +103 -0
  128. package/dist/contexts/featureFlagServiceContext/index.cjs +6 -0
  129. package/dist/contexts/featureFlagServiceContext/index.d.cts +5 -0
  130. package/dist/contexts/featureFlagServiceContext/index.d.ts +5 -0
  131. package/dist/contexts/featureFlagServiceContext/index.js +5 -0
  132. package/dist/contexts/graphqlContext/index.cjs +16 -0
  133. package/dist/contexts/graphqlContext/index.d.cts +13 -0
  134. package/dist/contexts/graphqlContext/index.d.ts +13 -0
  135. package/dist/contexts/graphqlContext/index.js +15 -0
  136. package/dist/contexts/localStorageContext/index.cjs +6 -0
  137. package/dist/contexts/localStorageContext/index.d.cts +30 -0
  138. package/dist/contexts/localStorageContext/index.d.ts +30 -0
  139. package/dist/contexts/localStorageContext/index.js +4 -0
  140. package/dist/contexts/newOrgConfigContext/index.cjs +20 -0
  141. package/dist/contexts/newOrgConfigContext/index.d.cts +31 -0
  142. package/dist/contexts/newOrgConfigContext/index.d.ts +31 -0
  143. package/dist/contexts/newOrgConfigContext/index.js +19 -0
  144. package/dist/contexts/searchContext/index.cjs +24 -0
  145. package/dist/contexts/searchContext/index.d.cts +16 -0
  146. package/dist/contexts/searchContext/index.d.ts +16 -0
  147. package/dist/contexts/searchContext/index.js +23 -0
  148. package/dist/contexts/sessionStorageContext/index.cjs +5 -0
  149. package/dist/contexts/sessionStorageContext/index.d.cts +15 -0
  150. package/dist/contexts/sessionStorageContext/index.d.ts +15 -0
  151. package/dist/contexts/sessionStorageContext/index.js +4 -0
  152. package/dist/contexts/shopifyUrlContext/index.cjs +5 -0
  153. package/dist/contexts/shopifyUrlContext/index.d.cts +20 -0
  154. package/dist/contexts/shopifyUrlContext/index.d.ts +20 -0
  155. package/dist/contexts/shopifyUrlContext/index.js +4 -0
  156. package/dist/contexts/systemSettingsContext/index.cjs +8 -0
  157. package/dist/contexts/systemSettingsContext/index.d.cts +37 -0
  158. package/dist/contexts/systemSettingsContext/index.d.ts +37 -0
  159. package/dist/contexts/systemSettingsContext/index.js +6 -0
  160. package/dist/contexts/types.cjs +7 -0
  161. package/dist/contexts/types.d.cts +4 -0
  162. package/dist/contexts/types.d.ts +4 -0
  163. package/dist/contexts/types.js +3 -0
  164. package/dist/contexts/userIdentityContext/index.cjs +27 -0
  165. package/dist/contexts/userIdentityContext/index.d.cts +2 -0
  166. package/dist/contexts/userIdentityContext/index.d.ts +2 -0
  167. package/dist/contexts/userIdentityContext/index.js +26 -0
  168. package/dist/domObserver-B19-69gW.js +285 -0
  169. package/dist/domObserver-CwieVNgj.cjs +304 -0
  170. package/dist/enviveConfig-BQB14yuH.js +62 -0
  171. package/dist/enviveConfig-DAA9sozZ.cjs +130 -0
  172. package/dist/enviveConfigContext-BCpBKqsz.js +45 -0
  173. package/dist/enviveConfigContext-Btg5JUMG.cjs +60 -0
  174. package/dist/events/index.cjs +1 -1
  175. package/dist/events/index.d.ts +1 -1
  176. package/dist/events/index.js +1 -1
  177. package/dist/{events-BrLpaNxh.js → events-BHJJjPDN.js} +1 -1
  178. package/dist/{events-DwT6cEwI.cjs → events-B_fJZf9E.cjs} +1 -1
  179. package/dist/featureFlagServiceContext-Bcx5yh4S.cjs +56 -0
  180. package/dist/featureFlagServiceContext-Cpw8omUr.d.ts +23 -0
  181. package/dist/featureFlagServiceContext-Cvn6fcdB.d.cts +23 -0
  182. package/dist/featureFlagServiceContext-_tXX5iro.js +42 -0
  183. package/dist/featureGates-2Zea2D2S.js +27 -0
  184. package/dist/featureGates-BY2Zy7x_.cjs +33 -0
  185. package/dist/frontendConfig-DnMZfvcA.d.cts +857 -0
  186. package/dist/frontendConfig-Dqxbqo8G.d.ts +857 -0
  187. package/dist/{globalSearch-BFvEg53C.cjs → globalSearch-C94-vEVh.cjs} +1 -1
  188. package/dist/{globalSearch-B6THR7Jx.js → globalSearch-Dlbnfasm.js} +1 -1
  189. package/dist/graphql-DRLWdYEk.js +36 -0
  190. package/dist/graphql-xPDT7ZkK.cjs +53 -0
  191. package/dist/graphqlConfig-B4ddz1vH.cjs +39 -0
  192. package/dist/graphqlConfig-BnjOdeX7.js +14 -0
  193. package/dist/graphqlContext-B-9g2vOb.js +96 -0
  194. package/dist/graphqlContext-B7PEKDJs.cjs +111 -0
  195. package/dist/hooks/AmplitudeOperations/index.cjs +22 -0
  196. package/dist/hooks/AmplitudeOperations/index.d.cts +12 -0
  197. package/dist/hooks/AmplitudeOperations/index.d.ts +12 -0
  198. package/dist/hooks/AmplitudeOperations/index.js +22 -0
  199. package/dist/hooks/AppDetails/index.cjs +19 -0
  200. package/dist/hooks/AppDetails/index.d.cts +27 -0
  201. package/dist/hooks/AppDetails/index.d.ts +27 -0
  202. package/dist/hooks/AppDetails/index.js +19 -0
  203. package/dist/hooks/BlockBackButton/index.cjs +29 -0
  204. package/dist/hooks/BlockBackButton/index.d.cts +5 -0
  205. package/dist/hooks/BlockBackButton/index.d.ts +5 -0
  206. package/dist/hooks/BlockBackButton/index.js +27 -0
  207. package/dist/hooks/CdnOperations/index.cjs +24 -0
  208. package/dist/hooks/CdnOperations/index.d.cts +7 -0
  209. package/dist/hooks/CdnOperations/index.d.ts +7 -0
  210. package/dist/hooks/CdnOperations/index.js +22 -0
  211. package/dist/hooks/ChatToggle/index.cjs +64 -0
  212. package/dist/hooks/ChatToggle/index.d.cts +12 -0
  213. package/dist/hooks/ChatToggle/index.d.ts +12 -0
  214. package/dist/hooks/ChatToggle/index.js +62 -0
  215. package/dist/hooks/ChatToggleAnalytics/index.cjs +38 -0
  216. package/dist/hooks/ChatToggleAnalytics/index.d.cts +9 -0
  217. package/dist/hooks/ChatToggleAnalytics/index.d.ts +9 -0
  218. package/dist/hooks/ChatToggleAnalytics/index.js +36 -0
  219. package/dist/hooks/CustomerSupportHandoff/index.cjs +36 -0
  220. package/dist/hooks/CustomerSupportHandoff/index.d.cts +16 -0
  221. package/dist/hooks/CustomerSupportHandoff/index.d.ts +16 -0
  222. package/dist/hooks/CustomerSupportHandoff/index.js +34 -0
  223. package/dist/hooks/Debounce/index.cjs +3 -0
  224. package/dist/hooks/Debounce/index.d.cts +5 -0
  225. package/dist/hooks/Debounce/index.d.ts +5 -0
  226. package/dist/hooks/Debounce/index.js +3 -0
  227. package/dist/hooks/ElementObserver/index.cjs +179 -0
  228. package/dist/hooks/ElementObserver/index.d.cts +29 -0
  229. package/dist/hooks/ElementObserver/index.d.ts +29 -0
  230. package/dist/hooks/ElementObserver/index.js +177 -0
  231. package/dist/hooks/GrabAndScroll/index.cjs +99 -0
  232. package/dist/hooks/GrabAndScroll/index.d.cts +14 -0
  233. package/dist/hooks/GrabAndScroll/index.d.ts +14 -0
  234. package/dist/hooks/GrabAndScroll/index.js +97 -0
  235. package/dist/hooks/GraphQLConfig/index.cjs +17 -0
  236. package/dist/hooks/GraphQLConfig/index.d.cts +15 -0
  237. package/dist/hooks/GraphQLConfig/index.d.ts +15 -0
  238. package/dist/hooks/GraphQLConfig/index.js +16 -0
  239. package/dist/hooks/IdentifyUser/index.cjs +60 -0
  240. package/dist/hooks/IdentifyUser/index.d.cts +10 -0
  241. package/dist/hooks/IdentifyUser/index.d.ts +10 -0
  242. package/dist/hooks/IdentifyUser/index.js +58 -0
  243. package/dist/hooks/ImageResolver/index.cjs +55 -0
  244. package/dist/hooks/ImageResolver/index.d.cts +7 -0
  245. package/dist/hooks/ImageResolver/index.d.ts +7 -0
  246. package/dist/hooks/ImageResolver/index.js +53 -0
  247. package/dist/hooks/Intersection/index.cjs +3 -0
  248. package/dist/hooks/Intersection/index.d.cts +7 -0
  249. package/dist/hooks/Intersection/index.d.ts +7 -0
  250. package/dist/hooks/Intersection/index.js +3 -0
  251. package/dist/hooks/IsSmallScreen/index.cjs +22 -0
  252. package/dist/hooks/IsSmallScreen/index.d.cts +5 -0
  253. package/dist/hooks/IsSmallScreen/index.d.ts +5 -0
  254. package/dist/hooks/IsSmallScreen/index.js +20 -0
  255. package/dist/hooks/LocalStorageOperations/index.cjs +79 -0
  256. package/dist/hooks/LocalStorageOperations/index.d.cts +17 -0
  257. package/dist/hooks/LocalStorageOperations/index.d.ts +17 -0
  258. package/dist/hooks/LocalStorageOperations/index.js +74 -0
  259. package/dist/hooks/MessageFilter/index.cjs +54 -0
  260. package/dist/hooks/MessageFilter/index.d.cts +30 -0
  261. package/dist/hooks/MessageFilter/index.d.ts +30 -0
  262. package/dist/hooks/MessageFilter/index.js +54 -0
  263. package/dist/hooks/MessageScrollObserver/index.cjs +36 -0
  264. package/dist/hooks/MessageScrollObserver/index.d.cts +5 -0
  265. package/dist/hooks/MessageScrollObserver/index.d.ts +5 -0
  266. package/dist/hooks/MessageScrollObserver/index.js +34 -0
  267. package/dist/hooks/NewOrgConfig/index.cjs +20 -0
  268. package/dist/hooks/NewOrgConfig/index.d.cts +23 -0
  269. package/dist/hooks/NewOrgConfig/index.d.ts +23 -0
  270. package/dist/hooks/NewOrgConfig/index.js +20 -0
  271. package/dist/hooks/Search/index.cjs +326 -0
  272. package/dist/hooks/Search/index.d.cts +61 -0
  273. package/dist/hooks/Search/index.d.ts +61 -0
  274. package/dist/hooks/Search/index.js +323 -0
  275. package/dist/hooks/SearchOperations/index.cjs +102 -0
  276. package/dist/hooks/SearchOperations/index.d.cts +22 -0
  277. package/dist/hooks/SearchOperations/index.d.ts +22 -0
  278. package/dist/hooks/SearchOperations/index.js +99 -0
  279. package/dist/hooks/SessionStorageOperations/index.cjs +30 -0
  280. package/dist/hooks/SessionStorageOperations/index.d.cts +8 -0
  281. package/dist/hooks/SessionStorageOperations/index.d.ts +8 -0
  282. package/dist/hooks/SessionStorageOperations/index.js +28 -0
  283. package/dist/hooks/ShopifyUrlOperations/index.cjs +53 -0
  284. package/dist/hooks/ShopifyUrlOperations/index.d.cts +23 -0
  285. package/dist/hooks/ShopifyUrlOperations/index.d.ts +23 -0
  286. package/dist/hooks/ShopifyUrlOperations/index.js +49 -0
  287. package/dist/hooks/SnapCalculator/index.cjs +29 -0
  288. package/dist/hooks/SnapCalculator/index.d.cts +12 -0
  289. package/dist/hooks/SnapCalculator/index.d.ts +12 -0
  290. package/dist/hooks/SnapCalculator/index.js +27 -0
  291. package/dist/hooks/SystemSettingsContext/index.cjs +7 -0
  292. package/dist/hooks/SystemSettingsContext/index.d.cts +23 -0
  293. package/dist/hooks/SystemSettingsContext/index.d.ts +23 -0
  294. package/dist/hooks/SystemSettingsContext/index.js +7 -0
  295. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +22 -0
  296. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +18 -0
  297. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +18 -0
  298. package/dist/hooks/TrackComponentVisibleEvent/index.js +22 -0
  299. package/dist/hooks/UpdateAnalyticsProps/index.cjs +62 -0
  300. package/dist/hooks/UpdateAnalyticsProps/index.d.cts +9 -0
  301. package/dist/hooks/UpdateAnalyticsProps/index.d.ts +9 -0
  302. package/dist/hooks/UpdateAnalyticsProps/index.js +59 -0
  303. package/dist/hooks/utils.cjs +8 -0
  304. package/dist/hooks/utils.d.cts +13 -0
  305. package/dist/hooks/utils.d.ts +13 -0
  306. package/dist/hooks/utils.js +3 -0
  307. package/dist/index-B9HUPS_i.d.cts +186 -0
  308. package/dist/{index-CcIG01PJ.d.ts → index-BN-3ctk_.d.ts} +2 -2
  309. package/dist/index-BNiYL8h0.d.cts +28 -0
  310. package/dist/{index-BDPWBU3h.d.cts → index-BW6pHibZ.d.cts} +1 -1
  311. package/dist/index-BirtCYN3.d.ts +186 -0
  312. package/dist/index-Bmub8e38.d.cts +1 -1
  313. package/dist/{index-Cqg6ltII.d.ts → index-BoYC9XLW.d.ts} +1 -1
  314. package/dist/index-C9zXP5bg.d.ts +28 -0
  315. package/dist/index-CESxqFso.d.cts +1 -1
  316. package/dist/index-CK_J3QMY.d.ts +676 -0
  317. package/dist/index-C_MIfxF0.d.cts +676 -0
  318. package/dist/index-CiWEYzXl.d.cts +1 -1
  319. package/dist/{index-C6KdON7d.d.ts → index-Da0UzyI9.d.ts} +1 -1
  320. package/dist/{index-ylUiJvnr.d.ts → index-Dr_c2DDq.d.ts} +1 -1
  321. package/dist/{index-PGF8BvxQ.d.ts → index-DsiilEj-.d.ts} +1 -1
  322. package/dist/{index-Byb45OPg.d.cts → index-MOOZ2oxZ.d.cts} +1 -1
  323. package/dist/{index-DOii3C6b.d.ts → index-ghzD_356.d.ts} +1 -1
  324. package/dist/{index-B0NW9KTj.d.cts → index-hdbCEjYy.d.cts} +1 -1
  325. package/dist/interceptors/index.cjs +2 -1
  326. package/dist/interceptors/index.d.cts +10 -10
  327. package/dist/interceptors/index.d.ts +13 -13
  328. package/dist/interceptors/index.js +2 -1
  329. package/dist/interceptors/types.cjs +1 -0
  330. package/dist/interceptors/types.d.cts +13 -0
  331. package/dist/interceptors/types.d.ts +13 -0
  332. package/dist/interceptors/types.js +3 -0
  333. package/dist/localStorageContext-DiTziaPa.js +95 -0
  334. package/dist/localStorageContext-S38L0OSP.cjs +115 -0
  335. package/dist/logger-CkhQayOW.js +20 -0
  336. package/dist/logger-DQ0WfCcD.cjs +26 -0
  337. package/dist/{models-BkXg5eIP.cjs → models-C48U9q70.js} +220 -458
  338. package/dist/models-Ctn-pmug.cjs +1537 -0
  339. package/dist/newOrgConfigAtom-D6R-7HCk.cjs +15 -0
  340. package/dist/newOrgConfigAtom-bn1lnljf.js +8 -0
  341. package/dist/newOrgConfigContext-D3WoaBVU.cjs +68 -0
  342. package/dist/newOrgConfigContext-rWOYz0E8.js +53 -0
  343. package/dist/{nodeSelector-Dm4S-10n.d.cts → nodeSelector-B3bPtEjX.d.cts} +1 -1
  344. package/dist/{nodeSelector-BxrS2S_k.d.ts → nodeSelector-D5gjDWZ3.d.ts} +1 -1
  345. package/dist/org-CIhjzxWr.cjs +43 -0
  346. package/dist/org-CeWXnpwF.js +12 -0
  347. package/dist/{orgAnalyticsConfig-ClrFy2qH.js → orgAnalyticsConfig-BC4_sEmn.js} +1 -1
  348. package/dist/{orgAnalyticsConfig-BJ2A1RZ-.cjs → orgAnalyticsConfig-DsGbyFhO.cjs} +1 -1
  349. package/dist/search--NZPZkK3.cjs +205 -0
  350. package/dist/search-BLShhjvR.d.ts +20 -0
  351. package/dist/search-CxZl7iQF.js +126 -0
  352. package/dist/{search-filter-types-fZf91Pdw.d.ts → search-filter-types-DPgeG8FS.d.ts} +1 -1
  353. package/dist/{search-filter-types-DosbseF3.d.cts → search-filter-types-_mprCnBi.d.cts} +1 -1
  354. package/dist/search-y-ioX5Mz.d.cts +20 -0
  355. package/dist/searchContext-C4Glr8Nv.cjs +145 -0
  356. package/dist/searchContext-VnjhV7Lk.js +129 -0
  357. package/dist/searchServiceAdapter-DEv1tTn0.cjs +34 -0
  358. package/dist/searchServiceAdapter-WyCU55NV.js +16 -0
  359. package/dist/sessionStorageContext-BJ05_j7l.cjs +66 -0
  360. package/dist/sessionStorageContext-Dp_bhXQP.js +52 -0
  361. package/dist/shopifyUrlContext-CGqpJl1o.js +61 -0
  362. package/dist/shopifyUrlContext-Cob4L7Dt.cjs +75 -0
  363. package/dist/spiffyWidgets-BuS00VaQ.d.cts +20 -0
  364. package/dist/spiffyWidgets-GILaqHv6.d.ts +20 -0
  365. package/dist/systemSettingsContext-BDKWrrco.cjs +60 -0
  366. package/dist/systemSettingsContext-Dqng3YSZ.js +39 -0
  367. package/dist/{test-types-C9b_OdfO.d.ts → test-types-EzMFw_U3.d.ts} +1 -1
  368. package/dist/{test-types-CgVJtwUr.d.cts → test-types-ThQiO_cc.d.cts} +1 -1
  369. package/dist/types/index.cjs +33 -5
  370. package/dist/types/index.d.cts +2 -2
  371. package/dist/types/index.d.ts +2 -2
  372. package/dist/types/index.js +30 -3
  373. package/dist/types-BUeRbZUk.d.cts +10 -0
  374. package/dist/types-BwNrLPSZ.cjs +106 -0
  375. package/dist/types-CMuTSKrW.d.ts +10 -0
  376. package/dist/types-CS0Hrzja.js +30 -0
  377. package/dist/types-CxObxLKs.cjs +48 -0
  378. package/dist/types-D3uOF0Oy.js +76 -0
  379. package/dist/types-fsXBIQwO.d.ts +51 -0
  380. package/dist/types-zuWLkBJ3.d.cts +51 -0
  381. package/dist/types.d.cts +15 -0
  382. package/dist/types.d.ts +15 -0
  383. package/dist/unsupportedProductExceptions-CKiri_vO.cjs +32 -0
  384. package/dist/unsupportedProductExceptions-ClxlJ6cU.js +20 -0
  385. package/dist/urlsParser-D1nsJgQG.cjs +78 -0
  386. package/dist/urlsParser-DzEetiey.js +42 -0
  387. package/dist/useAmplitudeOperations-BSsyvkQ2.cjs +41 -0
  388. package/dist/useAmplitudeOperations-BottjwT9.js +34 -0
  389. package/dist/useAppDetails-BpiBxS_5.cjs +38 -0
  390. package/dist/useAppDetails-DDNIsM46.js +30 -0
  391. package/dist/useDebounce-BaIp-A1W.cjs +26 -0
  392. package/dist/useDebounce-CxPj9WmE.js +19 -0
  393. package/dist/useGraphQLConfig-DZ0ZannB.js +63 -0
  394. package/dist/useGraphQLConfig-Dw8dDh3T.cjs +76 -0
  395. package/dist/useIntersection-B4J9UhaG.js +21 -0
  396. package/dist/useIntersection-DKWc5MY6.cjs +28 -0
  397. package/dist/{useMessageInterceptor-B87e3yu3.cjs → useMessageInterceptor-CstX10ih.cjs} +3 -3
  398. package/dist/{useMessageInterceptor-Bb7YRaWk.js → useMessageInterceptor-D5oAekXn.js} +2 -2
  399. package/dist/userIdentityContext-D2oFVFzo.d.cts +20 -0
  400. package/dist/userIdentityContext-DPFkCSCu.cjs +125 -0
  401. package/dist/userIdentityContext-Z65zM-Ae.js +109 -0
  402. package/dist/userIdentityContext-wYRpgkaJ.d.ts +20 -0
  403. package/dist/utilityTypes-DynzxjK3.js +1 -0
  404. package/dist/utilityTypes-xb8SjKSV.cjs +0 -0
  405. package/dist/utils-2SWrJ12w.cjs +29 -0
  406. package/dist/utils-B1xLx9S8.d.ts +15 -0
  407. package/dist/utils-B3x_9JTY.d.cts +15 -0
  408. package/dist/utils-BZtSmwgh.d.cts +22 -0
  409. package/dist/utils-Bcz5kAgP.js +92 -0
  410. package/dist/utils-CEKzBcN2.js +27 -0
  411. package/dist/utils-CMqFfqZx.cjs +130 -0
  412. package/dist/utils-CVovRwlw.js +606 -0
  413. package/dist/utils-CqBxIpEV.js +23 -0
  414. package/dist/utils-CsMbZmRw.cjs +33 -0
  415. package/dist/utils-DzPSXtmD.cjs +715 -0
  416. package/dist/utils-bxOCg2i9.d.ts +22 -0
  417. package/dist/variantInfo-B7IwRpCg.cjs +0 -0
  418. package/dist/variantInfo-BtOYUGWa.js +1 -0
  419. package/package.json +191 -7
  420. package/src/application/models/index.ts +0 -1
  421. package/src/application/utils/analyticsUtils.ts +1 -1
  422. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +1 -1
  423. package/src/atoms/app/index.ts +1 -1
  424. package/src/atoms/chat/chatState.ts +1 -1
  425. package/src/atoms/chat/replies.ts +1 -1
  426. package/src/atoms/org/graphqlConfig.ts +1 -39
  427. package/src/atoms/org/index.ts +0 -1
  428. package/src/atoms/org/newOrgConfigAtom.ts +2 -6
  429. package/src/contexts/{amplitudeContext.tsx → amplitudeContext/amplitudeContext.tsx} +1 -2
  430. package/src/contexts/amplitudeContext/index.ts +1 -0
  431. package/src/contexts/{cdnContext.tsx → cdnContext/cdnContext.tsx} +1 -1
  432. package/src/contexts/cdnContext/index.ts +1 -0
  433. package/src/contexts/{chatContext.tsx → chatContext/chatContext.tsx} +3 -3
  434. package/src/contexts/chatContext/index.ts +1 -0
  435. package/src/contexts/{enviveConfigContext.tsx → enviveConfigContext/enviveConfigContext.tsx} +1 -1
  436. package/src/contexts/enviveConfigContext/index.ts +1 -0
  437. package/src/contexts/{enviveCssContext.tsx → enviveCssContext/enviveCssContext.tsx} +1 -1
  438. package/src/contexts/enviveCssContext/index.ts +1 -0
  439. package/src/contexts/{featureFlagContext.tsx → featureFlagContext/featureFlagContext.tsx} +1 -1
  440. package/src/contexts/featureFlagContext/index.ts +1 -0
  441. package/src/contexts/featureFlagServiceContext/index.ts +1 -0
  442. package/src/contexts/graphqlContext/index.ts +1 -0
  443. package/src/contexts/localStorageContext/index.ts +1 -0
  444. package/src/contexts/{localStorageContext.tsx → localStorageContext/localStorageContext.tsx} +2 -2
  445. package/src/contexts/newOrgConfigContext/index.ts +1 -0
  446. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +70 -0
  447. package/src/contexts/searchContext/index.ts +1 -0
  448. package/src/contexts/{searchContext.tsx → searchContext/searchContext.tsx} +5 -5
  449. package/src/contexts/sessionStorageContext/index.ts +1 -0
  450. package/src/contexts/{sessionStorageContext.tsx → sessionStorageContext/sessionStorageContext.tsx} +1 -1
  451. package/src/contexts/shopifyUrlContext/index.ts +1 -0
  452. package/src/contexts/systemSettingsContext/index.ts +1 -0
  453. package/src/contexts/userIdentityContext/index.ts +1 -0
  454. package/src/events/registerAnalyticsListeners.ts +2 -2
  455. package/src/favicon.ico +0 -0
  456. package/src/hooks/AmplitudeOperations/index.ts +1 -0
  457. package/src/hooks/{useAmplitudeOperations.ts → AmplitudeOperations/useAmplitudeOperations.ts} +1 -1
  458. package/src/hooks/AppDetails/index.ts +1 -0
  459. package/src/hooks/{useAppDetails.ts → AppDetails/useAppDetails.ts} +1 -3
  460. package/src/hooks/BlockBackButton/index.ts +1 -0
  461. package/src/hooks/CdnOperations/index.ts +1 -0
  462. package/src/hooks/{useCdnOperations.ts → CdnOperations/useCdnOperations.ts} +1 -1
  463. package/src/hooks/ChatToggle/index.ts +1 -0
  464. package/src/hooks/{useChatToggle.ts → ChatToggle/useChatToggle.ts} +1 -1
  465. package/src/hooks/ChatToggleAnalytics/index.ts +1 -0
  466. package/src/hooks/{useChatToggleAnalytics.ts → ChatToggleAnalytics/useChatToggleAnalytics.ts} +1 -1
  467. package/src/hooks/CustomerSupportHandoff/index.ts +1 -0
  468. package/src/hooks/Debounce/index.ts +1 -0
  469. package/src/hooks/ElementObserver/index.ts +1 -0
  470. package/src/hooks/GrabAndScroll/index.ts +1 -0
  471. package/src/hooks/GraphQLConfig/index.ts +1 -0
  472. package/src/hooks/{useGraphQLConfig.ts → GraphQLConfig/useGraphQLConfig.ts} +1 -1
  473. package/src/hooks/IdentifyUser/index.ts +1 -0
  474. package/src/hooks/{useIdentifyUser.ts → IdentifyUser/useIdentifyUser.ts} +1 -1
  475. package/src/hooks/ImageResolver/index.ts +1 -0
  476. package/src/hooks/Intersection/index.ts +1 -0
  477. package/src/hooks/IsSmallScreen/index.ts +1 -0
  478. package/src/hooks/LocalStorageOperations/index.ts +1 -0
  479. package/src/hooks/{useLocalStorageOperations.ts → LocalStorageOperations/useLocalStorageOperations.ts} +2 -2
  480. package/src/hooks/MessageFilter/index.ts +1 -0
  481. package/src/hooks/MessageScrollObserver/index.ts +1 -0
  482. package/src/hooks/NewOrgConfig/index.ts +1 -0
  483. package/src/hooks/{useNewOrgConfig.ts → NewOrgConfig/useNewOrgConfig.ts} +1 -1
  484. package/src/hooks/Search/index.ts +1 -0
  485. package/src/hooks/{useSearch.tsx → Search/useSearch.tsx} +5 -4
  486. package/src/hooks/SearchOperations/index.ts +1 -0
  487. package/src/hooks/SessionStorageOperations/index.ts +1 -0
  488. package/src/hooks/{useSessionStorageOperations.ts → SessionStorageOperations/useSessionStorageOperations.ts} +1 -1
  489. package/src/hooks/ShopifyUrlOperations/index.ts +1 -0
  490. package/src/hooks/{useShopifyUrlOperations.ts → ShopifyUrlOperations/useShopifyUrlOperations.ts} +1 -1
  491. package/src/hooks/SnapCalculator/index.ts +1 -0
  492. package/src/hooks/SystemSettingsContext/index.ts +1 -0
  493. package/src/hooks/SystemSettingsContext/useSystemSettingsContext.ts +14 -0
  494. package/src/hooks/TrackComponentVisibleEvent/index.ts +1 -0
  495. package/src/hooks/{useTrackComponentVisibleEvent.ts → TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts} +2 -2
  496. package/src/hooks/UpdateAnalyticsProps/index.ts +1 -0
  497. package/src/hooks/{useUpdateAnalyticsProps.ts → UpdateAnalyticsProps/useUpdateAnalyticsProps.ts} +1 -1
  498. package/dist/amplitudeContext-CHzas7Cf.d.cts +0 -52
  499. package/dist/amplitudeContext-D-7fmVh1.cjs +0 -356
  500. package/dist/amplitudeContext-hY3caPC6.js +0 -322
  501. package/dist/amplitudeContext-tJ4y-SzX.d.ts +0 -52
  502. package/dist/api-DjeZXxl_.js +0 -207
  503. package/dist/api-_JaUnIUj.cjs +0 -292
  504. package/dist/bandolier-DYEz4-8C.js +0 -1229
  505. package/dist/bandolier-o_-xrbOV.cjs +0 -1229
  506. package/dist/carpe-CsG5jCcl.cjs +0 -607
  507. package/dist/carpe-DONk00bZ.js +0 -605
  508. package/dist/cdnUtils-32v8bDX9.cjs +0 -16
  509. package/dist/cdnUtils-E4tLBt2g.js +0 -11
  510. package/dist/chat-CO7cRkaq.cjs +0 -506
  511. package/dist/chat-hcRc4RRd.js +0 -285
  512. package/dist/contexts/index.cjs +0 -57
  513. package/dist/contexts/index.d.cts +0 -10
  514. package/dist/contexts/index.d.ts +0 -10
  515. package/dist/contexts/index.js +0 -23
  516. package/dist/contexts-B4ihTBsV.cjs +0 -2980
  517. package/dist/contexts-DGlr7M1o.js +0 -2596
  518. package/dist/coterie-CKB93qfz.cjs +0 -239
  519. package/dist/coterie-DHcj2fRE.js +0 -239
  520. package/dist/custservice-types-Dy0kc9TW.cjs +0 -35
  521. package/dist/custservice-types-mnIunabv.js +0 -23
  522. package/dist/default-BnB4p0Se.cjs +0 -234
  523. package/dist/default-D6f5Dyt7.js +0 -199
  524. package/dist/default-ZKkE5zT4.cjs +0 -4
  525. package/dist/default-legGZJwI.js +0 -4
  526. package/dist/divIds-2dJlU3z8.cjs +0 -117
  527. package/dist/divIds-BUrN2vY-.js +0 -21
  528. package/dist/dreamlandBaby-BiRYYFav.js +0 -346
  529. package/dist/dreamlandBaby-zuvmfzfD.cjs +0 -346
  530. package/dist/embedded-BJLWIriJ.js +0 -23
  531. package/dist/embedded-Dl79TJLC.cjs +0 -131
  532. package/dist/entrypoints-Bs3pn6EV.js +0 -7
  533. package/dist/entrypoints-Dqi5pzWH.cjs +0 -19
  534. package/dist/enviveConfig-BccuzS2a.cjs +0 -240
  535. package/dist/enviveConfig-CzhTz8Aa.js +0 -152
  536. package/dist/fiveCbd-DwTTwC2j.cjs +0 -613
  537. package/dist/fiveCbd-Dz2NouOF.js +0 -613
  538. package/dist/forLoveAndLemons-DqSdyD6S.js +0 -665
  539. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +0 -667
  540. package/dist/graphql-BNW60InJ.cjs +0 -128
  541. package/dist/graphql-CjB8wHzm.js +0 -74
  542. package/dist/graphqlConfig-CYt6tWII.js +0 -30
  543. package/dist/graphqlConfig-DicykC-o.cjs +0 -61
  544. package/dist/greenpan-B_EbPkSP.js +0 -397
  545. package/dist/greenpan-kPE4fJgd.cjs +0 -397
  546. package/dist/grooveLife-Ckuir319.js +0 -342
  547. package/dist/grooveLife-DKSEQp1F.cjs +0 -342
  548. package/dist/homegrownCannabis-BVPa2pqe.js +0 -410
  549. package/dist/homegrownCannabis-BwIAkxuA.cjs +0 -410
  550. package/dist/hooks/index.cjs +0 -63
  551. package/dist/hooks/index.d.cts +0 -314
  552. package/dist/hooks/index.d.ts +0 -314
  553. package/dist/hooks/index.js +0 -23
  554. package/dist/index-BMPtlgac.d.ts +0 -191
  555. package/dist/index-C7pGDl1A.d.ts +0 -1609
  556. package/dist/index-C9lgsCWp.d.cts +0 -203
  557. package/dist/index-Cc-wBCn6.d.ts +0 -203
  558. package/dist/index-DTu2X-YS.d.cts +0 -1609
  559. package/dist/index-OEifcBsm.d.cts +0 -191
  560. package/dist/jackArcher-B39OEIj6.cjs +0 -727
  561. package/dist/jackArcher-BwkWGybC.js +0 -727
  562. package/dist/jordanCraig-CxRH_jLi.js +0 -1786
  563. package/dist/jordanCraig-RwmWw-jM.cjs +0 -1786
  564. package/dist/kindredBravely-D78VwL20.cjs +0 -490
  565. package/dist/kindredBravely-DQDpAzdl.js +0 -490
  566. package/dist/kutFromTheKloth-TcXQkIti.js +0 -369
  567. package/dist/kutFromTheKloth-dXRrNti0.cjs +0 -369
  568. package/dist/larryAndSerges-Bh5XEXsZ.js +0 -262
  569. package/dist/larryAndSerges-COdBzOzu.cjs +0 -262
  570. package/dist/leapsAndRebounds-BbXnqkl5.cjs +0 -360
  571. package/dist/leapsAndRebounds-mjCaH1k-.js +0 -360
  572. package/dist/longevityrx-DdV3v26F.cjs +0 -320
  573. package/dist/longevityrx-DfPDfvAt.js +0 -320
  574. package/dist/lookOptic-DgXFGBPP.cjs +0 -282
  575. package/dist/lookOptic-FgVW1afF.js +0 -282
  576. package/dist/mantraBrand-C5gVm3rk.cjs +0 -750
  577. package/dist/mantraBrand-uV8HCDR8.js +0 -750
  578. package/dist/medterra-BtDpr1Hw.cjs +0 -583
  579. package/dist/medterra-DgzE7-mj.js +0 -583
  580. package/dist/modells-CJjsxOIR.js +0 -484
  581. package/dist/modells-Ck5KbRFj.cjs +0 -484
  582. package/dist/models-UZ6HszfZ.js +0 -1281
  583. package/dist/org-C2RrBVQR.cjs +0 -81
  584. package/dist/org-xMytX--e.js +0 -38
  585. package/dist/pressedFloral-Bteoboms.js +0 -661
  586. package/dist/pressedFloral-CexgV-xy.cjs +0 -661
  587. package/dist/search-BMOAmrmY.js +0 -459
  588. package/dist/search-Df0Ifneg.cjs +0 -672
  589. package/dist/skinPerfection-BGzq9lq-.cjs +0 -334
  590. package/dist/skinPerfection-BlvcEcUE.js +0 -334
  591. package/dist/snapSupplements-CbbGzAgO.cjs +0 -285
  592. package/dist/snapSupplements-kcsPAOm9.js +0 -285
  593. package/dist/socialProofClasses-Db8gzsfi.cjs +0 -40
  594. package/dist/socialProofClasses-kwDvwLOZ.js +0 -10
  595. package/dist/spanx-B4WFA_rI.js +0 -661
  596. package/dist/spanx-BWoE4F8b.cjs +0 -663
  597. package/dist/spanxStaging-BOrOjhXn.js +0 -845
  598. package/dist/spanxStaging-BfdfIug4.cjs +0 -848
  599. package/dist/suggestionBarV2-types-IMMOmCir.js +0 -10
  600. package/dist/suggestionBarV2-types-nnGNgFvR.cjs +0 -16
  601. package/dist/supergoop-22dd5_BS.js +0 -323
  602. package/dist/supergoop-B-a4cku2.cjs +0 -323
  603. package/dist/types--pr1GQQx.js +0 -154
  604. package/dist/types-BVSyY3Hk.cjs +0 -196
  605. package/dist/uniqueVintage-CJXiNNe7.js +0 -1211
  606. package/dist/uniqueVintage-D0jzJWlo.cjs +0 -1213
  607. package/dist/userIdentityContext-BPqvVIg0.d.cts +0 -20
  608. package/dist/userIdentityContext-wbCRmlzp.d.ts +0 -20
  609. package/dist/utils-C9ZSCx12.js +0 -888
  610. package/dist/utils-D5HO61hG.cjs +0 -1016
  611. package/dist/venaCbd-Bhhu_qUf.cjs +0 -365
  612. package/dist/venaCbd-CanovPS_.js +0 -365
  613. package/dist/westonJonBoucher-BC0x1ktI.cjs +0 -422
  614. package/dist/westonJonBoucher-BUu1_wP1.js +0 -422
  615. package/dist/wineEnthusiast-BlCryfil.cjs +0 -940
  616. package/dist/wineEnthusiast-Ck1x5iJq.js +0 -940
  617. package/dist/wolfMattress-D9Mjq-HP.js +0 -372
  618. package/dist/wolfMattress-JssghhC-.cjs +0 -372
  619. package/dist/wolfTactical-C6exYhL7.cjs +0 -349
  620. package/dist/wolfTactical-CnV3KQdI.js +0 -349
  621. package/src/application/models/supportedOrgs.ts +0 -161
  622. package/src/atoms/org/orgPageConfig.ts +0 -42
  623. package/src/contexts/index.ts +0 -16
  624. package/src/contexts/newOrgConfigContext.tsx +0 -104
  625. package/src/contexts/orgConfigContext.tsx +0 -106
  626. package/src/hooks/index.ts +0 -27
  627. package/src/hooks/useSystemSettingsContext.ts +0 -12
  628. package/src/merchants/bandolier/bandolier.ts +0 -1371
  629. package/src/merchants/carpe/carpe.ts +0 -653
  630. package/src/merchants/coterie/coterie.ts +0 -277
  631. package/src/merchants/default.ts +0 -196
  632. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +0 -381
  633. package/src/merchants/fiveCbd/fiveCbd.ts +0 -691
  634. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +0 -751
  635. package/src/merchants/greenpan/greenpan.ts +0 -434
  636. package/src/merchants/grooveLife/grooveLife.ts +0 -392
  637. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +0 -474
  638. package/src/merchants/init-merchant.sh +0 -53
  639. package/src/merchants/jackArcher/jackArcher.ts +0 -989
  640. package/src/merchants/jordanCraig/jordanCraig.ts +0 -1927
  641. package/src/merchants/kindredBravely/kindredBravely.ts +0 -538
  642. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +0 -421
  643. package/src/merchants/larryAndSerges/larryAndSerges.ts +0 -318
  644. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +0 -424
  645. package/src/merchants/longevityrx/longevityrx.ts +0 -374
  646. package/src/merchants/lookOptic/lookOptic.ts +0 -323
  647. package/src/merchants/mantraBrand/mantraBrand.ts +0 -844
  648. package/src/merchants/medterra/medterra.ts +0 -673
  649. package/src/merchants/modells/modells.ts +0 -543
  650. package/src/merchants/pressedFloral/pressedFloral.ts +0 -728
  651. package/src/merchants/skinPerfection/skinPerfection.ts +0 -385
  652. package/src/merchants/snapSupplements/snapSupplements.ts +0 -328
  653. package/src/merchants/spanx/spanx.ts +0 -810
  654. package/src/merchants/spanx/spanxStaging.ts +0 -936
  655. package/src/merchants/supergoop/supergoop.ts +0 -375
  656. package/src/merchants/uniqueVintage/uniqueVintage.ts +0 -1314
  657. package/src/merchants/venaCbd/venaCbd.ts +0 -407
  658. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +0 -473
  659. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +0 -990
  660. package/src/merchants/wolfMattress/wolfMattress.ts +0 -411
  661. package/src/merchants/wolfTactical/wolfTactical.ts +0 -383
  662. /package/dist/{atomStore-KSoFS3Jj.cjs → AmplitudeOperations-CNyxbBY6.cjs} +0 -0
  663. /package/dist/{atomStore-CZnUUsrr.js → AmplitudeOperations-Oa2efWtF.js} +0 -0
  664. /package/dist/{locators-fBXS_pxP.js → atomStore-BS6qtYZF.js} +0 -0
  665. /package/dist/{locators-0YYZu9n4.cjs → atomStore-BjRyLFEx.cjs} +0 -0
  666. /package/dist/{utilityTypes-8sETsYPk.js → types-DtTnp0o0.js} +0 -0
  667. /package/dist/{utilityTypes-COShxVir.cjs → types-a8gm_IaQ.cjs} +0 -0
  668. /package/dist/{variantInfo-orXoPBCU.cjs → types.cjs} +0 -0
  669. /package/dist/{variantInfo-DbVxA1yE.js → types.js} +0 -0
  670. /package/src/contexts/{featureFlagServiceContext.tsx → featureFlagServiceContext/featureFlagServiceContext.tsx} +0 -0
  671. /package/src/contexts/{graphqlContext.tsx → graphqlContext/graphqlContext.tsx} +0 -0
  672. /package/src/contexts/{shopifyUrlContext.tsx → shopifyUrlContext/shopifyUrlContext.tsx} +0 -0
  673. /package/src/contexts/{systemSettingsContext.tsx → systemSettingsContext/systemSettingsContext.tsx} +0 -0
  674. /package/src/contexts/{userIdentityContext.tsx → userIdentityContext/userIdentityContext.tsx} +0 -0
  675. /package/src/hooks/{useBlockBackButton.ts → BlockBackButton/useBlockBackButton.ts} +0 -0
  676. /package/src/hooks/{useCustomerSupportHandoff.ts → CustomerSupportHandoff/useCustomerSupportHandoff.ts} +0 -0
  677. /package/src/hooks/{useDebounce.ts → Debounce/useDebounce.ts} +0 -0
  678. /package/src/hooks/{useElementObserver.ts → ElementObserver/useElementObserver.ts} +0 -0
  679. /package/src/hooks/{useGrabAndScroll.ts → GrabAndScroll/useGrabAndScroll.ts} +0 -0
  680. /package/src/hooks/{useImageResolver.ts → ImageResolver/useImageResolver.ts} +0 -0
  681. /package/src/hooks/{useIntersection.ts → Intersection/useIntersection.ts} +0 -0
  682. /package/src/hooks/{useIsSmallScreen.ts → IsSmallScreen/useIsSmallScreen.ts} +0 -0
  683. /package/src/hooks/{useMessageFilter.ts → MessageFilter/useMessageFilter.ts} +0 -0
  684. /package/src/hooks/{useMessageScrollObserver.ts → MessageScrollObserver/useMessageScrollObserver.ts} +0 -0
  685. /package/src/hooks/{useSearchOperations.ts → SearchOperations/useSearchOperations.ts} +0 -0
  686. /package/src/hooks/{useSnapCalculator.ts → SnapCalculator/useSnapCalculator.ts} +0 -0
@@ -1,672 +0,0 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_models = require('./models-BkXg5eIP.cjs');
3
- const require_chat = require('./chat-CO7cRkaq.cjs');
4
- const require_org = require('./org-C2RrBVQR.cjs');
5
- let jotai = require("jotai");
6
- jotai = require_chunk.__toESM(jotai);
7
- let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
8
- __spiffy_ai_commerce_api_client = require_chunk.__toESM(__spiffy_ai_commerce_api_client);
9
- let uuid = require("uuid");
10
- uuid = require_chunk.__toESM(uuid);
11
-
12
- //#region src/atoms/search/utils.ts
13
- const formatFilterDisplayName = (displayName) => {
14
- const sizes = [
15
- "xxxs",
16
- "xxs",
17
- "xs",
18
- "s",
19
- "m",
20
- "l",
21
- "xl",
22
- "xxl",
23
- "xxxl",
24
- "xxxxl"
25
- ];
26
- return displayName.toLowerCase().split(" ").map((word) => {
27
- if (sizes.includes(word)) return word.toUpperCase();
28
- return word.charAt(0).toUpperCase() + word.slice(1);
29
- }).join(" ").replace(/Iphone/g, "iPhone");
30
- };
31
-
32
- //#endregion
33
- //#region src/atoms/search/productFilters.ts
34
- const getPriceBucket = (price, bucketSize) => {
35
- return Math.floor(price / bucketSize) * bucketSize;
36
- };
37
- const isStringArray = (value) => {
38
- if (!Array.isArray(value)) return false;
39
- return value.every((item) => typeof item === "string");
40
- };
41
- const sortFilter = (filterConfig) => {
42
- if (filterConfig.type === "price") return (a, b) => Number(a.filterItemId) - Number(b.filterItemId);
43
- if (filterConfig.type === "dynamic") {
44
- if (filterConfig.sorting.type === "alphabetic") return (a, b) => a.displayName.localeCompare(b.displayName);
45
- if (filterConfig.sorting.type === "productCount") return (a, b) => a.productCount === b.productCount ? a.displayName.localeCompare(b.displayName) : b.productCount - a.productCount;
46
- if (filterConfig.sorting.type === "custom") {
47
- const sortedKeys = filterConfig.sorting.map;
48
- return (a, b) => {
49
- if (sortedKeys[a.displayName] && sortedKeys[b.displayName]) return sortedKeys[a.displayName] - sortedKeys[b.displayName];
50
- if (sortedKeys[a.displayName]) return -1;
51
- if (sortedKeys[b.displayName]) return 1;
52
- return b.productCount - a.productCount;
53
- };
54
- }
55
- }
56
- throw new Error("Invaalid search filter configuration");
57
- };
58
- var ProductFilters = class {
59
- static getFiltersForProducts(products, filterConfigs, selectedFilterOptions) {
60
- if (!products || products.length === 0) return [];
61
- return [...filterConfigs.map((filterConfig) => products.reduce((acc, product) => {
62
- if (filterConfig.type === "price") {
63
- const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, filterConfig.bucketSize);
64
- const current = acc.map[priceBucket] ?? {
65
- filterItemId: priceBucket,
66
- displayName: `$${priceBucket}-$${priceBucket + filterConfig.bucketSize}`,
67
- productCount: 0
68
- };
69
- acc.map[priceBucket] = {
70
- ...current,
71
- productCount: current.productCount + 1
72
- };
73
- return acc;
74
- }
75
- const attributeValues = (product.filters && product.filters?.[filterConfig.attribute]) ?? [];
76
- if (isStringArray(attributeValues)) attributeValues.forEach((val) => {
77
- const normalizedVal = val.toLowerCase();
78
- const current = acc.map[normalizedVal] ?? {
79
- filterItemId: normalizedVal,
80
- displayName: formatFilterDisplayName(val),
81
- productCount: 0
82
- };
83
- acc.map[normalizedVal] = {
84
- ...current,
85
- productCount: current.productCount + 1
86
- };
87
- });
88
- return acc;
89
- }, {
90
- filterConfig,
91
- map: {}
92
- })).map(({ filterConfig, map }) => ({
93
- filterId: filterConfig.filterId,
94
- displayName: filterConfig.displayName,
95
- items: Object.values(map).map((filter) => ({
96
- filterItemId: filter.filterItemId,
97
- displayName: filter.displayName,
98
- productCount: filter.productCount,
99
- isSelected: selectedFilterOptions.some((option) => option.id === `${filterConfig.filterId}:${filter.filterItemId}`) ?? false
100
- })).sort(sortFilter(filterConfig))
101
- }))];
102
- }
103
- static filterProducts(products, filterConfigs, selectedFilterOptions, additiveDynamicFilters = false) {
104
- const selectedFilters = filterConfigs.map((filterConfig) => ({
105
- filterConfig,
106
- hasSelectedOptions: selectedFilterOptions.some((option) => option.filterId === filterConfig.filterId)
107
- })).filter(({ hasSelectedOptions }) => hasSelectedOptions);
108
- return selectedFilterOptions.length === 0 ? products : products.filter((product) => selectedFilters.reduce((acc, selectedFilter) => {
109
- if (!acc) return acc;
110
- if (selectedFilter.filterConfig.type === "price") {
111
- const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, selectedFilter.filterConfig.bucketSize);
112
- if (!selectedFilterOptions.some((option) => option.id === `price:${priceBucket}`)) return false;
113
- }
114
- if (selectedFilter.filterConfig.type === "dynamic") {
115
- const { filterId, attribute } = selectedFilter.filterConfig;
116
- const attributeValues = product.filters?.[attribute];
117
- if (!isStringArray(attributeValues)) return false;
118
- if (selectedFilter.filterConfig.attribute === "dynamic" && !additiveDynamicFilters) {
119
- if (!selectedFilterOptions.filter((option) => option.filterId === filterId).map((option) => option.filterItemId.toLowerCase()).every((selectedValue) => attributeValues.some((val) => val.toLowerCase() === selectedValue))) return false;
120
- } else if (!attributeValues.some((val) => selectedFilterOptions.some((option) => option.id === `${filterId}:${val.toLowerCase()}`))) return false;
121
- }
122
- return true;
123
- }, true));
124
- }
125
- };
126
-
127
- //#endregion
128
- //#region src/atoms/search/types.ts
129
- let ProductSorting = /* @__PURE__ */ function(ProductSorting$1) {
130
- ProductSorting$1["FEATURED"] = "featured";
131
- ProductSorting$1["PRICE_ASC"] = "price_asc";
132
- ProductSorting$1["PRICE_DESC"] = "price_desc";
133
- return ProductSorting$1;
134
- }({});
135
- const ProductSortingNames = {
136
- [ProductSorting.FEATURED]: "Featured",
137
- [ProductSorting.PRICE_ASC]: "Price Low to High",
138
- [ProductSorting.PRICE_DESC]: "Price High to Low"
139
- };
140
-
141
- //#endregion
142
- //#region src/atoms/search/productSorter.ts
143
- var ProductSorter = class {
144
- static sort(products, sorting) {
145
- switch (sorting) {
146
- case ProductSorting.PRICE_ASC: return [...products].sort((p1, p2) => (p1.salePrice ?? p1.originalPrice ?? 0) - (p2.salePrice ?? p2.originalPrice ?? 0));
147
- case ProductSorting.PRICE_DESC: return [...products].sort((p1, p2) => (p2.salePrice ?? p2.originalPrice ?? 0) - (p1.salePrice ?? p1.originalPrice ?? 0));
148
- default: return products;
149
- }
150
- }
151
- };
152
-
153
- //#endregion
154
- //#region src/atoms/search/chatSearch.ts
155
- const chatSearchStateAtom = (0, jotai.atom)("entrypoint");
156
- const chatSearchHasProductsAtom = (0, jotai.atom)(false);
157
- const chatSearchProductSortingAtom = (0, jotai.atom)(ProductSorting.FEATURED);
158
- const filterProductList = (message) => message.type === require_models.MessageType.Product && message.metadata.isForGrid === true;
159
- const filterFilterList = (message) => message.type === require_models.MessageType.ProductSearchFilter;
160
- const chatSearchIsLoadingAtom = (0, jotai.atom)(false);
161
- const buildChatSearchTurn = (messages) => {
162
- const queryMessage = messages.find((message) => message.type === require_models.MessageType.ProductSearch);
163
- if (!queryMessage) return null;
164
- const { generatedQuery, productCount } = queryMessage.metadata ?? {};
165
- const productList = messages.filter(filterProductList).map((message) => message.metadata);
166
- const filterList = messages.filter(filterFilterList).map((message) => message.metadata.filterName);
167
- return [queryMessage.id, {
168
- id: queryMessage.id,
169
- generatedQuery,
170
- productCount: productCount || productList.length,
171
- productList,
172
- filterList,
173
- messages
174
- }];
175
- };
176
- const chatSearchFilterConfigAtom = (0, jotai.atom)((get) => {
177
- return get(require_org.newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.searchFilterConfig || [];
178
- });
179
- const searchMapAtom = (0, jotai.atom)((get) => {
180
- const messages = get(require_chat.messagesAtom);
181
- return Object.fromEntries(messages.map(buildChatSearchTurn).filter((v) => v !== null));
182
- });
183
- const internalChatSearchParamsAtom = (0, jotai.atom)({
184
- id: null,
185
- query: null
186
- });
187
- const selectedFilterOptionsAtom = (0, jotai.atom)([]);
188
- const additiveDynamicFiltersAtom = (0, jotai.atom)((get) => {
189
- return get(require_org.newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.additiveDynamicFilters ?? false;
190
- });
191
- const createChatSearchFilterOption = (filterId, filterItemId, displayName) => ({
192
- id: `${filterId}:${filterItemId}`,
193
- displayName,
194
- filterId,
195
- filterItemId
196
- });
197
- const handleSearchAtom = (0, jotai.atom)(null, (get, set, message) => {
198
- if (message.type !== require_models.MessageType.Search) return;
199
- const querySearch = message.metadata.searchTerm;
200
- set(require_chat.replyEventCategoryAtom, __spiffy_ai_commerce_api_client.UserEventCategory.Search);
201
- set(require_chat.userQueryAtom, querySearch);
202
- set(require_chat.messagesAtom, [...get(require_chat.messagesAtom), [message]]);
203
- set(require_chat.userHasRepliedAtom, true);
204
- set(require_chat.queueUserEventAtom, {
205
- eventId: message.id,
206
- category: __spiffy_ai_commerce_api_client.UserEventCategory.Search,
207
- createdAt: message.createdAt,
208
- attributes: {
209
- searchTerm: message.metadata.searchTerm,
210
- selectedFilters: message.metadata.selectedFilters
211
- }
212
- });
213
- });
214
- const chatSearchParamsAtom = (0, jotai.atom)((get) => get(internalChatSearchParamsAtom), (_, set, value) => {
215
- set(internalChatSearchParamsAtom, value);
216
- });
217
- const chatSearchQueryAtom = (0, jotai.atom)((get) => get(chatSearchParamsAtom)?.query ?? null, (get, set, value) => {
218
- const searchParams = get(chatSearchParamsAtom);
219
- set(chatSearchParamsAtom, {
220
- id: searchParams.id,
221
- query: value
222
- });
223
- });
224
- const chatSearchIdAtom = (0, jotai.atom)((get) => get(chatSearchParamsAtom)?.id ?? null, (get, set, value) => {
225
- const searchParams = get(chatSearchParamsAtom);
226
- set(chatSearchParamsAtom, {
227
- id: value,
228
- query: searchParams.query
229
- });
230
- });
231
- const ChatSearchTurnAtom = (0, jotai.atom)((get) => {
232
- const searchFilterConfig = get(chatSearchFilterConfigAtom);
233
- const searchMap = get(searchMapAtom);
234
- const chatSearchId = get(chatSearchIdAtom);
235
- if (!chatSearchId) return null;
236
- const ChatSearchTurn = searchMap[chatSearchId];
237
- if (!ChatSearchTurn) return null;
238
- const productSorting = get(chatSearchProductSortingAtom);
239
- const selectedFilterOptions = get(selectedFilterOptionsAtom);
240
- const additiveDynamicFilters = get(additiveDynamicFiltersAtom);
241
- const filteredProducts = ProductFilters.filterProducts(ChatSearchTurn.productList, searchFilterConfig, selectedFilterOptions, additiveDynamicFilters);
242
- const filteredAndSortedProducts = ProductSorter.sort(filteredProducts, productSorting);
243
- return {
244
- ...searchMap[chatSearchId],
245
- productList: filteredAndSortedProducts,
246
- productCount: filteredAndSortedProducts.length
247
- };
248
- });
249
- const chatSearchProducts = (0, jotai.atom)((get) => {
250
- return get(ChatSearchTurnAtom)?.productList ?? [];
251
- });
252
- const chatSearchFiltersAtom = (0, jotai.atom)((get) => {
253
- const searchFilterConfig = get(chatSearchFilterConfigAtom);
254
- const searchMap = get(searchMapAtom);
255
- const chatSearchId = get(chatSearchIdAtom);
256
- if (chatSearchId && searchMap[chatSearchId]) {
257
- const products = searchMap[chatSearchId].productList;
258
- const selectedFilterOptions = get(selectedFilterOptionsAtom);
259
- return ProductFilters.getFiltersForProducts(products, searchFilterConfig, selectedFilterOptions);
260
- }
261
- return [];
262
- });
263
- const setSearchParams = (query) => {
264
- const url = new URL(window.location.href);
265
- url.searchParams.set("es", "true");
266
- url.searchParams.set("esq", query);
267
- window.history.pushState({}, "", url);
268
- };
269
- const getSearchParamsAtom = (0, jotai.atom)(() => {
270
- const params = new URLSearchParams(window.location.search);
271
- return {
272
- es: params.get("es"),
273
- esq: params.get("esq")
274
- };
275
- });
276
- const initiateChatSearchAtom = (0, jotai.atom)(null, (_, set, query) => {
277
- set(chatSearchIsLoadingAtom, true);
278
- const url = new URL(window.location.href);
279
- url.searchParams.set("es", "true");
280
- url.searchParams.set("esq", query);
281
- window.history.pushState({}, "", url);
282
- window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
283
- set(chatSearchParamsAtom, {
284
- id: null,
285
- query
286
- });
287
- set(handleSearchAtom, {
288
- id: (0, uuid.v4)(),
289
- role: require_models.MessageRole.User,
290
- type: require_models.MessageType.Search,
291
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
292
- metadata: {
293
- searchTerm: query,
294
- selectedFilters: []
295
- }
296
- });
297
- });
298
- const handleSearchResultsAtom = (0, jotai.atom)(null, (get, set, message) => {
299
- if (!message || message.type !== require_models.MessageType.ProductSearch) return;
300
- const { productCount, generatedQuery } = message.metadata;
301
- if (productCount !== 0) {
302
- set(selectedFilterOptionsAtom, []);
303
- set(chatSearchStateAtom, "product-page");
304
- const currentSearchParams = get(chatSearchParamsAtom);
305
- const url = new URL(window.location.href);
306
- url.searchParams.set("es", "true");
307
- url.searchParams.set("esq", generatedQuery);
308
- url.searchParams.set("esi", message.id);
309
- window.history.pushState({}, "", url);
310
- if (currentSearchParams.id === null) window.history.replaceState(null, "", url);
311
- else window.history.pushState(null, "", url);
312
- set(chatSearchParamsAtom, {
313
- id: message.id,
314
- query: generatedQuery
315
- });
316
- }
317
- });
318
- const setChatSearchParamsAtom = (0, jotai.atom)(null, (_, set, query) => {
319
- const url = new URL(window.location.href);
320
- url.searchParams.set("es", "true");
321
- url.searchParams.set("esq", query);
322
- window.history.pushState({}, "", url);
323
- set(chatSearchParamsAtom, {
324
- id: null,
325
- query
326
- });
327
- });
328
-
329
- //#endregion
330
- //#region src/atoms/search/searchServiceAdapter.ts
331
- let searchServiceFunction = null;
332
- const setSearchServiceFunction = (fn) => {
333
- searchServiceFunction = fn;
334
- };
335
- const getSearchServiceFunction = () => {
336
- if (!searchServiceFunction) throw new Error("Search service function not initialized. Make sure SearchProvider is mounted.");
337
- return searchServiceFunction;
338
- };
339
- const clearSearchServiceFunction = () => {
340
- searchServiceFunction = null;
341
- };
342
-
343
- //#endregion
344
- //#region src/atoms/search/searchAPI.ts
345
- const searchAtom = (0, jotai.atom)({
346
- data: null,
347
- loading: false,
348
- error: null,
349
- lastQuery: null
350
- });
351
- const searchProductSortingAtom = (0, jotai.atom)(ProductSorting.FEATURED);
352
- const searchSelectedFiltersAtom = (0, jotai.atom)([]);
353
- const createFilterOption = (filterId, filterItemId, displayName) => ({
354
- id: `${filterId}:${filterItemId}`,
355
- displayName,
356
- filterId,
357
- filterItemId
358
- });
359
- const internalSearchParamsAtom = (0, jotai.atom)({
360
- id: null,
361
- query: null
362
- });
363
- const searchParamsAtom = (0, jotai.atom)((get) => get(internalSearchParamsAtom), (_, set, value) => {
364
- set(internalSearchParamsAtom, value);
365
- });
366
- const internalSearchSystemStateAtom = (0, jotai.atom)(false);
367
- const searchSystemAtom = (0, jotai.atom)((get) => get(internalSearchSystemStateAtom), (get, set, value) => {
368
- if (value === get(internalSearchSystemStateAtom)) return;
369
- const stateChangeHandler = () => {
370
- const params = new URLSearchParams(window.location.search);
371
- if (params.get("es") === "true") {
372
- const id = params.get("esi");
373
- const query = params.get("esq");
374
- set(searchParamsAtom, {
375
- id,
376
- query
377
- });
378
- } else set(searchParamsAtom, {
379
- id: null,
380
- query: null
381
- });
382
- };
383
- if (value) {
384
- set(internalSearchSystemStateAtom, true);
385
- window.addEventListener("popstate", stateChangeHandler);
386
- stateChangeHandler();
387
- } else {
388
- set(internalSearchSystemStateAtom, false);
389
- window.removeEventListener("popstate", stateChangeHandler);
390
- }
391
- });
392
- const filteredSearchProductsAtom = (0, jotai.atom)((get) => {
393
- const searchData = get(searchAtom).data;
394
- const sorting = get(searchProductSortingAtom);
395
- const selectedFilters = get(searchSelectedFiltersAtom);
396
- const newOrgConfig = get(require_org.newOrgConfigAtom);
397
- if (!searchData?.products || !newOrgConfig?.frontendConfig?.uiConfigs?.searchConfig) return [];
398
- const filteredProducts = ProductFilters.filterProducts(searchData.products, newOrgConfig.frontendConfig.uiConfigs.searchConfig.searchFilterConfig, selectedFilters, newOrgConfig.frontendConfig.uiConfigs.searchConfig.additiveDynamicFilters);
399
- return ProductSorter.sort(filteredProducts, sorting);
400
- });
401
- const searchFiltersAtom = (0, jotai.atom)((get) => {
402
- const searchData = get(searchAtom).data;
403
- const selectedFilters = get(searchSelectedFiltersAtom);
404
- const newOrgConfig = get(require_org.newOrgConfigAtom);
405
- if (!searchData?.products || !newOrgConfig?.frontendConfig?.uiConfigs?.searchConfig) return [];
406
- return ProductFilters.getFiltersForProducts(searchData.products, newOrgConfig.frontendConfig.uiConfigs.searchConfig.searchFilterConfig, selectedFilters);
407
- });
408
- const addSearchFilterAtom = (0, jotai.atom)(null, (get, set, filter) => {
409
- const current = get(searchSelectedFiltersAtom);
410
- if (!current.some((f) => f.id === filter.id)) set(searchSelectedFiltersAtom, [...current, filter]);
411
- });
412
- const removeSearchFilterAtom = (0, jotai.atom)(null, (get, set, filterId) => {
413
- const current = get(searchSelectedFiltersAtom);
414
- set(searchSelectedFiltersAtom, current.filter((f) => f.id !== filterId));
415
- });
416
- const clearSearchFiltersAtom = (0, jotai.atom)(null, (_, set) => {
417
- set(searchSelectedFiltersAtom, []);
418
- });
419
- const performSearchAtom = (0, jotai.atom)(null, async (get, set, params, allowRedirect = false) => {
420
- const currentState = get(searchAtom);
421
- const redirectSearchResultsUrl = get(require_org.newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.redirectSearchResultsUrl;
422
- if (allowRedirect && redirectSearchResultsUrl) {
423
- const redirectUrl = new URL(redirectSearchResultsUrl);
424
- redirectUrl.searchParams.set("es", "true");
425
- redirectUrl.searchParams.set("esq", params.query);
426
- window.location.href = redirectUrl.toString();
427
- } else {
428
- const url = new URL(window.location.href);
429
- url.searchParams.set("es", "true");
430
- url.searchParams.set("esq", params.query);
431
- window.history.pushState({}, "", url);
432
- window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
433
- }
434
- window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
435
- if (currentState.loading) return;
436
- set(searchAtom, {
437
- data: null,
438
- loading: true,
439
- error: null,
440
- lastQuery: params.query
441
- });
442
- try {
443
- const result = await getSearchServiceFunction()(params);
444
- set(searchAtom, {
445
- data: result,
446
- loading: false,
447
- error: null,
448
- lastQuery: params.query
449
- });
450
- } catch (error) {
451
- const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
452
- set(searchAtom, {
453
- data: null,
454
- loading: false,
455
- error: errorMessage,
456
- lastQuery: params.query
457
- });
458
- }
459
- });
460
-
461
- //#endregion
462
- Object.defineProperty(exports, 'ChatSearchTurnAtom', {
463
- enumerable: true,
464
- get: function () {
465
- return ChatSearchTurnAtom;
466
- }
467
- });
468
- Object.defineProperty(exports, 'ProductSorting', {
469
- enumerable: true,
470
- get: function () {
471
- return ProductSorting;
472
- }
473
- });
474
- Object.defineProperty(exports, 'addSearchFilterAtom', {
475
- enumerable: true,
476
- get: function () {
477
- return addSearchFilterAtom;
478
- }
479
- });
480
- Object.defineProperty(exports, 'additiveDynamicFiltersAtom', {
481
- enumerable: true,
482
- get: function () {
483
- return additiveDynamicFiltersAtom;
484
- }
485
- });
486
- Object.defineProperty(exports, 'chatSearchFiltersAtom', {
487
- enumerable: true,
488
- get: function () {
489
- return chatSearchFiltersAtom;
490
- }
491
- });
492
- Object.defineProperty(exports, 'chatSearchHasProductsAtom', {
493
- enumerable: true,
494
- get: function () {
495
- return chatSearchHasProductsAtom;
496
- }
497
- });
498
- Object.defineProperty(exports, 'chatSearchIdAtom', {
499
- enumerable: true,
500
- get: function () {
501
- return chatSearchIdAtom;
502
- }
503
- });
504
- Object.defineProperty(exports, 'chatSearchIsLoadingAtom', {
505
- enumerable: true,
506
- get: function () {
507
- return chatSearchIsLoadingAtom;
508
- }
509
- });
510
- Object.defineProperty(exports, 'chatSearchParamsAtom', {
511
- enumerable: true,
512
- get: function () {
513
- return chatSearchParamsAtom;
514
- }
515
- });
516
- Object.defineProperty(exports, 'chatSearchProductSortingAtom', {
517
- enumerable: true,
518
- get: function () {
519
- return chatSearchProductSortingAtom;
520
- }
521
- });
522
- Object.defineProperty(exports, 'chatSearchProducts', {
523
- enumerable: true,
524
- get: function () {
525
- return chatSearchProducts;
526
- }
527
- });
528
- Object.defineProperty(exports, 'chatSearchQueryAtom', {
529
- enumerable: true,
530
- get: function () {
531
- return chatSearchQueryAtom;
532
- }
533
- });
534
- Object.defineProperty(exports, 'chatSearchStateAtom', {
535
- enumerable: true,
536
- get: function () {
537
- return chatSearchStateAtom;
538
- }
539
- });
540
- Object.defineProperty(exports, 'clearSearchFiltersAtom', {
541
- enumerable: true,
542
- get: function () {
543
- return clearSearchFiltersAtom;
544
- }
545
- });
546
- Object.defineProperty(exports, 'clearSearchServiceFunction', {
547
- enumerable: true,
548
- get: function () {
549
- return clearSearchServiceFunction;
550
- }
551
- });
552
- Object.defineProperty(exports, 'createChatSearchFilterOption', {
553
- enumerable: true,
554
- get: function () {
555
- return createChatSearchFilterOption;
556
- }
557
- });
558
- Object.defineProperty(exports, 'createFilterOption', {
559
- enumerable: true,
560
- get: function () {
561
- return createFilterOption;
562
- }
563
- });
564
- Object.defineProperty(exports, 'filteredSearchProductsAtom', {
565
- enumerable: true,
566
- get: function () {
567
- return filteredSearchProductsAtom;
568
- }
569
- });
570
- Object.defineProperty(exports, 'formatFilterDisplayName', {
571
- enumerable: true,
572
- get: function () {
573
- return formatFilterDisplayName;
574
- }
575
- });
576
- Object.defineProperty(exports, 'getSearchParamsAtom', {
577
- enumerable: true,
578
- get: function () {
579
- return getSearchParamsAtom;
580
- }
581
- });
582
- Object.defineProperty(exports, 'handleSearchResultsAtom', {
583
- enumerable: true,
584
- get: function () {
585
- return handleSearchResultsAtom;
586
- }
587
- });
588
- Object.defineProperty(exports, 'initiateChatSearchAtom', {
589
- enumerable: true,
590
- get: function () {
591
- return initiateChatSearchAtom;
592
- }
593
- });
594
- Object.defineProperty(exports, 'internalSearchSystemStateAtom', {
595
- enumerable: true,
596
- get: function () {
597
- return internalSearchSystemStateAtom;
598
- }
599
- });
600
- Object.defineProperty(exports, 'performSearchAtom', {
601
- enumerable: true,
602
- get: function () {
603
- return performSearchAtom;
604
- }
605
- });
606
- Object.defineProperty(exports, 'removeSearchFilterAtom', {
607
- enumerable: true,
608
- get: function () {
609
- return removeSearchFilterAtom;
610
- }
611
- });
612
- Object.defineProperty(exports, 'searchAtom', {
613
- enumerable: true,
614
- get: function () {
615
- return searchAtom;
616
- }
617
- });
618
- Object.defineProperty(exports, 'searchFiltersAtom', {
619
- enumerable: true,
620
- get: function () {
621
- return searchFiltersAtom;
622
- }
623
- });
624
- Object.defineProperty(exports, 'searchParamsAtom', {
625
- enumerable: true,
626
- get: function () {
627
- return searchParamsAtom;
628
- }
629
- });
630
- Object.defineProperty(exports, 'searchProductSortingAtom', {
631
- enumerable: true,
632
- get: function () {
633
- return searchProductSortingAtom;
634
- }
635
- });
636
- Object.defineProperty(exports, 'searchSelectedFiltersAtom', {
637
- enumerable: true,
638
- get: function () {
639
- return searchSelectedFiltersAtom;
640
- }
641
- });
642
- Object.defineProperty(exports, 'searchSystemAtom', {
643
- enumerable: true,
644
- get: function () {
645
- return searchSystemAtom;
646
- }
647
- });
648
- Object.defineProperty(exports, 'selectedFilterOptionsAtom', {
649
- enumerable: true,
650
- get: function () {
651
- return selectedFilterOptionsAtom;
652
- }
653
- });
654
- Object.defineProperty(exports, 'setChatSearchParamsAtom', {
655
- enumerable: true,
656
- get: function () {
657
- return setChatSearchParamsAtom;
658
- }
659
- });
660
- Object.defineProperty(exports, 'setSearchParams', {
661
- enumerable: true,
662
- get: function () {
663
- return setSearchParams;
664
- }
665
- });
666
- Object.defineProperty(exports, 'setSearchServiceFunction', {
667
- enumerable: true,
668
- get: function () {
669
- return setSearchServiceFunction;
670
- }
671
- });
672
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLURmMElmbmVnLmNqcyIsIm5hbWVzIjpbIk1lc3NhZ2VUeXBlIiwibmV3T3JnQ29uZmlnQXRvbSIsIm1lc3NhZ2VzQXRvbSIsInJlcGx5RXZlbnRDYXRlZ29yeUF0b20iLCJVc2VyRXZlbnRDYXRlZ29yeSIsInVzZXJRdWVyeUF0b20iLCJ1c2VySGFzUmVwbGllZEF0b20iLCJxdWV1ZVVzZXJFdmVudEF0b20iLCJNZXNzYWdlUm9sZSIsInNlYXJjaFNlcnZpY2VGdW5jdGlvbjpcbiAgfCAoKHBhcmFtczogU2VhcmNoUGFyYW1zKSA9PiBQcm9taXNlPFNlYXJjaFJlc3VsdD4pXG4gIHwgbnVsbCIsIm5ld09yZ0NvbmZpZ0F0b20iLCJlcnJvcjogdW5rbm93biJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hdG9tcy9zZWFyY2gvdXRpbHMudHMiLCIuLi9zcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RGaWx0ZXJzLnRzIiwiLi4vc3JjL2F0b21zL3NlYXJjaC90eXBlcy50cyIsIi4uL3NyYy9hdG9tcy9zZWFyY2gvcHJvZHVjdFNvcnRlci50cyIsIi4uL3NyYy9hdG9tcy9zZWFyY2gvY2hhdFNlYXJjaC50cyIsIi4uL3NyYy9hdG9tcy9zZWFyY2gvc2VhcmNoU2VydmljZUFkYXB0ZXIudHMiLCIuLi9zcmMvYXRvbXMvc2VhcmNoL3NlYXJjaEFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBzaXplcyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJywgJ3h4eGwnLCAneHh4eGwnXTtcblxuICBjb25zdCBwcm9jZXNzZWRXb3JkcyA9IGRpc3BsYXlOYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgIGlmIChzaXplcy5pbmNsdWRlcyh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHRpdGxlQ2FzZWROYW1lID0gcHJvY2Vzc2VkV29yZHMuam9pbignICcpO1xuXG4gIC8vIEZpbmFsIHJlcGxhY2VtZW50cyBmb3Igc3BlY2lhbCBjYXNlc1xuICByZXR1cm4gdGl0bGVDYXNlZE5hbWUucmVwbGFjZSgvSXBob25lL2csICdpUGhvbmUnKTtcbn07XG4iLCJpbXBvcnQgeyBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBGaWx0ZXJBdHRyaWJ1dGUgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXMnO1xuaW1wb3J0IHsgU2VsZWN0ZWRGaWx0ZXJPcHRpb24gfSBmcm9tICdzcmMvYXRvbXMvc2VhcmNoL3NlYXJjaEFQSSc7XG5pbXBvcnQgeyBDaGF0U2VhcmNoRmlsdGVyLCBDaGF0U2VhcmNoRmlsdGVySXRlbSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZ2V0UHJpY2VCdWNrZXQgPSAocHJpY2U6IG51bWJlciwgYnVja2V0U2l6ZTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGJ1Y2tldCA9IE1hdGguZmxvb3IocHJpY2UgLyBidWNrZXRTaXplKTtcbiAgcmV0dXJuIGJ1Y2tldCAqIGJ1Y2tldFNpemU7XG59O1xuXG5jb25zdCBpc1N0cmluZ0FycmF5ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3RyaW5nW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbn07XG5cbnR5cGUgRmlsdGVyU29ydEZ1bmN0aW9uID0gKGE6IENoYXRTZWFyY2hGaWx0ZXJJdGVtLCBiOiBDaGF0U2VhcmNoRmlsdGVySXRlbSkgPT4gbnVtYmVyO1xuXG5jb25zdCBzb3J0RmlsdGVyID0gKGZpbHRlckNvbmZpZzogRmlsdGVyQXR0cmlidXRlKTogRmlsdGVyU29ydEZ1bmN0aW9uID0+IHtcbiAgaWYgKGZpbHRlckNvbmZpZy50eXBlID09PSAncHJpY2UnKSB7XG4gICAgcmV0dXJuIChhLCBiKSA9PiBOdW1iZXIoYS5maWx0ZXJJdGVtSWQpIC0gTnVtYmVyKGIuZmlsdGVySXRlbUlkKTtcbiAgfVxuICBpZiAoZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdkeW5hbWljJykge1xuICAgIGlmIChmaWx0ZXJDb25maWcuc29ydGluZy50eXBlID09PSAnYWxwaGFiZXRpYycpIHtcbiAgICAgIHJldHVybiAoYSwgYikgPT4gYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpO1xuICAgIH1cbiAgICAvLyBTb3J0IGJ5IHRoZSBudW1iZXIgb2YgcHJvZHVjdHMsIGlmIHRoZXkgbWF0Y2gsIHNvcnQgYnkgYWxwaGFiZXRpY2FsXG4gICAgaWYgKGZpbHRlckNvbmZpZy5zb3J0aW5nLnR5cGUgPT09ICdwcm9kdWN0Q291bnQnKSB7XG4gICAgICByZXR1cm4gKGEsIGIpID0+XG4gICAgICAgIGEucHJvZHVjdENvdW50ID09PSBiLnByb2R1Y3RDb3VudFxuICAgICAgICAgID8gYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpXG4gICAgICAgICAgOiBiLnByb2R1Y3RDb3VudCAtIGEucHJvZHVjdENvdW50O1xuICAgIH1cbiAgICBpZiAoZmlsdGVyQ29uZmlnLnNvcnRpbmcudHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIGNvbnN0IHNvcnRlZEtleXMgPSBmaWx0ZXJDb25maWcuc29ydGluZy5tYXA7XG4gICAgICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKHNvcnRlZEtleXNbYS5kaXNwbGF5TmFtZV0gJiYgc29ydGVkS2V5c1tiLmRpc3BsYXlOYW1lXSkge1xuICAgICAgICAgIC8vIElmIGJvdGggYXJlIGluIHRoZSBzb3J0ZWRLZXlzLCBzb3J0IGJ5IHRoZSBpbmRleFxuICAgICAgICAgIHJldHVybiBzb3J0ZWRLZXlzW2EuZGlzcGxheU5hbWVdIC0gc29ydGVkS2V5c1tiLmRpc3BsYXlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBvbmx5ICdhJyBpcyBpbiB0aGUgc29ydGVkS2V5cywgcHV0IGl0IGJlZm9yZSB0aGUgb3RoZXJcbiAgICAgICAgaWYgKHNvcnRlZEtleXNbYS5kaXNwbGF5TmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgb25seSAnYicgaXMgaW4gdGhlIHNvcnRlZEtleXMsIHB1dCBpdCBiZWZvcmUgdGhlIG90aGVyXG4gICAgICAgIGlmIChzb3J0ZWRLZXlzW2IuZGlzcGxheU5hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbmVpdGhlciBhcmUgaW4gdGhlIHNvcnRlZEtleXMsIHNvcnQgYnkgcHJvZHVjdENvdW50XG4gICAgICAgIHJldHVybiBiLnByb2R1Y3RDb3VudCAtIGEucHJvZHVjdENvdW50O1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhYWxpZCBzZWFyY2ggZmlsdGVyIGNvbmZpZ3VyYXRpb24nKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0RmlsdGVycyB7XG4gIHN0YXRpYyBnZXRGaWx0ZXJzRm9yUHJvZHVjdHMoXG4gICAgcHJvZHVjdHM6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdLFxuICAgIGZpbHRlckNvbmZpZ3M6IEZpbHRlckF0dHJpYnV0ZVtdLFxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogU2VsZWN0ZWRGaWx0ZXJPcHRpb25bXSxcbiAgKTogQ2hhdFNlYXJjaEZpbHRlcltdIHtcbiAgICBpZiAoIXByb2R1Y3RzIHx8IHByb2R1Y3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcnMgPSBmaWx0ZXJDb25maWdzLm1hcCgoZmlsdGVyQ29uZmlnKSA9PlxuICAgICAgcHJvZHVjdHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBwcm9kdWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJpY2UgaGFzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSBmaWx0ZXJzXG4gICAgICAgICAgaWYgKGZpbHRlckNvbmZpZy50eXBlID09PSAncHJpY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBwcmljZUJ1Y2tldCA9IGdldFByaWNlQnVja2V0KFxuICAgICAgICAgICAgICBwcm9kdWN0LnNhbGVQcmljZSA/PyBwcm9kdWN0Lm9yaWdpbmFsUHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgZmlsdGVyQ29uZmlnLmJ1Y2tldFNpemUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGFjYy5tYXBbcHJpY2VCdWNrZXRdID8/IHtcbiAgICAgICAgICAgICAgZmlsdGVySXRlbUlkOiBwcmljZUJ1Y2tldCxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAkJHtwcmljZUJ1Y2tldH0tJCR7cHJpY2VCdWNrZXQgKyBmaWx0ZXJDb25maWcuYnVja2V0U2l6ZX1gLFxuICAgICAgICAgICAgICBwcm9kdWN0Q291bnQ6IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjLm1hcFtwcmljZUJ1Y2tldF0gPSB7IC4uLmN1cnJlbnQsIHByb2R1Y3RDb3VudDogY3VycmVudC5wcm9kdWN0Q291bnQgKyAxIH07XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBcImF0dHJpYnV0ZVwiIGlzIGFuIGFycmF5IG9mIHZhbHVlc1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlcyA9XG4gICAgICAgICAgICAocHJvZHVjdC5maWx0ZXJzICYmIHByb2R1Y3QuZmlsdGVycz8uW2ZpbHRlckNvbmZpZy5hdHRyaWJ1dGVdKSA/PyBbXTtcbiAgICAgICAgICBpZiAoaXNTdHJpbmdBcnJheShhdHRyaWJ1dGVWYWx1ZXMpKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGFjYy5tYXBbbm9ybWFsaXplZFZhbF0gPz8ge1xuICAgICAgICAgICAgICAgIGZpbHRlckl0ZW1JZDogbm9ybWFsaXplZFZhbCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUodmFsKSwgLy8gS2VlcCBvcmlnaW5hbCBjYXNlIGZvciBkaXNwbGF5XG4gICAgICAgICAgICAgICAgcHJvZHVjdENvdW50OiAwLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBhY2MubWFwW25vcm1hbGl6ZWRWYWxdID0geyAuLi5jdXJyZW50LCBwcm9kdWN0Q291bnQ6IGN1cnJlbnQucHJvZHVjdENvdW50ICsgMSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbHRlckNvbmZpZyxcbiAgICAgICAgICBtYXA6IHt9IGFzIFJlY29yZDxzdHJpbmcsIENoYXRTZWFyY2hGaWx0ZXJJdGVtPixcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRmlsdGVyczogQ2hhdFNlYXJjaEZpbHRlcltdID0gZmlsdGVycy5tYXAoKHsgZmlsdGVyQ29uZmlnLCBtYXAgfSkgPT4gKHtcbiAgICAgIGZpbHRlcklkOiBmaWx0ZXJDb25maWcuZmlsdGVySWQsXG4gICAgICBkaXNwbGF5TmFtZTogZmlsdGVyQ29uZmlnLmRpc3BsYXlOYW1lLFxuICAgICAgaXRlbXM6IE9iamVjdC52YWx1ZXMobWFwKVxuICAgICAgICAubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgZmlsdGVySXRlbUlkOiBmaWx0ZXIuZmlsdGVySXRlbUlkLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBmaWx0ZXIuZGlzcGxheU5hbWUsXG4gICAgICAgICAgcHJvZHVjdENvdW50OiBmaWx0ZXIucHJvZHVjdENvdW50LFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6XG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBgJHtmaWx0ZXJDb25maWcuZmlsdGVySWR9OiR7ZmlsdGVyLmZpbHRlckl0ZW1JZH1gLFxuICAgICAgICAgICAgKSA/PyBmYWxzZSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5zb3J0KHNvcnRGaWx0ZXIoZmlsdGVyQ29uZmlnKSksXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIFsuLi50cmFuc2Zvcm1lZEZpbHRlcnNdO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlclByb2R1Y3RzKFxuICAgIHByb2R1Y3RzOiBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ11bXSxcbiAgICBmaWx0ZXJDb25maWdzOiBGaWx0ZXJBdHRyaWJ1dGVbXSxcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IFNlbGVjdGVkRmlsdGVyT3B0aW9uW10sXG4gICAgYWRkaXRpdmVEeW5hbWljRmlsdGVycyA9IGZhbHNlLCAvLyBTZXQgdGhpcyB0byB0cnVlIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJlaGF2aW9yIHdoZXJlIHN0YWNraW5nIGZpbHRlcnMgaGFzIE9SIGxvZ2ljLlxuICApIHtcbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlcnMgPSBmaWx0ZXJDb25maWdzXG4gICAgICAubWFwKChmaWx0ZXJDb25maWcpID0+ICh7XG4gICAgICAgIGZpbHRlckNvbmZpZyxcbiAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uZmlsdGVySWQgPT09IGZpbHRlckNvbmZpZy5maWx0ZXJJZCxcbiAgICAgICAgKSxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBoYXNTZWxlY3RlZE9wdGlvbnMgfSkgPT4gaGFzU2VsZWN0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCA9PT0gMFxuICAgICAgPyBwcm9kdWN0c1xuICAgICAgOiBwcm9kdWN0cy5maWx0ZXIoKHByb2R1Y3QpID0+XG4gICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJzLnJlZHVjZSgoYWNjLCBzZWxlY3RlZEZpbHRlcikgPT4ge1xuICAgICAgICAgICAgLy8gRmluZGluZyBvbmUgZmFsc2UgcmVtb3ZlcyB0aGUgcHJvZHVjdFxuICAgICAgICAgICAgaWYgKCFhY2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFByaWNlIGlzIHNwZWNpYWxcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWcudHlwZSA9PT0gJ3ByaWNlJykge1xuICAgICAgICAgICAgICBjb25zdCBwcmljZUJ1Y2tldCA9IGdldFByaWNlQnVja2V0KFxuICAgICAgICAgICAgICAgIHByb2R1Y3Quc2FsZVByaWNlID8/IHByb2R1Y3Qub3JpZ2luYWxQcmljZSA/PyAwLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy5idWNrZXRTaXplLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzUHJpY2VGaWx0ZXIgPSBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGBwcmljZToke3ByaWNlQnVja2V0fWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghbWF0Y2hlc1ByaWNlRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWcudHlwZSA9PT0gJ2R5bmFtaWMnKSB7XG4gICAgICAgICAgICAgIC8vIGR5bmFtaWMgaXMgbWlzbGVhZGluZyBoZXJlLiBJdHMgbm90IGp1c3QgZHluYW1pYyBmaWx0ZXJzLCBidXQgc3RhdGljIGZpbHRlcnMgYmVjYXVzZSB0aGUgY29uZmlnIGNvdW50cyBzdGF0aWMgZmlsdGVycyBhcyB0eXBlOiBkeW5hbWljLlxuICAgICAgICAgICAgICBjb25zdCB7IGZpbHRlcklkLCBhdHRyaWJ1dGUgfSA9IHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZztcbiAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVmFsdWVzID0gcHJvZHVjdC5maWx0ZXJzPy5bYXR0cmlidXRlXTtcblxuICAgICAgICAgICAgICBpZiAoIWlzU3RyaW5nQXJyYXkoYXR0cmlidXRlVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGlzRHluYW1pY0ZpbHRlciA9IHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy5hdHRyaWJ1dGUgPT09ICdkeW5hbWljJzsgLy8gVHJ1ZSBkeW5hbWljIGZpbHRlcnMgKHRoZSBvbmVzIHRoYXQgYXBwZWFyIGJlbmVhdGggdGhlIHNlYXJjaCBpbnB1dClcbiAgICAgICAgICAgICAgY29uc3QgaXNTdWJ0cmFjdGl2ZUxvZ2ljID0gaXNEeW5hbWljRmlsdGVyICYmICFhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzO1xuXG4gICAgICAgICAgICAgIGlmIChpc1N1YnRyYWN0aXZlTG9naWMpIHtcbiAgICAgICAgICAgICAgICAvLyBBTkQgbG9naWMgZm9yIHN1YnRyYWN0aXZlIGR5bmFtaWMgZmlsdGVycyBhbmQgYmV0d2VlbiBzdGF0aWMgZmlsdGVyIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnNGb3JUaGlzRmlsdGVyID0gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5maWx0ZXJJZCA9PT0gZmlsdGVySWQpXG4gICAgICAgICAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi5maWx0ZXJJdGVtSWQudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNBbGxTZWxlY3RlZFZhbHVlcyA9IHNlbGVjdGVkT3B0aW9uc0ZvclRoaXNGaWx0ZXIuZXZlcnkoKHNlbGVjdGVkVmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMuc29tZSgodmFsKSA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRWYWx1ZSksXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmICghaGFzQWxsU2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT1IgbG9naWMgZm9yIHN0YXRpYyBmaWx0ZXJzIGluIHRoZSBzaWRlYmFyIHdpdGhpbiBhIGNhdGVnb3J5LlxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBhdHRyaWJ1dGVWYWx1ZXMuc29tZSgodmFsKSA9PlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gYCR7ZmlsdGVySWR9OiR7dmFsLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sIHRydWUpLFxuICAgICAgICApO1xuICB9XG59XG4iLCJleHBvcnQgZW51bSBQcm9kdWN0U29ydGluZyB7XG4gIEZFQVRVUkVEID0gJ2ZlYXR1cmVkJyxcbiAgUFJJQ0VfQVNDID0gJ3ByaWNlX2FzYycsXG4gIFBSSUNFX0RFU0MgPSAncHJpY2VfZGVzYycsXG59XG5cbmV4cG9ydCBjb25zdCBQcm9kdWN0U29ydGluZ05hbWVzID0ge1xuICBbUHJvZHVjdFNvcnRpbmcuRkVBVFVSRURdOiAnRmVhdHVyZWQnLFxuICBbUHJvZHVjdFNvcnRpbmcuUFJJQ0VfQVNDXTogJ1ByaWNlIExvdyB0byBIaWdoJyxcbiAgW1Byb2R1Y3RTb3J0aW5nLlBSSUNFX0RFU0NdOiAnUHJpY2UgSGlnaCB0byBMb3cnLFxufTtcblxuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaFN0YXRlVHlwZSA9ICdlbnRyeXBvaW50JyB8ICdpbml0aWFsaXppbmctc2VhcmNoJyB8ICdwcm9kdWN0LXBhZ2UnO1xuXG5leHBvcnQgdHlwZSBDaGF0U2VhcmNoRmlsdGVyID0ge1xuICBmaWx0ZXJJZDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBpdGVtczogQ2hhdFNlYXJjaEZpbHRlckl0ZW1bXTtcbn07XG5cbmV4cG9ydCB0eXBlIENoYXRTZWFyY2hGaWx0ZXJJdGVtID0ge1xuICBmaWx0ZXJJdGVtSWQ6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgcHJvZHVjdENvdW50OiBudW1iZXI7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRTZWFyY2hTb3J0UHJvcHMge1xuICBvcHRpb25zOiBQcm9kdWN0U29ydGluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRTZWFyY2hTb3J0TW9kYWxQcm9wcyBleHRlbmRzIENoYXRTZWFyY2hTb3J0UHJvcHMge1xuICBvcGVuOiBib29sZWFuO1xuICBoYW5kbGVQb3B1cFN0YXRlOiAoc3RhdGU6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydE9wdGlvbiB7XG4gIHZhbHVlOiBQcm9kdWN0U29ydGluZztcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbiAgb25TZWxlY3Q6IChvcHRpb246IFByb2R1Y3RTb3J0aW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZW51bSBDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyB7XG4gIERFU0tUT1BfRklMVEVSX0NPTlRBSU5FUiA9ICdzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLWNvbnRhaW5lcicsXG4gIERFU0tUT1BfRklMVEVSX1NFTEVDVF9DT01QT05FTlQgPSAnc3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1zZWxlY3QtY29tcG9uZW50JyxcbiAgREVTS1RPUF9GSUxURVJfU0VMRUNUX0lDT04gPSAnc3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1zZWxlY3QtaWNvbicsXG4gIE1PQklMRV9GSUxURVJfQlVUVE9OID0gJ3NwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItYnV0dG9uJyxcbiAgTU9CSUxFX0ZJTFRFUl9NT0RBTF9DT05UQUlORVIgPSAnc3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1jb250YWluZXInLFxuICBNT0JJTEVfRklMVEVSX01PREFMX0hFQURFUiA9ICdzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWhlYWRlcicsXG4gIE1PQklMRV9GSUxURVJfTU9EQUxfU0VMRUNUSU9OID0gJ3NwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtc2VsZWN0aW9uJyxcbiAgTU9CSUxFX0ZJTFRFUl9NT0RBTF9PUFRJT04gPSAnc3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1vcHRpb24nLFxuICBNT0JJTEVfRklMVEVSX01PREFMX09QVElPTl9QSUxMID0gJ3NwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtb3B0aW9uLXBpbGwnLFxuICBNT0JJTEVfRklMVEVSX01PREFMX09QVElPTl9ERVNDUklQVElPTiA9ICdzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLW9wdGlvbi1kZXNjJyxcbiAgTU9CSUxFX0ZJTFRFUl9NT0RBTF9BUFBMWV9CVVRUT04gPSAnc3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1hcHBseS1idXR0b24nLFxufVxuIiwiaW1wb3J0IHsgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgUHJvZHVjdFNvcnRpbmcgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFByb2R1Y3RTb3J0ZXIge1xuICBzdGF0aWMgc29ydChwcm9kdWN0czogUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddW10sIHNvcnRpbmc6IFByb2R1Y3RTb3J0aW5nKSB7XG4gICAgc3dpdGNoIChzb3J0aW5nKSB7XG4gICAgICBjYXNlIFByb2R1Y3RTb3J0aW5nLlBSSUNFX0FTQzpcbiAgICAgICAgcmV0dXJuIFsuLi5wcm9kdWN0c10uc29ydChcbiAgICAgICAgICAocDEsIHAyKSA9PlxuICAgICAgICAgICAgKHAxLnNhbGVQcmljZSA/PyBwMS5vcmlnaW5hbFByaWNlID8/IDApIC0gKHAyLnNhbGVQcmljZSA/PyBwMi5vcmlnaW5hbFByaWNlID8/IDApLFxuICAgICAgICApO1xuXG4gICAgICBjYXNlIFByb2R1Y3RTb3J0aW5nLlBSSUNFX0RFU0M6XG4gICAgICAgIHJldHVybiBbLi4ucHJvZHVjdHNdLnNvcnQoXG4gICAgICAgICAgKHAxLCBwMikgPT5cbiAgICAgICAgICAgIChwMi5zYWxlUHJpY2UgPz8gcDIub3JpZ2luYWxQcmljZSA/PyAwKSAtIChwMS5zYWxlUHJpY2UgPz8gcDEub3JpZ2luYWxQcmljZSA/PyAwKSxcbiAgICAgICAgKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RzO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IGF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7XG4gIE1lc3NhZ2UsXG4gIE1lc3NhZ2VSb2xlLFxuICBNZXNzYWdlVHlwZSxcbiAgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmltcG9ydCB7XG4gIG1lc3NhZ2VzQXRvbSxcbiAgcmVwbHlFdmVudENhdGVnb3J5QXRvbSxcbiAgdXNlckhhc1JlcGxpZWRBdG9tLFxuICB1c2VyUXVlcnlBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL2NoYXRcIjtcbmltcG9ydCB7IHF1ZXVlVXNlckV2ZW50QXRvbSB9IGZyb20gXCIuLi9jaGF0L21lc3NhZ2VRdWV1ZVwiO1xuaW1wb3J0IHsgbmV3T3JnQ29uZmlnQXRvbSB9IGZyb20gXCIuLi9vcmdcIjtcbmltcG9ydCB7IFByb2R1Y3RGaWx0ZXJzIH0gZnJvbSBcIi4vcHJvZHVjdEZpbHRlcnNcIjtcbmltcG9ydCB7IFByb2R1Y3RTb3J0ZXIgfSBmcm9tIFwiLi9wcm9kdWN0U29ydGVyXCI7XG5pbXBvcnQgeyBDaGF0U2VhcmNoU3RhdGVUeXBlLCBQcm9kdWN0U29ydGluZyB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIE5PVEU6XG4vLyBUaGlzIGlzIGEgbGVnYWN5IHZlcnNpb24gb2Ygc2VhcmNoIHRoYXQgbmVlZHMgdG8gYmUgZGVjb3VwbGVkIGFuZCByZW1vdmVkLlxuLy8gdGhlIG5ldyBzZWFyY2gudHMgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSBpcyBsaWtlbHkgd2hhdCB5b3UncmUgbG9va2luZyBmb3IuXG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoU3RhdGVBdG9tID0gYXRvbTxDaGF0U2VhcmNoU3RhdGVUeXBlPihcImVudHJ5cG9pbnRcIik7XG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaEhhc1Byb2R1Y3RzQXRvbSA9IGF0b208Ym9vbGVhbj4oZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hQcm9kdWN0U29ydGluZ0F0b20gPSBhdG9tPFByb2R1Y3RTb3J0aW5nPihcbiAgUHJvZHVjdFNvcnRpbmcuRkVBVFVSRURcbik7XG5cbmNvbnN0IGZpbHRlclByb2R1Y3RMaXN0ID0gKG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG4gIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdCAmJiBtZXNzYWdlLm1ldGFkYXRhLmlzRm9yR3JpZCA9PT0gdHJ1ZTtcbmNvbnN0IGZpbHRlckZpbHRlckxpc3QgPSAobWVzc2FnZTogTWVzc2FnZSkgPT5cbiAgbWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoRmlsdGVyO1xuXG5leHBvcnQgdHlwZSBDaGF0U2VhcmNoVHVybiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZ2VuZXJhdGVkUXVlcnk/OiBzdHJpbmc7XG4gIHByb2R1Y3RDb3VudDogbnVtYmVyO1xuICBwcm9kdWN0TGlzdDogUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1tcImF0dHJpYnV0ZXNcIl1bXTtcbiAgZmlsdGVyTGlzdDogc3RyaW5nW107XG4gIG1lc3NhZ2VzOiBNZXNzYWdlW107XG59O1xuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaElzTG9hZGluZ0F0b20gPSBhdG9tKGZhbHNlKTtcblxuY29uc3QgYnVpbGRDaGF0U2VhcmNoVHVybiA9IChcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVxuKTogW3N0cmluZywgQ2hhdFNlYXJjaFR1cm5dIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHF1ZXJ5TWVzc2FnZSA9IG1lc3NhZ2VzLmZpbmQoXG4gICAgKG1lc3NhZ2UpID0+IG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaFxuICApO1xuICBpZiAoIXF1ZXJ5TWVzc2FnZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHsgZ2VuZXJhdGVkUXVlcnksIHByb2R1Y3RDb3VudCB9ID0gcXVlcnlNZXNzYWdlLm1ldGFkYXRhID8/IHt9O1xuICBjb25zdCBwcm9kdWN0TGlzdCA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihmaWx0ZXJQcm9kdWN0TGlzdClcbiAgICAubWFwKChtZXNzYWdlKSA9PiAobWVzc2FnZSBhcyBhbnkpLm1ldGFkYXRhKTtcbiAgY29uc3QgZmlsdGVyTGlzdCA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihmaWx0ZXJGaWx0ZXJMaXN0KVxuICAgIC5tYXAoKG1lc3NhZ2UpID0+IG1lc3NhZ2UubWV0YWRhdGEuZmlsdGVyTmFtZSk7XG4gIHJldHVybiBbXG4gICAgcXVlcnlNZXNzYWdlLmlkLFxuICAgIHtcbiAgICAgIGlkOiBxdWVyeU1lc3NhZ2UuaWQsXG4gICAgICBnZW5lcmF0ZWRRdWVyeSxcbiAgICAgIHByb2R1Y3RDb3VudDogcHJvZHVjdENvdW50IHx8IHByb2R1Y3RMaXN0Lmxlbmd0aCxcbiAgICAgIHByb2R1Y3RMaXN0LFxuICAgICAgZmlsdGVyTGlzdCxcbiAgICAgIG1lc3NhZ2VzLFxuICAgIH0sXG4gIF07XG59O1xuXG5jb25zdCBjaGF0U2VhcmNoRmlsdGVyQ29uZmlnQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBuZXdPcmdDb25maWcgPSBnZXQobmV3T3JnQ29uZmlnQXRvbSk7XG4gIHJldHVybiAoXG4gICAgbmV3T3JnQ29uZmlnPy5mcm9udGVuZENvbmZpZz8udWlDb25maWdzPy5zZWFyY2hDb25maWc/LnNlYXJjaEZpbHRlckNvbmZpZyB8fFxuICAgIFtdXG4gICk7XG59KTtcblxuY29uc3Qgc2VhcmNoTWFwQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBtZXNzYWdlcyA9IGdldChtZXNzYWdlc0F0b20pO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIG1lc3NhZ2VzLm1hcChidWlsZENoYXRTZWFyY2hUdXJuKS5maWx0ZXIoKHYpID0+IHYgIT09IG51bGwpXG4gICk7XG59KTtcblxuY29uc3QgaW50ZXJuYWxDaGF0U2VhcmNoUGFyYW1zQXRvbSA9IGF0b208e1xuICBpZDogc3RyaW5nIHwgbnVsbDtcbiAgcXVlcnk6IHN0cmluZyB8IG51bGw7XG59Pih7XG4gIGlkOiBudWxsLFxuICBxdWVyeTogbnVsbCxcbn0pO1xuXG4vLyBTZWxlY3RlZCBmaWx0ZXIgb3B0aW9ucyB3aXRoIGNvbXBvdW5kIG9iamVjdHMgZm9yIGJldHRlciB0eXBlIHNhZmV0eSBhbmQgZGlzcGxheVxuZXhwb3J0IHR5cGUgU2VsZWN0ZWRDaGF0U2VhcmNoRmlsdGVyT3B0aW9uID0ge1xuICBpZDogc3RyaW5nOyAvLyBcImZpbHRlcklkOmZpbHRlckl0ZW1JZFwiIC0gbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIGNvbXBhcmlzb25zXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGZpbHRlcklkOiBzdHJpbmc7IC8vIEZpbHRlciBjYXRlZ29yeVxuICBmaWx0ZXJJdGVtSWQ6IHN0cmluZzsgLy8gRmlsdGVyIHZhbHVlXG59O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zQXRvbSA9IGF0b208U2VsZWN0ZWRDaGF0U2VhcmNoRmlsdGVyT3B0aW9uW10+KFxuICBbXVxuKTtcblxuZXhwb3J0IGNvbnN0IGFkZGl0aXZlRHluYW1pY0ZpbHRlcnNBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IG5ld09yZ0NvbmZpZyA9IGdldChuZXdPcmdDb25maWdBdG9tKTtcbiAgcmV0dXJuIChcbiAgICBuZXdPcmdDb25maWc/LmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZ1xuICAgICAgPy5hZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzID8/IGZhbHNlXG4gICk7XG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNoYXRTZWFyY2hGaWx0ZXJPcHRpb24gPSAoXG4gIGZpbHRlcklkOiBzdHJpbmcsXG4gIGZpbHRlckl0ZW1JZDogc3RyaW5nLFxuICBkaXNwbGF5TmFtZTogc3RyaW5nXG4pOiBTZWxlY3RlZENoYXRTZWFyY2hGaWx0ZXJPcHRpb24gPT4gKHtcbiAgaWQ6IGAke2ZpbHRlcklkfToke2ZpbHRlckl0ZW1JZH1gLFxuICBkaXNwbGF5TmFtZSxcbiAgZmlsdGVySWQsXG4gIGZpbHRlckl0ZW1JZCxcbn0pO1xuXG5jb25zdCBoYW5kbGVTZWFyY2hBdG9tID0gYXRvbShudWxsLCAoZ2V0LCBzZXQsIG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcbiAgaWYgKG1lc3NhZ2UudHlwZSAhPT0gTWVzc2FnZVR5cGUuU2VhcmNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcXVlcnlTZWFyY2ggPSBtZXNzYWdlLm1ldGFkYXRhLnNlYXJjaFRlcm07XG5cbiAgc2V0KHJlcGx5RXZlbnRDYXRlZ29yeUF0b20sIFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCk7XG4gIHNldCh1c2VyUXVlcnlBdG9tLCBxdWVyeVNlYXJjaCk7XG4gIHNldChtZXNzYWdlc0F0b20sIFsuLi5nZXQobWVzc2FnZXNBdG9tKSwgW21lc3NhZ2VdXSk7XG4gIHNldCh1c2VySGFzUmVwbGllZEF0b20sIHRydWUpO1xuXG4gIHNldChxdWV1ZVVzZXJFdmVudEF0b20sIHtcbiAgICBldmVudElkOiBtZXNzYWdlLmlkLFxuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gsXG4gICAgY3JlYXRlZEF0OiBtZXNzYWdlLmNyZWF0ZWRBdCxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBzZWFyY2hUZXJtOiBtZXNzYWdlLm1ldGFkYXRhLnNlYXJjaFRlcm0sXG4gICAgICBzZWxlY3RlZEZpbHRlcnM6IG1lc3NhZ2UubWV0YWRhdGEuc2VsZWN0ZWRGaWx0ZXJzLFxuICAgIH0sXG4gIH0pO1xufSk7XG5cbi8vIFRoaXMgaW50ZXJuYWwgYXRvbSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBzZWFyY2ggcGFyYW1zXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tKFxuICAoZ2V0KSA9PiBnZXQoaW50ZXJuYWxDaGF0U2VhcmNoUGFyYW1zQXRvbSksXG4gIChfLCBzZXQsIHZhbHVlOiB7IGlkOiBzdHJpbmcgfCBudWxsOyBxdWVyeTogc3RyaW5nIHwgbnVsbCB9KSA9PiB7XG4gICAgc2V0KGludGVybmFsQ2hhdFNlYXJjaFBhcmFtc0F0b20sIHZhbHVlKTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hRdWVyeUF0b20gPSBhdG9tKFxuICAoZ2V0KSA9PiBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pPy5xdWVyeSA/PyBudWxsLFxuICAoZ2V0LCBzZXQsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKTtcbiAgICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IHNlYXJjaFBhcmFtcy5pZCwgcXVlcnk6IHZhbHVlIH0pO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaElkQXRvbSA9IGF0b20oXG4gIChnZXQpID0+IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk/LmlkID8/IG51bGwsXG4gIChnZXQsIHNldCwgdmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pO1xuICAgIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogdmFsdWUsIHF1ZXJ5OiBzZWFyY2hQYXJhbXMucXVlcnkgfSk7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBDaGF0U2VhcmNoVHVybkF0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3Qgc2VhcmNoRmlsdGVyQ29uZmlnID0gZ2V0KGNoYXRTZWFyY2hGaWx0ZXJDb25maWdBdG9tKTtcbiAgY29uc3Qgc2VhcmNoTWFwID0gZ2V0KHNlYXJjaE1hcEF0b20pO1xuICBjb25zdCBjaGF0U2VhcmNoSWQgPSBnZXQoY2hhdFNlYXJjaElkQXRvbSk7XG4gIGlmICghY2hhdFNlYXJjaElkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgQ2hhdFNlYXJjaFR1cm4gPSBzZWFyY2hNYXBbY2hhdFNlYXJjaElkXTtcbiAgaWYgKCFDaGF0U2VhcmNoVHVybikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHByb2R1Y3RTb3J0aW5nID0gZ2V0KGNoYXRTZWFyY2hQcm9kdWN0U29ydGluZ0F0b20pO1xuICBjb25zdCBzZWxlY3RlZEZpbHRlck9wdGlvbnMgPSBnZXQoc2VsZWN0ZWRGaWx0ZXJPcHRpb25zQXRvbSk7XG4gIGNvbnN0IGFkZGl0aXZlRHluYW1pY0ZpbHRlcnMgPSBnZXQoYWRkaXRpdmVEeW5hbWljRmlsdGVyc0F0b20pO1xuICBjb25zdCBmaWx0ZXJlZFByb2R1Y3RzID0gUHJvZHVjdEZpbHRlcnMuZmlsdGVyUHJvZHVjdHMoXG4gICAgQ2hhdFNlYXJjaFR1cm4ucHJvZHVjdExpc3QsXG4gICAgc2VhcmNoRmlsdGVyQ29uZmlnLFxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9ucyxcbiAgICBhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzXG4gICk7XG5cbiAgY29uc3QgZmlsdGVyZWRBbmRTb3J0ZWRQcm9kdWN0cyA9IFByb2R1Y3RTb3J0ZXIuc29ydChcbiAgICBmaWx0ZXJlZFByb2R1Y3RzLFxuICAgIHByb2R1Y3RTb3J0aW5nXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zZWFyY2hNYXBbY2hhdFNlYXJjaElkXSxcbiAgICBwcm9kdWN0TGlzdDogZmlsdGVyZWRBbmRTb3J0ZWRQcm9kdWN0cyxcbiAgICBwcm9kdWN0Q291bnQ6IGZpbHRlcmVkQW5kU29ydGVkUHJvZHVjdHMubGVuZ3RoLFxuICB9O1xufSk7XG5cbi8vIFRPRE86IFdvcmsgb24gZGVwcmVjYXRpbmcgdGhpcyBhdG9tIGluIGZhdm9yIG9mIHVzaW5nIENoYXRTZWFyY2hUdXJuQXRvbSBkaXJlY3RseVxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hQcm9kdWN0cyA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBDaGF0U2VhcmNoVHVybiA9IGdldChDaGF0U2VhcmNoVHVybkF0b20pO1xuICByZXR1cm4gQ2hhdFNlYXJjaFR1cm4/LnByb2R1Y3RMaXN0ID8/IFtdO1xufSk7XG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoRmlsdGVyc0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3Qgc2VhcmNoRmlsdGVyQ29uZmlnID0gZ2V0KGNoYXRTZWFyY2hGaWx0ZXJDb25maWdBdG9tKTtcbiAgY29uc3Qgc2VhcmNoTWFwID0gZ2V0KHNlYXJjaE1hcEF0b20pO1xuICBjb25zdCBjaGF0U2VhcmNoSWQgPSBnZXQoY2hhdFNlYXJjaElkQXRvbSk7XG5cbiAgaWYgKGNoYXRTZWFyY2hJZCAmJiBzZWFyY2hNYXBbY2hhdFNlYXJjaElkXSkge1xuICAgIGNvbnN0IHByb2R1Y3RzID0gc2VhcmNoTWFwW2NoYXRTZWFyY2hJZF0ucHJvZHVjdExpc3Q7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gZ2V0KHNlbGVjdGVkRmlsdGVyT3B0aW9uc0F0b20pO1xuICAgIHJldHVybiBQcm9kdWN0RmlsdGVycy5nZXRGaWx0ZXJzRm9yUHJvZHVjdHMoXG4gICAgICBwcm9kdWN0cyxcbiAgICAgIHNlYXJjaEZpbHRlckNvbmZpZyxcbiAgICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uc1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIFtdO1xufSk7XG5cbi8vIEZvciBzZWFyY2ggd2UgdXNlIHRoZSBmb2xsb3dpbmcgcXVlcnkgcGFyYW1zOlxuLy8gZXM6IHRydWUgLSB0aGlzIGluZGljYXRlcyB0aGF0IHdlIGFyZSBpbiBhIHNlYXJjaCBzdGF0ZVxuLy8gZXNxOiBxdWVyeSAtIHRoaXMgaXMgdGhlIGN1cnJlbnQgc2VhcmNoIHF1ZXJ5XG4vLyBlc2k6IHNlYXJjaCBpZCAtIHRoaXMgaXMgdGhlIHVuaXF1ZSBpZCBmb3IgdGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2UgYXJlIGRpc3BsYXlpbmcuIEl0IGlzIHB1bGxlZCBmcm9tIHRoZSBtZXNzYWdlIGlkIGZyb20gdGhlIHR1cm4gdGhhdCBpbmNsdWRlcyB0aGUgc2VhcmNoIHJlc3VsdHNcblxuZXhwb3J0IGNvbnN0IHNldFNlYXJjaFBhcmFtcyA9IChxdWVyeTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgcXVlcnkpO1xuICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoUGFyYW1zQXRvbSA9IGF0b20oKCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICByZXR1cm4ge1xuICAgIGVzOiBwYXJhbXMuZ2V0KFwiZXNcIiksXG4gICAgZXNxOiBwYXJhbXMuZ2V0KFwiZXNxXCIpLFxuICB9O1xufSk7XG5cbmV4cG9ydCBjb25zdCBpbml0aWF0ZUNoYXRTZWFyY2hBdG9tID0gYXRvbShudWxsLCAoXywgc2V0LCBxdWVyeTogc3RyaW5nKSA9PiB7XG4gIHNldChjaGF0U2VhcmNoSXNMb2FkaW5nQXRvbSwgdHJ1ZSk7XG4gIC8vIFVwZGF0ZSBVUkwgYW5kIG1hbnVhbGx5IHRyaWdnZXIgc3RhdGUgY2hhbmdlIChzaW5jZSBwdXNoU3RhdGUgZG9lc24ndCB0cmlnZ2VyIHBvcHN0YXRlKVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIHF1ZXJ5KTtcbiAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xuXG4gIC8vIE1hbnVhbGx5IHRyaWdnZXIgcGFnZSB2YXJpYW50IHJlLWV2YWx1YXRpb24gYnkgZGlzcGF0Y2hpbmcgYSBwb3BzdGF0ZSBldmVudFxuICAvLyBUaGlzIGVuc3VyZXMgdGhlIHBhZ2UgdmFyaWFudCBzeXN0ZW0gZGV0ZWN0cyB0aGUgVVJMIGNoYW5nZSBhbmQgbW91bnRzIHNlYXJjaCByZXN1bHRzXG4gIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBQb3BTdGF0ZUV2ZW50KFwicG9wc3RhdGVcIiwgeyBzdGF0ZToge30gfSkpO1xuXG4gIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogbnVsbCwgcXVlcnkgfSk7XG4gIHNldChoYW5kbGVTZWFyY2hBdG9tLCB7XG4gICAgaWQ6IHV1aWQoKSxcbiAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlYXJjaCxcbiAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgc2VhcmNoVGVybTogcXVlcnksXG4gICAgICAvLyBFbmFibGluZyB0aGlzIHdpbGwgZW5hYmxlIHRoZSBuZXcgYmFja2VuZCBzZWFyY2hcbiAgICAgIHNlbGVjdGVkRmlsdGVyczogW10sXG4gICAgfSxcbiAgfSk7XG59KTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZVNlYXJjaFJlc3VsdHNBdG9tID0gYXRvbShcbiAgbnVsbCxcbiAgKGdldCwgc2V0LCBtZXNzYWdlOiBNZXNzYWdlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UudHlwZSAhPT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcHJvZHVjdENvdW50LCBnZW5lcmF0ZWRRdWVyeSB9ID0gbWVzc2FnZS5tZXRhZGF0YTtcbiAgICBpZiAocHJvZHVjdENvdW50ICE9PSAwKSB7XG4gICAgICAvLyBDbGVhciB0aGUgZmlsdGVyIG9wdGlvbnMgd2hlbiB3ZSBnZXQgbmV3IHByb2R1Y3RzXG4gICAgICBzZXQoc2VsZWN0ZWRGaWx0ZXJPcHRpb25zQXRvbSwgW10pO1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIHN0aWxsIGRvIGFueSBvZiB0aGVzZSB0aGluZ3M/XG4gICAgICBzZXQoY2hhdFNlYXJjaFN0YXRlQXRvbSwgXCJwcm9kdWN0LXBhZ2VcIik7XG4gICAgICBjb25zdCBjdXJyZW50U2VhcmNoUGFyYW1zID0gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKTtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzcVwiLCBnZW5lcmF0ZWRRdWVyeSk7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzaVwiLCBtZXNzYWdlLmlkKTtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgdXJsKTtcbiAgICAgIGlmIChjdXJyZW50U2VhcmNoUGFyYW1zLmlkID09PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoZSBpZCBpcyBudWxsLCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIHN0YXRlXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBcIlwiLCB1cmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIHF1ZXJ5IGlzIGRpZmZlcmVudCwgd2UgbmVlZCB0byBwdXNoIGEgbmV3IHN0YXRlXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBcIlwiLCB1cmwpO1xuICAgICAgfVxuICAgICAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiBtZXNzYWdlLmlkLCBxdWVyeTogZ2VuZXJhdGVkUXVlcnkgfSk7XG4gICAgfVxuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgc2V0Q2hhdFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tKG51bGwsIChfLCBzZXQsIHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNcIiwgXCJ0cnVlXCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzcVwiLCBxdWVyeSk7XG4gIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgdXJsKTtcbiAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiBudWxsLCBxdWVyeSB9KTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VhcmNoUmVzdWx0LCBTZWFyY2hQYXJhbXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc2VhcmNoXCI7XG5cbi8vIFRoaXMgd2lsbCBiZSBzZXQgYnkgdGhlIFNlYXJjaFByb3ZpZGVyIHdoZW4gaXQgaW5pdGlhbGl6ZXNcbmxldCBzZWFyY2hTZXJ2aWNlRnVuY3Rpb246XG4gIHwgKChwYXJhbXM6IFNlYXJjaFBhcmFtcykgPT4gUHJvbWlzZTxTZWFyY2hSZXN1bHQ+KVxuICB8IG51bGwgPSBudWxsO1xuXG5leHBvcnQgY29uc3Qgc2V0U2VhcmNoU2VydmljZUZ1bmN0aW9uID0gKFxuICBmbjogKHBhcmFtczogU2VhcmNoUGFyYW1zKSA9PiBQcm9taXNlPFNlYXJjaFJlc3VsdD5cbikgPT4ge1xuICBzZWFyY2hTZXJ2aWNlRnVuY3Rpb24gPSBmbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWFyY2hTZXJ2aWNlRnVuY3Rpb24gPSAoKSA9PiB7XG4gIGlmICghc2VhcmNoU2VydmljZUZ1bmN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJTZWFyY2ggc2VydmljZSBmdW5jdGlvbiBub3QgaW5pdGlhbGl6ZWQuIE1ha2Ugc3VyZSBTZWFyY2hQcm92aWRlciBpcyBtb3VudGVkLlwiXG4gICAgKTtcbiAgfVxuICByZXR1cm4gc2VhcmNoU2VydmljZUZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyU2VhcmNoU2VydmljZUZ1bmN0aW9uID0gKCkgPT4ge1xuICBzZWFyY2hTZXJ2aWNlRnVuY3Rpb24gPSBudWxsO1xufTtcbiIsImltcG9ydCB7IGF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdCwgU2VhcmNoUGFyYW1zIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3NlYXJjaFwiO1xuaW1wb3J0IHsgUHJvZHVjdFNvcnRpbmcgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUHJvZHVjdEZpbHRlcnMgfSBmcm9tIFwiLi9wcm9kdWN0RmlsdGVyc1wiO1xuaW1wb3J0IHsgUHJvZHVjdFNvcnRlciB9IGZyb20gXCIuL3Byb2R1Y3RTb3J0ZXJcIjtcbmltcG9ydCB7IG5ld09yZ0NvbmZpZ0F0b20gfSBmcm9tIFwiLi4vb3JnXCI7XG5pbXBvcnQgeyBnZXRTZWFyY2hTZXJ2aWNlRnVuY3Rpb24gfSBmcm9tIFwiLi9zZWFyY2hTZXJ2aWNlQWRhcHRlclwiO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RlZEZpbHRlck9wdGlvbiA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gXCJmaWx0ZXJJZDpmaWx0ZXJJdGVtSWRcIiAtIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBjb21wYXJpc29uc1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBmaWx0ZXJJZDogc3RyaW5nOyAvLyBGaWx0ZXIgY2F0ZWdvcnlcbiAgZmlsdGVySXRlbUlkOiBzdHJpbmc7IC8vIEZpbHRlciB2YWx1ZVxufTtcblxuaW50ZXJmYWNlIFNlYXJjaFN0YXRlIHtcbiAgZGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbDtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gIGxhc3RRdWVyeTogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IHNlYXJjaEF0b20gPSBhdG9tPFNlYXJjaFN0YXRlPih7XG4gIGRhdGE6IG51bGwsXG4gIGxvYWRpbmc6IGZhbHNlLFxuICBlcnJvcjogbnVsbCxcbiAgbGFzdFF1ZXJ5OiBudWxsLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZWFyY2hQcm9kdWN0U29ydGluZ0F0b20gPSBhdG9tPFByb2R1Y3RTb3J0aW5nPihcbiAgUHJvZHVjdFNvcnRpbmcuRkVBVFVSRURcbik7XG5leHBvcnQgY29uc3Qgc2VhcmNoU2VsZWN0ZWRGaWx0ZXJzQXRvbSA9IGF0b208U2VsZWN0ZWRGaWx0ZXJPcHRpb25bXT4oW10pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRmlsdGVyT3B0aW9uID0gKFxuICBmaWx0ZXJJZDogc3RyaW5nLFxuICBmaWx0ZXJJdGVtSWQ6IHN0cmluZyxcbiAgZGlzcGxheU5hbWU6IHN0cmluZ1xuKTogU2VsZWN0ZWRGaWx0ZXJPcHRpb24gPT4gKHtcbiAgaWQ6IGAke2ZpbHRlcklkfToke2ZpbHRlckl0ZW1JZH1gLFxuICBkaXNwbGF5TmFtZSxcbiAgZmlsdGVySWQsXG4gIGZpbHRlckl0ZW1JZCxcbn0pO1xuXG5jb25zdCBpbnRlcm5hbFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tPHtcbiAgaWQ6IHN0cmluZyB8IG51bGw7XG4gIHF1ZXJ5OiBzdHJpbmcgfCBudWxsO1xufT4oe1xuICBpZDogbnVsbCxcbiAgcXVlcnk6IG51bGwsXG59KTtcblxuZXhwb3J0IGNvbnN0IHNlYXJjaFBhcmFtc0F0b20gPSBhdG9tKFxuICAoZ2V0KSA9PiBnZXQoaW50ZXJuYWxTZWFyY2hQYXJhbXNBdG9tKSxcbiAgKF8sIHNldCwgdmFsdWU6IHsgaWQ6IHN0cmluZyB8IG51bGw7IHF1ZXJ5OiBzdHJpbmcgfCBudWxsIH0pID0+IHtcbiAgICBzZXQoaW50ZXJuYWxTZWFyY2hQYXJhbXNBdG9tLCB2YWx1ZSk7XG4gIH1cbik7XG5leHBvcnQgY29uc3QgaW50ZXJuYWxTZWFyY2hTeXN0ZW1TdGF0ZUF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcblxuZXhwb3J0IGNvbnN0IHNlYXJjaFN5c3RlbUF0b20gPSBhdG9tKFxuICAoZ2V0KSA9PiBnZXQoaW50ZXJuYWxTZWFyY2hTeXN0ZW1TdGF0ZUF0b20pLFxuICAoZ2V0LCBzZXQsIHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBnZXQoaW50ZXJuYWxTZWFyY2hTeXN0ZW1TdGF0ZUF0b20pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXRlQ2hhbmdlSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICBpZiAocGFyYW1zLmdldChcImVzXCIpID09PSBcInRydWVcIikge1xuICAgICAgICBjb25zdCBpZCA9IHBhcmFtcy5nZXQoXCJlc2lcIik7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zLmdldChcImVzcVwiKTtcbiAgICAgICAgc2V0KHNlYXJjaFBhcmFtc0F0b20sIHsgaWQsIHF1ZXJ5IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0KHNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IG51bGwsIHF1ZXJ5OiBudWxsIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzZXQoaW50ZXJuYWxTZWFyY2hTeXN0ZW1TdGF0ZUF0b20sIHRydWUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBzdGF0ZUNoYW5nZUhhbmRsZXIpO1xuICAgICAgLy8gQWxzbyB0cmlnZ2VyIHRoZSBoYXNoIGNoYW5nZSBoYW5kbGVyIHRvIHNldCB0aGUgaW5pdGlhbCBzdGF0ZVxuICAgICAgc3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldChpbnRlcm5hbFNlYXJjaFN5c3RlbVN0YXRlQXRvbSwgZmFsc2UpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBzdGF0ZUNoYW5nZUhhbmRsZXIpO1xuICAgIH1cbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlcmVkU2VhcmNoUHJvZHVjdHNBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IHNlYXJjaERhdGEgPSBnZXQoc2VhcmNoQXRvbSkuZGF0YTtcbiAgY29uc3Qgc29ydGluZyA9IGdldChzZWFyY2hQcm9kdWN0U29ydGluZ0F0b20pO1xuICBjb25zdCBzZWxlY3RlZEZpbHRlcnMgPSBnZXQoc2VhcmNoU2VsZWN0ZWRGaWx0ZXJzQXRvbSk7XG4gIGNvbnN0IG5ld09yZ0NvbmZpZyA9IGdldChuZXdPcmdDb25maWdBdG9tKTtcblxuICBpZiAoXG4gICAgIXNlYXJjaERhdGE/LnByb2R1Y3RzIHx8XG4gICAgIW5ld09yZ0NvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlncz8uc2VhcmNoQ29uZmlnXG4gIClcbiAgICByZXR1cm4gW107XG5cbiAgY29uc3QgZmlsdGVyZWRQcm9kdWN0cyA9IFByb2R1Y3RGaWx0ZXJzLmZpbHRlclByb2R1Y3RzKFxuICAgIHNlYXJjaERhdGEucHJvZHVjdHMsXG4gICAgbmV3T3JnQ29uZmlnLmZyb250ZW5kQ29uZmlnLnVpQ29uZmlncy5zZWFyY2hDb25maWcuc2VhcmNoRmlsdGVyQ29uZmlnLFxuICAgIHNlbGVjdGVkRmlsdGVycyxcbiAgICBuZXdPcmdDb25maWcuZnJvbnRlbmRDb25maWcudWlDb25maWdzLnNlYXJjaENvbmZpZy5hZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzXG4gICk7XG5cbiAgcmV0dXJuIFByb2R1Y3RTb3J0ZXIuc29ydChmaWx0ZXJlZFByb2R1Y3RzLCBzb3J0aW5nKTtcbn0pO1xuXG5leHBvcnQgY29uc3Qgc2VhcmNoRmlsdGVyc0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3Qgc2VhcmNoRGF0YSA9IGdldChzZWFyY2hBdG9tKS5kYXRhO1xuICBjb25zdCBzZWxlY3RlZEZpbHRlcnMgPSBnZXQoc2VhcmNoU2VsZWN0ZWRGaWx0ZXJzQXRvbSk7XG4gIGNvbnN0IG5ld09yZ0NvbmZpZyA9IGdldChuZXdPcmdDb25maWdBdG9tKTtcblxuICBpZiAoXG4gICAgIXNlYXJjaERhdGE/LnByb2R1Y3RzIHx8XG4gICAgIW5ld09yZ0NvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlncz8uc2VhcmNoQ29uZmlnXG4gIClcbiAgICByZXR1cm4gW107XG5cbiAgcmV0dXJuIFByb2R1Y3RGaWx0ZXJzLmdldEZpbHRlcnNGb3JQcm9kdWN0cyhcbiAgICBzZWFyY2hEYXRhLnByb2R1Y3RzLFxuICAgIG5ld09yZ0NvbmZpZy5mcm9udGVuZENvbmZpZy51aUNvbmZpZ3Muc2VhcmNoQ29uZmlnLnNlYXJjaEZpbHRlckNvbmZpZyxcbiAgICBzZWxlY3RlZEZpbHRlcnNcbiAgKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgYWRkU2VhcmNoRmlsdGVyQXRvbSA9IGF0b20oXG4gIG51bGwsXG4gIChnZXQsIHNldCwgZmlsdGVyOiBTZWxlY3RlZEZpbHRlck9wdGlvbikgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBnZXQoc2VhcmNoU2VsZWN0ZWRGaWx0ZXJzQXRvbSk7XG4gICAgaWYgKCFjdXJyZW50LnNvbWUoKGYpID0+IGYuaWQgPT09IGZpbHRlci5pZCkpIHtcbiAgICAgIHNldChzZWFyY2hTZWxlY3RlZEZpbHRlcnNBdG9tLCBbLi4uY3VycmVudCwgZmlsdGVyXSk7XG4gICAgfVxuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VhcmNoRmlsdGVyQXRvbSA9IGF0b20oXG4gIG51bGwsXG4gIChnZXQsIHNldCwgZmlsdGVySWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBnZXQoc2VhcmNoU2VsZWN0ZWRGaWx0ZXJzQXRvbSk7XG4gICAgc2V0KFxuICAgICAgc2VhcmNoU2VsZWN0ZWRGaWx0ZXJzQXRvbSxcbiAgICAgIGN1cnJlbnQuZmlsdGVyKChmKSA9PiBmLmlkICE9PSBmaWx0ZXJJZClcbiAgICApO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgY2xlYXJTZWFyY2hGaWx0ZXJzQXRvbSA9IGF0b20obnVsbCwgKF8sIHNldCkgPT4ge1xuICBzZXQoc2VhcmNoU2VsZWN0ZWRGaWx0ZXJzQXRvbSwgW10pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBwZXJmb3JtU2VhcmNoQXRvbSA9IGF0b20oXG4gIG51bGwsXG4gIGFzeW5jIChnZXQsIHNldCwgcGFyYW1zOiBTZWFyY2hQYXJhbXMsIGFsbG93UmVkaXJlY3QgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGdldChzZWFyY2hBdG9tKTtcbiAgICBjb25zdCBuZXdPcmdDb25maWcgPSBnZXQobmV3T3JnQ29uZmlnQXRvbSk7XG4gICAgY29uc3QgcmVkaXJlY3RTZWFyY2hSZXN1bHRzVXJsID1cbiAgICAgIG5ld09yZ0NvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlncz8uc2VhcmNoQ29uZmlnXG4gICAgICAgID8ucmVkaXJlY3RTZWFyY2hSZXN1bHRzVXJsO1xuXG4gICAgaWYgKGFsbG93UmVkaXJlY3QgJiYgcmVkaXJlY3RTZWFyY2hSZXN1bHRzVXJsKSB7XG4gICAgICBjb25zdCByZWRpcmVjdFVybCA9IG5ldyBVUkwocmVkaXJlY3RTZWFyY2hSZXN1bHRzVXJsKTtcbiAgICAgIHJlZGlyZWN0VXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gICAgICByZWRpcmVjdFVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIHBhcmFtcy5xdWVyeSk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZSBVUkwgYW5kIG1hbnVhbGx5IHRyaWdnZXIgc3RhdGUgY2hhbmdlIChzaW5jZSBwdXNoU3RhdGUgZG9lc24ndCB0cmlnZ2VyIHBvcHN0YXRlKVxuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIHBhcmFtcy5xdWVyeSk7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG5cbiAgICAgIC8vIE1hbnVhbGx5IHRyaWdnZXIgcGFnZSB2YXJpYW50IHJlLWV2YWx1YXRpb24gYnkgZGlzcGF0Y2hpbmcgYSBwb3BzdGF0ZSBldmVudFxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBwYWdlIHZhcmlhbnQgc3lzdGVtIGRldGVjdHMgdGhlIFVSTCBjaGFuZ2UgYW5kIG1vdW50cyBzZWFyY2ggcmVzdWx0c1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IFBvcFN0YXRlRXZlbnQoXCJwb3BzdGF0ZVwiLCB7IHN0YXRlOiB7fSB9KSk7XG4gICAgfVxuXG4gICAgLy8gTWFudWFsbHkgdHJpZ2dlciBwYWdlIHZhcmlhbnQgcmUtZXZhbHVhdGlvbiBieSBkaXNwYXRjaGluZyBhIHBvcHN0YXRlIGV2ZW50XG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBwYWdlIHZhcmlhbnQgc3lzdGVtIGRldGVjdHMgdGhlIFVSTCBjaGFuZ2UgYW5kIG1vdW50cyBzZWFyY2ggcmVzdWx0c1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBQb3BTdGF0ZUV2ZW50KFwicG9wc3RhdGVcIiwgeyBzdGF0ZToge30gfSkpO1xuICAgIGlmIChjdXJyZW50U3RhdGUubG9hZGluZykge1xuICAgICAgcmV0dXJuOyAvLyBQcmV2ZW50IGNvbmN1cnJlbnQgc2VhcmNoZXNcbiAgICB9XG5cbiAgICBzZXQoc2VhcmNoQXRvbSwge1xuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGxhc3RRdWVyeTogcGFyYW1zLnF1ZXJ5LFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZWFyY2hTZXJ2aWNlRnVuY3Rpb24gPSBnZXRTZWFyY2hTZXJ2aWNlRnVuY3Rpb24oKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlYXJjaFNlcnZpY2VGdW5jdGlvbihwYXJhbXMpO1xuICAgICAgc2V0KHNlYXJjaEF0b20sIHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGxhc3RRdWVyeTogcGFyYW1zLnF1ZXJ5LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkXCI7XG4gICAgICBzZXQoc2VhcmNoQXRvbSwge1xuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgbGFzdFF1ZXJ5OiBwYXJhbXMucXVlcnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbik7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE1BQWEsMkJBQTJCLGdCQUF3QjtDQUM5RCxNQUFNLFFBQVE7RUFBQztFQUFRO0VBQU87RUFBTTtFQUFLO0VBQUs7RUFBSztFQUFNO0VBQU87RUFBUTtFQUFRO0FBZWhGLFFBYnVCLFlBQ3BCLGFBQWEsQ0FDYixNQUFNLElBQUksQ0FDVixLQUFLLFNBQVM7QUFDYixNQUFJLE1BQU0sU0FBUyxLQUFLLENBQ3RCLFFBQU8sS0FBSyxhQUFhO0FBRTNCLFNBQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxNQUFNLEVBQUU7R0FDbkQsQ0FFa0MsS0FBSyxJQUFJLENBR3pCLFFBQVEsV0FBVyxTQUFTOzs7OztBQ1ZwRCxNQUFNLGtCQUFrQixPQUFlLGVBQXVCO0FBRTVELFFBRGUsS0FBSyxNQUFNLFFBQVEsV0FBVyxHQUM3Qjs7QUFHbEIsTUFBTSxpQkFBaUIsVUFBc0M7QUFDM0QsS0FBSSxDQUFDLE1BQU0sUUFBUSxNQUFNLENBQ3ZCLFFBQU87QUFFVCxRQUFPLE1BQU0sT0FBTyxTQUFTLE9BQU8sU0FBUyxTQUFTOztBQUt4RCxNQUFNLGNBQWMsaUJBQXNEO0FBQ3hFLEtBQUksYUFBYSxTQUFTLFFBQ3hCLFNBQVEsR0FBRyxNQUFNLE9BQU8sRUFBRSxhQUFhLEdBQUcsT0FBTyxFQUFFLGFBQWE7QUFFbEUsS0FBSSxhQUFhLFNBQVMsV0FBVztBQUNuQyxNQUFJLGFBQWEsUUFBUSxTQUFTLGFBQ2hDLFNBQVEsR0FBRyxNQUFNLEVBQUUsWUFBWSxj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