@envive-ai/react-hooks 0.3.6 → 0.3.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 (427) hide show
  1. package/dist/application/commerce-api.cjs +2 -2
  2. package/dist/application/commerce-api.js +2 -2
  3. package/dist/application/models/api/userEvent.d.cts +4 -2
  4. package/dist/application/models/api/userEvent.d.ts +4 -2
  5. package/dist/application/models/chatElementDisplayLocationV3.cjs +3 -1
  6. package/dist/application/models/chatElementDisplayLocationV3.d.cts +3 -1
  7. package/dist/application/models/chatElementDisplayLocationV3.d.ts +3 -1
  8. package/dist/application/models/chatElementDisplayLocationV3.js +3 -1
  9. package/dist/application/models/frontendConfigV3.d.cts +2 -2
  10. package/dist/application/models/frontendConfigV3.d.ts +2 -2
  11. package/dist/application/models/graphql/queries/getColorsAndFrontendQuery.cjs +18 -0
  12. package/dist/application/models/graphql/queries/getColorsAndFrontendQuery.js +18 -0
  13. package/dist/application/models/guards/api/isApiFormResponse.cjs +1 -1
  14. package/dist/application/models/guards/api/isApiFormResponse.js +1 -1
  15. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.cjs +1 -1
  16. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +1 -1
  17. package/dist/application/models/guards/api/isApiOrderResponseAttributes.cjs +1 -1
  18. package/dist/application/models/guards/api/isApiOrderResponseAttributes.js +1 -1
  19. package/dist/application/models/guards/api/isApiProductResponseAttributes.cjs +1 -1
  20. package/dist/application/models/guards/api/isApiProductResponseAttributes.js +1 -1
  21. package/dist/application/models/guards/api/isApiQueryTypedEventAttributes.cjs +2 -2
  22. package/dist/application/models/guards/api/isApiQueryTypedEventAttributes.js +2 -2
  23. package/dist/application/models/guards/api/isApiResponse.cjs +1 -1
  24. package/dist/application/models/guards/api/isApiResponse.js +1 -1
  25. package/dist/application/utils/analyticsUtils.cjs +1 -1
  26. package/dist/application/utils/analyticsUtils.js +1 -1
  27. package/dist/application/utils/elementObserver.d.cts +2 -2
  28. package/dist/application/utils/elementObserver.d.ts +2 -2
  29. package/dist/application/utils/widgetTextRequestToApiRequest.cjs +5 -2
  30. package/dist/application/utils/widgetTextRequestToApiRequest.js +5 -2
  31. package/dist/atoms/app/index.cjs +4 -4
  32. package/dist/atoms/app/index.d.cts +7 -7
  33. package/dist/atoms/app/index.d.ts +7 -7
  34. package/dist/atoms/app/index.js +4 -4
  35. package/dist/atoms/chat/chatState.d.cts +18 -18
  36. package/dist/atoms/chat/chatState.d.ts +17 -17
  37. package/dist/atoms/chat/form.d.cts +2 -2
  38. package/dist/atoms/chat/form.d.ts +2 -2
  39. package/dist/atoms/chat/index.cjs +1 -3
  40. package/dist/atoms/chat/index.d.cts +4 -5
  41. package/dist/atoms/chat/index.d.ts +4 -5
  42. package/dist/atoms/chat/index.js +2 -3
  43. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  44. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  45. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  46. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  47. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  48. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  49. package/dist/atoms/chat/replies.cjs +1 -1
  50. package/dist/atoms/chat/replies.d.cts +1 -1
  51. package/dist/atoms/chat/replies.d.ts +3 -3
  52. package/dist/atoms/chat/replies.js +1 -1
  53. package/dist/atoms/chat/suggestions.d.cts +2 -2
  54. package/dist/atoms/chat/suggestions.d.ts +2 -2
  55. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  56. package/dist/atoms/org/customerService.d.cts +6 -6
  57. package/dist/atoms/org/customerService.d.ts +6 -6
  58. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  59. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  60. package/dist/atoms/org/index.cjs +2 -2
  61. package/dist/atoms/org/index.js +2 -2
  62. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  63. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  64. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  65. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  66. package/dist/atoms/search/chatSearch.cjs +1 -1
  67. package/dist/atoms/search/chatSearch.d.cts +17 -17
  68. package/dist/atoms/search/chatSearch.d.ts +17 -17
  69. package/dist/atoms/search/chatSearch.js +1 -1
  70. package/dist/atoms/search/searchAPI.cjs +1 -1
  71. package/dist/atoms/search/searchAPI.d.cts +13 -13
  72. package/dist/atoms/search/searchAPI.d.ts +13 -13
  73. package/dist/atoms/search/searchAPI.js +1 -1
  74. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  75. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +6 -4
  76. package/dist/contexts/amplitudeContext/amplitudeContext.js +6 -4
  77. package/dist/contexts/enviveContext/enviveContext.cjs +38 -16
  78. package/dist/contexts/enviveContext/enviveContext.d.cts +4 -1
  79. package/dist/contexts/enviveContext/enviveContext.d.ts +4 -1
  80. package/dist/contexts/enviveContext/enviveContext.js +38 -16
  81. package/dist/contexts/enviveContext/types.d.cts +1 -1
  82. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +57 -3
  83. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +6 -1
  84. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +6 -1
  85. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +57 -3
  86. package/dist/contexts/graphqlContext/graphqlContext.cjs +48 -28
  87. package/dist/contexts/graphqlContext/graphqlContext.js +49 -28
  88. package/dist/contexts/graphqlContext/mockV3Config.cjs +62 -49
  89. package/dist/contexts/graphqlContext/mockV3Config.js +21 -8
  90. package/dist/contexts/hardcopyContext/hardcopyContext.cjs +29 -1
  91. package/dist/contexts/hardcopyContext/hardcopyContext.js +29 -1
  92. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +2 -3
  93. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +2 -3
  94. package/dist/contexts/salesAgentContext/chatAPI.cjs +56 -7
  95. package/dist/contexts/salesAgentContext/chatAPI.d.cts +10 -6
  96. package/dist/contexts/salesAgentContext/chatAPI.d.ts +10 -6
  97. package/dist/contexts/salesAgentContext/chatAPI.js +56 -7
  98. package/dist/contexts/salesAgentContext/formSubmittedUtils.cjs +37 -0
  99. package/dist/contexts/salesAgentContext/formSubmittedUtils.js +36 -0
  100. package/dist/contexts/salesAgentContext/index.d.cts +2 -2
  101. package/dist/contexts/salesAgentContext/index.d.ts +2 -2
  102. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +36 -10
  103. package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +11 -4
  104. package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +11 -4
  105. package/dist/contexts/salesAgentContext/salesAgentContext.js +36 -10
  106. package/dist/contexts/salesAgentContext/salesAgentService.cjs +50 -19
  107. package/dist/contexts/salesAgentContext/salesAgentService.js +50 -19
  108. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  109. package/dist/contexts/searchContext/searchContext.js +1 -1
  110. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  111. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
  112. package/dist/contexts/types.d.cts +1 -1
  113. package/dist/contexts/types.d.ts +1 -1
  114. package/dist/contexts/typesV3.cjs +2 -7
  115. package/dist/contexts/typesV3.d.cts +14 -11
  116. package/dist/contexts/typesV3.d.ts +14 -11
  117. package/dist/contexts/typesV3.js +3 -7
  118. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +22 -30
  119. package/dist/contexts/userIdentityContext/userIdentityContext.d.cts +9 -8
  120. package/dist/contexts/userIdentityContext/userIdentityContext.d.ts +9 -8
  121. package/dist/contexts/userIdentityContext/userIdentityContext.js +22 -30
  122. package/dist/hooks/ElementObserver/useElementObserver.cjs +3 -2
  123. package/dist/hooks/ElementObserver/useElementObserver.js +3 -2
  124. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  125. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  126. package/dist/hooks/GraphQLConfig/useGraphQLConfig.cjs +1 -2
  127. package/dist/hooks/GraphQLConfig/useGraphQLConfig.js +1 -2
  128. package/dist/hooks/Search/useSearch.cjs +2 -2
  129. package/dist/hooks/Search/useSearch.js +2 -2
  130. package/dist/hooks/Search/useSearchInput.cjs +1 -1
  131. package/dist/hooks/Search/useSearchInput.js +1 -1
  132. package/dist/hooks/utils.d.cts +1 -1
  133. package/dist/hooks/utils.d.ts +1 -1
  134. package/dist/mocks/index.cjs +5 -0
  135. package/dist/mocks/index.d.cts +2 -0
  136. package/dist/mocks/index.d.ts +2 -0
  137. package/dist/mocks/index.js +3 -0
  138. package/dist/mocks/salesAgentMockData.cjs +207 -0
  139. package/dist/mocks/salesAgentMockData.d.cts +11 -0
  140. package/dist/mocks/salesAgentMockData.d.ts +11 -0
  141. package/dist/mocks/salesAgentMockData.js +204 -0
  142. package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.cjs +2 -2
  143. package/dist/packages/components-v3/dist/ChatHeader/components/CloseButton.js +2 -2
  144. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.cjs +2 -2
  145. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetCloseButtonProperties.js +2 -2
  146. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.cjs +18 -18
  147. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetHandleProperties.js +18 -18
  148. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.cjs +1 -1
  149. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetLayoutProperties.js +1 -1
  150. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.cjs +4 -4
  151. package/dist/packages/components-v3/dist/ChatHeader/hooks/useGetToggleProperties.js +4 -4
  152. package/dist/packages/components-v3/dist/ChatPreviewLoading/components/Skeleton.cjs +1 -0
  153. package/dist/packages/components-v3/dist/ChatPreviewLoading/components/Skeleton.js +3 -0
  154. package/dist/packages/components-v3/dist/Container/Container.cjs +19 -3
  155. package/dist/packages/components-v3/dist/Container/Container.js +19 -4
  156. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.cjs +13 -0
  157. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.js +11 -1
  158. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.cjs +13 -0
  159. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.js +11 -1
  160. package/dist/packages/components-v3/dist/Container/index.cjs +1 -1
  161. package/dist/packages/components-v3/dist/Container/index.js +1 -1
  162. package/dist/packages/components-v3/dist/DesignTokens/components/utils.cjs +16 -0
  163. package/dist/packages/components-v3/dist/DesignTokens/components/utils.js +15 -0
  164. package/dist/packages/components-v3/dist/FloatingButton/FloatingButton.cjs +2 -0
  165. package/dist/packages/components-v3/dist/FloatingButton/FloatingButton.js +4 -0
  166. package/dist/packages/components-v3/dist/FloatingButton/components/Button.cjs +9 -0
  167. package/dist/packages/components-v3/dist/FloatingButton/components/Button.js +10 -0
  168. package/dist/packages/components-v3/dist/FloatingButton/components/Container.cjs +9 -0
  169. package/dist/packages/components-v3/dist/FloatingButton/components/Container.js +10 -0
  170. package/dist/packages/components-v3/dist/FloatingButton/components/Icon.cjs +3 -0
  171. package/dist/packages/components-v3/dist/FloatingButton/components/Icon.js +5 -0
  172. package/dist/packages/components-v3/dist/FloatingButton/components/Wrapper.cjs +9 -0
  173. package/dist/packages/components-v3/dist/FloatingButton/components/Wrapper.js +10 -0
  174. package/dist/packages/components-v3/dist/FloatingButton/components/index.cjs +4 -0
  175. package/dist/packages/components-v3/dist/FloatingButton/components/index.js +6 -0
  176. package/dist/packages/components-v3/dist/FloatingButton/index.cjs +2 -0
  177. package/dist/packages/components-v3/dist/FloatingButton/index.js +4 -0
  178. package/dist/packages/components-v3/dist/FloatingButton/types/types.cjs +17 -0
  179. package/dist/packages/components-v3/dist/FloatingButton/types/types.js +16 -0
  180. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.cjs +3 -3
  181. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.js +3 -3
  182. package/dist/packages/components-v3/dist/PromptButton/PromptButton.cjs +40 -4
  183. package/dist/packages/components-v3/dist/PromptButton/PromptButton.js +40 -5
  184. package/dist/packages/components-v3/dist/PromptButton/components/Icon.cjs +10 -0
  185. package/dist/packages/components-v3/dist/PromptButton/components/Icon.js +8 -1
  186. package/dist/packages/components-v3/dist/PromptButton/components/Label.cjs +18 -1
  187. package/dist/packages/components-v3/dist/PromptButton/components/Label.js +16 -2
  188. package/dist/packages/components-v3/dist/PromptButton/components/Layout.cjs +31 -3
  189. package/dist/packages/components-v3/dist/PromptButton/components/Layout.js +31 -4
  190. package/dist/packages/components-v3/dist/PromptButton/components/Loading.cjs +5 -1
  191. package/dist/packages/components-v3/dist/PromptButton/components/Loading.js +5 -2
  192. package/dist/packages/components-v3/dist/PromptButton/components/index.cjs +16 -4
  193. package/dist/packages/components-v3/dist/PromptButton/components/index.js +15 -5
  194. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBackgroundColorsProperties.cjs +18 -0
  195. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBackgroundColorsProperties.js +18 -0
  196. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.cjs +12 -0
  197. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.js +10 -1
  198. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBorderColorsProperties.cjs +18 -0
  199. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBorderColorsProperties.js +18 -0
  200. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetIconColorsProperties.cjs +32 -0
  201. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetIconColorsProperties.js +32 -0
  202. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.cjs +9 -1
  203. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.js +9 -2
  204. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetTextColorsProperties.cjs +19 -0
  205. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetTextColorsProperties.js +19 -0
  206. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetVariantColorsProperties.cjs +29 -0
  207. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetVariantColorsProperties.js +29 -0
  208. package/dist/packages/components-v3/dist/PromptButton/index.cjs +1 -1
  209. package/dist/packages/components-v3/dist/PromptButton/index.js +1 -1
  210. package/dist/packages/components-v3/dist/PromptButton/utils/functions.cjs +10 -0
  211. package/dist/packages/components-v3/dist/PromptButton/utils/functions.js +10 -0
  212. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.js +1 -1
  213. package/dist/packages/components-v3/dist/SocialProof/SocialProof.cjs +10 -0
  214. package/dist/packages/components-v3/dist/SocialProof/SocialProof.js +12 -0
  215. package/dist/packages/components-v3/dist/SocialProof/components/Headline.cjs +53 -0
  216. package/dist/packages/components-v3/dist/SocialProof/components/Headline.js +54 -0
  217. package/dist/packages/components-v3/dist/SocialProof/components/ImageGallery.cjs +5 -0
  218. package/dist/packages/components-v3/dist/SocialProof/components/ImageGallery.js +7 -0
  219. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourGrid.cjs +6 -0
  220. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourGrid.js +8 -0
  221. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourHorizontal.cjs +16 -0
  222. package/dist/packages/components-v3/dist/SocialProof/components/LayoutFourHorizontal.js +17 -0
  223. package/dist/packages/components-v3/dist/SocialProof/components/LayoutSingle.cjs +8 -0
  224. package/dist/packages/components-v3/dist/SocialProof/components/LayoutSingle.js +10 -0
  225. package/dist/packages/components-v3/dist/SocialProof/components/Skeleton.cjs +1 -0
  226. package/dist/packages/components-v3/dist/SocialProof/components/Skeleton.js +3 -0
  227. package/dist/packages/components-v3/dist/SocialProof/components/Subheadline.cjs +8 -0
  228. package/dist/packages/components-v3/dist/SocialProof/components/Subheadline.js +10 -0
  229. package/dist/packages/components-v3/dist/SocialProof/components/Textfield.cjs +3 -0
  230. package/dist/packages/components-v3/dist/SocialProof/components/Textfield.js +5 -0
  231. package/dist/packages/components-v3/dist/SocialProof/components/index.cjs +8 -0
  232. package/dist/packages/components-v3/dist/SocialProof/components/index.js +10 -0
  233. package/dist/packages/components-v3/dist/SocialProof/hooks/index.cjs +1 -0
  234. package/dist/packages/components-v3/dist/SocialProof/hooks/index.js +3 -0
  235. package/dist/packages/components-v3/dist/SocialProof/hooks/useSocialProofCount.cjs +1 -0
  236. package/dist/packages/components-v3/dist/SocialProof/hooks/useSocialProofCount.js +3 -0
  237. package/dist/packages/components-v3/dist/SocialProof/index.cjs +4 -0
  238. package/dist/packages/components-v3/dist/SocialProof/index.js +6 -0
  239. package/dist/packages/components-v3/dist/SocialProof/types/types.cjs +11 -0
  240. package/dist/packages/components-v3/dist/SocialProof/types/types.js +10 -0
  241. package/dist/packages/components-v3/dist/SocialProof/utils/functions.cjs +1 -0
  242. package/dist/packages/components-v3/dist/SocialProof/utils/functions.js +3 -0
  243. package/dist/packages/components-v3/dist/Title/Title.cjs +11 -0
  244. package/dist/packages/components-v3/dist/Title/Title.js +12 -0
  245. package/dist/packages/components-v3/dist/Title/components/Image.cjs +2 -0
  246. package/dist/packages/components-v3/dist/Title/components/Image.js +4 -0
  247. package/dist/packages/components-v3/dist/Title/components/Label.cjs +3 -0
  248. package/dist/packages/components-v3/dist/Title/components/Label.js +5 -0
  249. package/dist/packages/components-v3/dist/Title/components/Layout.cjs +11 -0
  250. package/dist/packages/components-v3/dist/Title/components/Layout.js +12 -0
  251. package/dist/packages/components-v3/dist/Title/components/index.cjs +3 -0
  252. package/dist/packages/components-v3/dist/Title/components/index.js +5 -0
  253. package/dist/packages/components-v3/dist/Title/index.cjs +1 -0
  254. package/dist/packages/components-v3/dist/Title/index.js +3 -0
  255. package/dist/packages/components-v3/dist/Tokens/index.cjs +11 -11
  256. package/dist/packages/components-v3/dist/Tokens/index.js +11 -11
  257. package/dist/packages/components-v3/dist/Typography/Typography.cjs +35 -7
  258. package/dist/packages/components-v3/dist/Typography/Typography.js +35 -8
  259. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.cjs +30 -0
  260. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.js +28 -1
  261. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.cjs +19 -0
  262. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.js +17 -1
  263. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.cjs +20 -0
  264. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.js +18 -1
  265. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.cjs +12 -0
  266. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.js +10 -1
  267. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.cjs +21 -0
  268. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.js +19 -1
  269. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.cjs +61 -0
  270. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.js +59 -1
  271. package/dist/packages/components-v3/dist/Typography/index.cjs +2 -1
  272. package/dist/packages/components-v3/dist/Typography/index.js +2 -1
  273. package/dist/packages/components-v3/dist/Typography/types/index.cjs +47 -0
  274. package/dist/packages/components-v3/dist/Typography/types/index.js +44 -0
  275. package/dist/packages/components-v3/dist/Typography/utils/utils.cjs +12 -0
  276. package/dist/packages/components-v3/dist/Typography/utils/utils.js +10 -0
  277. package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.cjs +1 -1
  278. package/dist/packages/components-v3/dist/WelcomeMessage/components/Container.js +1 -1
  279. package/dist/packages/components-v3/dist/WelcomeMessage/components/SparkleIcon.cjs +1 -1
  280. package/dist/packages/components-v3/dist/WelcomeMessage/components/SparkleIcon.js +1 -1
  281. package/dist/packages/components-v3/dist/WelcomeMessage/types/types.cjs +2 -2
  282. package/dist/packages/components-v3/dist/WelcomeMessage/types/types.js +2 -2
  283. package/dist/packages/components-v3/dist/WidgetTextField/WidgetTextField.cjs +2 -0
  284. package/dist/packages/components-v3/dist/WidgetTextField/WidgetTextField.js +4 -0
  285. package/dist/packages/components-v3/dist/WidgetTextField/components/Container.cjs +14 -0
  286. package/dist/packages/components-v3/dist/WidgetTextField/components/Container.js +15 -0
  287. package/dist/packages/components-v3/dist/WidgetTextField/components/FakeTextInput.cjs +3 -0
  288. package/dist/packages/components-v3/dist/WidgetTextField/components/FakeTextInput.js +5 -0
  289. package/dist/packages/components-v3/dist/WidgetTextField/components/Icon.cjs +7 -0
  290. package/dist/packages/components-v3/dist/WidgetTextField/components/Icon.js +9 -0
  291. package/dist/packages/components-v3/dist/WidgetTextField/components/Skeleton.cjs +10 -0
  292. package/dist/packages/components-v3/dist/WidgetTextField/components/Skeleton.js +11 -0
  293. package/dist/packages/components-v3/dist/WidgetTextField/components/index.cjs +4 -0
  294. package/dist/packages/components-v3/dist/WidgetTextField/components/index.js +6 -0
  295. package/dist/packages/components-v3/dist/WidgetTextField/hooks/useGetContainerProperties.cjs +1 -0
  296. package/dist/packages/components-v3/dist/WidgetTextField/hooks/useGetContainerProperties.js +3 -0
  297. package/dist/packages/components-v3/dist/WidgetTextField/index.cjs +1 -0
  298. package/dist/packages/components-v3/dist/WidgetTextField/index.js +3 -0
  299. package/dist/packages/components-v3/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.cjs +8 -0
  300. package/dist/packages/components-v3/dist/WidgetWrapperWithTitle/WidgetWrapperWithTitle.js +10 -0
  301. package/dist/packages/components-v3/dist/packages/components-v3/src/models/colorsConfig.cjs +26 -0
  302. package/dist/packages/components-v3/dist/packages/components-v3/src/models/colorsConfig.js +25 -0
  303. package/dist/packages/components-v3/dist/packages/components-v3/tokens/aspectRatio/aspectRatio.cjs +16 -0
  304. package/dist/packages/components-v3/dist/packages/components-v3/tokens/aspectRatio/aspectRatio.js +17 -0
  305. package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.cjs +25 -0
  306. package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.js +23 -0
  307. package/dist/packages/components-v3/dist/packages/components-v3/tokens/colors/colors.cjs +51 -0
  308. package/dist/packages/components-v3/dist/packages/components-v3/tokens/colors/colors.js +51 -0
  309. package/dist/packages/components-v3/dist/packages/components-v3/tokens/radius/radius.cjs +64 -0
  310. package/dist/packages/components-v3/dist/packages/components-v3/tokens/radius/radius.js +65 -0
  311. package/dist/packages/components-v3/dist/packages/components-v3/tokens/theme/theme.cjs +18 -0
  312. package/dist/packages/components-v3/dist/packages/components-v3/tokens/theme/theme.js +16 -0
  313. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontFamily.cjs +25 -0
  314. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontFamily.js +25 -0
  315. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontSize.cjs +37 -0
  316. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontSize.js +38 -0
  317. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontWeight.cjs +17 -0
  318. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/fontWeight.js +18 -0
  319. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/letterSpacing.cjs +15 -0
  320. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/letterSpacing.js +16 -0
  321. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/lineHeight.cjs +31 -0
  322. package/dist/packages/components-v3/dist/packages/components-v3/tokens/typography/lineHeight.js +32 -0
  323. package/dist/packages/components-v3/dist/packages/components-v3/tokens/utils.cjs +7 -0
  324. package/dist/packages/components-v3/dist/packages/components-v3/tokens/utils.js +6 -0
  325. package/dist/packages/components-v3/dist/utils/CustomIcon.cjs +2 -0
  326. package/dist/packages/components-v3/dist/utils/CustomIcon.js +4 -0
  327. package/dist/packages/components-v3/dist/utils/resolveTheme.cjs +13 -0
  328. package/dist/packages/components-v3/dist/utils/resolveTheme.js +13 -0
  329. package/dist/packages/components-v3/dist/utils/useGetContentSize.cjs +1 -0
  330. package/dist/packages/components-v3/dist/utils/useGetContentSize.js +3 -0
  331. package/dist/packages/components-v3/dist/utils/useResponsiveValue.cjs +2 -2
  332. package/dist/packages/components-v3/dist/utils/useResponsiveValue.js +2 -2
  333. package/dist/packages/icons/dist/FourPointStar.cjs +16 -1
  334. package/dist/packages/icons/dist/FourPointStar.js +16 -2
  335. package/dist/packages/icons/dist/MagnifyingGlass.cjs +8 -0
  336. package/dist/packages/icons/dist/MagnifyingGlass.js +9 -0
  337. package/dist/packages/icons/dist/MagnifyingThin.cjs +8 -0
  338. package/dist/packages/icons/dist/MagnifyingThin.js +9 -0
  339. package/dist/packages/icons/dist/SendMinimalist.cjs +8 -0
  340. package/dist/packages/icons/dist/SendMinimalist.js +9 -0
  341. package/dist/packages/icons/dist/SendModern.cjs +8 -0
  342. package/dist/packages/icons/dist/SendModern.js +9 -0
  343. package/dist/packages/icons/dist/SendStandard.cjs +8 -0
  344. package/dist/packages/icons/dist/SendStandard.js +9 -0
  345. package/dist/services/amplitudeService/amplitudeService.cjs +36 -8
  346. package/dist/services/amplitudeService/amplitudeService.d.cts +11 -3
  347. package/dist/services/amplitudeService/amplitudeService.d.ts +11 -3
  348. package/dist/services/amplitudeService/amplitudeService.js +36 -8
  349. package/dist/services/userIdentityService/index.cjs +3 -0
  350. package/dist/services/userIdentityService/index.d.cts +2 -0
  351. package/dist/services/userIdentityService/index.d.ts +2 -0
  352. package/dist/services/userIdentityService/index.js +3 -0
  353. package/dist/services/userIdentityService/userIdentityService.cjs +49 -0
  354. package/dist/services/userIdentityService/userIdentityService.d.cts +19 -0
  355. package/dist/services/userIdentityService/userIdentityService.d.ts +19 -0
  356. package/dist/services/userIdentityService/userIdentityService.js +48 -0
  357. package/package.json +14 -5
  358. package/src/application/models/api/userEvent.ts +3 -1
  359. package/src/application/models/chatElementDisplayLocationV3.ts +2 -0
  360. package/src/application/models/frontendConfigV3.ts +1 -1
  361. package/src/application/models/graphql/queries/getColorsAndFrontendQuery.ts +13 -0
  362. package/src/application/models/guards/api/isApiQueryTypedEventAttributes.ts +6 -1
  363. package/src/application/utils/widgetTextRequestToApiRequest.ts +5 -5
  364. package/src/atoms/app/index.ts +9 -7
  365. package/src/atoms/chat/index.ts +0 -1
  366. package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +47 -66
  367. package/src/contexts/amplitudeContext/amplitudeContext.tsx +4 -1
  368. package/src/contexts/enviveContext/enviveContext.tsx +47 -6
  369. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +101 -2
  370. package/src/contexts/graphqlContext/graphqlContext.tsx +42 -42
  371. package/src/contexts/graphqlContext/mockV3Config.ts +18 -6
  372. package/src/contexts/hardcopyContext/hardcopyContext.tsx +29 -0
  373. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +0 -1
  374. package/src/contexts/salesAgentContext/chatAPI.ts +56 -10
  375. package/src/contexts/salesAgentContext/formSubmittedUtils.ts +57 -0
  376. package/src/contexts/salesAgentContext/salesAgentContext.tsx +66 -9
  377. package/src/contexts/salesAgentContext/salesAgentService.ts +42 -11
  378. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +3 -1
  379. package/src/contexts/typesV3.ts +16 -14
  380. package/src/contexts/uiConfigContext/__tests__/uiConfigContext.test.tsx +3 -2
  381. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +18 -131
  382. package/src/contexts/userIdentityContext/userIdentityContext.tsx +47 -42
  383. package/src/hooks/ElementObserver/useElementObserver.ts +2 -1
  384. package/src/hooks/GraphQLConfig/useGraphQLConfig.ts +0 -1
  385. package/src/hooks/Search/__tests__/useSearch.test.tsx +11 -1
  386. package/src/mocks/index.ts +1 -0
  387. package/src/mocks/salesAgentMockData.ts +247 -0
  388. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +17 -15
  389. package/src/services/amplitudeService/amplitudeService.ts +50 -10
  390. package/src/services/userIdentityService/index.ts +1 -0
  391. package/src/services/userIdentityService/userIdentityService.ts +64 -0
  392. package/dist/contexts/featureFlagContext/featureFlagContext.cjs +0 -105
  393. package/dist/contexts/featureFlagContext/featureFlagContext.d.cts +0 -19
  394. package/dist/contexts/featureFlagContext/featureFlagContext.d.ts +0 -19
  395. package/dist/contexts/featureFlagContext/featureFlagContext.js +0 -102
  396. package/dist/contexts/featureFlagContext/index.cjs +0 -4
  397. package/dist/contexts/featureFlagContext/index.d.cts +0 -2
  398. package/dist/contexts/featureFlagContext/index.d.ts +0 -2
  399. package/dist/contexts/featureFlagContext/index.js +0 -3
  400. package/dist/packages/components-v3/dist/src/models/colorsConfig.cjs +0 -26
  401. package/dist/packages/components-v3/dist/src/models/colorsConfig.js +0 -25
  402. package/dist/packages/components-v3/dist/tokens/aspectRatio/aspectRatio.cjs +0 -16
  403. package/dist/packages/components-v3/dist/tokens/aspectRatio/aspectRatio.js +0 -17
  404. package/dist/packages/components-v3/dist/tokens/breakpoints/breakpoints.cjs +0 -25
  405. package/dist/packages/components-v3/dist/tokens/breakpoints/breakpoints.js +0 -23
  406. package/dist/packages/components-v3/dist/tokens/colors/colors.cjs +0 -51
  407. package/dist/packages/components-v3/dist/tokens/colors/colors.js +0 -51
  408. package/dist/packages/components-v3/dist/tokens/radius/radius.cjs +0 -64
  409. package/dist/packages/components-v3/dist/tokens/radius/radius.js +0 -65
  410. package/dist/packages/components-v3/dist/tokens/theme/theme.cjs +0 -13
  411. package/dist/packages/components-v3/dist/tokens/theme/theme.js +0 -12
  412. package/dist/packages/components-v3/dist/tokens/typography/fontFamily.cjs +0 -25
  413. package/dist/packages/components-v3/dist/tokens/typography/fontFamily.js +0 -25
  414. package/dist/packages/components-v3/dist/tokens/typography/fontSize.cjs +0 -37
  415. package/dist/packages/components-v3/dist/tokens/typography/fontSize.js +0 -38
  416. package/dist/packages/components-v3/dist/tokens/typography/fontWeight.cjs +0 -17
  417. package/dist/packages/components-v3/dist/tokens/typography/fontWeight.js +0 -18
  418. package/dist/packages/components-v3/dist/tokens/typography/letterSpacing.cjs +0 -15
  419. package/dist/packages/components-v3/dist/tokens/typography/letterSpacing.js +0 -16
  420. package/dist/packages/components-v3/dist/tokens/typography/lineHeight.cjs +0 -31
  421. package/dist/packages/components-v3/dist/tokens/typography/lineHeight.js +0 -32
  422. package/dist/packages/components-v3/dist/tokens/utils.cjs +0 -7
  423. package/dist/packages/components-v3/dist/tokens/utils.js +0 -6
  424. package/src/contexts/featureFlagContext/featureFlagContext.tsx +0 -180
  425. package/src/contexts/featureFlagContext/index.ts +0 -1
  426. /package/dist/packages/components-v3/dist/{tokens → packages/components-v3/tokens}/typography/typography.cjs +0 -0
  427. /package/dist/packages/components-v3/dist/{tokens → packages/components-v3/tokens}/typography/typography.js +0 -0
@@ -6,9 +6,14 @@ import React, { ReactNode } from "react";
6
6
  declare class FeatureFlagService {
7
7
  private featureGates;
8
8
  constructor(featureGates: OrgConfigFeatureGate[]);
9
+ static getQueryParamFeatureGateOverrides(featureGate: FeatureGates): boolean | undefined;
10
+ static getWindowFeatureGateOverrides(featureGate: FeatureGates): boolean | undefined;
11
+ static getStoredFeatureGateOverrides(featureGate: FeatureGates): boolean | undefined;
12
+ static getFeatureFlagOverride(featureGate: FeatureGates): boolean | undefined;
9
13
  isFeatureGateEnabled: (featureGate: FeatureGates) => boolean;
10
14
  isClientSessionEnabled: () => boolean;
11
15
  getFeatureFlags: () => Record<string, boolean>;
16
+ static persistFeatureGateOverrides(): void;
12
17
  }
13
18
  interface FeatureFlagContextType {
14
19
  featureFlagService: FeatureFlagService | undefined;
@@ -21,4 +26,4 @@ declare const FeatureFlagServiceProvider: React.FC<FeatureFlagServiceProviderPro
21
26
  declare const useFeatureFlagService: () => FeatureFlagContextType;
22
27
  //#endregion
23
28
  export { FeatureFlagContextType, FeatureFlagService, FeatureFlagServiceProvider, useFeatureFlagService };
24
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5kLmN0cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQ29uZmlnUmVzdWx0cyc7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2ZlYXR1cmVHYXRlcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2Uge1xuICAgIHByaXZhdGUgZmVhdHVyZUdhdGVzO1xuICAgIGNvbnN0cnVjdG9yKGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXSk7XG4gICAgaXNGZWF0dXJlR2F0ZUVuYWJsZWQ6IChmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKSA9PiBib29sZWFuO1xuICAgIGlzQ2xpZW50U2Vzc2lvbkVuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG4gICAgZ2V0RmVhdHVyZUZsYWdzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZUZsYWdDb250ZXh0VHlwZSB7XG4gICAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2UgfCB1bmRlZmluZWQ7XG59XG5pbnRlcmZhY2UgRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcyB7XG4gICAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHVzZUZlYXR1cmVGbGFnU2VydmljZTogKCkgPT4gRmVhdHVyZUZsYWdDb250ZXh0VHlwZTtcbmV4cG9ydCB7fTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxJQUFXLHFCQUFxQjtDQUFDO09BQU87T0FBQTtPQUFBO0NBQUE7QUFDeEMsSUFBVyx5QkFBYSxDQUFBLFdBQUEsbUJBQUE7QUFDeEIsSUFBSSxrQ0FBa0M7Q0FBQztPQUFXO09BQUc7Q0FBQTtBQUNyRCxJQUFXLDZCQUE2QjtDQUFDO09BQVc7T0FBWSxNQUFBO0NBQUE7QUFDaEUsSUFBVyx3QkFBd0IsQ0FBQyxXQUFLLHVCQUFBIn0=
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5kLmN0cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQ29uZmlnUmVzdWx0cyc7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2ZlYXR1cmVHYXRlcyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2Uge1xuICAgIHByaXZhdGUgZmVhdHVyZUdhdGVzO1xuICAgIGNvbnN0cnVjdG9yKGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXSk7XG4gICAgc3RhdGljIGdldFF1ZXJ5UGFyYW1GZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBzdGF0aWMgZ2V0V2luZG93RmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgc3RhdGljIGdldFN0b3JlZEZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHN0YXRpYyBnZXRGZWF0dXJlRmxhZ092ZXJyaWRlKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIGlzRmVhdHVyZUdhdGVFbmFibGVkOiAoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcykgPT4gYm9vbGVhbjtcbiAgICBpc0NsaWVudFNlc3Npb25FbmFibGVkOiAoKSA9PiBib29sZWFuO1xuICAgIGdldEZlYXR1cmVGbGFnczogKCkgPT4gUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgc3RhdGljIHBlcnNpc3RGZWF0dXJlR2F0ZU92ZXJyaWRlcygpOiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHtcbiAgICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZSB8IHVuZGVmaW5lZDtcbn1cbmludGVyZmFjZSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzIHtcbiAgICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXI6IFJlYWN0LkZDPEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyUHJvcHM+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlOiAoKSA9PiBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlO1xuZXhwb3J0IHt9O1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUdBLElBQVcscUJBQXFCO0NBQUM7T0FBTztPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hDLElBQVcseUJBQWEsQ0FBQSxXQUFBLG1CQUFBO0FBQ3hCLElBQUksa0NBQWtDO0NBQUM7T0FBVztPQUFHO0NBQUE7QUFDckQsSUFBVyw2QkFBNkI7Q0FBQztPQUFXO09BQXVDLE1BQUM7Q0FBQTtBQUM1RixJQUFXLHdCQUF3QixDQUFDLFdBQVcsdUJBQXVCIn0=
@@ -6,9 +6,14 @@ import React, { ReactNode } from "react";
6
6
  declare class FeatureFlagService {
7
7
  private featureGates;
8
8
  constructor(featureGates: OrgConfigFeatureGate[]);
9
+ static getQueryParamFeatureGateOverrides(featureGate: FeatureGates): boolean | undefined;
10
+ static getWindowFeatureGateOverrides(featureGate: FeatureGates): boolean | undefined;
11
+ static getStoredFeatureGateOverrides(featureGate: FeatureGates): boolean | undefined;
12
+ static getFeatureFlagOverride(featureGate: FeatureGates): boolean | undefined;
9
13
  isFeatureGateEnabled: (featureGate: FeatureGates) => boolean;
10
14
  isClientSessionEnabled: () => boolean;
11
15
  getFeatureFlags: () => Record<string, boolean>;
16
+ static persistFeatureGateOverrides(): void;
12
17
  }
13
18
  interface FeatureFlagContextType {
14
19
  featureFlagService: FeatureFlagService | undefined;
@@ -21,4 +26,4 @@ declare const FeatureFlagServiceProvider: React.FC<FeatureFlagServiceProviderPro
21
26
  declare const useFeatureFlagService: () => FeatureFlagContextType;
22
27
  //#endregion
23
28
  export { FeatureFlagContextType, FeatureFlagService, FeatureFlagServiceProvider, useFeatureFlagService };
24
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgT3JnQ29uZmlnRmVhdHVyZUdhdGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbmltcG9ydCB7IEZlYXR1cmVHYXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZmVhdHVyZUdhdGVzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEZlYXR1cmVGbGFnU2VydmljZSB7XG4gICAgcHJpdmF0ZSBmZWF0dXJlR2F0ZXM7XG4gICAgY29uc3RydWN0b3IoZmVhdHVyZUdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdKTtcbiAgICBpc0ZlYXR1cmVHYXRlRW5hYmxlZDogKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpID0+IGJvb2xlYW47XG4gICAgaXNDbGllbnRTZXNzaW9uRW5hYmxlZDogKCkgPT4gYm9vbGVhbjtcbiAgICBnZXRGZWF0dXJlRmxhZ3M6ICgpID0+IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xufVxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHtcbiAgICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZSB8IHVuZGVmaW5lZDtcbn1cbmludGVyZmFjZSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzIHtcbiAgICBmZWF0dXJlRmxhZ1NlcnZpY2U6IEZlYXR1cmVGbGFnU2VydmljZTtcbiAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXI6IFJlYWN0LkZDPEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyUHJvcHM+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlRmVhdHVyZUZsYWdTZXJ2aWNlOiAoKSA9PiBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlO1xuZXhwb3J0IHt9O1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUdBLElBQVcscUJBQXFCO0NBQUM7T0FBTztPQUFBO09BQUE7Q0FBQTtBQUN4QyxJQUFXLHlCQUFhLENBQUEsV0FBQSxtQkFBQTtBQUN4QixJQUFJLGtDQUFrQztDQUFDO09BQVc7T0FBRztDQUFBO0FBQ3JELElBQVcsNkJBQTZCO0NBQUM7T0FBVztPQUFZLE1BQUE7Q0FBQTtBQUNoRSxJQUFXLHdCQUF3QixDQUFDLFdBQUssdUJBQUEifQ==
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgT3JnQ29uZmlnRmVhdHVyZUdhdGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbmltcG9ydCB7IEZlYXR1cmVHYXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZmVhdHVyZUdhdGVzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEZlYXR1cmVGbGFnU2VydmljZSB7XG4gICAgcHJpdmF0ZSBmZWF0dXJlR2F0ZXM7XG4gICAgY29uc3RydWN0b3IoZmVhdHVyZUdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdKTtcbiAgICBzdGF0aWMgZ2V0UXVlcnlQYXJhbUZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHN0YXRpYyBnZXRXaW5kb3dGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBzdGF0aWMgZ2V0U3RvcmVkRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgc3RhdGljIGdldEZlYXR1cmVGbGFnT3ZlcnJpZGUoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgaXNGZWF0dXJlR2F0ZUVuYWJsZWQ6IChmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKSA9PiBib29sZWFuO1xuICAgIGlzQ2xpZW50U2Vzc2lvbkVuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG4gICAgZ2V0RmVhdHVyZUZsYWdzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICBzdGF0aWMgcGVyc2lzdEZlYXR1cmVHYXRlT3ZlcnJpZGVzKCk6IHZvaWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVGbGFnQ29udGV4dFR5cGUge1xuICAgIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlIHwgdW5kZWZpbmVkO1xufVxuaW50ZXJmYWNlIEZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyUHJvcHMge1xuICAgIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcjogUmVhY3QuRkM8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcz47XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VGZWF0dXJlRmxhZ1NlcnZpY2U6ICgpID0+IEZlYXR1cmVGbGFnQ29udGV4dFR5cGU7XG5leHBvcnQge307XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsSUFBVyxxQkFBcUI7Q0FBQztPQUFPO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUE7QUFDeEMsSUFBVyx5QkFBYSxDQUFBLFdBQUEsbUJBQUE7QUFDeEIsSUFBSSxrQ0FBa0M7Q0FBQztPQUFXO09BQUc7Q0FBQTtBQUNyRCxJQUFXLDZCQUE2QjtDQUFDO09BQVc7T0FBdUMsTUFBQztDQUFBO0FBQzVGLElBQVcsd0JBQXdCLENBQUMsV0FBVyx1QkFBdUIifQ==
@@ -1,13 +1,16 @@
1
- import logger_default from "../../application/logging/logger.js";
2
1
  import { FeatureGates } from "../../application/models/featureGates.js";
2
+ import logger_default from "../../application/logging/logger.js";
3
3
  import React, { createContext, useContext, useMemo } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx
7
- var FeatureFlagService = class {
7
+ const FEATURE_FLAGS_STORAGE_KEY = "spiffy-feature-flags";
8
+ var FeatureFlagService = class FeatureFlagService {
8
9
  constructor(featureGates) {
9
10
  this.isFeatureGateEnabled = (featureGate) => {
10
11
  const gateValue = this.featureGates.find((gate) => gate.name === featureGate);
12
+ const featureFlagOverride = FeatureFlagService.getFeatureFlagOverride(featureGate);
13
+ if (featureFlagOverride !== void 0) return featureFlagOverride;
11
14
  if (gateValue == null || gateValue.value == null) {
12
15
  logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} value is undefined - returning false`);
13
16
  return false;
@@ -20,6 +23,57 @@ var FeatureFlagService = class {
20
23
  };
21
24
  this.featureGates = featureGates;
22
25
  }
26
+ static getQueryParamFeatureGateOverrides(featureGate) {
27
+ const url = window.location?.href ?? "";
28
+ if (url.includes("?")) {
29
+ const urlObj = new URL(url);
30
+ const params = new URLSearchParams(urlObj.search);
31
+ const value = Object.fromEntries(params.entries())[featureGate];
32
+ if (value != null) return value === "true";
33
+ }
34
+ }
35
+ static getWindowFeatureGateOverrides(featureGate) {
36
+ if (typeof window === "undefined") return;
37
+ const windowOverride = window;
38
+ const value = (windowOverride?._envive?.featureOverrides ?? windowOverride?._spiffy?.featureOverrides)?.[String(featureGate)];
39
+ if (value != null) return value;
40
+ }
41
+ static getStoredFeatureGateOverrides(featureGate) {
42
+ if (typeof window === "undefined" || typeof window.localStorage === "undefined") return;
43
+ try {
44
+ const featureFlags = window.localStorage.getItem(FEATURE_FLAGS_STORAGE_KEY);
45
+ if (!featureFlags) return;
46
+ return JSON.parse(featureFlags)[featureGate];
47
+ } catch (err) {
48
+ logger_default.logError("[spiffy-ai] getStoredFeatureGateOverrides: error parsing feature flags", err);
49
+ return;
50
+ }
51
+ }
52
+ static getFeatureFlagOverride(featureGate) {
53
+ const queryOverride = FeatureFlagService.getQueryParamFeatureGateOverrides(featureGate);
54
+ if (queryOverride != null) {
55
+ logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by URL param. New value: ${queryOverride}`);
56
+ return queryOverride;
57
+ }
58
+ const windowOverride = FeatureFlagService.getWindowFeatureGateOverrides(featureGate);
59
+ if (windowOverride != null) {
60
+ logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by window param. New value: ${windowOverride}`);
61
+ return windowOverride;
62
+ }
63
+ const storedOverride = FeatureFlagService.getStoredFeatureGateOverrides(featureGate);
64
+ if (storedOverride != null) {
65
+ logger_default.logDebug(`[spiffy-ai] isFeatureGateEnabled featureGate:${featureGate} overridden by stored value. New value: ${storedOverride}`);
66
+ return storedOverride;
67
+ }
68
+ }
69
+ static persistFeatureGateOverrides() {
70
+ if (typeof window === "undefined" || typeof window.localStorage === "undefined") return;
71
+ const overrides = Object.values(FeatureGates).map((featureGate) => [featureGate, FeatureFlagService.getFeatureFlagOverride(featureGate)]).filter(([, value]) => value !== void 0).reduce((acc, [key, value]) => ({
72
+ ...acc,
73
+ [key]: value
74
+ }), {});
75
+ window.localStorage.setItem(FEATURE_FLAGS_STORAGE_KEY, JSON.stringify(overrides));
76
+ }
23
77
  };
24
78
  const FeatureFlagServiceContext = createContext(void 0);
25
79
  const FeatureFlagServiceProvider = ({ featureFlagService: inputService, children }) => {
@@ -37,4 +91,4 @@ const useFeatureFlagService = () => {
37
91
 
38
92
  //#endregion
39
93
  export { FeatureFlagService, FeatureFlagServiceProvider, useFeatureFlagService };
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5qcyIsIm5hbWVzIjpbIkZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRmVhdHVyZUdhdGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG4vLyBUaGlzIGlzIHRoZSBjbGFzcyB0aGF0IHdhcyBwcmV2aW91c2x5IGltcGxpY2l0bHkgdXNlZCBvciBkZWZpbmVkIGVsc2V3aGVyZVxuZXhwb3J0IGNsYXNzIEZlYXR1cmVGbGFnU2VydmljZSB7XG4gIHByaXZhdGUgZmVhdHVyZUdhdGVzOiBPcmdDb25maWdGZWF0dXJlR2F0ZVtdO1xuXG4gIGNvbnN0cnVjdG9yKGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXSkge1xuICAgIHRoaXMuZmVhdHVyZUdhdGVzID0gZmVhdHVyZUdhdGVzO1xuICB9XG5cbiAgaXNGZWF0dXJlR2F0ZUVuYWJsZWQgPSAoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGdhdGVWYWx1ZSA9IHRoaXMuZmVhdHVyZUdhdGVzLmZpbmQoZ2F0ZSA9PiBnYXRlLm5hbWUgPT09IGZlYXR1cmVHYXRlKTtcblxuICAgIC8vIFRPRE86IEFkZCBsb2dpYyBmb3Igb3ZlcnJpZGVzIChxdWVyeSBwYXJhbXMsIHdpbmRvdywgc3RvcmVkKSBpZiBuZWVkZWQsIHNpbWlsYXIgdG8gdGhlIG9sZCBGZWF0dXJlRmxhZ0NvbnRleHQudHN4XG4gICAgLy8gRm9yIG5vdywgZGlyZWN0IHZhbHVlIGZyb20gY29uZmlnIGlzIHVzZWQuXG5cbiAgICBpZiAoZ2F0ZVZhbHVlID09IG51bGwgfHwgZ2F0ZVZhbHVlLnZhbHVlID09IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IHZhbHVlIGlzIHVuZGVmaW5lZCAtIHJldHVybmluZyBmYWxzZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0ZVZhbHVlLnZhbHVlO1xuICB9O1xuXG4gIC8vIEVuc3VyZSB0aGF0IHN0YW5kYXJkIG92ZXJyaWRlcyB3b3JrIGFzIGV4cGVjdGVkXG4gIGlzQ2xpZW50U2Vzc2lvbkVuYWJsZWQgPSAoKTogYm9vbGVhbiA9PlxuICAgIHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoRmVhdHVyZUdhdGVzLklzQ2xpZW50U2Vzc2lvbkVuYWJsZWQpO1xuXG4gIGdldEZlYXR1cmVGbGFncyA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC52YWx1ZXMoRmVhdHVyZUdhdGVzKS5tYXAoKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpID0+IFtcbiAgICAgICAgZmVhdHVyZUdhdGUsXG4gICAgICAgIHRoaXMuaXNGZWF0dXJlR2F0ZUVuYWJsZWQoZmVhdHVyZUdhdGUpLFxuICAgICAgXSksXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2UgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEZlYXR1cmVGbGFnQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmludGVyZmFjZSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcjogUmVhY3QuRkM8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IGlucHV0U2VydmljZSxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGZlYXR1cmVGbGFnU2VydmljZTogaW5wdXRTZXJ2aWNlLFxuICAgIH0pLFxuICAgIFtpbnB1dFNlcnZpY2VdLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9GZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUZlYXR1cmVGbGFnU2VydmljZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCk7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUZlYXR1cmVGbGFnU2VydmljZSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgRmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLElBQWEscUJBQWIsTUFBZ0M7Q0FHOUIsWUFBWSxjQUFzQzsrQkFJMUIsZ0JBQXVDO0dBQzdELE1BQU0sWUFBWSxLQUFLLGFBQWEsTUFBSyxTQUFRLEtBQUssU0FBUyxZQUFZO0FBSzNFLE9BQUksYUFBYSxRQUFRLFVBQVUsU0FBUyxNQUFNO0FBQ2hELG1CQUFPLFNBQ0wsZ0RBQWdELFlBQVksdUNBQzdEO0FBQ0QsV0FBTzs7QUFFVCxVQUFPLFVBQVU7O3NDQUtqQixLQUFLLHFCQUFxQixhQUFhLHVCQUF1QjsrQkFFZjtBQUMvQyxVQUFPLE9BQU8sWUFDWixPQUFPLE9BQU8sYUFBYSxDQUFDLEtBQUssZ0JBQThCLENBQzdELGFBQ0EsS0FBSyxxQkFBcUIsWUFBWSxDQUN2QyxDQUFDLENBQ0g7O0FBNUJELE9BQUssZUFBZTs7O0FBb0N4QixNQUFNLDRCQUE0QixjQUFrRCxPQUFVO0FBTzlGLE1BQWFBLDhCQUF5RSxFQUNwRixvQkFBb0IsY0FDcEIsZUFDSTtDQUNKLE1BQU0sZUFBZSxlQUNaLEVBQ0wsb0JBQW9CLGNBQ3JCLEdBQ0QsQ0FBQyxhQUFhLENBQ2Y7QUFFRCxRQUNFLG9CQUFDLDBCQUEwQjtFQUFTLE9BQU87RUFDeEM7R0FDa0M7O0FBSXpDLE1BQWEsOEJBQThCO0NBQ3pDLE1BQU0sVUFBVSxXQUFXLDBCQUEwQjtBQUNyRCxLQUFJLFlBQVksT0FDZCxPQUFNLElBQUksTUFBTSx5RUFBeUU7QUFFM0YsUUFBTyJ9
94
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC5qcyIsIm5hbWVzIjpbIkZlYXR1cmVGbGFnU2VydmljZVByb3ZpZGVyOiBSZWFjdC5GQzxGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzPiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcmdDb25maWdGZWF0dXJlR2F0ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgRmVhdHVyZUdhdGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG5jb25zdCBGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZID0gJ3NwaWZmeS1mZWF0dXJlLWZsYWdzJztcblxuLy8gVGhpcyBpcyB0aGUgY2xhc3MgdGhhdCB3YXMgcHJldmlvdXNseSBpbXBsaWNpdGx5IHVzZWQgb3IgZGVmaW5lZCBlbHNld2hlcmVcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2Uge1xuICBwcml2YXRlIGZlYXR1cmVHYXRlczogT3JnQ29uZmlnRmVhdHVyZUdhdGVbXTtcblxuICBjb25zdHJ1Y3RvcihmZWF0dXJlR2F0ZXM6IE9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW10pIHtcbiAgICB0aGlzLmZlYXR1cmVHYXRlcyA9IGZlYXR1cmVHYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXRRdWVyeVBhcmFtRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbj8uaHJlZiA/PyAnJztcbiAgICBpZiAodXJsLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXJsT2JqLnNlYXJjaCk7XG4gICAgICBjb25zdCBwYXJhbXNPYmogPSBPYmplY3QuZnJvbUVudHJpZXMocGFyYW1zLmVudHJpZXMoKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc09ialtmZWF0dXJlR2F0ZV07XG5cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0V2luZG93RmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgd2luZG93T3ZlcnJpZGUgPSB3aW5kb3cgYXMgV2luZG93ICYge1xuICAgICAgX2Vudml2ZT86IHsgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IH07XG4gICAgICBfc3BpZmZ5PzogeyBmZWF0dXJlT3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfTtcbiAgICB9O1xuICAgIGNvbnN0IGZlYXR1cmVPdmVycmlkZXMgPVxuICAgICAgd2luZG93T3ZlcnJpZGU/Ll9lbnZpdmU/LmZlYXR1cmVPdmVycmlkZXMgPz8gd2luZG93T3ZlcnJpZGU/Ll9zcGlmZnk/LmZlYXR1cmVPdmVycmlkZXM7XG4gICAgY29uc3QgdmFsdWUgPSBmZWF0dXJlT3ZlcnJpZGVzPy5bU3RyaW5nKGZlYXR1cmVHYXRlKV07XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFncyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShGRUFUVVJFX0ZMQUdTX1NUT1JBR0VfS0VZKTtcbiAgICAgIGlmICghZmVhdHVyZUZsYWdzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ3NPYmogPSBKU09OLnBhcnNlKGZlYXR1cmVGbGFncykgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgICByZXR1cm4gZmVhdHVyZUZsYWdzT2JqW2ZlYXR1cmVHYXRlXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgJ1tzcGlmZnktYWldIGdldFN0b3JlZEZlYXR1cmVHYXRlT3ZlcnJpZGVzOiBlcnJvciBwYXJzaW5nIGZlYXR1cmUgZmxhZ3MnLFxuICAgICAgICBlcnIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RmVhdHVyZUZsYWdPdmVycmlkZShmZWF0dXJlR2F0ZTogRmVhdHVyZUdhdGVzKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcXVlcnlPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRRdWVyeVBhcmFtRmVhdHVyZUdhdGVPdmVycmlkZXMoZmVhdHVyZUdhdGUpO1xuICAgIGlmIChxdWVyeU92ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IG92ZXJyaWRkZW4gYnkgVVJMIHBhcmFtLiBOZXcgdmFsdWU6ICR7cXVlcnlPdmVycmlkZX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBxdWVyeU92ZXJyaWRlO1xuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd092ZXJyaWRlID0gRmVhdHVyZUZsYWdTZXJ2aWNlLmdldFdpbmRvd0ZlYXR1cmVHYXRlT3ZlcnJpZGVzKGZlYXR1cmVHYXRlKTtcbiAgICBpZiAod2luZG93T3ZlcnJpZGUgIT0gbnVsbCkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgW3NwaWZmeS1haV0gaXNGZWF0dXJlR2F0ZUVuYWJsZWQgZmVhdHVyZUdhdGU6JHtmZWF0dXJlR2F0ZX0gb3ZlcnJpZGRlbiBieSB3aW5kb3cgcGFyYW0uIE5ldyB2YWx1ZTogJHt3aW5kb3dPdmVycmlkZX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB3aW5kb3dPdmVycmlkZTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZWRPdmVycmlkZSA9IEZlYXR1cmVGbGFnU2VydmljZS5nZXRTdG9yZWRGZWF0dXJlR2F0ZU92ZXJyaWRlcyhmZWF0dXJlR2F0ZSk7XG4gICAgaWYgKHN0b3JlZE92ZXJyaWRlICE9IG51bGwpIHtcbiAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgYFtzcGlmZnktYWldIGlzRmVhdHVyZUdhdGVFbmFibGVkIGZlYXR1cmVHYXRlOiR7ZmVhdHVyZUdhdGV9IG92ZXJyaWRkZW4gYnkgc3RvcmVkIHZhbHVlLiBOZXcgdmFsdWU6ICR7c3RvcmVkT3ZlcnJpZGV9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RvcmVkT3ZlcnJpZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzRmVhdHVyZUdhdGVFbmFibGVkID0gKGZlYXR1cmVHYXRlOiBGZWF0dXJlR2F0ZXMpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBnYXRlVmFsdWUgPSB0aGlzLmZlYXR1cmVHYXRlcy5maW5kKGdhdGUgPT4gZ2F0ZS5uYW1lID09PSBmZWF0dXJlR2F0ZSk7XG5cbiAgICBjb25zdCBmZWF0dXJlRmxhZ092ZXJyaWRlID0gRmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZlYXR1cmVGbGFnT3ZlcnJpZGUoZmVhdHVyZUdhdGUpO1xuICAgIGlmIChmZWF0dXJlRmxhZ092ZXJyaWRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmZWF0dXJlRmxhZ092ZXJyaWRlO1xuICAgIH1cblxuICAgIGlmIChnYXRlVmFsdWUgPT0gbnVsbCB8fCBnYXRlVmFsdWUudmFsdWUgPT0gbnVsbCkge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgW3NwaWZmeS1haV0gaXNGZWF0dXJlR2F0ZUVuYWJsZWQgZmVhdHVyZUdhdGU6JHtmZWF0dXJlR2F0ZX0gdmFsdWUgaXMgdW5kZWZpbmVkIC0gcmV0dXJuaW5nIGZhbHNlYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBnYXRlVmFsdWUudmFsdWU7XG4gIH07XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3RhbmRhcmQgb3ZlcnJpZGVzIHdvcmsgYXMgZXhwZWN0ZWRcbiAgaXNDbGllbnRTZXNzaW9uRW5hYmxlZCA9ICgpOiBib29sZWFuID0+XG4gICAgdGhpcy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChGZWF0dXJlR2F0ZXMuSXNDbGllbnRTZXNzaW9uRW5hYmxlZCk7XG5cbiAgZ2V0RmVhdHVyZUZsYWdzID0gKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LnZhbHVlcyhGZWF0dXJlR2F0ZXMpLm1hcCgoZmVhdHVyZUdhdGU6IEZlYXR1cmVHYXRlcykgPT4gW1xuICAgICAgICBmZWF0dXJlR2F0ZSxcbiAgICAgICAgdGhpcy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChmZWF0dXJlR2F0ZSksXG4gICAgICBdKSxcbiAgICApO1xuICB9O1xuXG4gIHN0YXRpYyBwZXJzaXN0RmVhdHVyZUdhdGVPdmVycmlkZXMoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdmVycmlkZXMgPSBPYmplY3QudmFsdWVzKEZlYXR1cmVHYXRlcylcbiAgICAgIC5tYXAoXG4gICAgICAgIGZlYXR1cmVHYXRlID0+XG4gICAgICAgICAgW2ZlYXR1cmVHYXRlLCBGZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdPdmVycmlkZShmZWF0dXJlR2F0ZSldIGFzIGNvbnN0LFxuICAgICAgKVxuICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoeyAuLi5hY2MsIFtrZXldOiB2YWx1ZSEgfSksIHt9KTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oRkVBVFVSRV9GTEFHU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkob3ZlcnJpZGVzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbnRleHRUeXBlIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2UgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEZlYXR1cmVGbGFnQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmludGVyZmFjZSBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlclByb3BzIHtcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBGZWF0dXJlRmxhZ1NlcnZpY2VQcm92aWRlcjogUmVhY3QuRkM8RmVhdHVyZUZsYWdTZXJ2aWNlUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBmZWF0dXJlRmxhZ1NlcnZpY2U6IGlucHV0U2VydmljZSxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGZlYXR1cmVGbGFnU2VydmljZTogaW5wdXRTZXJ2aWNlLFxuICAgIH0pLFxuICAgIFtpbnB1dFNlcnZpY2VdLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9GZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUZlYXR1cmVGbGFnU2VydmljZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dCk7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUZlYXR1cmVGbGFnU2VydmljZSBtdXN0IGJlIHVzZWQgd2l0aGluIGEg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
@@ -1,33 +1,23 @@
1
1
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
2
  const require_contexts_types = require('../types.cjs');
3
3
  const require_contexts_typesV3 = require('../typesV3.cjs');
4
- const require_logger = require('../../application/logging/logger.cjs');
5
- const require_config_versions = require('../../types/config-versions.cjs');
6
4
  const require_getMerchantOrgIdQuery = require('../../application/models/graphql/queries/getMerchantOrgIdQuery.cjs');
5
+ const require_logger = require('../../application/logging/logger.cjs');
7
6
  const require_snakeToCamelTransformer = require('../../application/models/utils/snakeToCamelTransformer.cjs');
8
7
  const require_validateGraphQLFrontendConfig = require('../../application/models/validators/validateGraphQLFrontendConfig.cjs');
9
8
  const require_validateGraphQLOrgId = require('../../application/models/validators/validateGraphQLOrgId.cjs');
10
9
  require('../../application/models/index.cjs');
11
10
  const require_enviveConfig = require('../../atoms/envive/enviveConfig.cjs');
11
+ const require_getColorsAndFrontendQuery = require('../../application/models/graphql/queries/getColorsAndFrontendQuery.cjs');
12
+ const require_types = require('../../packages/components-v3/dist/FloatingButton/types/types.cjs');
13
+ require('../../packages/components-v3/dist/FloatingButton/index.cjs');
12
14
  const require_mockV3Config = require('./mockV3Config.cjs');
13
15
  let react = require("react");
14
- react = require_rolldown_runtime.__toESM(react);
15
16
  let jotai = require("jotai");
16
17
  let react_jsx_runtime = require("react/jsx-runtime");
17
18
 
18
19
  //#region src/contexts/graphqlContext/graphqlContext.tsx
19
20
  const GraphQLContext = (0, react.createContext)(null);
20
- const colorsAndFrontendConfigQuery = () => `
21
- query ($version: String = "${require_config_versions.configVersion()}") {
22
- me {
23
- getProductsConfigByVersion(version: $version) {
24
- frontend { values }
25
- colors { values }
26
- v_three_config { values }
27
- }
28
- }
29
- }
30
- `;
31
21
  const DEFAULT_PAGE_VARIANTS = [{
32
22
  variantId: "plp",
33
23
  variantType: "plp",
@@ -42,10 +32,10 @@ const DEFAULT_PAGE_VARIANTS = [{
42
32
  variantTests: [{ testType: require_contexts_types.PageVariantTestType.UrlResolver }]
43
33
  }];
44
34
  const mapPositionToCamelCase = (position) => {
45
- if (position === "bottom-left") return "bottomLeft";
46
- if (position === "middle-left") return "middleLeft";
47
- if (position === "middle-right") return "middleRight";
48
- if (position === "bottom-right") return "bottomRight";
35
+ if (position === "bottom-left") return require_types.FloatingButtonLocation.BOTTOM_LEFT;
36
+ if (position === "middle-left") return require_types.FloatingButtonLocation.MIDDLE_LEFT;
37
+ if (position === "middle-right") return require_types.FloatingButtonLocation.MIDDLE_RIGHT;
38
+ if (position === "bottom-right") return require_types.FloatingButtonLocation.BOTTOM_RIGHT;
49
39
  throw new Error(`Invalid position: ${position}`);
50
40
  };
51
41
  /**
@@ -135,10 +125,14 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
135
125
  }, [executeQuery]);
136
126
  const getV3Config = (0, react.useCallback)(async () => {
137
127
  try {
138
- const query = await colorsAndFrontendConfigQuery();
128
+ const query = await require_getColorsAndFrontendQuery.getColorsAndFrontendQuery();
139
129
  if (!query) throw new Error("Colors and frontend config query is not defined");
140
- const v3RootConfig = (await executeQuery(query)).me.getProductsConfigByVersion?.v_three_config?.values;
130
+ const response = await executeQuery(query);
131
+ const v3RootConfig = response.me.getProductsConfigByVersion?.v_three_config?.values;
132
+ const frontendValues = response.me.getProductsConfigByVersion?.frontend?.values;
141
133
  const v3FrontendConfig = v3FrontendConfigCleanup(require_snakeToCamelTransformer.transformSnakeToCamel(v3RootConfig));
134
+ const frontendMerchantOverrideCss = frontendValues?.merchant_override_css;
135
+ const merchantOverrideCss = v3FrontendConfig.uiConfigs?.merchantOverrideCss || frontendMerchantOverrideCss;
142
136
  const v3MountingConfigs = (require_snakeToCamelTransformer.transformSnakeToCamel(v3RootConfig?.mounting_configs) ?? []).reduce((acc, { key, config }) => {
143
137
  acc[key] = require_validateGraphQLFrontendConfig.validateAndTransformMountingConfig(config, key);
144
138
  return acc;
@@ -150,14 +144,37 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
150
144
  }]));
151
145
  const v3pageVariants = Array.isArray(v3RootConfig?.page_variants) ? v3RootConfig?.page_variants.map(require_validateGraphQLFrontendConfig.validateAndTransformPageVariants) : DEFAULT_PAGE_VARIANTS;
152
146
  const v3ColorsConfig = require_snakeToCamelTransformer.transformSnakeToCamel(v3RootConfig?.colors?.values);
153
- if (!v3RootConfig && mockV3ConfigToDeprecatedConfig) return {
154
- colorsConfig: !window.location.href.includes("globals=merchant") ? require_mockV3Config.mockV3ColorsConfig : v3ColorsConfig,
155
- frontendConfig: require_mockV3Config.mockV3FrontendConfig
156
- };
147
+ const isSemanticColors = !window.location.href.includes("globals=merchant");
148
+ const isStorybook = window.top?.location.href.includes("?path=");
149
+ if (!v3RootConfig && mockV3ConfigToDeprecatedConfig || isStorybook && isSemanticColors) {
150
+ require_logger.default.logInfo("GraphQLContext | Returning mock v3 config", {
151
+ colorsConfig: require_mockV3Config.mockV3ColorsConfig,
152
+ frontendConfig: require_mockV3Config.mockV3FrontendConfig
153
+ });
154
+ return {
155
+ colorsConfig: isSemanticColors ? require_mockV3Config.mockV3ColorsConfig : v3ColorsConfig,
156
+ frontendConfig: require_mockV3Config.mockV3FrontendConfig,
157
+ orgPageConfig: {
158
+ pageVariants: [],
159
+ widgetConfigs: {},
160
+ mountingConfigs: {}
161
+ }
162
+ };
163
+ }
164
+ require_logger.default.logInfo("GraphQLContext | Returning v3 config", {
165
+ colorsConfig: v3ColorsConfig,
166
+ frontendConfig: v3FrontendConfig,
167
+ orgPageConfig: {
168
+ pageVariants: v3pageVariants,
169
+ widgetConfigs: v3WidgetConfigs,
170
+ mountingConfigs: v3MountingConfigs
171
+ }
172
+ });
157
173
  return {
158
174
  colorsConfig: v3ColorsConfig,
159
175
  frontendConfig: {
160
176
  ...v3FrontendConfig,
177
+ merchantOverrideCss,
161
178
  widgetConfigs: v3WidgetConfigs
162
179
  },
163
180
  orgPageConfig: {
@@ -176,7 +193,7 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
176
193
  }, [executeQuery, mockV3ConfigToDeprecatedConfig]);
177
194
  const getColorsAndFrontendConfig = (0, react.useCallback)(async () => {
178
195
  try {
179
- const query = await colorsAndFrontendConfigQuery();
196
+ const query = await require_getColorsAndFrontendQuery.getColorsAndFrontendQuery();
180
197
  if (!query) throw new Error("Colors and frontend config query is not defined");
181
198
  const response = await executeQuery(query);
182
199
  if (response.me.getProductsConfigByVersion?.version !== require_contexts_typesV3.ConfigVersionEnum.V3 && !mockV3ConfigToDeprecatedConfig) {
@@ -202,8 +219,11 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
202
219
  }
203
220
  }, [executeQuery]);
204
221
  const getConfig = (0, react.useCallback)(async () => {
205
- console.log("GraphQLProvider: getConfig: requestV3Config", requestV3Config);
206
- if (requestV3Config) return getV3Config();
222
+ if (requestV3Config) {
223
+ require_logger.default.logInfo("GraphQLContext | Getting v3 config", requestV3Config);
224
+ return getV3Config();
225
+ }
226
+ require_logger.default.logInfo("GraphQLContext | Getting colors and frontend config", requestV3Config);
207
227
  return getColorsAndFrontendConfig();
208
228
  }, [
209
229
  getColorsAndFrontendConfig,
@@ -239,4 +259,4 @@ const useGraphQLClient = () => {
239
259
  //#endregion
240
260
  exports.GraphQLProvider = GraphQLProvider;
241
261
  exports.useGraphQLClient = useGraphQLClient;
242
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbnRleHQuY2pzIiwibmFtZXMiOlsiY29uZmlnVmVyc2lvbiIsIkRFRkFVTFRfUEFHRV9WQVJJQU5UUzogUGFnZVZhcmlhbnRDb25maWdbXSIsIlBhZ2VWYXJpYW50VGVzdFR5cGUiLCJvcmdMZXZlbEFwaUtleUF0b20iLCJiYXNlVXJsQXRvbSIsInZhbGlkYXRlR3JhcGhRTE9yZ0lkIiwiZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5IiwidHJhbnNmb3JtU25ha2VUb0NhbWVsIiwidmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyIsInYzcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdIiwidmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHMiLCJtb2NrVjNDb2xvcnNDb25maWciLCJtb2NrVjNGcm9udGVuZENvbmZpZyIsIkNvbmZpZ1ZlcnNpb25FbnVtIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2dyYXBocWxDb250ZXh0L2dyYXBocWxDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGJhc2VVcmxBdG9tLCBvcmdMZXZlbEFwaUtleUF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnknO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFMT3JnSWQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQnO1xuaW1wb3J0IHtcbiAgR2V0TWVyY2hhbnRDb2xvcnNRdWVyeURhdGEsXG4gIEdldE1lcmNoYW50RnJvbnRlbmRDb25maWdRdWVyeURhdGEsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbCc7XG5pbXBvcnQgeyBDb2xvck1hcHBpbmcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZyc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZnJvbnRlbmRDb25maWcnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgY29uZmlnVmVyc2lvbiB9IGZyb20gJ3NyYy90eXBlcy9jb25maWctdmVyc2lvbnMnO1xuaW1wb3J0IHtcbiAgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwLFxuICB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwsXG4gIHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcsXG4gIHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzLFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnVjMnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZ1YzJztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICcuL21vY2tWM0NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdWZXJzaW9uRW51bSwgUG9zaXRpb24sIFdpZGdldENvbmZpZ1YzIH0gZnJvbSAnLi4vdHlwZXNWMyc7XG5pbXBvcnQge1xuICBPcmdQYWdlQ29uZmlnLFxuICBQYWdlVmFyaWFudENvbmZpZyxcbiAgUGFnZVZhcmlhbnRUZXN0VHlwZSxcbiAgV2lkZ2V0TW91bnRpbmdDb25maWcsXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW50ZXJmYWNlIEJhc2VNZUNvbmZpZ1F1ZXJ5UmVzcG9uc2Uge1xuICBtZToge1xuICAgIG9yZz86IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgfTtcbiAgICBnZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj86IHtcbiAgICAgIGZyb250ZW5kPzoge1xuICAgICAgICB2YWx1ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxHZXRNZXJjaGFudEZyb250ZW5kQ29uZmlnUXVlcnlEYXRhPjtcbiAgICAgIH07XG4gICAgICBjb2xvcnM/OiB7IHZhbHVlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEdldE1lcmNoYW50Q29sb3JzUXVlcnlEYXRhPiB9O1xuICAgIH07XG4gIH07XG59XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxDb2xvck1hcHBpbmc+O1xuZXhwb3J0IHR5cGUgRnJvbnRlbmRDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZz47XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcbmV4cG9ydCB0eXBlIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZ1YzPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhRbENvbmZpZ1ZhbHVlcyA9IHtcbiAgY29sb3JzQ29uZmlnPzogQ29sb3JzQ29uZmlnUmVzcG9uc2UgfCBDb2xvcnNDb25maWdWM1Jlc3BvbnNlO1xuICBmcm9udGVuZENvbmZpZz86IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZyB8IEZyb250ZW5kQ29uZmlnVjM+O1xuICBvcmdQYWdlQ29uZmlnPzogT3JnUGFnZUNvbmZpZztcbn07XG5cbmludGVyZmFjZSBHcmFwaFFMQ29udGV4dFZhbHVlIHtcbiAgZXhlY3V0ZVF1ZXJ5OiA8VD4ocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8VD47XG4gIGdldE9yZ0lkOiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBnZXRWM0NvbmZpZzogKCkgPT4gUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPjtcbiAgZ2V0Q29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBHcmFwaFFMQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8R3JhcGhRTENvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuXG5jb25zdCBjb2xvcnNBbmRGcm9udGVuZENvbmZpZ1F1ZXJ5ID0gKCkgPT4gYFxuICBxdWVyeSAoJHZlcnNpb246IFN0cmluZyA9IFwiJHtjb25maWdWZXJzaW9uKCl9XCIpIHtcbiAgICBtZSB7XG4gICAgICBnZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbih2ZXJzaW9uOiAkdmVyc2lvbikge1xuICAgICAgICBmcm9udGVuZCB7IHZhbHVlcyB9XG4gICAgICAgIGNvbG9ycyB7IHZhbHVlcyB9XG4gICAgICAgIHZfdGhyZWVfY29uZmlnIHsgdmFsdWVzIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbnR5cGUgR3JhcGhRTFByb3ZpZGVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIHJlcXVlc3RWM0NvbmZpZz86IGJvb2xlYW47XG4gIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZz86IGJvb2xlYW47XG59O1xuXG5jb25zdCBERUZBVUxUX1BBR0VfVkFSSUFOVFM6IFBhZ2VWYXJpYW50Q29uZmlnW10gPSBbXG4gIHtcbiAgICB2YXJpYW50SWQ6ICdwbHAnLFxuICAgIHZhcmlhbnRUeXBlOiAncGxwJyxcbiAgICBwbHBJZEV4dHJhY3RvcjogJ3VybC1yZXNvbHZlci1wbHAtaWQnLFxuICAgIHdpZGdldE1vdW50aW5nOiBbXSxcbiAgICB2YXJpYW50VGVzdHM6IFtcbiAgICAgIHtcbiAgICAgICAgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICB2YXJpYW50SWQ6ICdwZHAnLFxuICAgIHZhcmlhbnRUeXBlOiAncGRwJyxcbiAgICBwcm9kdWN0SWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcHJvZHVjdC1pZCcsXG4gICAgd2lkZ2V0TW91bnRpbmc6IFtdLFxuICAgIHZhcmlhbnRUZXN0czogW1xuICAgICAge1xuICAgICAgICB0ZXN0VHlwZTogUGFnZVZhcmlhbnRUZXN0VHlwZS5VcmxSZXNvbHZlcixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbl07XG5cbmNvbnN0IG1hcFBvc2l0aW9uVG9DYW1lbENhc2UgPSAocG9zaXRpb246IHN0cmluZyk6IFBvc2l0aW9uID0+IHtcbiAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgcmV0dXJuICdib3R0b21MZWZ0JztcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdtaWRkbGUtbGVmdCcpIHtcbiAgICByZXR1cm4gJ21pZGRsZUxlZnQnO1xuICB9XG4gIGlmIChwb3NpdGlvbiA9PT0gJ21pZGRsZS1yaWdodCcpIHtcbiAgICByZXR1cm4gJ21pZGRsZVJpZ2h0JztcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdib3R0b20tcmlnaHQnKSB7XG4gICAgcmV0dXJuICdib3R0b21SaWdodCc7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvc2l0aW9uOiAke3Bvc2l0aW9ufWApO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZG8gc29tZSBhZGRpdGlvbmFsIGNsZWFudXAgb2YgdGhlIHYzIGZyb250ZW5kIGNvbmZpZyB0byBlbnN1cmUgdGhhdCB0aGUgY29uZmlnIGlzIGluIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiAqL1xuY29uc3QgdjNGcm9udGVuZENvbmZpZ0NsZWFudXAgPSAoXG4gIHYzUm9vdENvbmZpZzogRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuKTogRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlID0+IHtcbiAgY29uc3QgeyB1aUNvbmZpZ3MgfSA9IHYzUm9vdENvbmZpZztcbiAgaWYgKCF1aUNvbmZpZ3MpIHtcbiAgICByZXR1cm4gdjNSb290Q29uZmlnO1xuICB9XG4gIGNvbnN0IHsgZmxvYXRpbmdCdXR0b24sIGxvb2tBbmRGZWVsIH0gPSB1aUNvbmZpZ3MgYXMgYW55O1xuICBpZiAoIWZsb2F0aW5nQnV0dG9uIHx8ICFsb29rQW5kRmVlbCkge1xuICAgIHJldHVybiB2M1Jvb3RDb25maWc7XG4gIH1cbiAgY29uc3QgeyBmb250U2l6ZSwgbGluZUhlaWdodCB9ID0gbG9va0FuZEZlZWwudHlwb2dyYXBoeSBhcyBhbnk7XG4gIHJldHVybiB7XG4gICAgLi4udjNSb290Q29uZmlnLFxuICAgIHVpQ29uZmlnczoge1xuICAgICAgLi4udWlDb25maWdzLFxuICAgICAgZmxvYXRpbmdCdXR0b246IHtcbiAgICAgICAgLi4uZmxvYXRpbmdCdXR0b24sXG4gICAgICAgIHBvc2l0aW9uOiBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlKFxuICAgICAgICAgIHYzUm9vdENvbmZpZy51aUNvbmZpZ3M/LmZsb2F0aW5nQnV0dG9uPy5wb3NpdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgbG9va0FuZEZlZWw6IHtcbiAgICAgICAgLi4ubG9va0FuZEZlZWwsXG4gICAgICAgIGNoYXRIZWFkZXJMb2dvRGFya1NyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29EYXJrU3JjIHx8IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvU3JjLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0xpZ2h0U3JjOiBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb0xpZ2h0U3JjIHx8IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvU3JjLFxuICAgICAgICB0eXBvZ3JhcGh5OiB7XG4gICAgICAgICAgLi4ubG9va0FuZEZlZWwudHlwb2dyYXBoeSxcbiAgICAgICAgICBmb250U2l6ZToge1xuICAgICAgICAgICAgLy8gVGhlIGZvbnRzIHNpemVzIGFyZSBkZWZpbmVkIGRpZmZlcmVudGx5IGluIHRoZSBiYWNrZW5kIGNvbmZpZ1xuICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBtYXAgdGhlIHZhbHVlcyB0byB0aGUgY29ycmVjdCBjYW1lbCBjYXNlIGtleXNcbiAgICAgICAgICAgIGIxOiBmb250U2l6ZT8uYjEgfHwgZm9udFNpemU/LmJfMSxcbiAgICAgICAgICAgIGIyOiBmb250U2l6ZT8uYjIgfHwgZm9udFNpemU/LmJfMixcbiAgICAgICAgICAgIGIzOiBmb250U2l6ZT8uYjMgfHwgZm9udFNpemU/LmJfMyxcbiAgICAgICAgICAgIGI0OiBmb250U2l6ZT8uYjQgfHwgZm9udFNpemU/LmJfNCxcbiAgICAgICAgICAgIGI1OiBmb250U2l6ZT8uYjUgfHwgZm9udFNpemU/LmJfNSxcbiAgICAgICAgICAgIGgxOiBmb250U2l6ZT8uaDEgfHwgZm9udFNpemU/LmhfMSxcbiAgICAgICAgICAgIGgyOiBmb250U2l6ZT8uaDIgfHwgZm9udFNpemU/LmhfMixcbiAgICAgICAgICAgIGgzOiBmb250U2l6ZT8uaDMgfHwgZm9udFNpemU/LmhfMyxcbiAgICAgICAgICAgIGwxOiBmb250U2l6ZT8ubDEgfHwgZm9udFNpemU/LmxfMSxcbiAgICAgICAgICAgIGwyOiBmb250U2l6ZT8ubDIgfHwgZm9udFNpemU/LmxfMixcbiAgICAgICAgICAgIHQxOiBmb250U2l6ZT8udDEgfHwgZm9udFNpemU/LnRfMSxcbiAgICAgICAgICAgIHQyOiBmb250U2l6ZT8udDIgfHwgZm9udFNpemU/LnRfMixcbiAgICAgICAgICAgIHQzOiBmb250U2l6ZT8udDMgfHwgZm9udFNpemU/LnRfMyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxpbmVIZWlnaHQ6IHtcbiAgICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHkubGluZUhlaWdodCxcbiAgICAgICAgICAgICcxMTQnOiBsaW5lSGVpZ2h0Py5saF8xMTQgfHwgbGluZUhlaWdodD8uWzExNF0sXG4gICAgICAgICAgICAnMTE2JzogbGluZUhlaWdodD8ubGhfMTE2IHx8IGxpbmVIZWlnaHQ/LlsxMTZdLFxuICAgICAgICAgICAgJzExOCc6IGxpbmVIZWlnaHQ/LmxoXzExOCB8fCBsaW5lSGVpZ2h0Py5bMTE4XSxcbiAgICAgICAgICAgICcxMjAnOiBsaW5lSGVpZ2h0Py5saF8xMjAgfHwgbGluZUhlaWdodD8uWzEyMF0sXG4gICAgICAgICAgICAnMTI0JzogbGluZUhlaWdodD8ubGhfMTI0IHx8IGxpbmVIZWlnaHQ/LlsxMjRdLFxuICAgICAgICAgICAgJzEyOCc6IGxpbmVIZWlnaHQ/LmxoXzEyOCB8fCBsaW5lSGVpZ2h0Py5bMTI4XSxcbiAgICAgICAgICAgICcxMzAnOiBsaW5lSGVpZ2h0Py5saF8xMzAgfHwgbGluZUhlaWdodD8uWzEzMF0sXG4gICAgICAgICAgICAnMTMzJzogbGluZUhlaWdodD8ubGhfMTMzIHx8IGxpbmVIZWlnaHQ/LlsxMzNdLFxuICAgICAgICAgICAgJzE0MCc6IGxpbmVIZWlnaHQ/LmxoXzE0MCB8fCBsaW5lSGVpZ2h0Py5bMTQwXSxcbiAgICAgICAgICAgICcxNDgnOiBsaW5lSGVpZ2h0Py5saF8xNDggfHwgbGluZUhlaWdodD8uWzE0OF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBHcmFwaFFMUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgcmVxdWVzdFYzQ29uZmlnID0gZmFsc2UsXG4gIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZyA9IGZhbHNlLFxufTogR3JhcGhRTFByb3ZpZGVyUHJvcHMpID0+IHtcbiAgY29uc3QgYXBpS2V5ID0gdXNlQXRvbVZhbHVlKG9yZ0xldmVsQXBpS2V5QXRvbSk7XG4gIGNvbnN0IGJhc2VVcmwgPSB1c2VBdG9tVmFsdWUoYmFzZVVybEF0b20pO1xuICBjb25zdCBpc1JlYWR5ID0gdXNlTWVtbygoKSA9PiBCb29sZWFuKGFwaUtleSAmJiBiYXNlVXJsKSwgW2FwaUtleSwgYmFzZVVybF0pO1xuXG4gIGNvbnN0IGV4ZWN1dGVRdWVyeSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChxdWVyeTogc3RyaW5nLCB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR3JhcGhRTCBjbGllbnQgbm90IHJlYWR5IC0gbWlzc2luZyBhcGlLZXkgb3IgYmFzZVVybCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L3YxL2dyYXBocWxgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YXBpS2V5fWAsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcXVlcnksIHZhcmlhYmxlcyB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgR3JhcGhRTCByZXF1ZXN0IGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBpZiAocmVzdWx0LmVycm9ycykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgfSxcbiAgICBbYXBpS2V5LCBiYXNlVXJsLCBpc1JlYWR5XSxcbiAgKTtcblxuICBjb25zdCBnZXRPcmdJZCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGV4ZWN1dGVRdWVyeShnZXRNZXJjaGFudE9yZ0lkUXVlcnkpO1xuICAgIHJldHVybiB2YWxpZGF0ZUdyYXBoUUxPcmdJZChyZXNwb25zZS5tZS5vcmc/LmlkKTtcbiAgfSwgW2V4ZWN1dGVRdWVyeV0pO1xuXG4gIGNvbnN0IGdldFYzQ29uZmlnID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8R3JhcGhRbENvbmZpZ1ZhbHVlcz4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeSA9IGF3YWl0IGNvbG9yc0FuZEZyb250ZW5kQ29uZmlnUXVlcnkoKTtcbiAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZyBxdWVyeSBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkocXVlcnkpO1xuXG4gICAgICAvLyBXZSBtYXkgdXBkYXRlIHRoaXMgcm9vdCBjb25maWcgbG9jYXRpb24gaW4gdGhlIGZ1dHVyZVxuICAgICAgY29uc3QgdjNSb290Q29uZmlnID0gcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LnZfdGhyZWVfY29uZmlnPy52YWx1ZXM7XG5cbiAgICAgIGNvbnN0IHYzRnJvbnRlbmRDb25maWcgPSB2M0Zyb250ZW5kQ29uZmlnQ2xlYW51cChcbiAgICAgICAgdHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZykgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy5tb3VudGluZ19jb25maWdzKSA/P1xuICAgICAgICBbXSkgYXMgdW5rbm93biBhcyB7IGtleTogc3RyaW5nOyBjb25maWc6IFdpZGdldE1vdW50aW5nQ29uZmlnIH1bXTtcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3MgPSB2M01vdW50aW5nQ29uZmlnc0FycmF5LnJlZHVjZShcbiAgICAgICAgKGFjYywgeyBrZXksIGNvbmZpZyB9KSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywga2V5KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2M3dpZGdldENvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy53aWRnZXRfY29uZmlncykgPz9cbiAgICAgICAgW10pIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnVjNbXTtcbiAgICAgIGNvbnN0IHYzV2lkZ2V0Q29uZmlncyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgdjN3aWRnZXRDb25maWdzQXJyYXk/Lm1hcCgoeyB3aWRnZXRDb25maWdJZCwgLi4ucmVzdCB9OiBXaWRnZXRDb25maWdWMykgPT4gW1xuICAgICAgICAgIHdpZGdldENvbmZpZ0lkLFxuICAgICAgICAgIHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfSBhcyBXaWRnZXRDb25maWdWMyxcbiAgICAgICAgXSksXG4gICAgICApIGFzIFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZ1YzPjtcbiAgICAgIGNvbnN0IHYzcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gQXJyYXkuaXNBcnJheSh2M1Jvb3RDb25maWc/LnBhZ2VfdmFyaWFudHMpXG4gICAgICAgID8gdjNSb290Q29uZmlnPy5wYWdlX3ZhcmlhbnRzLm1hcCh2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cylcbiAgICAgICAgOiBERUZBVUxUX1BBR0VfVkFSSUFOVFM7XG5cbiAgICAgIGNvbnN0IHYzQ29sb3JzQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8uY29sb3JzPy52YWx1ZXMpO1xuXG4gICAgICAvLyBJZiB0aGUgdjMgcm9vdCBjb25maWcgaXMgbm90IGZvdW5kIGFuZCB3ZSBhcmUgY29uZmlndXJlZCB0byByZXR1cm4gdGhlIGRlcHJlY2F0ZWQgY29uZmlnLCB3ZSB3aWxsIHJldHVybiB0aGUgbW9ja2VkIGNvbmZpZ1xuICAgICAgaWYgKCF2M1Jvb3RDb25maWcgJiYgbW9ja1YzQ29uZmlnVG9EZXByZWNhdGVkQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGlzU2VtYW50aWNDb2xvcnMgPSAhd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2dsb2JhbHM9bWVyY2hhbnQnKTtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgICA6ICh2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcnNDb25maWc6IHYzQ29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgIGZyb250ZW5kQ29uZmlnOiB7XG4gICAgICAgICAgLi4uKHYzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgICAvLyBOZWVkIHRvIHJlcGxhY2UgdGhlIGF1dG9tYXRpYyB3aWRnZXQgY29uZmlncyB3aXRoIHRoZSBvYmplY3QgYmFzZWQgb25lc1xuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgfSxcbiAgICAgICAgb3JnUGFnZUNvbmZpZzoge1xuICAgICAgICAgIHBhZ2VWYXJpYW50czogdjNwYWdlVmFyaWFudHMsXG4gICAgICAgICAgd2lkZ2V0Q29uZmlnczogdjNXaWRnZXRDb25maWdzLFxuICAgICAgICAgIG1vdW50aW5nQ29uZmlnczogdjNNb3VudGluZ0NvbmZpZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRPRE86IEFkZCB3aWRnZXRzIGFuZCBvdGhlciBjb25maWcgaGVyZVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRXJyb3IgZmV0Y2hpbmcgZ3JhcGhxbCBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIGVycik7XG4gICAgICByZXR1cm4geyBjb2xvcnNDb25maWc6IHVuZGVmaW5lZCwgZnJvbnRlbmRDb25maWc6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgfSwgW2V4ZWN1dGVRdWVyeSwgbW9ja1YzQ29uZmlnVG9EZXByZWNhdGVkQ29uZmlnXSk7XG5cbiAgY29uc3QgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcgPSB1c2VDYWxsYmFjayhhc3luYyAoKTogUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgY29sb3JzQW5kRnJvbnRlbmRDb25maWdRdWVyeSgpO1xuICAgICAgaWYgKCFxdWVyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbG9ycyBhbmQgZnJvbnRlbmQgY29uZmlnIHF1ZXJ5IGlzIG5vdCBkZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGV4ZWN1dGVRdWVyeShxdWVyeSk7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52ZXJzaW9uICE9PSBDb25maWdWZXJzaW9uRW51bS5WMyAmJlxuICAgICAgICAhbW9ja1YzQ29uZmlnVG9EZXByZWNhdGVkQ29uZmlnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LmNvbG9ycz8udmFsdWVzO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5mcm9udGVuZD8udmFsdWVzO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZENvbG9yQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGNvbG9yc0NvbmZpZyk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRnJvbnRlbmRDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoZnJvbnRlbmRDb25maWcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogdHJhbnNmb3JtZWRDb2xvckNvbmZpZyBhcyBDb2xvcnNDb25maWdSZXNwb25zZSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogdHJhbnNmb3JtZWRGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1Jlc3BvbnNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogUkVNT1ZFIE1PQ0tFRCBDT05GSUcgT05DRSBXRSBIQVZFIFRIRSBORVcgQ09ORklHIElNUExFTUVOVEVEIE9OIEJBQ0tFTkRcbiAgICAgIGNvbnN0IG1lcmNoYW50Q29sb3JzQ29uZmlnID0gcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LmNvbG9ycz8udmFsdWVzO1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRNZXJjaGFudENvbG9yQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKG1lcmNoYW50Q29sb3JzQ29uZmlnKTtcblxuICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuXG4gICAgICBjb25zdCBjb2xvcnNDb25maWcgPSBtb2NrVjNDb2xvcnNDb25maWc7XG4gICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcnNDb25maWc6IGlzU2VtYW50aWNDb2xvcnNcbiAgICAgICAgICA/IChjb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSlcbiAgICAgICAgICA6ICh0cmFuc2Zvcm1lZE1lcmNoYW50Q29sb3JDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSksXG4gICAgICAgIGZyb250ZW5kQ29uZmlnOiBmcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciBmZXRjaGluZyBncmFwaHFsIGNvbG9ycyBhbmQgZnJvbnRlbmQgY29uZmlnJywgZXJyKTtcbiAgICAgIHJldHVybiB7IGNvbG9yc0NvbmZpZzogdW5kZWZpbmVkLCBmcm9udGVuZENvbmZpZzogdW5kZWZpbmVkIH07XG4gICAgfVxuICB9LCBbZXhlY3V0ZVF1ZXJ5XSk7XG5cbiAgY29uc3QgZ2V0Q29uZmlnID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8R3JhcGhRbENvbmZpZ1ZhbHVlcz4gPT4ge1xuICAgIGNvbnNvbGUubG9nKCdHcmFwaFFMUHJvdmlkZXI6IGdldENvbmZpZzogcmVxdWVzdFYzQ29uZmlnJywgcmVxdWVzdFYzQ29uZmlnKTtcbiAgICBpZiAocmVxdWVzdFYzQ29uZmlnKSB7XG4gICAgICByZXR1cm4gZ2V0VjNDb25maWcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnKCk7XG4gIH0sIFtnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZywgZ2V0VjNDb25maWcsIHJlcXVlc3RWM0NvbmZpZ10pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZXhlY3V0ZVF1ZXJ5LFxuICAgICAgZ2V0T3JnSWQsXG4gICAgICBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZyxcbiAgICAgIGdldFYzQ29uZmlnLFxuICAgICAgZ2V0Q29uZmlnLFxuICAgICAgaXNSZWFkeSxcbiAgICB9KSxcbiAgICBbZXhlY3V0ZVF1ZXJ5LCBnZXRPcmdJZCwgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsIGdldFYzQ29uZmlnLCBnZXRDb25maWcsIGlzUmVhZHldLFxuICApO1xuXG4gIHJldHVybiA8R3JhcGhRTENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9HcmFwaFFMQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlR3JhcGhRTENsaWVudCA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoR3JhcGhRTENvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUdyYXBoUUxDbGllbnQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIEdyYXBoUUxQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0RBLE1BQU0sMENBQTJELEtBQUs7QUFFdEUsTUFBTSxxQ0FBcUM7K0JBQ1pBLHVDQUFlLENBQUM7Ozs7Ozs7Ozs7QUFpQi9DLE1BQU1DLHdCQUE2QyxDQUNqRDtDQUNFLFdBQVc7Q0FDWCxhQUFhO0NBQ2IsZ0JBQWdCO0NBQ2hCLGdCQUFnQixFQUFFO0NBQ2xCLGNBQWMsQ0FDWixFQUNFLFVBQVVDLDJDQUFvQixhQUMvQixDQUNGO0NBQ0YsRUFDRDtDQUNFLFdBQVc7Q0FDWCxhQUFhO0NBQ2Isb0JBQW9CO0NBQ3BCLGdCQUFnQixFQUFFO0NBQ2xCLGNBQWMsQ0FDWixFQUNFLFVBQVVBLDJDQUFvQixhQUMvQixDQUNGO0NBQ0YsQ0FDRjtBQUVELE1BQU0sMEJBQTBCLGFBQStCO0FBQzdELEtBQUksYUFBYSxjQUNmLFFBQU87QUFFVCxLQUFJLGFBQWEsY0FDZixRQUFPO0FBRVQsS0FBSSxhQUFhLGVBQ2YsUUFBTztBQUVULEtBQUksYUFBYSxlQUNmLFFBQU87QUFFVCxPQUFNLElBQUksTUFBTSxxQkFBcUIsV0FBVzs7Ozs7QUFNbEQsTUFBTSwyQkFDSixpQkFDNkI7Q0FDN0IsTUFBTSxFQUFFLGNBQWM7QUFDdEIsS0FBSSxDQUFDLFVBQ0gsUUFBTztDQUVULE1BQU0sRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ3hDLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUN0QixRQUFPO0NBRVQsTUFBTSxFQUFFLFVBQVUs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
262
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbnRleHQuY2pzIiwibmFtZXMiOlsiREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdIiwiUGFnZVZhcmlhbnRUZXN0VHlwZSIsIkZsb2F0aW5nQnV0dG9uTG9jYXRpb24iLCJvcmdMZXZlbEFwaUtleUF0b20iLCJiYXNlVXJsQXRvbSIsInZhbGlkYXRlR3JhcGhRTE9yZ0lkIiwiZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5IiwiZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSIsInRyYW5zZm9ybVNuYWtlVG9DYW1lbCIsInZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWciLCJ2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsInZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzIiwibW9ja1YzQ29sb3JzQ29uZmlnIiwibW9ja1YzRnJvbnRlbmRDb25maWciLCJDb25maWdWZXJzaW9uRW51bSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dC9ncmFwaHFsQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGJhc2VVcmxBdG9tLCBvcmdMZXZlbEFwaUtleUF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnknO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFMT3JnSWQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWcnO1xuaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7XG4gIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCxcbiAgdHJhbnNmb3JtU25ha2VUb0NhbWVsLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZ1YzJztcbmltcG9ydCB7IENvbG9yTWFwcGluZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdWMyc7XG5pbXBvcnQgeyBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0Zsb2F0aW5nQnV0dG9uJztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICcuL21vY2tWM0NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdWZXJzaW9uRW51bSwgV2lkZ2V0Q29uZmlnVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmltcG9ydCB7XG4gIE9yZ1BhZ2VDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxDb2xvck1hcHBpbmc+O1xuZXhwb3J0IHR5cGUgRnJvbnRlbmRDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZz47XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcbmV4cG9ydCB0eXBlIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZ1YzPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhRbENvbmZpZ1ZhbHVlcyA9IHtcbiAgY29sb3JzQ29uZmlnPzogQ29sb3JzQ29uZmlnUmVzcG9uc2UgfCBDb2xvcnNDb25maWdWM1Jlc3BvbnNlO1xuICBmcm9udGVuZENvbmZpZz86IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZyB8IEZyb250ZW5kQ29uZmlnVjM+O1xuICBvcmdQYWdlQ29uZmlnPzogT3JnUGFnZUNvbmZpZztcbn07XG5cbmludGVyZmFjZSBHcmFwaFFMQ29udGV4dFZhbHVlIHtcbiAgZXhlY3V0ZVF1ZXJ5OiA8VD4ocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8VD47XG4gIGdldE9yZ0lkOiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBnZXRWM0NvbmZpZzogKCkgPT4gUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPjtcbiAgZ2V0Q29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBHcmFwaFFMQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8R3JhcGhRTENvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuXG50eXBlIEdyYXBoUUxQcm92aWRlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICByZXF1ZXN0VjNDb25maWc/OiBib29sZWFuO1xuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xufTtcblxuY29uc3QgREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW1xuICB7XG4gICAgdmFyaWFudElkOiAncGxwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BscCcsXG4gICAgcGxwSWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcGxwLWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbXG4gICAgICB7XG4gICAgICAgIHRlc3RUeXBlOiBQYWdlVmFyaWFudFRlc3RUeXBlLlVybFJlc29sdmVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdmFyaWFudElkOiAncGRwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BkcCcsXG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiAndXJsLXJlc29sdmVyLXByb2R1Y3QtaWQnLFxuICAgIHdpZGdldE1vdW50aW5nOiBbXSxcbiAgICB2YXJpYW50VGVzdHM6IFtcbiAgICAgIHtcbiAgICAgICAgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG5jb25zdCBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlID0gKHBvc2l0aW9uOiBzdHJpbmcpOiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uID0+IHtcbiAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uTUlERExFX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLXJpZ2h0Jykge1xuICAgIHJldHVybiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uLk1JRERMRV9SSUdIVDtcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdib3R0b20tcmlnaHQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX1JJR0hUO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbjogJHtwb3NpdGlvbn1gKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBjbGVhbnVwIG9mIHRoZSB2MyBmcm9udGVuZCBjb25maWcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZyBpcyBpbiB0aGUgY29ycmVjdCBmb3JtYXQuXG4gKi9cbmNvbnN0IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwID0gKFxuICB2M1Jvb3RDb25maWc6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbik6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9PiB7XG4gIGNvbnN0IHsgdWlDb25maWdzIH0gPSB2M1Jvb3RDb25maWc7XG4gIGlmICghdWlDb25maWdzKSB7XG4gICAgcmV0dXJuIHYzUm9vdENvbmZpZztcbiAgfVxuICBjb25zdCB7IGZsb2F0aW5nQnV0dG9uLCBsb29rQW5kRmVlbCB9ID0gdWlDb25maWdzIGFzIGFueTtcbiAgaWYgKCFmbG9hdGluZ0J1dHRvbiB8fCAhbG9va0FuZEZlZWwpIHtcbiAgICByZXR1cm4gdjNSb290Q29uZmlnO1xuICB9XG4gIGNvbnN0IHsgZm9udFNpemUsIGxpbmVIZWlnaHQgfSA9IGxvb2tBbmRGZWVsLnR5cG9ncmFwaHkgYXMgYW55O1xuICByZXR1cm4ge1xuICAgIC4uLnYzUm9vdENvbmZpZyxcbiAgICB1aUNvbmZpZ3M6IHtcbiAgICAgIC4uLnVpQ29uZmlncyxcbiAgICAgIGZsb2F0aW5nQnV0dG9uOiB7XG4gICAgICAgIC4uLmZsb2F0aW5nQnV0dG9uLFxuICAgICAgICBwb3NpdGlvbjogbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZShcbiAgICAgICAgICB2M1Jvb3RDb25maWcudWlDb25maWdzPy5mbG9hdGluZ0J1dHRvbj8ucG9zaXRpb24gYXMgc3RyaW5nLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvb2tBbmRGZWVsOiB7XG4gICAgICAgIC4uLmxvb2tBbmRGZWVsLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0RhcmtTcmM6IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvRGFya1NyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgY2hhdEhlYWRlckxvZ29MaWdodFNyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29MaWdodFNyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHksXG4gICAgICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgICAgIC8vIFRoZSBmb250cyBzaXplcyBhcmUgZGVmaW5lZCBkaWZmZXJlbnRseSBpbiB0aGUgYmFja2VuZCBjb25maWdcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFwIHRoZSB2YWx1ZXMgdG8gdGhlIGNvcnJlY3QgY2FtZWwgY2FzZSBrZXlzXG4gICAgICAgICAgICBiMTogZm9udFNpemU/LmIxIHx8IGZvbnRTaXplPy5iXzEsXG4gICAgICAgICAgICBiMjogZm9udFNpemU/LmIyIHx8IGZvbnRTaXplPy5iXzIsXG4gICAgICAgICAgICBiMzogZm9udFNpemU/LmIzIHx8IGZvbnRTaXplPy5iXzMsXG4gICAgICAgICAgICBiNDogZm9udFNpemU/LmI0IHx8IGZvbnRTaXplPy5iXzQsXG4gICAgICAgICAgICBiNTogZm9udFNpemU/LmI1IHx8IGZvbnRTaXplPy5iXzUsXG4gICAgICAgICAgICBoMTogZm9udFNpemU/LmgxIHx8IGZvbnRTaXplPy5oXzEsXG4gICAgICAgICAgICBoMjogZm9udFNpemU/LmgyIHx8IGZvbnRTaXplPy5oXzIsXG4gICAgICAgICAgICBoMzogZm9udFNpemU/LmgzIHx8IGZvbnRTaXplPy5oXzMsXG4gICAgICAgICAgICBsMTogZm9udFNpemU/LmwxIHx8IGZvbnRTaXplPy5sXzEsXG4gICAgICAgICAgICBsMjogZm9udFNpemU/LmwyIHx8IGZvbnRTaXplPy5sXzIsXG4gICAgICAgICAgICB0MTogZm9udFNpemU/LnQxIHx8IGZvbnRTaXplPy50XzEsXG4gICAgICAgICAgICB0MjogZm9udFNpemU/LnQyIHx8IGZvbnRTaXplPy50XzIsXG4gICAgICAgICAgICB0MzogZm9udFNpemU/LnQzIHx8IGZvbnRTaXplPy50XzMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lSGVpZ2h0OiB7XG4gICAgICAgICAgICAuLi5sb29rQW5kRmVlbC50eXBvZ3JhcGh5LmxpbmVIZWlnaHQsXG4gICAgICAgICAgICAnMTE0JzogbGluZUhlaWdodD8ubGhfMTE0IHx8IGxpbmVIZWlnaHQ/LlsxMTRdLFxuICAgICAgICAgICAgJzExNic6IGxpbmVIZWlnaHQ/LmxoXzExNiB8fCBsaW5lSGVpZ2h0Py5bMTE2XSxcbiAgICAgICAgICAgICcxMTgnOiBsaW5lSGVpZ2h0Py5saF8xMTggfHwgbGluZUhlaWdodD8uWzExOF0sXG4gICAgICAgICAgICAnMTIwJzogbGluZUhlaWdodD8ubGhfMTIwIHx8IGxpbmVIZWlnaHQ/LlsxMjBdLFxuICAgICAgICAgICAgJzEyNCc6IGxpbmVIZWlnaHQ/LmxoXzEyNCB8fCBsaW5lSGVpZ2h0Py5bMTI0XSxcbiAgICAgICAgICAgICcxMjgnOiBsaW5lSGVpZ2h0Py5saF8xMjggfHwgbGluZUhlaWdodD8uWzEyOF0sXG4gICAgICAgICAgICAnMTMwJzogbGluZUhlaWdodD8ubGhfMTMwIHx8IGxpbmVIZWlnaHQ/LlsxMzBdLFxuICAgICAgICAgICAgJzEzMyc6IGxpbmVIZWlnaHQ/LmxoXzEzMyB8fCBsaW5lSGVpZ2h0Py5bMTMzXSxcbiAgICAgICAgICAgICcxNDAnOiBsaW5lSGVpZ2h0Py5saF8xNDAgfHwgbGluZUhlaWdodD8uWzE0MF0sXG4gICAgICAgICAgICAnMTQ4JzogbGluZUhlaWdodD8ubGhfMTQ4IHx8IGxpbmVIZWlnaHQ/LlsxNDhdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgR3JhcGhRTFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHJlcXVlc3RWM0NvbmZpZyA9IGZhbHNlLFxuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcgPSBmYWxzZSxcbn06IEdyYXBoUUxQcm92aWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IGFwaUtleSA9IHVzZUF0b21WYWx1ZShvcmdMZXZlbEFwaUtleUF0b20pO1xuICBjb25zdCBiYXNlVXJsID0gdXNlQXRvbVZhbHVlKGJhc2VVcmxBdG9tKTtcbiAgY29uc3QgaXNSZWFkeSA9IHVzZU1lbW8oKCkgPT4gQm9vbGVhbihhcGlLZXkgJiYgYmFzZVVybCksIFthcGlLZXksIGJhc2VVcmxdKTtcblxuICBjb25zdCBleGVjdXRlUXVlcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgY2xpZW50IG5vdCByZWFkeSAtIG1pc3NpbmcgYXBpS2V5IG9yIGJhc2VVcmwnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS92MS9ncmFwaHFsYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0sXG4gICAgW2FwaUtleSwgYmFzZVVybCwgaXNSZWFkeV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0T3JnSWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkoZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5KTtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaFFMT3JnSWQocmVzcG9uc2UubWUub3JnPy5pZCk7XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRWM0NvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgLy8gV2UgbWF5IHVwZGF0ZSB0aGlzIHJvb3QgY29uZmlnIGxvY2F0aW9uIGluIHRoZSBmdXR1cmVcbiAgICAgIGNvbnN0IHYzUm9vdENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52X3RocmVlX2NvbmZpZz8udmFsdWVzO1xuICAgICAgY29uc3QgZnJvbnRlbmRWYWx1ZXMgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcblxuICAgICAgY29uc3QgdjNGcm9udGVuZENvbmZpZyA9IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwKFxuICAgICAgICB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnKSBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGZyb20gZnJvbnRlbmQudmFsdWVzIGlmIHYzUm9vdENvbmZpZyBpcyBub3QgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmcm9udGVuZE1lcmNoYW50T3ZlcnJpZGVDc3MgPSBmcm9udGVuZFZhbHVlcz8ubWVyY2hhbnRfb3ZlcnJpZGVfY3NzO1xuICAgICAgY29uc3QgdjNNZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNGcm9udGVuZENvbmZpZy51aUNvbmZpZ3M/Lm1lcmNoYW50T3ZlcnJpZGVDc3M7XG4gICAgICBjb25zdCBtZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNNZXJjaGFudE92ZXJyaWRlQ3NzIHx8IGZyb250ZW5kTWVyY2hhbnRPdmVycmlkZUNzcztcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy5tb3VudGluZ19jb25maWdzKSA/P1xuICAgICAgICBbXSkgYXMgdW5rbm93biBhcyB7IGtleTogc3RyaW5nOyBjb25maWc6IFdpZGdldE1vdW50aW5nQ29uZmlnIH1bXTtcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3MgPSB2M01vdW50aW5nQ29uZmlnc0FycmF5LnJlZHVjZShcbiAgICAgICAgKGFjYywgeyBrZXksIGNvbmZpZyB9KSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywga2V5KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2M3dpZGdldENvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy53aWRnZXRfY29uZmlncykgPz9cbiAgICAgICAgW10pIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnVjNbXTtcbiAgICAgIGNvbnN0IHYzV2lkZ2V0Q29uZmlncyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgdjN3aWRnZXRDb25maWdzQXJyYXk/Lm1hcCgoeyB3aWRnZXRDb25maWdJZCwgLi4ucmVzdCB9OiBXaWRnZXRDb25maWdWMykgPT4gW1xuICAgICAgICAgIHdpZGdldENvbmZpZ0lkLFxuICAgICAgICAgIHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfSBhcyBXaWRnZXRDb25maWdWMyxcbiAgICAgICAgXSksXG4gICAgICApIGFzIFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZ1YzPjtcbiAgICAgIGNvbnN0IHYzcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gQXJyYXkuaXNBcnJheSh2M1Jvb3RDb25maWc/LnBhZ2VfdmFyaWFudHMpXG4gICAgICAgID8gdjNSb290Q29uZmlnPy5wYWdlX3ZhcmlhbnRzLm1hcCh2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cylcbiAgICAgICAgOiBERUZBVUxUX1BBR0VfVkFSSUFOVFM7XG5cbiAgICAgIGNvbnN0IHYzQ29sb3JzQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8uY29sb3JzPy52YWx1ZXMpO1xuICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuICAgICAgY29uc3QgaXNTdG9yeWJvb2sgPSB3aW5kb3cudG9wPy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCc/cGF0aD0nKTtcblxuICAgICAgLy8gSWYgdGhlIHYzIHJvb3QgY29uZmlnIGlzIG5vdCBmb3VuZCBhbmQgd2UgYXJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBkZXByZWNhdGVkIGNvbmZpZywgd2Ugd2lsbCByZXR1cm4gdGhlIG1vY2tlZCBjb25maWdcbiAgICAgIGlmICgoIXYzUm9vdENvbmZpZyAmJiBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcpIHx8IChpc1N0b3J5Ym9vayAmJiBpc1NlbWFudGljQ29sb3JzKSkge1xuICAgICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBSZXR1cm5pbmcgbW9jayB2MyBjb25maWcnLCB7XG4gICAgICAgICAgY29sb3JzQ29uZmlnOiBtb2NrVjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogbW9ja1YzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgICA6ICh2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHBhZ2VWYXJpYW50czogW10sXG4gICAgICAgICAgICB3aWRnZXRDb25maWdzOiB7fSxcbiAgICAgICAgICAgIG1vdW50aW5nQ29uZmlnczoge30sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgUmV0dXJuaW5nIHYzIGNvbmZpZycsIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiB2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogdjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yc0NvbmZpZzogdjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgZnJvbnRlbmRDb25maWc6IHtcbiAgICAgICAgICAuLi4odjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICAgIG1lcmNoYW50T3ZlcnJpZGVDc3MsXG4gICAgICAgICAgLy8gTmVlZCB0byByZXBsYWNlIHRoZSBhdXRvbWF0aWMgd2lkZ2V0IGNvbmZpZ3Mgd2l0aCB0aGUgb2JqZWN0IGJhc2VkIG9uZXNcbiAgICAgICAgICB3aWRnZXRDb25maWdzOiB2M1dpZGdldENvbmZpZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgICAvLyBUT0RPOiBBZGQgd2lkZ2V0cyBhbmQgb3RoZXIgY29uZmlnIGhlcmVcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0Vycm9yIGZldGNoaW5nIGdyYXBocWwgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCBlcnIpO1xuICAgICAgcmV0dXJuIHsgY29sb3JzQ29uZmlnOiB1bmRlZmluZWQsIGZyb250ZW5kQ29uZmlnOiB1bmRlZmluZWQgfTtcbiAgICB9XG4gIH0sIFtleGVjdXRlUXVlcnksIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ10pO1xuXG4gIGNvbnN0IGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8R3JhcGhRbENvbmZpZ1ZhbHVlcz4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeSA9IGF3YWl0IGdldENvbG9yc0FuZEZyb250ZW5kUXVlcnkoKTtcbiAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZyBxdWVyeSBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkocXVlcnkpO1xuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8udmVyc2lvbiAhPT0gQ29uZmlnVmVyc2lvbkVudW0uVjMgJiZcbiAgICAgICAgIW1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yc0NvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5jb2xvcnM/LnZhbHVlcztcbiAgICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRDb2xvckNvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb2xvcnNDb25maWcpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEZyb250ZW5kQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGZyb250ZW5kQ29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2xvcnNDb25maWc6IHRyYW5zZm9ybWVkQ29sb3JDb25maWcgYXMgQ29sb3JzQ29uZmlnUmVzcG9uc2UsXG4gICAgICAgICAgZnJvbnRlbmRDb25maWc6IHRyYW5zZm9ybWVkRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdSZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IFJFTU9WRSBNT0NLRUQgQ09ORklHIE9OQ0UgV0UgSEFWRSBUSEUgTkVXIENPTkZJRyBJTVBMRU1FTlRFRCBPTiBCQUNLRU5EXG4gICAgICBjb25zdCBtZXJjaGFudENvbG9yc0NvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5jb2xvcnM/LnZhbHVlcztcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkTWVyY2hhbnRDb2xvckNvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChtZXJjaGFudENvbG9yc0NvbmZpZyk7XG5cbiAgICAgIGNvbnN0IGlzU2VtYW50aWNDb2xvcnMgPSAhd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2dsb2JhbHM9bWVyY2hhbnQnKTtcblxuICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSBtb2NrVjNGcm9udGVuZENvbmZpZztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiBpc1NlbWFudGljQ29sb3JzXG4gICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgOiAodHJhbnNmb3JtZWRNZXJjaGFudENvbG9yQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRXJyb3IgZmV0Y2hpbmcgZ3JhcGhxbCBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIGVycik7XG4gICAgICByZXR1cm4geyBjb2xvcnNDb25maWc6IHVuZGVmaW5lZCwgZnJvbnRlbmRDb25maWc6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgfSwgW2V4ZWN1dGVRdWVyeV0pO1xuXG4gIGNvbnN0IGdldENvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICBpZiAocmVxdWVzdFYzQ29uZmlnKSB7XG4gICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBHZXR0aW5nIHYzIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgICByZXR1cm4gZ2V0VjNDb25maWcoKTtcbiAgICB9XG4gICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgR2V0dGluZyBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgcmV0dXJuIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnKCk7XG4gIH0sIFtnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZywgZ2V0VjNDb25maWcsIHJlcXVlc3RWM0NvbmZpZ10pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZXhlY3V0ZVF1ZXJ5LFxuICAgICAgZ2V0T3JnSWQsXG4gICAgICBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZyxcbiAgICAgIGdldFYzQ29uZmlnLFxuICAgICAgZ2V0Q29uZmlnLFxuICAgICAgaXNSZWFkeSxcbiAgICB9KSxcbiAgICBbZXhlY3V0ZVF1ZXJ5LCBnZXRPcmdJZCwgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsIGdldFYzQ29uZmlnLCBnZXRDb25maWcsIGlzUmVhZHldLFxuICApO1xuXG4gIHJldHVybiA8R3JhcGhRTENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9HcmFwaFFMQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlR3JhcGhRTENsaWVudCA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoR3JhcGhRTENvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUdyYXBoUUxDbGllbnQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIEdyYXBoUUxQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSxNQUFNLDBDQUEyRCxLQUFLO0FBUXRFLE1BQU1BLHdCQUE2QyxDQUNqRDtDQUNFLFdBQVc7Q0FDWCxhQUFhO0NBQ2IsZ0JBQWdCO0NBQ2hCLGdCQUFnQixFQUFFO0NBQ2xCLGNBQWMsQ0FDWixFQUNFLFVBQVVDLDJDQUFvQixhQUMvQixDQUNGO0NBQ0YsRUFDRDtDQUNFLFdBQVc7Q0FDWCxhQUFhO0NBQ2Isb0JBQW9CO0NBQ3BCLGdCQUFnQixFQUFFO0NBQ2xCLGNBQWMsQ0FDWixFQUNFLFVBQVVBLDJDQUFvQixhQUMvQixDQUNGO0NBQ0YsQ0FDRjtBQUVELE1BQU0sMEJBQTBCLGFBQTZDO0FBQzNFLEtBQUksYUFBYSxjQUNmLFFBQU9DLHFDQUF1QjtBQUVoQyxLQUFJLGFBQWEsY0FDZixRQUFPQSxxQ0FBdUI7QUFFaEMsS0FBSSxhQUFhLGVBQ2YsUUFBT0EscUNBQXVCO0FBRWhDLEtBQUksYUFBYSxlQUNmLFFBQU9BLHFDQUF1QjtBQUVoQyxPQUFNLElBQUksTUFBTSxxQkFBcUIsV0FBVzs7Ozs7QUFNbEQsTUFBTSwyQkFDSixpQkFDNkI7Q0FDN0IsTUFBTSxFQUFFLGNBQWM7QUFDdEIsS0FBSSxDQUFDLFVBQ0gsUUFBTztDQUVULE1BQU0sRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ3hDLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUN0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