@envive-ai/react-hooks 0.2.7 → 0.2.8-arthur-2

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 (173) hide show
  1. package/dist/{NewOrgConfig-Bo1seKr6.cjs → NewOrgConfig-BYo4V8-u.cjs} +2 -2
  2. package/dist/{NewOrgConfig-yptI2imS.js → NewOrgConfig-kYrS59aR.js} +2 -2
  3. package/dist/{TrackComponentVisibleEvent-qNE0dIL1.js → TrackComponentVisibleEvent-BHVBHQhu.js} +2 -2
  4. package/dist/{TrackComponentVisibleEvent-tDRnrJi3.cjs → TrackComponentVisibleEvent-B_2kXqvV.cjs} +2 -2
  5. package/dist/{amplitudeContext-C6LHpqP_.cjs → amplitudeContext-CjkMpI_a.cjs} +2 -2
  6. package/dist/{amplitudeContext-rEjGf57q.js → amplitudeContext-D58WY1aS.js} +2 -2
  7. package/dist/application/models/index.cjs +1 -1
  8. package/dist/application/models/index.d.cts +4 -4
  9. package/dist/application/models/index.d.ts +4 -4
  10. package/dist/application/models/index.js +1 -1
  11. package/dist/application/utils/index.cjs +3 -3
  12. package/dist/application/utils/index.d.cts +6 -6
  13. package/dist/application/utils/index.d.ts +6 -6
  14. package/dist/application/utils/index.js +3 -3
  15. package/dist/atoms/app/index.cjs +1 -1
  16. package/dist/atoms/app/index.d.cts +11 -11
  17. package/dist/atoms/app/index.d.ts +5 -5
  18. package/dist/atoms/app/index.js +1 -1
  19. package/dist/atoms/chat/index.cjs +4 -4
  20. package/dist/atoms/chat/index.d.cts +30 -30
  21. package/dist/atoms/chat/index.d.ts +30 -30
  22. package/dist/atoms/chat/index.js +4 -4
  23. package/dist/atoms/globalSearch/index.d.ts +5 -5
  24. package/dist/atoms/org/index.d.cts +21 -21
  25. package/dist/atoms/org/index.d.ts +22 -22
  26. package/dist/atoms/search/index.cjs +6 -6
  27. package/dist/atoms/search/index.d.cts +5 -5
  28. package/dist/atoms/search/index.d.ts +5 -5
  29. package/dist/atoms/search/index.js +6 -6
  30. package/dist/atoms/search/utils.d.cts +1 -1
  31. package/dist/{chat-L_N0qaqs.cjs → chat-CLo8FBCb.cjs} +4 -4
  32. package/dist/{chat-DChvXHjz.js → chat-Qkx5llOV.js} +4 -4
  33. package/dist/{chatElementDisplayLocation-D4XF0UfI.d.ts → chatElementDisplayLocation-BO3fY4hq.d.ts} +2 -1
  34. package/dist/{chatElementDisplayLocation-B7vr33eG.d.cts → chatElementDisplayLocation-Igta1TL1.d.cts} +2 -1
  35. package/dist/{chatSearch-B5whqPLW.cjs → chatSearch-CP7QtVyA.cjs} +4 -4
  36. package/dist/{chatSearch-so-qeiEL.js → chatSearch-CjMcB3fG.js} +4 -4
  37. package/dist/{chatState-Dl5lyuKC.js → chatState-BUN8ehpy.js} +3 -3
  38. package/dist/{chatState-D9_aA1_h.cjs → chatState-BUlDJ4NK.cjs} +3 -3
  39. package/dist/{commerce-api-DEFd5HUH.js → commerce-api-CxnUXpTq.js} +3 -3
  40. package/dist/{commerce-api-DqVD4NH8.cjs → commerce-api-DNnrOYWX.cjs} +3 -3
  41. package/dist/contexts/amplitudeContext/index.cjs +2 -2
  42. package/dist/contexts/amplitudeContext/index.js +2 -2
  43. package/dist/contexts/chatContext/index.cjs +8 -8
  44. package/dist/contexts/chatContext/index.d.cts +2 -2
  45. package/dist/contexts/chatContext/index.d.ts +2 -2
  46. package/dist/contexts/chatContext/index.js +8 -8
  47. package/dist/contexts/enviveConfigContext/index.d.cts +2 -2
  48. package/dist/contexts/enviveConfigContext/index.d.ts +2 -2
  49. package/dist/contexts/enviveCssContext/index.cjs +5 -5
  50. package/dist/contexts/enviveCssContext/index.js +5 -5
  51. package/dist/contexts/featureFlagContext/index.d.cts +2 -2
  52. package/dist/contexts/featureFlagContext/index.d.ts +2 -2
  53. package/dist/contexts/featureFlagServiceContext/index.d.cts +3 -3
  54. package/dist/contexts/featureFlagServiceContext/index.d.ts +3 -3
  55. package/dist/contexts/graphqlContext/index.cjs +2 -2
  56. package/dist/contexts/graphqlContext/index.d.cts +5 -5
  57. package/dist/contexts/graphqlContext/index.d.ts +5 -5
  58. package/dist/contexts/graphqlContext/index.js +2 -2
  59. package/dist/contexts/newOrgConfigContext/index.cjs +4 -4
  60. package/dist/contexts/newOrgConfigContext/index.d.cts +6 -6
  61. package/dist/contexts/newOrgConfigContext/index.d.ts +6 -6
  62. package/dist/contexts/newOrgConfigContext/index.js +4 -4
  63. package/dist/contexts/searchContext/index.cjs +5 -5
  64. package/dist/contexts/searchContext/index.js +5 -5
  65. package/dist/contexts/shopifyUrlContext/index.d.cts +2 -2
  66. package/dist/contexts/shopifyUrlContext/index.d.ts +2 -2
  67. package/dist/contexts/systemSettingsContext/index.d.cts +4 -4
  68. package/dist/contexts/systemSettingsContext/index.d.ts +8 -8
  69. package/dist/contexts/types.d.cts +2 -2
  70. package/dist/contexts/types.d.ts +2 -2
  71. package/dist/contexts/userIdentityContext/index.cjs +5 -5
  72. package/dist/contexts/userIdentityContext/index.js +5 -5
  73. package/dist/{featureFlagServiceContext-p5UBwPM3.d.cts → featureFlagServiceContext-CPqbnfe3.d.cts} +2 -2
  74. package/dist/{featureFlagServiceContext-CpxlOkI9.d.ts → featureFlagServiceContext-mFEI_SIk.d.ts} +2 -2
  75. package/dist/{frontendConfig-iZipB5FG.d.cts → frontendConfig-DPpzM5cz.d.cts} +3 -2
  76. package/dist/{frontendConfig-Cawh5iqv.d.ts → frontendConfig-msK69LYN.d.ts} +3 -2
  77. package/dist/{graphqlContext-CXQl0hq2.d.ts → graphqlContext-B1vmNkWT.d.ts} +4 -4
  78. package/dist/{graphqlContext-czH0kIZg.js → graphqlContext-C0hG5Uer.js} +2 -2
  79. package/dist/{graphqlContext-DP8T3-Kd.cjs → graphqlContext-Dddy7mr7.cjs} +2 -2
  80. package/dist/{graphqlContext-BeyKU1Dr.d.cts → graphqlContext-Y9q6GK71.d.cts} +2 -2
  81. package/dist/hooks/AmplitudeOperations/index.cjs +3 -3
  82. package/dist/hooks/AmplitudeOperations/index.js +3 -3
  83. package/dist/hooks/AppDetails/index.cjs +4 -4
  84. package/dist/hooks/AppDetails/index.d.cts +4 -4
  85. package/dist/hooks/AppDetails/index.d.ts +4 -4
  86. package/dist/hooks/AppDetails/index.js +4 -4
  87. package/dist/hooks/ChatToggle/index.cjs +4 -4
  88. package/dist/hooks/ChatToggle/index.d.cts +1 -1
  89. package/dist/hooks/ChatToggle/index.d.ts +1 -1
  90. package/dist/hooks/ChatToggle/index.js +4 -4
  91. package/dist/hooks/ChatToggleAnalytics/index.cjs +4 -4
  92. package/dist/hooks/ChatToggleAnalytics/index.d.cts +1 -1
  93. package/dist/hooks/ChatToggleAnalytics/index.d.ts +1 -1
  94. package/dist/hooks/ChatToggleAnalytics/index.js +4 -4
  95. package/dist/hooks/GrabAndScroll/index.d.cts +2 -2
  96. package/dist/hooks/GrabAndScroll/index.d.ts +2 -2
  97. package/dist/hooks/GraphQLConfig/index.cjs +3 -3
  98. package/dist/hooks/GraphQLConfig/index.d.cts +5 -5
  99. package/dist/hooks/GraphQLConfig/index.d.ts +5 -5
  100. package/dist/hooks/GraphQLConfig/index.js +3 -3
  101. package/dist/hooks/IdentifyUser/index.cjs +5 -5
  102. package/dist/hooks/IdentifyUser/index.js +5 -5
  103. package/dist/hooks/ImageResolver/index.cjs +1 -1
  104. package/dist/hooks/ImageResolver/index.js +1 -1
  105. package/dist/hooks/MessageFilter/index.cjs +1 -1
  106. package/dist/hooks/MessageFilter/index.d.cts +4 -4
  107. package/dist/hooks/MessageFilter/index.d.ts +4 -4
  108. package/dist/hooks/MessageFilter/index.js +1 -1
  109. package/dist/hooks/NewOrgConfig/index.cjs +5 -5
  110. package/dist/hooks/NewOrgConfig/index.d.cts +6 -6
  111. package/dist/hooks/NewOrgConfig/index.d.ts +6 -6
  112. package/dist/hooks/NewOrgConfig/index.js +5 -5
  113. package/dist/hooks/Search/index.cjs +21 -15
  114. package/dist/hooks/Search/index.d.cts +15 -8
  115. package/dist/hooks/Search/index.d.ts +15 -8
  116. package/dist/hooks/Search/index.js +21 -15
  117. package/dist/hooks/SearchOperations/index.cjs +5 -5
  118. package/dist/hooks/SearchOperations/index.js +5 -5
  119. package/dist/hooks/ShopifyUrlOperations/index.d.cts +2 -2
  120. package/dist/hooks/ShopifyUrlOperations/index.d.ts +2 -2
  121. package/dist/hooks/SystemSettingsContext/index.d.cts +6 -6
  122. package/dist/hooks/SystemSettingsContext/index.d.ts +6 -6
  123. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +3 -3
  124. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +1 -1
  125. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +1 -1
  126. package/dist/hooks/TrackComponentVisibleEvent/index.js +3 -3
  127. package/dist/hooks/UpdateAnalyticsProps/index.cjs +2 -2
  128. package/dist/hooks/UpdateAnalyticsProps/index.js +2 -2
  129. package/dist/hooks/utils.d.cts +5 -5
  130. package/dist/hooks/utils.d.ts +5 -5
  131. package/dist/{index-CUO68KG3.d.ts → index-BVsXKN48.d.ts} +2 -2
  132. package/dist/{index-BUDrAxnl.d.ts → index-Bb3zXP0P.d.ts} +2 -2
  133. package/dist/{index-BSd8767K.d.cts → index-CHxwYJZC.d.cts} +31 -31
  134. package/dist/{index-Dy3TTIOm.d.cts → index-DXTWZLEm.d.cts} +2 -2
  135. package/dist/interceptors/index.d.cts +4 -4
  136. package/dist/interceptors/index.d.ts +4 -4
  137. package/dist/interceptors/types.d.cts +4 -4
  138. package/dist/interceptors/types.d.ts +4 -4
  139. package/dist/models-CE5YjbzE.js +1286 -0
  140. package/dist/models-CJy0mOoW.cjs +1521 -0
  141. package/dist/{newOrgConfigContext-I2qceBB4.d.ts → newOrgConfigContext-CmQ-7Trc.d.ts} +2 -2
  142. package/dist/{newOrgConfigContext-Bet9CgKP.cjs → newOrgConfigContext-Dg2gtrwB.cjs} +2 -2
  143. package/dist/{newOrgConfigContext-CJI3tsVV.d.cts → newOrgConfigContext-DhsBBjlG.d.cts} +2 -2
  144. package/dist/{newOrgConfigContext-Bi_dBNe5.js → newOrgConfigContext-P4xkie1E.js} +2 -2
  145. package/dist/{search-DbZeJYdg.js → search-BRBqhum7.js} +2 -2
  146. package/dist/{search-CneZkauD.cjs → search-Bpd_wxaK.cjs} +2 -2
  147. package/dist/{searchContext-DksJfC1s.cjs → searchContext-4mMbhaHA.cjs} +2 -2
  148. package/dist/{searchContext-BmgoAFMF.js → searchContext-nzEsa-bl.js} +2 -2
  149. package/dist/{spiffyWidgets-eNbU1gMc.d.cts → spiffyWidgets-DK7Ekcy7.d.cts} +2 -1
  150. package/dist/{spiffyWidgets-CR6F7FRE.d.ts → spiffyWidgets-MTUAQq_u.d.ts} +2 -1
  151. package/dist/types-CtUb63bt.js +1 -1
  152. package/dist/types-UUvB6h05.cjs +1 -1
  153. package/dist/types.d.cts +2 -2
  154. package/dist/types.d.ts +3 -3
  155. package/dist/{useAmplitudeOperations-B9HjVe6G.js → useAmplitudeOperations-Cr03Hlk6.js} +2 -2
  156. package/dist/{useAmplitudeOperations-BdvxAzuI.cjs → useAmplitudeOperations-DzFMBUU_.cjs} +2 -2
  157. package/dist/{useAppDetails-B584gkCs.js → useAppDetails-Bgql1vXN.js} +2 -2
  158. package/dist/{useAppDetails-DczgqeLG.cjs → useAppDetails-D-l3HbOk.cjs} +2 -2
  159. package/dist/{useGraphQLConfig-7UxACM4n.js → useGraphQLConfig-8oeOwWRP.js} +2 -2
  160. package/dist/{useGraphQLConfig-D_rF2Sun.cjs → useGraphQLConfig-CO9lCk8b.cjs} +2 -2
  161. package/dist/{userIdentityContext-DdySlQBz.cjs → userIdentityContext-B_CPsBYG.cjs} +2 -2
  162. package/dist/{userIdentityContext-CPztaX6-.js → userIdentityContext-BtOui2qA.js} +2 -2
  163. package/dist/{utils-BRVP7Mnu.cjs → utils-BXfzt6tu.cjs} +3 -3
  164. package/dist/{utils-CBD4g2Nc.d.cts → utils-C2HshI4X.d.cts} +2 -2
  165. package/dist/{utils-B4PvsKVY.js → utils-Cv772xzd.js} +3 -3
  166. package/dist/{utils-QKFAbPT6.d.ts → utils-aa1jK0Xe.d.ts} +2 -2
  167. package/package.json +1 -1
  168. package/src/application/models/chatElementDisplayLocation.ts +1 -0
  169. package/src/application/models/spiffyWidgets.ts +2 -0
  170. package/src/contexts/types.ts +1 -0
  171. package/src/hooks/Search/useSearch.tsx +12 -7
  172. package/dist/models-CWOgrLCm.js +0 -1284
  173. package/dist/models-DqdLOi2I.cjs +0 -1519
@@ -1,7 +1,7 @@
1
1
  import "../../types-CtUb63bt.js";
2
2
  import "../../events-DyUix-Bn.js";
3
3
  import { SearchResultsState, getSearchResultsState } from "../../utils-D_kATUj6.js";
4
- import { SpiffyWidgets } from "../../models-CWOgrLCm.js";
4
+ import { SpiffyWidgets } from "../../models-CE5YjbzE.js";
5
5
  import { FeatureGates } from "../../featureGates-KEwAL8p_.js";
6
6
  import "../../urlsParser-DxjoLj98.js";
7
7
  import "../../graphql-CkxgqsXP.js";
@@ -17,25 +17,25 @@ import "../../atomStore-DEcDhiLp.js";
17
17
  import "../../app-CflxT_xI.js";
18
18
  import "../../enviveConfigContext-DrDjCems.js";
19
19
  import { useFeatureFlagService } from "../../featureFlagServiceContext-FBM6DdMJ.js";
20
- import { SpiffyMetricsEventName, useAmplitude } from "../../amplitudeContext-rEjGf57q.js";
21
- import "../../chatState-Dl5lyuKC.js";
20
+ import { SpiffyMetricsEventName, useAmplitude } from "../../amplitudeContext-D58WY1aS.js";
21
+ import "../../chatState-BUN8ehpy.js";
22
22
  import "../../graphqlConfig-CZGjJ8hP.js";
23
- import { amplitudeTrackEventAtom } from "../../chat-DChvXHjz.js";
23
+ import { amplitudeTrackEventAtom } from "../../chat-Qkx5llOV.js";
24
24
  import { autocompleteStateAtom, isFilterOpenAtom } from "../../globalSearch-BQEX-2Ml.js";
25
25
  import "../../org-h32_LSEb.js";
26
26
  import "../../newOrgConfigAtom-DEUj6H-p.js";
27
27
  import { formatFilterDisplayName } from "../../utils-D82gfbgU.js";
28
- import "../../chatSearch-so-qeiEL.js";
28
+ import "../../chatSearch-CjMcB3fG.js";
29
29
  import { ProductSorting } from "../../types-DXnG1tV0.js";
30
30
  import "../../searchServiceAdapter-Db6jEcJs.js";
31
- import { addSearchFilterAtom, clearSearchFiltersAtom, createFilterOption, filteredSearchProductsAtom, performSearchAtom, removeSearchFilterAtom, searchAtom, searchFiltersAtom, searchParamsAtom, searchProductSortingAtom, searchSelectedFiltersAtom } from "../../search-DbZeJYdg.js";
31
+ import { addSearchFilterAtom, clearSearchFiltersAtom, createFilterOption, filteredSearchProductsAtom, performSearchAtom, removeSearchFilterAtom, searchAtom, searchFiltersAtom, searchParamsAtom, searchProductSortingAtom, searchSelectedFiltersAtom } from "../../search-BRBqhum7.js";
32
32
  import "../../amplitudeContext-DbicJUzl.js";
33
- import "../../graphqlContext-czH0kIZg.js";
34
- import "../../useGraphQLConfig-7UxACM4n.js";
35
- import "../../newOrgConfigContext-Bi_dBNe5.js";
36
- import { useNewOrgConfig } from "../../NewOrgConfig-yptI2imS.js";
33
+ import "../../graphqlContext-C0hG5Uer.js";
34
+ import "../../useGraphQLConfig-8oeOwWRP.js";
35
+ import "../../newOrgConfigContext-P4xkie1E.js";
36
+ import { useNewOrgConfig } from "../../NewOrgConfig-kYrS59aR.js";
37
37
  import "../../useIntersection-CZSEBUbv.js";
38
- import { useTrackComponentVisibleEvent } from "../../TrackComponentVisibleEvent-qNE0dIL1.js";
38
+ import { useTrackComponentVisibleEvent } from "../../TrackComponentVisibleEvent-BHVBHQhu.js";
39
39
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
40
40
  import { atom, useAtom, useAtomValue, useSetAtom } from "jotai";
41
41
  import Fuse from "fuse.js";
@@ -285,7 +285,7 @@ const useRecommendedProducts = () => {
285
285
 
286
286
  //#endregion
287
287
  //#region src/hooks/Search/useSearch.tsx
288
- const useSearch = () => {
288
+ const useSearch = ({ allowRedirect = false } = {}) => {
289
289
  const config = useNewOrgConfig();
290
290
  const orgShortName = useAtomValue(orgShortNameAtom);
291
291
  const { data: searchData, loading: isLoadingSearch } = useAtomValue(searchAtom);
@@ -312,11 +312,11 @@ const useSearch = () => {
312
312
  behavior: "smooth"
313
313
  });
314
314
  }, []);
315
- const { searchText, focusedIndex, focusedOptionId, autocompleteResults, shouldShowAutocomplete, handleSearchInputChange, handleSearchInputFocus, handleSearchInputBlur, handleKeyDown, handleAutocompleteSelect, handleSubmitSearch, setSearchText } = useSearchInput({
315
+ const { searchText, focusedIndex, focusedOptionId, autocompleteResults, shouldShowAutocomplete, handleSearchInputChange, handleSearchInputFocus, handleSearchInputBlur, handleKeyDown, handleAutocompleteSelect, handleSubmitSearch, setSearchText, resetSearch } = useSearchInput({
316
316
  initialSearchText: query || "",
317
317
  searchOrigin: SpiffyWidgets.SearchResults,
318
318
  onSearchSubmit: (searchQuery) => {
319
- performSearch({ query: searchQuery });
319
+ performSearch({ query: searchQuery }, allowRedirect);
320
320
  }
321
321
  });
322
322
  const searchResultsState = getSearchResultsState(isLoadingSearch, searchData);
@@ -327,6 +327,9 @@ const useSearch = () => {
327
327
  layoutVariant: "square"
328
328
  };
329
329
  const safeMerchantShortName = orgShortName || "";
330
+ const searchConfig = config?.frontendConfig?.uiConfigs?.searchConfig;
331
+ const safeRecommendedProductsHeading = searchConfig?.recommendedProductsHeading || "Suggested Products";
332
+ const safeSearchOverlayHeading = searchConfig?.searchOverlayHeading ?? "What can I help you find?";
330
333
  const availableDynamicFilters = useMemo(() => {
331
334
  return dynamicFilters.filter((dynamicFilterName) => !selectedFilterOptions.some((option) => option.id === `dynamic:${dynamicFilterName}`)).map((dynamicFilterName) => ({
332
335
  name: dynamicFilterName,
@@ -457,6 +460,8 @@ const useSearch = () => {
457
460
  searchData,
458
461
  searchResponseId: searchData?.searchResponseId ?? "",
459
462
  merchantShortName: safeMerchantShortName,
463
+ recommendedProductsHeading: safeRecommendedProductsHeading,
464
+ searchOverlayHeading: safeSearchOverlayHeading,
460
465
  productCardConfig: safeProductCardConfig,
461
466
  productList,
462
467
  recommendedProducts,
@@ -484,10 +489,11 @@ const useSearch = () => {
484
489
  onRemoveFilter: handleRemoveFilter,
485
490
  onClearAllFilters: handleClearAllFilters,
486
491
  setIsFilterOpen,
492
+ resetSearch,
487
493
  searchResultsRef
488
494
  };
489
495
  };
490
496
 
491
497
  //#endregion
492
498
  export { useSearch };
493
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJwcm9kdWN0UmV0cmlldmFsRnVuY3Rpb246XG4gIHwgKChwYXJhbXM6IFByb2R1Y3RSZXRyaWV2YWxQYXJhbXMpID0+IFByb21pc2U8UHJvZHVjdFJldHJpZXZhbFJlc3VsdD4pXG4gIHwgbnVsbCIsImVycm9yOiB1bmtub3duIiwiaGFuZGxlU2VsZWN0RmlsdGVySXRlbTogU2VsZWN0RmlsdGVySXRlbSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9TZWFyY2gvdXNlU2VhcmNoSW5wdXQudHMiLCIuLi8uLi8uLi9zcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RSZXRyaWV2YWxBZGFwdGVyLnRzIiwiLi4vLi4vLi4vc3JjL2F0b21zL3NlYXJjaC9wcm9kdWN0UmV0cmlldmFsQVBJLnRzIiwiLi4vLi4vLi4vc3JjL2hvb2tzL1NlYXJjaC91c2VSZWNvbW1lbmRlZFByb2R1Y3RzLnRzIiwiLi4vLi4vLi4vc3JjL2hvb2tzL1NlYXJjaC91c2VTZWFyY2gudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VBdG9tVmFsdWUgfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCBGdXNlIGZyb20gXCJmdXNlLmpzXCI7XG5cbmltcG9ydCB7IGF1dG9jb21wbGV0ZVN0YXRlQXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvZ2xvYmFsU2VhcmNoXCI7XG5pbXBvcnQgeyBhbXBsaXR1ZGVUcmFja0V2ZW50QXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvYW1wbGl0dWRlL2FtcGxpdHVkZVRyYWNrRXZlbnRBdG9tXCI7XG5pbXBvcnQgeyBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSBcInNyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0XCI7XG5pbXBvcnQgeyBTcGlmZnlXaWRnZXRzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3BpZmZ5V2lkZ2V0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZVNlYXJjaElucHV0UHJvcHMge1xuICBpbml0aWFsU2VhcmNoVGV4dD86IHN0cmluZztcbiAgc2VhcmNoT3JpZ2luOiBTcGlmZnlXaWRnZXRzO1xuICBvblNlYXJjaFN1Ym1pdD86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZVNlYXJjaElucHV0UmV0dXJuIHtcbiAgLy8gU3RhdGVcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBoYXNUZXh0OiBib29sZWFuO1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGZvY3VzZWRJbmRleDogbnVtYmVyO1xuICBmb2N1c2VkT3B0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXV0b2NvbXBsZXRlUmVzdWx0czogc3RyaW5nW107XG4gIHNob3VsZFNob3dBdXRvY29tcGxldGU6IGJvb2xlYW47XG4gIFxuICAvLyBIYW5kbGVyc1xuICBoYW5kbGVTZWFyY2hJbnB1dENoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGhhbmRsZVNlYXJjaElucHV0Rm9jdXM6ICgpID0+IHZvaWQ7XG4gIGhhbmRsZVNlYXJjaElucHV0Qmx1cjogKCkgPT4gdm9pZDtcbiAgaGFuZGxlS2V5RG93bjogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBoYW5kbGVBdXRvY29tcGxldGVTZWxlY3Q6IChzdWdnZXN0aW9uOiBzdHJpbmcsIHJhbmtQb3NpdGlvbj86IG51bWJlcikgPT4gdm9pZDtcbiAgaGFuZGxlU3VibWl0U2VhcmNoOiAoKSA9PiB2b2lkO1xuICBcbiAgLy8gVXRpbGl0aWVzXG4gIHNldFNlYXJjaFRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlc2V0U2VhcmNoOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgdXNlU2VhcmNoSW5wdXQgPSAoe1xuICBpbml0aWFsU2VhcmNoVGV4dCA9IFwiXCIsXG4gIHNlYXJjaE9yaWdpbixcbiAgb25TZWFyY2hTdWJtaXQsXG59OiBVc2VTZWFyY2hJbnB1dFByb3BzKTogVXNlU2VhcmNoSW5wdXRSZXR1cm4gPT4ge1xuICBjb25zdCB0cmFjayA9IHVzZUF0b21WYWx1ZShhbXBsaXR1ZGVUcmFja0V2ZW50QXRvbSk7XG5cbiAgLy8gU3RhdGVcbiAgY29uc3QgW3NlYXJjaFRleHQsIHNldFNlYXJjaFRleHRdID0gdXNlU3RhdGUoaW5pdGlhbFNlYXJjaFRleHQpO1xuICBjb25zdCBbaGFzVGV4dCwgc2V0SGFzVGV4dF0gPSB1c2VTdGF0ZShpbml0aWFsU2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMCk7XG4gIGNvbnN0IFtpc0ZvY3VzZWQsIHNldElzRm9jdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmb2N1c2VkSW5kZXgsIHNldEZvY3VzZWRJbmRleF0gPSB1c2VTdGF0ZSgtMSk7XG4gIGNvbnN0IFtmb2N1c2VkT3B0aW9uSWQsIHNldEZvY3VzZWRPcHRpb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBhdXRvY29tcGxldGVTdGF0ZSA9IHVzZUF0b21WYWx1ZShhdXRvY29tcGxldGVTdGF0ZUF0b20pO1xuICBjb25zdCBnbG9iYWxBdXRvY29tcGxldGVSZXN1bHRzID0gYXV0b2NvbXBsZXRlU3RhdGUucmVzdWx0cztcbiAgY29uc3QgaXNBdXRvY29tcGxldGVFbmFibGVkID0gZ2xvYmFsQXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGggPiAwO1xuXG4gIC8vIFJlZnNcbiAgY29uc3QgaXNTZWxlY3RpbmdBdXRvY29tcGxldGUgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8vIENvbXB1dGVkXG4gIGNvbnN0IHNob3VsZFNob3dBdXRvY29tcGxldGUgPSBoYXNUZXh0ICYmIGlzRm9jdXNlZCAmJiBpc0F1dG9jb21wbGV0ZUVuYWJsZWQ7XG5cbiAgY29uc3QgYXV0b2NvbXBsZXRlUmVzdWx0c0xpbWl0ID0gNTtcblxuICAvLyBDb25maWd1cmUgRnVzZS5qcyBmb3IgZnV6enkgc2VhcmNoIHdpdGggY3VzdG9tIHNjb3JpbmdcbiAgY29uc3QgZnVzZU9wdGlvbnMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICBpbmNsdWRlTWF0Y2hlczogdHJ1ZSxcbiAgICAgIC8vIEZ1enp5IG1hdGNoaW5nIHRocmVzaG9sZCAoMC4wID0gcGVyZmVjdCBtYXRjaCwgMS4wID0gbWF0Y2ggYW55dGhpbmcpXG4gICAgICB0aHJlc2hvbGQ6IDAuMyxcbiAgICAgIC8vIExvY2F0aW9uIHdoZXJlIG1hdGNoIGlzIGV4cGVjdGVkICgwID0gYmVnaW5uaW5nKVxuICAgICAgbG9jYXRpb246IDAsXG4gICAgICAvLyBEaXN0YW5jZSBmcm9tIGxvY2F0aW9uIHdoZXJlIG1hdGNoIGNhbiBiZSBmb3VuZCAtIHNtYWxsZXIgZm9yIHByZWZpeCBwcmVmZXJlbmNlXG4gICAgICBkaXN0YW5jZTogNCxcbiAgICAgIC8vIE1pbmltdW0gY2hhcmFjdGVyIGxlbmd0aCBiZWZvcmUgZnV6enkgbWF0Y2hpbmcgc3RhcnRzXG4gICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDEsXG4gICAgICAvLyBLZXlzIHRvIHNlYXJjaCAod2UncmUgc2VhcmNoaW5nIHN0cmluZ3MgZGlyZWN0bHksIHNvIG5vIGtleXMgbmVlZGVkKVxuICAgICAga2V5czogW10sXG4gICAgICAvLyBVc2UgZXh0ZW5kZWQgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzIGFuZCBwcmVmaXggbWF0Y2hpbmdcbiAgICAgIHVzZUV4dGVuZGVkU2VhcmNoOiBmYWxzZSxcbiAgICAgIC8vIERvbid0IGlnbm9yZSBsb2NhdGlvbiAtIHRoaXMgaGVscHMgcHJpb3JpdGl6ZSBtYXRjaGVzIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgIGlnbm9yZUxvY2F0aW9uOiBmYWxzZSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGZ1c2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWdsb2JhbEF1dG9jb21wbGV0ZVJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IEZ1c2UoZ2xvYmFsQXV0b2NvbXBsZXRlUmVzdWx0cywgZnVzZU9wdGlvbnMpO1xuICB9LCBbZ2xvYmFsQXV0b2NvbXBsZXRlUmVzdWx0cywgZnVzZU9wdGlvbnNdKTtcblxuICAvLyBBdXRvY29tcGxldGUgZnV6enkgc2VhcmNoIHVzaW5nIEZ1c2UuanNcbiAgY29uc3QgYXV0b2NvbXBsZXRlUmVzdWx0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghaXNBdXRvY29tcGxldGVFbmFibGVkIHx8ICFmdXNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFzZWFyY2hUZXh0LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1c2VSZXN1bHRzID0gZnVzZS5zZWFyY2goc2VhcmNoVGV4dCk7XG5cbiAgICAvLyBVc2Ugb25seSBGdXNlLmpzIHNjb3JpbmcgKHJlc3VsdHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IHJlbGV2YW5jZSlcbiAgICByZXR1cm4gZnVzZVJlc3VsdHNcbiAgICAgIC5zbGljZSgwLCBhdXRvY29tcGxldGVSZXN1bHRzTGltaXQpXG4gICAgICAubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKTtcbiAgfSwgW2lzQXV0b2NvbXBsZXRlRW5hYmxlZCwgZnVzZSwgc2VhcmNoVGV4dCwgYXV0b2NvbXBsZXRlUmVzdWx0c0xpbWl0XSk7XG5cbiAgLy8gSGFuZGxlcnNcbiAgY29uc3QgaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgY2hhbmdpbmcgdGV4dCwgdGhleSBtdXN0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGlucHV0XG4gICAgICAvLyBTbyB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5J3JlIGZvY3VzZWRcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gc2VhcmNoVGV4dCkge1xuICAgICAgICBzZXRJc0ZvY3VzZWQodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdHJhY2s/Lih7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaElucHV0U3RhcnRlZCxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICBzZWFyY2hPcmlnaW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZXRTZWFyY2hUZXh0KG5ld1ZhbHVlKTtcbiAgICAgIHNldEhhc1RleHQobmV3VmFsdWUudHJpbSgpLmxlbmd0aCA+IDApO1xuICAgICAgc2V0Rm9jdXNlZEluZGV4KC0xKTtcbiAgICAgIHNldEZvY3VzZWRPcHRpb25JZCh1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgW3NlYXJjaE9yaWdpbiwgc2VhcmNoVGV4dCwgdHJhY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoSW5wdXRGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0ZvY3VzZWQodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hJbnB1dEJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWlzU2VsZWN0aW5nQXV0b2NvbXBsZXRlLmN1cnJlbnQpIHtcbiAgICAgICAgc2V0SXNGb2N1c2VkKGZhbHNlKTtcbiAgICAgICAgc2V0Rm9jdXNlZEluZGV4KC0xKTtcbiAgICAgICAgc2V0Rm9jdXNlZE9wdGlvbklkKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSwgMTUwKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdFNlYXJjaCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKSAmJiBvblNlYXJjaFN1Ym1pdCkge1xuICAgICAgdHJhY2s/Lih7XG4gICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hRdWVyeVN1Ym1pdHRlZCxcbiAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgIHNlYXJjaE9yaWdpbixcbiAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQudHJpbSgpLFxuICAgICAgICB9LFxuICAgICAgICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBvblNlYXJjaFN1Ym1pdChzZWFyY2hUZXh0LnRyaW0oKSk7XG4gICAgfVxuICB9LCBbc2VhcmNoVGV4dCwgb25TZWFyY2hTdWJtaXQsIHNlYXJjaE9yaWdpbiwgdHJhY2tdKTtcblxuICBjb25zdCBoYW5kbGVBdXRvY29tcGxldGVTZWxlY3QgPSB1c2VDYWxsYmFjayhcbiAgICAoc3VnZ2VzdGlvbjogc3RyaW5nLCByYW5rUG9zaXRpb24/OiBudW1iZXIpID0+IHtcbiAgICAgIGlzU2VsZWN0aW5nQXV0b2NvbXBsZXRlLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgc2V0U2VhcmNoVGV4dChzdWdnZXN0aW9uKTtcbiAgICAgIHNldEhhc1RleHQoc3VnZ2VzdGlvbi50cmltKCkubGVuZ3RoID4gMCk7XG4gICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuXG4gICAgICB0cmFjaz8uKHtcbiAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaElucHV0U3RhcnRlZCxcbiAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgIHNlYXJjaE9yaWdpbixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob25TZWFyY2hTdWJtaXQpIHtcbiAgICAgICAgb25TZWFyY2hTdWJtaXQoc3VnZ2VzdGlvbi50cmltKCkpO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaXNTZWxlY3RpbmdBdXRvY29tcGxldGUuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfSwgMTAwKTtcbiAgICB9LFxuICAgIFtvblNlYXJjaFN1Ym1pdCwgc2VhcmNoT3JpZ2luLCB0cmFja11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gKGZvY3VzZWRJbmRleCArIDEpICUgYXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGg7XG4gICAgICAgIHNldEZvY3VzZWRJbmRleChuZXdJbmRleCk7XG4gICAgICAgIHNldEZvY3VzZWRPcHRpb25JZChgb3B0aW9uLSR7bmV3SW5kZXh9YCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPVxuICAgICAgICAgIChmb2N1c2VkSW5kZXggLSAxICsgYXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGgpICVcbiAgICAgICAgICBhdXRvY29tcGxldGVSZXN1bHRzLmxlbmd0aDtcbiAgICAgICAgc2V0Rm9jdXNlZEluZGV4KG5ld0luZGV4KTtcbiAgICAgICAgc2V0Rm9jdXNlZE9wdGlvbklkKGBvcHRpb24tJHtuZXdJbmRleH1gKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGhhbmRsZVN1Ym1pdFNlYXJjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvblRleHQgPSBhdXRvY29tcGxldGVSZXN1bHRzW2ZvY3VzZWRJbmRleF07XG4gICAgICAgICAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0KHN1Z2dlc3Rpb25UZXh0LCBmb2N1c2VkSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRGb2N1c2VkSW5kZXgoLTEpO1xuICAgICAgICBzZXRGb2N1c2VkT3B0aW9uSWQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dG9jb21wbGV0ZVJlc3VsdHMsXG4gICAgICBmb2N1c2VkSW5kZXgsXG4gICAgICBoYW5kbGVBdXRvY29tcGxldGVTZWxlY3QsXG4gICAgICBoYW5kbGVTdWJtaXRTZWFyY2gsXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IHNldFNlYXJjaFRleHRVdGlsaXR5ID0gdXNlQ2FsbGJhY2soKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIHNldFNlYXJjaFRleHQodGV4dCk7XG4gICAgc2V0SGFzVGV4dCh0ZXh0LnRyaW0oKS5sZW5ndGggPiAwKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJlc2V0U2VhcmNoID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlYXJjaFRleHQoXCJcIik7XG4gICAgc2V0SGFzVGV4dChmYWxzZSk7XG4gICAgc2V0SXNGb2N1c2VkKGZhbHNlKTtcbiAgICBzZXRGb2N1c2VkSW5kZXgoLTEpO1xuICAgIHNldEZvY3VzZWRPcHRpb25JZCh1bmRlZmluZWQpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTdGF0ZVxuICAgIHNlYXJjaFRleHQsXG4gICAgaGFzVGV4dCxcbiAgICBpc0ZvY3VzZWQsXG4gICAgZm9jdXNlZEluZGV4LFxuICAgIGZvY3VzZWRPcHRpb25JZCxcbiAgICBhdXRvY29tcGxldGVSZXN1bHRzLFxuICAgIHNob3VsZFNob3dBdXRvY29tcGxldGUsXG5cbiAgICAvLyBIYW5kbGVyc1xuICAgIGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlLFxuICAgIGhhbmRsZVNlYXJjaElucHV0Rm9jdXMsXG4gICAgaGFuZGxlU2VhcmNoSW5wdXRCbHVyLFxuICAgIGhhbmRsZUtleURvd24sXG4gICAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0LFxuICAgIGhhbmRsZVN1Ym1pdFNlYXJjaCxcblxuICAgIC8vIFV0aWxpdGllc1xuICAgIHNldFNlYXJjaFRleHQ6IHNldFNlYXJjaFRleHRVdGlsaXR5LFxuICAgIHJlc2V0U2VhcmNoLFxuICB9O1xufTsiLCJpbXBvcnQgeyBQcm9kdWN0UmV0cmlldmFsUGFyYW1zLCBQcm9kdWN0UmV0cmlldmFsUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gVGhpcyB3aWxsIGJlIHNldCBieSB0aGUgUHJvZHVjdFJldHJpZXZhbFByb3ZpZGVyIHdoZW4gaXQgaW5pdGlhbGl6ZXNcbmxldCBwcm9kdWN0UmV0cmlldmFsRnVuY3Rpb246XG4gIHwgKChwYXJhbXM6IFByb2R1Y3RSZXRyaWV2YWxQYXJhbXMpID0+IFByb21pc2U8UHJvZHVjdFJldHJpZXZhbFJlc3VsdD4pXG4gIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCBzZXRQcm9kdWN0UmV0cmlldmFsRnVuY3Rpb24gPSAoXG4gIGZuOiAocGFyYW1zOiBQcm9kdWN0UmV0cmlldmFsUGFyYW1zKSA9PiBQcm9taXNlPFByb2R1Y3RSZXRyaWV2YWxSZXN1bHQ+XG4pID0+IHtcbiAgcHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uID0gZm47XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uID0gKCkgPT4ge1xuICBpZiAoIXByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiUHJvZHVjdCByZXRyaWV2YWwgZnVuY3Rpb24gbm90IGluaXRpYWxpemVkLiBNYWtlIHN1cmUgUHJvZHVjdFJldHJpZXZhbFByb3ZpZGVyIGlzIG1vdW50ZWQuXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBwcm9kdWN0UmV0cmlldmFsRnVuY3Rpb247XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJQcm9kdWN0UmV0cmlldmFsRnVuY3Rpb24gPSAoKSA9PiB7XG4gIHByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbiA9IG51bGw7XG59OyIsIlxuaW1wb3J0IHsgYXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uIH0gZnJvbSBcIi4vcHJvZHVjdFJldHJpZXZhbEFkYXB0ZXJcIjtcbmltcG9ydCB7IFByb2R1Y3RSZXRyaWV2YWxQYXJhbXMsIFByb2R1Y3RSZXRyaWV2YWxSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbnRlcmZhY2UgUHJvZHVjdFJldHJpZXZhbFN0YXRlIHtcbiAgZGF0YTogUHJvZHVjdFJldHJpZXZhbFJlc3VsdCB8IG51bGw7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICBsYXN0UHJvZHVjdElkczogc3RyaW5nW10gfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgcHJvZHVjdFJldHJpZXZhbEF0b20gPSBhdG9tPFByb2R1Y3RSZXRyaWV2YWxTdGF0ZT4oe1xuICBkYXRhOiBudWxsLFxuICBsb2FkaW5nOiBmYWxzZSxcbiAgZXJyb3I6IG51bGwsXG4gIGxhc3RQcm9kdWN0SWRzOiBudWxsLFxufSk7XG5cbmV4cG9ydCBjb25zdCBwZXJmb3JtUHJvZHVjdFJldHJpZXZhbEF0b20gPSBhdG9tKFxuICBudWxsLFxuICBhc3luYyAoZ2V0LCBzZXQsIHBhcmFtczogUHJvZHVjdFJldHJpZXZhbFBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGdldChwcm9kdWN0UmV0cmlldmFsQXRvbSk7XG5cbiAgICBpZiAoY3VycmVudFN0YXRlLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjsgLy8gUHJldmVudCBjb25jdXJyZW50IHJldHJpZXZhbHNcbiAgICB9XG5cbiAgICBzZXQocHJvZHVjdFJldHJpZXZhbEF0b20sIHtcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBsYXN0UHJvZHVjdElkczogcGFyYW1zLnByb2R1Y3RJZHMsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0cmlldmVQcm9kdWN0cyA9IGdldFByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbigpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmV0cmlldmVQcm9kdWN0cyhwYXJhbXMpO1xuICAgICAgc2V0KHByb2R1Y3RSZXRyaWV2YWxBdG9tLCB7XG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBsYXN0UHJvZHVjdElkczogcGFyYW1zLnByb2R1Y3RJZHMsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkFuIHVua25vd24gZXJyb3Igb2NjdXJyZWRcIjtcbiAgICAgIHNldChwcm9kdWN0UmV0cmlldmFsQXRvbSwge1xuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgbGFzdFByb2R1Y3RJZHM6IHBhcmFtcy5wcm9kdWN0SWRzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4pO1xuXG4vLyBHZXQganVzdCB0aGUgcHJvZHVjdHMgYXJyYXkgKGFscmVhZHkgbm9ybWFsaXplZCBieSBzZXJ2aWNlKVxuZXhwb3J0IGNvbnN0IHJldHJpZXZlZFByb2R1Y3RzQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCByZXRyaWV2YWxEYXRhID0gZ2V0KHByb2R1Y3RSZXRyaWV2YWxBdG9tKS5kYXRhO1xuICByZXR1cm4gcmV0cmlldmFsRGF0YT8ucHJvZHVjdHMgfHwgW107XG59KTtcblxuZXhwb3J0IGNvbnN0IHByb2R1Y3RSZXRyaWV2YWxMb2FkaW5nQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICByZXR1cm4gZ2V0KHByb2R1Y3RSZXRyaWV2YWxBdG9tKS5sb2FkaW5nO1xufSk7XG5cbmV4cG9ydCBjb25zdCBwcm9kdWN0UmV0cmlldmFsRXJyb3JBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIHJldHVybiBnZXQocHJvZHVjdFJldHJpZXZhbEF0b20pLmVycm9yO1xufSk7IiwiaW1wb3J0IHsgdXNlQXRvbVZhbHVlLCB1c2VTZXRBdG9tIH0gZnJvbSBcImpvdGFpXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gXCJzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0XCI7XG5pbXBvcnQge1xuICByZXRyaWV2ZWRQcm9kdWN0c0F0b20sXG4gIHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsQXRvbSxcbiAgcHJvZHVjdFJldHJpZXZhbEF0b20sXG59IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RSZXRyaWV2YWxBUElcIjtcbmltcG9ydCB7IHVzZU5ld09yZ0NvbmZpZyB9IGZyb20gXCIuLi9OZXdPcmdDb25maWdcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VcIjtcbmltcG9ydCB7IEZlYXR1cmVHYXRlcyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5cbi8qKlxuICogQSBob29rIHRvIGdldCByZWNvbW1lbmRlZCBwcm9kdWN0cy5cbiAqIEl0IGNoZWNrcyB0aGUgYElzUmVjb21tZW5kZWRQcm9kdWN0c0VuYWJsZWRgIGZlYXR1cmUgZ2F0ZSBhbmQgdHJpZ2dlcnMgZmV0Y2hpbmcgaWYgbmVlZGVkLlxuICogSWYgdGhlIGdhdGUgaXMgZW5hYmxlZCwgaXQgcmV0dXJucyB0aGUgbGlzdCBvZiByZWNvbW1lbmRlZCBwcm9kdWN0cy5cbiAqIElmIHRoZSBnYXRlIGlzIGRpc2FibGVkLCBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LlxuICpcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlY29tbWVuZGVkIHByb2R1Y3RzIG9yIGFuIGVtcHR5IGFycmF5LlxuICovXG5leHBvcnQgY29uc3QgdXNlUmVjb21tZW5kZWRQcm9kdWN0cyA9XG4gICgpOiBTZWFyY2hSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzW1wiYXR0cmlidXRlc1wiXVtdID0+IHtcbiAgICBjb25zdCB7IGZlYXR1cmVGbGFnU2VydmljZSB9ID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gICAgY29uc3QgaXNFbmFibGVkID0gZmVhdHVyZUZsYWdTZXJ2aWNlPy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChcbiAgICAgIEZlYXR1cmVHYXRlcy5Jc1JlY29tbWVuZGVkUHJvZHVjdHNFbmFibGVkXG4gICAgKTtcbiAgICBjb25zdCByZWNvbW1lbmRlZFByb2R1Y3RzID0gdXNlQXRvbVZhbHVlKHJldHJpZXZlZFByb2R1Y3RzQXRvbSk7XG4gICAgY29uc3QgcGVyZm9ybVByb2R1Y3RSZXRyaWV2YWwgPSB1c2VTZXRBdG9tKHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsQXRvbSk7XG4gICAgY29uc3QgeyBsYXN0UHJvZHVjdElkcyB9ID0gdXNlQXRvbVZhbHVlKHByb2R1Y3RSZXRyaWV2YWxBdG9tKTtcbiAgICBjb25zdCBvcmdVSUNvbmZpZyA9IHVzZU5ld09yZ0NvbmZpZygpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJlY29tbWVuZGVkUHJvZHVjdElkcyA9IG9yZ1VJQ29uZmlnLmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZ1xuICAgICAgICA/IG9yZ1VJQ29uZmlnLmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZy5yZWNvbW1lbmRlZFByb2R1Y3RzXG4gICAgICAgIDogW107XG4gICAgICAvLyBGZXRjaCBvbmx5IGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZXJlIGFyZSBJRHMgdG8gZmV0Y2gsIGFuZCB3ZSBoYXZlbid0IGFscmVhZHkgZmV0Y2hlZCB0aGVtLlxuICAgICAgaWYgKFxuICAgICAgICBpc0VuYWJsZWQgJiZcbiAgICAgICAgcmVjb21tZW5kZWRQcm9kdWN0SWRzICYmXG4gICAgICAgIHJlY29tbWVuZGVkUHJvZHVjdElkcy5sZW5ndGggPiAwICYmXG4gICAgICAgICFsYXN0UHJvZHVjdElkc1xuICAgICAgKSB7XG4gICAgICAgIHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsKHsgcHJvZHVjdElkczogcmVjb21tZW5kZWRQcm9kdWN0SWRzIH0pO1xuICAgICAgfVxuICAgIH0sIFtpc0VuYWJsZWQsIHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsLCBsYXN0UHJvZHVjdElkcywgb3JnVUlDb25maWddKTtcblxuICAgIHJldHVybiBpc0VuYWJsZWQgPyByZWNvbW1lbmRlZFByb2R1Y3RzIDogW107XG4gIH07IiwiaW1wb3J0IHsgdXNlQXRvbSwgdXNlQXRvbVZhbHVlLCB1c2VTZXRBdG9tIH0gZnJvbSBcImpvdGFpXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHtcbiAgYWRkU2VhcmNoRmlsdGVyQXRvbSxcbiAgY2xlYXJTZWFyY2hGaWx0ZXJzQXRvbSxcbiAgY3JlYXRlRmlsdGVyT3B0aW9uLFxuICBmaWx0ZXJlZFNlYXJjaFByb2R1Y3RzQXRvbSxcbiAgcGVyZm9ybVNlYXJjaEF0b20sXG4gIHJlbW92ZVNlYXJjaEZpbHRlckF0b20sXG4gIHNlYXJjaEF0b20sXG4gIHNlYXJjaEZpbHRlcnNBdG9tLFxuICBzZWFyY2hQYXJhbXNBdG9tLFxuICBzZWFyY2hQcm9kdWN0U29ydGluZ0F0b20sXG4gIHNlYXJjaFNlbGVjdGVkRmlsdGVyc0F0b20sXG4gIFNlbGVjdGVkRmlsdGVyT3B0aW9uLFxufSBmcm9tIFwic3JjL2F0b21zL3NlYXJjaFwiO1xuaW1wb3J0IHtcbiAgaXNGaWx0ZXJPcGVuQXRvbSxcbn0gZnJvbSBcInNyYy9hdG9tcy9nbG9iYWxTZWFyY2gvZ2xvYmFsU2VhcmNoXCI7XG5pbXBvcnQgeyBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZSB9IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3V0aWxzXCI7XG5pbXBvcnQgeyBQcm9kdWN0U29ydGluZyB9IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3R5cGVzXCI7XG5pbXBvcnQge1xuICBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICB1c2VBbXBsaXR1ZGUsXG59IGZyb20gXCJzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dC9hbXBsaXR1ZGVDb250ZXh0XCI7XG5pbXBvcnQgeyBTcGlmZnlXaWRnZXRzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3BpZmZ5V2lkZ2V0c1wiO1xuaW1wb3J0IHsgUHJvZHVjdENhcmRDb25maWcgfSBmcm9tIFwic3JjL2NvbnRleHRzL3R5cGVzXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc2VhcmNoXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXNwb25zZVByb2R1Y3QgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQge1xuICBTZWFyY2hGaWx0ZXJEYXR1bSxcbiAgU2VsZWN0RmlsdGVySXRlbSxcbn0gZnJvbSBcInNyYy90eXBlcy9zZWFyY2gtZmlsdGVyLXR5cGVzXCI7XG5pbXBvcnQgeyBnZXRTZWFyY2hSZXN1bHRzU3RhdGUsIFNlYXJjaFJlc3VsdHNTdGF0ZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgb3JnU2hvcnROYW1lQXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZ1wiO1xuaW1wb3J0IHsgdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQgfSBmcm9tIFwiLi4vVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnRcIjtcbmltcG9ydCB7IGFtcGxpdHVkZVRyYWNrRXZlbnRBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9hbXBsaXR1ZGUvYW1wbGl0dWRlVHJhY2tFdmVudEF0b21cIjtcbmltcG9ydCB7IG5ld09yZ0NvbmZpZ0F0b20gfSBmcm9tIFwic3JjL2F0b21zL29yZ1wiO1xuaW1wb3J0IHsgcmV0cmlldmVkUHJvZHVjdHNBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9zZWFyY2gvcHJvZHVjdFJldHJpZXZhbEFQSVwiO1xuaW1wb3J0IHsgdXNlU2VhcmNoSW5wdXQgfSBmcm9tIFwiLi91c2VTZWFyY2hJbnB1dFwiO1xuaW1wb3J0IHsgU2VhcmNoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQgeyB1c2VOZXdPcmdDb25maWcgfSBmcm9tIFwiLi4vTmV3T3JnQ29uZmlnXCI7XG5pbXBvcnQgeyB1c2VSZWNvbW1lbmRlZFByb2R1Y3RzIH0gZnJvbSBcIi4vdXNlUmVjb21tZW5kZWRQcm9kdWN0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdHNIb2NQcm9wcyB7XG4gIC8vIERhdGFcbiAgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbDtcbiAgc2VhcmNoUmVzcG9uc2VJZDogc3RyaW5nO1xuICBtZXJjaGFudFNob3J0TmFtZTogc3RyaW5nO1xuICBwcm9kdWN0Q2FyZENvbmZpZzogUHJvZHVjdENhcmRDb25maWc7XG4gIHByb2R1Y3RMaXN0OiBTZWFyY2hSZXNwb25zZVByb2R1Y3RbXTtcbiAgYXV0b2NvbXBsZXRlUmVzdWx0czogc3RyaW5nW107XG4gIHNlYXJjaEZpbHRlcnM6IFNlYXJjaEZpbHRlckRhdHVtW107XG4gIGF2YWlsYWJsZUR5bmFtaWNGaWx0ZXJzOiB7IG5hbWU6IHN0cmluZzsgZGlzcGxheU5hbWU6IHN0cmluZyB9W107XG4gIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogU2VsZWN0ZWRGaWx0ZXJPcHRpb25bXTtcbiAgcmVjb21tZW5kZWRQcm9kdWN0czogU2VhcmNoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1snYXR0cmlidXRlcyddW107XG5cbiAgLy8gU3RhdGVcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBxdWVyeTogc3RyaW5nO1xuICBzZWFyY2hSZXN1bHRzU3RhdGU6IFNlYXJjaFJlc3VsdHNTdGF0ZTtcbiAgaXNMb2FkaW5nU2VhcmNoOiBib29sZWFuO1xuICBpc0ZpbHRlck9wZW46IGJvb2xlYW47XG4gIHNob3VsZFNob3dBdXRvY29tcGxldGU6IGJvb2xlYW47XG4gIGZvY3VzZWRJbmRleDogbnVtYmVyO1xuICBmb2N1c2VkT3B0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyBVSVxuICBmaWx0ZXJCdXR0b25UZXh0OiBzdHJpbmc7XG5cbiAgLy8gRXZlbnQgSGFuZGxlcnNcbiAgb25TZWFyY2hJbnB1dENoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uU3VibWl0U2VhcmNoOiAoKSA9PiB2b2lkO1xuICBvbkF1dG9jb21wbGV0ZVNlbGVjdDogKHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZDtcbiAgb25LZXlEb3duOiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIG9uU2VhcmNoSW5wdXRGb2N1czogKCkgPT4gdm9pZDtcbiAgb25TZWFyY2hJbnB1dEJsdXI6ICgpID0+IHZvaWQ7XG4gIG9uVG9nZ2xlRHluYW1pY0ZpbHRlcjogKHsgZmlsdGVyLCBkeW5hbWljRmlsdGVyRGlzcGxheU5hbWUgfTogeyBmaWx0ZXI6IHN0cmluZzsgZHluYW1pY0ZpbHRlckRpc3BsYXlOYW1lOiBzdHJpbmcgfSkgPT4gdm9pZDtcbiAgb25TZWxlY3RGaWx0ZXJJdGVtOiBTZWxlY3RGaWx0ZXJJdGVtO1xuICBvblJlbW92ZUZpbHRlcjogKGZpbHRlcjogU2VsZWN0ZWRGaWx0ZXJPcHRpb24pID0+IHZvaWQ7XG4gIG9uQ2xlYXJBbGxGaWx0ZXJzOiAoKSA9PiB2b2lkO1xuICBzZXRJc0ZpbHRlck9wZW46IChpc0ZpbHRlck9wZW46IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgLy8gUmVmc1xuICBzZWFyY2hSZXN1bHRzUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xufVxuXG5leHBvcnQgY29uc3QgdXNlU2VhcmNoID0gKCk6IFNlYXJjaFJlc3VsdHNIb2NQcm9wcyA9PiB7XG4gIC8vIEF0b21zXG4gIGNvbnN0IGNvbmZpZyA9IHVzZU5ld09yZ0NvbmZpZygpO1xuICBjb25zdCBvcmdTaG9ydE5hbWUgPSB1c2VBdG9tVmFsdWUob3JnU2hvcnROYW1lQXRvbSk7XG4gIGNvbnN0IHsgZGF0YTogc2VhcmNoRGF0YSwgbG9hZGluZzogaXNMb2FkaW5nU2VhcmNoIH0gPVxuICAgIHVzZUF0b21WYWx1ZShzZWFyY2hBdG9tKTtcbiAgY29uc3QgcHJvZHVjdExpc3QgPSB1c2VBdG9tVmFsdWUoZmlsdGVyZWRTZWFyY2hQcm9kdWN0c0F0b20pO1xuICBjb25zdCBwZXJmb3JtU2VhcmNoID0gdXNlU2V0QXRvbShwZXJmb3JtU2VhcmNoQXRvbSk7XG4gIGNvbnN0IFt7IHF1ZXJ5IH1dID0gdXNlQXRvbShzZWFyY2hQYXJhbXNBdG9tKTtcbiAgY29uc3QgW2lzRmlsdGVyT3Blbiwgc2V0SXNGaWx0ZXJPcGVuXSA9IHVzZUF0b20oaXNGaWx0ZXJPcGVuQXRvbSk7XG4gIGNvbnN0IFtzZWxlY3RlZEZpbHRlck9wdGlvbnNdID0gdXNlQXRvbShzZWFyY2hTZWxlY3RlZEZpbHRlcnNBdG9tKTtcbiAgY29uc3QgYWRkRmlsdGVyID0gdXNlU2V0QXRvbShhZGRTZWFyY2hGaWx0ZXJBdG9tKTtcbiAgY29uc3QgcmVtb3ZlRmlsdGVyID0gdXNlU2V0QXRvbShyZW1vdmVTZWFyY2hGaWx0ZXJBdG9tKTtcbiAgY29uc3QgW3Byb2R1Y3RTb3J0aW5nLCBzZXRQcm9kdWN0U29ydGluZ10gPSB1c2VBdG9tKHNlYXJjaFByb2R1Y3RTb3J0aW5nQXRvbSk7XG4gIGNvbnN0IGNsZWFyRmlsdGVycyA9IHVzZVNldEF0b20oY2xlYXJTZWFyY2hGaWx0ZXJzQXRvbSk7XG4gIGNvbnN0IHNlYXJjaEZpbHRlcnMgPSB1c2VBdG9tVmFsdWUoc2VhcmNoRmlsdGVyc0F0b20pO1xuICBjb25zdCByZWNvbW1lbmRlZFByb2R1Y3RzID0gdXNlUmVjb21tZW5kZWRQcm9kdWN0cygpO1xuXG4gIC8vIFJlZnNcbiAgY29uc3Qgc2VhcmNoUmVzdWx0c1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIFxuICAvLyBVdGlsaXRpZXNcbiAgY29uc3Qgc2Nyb2xsVG9Ub3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gc2VhcmNoUmVzdWx0c1JlZi5jdXJyZW50O1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgXG4gIC8vIFNlYXJjaCBJbnB1dCBIb29rXG4gIGNvbnN0IHNlYXJjaElucHV0ID0gdXNlU2VhcmNoSW5wdXQoe1xuICAgIGluaXRpYWxTZWFyY2hUZXh0OiBxdWVyeSB8fCAnJyxcbiAgICBzZWFyY2hPcmlnaW46IFNwaWZmeVdpZGdldHMuU2VhcmNoUmVzdWx0cyxcbiAgICBvblNlYXJjaFN1Ym1pdDogKHNlYXJjaFF1ZXJ5KSA9PiB7XG4gICAgICBwZXJmb3JtU2VhcmNoKHsgcXVlcnk6IHNlYXJjaFF1ZXJ5IH0pO1xuICAgIH0sXG4gIH0pO1xuICBcbiAgY29uc3Qge1xuICAgIHNlYXJjaFRleHQsXG4gICAgZm9jdXNlZEluZGV4LFxuICAgIGZvY3VzZWRPcHRpb25JZCxcbiAgICBhdXRvY29tcGxldGVSZXN1bHRzLFxuICAgIHNob3VsZFNob3dBdXRvY29tcGxldGUsXG4gICAgaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UsXG4gICAgaGFuZGxlU2VhcmNoSW5wdXRGb2N1cyxcbiAgICBoYW5kbGVTZWFyY2hJbnB1dEJsdXIsXG4gICAgaGFuZGxlS2V5RG93bixcbiAgICBoYW5kbGVBdXRvY29tcGxldGVTZWxlY3QsXG4gICAgaGFuZGxlU3VibWl0U2VhcmNoLFxuICAgIHNldFNlYXJjaFRleHQsXG4gIH0gPSBzZWFyY2hJbnB1dDtcbiAgY29uc3Qgc2VhcmNoUmVzdWx0c1N0YXRlID0gZ2V0U2VhcmNoUmVzdWx0c1N0YXRlKGlzTG9hZGluZ1NlYXJjaCwgc2VhcmNoRGF0YSk7XG5cbiAgY29uc3QgZHluYW1pY0ZpbHRlcnMgPSBzZWFyY2hEYXRhPy5maWx0ZXJzIHx8IFtdO1xuXG4gIC8vIFByb3ZpZGUgZmFsbGJhY2sgdmFsdWVzIHdoZW4gb3JnVUlDb25maWcgaXMgbm90IHlldCBhdmFpbGFibGVcbiAgY29uc3Qgc2FmZVByb2R1Y3RDYXJkQ29uZmlnID0gY29uZmlnPy5mcm9udGVuZENvbmZpZz8udWlDb25maWdzXG4gICAgPy5wcm9kdWN0Q2FyZENvbmZpZyB8fCB7XG4gICAgdmFyaWFudDogXCJtaW5pbWFsXCIsXG4gICAgaG92ZXJWYXJpYW50OiBcIm5vbmVcIixcbiAgICBsYXlvdXRWYXJpYW50OiBcInNxdWFyZVwiLFxuICB9O1xuICBjb25zdCBzYWZlTWVyY2hhbnRTaG9ydE5hbWUgPSBvcmdTaG9ydE5hbWUgfHwgXCJcIjtcblxuICBjb25zdCBhdmFpbGFibGVEeW5hbWljRmlsdGVycyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkeW5hbWljRmlsdGVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGR5bmFtaWNGaWx0ZXJOYW1lKSA9PlxuICAgICAgICAgICFzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGBkeW5hbWljOiR7ZHluYW1pY0ZpbHRlck5hbWV9YCksXG4gICAgICApXG4gICAgICAubWFwKChkeW5hbWljRmlsdGVyTmFtZSkgPT4gKHtcbiAgICAgICAgbmFtZTogZHluYW1pY0ZpbHRlck5hbWUsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZShkeW5hbWljRmlsdGVyTmFtZSksXG4gICAgICB9KSk7XG4gIH0sIFtkeW5hbWljRmlsdGVycywgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXSk7XG5cbiAgY29uc3QgZmlsdGVycyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvcnRPcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBmaWx0ZXJJdGVtSWQ6IFN0cmluZyhQcm9kdWN0U29ydGluZy5GRUFUVVJFRCksXG4gICAgICAgIGRpc3BsYXlOYW1lOiAnUmVsZXZhbmNlJyxcbiAgICAgICAgcHJvZHVjdENvdW50OiAwLFxuICAgICAgICBpc1NlbGVjdGVkOiBwcm9kdWN0U29ydGluZyA9PT0gUHJvZHVjdFNvcnRpbmcuRkVBVFVSRUQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWx0ZXJJdGVtSWQ6IFN0cmluZyhQcm9kdWN0U29ydGluZy5QUklDRV9BU0MpLFxuICAgICAgICBkaXNwbGF5TmFtZTogJ1ByaWNlOiBMb3cgdG8gSGlnaCcsXG4gICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgaXNTZWxlY3RlZDogcHJvZHVjdFNvcnRpbmcgPT09IFByb2R1Y3RTb3J0aW5nLlBSSUNFX0FTQyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpbHRlckl0ZW1JZDogU3RyaW5nKFByb2R1Y3RTb3J0aW5nLlBSSUNFX0RFU0MpLFxuICAgICAgICBkaXNwbGF5TmFtZTogJ1ByaWNlOiBIaWdoIHRvIExvdycsXG4gICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgaXNTZWxlY3RlZDogcHJvZHVjdFNvcnRpbmcgPT09IFByb2R1Y3RTb3J0aW5nLlBSSUNFX0RFU0MsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICByZXR1cm4gW3sgZmlsdGVySWQ6ICdzb3J0JywgZGlzcGxheU5hbWU6ICdTT1JUJywgaXRlbXM6IHNvcnRPcHRpb25zIH0sIC4uLnNlYXJjaEZpbHRlcnNdIGFzIFNlYXJjaEZpbHRlckRhdHVtW107XG4gIH0sIFtwcm9kdWN0U29ydGluZywgc2VhcmNoRmlsdGVyc10pO1xuXG4gIGNvbnN0IGZpbHRlckJ1dHRvblRleHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gZmlsdGVycy5yZWR1Y2UoKGFjYzogbnVtYmVyLCBmaWx0ZXIpID0+IHtcbiAgICAgIGlmIChmaWx0ZXIuZmlsdGVySWQgPT09ICdzb3J0Jykge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYyArIGZpbHRlci5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubGVuZ3RoO1xuICAgIH0sIDApO1xuICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ0ZpbHRlciAmIFNvcnQnO1xuICAgIH1cbiAgICByZXR1cm4gYEZpbHRlciAmIFNvcnQgKCR7c2VsZWN0ZWRDb3VudH0pYDtcbiAgfSwgW2ZpbHRlcnNdKTtcblxuICAvLyBDYWxsYmFja3NcbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcblxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUR5bmFtaWNGaWx0ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBmaWx0ZXIsIGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZSB9OiB7IGZpbHRlcjogc3RyaW5nOyBkeW5hbWljRmlsdGVyRGlzcGxheU5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaEZpbHRlckNsaWNrZWQsXG4gICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICBmaWx0ZXJUeXBlOiAnRHluYW1pYycsXG4gICAgICAgICAgZmlsdGVyVmFsdWU6IGZpbHRlcixcbiAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGFkZEZpbHRlcihjcmVhdGVGaWx0ZXJPcHRpb24oJ2R5bmFtaWMnLCBmaWx0ZXIsIGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZSkpO1xuICAgICAgc2Nyb2xsVG9Ub3AoKTtcbiAgICB9LFxuICAgIFthZGRGaWx0ZXIsIHNlYXJjaFRleHQsIHNjcm9sbFRvVG9wXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVSZW1vdmVGaWx0ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZmlsdGVyOiBTZWxlY3RlZEZpbHRlck9wdGlvbikgPT4ge1xuICAgICAgcmVtb3ZlRmlsdGVyKGZpbHRlci5pZCk7XG4gICAgICBzY3JvbGxUb1RvcCgpO1xuICAgIH0sXG4gICAgW3JlbW92ZUZpbHRlciwgc2Nyb2xsVG9Ub3BdLFxuICApO1xuXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0RmlsdGVySXRlbTogU2VsZWN0RmlsdGVySXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgICh7XG4gICAgICBmaWx0ZXJJZCxcbiAgICAgIGZpbHRlckl0ZW1JZCxcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICB9OiB7XG4gICAgICBmaWx0ZXJJZDogc3RyaW5nO1xuICAgICAgZmlsdGVySXRlbUlkOiBzdHJpbmc7XG4gICAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICB9KSA9PiB7XG4gICAgICBpZiAoZmlsdGVySWQgPT09ICdzb3J0Jykge1xuICAgICAgICBjb25zdCBuZXdTb3J0ID0gZmlsdGVySXRlbUlkIGFzIFByb2R1Y3RTb3J0aW5nO1xuICAgICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuU2VhcmNoU29ydENsaWNrZWQsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgc29ydFR5cGU6IG5ld1NvcnQsXG4gICAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFByb2R1Y3RTb3J0aW5nKG5ld1NvcnQpO1xuICAgICAgICBzY3JvbGxUb1RvcCgpO1xuICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgICByZW1vdmVGaWx0ZXIoYCR7ZmlsdGVySWR9OiR7ZmlsdGVySXRlbUlkfWApO1xuICAgICAgICBzY3JvbGxUb1RvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaEZpbHRlckNsaWNrZWQsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgZmlsdGVyVHlwZTogJ1N0YXRpYycsXG4gICAgICAgICAgICBmaWx0ZXJDYXRlZ29yeTogZmlsdGVySWQsXG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZTogZmlsdGVySXRlbUlkLFxuICAgICAgICAgICAgcXVlcnlUZXh0OiBzZWFyY2hUZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBhZGRGaWx0ZXIoY3JlYXRlRmlsdGVyT3B0aW9uKGZpbHRlcklkLCBmaWx0ZXJJdGVtSWQsIGRpc3BsYXlOYW1lKSk7XG4gICAgICAgIHNjcm9sbFRvVG9wKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkRmlsdGVyLCByZW1vdmVGaWx0ZXIsIHNldFByb2R1Y3RTb3J0aW5nLCBzZWFyY2hUZXh0LCBzY3JvbGxUb1RvcF0sXG4gICk7XG5cblxuICBjb25zdCBoYW5kbGVDbGVhckFsbEZpbHRlcnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UHJvZHVjdFNvcnRpbmcoUHJvZHVjdFNvcnRpbmcuRkVBVFVSRUQpO1xuICAgIGNsZWFyRmlsdGVycygpO1xuICAgIHNjcm9sbFRvVG9wKCk7XG4gIH0sIFtzZXRQcm9kdWN0U29ydGluZywgY2xlYXJGaWx0ZXJzLCBzY3JvbGxUb1RvcF0pO1xuXG4gIC8vIFNpZGUgRWZmZWN0c1xuICB1c2VUcmFja0NvbXBvbmVudFZpc2libGVFdmVudChcbiAgICBTcGlmZnlXaWRnZXRzLlNlYXJjaFJlc3VsdHMsXG4gICAgc2VhcmNoUmVzdWx0c1JlZixcbiAgICB7fSxcbiAgICBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaENvbXBvbmVudFZpc2libGUsXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VhcmNoUmVzdWx0c1N0YXRlID09PSBTZWFyY2hSZXN1bHRzU3RhdGUuUmVzdWx0cyB8fCBzZWFyY2hSZXN1bHRzU3RhdGUgPT09IFNlYXJjaFJlc3VsdHNTdGF0ZS5Ob1Jlc3VsdHMpIHtcbiAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuU2VhcmNoUmVzdWx0c1ZpZXdlZCxcbiAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgIHF1ZXJ5VGV4dDogc2VhcmNoVGV4dCxcbiAgICAgICAgICByZXN1bHRzQ291bnQ6IHByb2R1Y3RMaXN0Lmxlbmd0aCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3Byb2R1Y3RMaXN0Lmxlbmd0aCwgc2VhcmNoUmVzdWx0c1N0YXRlXSk7XG5cbiAgLy8gVGhpcyBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIHNlYXJjaCB0ZXh0IHRyaWdnZXJpbmcgYSBzZWFyY2hcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocXVlcnkgJiYgcXVlcnkgIT09IHNlYXJjaFRleHQpIHtcbiAgICAgIGNvbnN0IGVzcSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCdlc3EnKTtcbiAgICAgIHNldFNlYXJjaFRleHQocXVlcnkpO1xuICAgICAgcGVyZm9ybVNlYXJjaCh7IHF1ZXJ5OiBlc3EgPz8gcXVlcnkgfSk7XG4gICAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtwZXJmb3JtU2VhcmNoLCBxdWVyeSwgc2V0U2VhcmNoVGV4dF0pO1xuXG4gIHJldHVybiB7XG4gICAgc2VhcmNoRGF0YSxcbiAgICBzZWFyY2hSZXNwb25zZUlkOiBzZWFyY2hEYXRhPy5zZWFyY2hSZXNwb25zZUlkID8/ICcnLFxuICAgIG1lcmNoYW50U2hvcnROYW1lOiBzYWZlTWVyY2hhbnRTaG9ydE5hbWUsXG4gICAgcHJvZHVjdENhcmRDb25maWc6IHNhZmVQcm9kdWN0Q2FyZENvbmZpZyxcbiAgICBwcm9kdWN0TGlzdCxcbiAgICByZWNvbW1lbmRlZFByb2R1Y3RzLFxuICAgIGF1dG9jb21wbGV0ZVJlc3VsdHMsXG4gICAgc2VhcmNoRmlsdGVyczogZmlsdGVycyxcbiAgICBhdmFpbGFibGVEeW5hbWljRmlsdGVycyxcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMsXG4gICAgc2VhcmNoVGV4dCxcbiAgICBxdWVyeTogcXVlcnkgfHwgJycsXG4gICAgc2VhcmNoUmVzdWx0c1N0YXRlLFxuICAgIGlzTG9hZGluZ1NlYXJjaCxcbiAgICBpc0ZpbHRlck9wZW4sXG4gICAgc2hvdWxkU2hvd0F1dG9jb21wbGV0ZSxcbiAgICBmb2N1c2VkSW5kZXgsXG4gICAgZm9jdXNlZE9wdGlvbklkLFxuICAgIGZpbHRlckJ1dHRvblRleHQsXG4gICAgb25TZWFyY2hJbnB1dENoYW5nZTogaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UsXG4gICAgb25TdWJtaXRTZWFyY2g6IGhhbmRsZVN1Ym1pdFNlYXJjaCxcbiAgICBvbkF1dG9jb21wbGV0ZVNlbGVjdDogaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0LFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvblNlYXJjaElucHV0Rm9jdXM6IGhhbmRsZVNlYXJjaElucHV0Rm9jdXMsXG4gICAgb25TZWFyY2hJbnB1dEJsdXI6IGhhbmRsZVNlYXJjaElucHV0Qmx1cixcbiAgICBvblRvZ2dsZUR5bmFtaWNGaWx0ZXI6IGhhbmRsZVRvZ2dsZUR5bmFtaWNGaWx0ZXIsXG4gICAgb25TZWxlY3RGaWx0ZXJJdGVtOiBoYW5kbGVTZWxlY3RGaWx0ZXJJdGVtLFxuICAgIG9uUmVtb3ZlRmlsdGVyOiBoYW5kbGVSZW1vdmVGaWx0ZXIsXG4gICAgb25DbGVhckFsbEZpbHRlcnM6IGhhbmRsZUNsZWFyQWxsRmlsdGVycyxcbiAgICBzZXRJc0ZpbHRlck9wZW4sXG4gICAgc2VhcmNoUmVzdWx0c1JlZixcbiAgfTtcbn07Il0sIm1hcHBpbmdz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
499
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJwcm9kdWN0UmV0cmlldmFsRnVuY3Rpb246XG4gIHwgKChwYXJhbXM6IFByb2R1Y3RSZXRyaWV2YWxQYXJhbXMpID0+IFByb21pc2U8UHJvZHVjdFJldHJpZXZhbFJlc3VsdD4pXG4gIHwgbnVsbCIsImVycm9yOiB1bmtub3duIiwiaGFuZGxlU2VsZWN0RmlsdGVySXRlbTogU2VsZWN0RmlsdGVySXRlbSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9TZWFyY2gvdXNlU2VhcmNoSW5wdXQudHMiLCIuLi8uLi8uLi9zcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RSZXRyaWV2YWxBZGFwdGVyLnRzIiwiLi4vLi4vLi4vc3JjL2F0b21zL3NlYXJjaC9wcm9kdWN0UmV0cmlldmFsQVBJLnRzIiwiLi4vLi4vLi4vc3JjL2hvb2tzL1NlYXJjaC91c2VSZWNvbW1lbmRlZFByb2R1Y3RzLnRzIiwiLi4vLi4vLi4vc3JjL2hvb2tzL1NlYXJjaC91c2VTZWFyY2gudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VBdG9tVmFsdWUgfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCBGdXNlIGZyb20gXCJmdXNlLmpzXCI7XG5cbmltcG9ydCB7IGF1dG9jb21wbGV0ZVN0YXRlQXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvZ2xvYmFsU2VhcmNoXCI7XG5pbXBvcnQgeyBhbXBsaXR1ZGVUcmFja0V2ZW50QXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvYW1wbGl0dWRlL2FtcGxpdHVkZVRyYWNrRXZlbnRBdG9tXCI7XG5pbXBvcnQgeyBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSBcInNyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0XCI7XG5pbXBvcnQgeyBTcGlmZnlXaWRnZXRzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3BpZmZ5V2lkZ2V0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZVNlYXJjaElucHV0UHJvcHMge1xuICBpbml0aWFsU2VhcmNoVGV4dD86IHN0cmluZztcbiAgc2VhcmNoT3JpZ2luOiBTcGlmZnlXaWRnZXRzO1xuICBvblNlYXJjaFN1Ym1pdD86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZVNlYXJjaElucHV0UmV0dXJuIHtcbiAgLy8gU3RhdGVcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBoYXNUZXh0OiBib29sZWFuO1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGZvY3VzZWRJbmRleDogbnVtYmVyO1xuICBmb2N1c2VkT3B0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXV0b2NvbXBsZXRlUmVzdWx0czogc3RyaW5nW107XG4gIHNob3VsZFNob3dBdXRvY29tcGxldGU6IGJvb2xlYW47XG4gIFxuICAvLyBIYW5kbGVyc1xuICBoYW5kbGVTZWFyY2hJbnB1dENoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGhhbmRsZVNlYXJjaElucHV0Rm9jdXM6ICgpID0+IHZvaWQ7XG4gIGhhbmRsZVNlYXJjaElucHV0Qmx1cjogKCkgPT4gdm9pZDtcbiAgaGFuZGxlS2V5RG93bjogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBoYW5kbGVBdXRvY29tcGxldGVTZWxlY3Q6IChzdWdnZXN0aW9uOiBzdHJpbmcsIHJhbmtQb3NpdGlvbj86IG51bWJlcikgPT4gdm9pZDtcbiAgaGFuZGxlU3VibWl0U2VhcmNoOiAoKSA9PiB2b2lkO1xuICBcbiAgLy8gVXRpbGl0aWVzXG4gIHNldFNlYXJjaFRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlc2V0U2VhcmNoOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgdXNlU2VhcmNoSW5wdXQgPSAoe1xuICBpbml0aWFsU2VhcmNoVGV4dCA9IFwiXCIsXG4gIHNlYXJjaE9yaWdpbixcbiAgb25TZWFyY2hTdWJtaXQsXG59OiBVc2VTZWFyY2hJbnB1dFByb3BzKTogVXNlU2VhcmNoSW5wdXRSZXR1cm4gPT4ge1xuICBjb25zdCB0cmFjayA9IHVzZUF0b21WYWx1ZShhbXBsaXR1ZGVUcmFja0V2ZW50QXRvbSk7XG5cbiAgLy8gU3RhdGVcbiAgY29uc3QgW3NlYXJjaFRleHQsIHNldFNlYXJjaFRleHRdID0gdXNlU3RhdGUoaW5pdGlhbFNlYXJjaFRleHQpO1xuICBjb25zdCBbaGFzVGV4dCwgc2V0SGFzVGV4dF0gPSB1c2VTdGF0ZShpbml0aWFsU2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMCk7XG4gIGNvbnN0IFtpc0ZvY3VzZWQsIHNldElzRm9jdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmb2N1c2VkSW5kZXgsIHNldEZvY3VzZWRJbmRleF0gPSB1c2VTdGF0ZSgtMSk7XG4gIGNvbnN0IFtmb2N1c2VkT3B0aW9uSWQsIHNldEZvY3VzZWRPcHRpb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBhdXRvY29tcGxldGVTdGF0ZSA9IHVzZUF0b21WYWx1ZShhdXRvY29tcGxldGVTdGF0ZUF0b20pO1xuICBjb25zdCBnbG9iYWxBdXRvY29tcGxldGVSZXN1bHRzID0gYXV0b2NvbXBsZXRlU3RhdGUucmVzdWx0cztcbiAgY29uc3QgaXNBdXRvY29tcGxldGVFbmFibGVkID0gZ2xvYmFsQXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGggPiAwO1xuXG4gIC8vIFJlZnNcbiAgY29uc3QgaXNTZWxlY3RpbmdBdXRvY29tcGxldGUgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIC8vIENvbXB1dGVkXG4gIGNvbnN0IHNob3VsZFNob3dBdXRvY29tcGxldGUgPSBoYXNUZXh0ICYmIGlzRm9jdXNlZCAmJiBpc0F1dG9jb21wbGV0ZUVuYWJsZWQ7XG5cbiAgY29uc3QgYXV0b2NvbXBsZXRlUmVzdWx0c0xpbWl0ID0gNTtcblxuICAvLyBDb25maWd1cmUgRnVzZS5qcyBmb3IgZnV6enkgc2VhcmNoIHdpdGggY3VzdG9tIHNjb3JpbmdcbiAgY29uc3QgZnVzZU9wdGlvbnMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICBpbmNsdWRlTWF0Y2hlczogdHJ1ZSxcbiAgICAgIC8vIEZ1enp5IG1hdGNoaW5nIHRocmVzaG9sZCAoMC4wID0gcGVyZmVjdCBtYXRjaCwgMS4wID0gbWF0Y2ggYW55dGhpbmcpXG4gICAgICB0aHJlc2hvbGQ6IDAuMyxcbiAgICAgIC8vIExvY2F0aW9uIHdoZXJlIG1hdGNoIGlzIGV4cGVjdGVkICgwID0gYmVnaW5uaW5nKVxuICAgICAgbG9jYXRpb246IDAsXG4gICAgICAvLyBEaXN0YW5jZSBmcm9tIGxvY2F0aW9uIHdoZXJlIG1hdGNoIGNhbiBiZSBmb3VuZCAtIHNtYWxsZXIgZm9yIHByZWZpeCBwcmVmZXJlbmNlXG4gICAgICBkaXN0YW5jZTogNCxcbiAgICAgIC8vIE1pbmltdW0gY2hhcmFjdGVyIGxlbmd0aCBiZWZvcmUgZnV6enkgbWF0Y2hpbmcgc3RhcnRzXG4gICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDEsXG4gICAgICAvLyBLZXlzIHRvIHNlYXJjaCAod2UncmUgc2VhcmNoaW5nIHN0cmluZ3MgZGlyZWN0bHksIHNvIG5vIGtleXMgbmVlZGVkKVxuICAgICAga2V5czogW10sXG4gICAgICAvLyBVc2UgZXh0ZW5kZWQgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzIGFuZCBwcmVmaXggbWF0Y2hpbmdcbiAgICAgIHVzZUV4dGVuZGVkU2VhcmNoOiBmYWxzZSxcbiAgICAgIC8vIERvbid0IGlnbm9yZSBsb2NhdGlvbiAtIHRoaXMgaGVscHMgcHJpb3JpdGl6ZSBtYXRjaGVzIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgIGlnbm9yZUxvY2F0aW9uOiBmYWxzZSxcbiAgICB9KSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGZ1c2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWdsb2JhbEF1dG9jb21wbGV0ZVJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IEZ1c2UoZ2xvYmFsQXV0b2NvbXBsZXRlUmVzdWx0cywgZnVzZU9wdGlvbnMpO1xuICB9LCBbZ2xvYmFsQXV0b2NvbXBsZXRlUmVzdWx0cywgZnVzZU9wdGlvbnNdKTtcblxuICAvLyBBdXRvY29tcGxldGUgZnV6enkgc2VhcmNoIHVzaW5nIEZ1c2UuanNcbiAgY29uc3QgYXV0b2NvbXBsZXRlUmVzdWx0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghaXNBdXRvY29tcGxldGVFbmFibGVkIHx8ICFmdXNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFzZWFyY2hUZXh0LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1c2VSZXN1bHRzID0gZnVzZS5zZWFyY2goc2VhcmNoVGV4dCk7XG5cbiAgICAvLyBVc2Ugb25seSBGdXNlLmpzIHNjb3JpbmcgKHJlc3VsdHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IHJlbGV2YW5jZSlcbiAgICByZXR1cm4gZnVzZVJlc3VsdHNcbiAgICAgIC5zbGljZSgwLCBhdXRvY29tcGxldGVSZXN1bHRzTGltaXQpXG4gICAgICAubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKTtcbiAgfSwgW2lzQXV0b2NvbXBsZXRlRW5hYmxlZCwgZnVzZSwgc2VhcmNoVGV4dCwgYXV0b2NvbXBsZXRlUmVzdWx0c0xpbWl0XSk7XG5cbiAgLy8gSGFuZGxlcnNcbiAgY29uc3QgaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgY2hhbmdpbmcgdGV4dCwgdGhleSBtdXN0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGlucHV0XG4gICAgICAvLyBTbyB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5J3JlIGZvY3VzZWRcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gc2VhcmNoVGV4dCkge1xuICAgICAgICBzZXRJc0ZvY3VzZWQodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdHJhY2s/Lih7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaElucHV0U3RhcnRlZCxcbiAgICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgICBzZWFyY2hPcmlnaW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZXRTZWFyY2hUZXh0KG5ld1ZhbHVlKTtcbiAgICAgIHNldEhhc1RleHQobmV3VmFsdWUudHJpbSgpLmxlbmd0aCA+IDApO1xuICAgICAgc2V0Rm9jdXNlZEluZGV4KC0xKTtcbiAgICAgIHNldEZvY3VzZWRPcHRpb25JZCh1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgW3NlYXJjaE9yaWdpbiwgc2VhcmNoVGV4dCwgdHJhY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoSW5wdXRGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0ZvY3VzZWQodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hJbnB1dEJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWlzU2VsZWN0aW5nQXV0b2NvbXBsZXRlLmN1cnJlbnQpIHtcbiAgICAgICAgc2V0SXNGb2N1c2VkKGZhbHNlKTtcbiAgICAgICAgc2V0Rm9jdXNlZEluZGV4KC0xKTtcbiAgICAgICAgc2V0Rm9jdXNlZE9wdGlvbklkKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSwgMTUwKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdFNlYXJjaCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKSAmJiBvblNlYXJjaFN1Ym1pdCkge1xuICAgICAgdHJhY2s/Lih7XG4gICAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5TZWFyY2hRdWVyeVN1Ym1pdHRlZCxcbiAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgIHNlYXJjaE9yaWdpbixcbiAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQudHJpbSgpLFxuICAgICAgICB9LFxuICAgICAgICBhbHNvU2VuZFRvR29vZ2xlQW5hbHl0aWNzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBvblNlYXJjaFN1Ym1pdChzZWFyY2hUZXh0LnRyaW0oKSk7XG4gICAgfVxuICB9LCBbc2VhcmNoVGV4dCwgb25TZWFyY2hTdWJtaXQsIHNlYXJjaE9yaWdpbiwgdHJhY2tdKTtcblxuICBjb25zdCBoYW5kbGVBdXRvY29tcGxldGVTZWxlY3QgPSB1c2VDYWxsYmFjayhcbiAgICAoc3VnZ2VzdGlvbjogc3RyaW5nLCByYW5rUG9zaXRpb24/OiBudW1iZXIpID0+IHtcbiAgICAgIGlzU2VsZWN0aW5nQXV0b2NvbXBsZXRlLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgc2V0U2VhcmNoVGV4dChzdWdnZXN0aW9uKTtcbiAgICAgIHNldEhhc1RleHQoc3VnZ2VzdGlvbi50cmltKCkubGVuZ3RoID4gMCk7XG4gICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xuXG4gICAgICB0cmFjaz8uKHtcbiAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaElucHV0U3RhcnRlZCxcbiAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgIHNlYXJjaE9yaWdpbixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob25TZWFyY2hTdWJtaXQpIHtcbiAgICAgICAgb25TZWFyY2hTdWJtaXQoc3VnZ2VzdGlvbi50cmltKCkpO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaXNTZWxlY3RpbmdBdXRvY29tcGxldGUuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfSwgMTAwKTtcbiAgICB9LFxuICAgIFtvblNlYXJjaFN1Ym1pdCwgc2VhcmNoT3JpZ2luLCB0cmFja11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gKGZvY3VzZWRJbmRleCArIDEpICUgYXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGg7XG4gICAgICAgIHNldEZvY3VzZWRJbmRleChuZXdJbmRleCk7XG4gICAgICAgIHNldEZvY3VzZWRPcHRpb25JZChgb3B0aW9uLSR7bmV3SW5kZXh9YCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPVxuICAgICAgICAgIChmb2N1c2VkSW5kZXggLSAxICsgYXV0b2NvbXBsZXRlUmVzdWx0cy5sZW5ndGgpICVcbiAgICAgICAgICBhdXRvY29tcGxldGVSZXN1bHRzLmxlbmd0aDtcbiAgICAgICAgc2V0Rm9jdXNlZEluZGV4KG5ld0luZGV4KTtcbiAgICAgICAgc2V0Rm9jdXNlZE9wdGlvbklkKGBvcHRpb24tJHtuZXdJbmRleH1gKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGhhbmRsZVN1Ym1pdFNlYXJjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvblRleHQgPSBhdXRvY29tcGxldGVSZXN1bHRzW2ZvY3VzZWRJbmRleF07XG4gICAgICAgICAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0KHN1Z2dlc3Rpb25UZXh0LCBmb2N1c2VkSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRGb2N1c2VkSW5kZXgoLTEpO1xuICAgICAgICBzZXRGb2N1c2VkT3B0aW9uSWQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dG9jb21wbGV0ZVJlc3VsdHMsXG4gICAgICBmb2N1c2VkSW5kZXgsXG4gICAgICBoYW5kbGVBdXRvY29tcGxldGVTZWxlY3QsXG4gICAgICBoYW5kbGVTdWJtaXRTZWFyY2gsXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IHNldFNlYXJjaFRleHRVdGlsaXR5ID0gdXNlQ2FsbGJhY2soKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIHNldFNlYXJjaFRleHQodGV4dCk7XG4gICAgc2V0SGFzVGV4dCh0ZXh0LnRyaW0oKS5sZW5ndGggPiAwKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJlc2V0U2VhcmNoID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlYXJjaFRleHQoXCJcIik7XG4gICAgc2V0SGFzVGV4dChmYWxzZSk7XG4gICAgc2V0SXNGb2N1c2VkKGZhbHNlKTtcbiAgICBzZXRGb2N1c2VkSW5kZXgoLTEpO1xuICAgIHNldEZvY3VzZWRPcHRpb25JZCh1bmRlZmluZWQpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTdGF0ZVxuICAgIHNlYXJjaFRleHQsXG4gICAgaGFzVGV4dCxcbiAgICBpc0ZvY3VzZWQsXG4gICAgZm9jdXNlZEluZGV4LFxuICAgIGZvY3VzZWRPcHRpb25JZCxcbiAgICBhdXRvY29tcGxldGVSZXN1bHRzLFxuICAgIHNob3VsZFNob3dBdXRvY29tcGxldGUsXG5cbiAgICAvLyBIYW5kbGVyc1xuICAgIGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlLFxuICAgIGhhbmRsZVNlYXJjaElucHV0Rm9jdXMsXG4gICAgaGFuZGxlU2VhcmNoSW5wdXRCbHVyLFxuICAgIGhhbmRsZUtleURvd24sXG4gICAgaGFuZGxlQXV0b2NvbXBsZXRlU2VsZWN0LFxuICAgIGhhbmRsZVN1Ym1pdFNlYXJjaCxcblxuICAgIC8vIFV0aWxpdGllc1xuICAgIHNldFNlYXJjaFRleHQ6IHNldFNlYXJjaFRleHRVdGlsaXR5LFxuICAgIHJlc2V0U2VhcmNoLFxuICB9O1xufTsiLCJpbXBvcnQgeyBQcm9kdWN0UmV0cmlldmFsUGFyYW1zLCBQcm9kdWN0UmV0cmlldmFsUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gVGhpcyB3aWxsIGJlIHNldCBieSB0aGUgUHJvZHVjdFJldHJpZXZhbFByb3ZpZGVyIHdoZW4gaXQgaW5pdGlhbGl6ZXNcbmxldCBwcm9kdWN0UmV0cmlldmFsRnVuY3Rpb246XG4gIHwgKChwYXJhbXM6IFByb2R1Y3RSZXRyaWV2YWxQYXJhbXMpID0+IFByb21pc2U8UHJvZHVjdFJldHJpZXZhbFJlc3VsdD4pXG4gIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCBzZXRQcm9kdWN0UmV0cmlldmFsRnVuY3Rpb24gPSAoXG4gIGZuOiAocGFyYW1zOiBQcm9kdWN0UmV0cmlldmFsUGFyYW1zKSA9PiBQcm9taXNlPFByb2R1Y3RSZXRyaWV2YWxSZXN1bHQ+XG4pID0+IHtcbiAgcHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uID0gZm47XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uID0gKCkgPT4ge1xuICBpZiAoIXByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiUHJvZHVjdCByZXRyaWV2YWwgZnVuY3Rpb24gbm90IGluaXRpYWxpemVkLiBNYWtlIHN1cmUgUHJvZHVjdFJldHJpZXZhbFByb3ZpZGVyIGlzIG1vdW50ZWQuXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBwcm9kdWN0UmV0cmlldmFsRnVuY3Rpb247XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJQcm9kdWN0UmV0cmlldmFsRnVuY3Rpb24gPSAoKSA9PiB7XG4gIHByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbiA9IG51bGw7XG59OyIsIlxuaW1wb3J0IHsgYXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdFJldHJpZXZhbEZ1bmN0aW9uIH0gZnJvbSBcIi4vcHJvZHVjdFJldHJpZXZhbEFkYXB0ZXJcIjtcbmltcG9ydCB7IFByb2R1Y3RSZXRyaWV2YWxQYXJhbXMsIFByb2R1Y3RSZXRyaWV2YWxSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbnRlcmZhY2UgUHJvZHVjdFJldHJpZXZhbFN0YXRlIHtcbiAgZGF0YTogUHJvZHVjdFJldHJpZXZhbFJlc3VsdCB8IG51bGw7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICBsYXN0UHJvZHVjdElkczogc3RyaW5nW10gfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgcHJvZHVjdFJldHJpZXZhbEF0b20gPSBhdG9tPFByb2R1Y3RSZXRyaWV2YWxTdGF0ZT4oe1xuICBkYXRhOiBudWxsLFxuICBsb2FkaW5nOiBmYWxzZSxcbiAgZXJyb3I6IG51bGwsXG4gIGxhc3RQcm9kdWN0SWRzOiBudWxsLFxufSk7XG5cbmV4cG9ydCBjb25zdCBwZXJmb3JtUHJvZHVjdFJldHJpZXZhbEF0b20gPSBhdG9tKFxuICBudWxsLFxuICBhc3luYyAoZ2V0LCBzZXQsIHBhcmFtczogUHJvZHVjdFJldHJpZXZhbFBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGdldChwcm9kdWN0UmV0cmlldmFsQXRvbSk7XG5cbiAgICBpZiAoY3VycmVudFN0YXRlLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjsgLy8gUHJldmVudCBjb25jdXJyZW50IHJldHJpZXZhbHNcbiAgICB9XG5cbiAgICBzZXQocHJvZHVjdFJldHJpZXZhbEF0b20sIHtcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBsYXN0UHJvZHVjdElkczogcGFyYW1zLnByb2R1Y3RJZHMsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0cmlldmVQcm9kdWN0cyA9IGdldFByb2R1Y3RSZXRyaWV2YWxGdW5jdGlvbigpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmV0cmlldmVQcm9kdWN0cyhwYXJhbXMpO1xuICAgICAgc2V0KHByb2R1Y3RSZXRyaWV2YWxBdG9tLCB7XG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBsYXN0UHJvZHVjdElkczogcGFyYW1zLnByb2R1Y3RJZHMsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkFuIHVua25vd24gZXJyb3Igb2NjdXJyZWRcIjtcbiAgICAgIHNldChwcm9kdWN0UmV0cmlldmFsQXRvbSwge1xuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgbGFzdFByb2R1Y3RJZHM6IHBhcmFtcy5wcm9kdWN0SWRzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4pO1xuXG4vLyBHZXQganVzdCB0aGUgcHJvZHVjdHMgYXJyYXkgKGFscmVhZHkgbm9ybWFsaXplZCBieSBzZXJ2aWNlKVxuZXhwb3J0IGNvbnN0IHJldHJpZXZlZFByb2R1Y3RzQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCByZXRyaWV2YWxEYXRhID0gZ2V0KHByb2R1Y3RSZXRyaWV2YWxBdG9tKS5kYXRhO1xuICByZXR1cm4gcmV0cmlldmFsRGF0YT8ucHJvZHVjdHMgfHwgW107XG59KTtcblxuZXhwb3J0IGNvbnN0IHByb2R1Y3RSZXRyaWV2YWxMb2FkaW5nQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICByZXR1cm4gZ2V0KHByb2R1Y3RSZXRyaWV2YWxBdG9tKS5sb2FkaW5nO1xufSk7XG5cbmV4cG9ydCBjb25zdCBwcm9kdWN0UmV0cmlldmFsRXJyb3JBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIHJldHVybiBnZXQocHJvZHVjdFJldHJpZXZhbEF0b20pLmVycm9yO1xufSk7IiwiaW1wb3J0IHsgdXNlQXRvbVZhbHVlLCB1c2VTZXRBdG9tIH0gZnJvbSBcImpvdGFpXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gXCJzcmMvY29udGV4dHMvZmVhdHVyZUZsYWdTZXJ2aWNlQ29udGV4dC9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0XCI7XG5pbXBvcnQge1xuICByZXRyaWV2ZWRQcm9kdWN0c0F0b20sXG4gIHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsQXRvbSxcbiAgcHJvZHVjdFJldHJpZXZhbEF0b20sXG59IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RSZXRyaWV2YWxBUElcIjtcbmltcG9ydCB7IHVzZU5ld09yZ0NvbmZpZyB9IGZyb20gXCIuLi9OZXdPcmdDb25maWdcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VcIjtcbmltcG9ydCB7IEZlYXR1cmVHYXRlcyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5cbi8qKlxuICogQSBob29rIHRvIGdldCByZWNvbW1lbmRlZCBwcm9kdWN0cy5cbiAqIEl0IGNoZWNrcyB0aGUgYElzUmVjb21tZW5kZWRQcm9kdWN0c0VuYWJsZWRgIGZlYXR1cmUgZ2F0ZSBhbmQgdHJpZ2dlcnMgZmV0Y2hpbmcgaWYgbmVlZGVkLlxuICogSWYgdGhlIGdhdGUgaXMgZW5hYmxlZCwgaXQgcmV0dXJucyB0aGUgbGlzdCBvZiByZWNvbW1lbmRlZCBwcm9kdWN0cy5cbiAqIElmIHRoZSBnYXRlIGlzIGRpc2FibGVkLCBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LlxuICpcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlY29tbWVuZGVkIHByb2R1Y3RzIG9yIGFuIGVtcHR5IGFycmF5LlxuICovXG5leHBvcnQgY29uc3QgdXNlUmVjb21tZW5kZWRQcm9kdWN0cyA9XG4gICgpOiBTZWFyY2hSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzW1wiYXR0cmlidXRlc1wiXVtdID0+IHtcbiAgICBjb25zdCB7IGZlYXR1cmVGbGFnU2VydmljZSB9ID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gICAgY29uc3QgaXNFbmFibGVkID0gZmVhdHVyZUZsYWdTZXJ2aWNlPy5pc0ZlYXR1cmVHYXRlRW5hYmxlZChcbiAgICAgIEZlYXR1cmVHYXRlcy5Jc1JlY29tbWVuZGVkUHJvZHVjdHNFbmFibGVkXG4gICAgKTtcbiAgICBjb25zdCByZWNvbW1lbmRlZFByb2R1Y3RzID0gdXNlQXRvbVZhbHVlKHJldHJpZXZlZFByb2R1Y3RzQXRvbSk7XG4gICAgY29uc3QgcGVyZm9ybVByb2R1Y3RSZXRyaWV2YWwgPSB1c2VTZXRBdG9tKHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsQXRvbSk7XG4gICAgY29uc3QgeyBsYXN0UHJvZHVjdElkcyB9ID0gdXNlQXRvbVZhbHVlKHByb2R1Y3RSZXRyaWV2YWxBdG9tKTtcbiAgICBjb25zdCBvcmdVSUNvbmZpZyA9IHVzZU5ld09yZ0NvbmZpZygpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJlY29tbWVuZGVkUHJvZHVjdElkcyA9IG9yZ1VJQ29uZmlnLmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZ1xuICAgICAgICA/IG9yZ1VJQ29uZmlnLmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZy5yZWNvbW1lbmRlZFByb2R1Y3RzXG4gICAgICAgIDogW107XG4gICAgICAvLyBGZXRjaCBvbmx5IGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZXJlIGFyZSBJRHMgdG8gZmV0Y2gsIGFuZCB3ZSBoYXZlbid0IGFscmVhZHkgZmV0Y2hlZCB0aGVtLlxuICAgICAgaWYgKFxuICAgICAgICBpc0VuYWJsZWQgJiZcbiAgICAgICAgcmVjb21tZW5kZWRQcm9kdWN0SWRzICYmXG4gICAgICAgIHJlY29tbWVuZGVkUHJvZHVjdElkcy5sZW5ndGggPiAwICYmXG4gICAgICAgICFsYXN0UHJvZHVjdElkc1xuICAgICAgKSB7XG4gICAgICAgIHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsKHsgcHJvZHVjdElkczogcmVjb21tZW5kZWRQcm9kdWN0SWRzIH0pO1xuICAgICAgfVxuICAgIH0sIFtpc0VuYWJsZWQsIHBlcmZvcm1Qcm9kdWN0UmV0cmlldmFsLCBsYXN0UHJvZHVjdElkcywgb3JnVUlDb25maWddKTtcblxuICAgIHJldHVybiBpc0VuYWJsZWQgPyByZWNvbW1lbmRlZFByb2R1Y3RzIDogW107XG4gIH07IiwiaW1wb3J0IHsgdXNlQXRvbSwgdXNlQXRvbVZhbHVlLCB1c2VTZXRBdG9tIH0gZnJvbSBcImpvdGFpXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHtcbiAgYWRkU2VhcmNoRmlsdGVyQXRvbSxcbiAgY2xlYXJTZWFyY2hGaWx0ZXJzQXRvbSxcbiAgY3JlYXRlRmlsdGVyT3B0aW9uLFxuICBmaWx0ZXJlZFNlYXJjaFByb2R1Y3RzQXRvbSxcbiAgcGVyZm9ybVNlYXJjaEF0b20sXG4gIHJlbW92ZVNlYXJjaEZpbHRlckF0b20sXG4gIHNlYXJjaEF0b20sXG4gIHNlYXJjaEZpbHRlcnNBdG9tLFxuICBzZWFyY2hQYXJhbXNBdG9tLFxuICBzZWFyY2hQcm9kdWN0U29ydGluZ0F0b20sXG4gIHNlYXJjaFNlbGVjdGVkRmlsdGVyc0F0b20sXG4gIFNlbGVjdGVkRmlsdGVyT3B0aW9uLFxufSBmcm9tIFwic3JjL2F0b21zL3NlYXJjaFwiO1xuaW1wb3J0IHtcbiAgaXNGaWx0ZXJPcGVuQXRvbSxcbn0gZnJvbSBcInNyYy9hdG9tcy9nbG9iYWxTZWFyY2gvZ2xvYmFsU2VhcmNoXCI7XG5pbXBvcnQgeyBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZSB9IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3V0aWxzXCI7XG5pbXBvcnQgeyBQcm9kdWN0U29ydGluZyB9IGZyb20gXCJzcmMvYXRvbXMvc2VhcmNoL3R5cGVzXCI7XG5pbXBvcnQge1xuICBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICB1c2VBbXBsaXR1ZGUsXG59IGZyb20gXCJzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dC9hbXBsaXR1ZGVDb250ZXh0XCI7XG5pbXBvcnQgeyBTcGlmZnlXaWRnZXRzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3BpZmZ5V2lkZ2V0c1wiO1xuaW1wb3J0IHsgUHJvZHVjdENhcmRDb25maWcgfSBmcm9tIFwic3JjL2NvbnRleHRzL3R5cGVzXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc2VhcmNoXCI7XG5pbXBvcnQgeyBTZWFyY2hSZXNwb25zZVByb2R1Y3QgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQge1xuICBTZWFyY2hGaWx0ZXJEYXR1bSxcbiAgU2VsZWN0RmlsdGVySXRlbSxcbn0gZnJvbSBcInNyYy90eXBlcy9zZWFyY2gtZmlsdGVyLXR5cGVzXCI7XG5pbXBvcnQgeyBnZXRTZWFyY2hSZXN1bHRzU3RhdGUsIFNlYXJjaFJlc3VsdHNTdGF0ZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgb3JnU2hvcnROYW1lQXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZ1wiO1xuaW1wb3J0IHsgdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQgfSBmcm9tIFwiLi4vVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnRcIjtcbmltcG9ydCB7IHVzZVNlYXJjaElucHV0IH0gZnJvbSBcIi4vdXNlU2VhcmNoSW5wdXRcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgdXNlTmV3T3JnQ29uZmlnIH0gZnJvbSBcIi4uL05ld09yZ0NvbmZpZ1wiO1xuaW1wb3J0IHsgdXNlUmVjb21tZW5kZWRQcm9kdWN0cyB9IGZyb20gXCIuL3VzZVJlY29tbWVuZGVkUHJvZHVjdHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXN1bHRzSG9jUHJvcHMge1xuICAvLyBEYXRhXG4gIHNlYXJjaERhdGE6IFNlYXJjaFJlc3VsdCB8IG51bGw7XG4gIHNlYXJjaFJlc3BvbnNlSWQ6IHN0cmluZztcbiAgbWVyY2hhbnRTaG9ydE5hbWU6IHN0cmluZztcbiAgcHJvZHVjdENhcmRDb25maWc6IFByb2R1Y3RDYXJkQ29uZmlnO1xuICBwcm9kdWN0TGlzdDogU2VhcmNoUmVzcG9uc2VQcm9kdWN0W107XG4gIGF1dG9jb21wbGV0ZVJlc3VsdHM6IHN0cmluZ1tdO1xuICBzZWFyY2hGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJEYXR1bVtdO1xuICBhdmFpbGFibGVEeW5hbWljRmlsdGVyczogeyBuYW1lOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmcgfVtdO1xuICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IFNlbGVjdGVkRmlsdGVyT3B0aW9uW107XG4gIHJlY29tbWVuZGVkUHJvZHVjdHM6IFNlYXJjaFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdO1xuICByZWNvbW1lbmRlZFByb2R1Y3RzSGVhZGluZzogc3RyaW5nO1xuICBzZWFyY2hPdmVybGF5SGVhZGluZzogc3RyaW5nO1xuXG4gIC8vIFN0YXRlXG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgcXVlcnk6IHN0cmluZztcbiAgc2VhcmNoUmVzdWx0c1N0YXRlOiBTZWFyY2hSZXN1bHRzU3RhdGU7XG4gIGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbjtcbiAgaXNGaWx0ZXJPcGVuOiBib29sZWFuO1xuICBzaG91bGRTaG93QXV0b2NvbXBsZXRlOiBib29sZWFuO1xuICBmb2N1c2VkSW5kZXg6IG51bWJlcjtcbiAgZm9jdXNlZE9wdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gVUlcbiAgZmlsdGVyQnV0dG9uVGV4dDogc3RyaW5nO1xuXG4gIC8vIEV2ZW50IEhhbmRsZXJzXG4gIG9uU2VhcmNoSW5wdXRDaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvblN1Ym1pdFNlYXJjaDogKCkgPT4gdm9pZDtcbiAgb25BdXRvY29tcGxldGVTZWxlY3Q6IChzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uS2V5RG93bjogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBvblNlYXJjaElucHV0Rm9jdXM6ICgpID0+IHZvaWQ7XG4gIG9uU2VhcmNoSW5wdXRCbHVyOiAoKSA9PiB2b2lkO1xuICBvblRvZ2dsZUR5bmFtaWNGaWx0ZXI6ICh7IGZpbHRlciwgZHluYW1pY0ZpbHRlckRpc3BsYXlOYW1lIH06IHsgZmlsdGVyOiBzdHJpbmc7IGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZTogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIG9uU2VsZWN0RmlsdGVySXRlbTogU2VsZWN0RmlsdGVySXRlbTtcbiAgb25SZW1vdmVGaWx0ZXI6IChmaWx0ZXI6IFNlbGVjdGVkRmlsdGVyT3B0aW9uKSA9PiB2b2lkO1xuICBvbkNsZWFyQWxsRmlsdGVyczogKCkgPT4gdm9pZDtcbiAgc2V0SXNGaWx0ZXJPcGVuOiAoaXNGaWx0ZXJPcGVuOiBib29sZWFuKSA9PiB2b2lkO1xuICByZXNldFNlYXJjaDogKCkgPT4gdm9pZDtcbiAgLy8gUmVmc1xuICBzZWFyY2hSZXN1bHRzUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xufVxuXG5leHBvcnQgY29uc3QgdXNlU2VhcmNoID0gKHsgYWxsb3dSZWRpcmVjdCA9IGZhbHNlIH06IHsgYWxsb3dSZWRpcmVjdD86IGJvb2xlYW4gfSA9IHt9KTogU2VhcmNoUmVzdWx0c0hvY1Byb3BzID0+IHtcbiAgLy8gQXRvbXNcbiAgY29uc3QgY29uZmlnID0gdXNlTmV3T3JnQ29uZmlnKCk7XG4gIGNvbnN0IG9yZ1Nob3J0TmFtZSA9IHVzZUF0b21WYWx1ZShvcmdTaG9ydE5hbWVBdG9tKTtcbiAgY29uc3QgeyBkYXRhOiBzZWFyY2hEYXRhLCBsb2FkaW5nOiBpc0xvYWRpbmdTZWFyY2ggfSA9XG4gICAgdXNlQXRvbVZhbHVlKHNlYXJjaEF0b20pO1xuICBjb25zdCBwcm9kdWN0TGlzdCA9IHVzZUF0b21WYWx1ZShmaWx0ZXJlZFNlYXJjaFByb2R1Y3RzQXRvbSk7XG4gIGNvbnN0IHBlcmZvcm1TZWFyY2ggPSB1c2VTZXRBdG9tKHBlcmZvcm1TZWFyY2hBdG9tKTtcbiAgY29uc3QgW3sgcXVlcnkgfV0gPSB1c2VBdG9tKHNlYXJjaFBhcmFtc0F0b20pO1xuICBjb25zdCBbaXNGaWx0ZXJPcGVuLCBzZXRJc0ZpbHRlck9wZW5dID0gdXNlQXRvbShpc0ZpbHRlck9wZW5BdG9tKTtcbiAgY29uc3QgW3NlbGVjdGVkRmlsdGVyT3B0aW9uc10gPSB1c2VBdG9tKHNlYXJjaFNlbGVjdGVkRmlsdGVyc0F0b20pO1xuICBjb25zdCBhZGRGaWx0ZXIgPSB1c2VTZXRBdG9tKGFkZFNlYXJjaEZpbHRlckF0b20pO1xuICBjb25zdCByZW1vdmVGaWx0ZXIgPSB1c2VTZXRBdG9tKHJlbW92ZVNlYXJjaEZpbHRlckF0b20pO1xuICBjb25zdCBbcHJvZHVjdFNvcnRpbmcsIHNldFByb2R1Y3RTb3J0aW5nXSA9IHVzZUF0b20oc2VhcmNoUHJvZHVjdFNvcnRpbmdBdG9tKTtcbiAgY29uc3QgY2xlYXJGaWx0ZXJzID0gdXNlU2V0QXRvbShjbGVhclNlYXJjaEZpbHRlcnNBdG9tKTtcbiAgY29uc3Qgc2VhcmNoRmlsdGVycyA9IHVzZUF0b21WYWx1ZShzZWFyY2hGaWx0ZXJzQXRvbSk7XG4gIGNvbnN0IHJlY29tbWVuZGVkUHJvZHVjdHMgPSB1c2VSZWNvbW1lbmRlZFByb2R1Y3RzKCk7XG5cbiAgLy8gUmVmc1xuICBjb25zdCBzZWFyY2hSZXN1bHRzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgXG4gIC8vIFV0aWxpdGllc1xuICBjb25zdCBzY3JvbGxUb1RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBzZWFyY2hSZXN1bHRzUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH1cbiAgfSwgW10pO1xuICBcbiAgLy8gU2VhcmNoIElucHV0IEhvb2tcbiAgY29uc3Qgc2VhcmNoSW5wdXQgPSB1c2VTZWFyY2hJbnB1dCh7XG4gICAgaW5pdGlhbFNlYXJjaFRleHQ6IHF1ZXJ5IHx8ICcnLFxuICAgIHNlYXJjaE9yaWdpbjogU3BpZmZ5V2lkZ2V0cy5TZWFyY2hSZXN1bHRzLFxuICAgIG9uU2VhcmNoU3VibWl0OiAoc2VhcmNoUXVlcnkpID0+IHtcbiAgICAgIHBlcmZvcm1TZWFyY2goeyBxdWVyeTogc2VhcmNoUXVlcnkgfSwgYWxsb3dSZWRpcmVjdCk7XG4gICAgfSxcbiAgfSk7XG4gIFxuICBjb25zdCB7XG4gICAgc2VhcmNoVGV4dCxcbiAgICBmb2N1c2VkSW5kZXgsXG4gICAgZm9jdXNlZE9wdGlvbklkLFxuICAgIGF1dG9jb21wbGV0ZVJlc3VsdHMsXG4gICAgc2hvdWxkU2hvd0F1dG9jb21wbGV0ZSxcbiAgICBoYW5kbGVTZWFyY2hJbnB1dENoYW5nZSxcbiAgICBoYW5kbGVTZWFyY2hJbnB1dEZvY3VzLFxuICAgIGhhbmRsZVNlYXJjaElucHV0Qmx1cixcbiAgICBoYW5kbGVLZXlEb3duLFxuICAgIGhhbmRsZUF1dG9jb21wbGV0ZVNlbGVjdCxcbiAgICBoYW5kbGVTdWJtaXRTZWFyY2gsXG4gICAgc2V0U2VhcmNoVGV4dCxcbiAgICByZXNldFNlYXJjaCxcbiAgfSA9IHNlYXJjaElucHV0O1xuICBjb25zdCBzZWFyY2hSZXN1bHRzU3RhdGUgPSBnZXRTZWFyY2hSZXN1bHRzU3RhdGUoaXNMb2FkaW5nU2VhcmNoLCBzZWFyY2hEYXRhKTtcblxuICBjb25zdCBkeW5hbWljRmlsdGVycyA9IHNlYXJjaERhdGE/LmZpbHRlcnMgfHwgW107XG5cbiAgLy8gUHJvdmlkZSBmYWxsYmFjayB2YWx1ZXMgd2hlbiBvcmdVSUNvbmZpZyBpcyBub3QgeWV0IGF2YWlsYWJsZVxuICBjb25zdCBzYWZlUHJvZHVjdENhcmRDb25maWcgPSBjb25maWc/LmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3NcbiAgICA/LnByb2R1Y3RDYXJkQ29uZmlnIHx8IHtcbiAgICB2YXJpYW50OiBcIm1pbmltYWxcIixcbiAgICBob3ZlclZhcmlhbnQ6IFwibm9uZVwiLFxuICAgIGxheW91dFZhcmlhbnQ6IFwic3F1YXJlXCIsXG4gIH07XG4gIGNvbnN0IHNhZmVNZXJjaGFudFNob3J0TmFtZSA9IG9yZ1Nob3J0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBzZWFyY2hDb25maWcgPSBjb25maWc/LmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZztcbiAgY29uc3Qgc2FmZVJlY29tbWVuZGVkUHJvZHVjdHNIZWFkaW5nID0gc2VhcmNoQ29uZmlnPy5yZWNvbW1lbmRlZFByb2R1Y3RzSGVhZGluZyB8fCAnU3VnZ2VzdGVkIFByb2R1Y3RzJ1xuICBjb25zdCBzYWZlU2VhcmNoT3ZlcmxheUhlYWRpbmcgPSBzZWFyY2hDb25maWc/LnNlYXJjaE92ZXJsYXlIZWFkaW5nID8/ICdXaGF0IGNhbiBJIGhlbHAgeW91IGZpbmQ/J1xuICBjb25zdCBhdmFpbGFibGVEeW5hbWljRmlsdGVycyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkeW5hbWljRmlsdGVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGR5bmFtaWNGaWx0ZXJOYW1lKSA9PlxuICAgICAgICAgICFzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGBkeW5hbWljOiR7ZHluYW1pY0ZpbHRlck5hbWV9YCksXG4gICAgICApXG4gICAgICAubWFwKChkeW5hbWljRmlsdGVyTmFtZSkgPT4gKHtcbiAgICAgICAgbmFtZTogZHluYW1pY0ZpbHRlck5hbWUsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZShkeW5hbWljRmlsdGVyTmFtZSksXG4gICAgICB9KSk7XG4gIH0sIFtkeW5hbWljRmlsdGVycywgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXSk7XG5cbiAgY29uc3QgZmlsdGVycyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvcnRPcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBmaWx0ZXJJdGVtSWQ6IFN0cmluZyhQcm9kdWN0U29ydGluZy5GRUFUVVJFRCksXG4gICAgICAgIGRpc3BsYXlOYW1lOiAnUmVsZXZhbmNlJyxcbiAgICAgICAgcHJvZHVjdENvdW50OiAwLFxuICAgICAgICBpc1NlbGVjdGVkOiBwcm9kdWN0U29ydGluZyA9PT0gUHJvZHVjdFNvcnRpbmcuRkVBVFVSRUQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWx0ZXJJdGVtSWQ6IFN0cmluZyhQcm9kdWN0U29ydGluZy5QUklDRV9BU0MpLFxuICAgICAgICBkaXNwbGF5TmFtZTogJ1ByaWNlOiBMb3cgdG8gSGlnaCcsXG4gICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgaXNTZWxlY3RlZDogcHJvZHVjdFNvcnRpbmcgPT09IFByb2R1Y3RTb3J0aW5nLlBSSUNFX0FTQyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpbHRlckl0ZW1JZDogU3RyaW5nKFByb2R1Y3RTb3J0aW5nLlBSSUNFX0RFU0MpLFxuICAgICAgICBkaXNwbGF5TmFtZTogJ1ByaWNlOiBIaWdoIHRvIExvdycsXG4gICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgaXNTZWxlY3RlZDogcHJvZHVjdFNvcnRpbmcgPT09IFByb2R1Y3RTb3J0aW5nLlBSSUNFX0RFU0MsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICByZXR1cm4gW3sgZmlsdGVySWQ6ICdzb3J0JywgZGlzcGxheU5hbWU6ICdTT1JUJywgaXRlbXM6IHNvcnRPcHRpb25zIH0sIC4uLnNlYXJjaEZpbHRlcnNdIGFzIFNlYXJjaEZpbHRlckRhdHVtW107XG4gIH0sIFtwcm9kdWN0U29ydGluZywgc2VhcmNoRmlsdGVyc10pO1xuXG4gIGNvbnN0IGZpbHRlckJ1dHRvblRleHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gZmlsdGVycy5yZWR1Y2UoKGFjYzogbnVtYmVyLCBmaWx0ZXIpID0+IHtcbiAgICAgIGlmIChmaWx0ZXIuZmlsdGVySWQgPT09ICdzb3J0Jykge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYyArIGZpbHRlci5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubGVuZ3RoO1xuICAgIH0sIDApO1xuICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ0ZpbHRlciAmIFNvcnQnO1xuICAgIH1cbiAgICByZXR1cm4gYEZpbHRlciAmIFNvcnQgKCR7c2VsZWN0ZWRDb3VudH0pYDtcbiAgfSwgW2ZpbHRlcnNdKTtcblxuICAvLyBDYWxsYmFja3NcbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcblxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUR5bmFtaWNGaWx0ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBmaWx0ZXIsIGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZSB9OiB7IGZpbHRlcjogc3RyaW5nOyBkeW5hbWljRmlsdGVyRGlzcGxheU5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaEZpbHRlckNsaWNrZWQsXG4gICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICBmaWx0ZXJUeXBlOiAnRHluYW1pYycsXG4gICAgICAgICAgZmlsdGVyVmFsdWU6IGZpbHRlcixcbiAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGFkZEZpbHRlcihjcmVhdGVGaWx0ZXJPcHRpb24oJ2R5bmFtaWMnLCBmaWx0ZXIsIGR5bmFtaWNGaWx0ZXJEaXNwbGF5TmFtZSkpO1xuICAgICAgc2Nyb2xsVG9Ub3AoKTtcbiAgICB9LFxuICAgIFthZGRGaWx0ZXIsIHNlYXJjaFRleHQsIHNjcm9sbFRvVG9wXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVSZW1vdmVGaWx0ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZmlsdGVyOiBTZWxlY3RlZEZpbHRlck9wdGlvbikgPT4ge1xuICAgICAgcmVtb3ZlRmlsdGVyKGZpbHRlci5pZCk7XG4gICAgICBzY3JvbGxUb1RvcCgpO1xuICAgIH0sXG4gICAgW3JlbW92ZUZpbHRlciwgc2Nyb2xsVG9Ub3BdLFxuICApO1xuXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0RmlsdGVySXRlbTogU2VsZWN0RmlsdGVySXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgICh7XG4gICAgICBmaWx0ZXJJZCxcbiAgICAgIGZpbHRlckl0ZW1JZCxcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICB9OiB7XG4gICAgICBmaWx0ZXJJZDogc3RyaW5nO1xuICAgICAgZmlsdGVySXRlbUlkOiBzdHJpbmc7XG4gICAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICB9KSA9PiB7XG4gICAgICBpZiAoZmlsdGVySWQgPT09ICdzb3J0Jykge1xuICAgICAgICBjb25zdCBuZXdTb3J0ID0gZmlsdGVySXRlbUlkIGFzIFByb2R1Y3RTb3J0aW5nO1xuICAgICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuU2VhcmNoU29ydENsaWNrZWQsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgc29ydFR5cGU6IG5ld1NvcnQsXG4gICAgICAgICAgICBxdWVyeVRleHQ6IHNlYXJjaFRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFByb2R1Y3RTb3J0aW5nKG5ld1NvcnQpO1xuICAgICAgICBzY3JvbGxUb1RvcCgpO1xuICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgICByZW1vdmVGaWx0ZXIoYCR7ZmlsdGVySWR9OiR7ZmlsdGVySXRlbUlkfWApO1xuICAgICAgICBzY3JvbGxUb1RvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaEZpbHRlckNsaWNrZWQsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgZmlsdGVyVHlwZTogJ1N0YXRpYycsXG4gICAgICAgICAgICBmaWx0ZXJDYXRlZ29yeTogZmlsdGVySWQsXG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZTogZmlsdGVySXRlbUlkLFxuICAgICAgICAgICAgcXVlcnlUZXh0OiBzZWFyY2hUZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBhZGRGaWx0ZXIoY3JlYXRlRmlsdGVyT3B0aW9uKGZpbHRlcklkLCBmaWx0ZXJJdGVtSWQsIGRpc3BsYXlOYW1lKSk7XG4gICAgICAgIHNjcm9sbFRvVG9wKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkRmlsdGVyLCByZW1vdmVGaWx0ZXIsIHNldFByb2R1Y3RTb3J0aW5nLCBzZWFyY2hUZXh0LCBzY3JvbGxUb1RvcF0sXG4gICk7XG5cblxuICBjb25zdCBoYW5kbGVDbGVhckFsbEZpbHRlcnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UHJvZHVjdFNvcnRpbmcoUHJvZHVjdFNvcnRpbmcuRkVBVFVSRUQpO1xuICAgIGNsZWFyRmlsdGVycygpO1xuICAgIHNjcm9sbFRvVG9wKCk7XG4gIH0sIFtzZXRQcm9kdWN0U29ydGluZywgY2xlYXJGaWx0ZXJzLCBzY3JvbGxUb1RvcF0pO1xuXG4gIC8vIFNpZGUgRWZmZWN0c1xuICB1c2VUcmFja0NvbXBvbmVudFZpc2libGVFdmVudChcbiAgICBTcGlmZnlXaWRnZXRzLlNlYXJjaFJlc3VsdHMsXG4gICAgc2VhcmNoUmVzdWx0c1JlZixcbiAgICB7fSxcbiAgICBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLlNlYXJjaENvbXBvbmVudFZpc2libGUsXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VhcmNoUmVzdWx0c1N0YXRlID09PSBTZWFyY2hSZXN1bHRzU3RhdGUuUmVzdWx0cyB8fCBzZWFyY2hSZXN1bHRzU3RhdGUgPT09IFNlYXJjaFJlc3VsdHNTdGF0ZS5Ob1Jlc3VsdHMpIHtcbiAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuU2VhcmNoUmVzdWx0c1ZpZXdlZCxcbiAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgIHF1ZXJ5VGV4dDogc2VhcmNoVGV4dCxcbiAgICAgICAgICByZXN1bHRzQ291bnQ6IHByb2R1Y3RMaXN0Lmxlbmd0aCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3Byb2R1Y3RMaXN0Lmxlbmd0aCwgc2VhcmNoUmVzdWx0c1N0YXRlXSk7XG5cbiAgLy8gVGhpcyBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIHNlYXJjaCB0ZXh0IHRyaWdnZXJpbmcgYSBzZWFyY2hcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocXVlcnkgJiYgcXVlcnkgIT09IHNlYXJjaFRleHQpIHtcbiAgICAgIGNvbnN0IGVzcSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCdlc3EnKTtcbiAgICAgIHNldFNlYXJjaFRleHQocXVlcnkpO1xuICAgICAgcGVyZm9ybVNlYXJjaCh7IHF1ZXJ5OiBlc3EgPz8gcXVlcnkgfSk7XG4gICAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtwZXJmb3JtU2VhcmNoLCBxdWVyeSwgc2V0U2VhcmNoVGV4dF0pO1xuXG4gIHJldHVybiB7XG4gICAgc2VhcmNoRGF0YSxcbiAgICBzZWFyY2hSZXNwb25zZUlkOiBzZWFyY2hEYXRhPy5zZWFyY2hSZXNwb25zZUlkID8/ICcnLFxuICAgIG1lcmNoYW50U2hvcnROYW1lOiBzYWZlTWVyY2hhbnRTaG9ydE5hbWUsXG4gICAgcmVjb21tZW5kZWRQcm9kdWN0c0hlYWRpbmc6IHNhZmVSZWNvbW1lbmRlZFByb2R1Y3RzSGVhZGluZyxcbiAgICBzZWFyY2hPdmVybGF5SGVhZGluZzogc2FmZVNlYXJjaE92ZXJsYXlIZWFkaW5nLFxuICAgIHByb2R1Y3RDYXJkQ29uZmlnOiBzYWZlUHJvZHVjdENhcmRDb25maWcsXG4gICAgcHJvZHVjdExpc3QsXG4gICAgcmVjb21tZW5kZWRQcm9kdWN0cyxcbiAgICBhdXRvY29tcGxldGVSZXN1bHRzLFxuICAgIHNlYXJjaEZpbHRlcnM6IGZpbHRlcnMsXG4gICAgYXZhaWxhYmxlRHluYW1pY0ZpbHRlcnMsXG4gICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLFxuICAgIHNlYXJjaFRleHQsXG4gICAgcXVlcnk6IHF1ZXJ5IHx8ICcnLFxuICAgIHNlYXJjaFJlc3VsdHNTdGF0ZSxcbiAgICBpc0xvYWRpbmdTZWFyY2gsXG4gICAgaXNGaWx0ZXJPcGVuLFxuICAgIHNob3VsZFNob3dBdXRvY29tcGxldGUsXG4gICAgZm9jdXNlZEluZGV4LFxuICAgIGZvY3VzZWRPcHRpb25JZCxcbiAgICBmaWx0ZXJCdXR0b25UZXh0LFxuICAgIG9uU2VhcmNoSW5wdXRDaGFuZ2U6IGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlLFxuICAgIG9uU3VibWl0U2VhcmNoOiBoYW5kbGVTdWJtaXRTZWFyY2gsXG4gICAgb25BdXRvY29tcGxldGVTZWxlY3Q6IGhhbmRsZUF1dG9jb21wbGV0ZVNlbGVjdCxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgb25TZWFyY2hJbnB1dEZvY3VzOiBoYW5kbGVTZWFyY2hJbnB1dEZvY3VzLFxuICAgIG9uU2VhcmNoSW5wdXRCbHVyOiBoYW5kbGVTZWFyY2hJbnB1dEJsdXIsXG4gICAgb25Ub2dnbGVEeW5hbWljRmlsdGVyOiBoYW5kbGVUb2dnbGVEeW5hbWljRmlsdGVyLFxuICAgIG9uU2VsZWN0RmlsdGVySXRlbTogaGFuZGxlU2VsZWN0RmlsdGVySXRlbSxcbiAgICBvblJlbW92ZUZpbHRlcjogaGFuZGxlUmVtb3ZlRmlsdGVyLFxuICAgIG9uQ2xlYXJBbGxGaWx0ZXJzOiBoYW5kbGVDbGVhckFsbEZpbHRlcnMsXG4gICAgc2V0SXNGaWx0ZXJPcGVuLFxuICAgIHJlc2V0U2VhcmNoLFxuICAgIHNlYXJjaFJlc3VsdHNSZWYsXG4gIH07XG59OyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDQSxNQUFhLGtCQUFrQixFQUM3QixvQkFBb0IsSUFDcEIsY0FDQSxxQkFDK0M7Q0FDL0MsTUFBTSxRQUFRLGFBQWEsd0JBQXdCO0NBR25ELE1BQU0sQ0FBQyxZQUFZLGlCQUFpQixTQUFTLGtCQUFrQjtDQUMvRCxNQUFNLENBQUMsU0FBUyxjQUFjLFNBQVMsa0JBQWtCLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Q0FDM0UsTUFBTSxDQUFDLFdBQVcsZ0JBQWdCLFNBQVMsTUFBTTtDQUNqRCxNQUFNLENBQUMsY0FBYyxtQkFBbUIsU0FBUyxHQUFHO0NBQ3BELE1BQU0sQ0FBQyxpQkFBaUIsc0JBQXNCLFNBQzVDLE9BQ0Q7Q0FFRCxNQUFNLDRCQURvQixhQUFhLHNCQUFzQixDQUNUO0NBQ3BELE1BQU0sd0JBQXdCLDBCQUEwQixTQUFTO0NBR2pFLE1BQU0sMEJBQTBCLE9BQU8sTUFBTTtDQUc3QyxNQUFNLHlCQUF5QixXQUFXLGFBQWE7Q0FFdkQsTUFBTSwyQkFBMkI7Q0FHakMsTUFBTSxjQUFjLGVBQ1g7RUFDTCxjQUFjO0VBQ2QsZ0JBQWdC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
@@ -1,6 +1,6 @@
1
1
  const require_chunk = require('../../chunk-CUT6urMc.cjs');
2
2
  require('../../types-UUvB6h05.cjs');
3
- require('../../models-DqdLOi2I.cjs');
3
+ require('../../models-CJy0mOoW.cjs');
4
4
  require('../../featureGates-qU_ulhpC.cjs');
5
5
  require('../../urlsParser-COzMdJaX.cjs');
6
6
  require('../../graphql-i3dtpVTl.cjs');
@@ -16,10 +16,10 @@ require('../../app-BbPSHefQ.cjs');
16
16
  require('../../enviveConfigContext-D2OELZDR.cjs');
17
17
  require('../../searchServiceAdapter-BGlvoZFE.cjs');
18
18
  require('../../unsupportedProductExceptions-DGENUnEA.cjs');
19
- require('../../graphqlContext-DP8T3-Kd.cjs');
20
- require('../../useGraphQLConfig-D_rF2Sun.cjs');
21
- require('../../useAppDetails-DczgqeLG.cjs');
22
- const require_searchContext = require('../../searchContext-DksJfC1s.cjs');
19
+ require('../../graphqlContext-Dddy7mr7.cjs');
20
+ require('../../useGraphQLConfig-CO9lCk8b.cjs');
21
+ require('../../useAppDetails-D-l3HbOk.cjs');
22
+ const require_searchContext = require('../../searchContext-4mMbhaHA.cjs');
23
23
  let react = require("react");
24
24
  react = require_chunk.__toESM(react);
25
25
 
@@ -1,5 +1,5 @@
1
1
  import "../../types-CtUb63bt.js";
2
- import "../../models-CWOgrLCm.js";
2
+ import "../../models-CE5YjbzE.js";
3
3
  import "../../featureGates-KEwAL8p_.js";
4
4
  import "../../urlsParser-DxjoLj98.js";
5
5
  import "../../graphql-CkxgqsXP.js";
@@ -15,10 +15,10 @@ import "../../app-CflxT_xI.js";
15
15
  import "../../enviveConfigContext-DrDjCems.js";
16
16
  import "../../searchServiceAdapter-Db6jEcJs.js";
17
17
  import "../../unsupportedProductExceptions-uQuuelOs.js";
18
- import "../../graphqlContext-czH0kIZg.js";
19
- import "../../useGraphQLConfig-7UxACM4n.js";
20
- import "../../useAppDetails-B584gkCs.js";
21
- import { useSearchService } from "../../searchContext-BmgoAFMF.js";
18
+ import "../../graphqlContext-C0hG5Uer.js";
19
+ import "../../useGraphQLConfig-8oeOwWRP.js";
20
+ import "../../useAppDetails-Bgql1vXN.js";
21
+ import { useSearchService } from "../../searchContext-nzEsa-bl.js";
22
22
  import { useCallback, useEffect, useState } from "react";
23
23
 
24
24
  //#region src/hooks/SearchOperations/useSearchOperations.ts
@@ -1,5 +1,5 @@
1
- import "../../chatElementDisplayLocation-B7vr33eG.cjs";
2
- import { IdExtractor } from "../../frontendConfig-iZipB5FG.cjs";
1
+ import "../../chatElementDisplayLocation-Igta1TL1.cjs";
2
+ import { IdExtractor } from "../../frontendConfig-DPpzM5cz.cjs";
3
3
  import "../../test-types-Dsu8RJZu.cjs";
4
4
 
5
5
  //#region src/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts
@@ -1,5 +1,5 @@
1
- import "../../chatElementDisplayLocation-D4XF0UfI.js";
2
- import { IdExtractor } from "../../frontendConfig-Cawh5iqv.js";
1
+ import "../../chatElementDisplayLocation-BO3fY4hq.js";
2
+ import { IdExtractor } from "../../frontendConfig-msK69LYN.js";
3
3
  import "../../test-types-BEml_bm3.js";
4
4
 
5
5
  //#region src/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts
@@ -3,21 +3,21 @@ import "../../index-BEpDGqnz.cjs";
3
3
  import "../../index-CESxqFso.cjs";
4
4
  import "../../responseGenerics-DWLV09cQ.cjs";
5
5
  import "../../utils-DCrwX6FT.cjs";
6
- import { GenerationParams } from "../../index-Dy3TTIOm.cjs";
7
- import "../../chatElementDisplayLocation-B7vr33eG.cjs";
8
- import "../../frontendConfig-iZipB5FG.cjs";
6
+ import { GenerationParams } from "../../index-DXTWZLEm.cjs";
7
+ import "../../chatElementDisplayLocation-Igta1TL1.cjs";
8
+ import "../../frontendConfig-DPpzM5cz.cjs";
9
9
  import "../../test-types-Dsu8RJZu.cjs";
10
- import "../../spiffyWidgets-eNbU1gMc.cjs";
10
+ import "../../spiffyWidgets-DK7Ekcy7.cjs";
11
11
  import "../../search-6RrxBXD6.cjs";
12
12
  import "../../index-OkKEOL6H.cjs";
13
- import * as react3 from "react";
13
+ import * as react2 from "react";
14
14
 
15
15
  //#region src/hooks/SystemSettingsContext/useSystemSettingsContext.d.ts
16
16
  declare const useSystemSettingsContext: () => {
17
17
  generationParams?: GenerationParams;
18
18
  showDebugBar?: boolean;
19
19
  endpointURL?: string;
20
- setGenerationParams: react3.Dispatch<react3.SetStateAction<GenerationParams | undefined>>;
20
+ setGenerationParams: react2.Dispatch<react2.SetStateAction<GenerationParams | undefined>>;
21
21
  };
22
22
  //#endregion
23
23
  export { useSystemSettingsContext };
@@ -3,21 +3,21 @@ import "../../index-ErVcwUnR.js";
3
3
  import "../../index-Dxpscrvz.js";
4
4
  import "../../responseGenerics-D9bS-Dd6.js";
5
5
  import "../../utils-BRkGP1eb.js";
6
- import { GenerationParams } from "../../index-BUDrAxnl.js";
7
- import "../../chatElementDisplayLocation-D4XF0UfI.js";
8
- import "../../frontendConfig-Cawh5iqv.js";
6
+ import { GenerationParams } from "../../index-Bb3zXP0P.js";
7
+ import "../../chatElementDisplayLocation-BO3fY4hq.js";
8
+ import "../../frontendConfig-msK69LYN.js";
9
9
  import "../../test-types-BEml_bm3.js";
10
- import "../../spiffyWidgets-CR6F7FRE.js";
10
+ import "../../spiffyWidgets-MTUAQq_u.js";
11
11
  import "../../search-DrJiCT7d.js";
12
12
  import "../../index-D7htGSQC.js";
13
- import * as react2 from "react";
13
+ import * as react0 from "react";
14
14
 
15
15
  //#region src/hooks/SystemSettingsContext/useSystemSettingsContext.d.ts
16
16
  declare const useSystemSettingsContext: () => {
17
17
  generationParams?: GenerationParams;
18
18
  showDebugBar?: boolean;
19
19
  endpointURL?: string;
20
- setGenerationParams: react2.Dispatch<react2.SetStateAction<GenerationParams | undefined>>;
20
+ setGenerationParams: react0.Dispatch<react0.SetStateAction<GenerationParams | undefined>>;
21
21
  };
22
22
  //#endregion
23
23
  export { useSystemSettingsContext };
@@ -1,6 +1,6 @@
1
1
  require('../../types-UUvB6h05.cjs');
2
2
  require('../../events-DYY4l817.cjs');
3
- require('../../models-DqdLOi2I.cjs');
3
+ require('../../models-CJy0mOoW.cjs');
4
4
  require('../../featureGates-qU_ulhpC.cjs');
5
5
  require('../../urlsParser-COzMdJaX.cjs');
6
6
  require('../../graphql-i3dtpVTl.cjs');
@@ -16,8 +16,8 @@ require('../../atomStore-CmZbgQHc.cjs');
16
16
  require('../../app-BbPSHefQ.cjs');
17
17
  require('../../enviveConfigContext-D2OELZDR.cjs');
18
18
  require('../../featureFlagServiceContext-CJyYItqu.cjs');
19
- require('../../amplitudeContext-C6LHpqP_.cjs');
19
+ require('../../amplitudeContext-CjkMpI_a.cjs');
20
20
  require('../../useIntersection-DSDREfj6.cjs');
21
- const require_TrackComponentVisibleEvent = require('../../TrackComponentVisibleEvent-tDRnrJi3.cjs');
21
+ const require_TrackComponentVisibleEvent = require('../../TrackComponentVisibleEvent-B_2kXqvV.cjs');
22
22
 
23
23
  exports.useTrackComponentVisibleEvent = require_TrackComponentVisibleEvent.useTrackComponentVisibleEvent;
@@ -1,4 +1,4 @@
1
- import { SpiffyWidgets } from "../../spiffyWidgets-eNbU1gMc.cjs";
1
+ import { SpiffyWidgets } from "../../spiffyWidgets-DK7Ekcy7.cjs";
2
2
  import { SpiffyMetricsEventName } from "../../amplitudeContext-CCVyp5RU.cjs";
3
3
  import { RefObject } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- import { SpiffyWidgets } from "../../spiffyWidgets-CR6F7FRE.js";
1
+ import { SpiffyWidgets } from "../../spiffyWidgets-MTUAQq_u.js";
2
2
  import { SpiffyMetricsEventName } from "../../amplitudeContext-DcRur97Z.js";
3
3
  import { RefObject } from "react";
4
4
 
@@ -1,6 +1,6 @@
1
1
  import "../../types-CtUb63bt.js";
2
2
  import "../../events-DyUix-Bn.js";
3
- import "../../models-CWOgrLCm.js";
3
+ import "../../models-CE5YjbzE.js";
4
4
  import "../../featureGates-KEwAL8p_.js";
5
5
  import "../../urlsParser-DxjoLj98.js";
6
6
  import "../../graphql-CkxgqsXP.js";
@@ -16,8 +16,8 @@ import "../../atomStore-DEcDhiLp.js";
16
16
  import "../../app-CflxT_xI.js";
17
17
  import "../../enviveConfigContext-DrDjCems.js";
18
18
  import "../../featureFlagServiceContext-FBM6DdMJ.js";
19
- import "../../amplitudeContext-rEjGf57q.js";
19
+ import "../../amplitudeContext-D58WY1aS.js";
20
20
  import "../../useIntersection-CZSEBUbv.js";
21
- import { useTrackComponentVisibleEvent } from "../../TrackComponentVisibleEvent-qNE0dIL1.js";
21
+ import { useTrackComponentVisibleEvent } from "../../TrackComponentVisibleEvent-BHVBHQhu.js";
22
22
 
23
23
  export { useTrackComponentVisibleEvent };
@@ -1,7 +1,7 @@
1
1
  const require_chunk = require('../../chunk-CUT6urMc.cjs');
2
2
  require('../../types-UUvB6h05.cjs');
3
3
  require('../../events-DYY4l817.cjs');
4
- require('../../models-DqdLOi2I.cjs');
4
+ require('../../models-CJy0mOoW.cjs');
5
5
  require('../../featureGates-qU_ulhpC.cjs');
6
6
  require('../../urlsParser-COzMdJaX.cjs');
7
7
  require('../../graphql-i3dtpVTl.cjs');
@@ -17,7 +17,7 @@ require('../../atomStore-CmZbgQHc.cjs');
17
17
  const require_app = require('../../app-BbPSHefQ.cjs');
18
18
  require('../../enviveConfigContext-D2OELZDR.cjs');
19
19
  require('../../featureFlagServiceContext-CJyYItqu.cjs');
20
- const require_amplitudeContext = require('../../amplitudeContext-C6LHpqP_.cjs');
20
+ const require_amplitudeContext = require('../../amplitudeContext-CjkMpI_a.cjs');
21
21
  let react = require("react");
22
22
  react = require_chunk.__toESM(react);
23
23
  let jotai = require("jotai");
@@ -1,6 +1,6 @@
1
1
  import "../../types-CtUb63bt.js";
2
2
  import "../../events-DyUix-Bn.js";
3
- import "../../models-CWOgrLCm.js";
3
+ import "../../models-CE5YjbzE.js";
4
4
  import "../../featureGates-KEwAL8p_.js";
5
5
  import "../../urlsParser-DxjoLj98.js";
6
6
  import "../../graphql-CkxgqsXP.js";
@@ -16,7 +16,7 @@ import "../../atomStore-DEcDhiLp.js";
16
16
  import { hasParsedVariantInfoAtom, variantInfoAtom } from "../../app-CflxT_xI.js";
17
17
  import "../../enviveConfigContext-DrDjCems.js";
18
18
  import "../../featureFlagServiceContext-FBM6DdMJ.js";
19
- import { SpiffyMetricsEventName, useAmplitude } from "../../amplitudeContext-rEjGf57q.js";
19
+ import { SpiffyMetricsEventName, useAmplitude } from "../../amplitudeContext-D58WY1aS.js";
20
20
  import { useEffect, useRef } from "react";
21
21
  import { useAtomValue } from "jotai";
22
22
 
@@ -3,12 +3,12 @@ import "../index-BEpDGqnz.cjs";
3
3
  import "../index-CESxqFso.cjs";
4
4
  import "../responseGenerics-DWLV09cQ.cjs";
5
5
  import "../utils-DCrwX6FT.cjs";
6
- import "../index-Dy3TTIOm.cjs";
7
- import "../chatElementDisplayLocation-B7vr33eG.cjs";
8
- import "../frontendConfig-iZipB5FG.cjs";
6
+ import "../index-DXTWZLEm.cjs";
7
+ import "../chatElementDisplayLocation-Igta1TL1.cjs";
8
+ import "../frontendConfig-DPpzM5cz.cjs";
9
9
  import "../test-types-Dsu8RJZu.cjs";
10
- import "../spiffyWidgets-eNbU1gMc.cjs";
10
+ import "../spiffyWidgets-DK7Ekcy7.cjs";
11
11
  import "../search-6RrxBXD6.cjs";
12
12
  import "../index-OkKEOL6H.cjs";
13
- import { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours } from "../utils-CBD4g2Nc.cjs";
13
+ import { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours } from "../utils-C2HshI4X.cjs";
14
14
  export { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours };
@@ -3,12 +3,12 @@ import "../index-ErVcwUnR.js";
3
3
  import "../index-Dxpscrvz.js";
4
4
  import "../responseGenerics-D9bS-Dd6.js";
5
5
  import "../utils-BRkGP1eb.js";
6
- import "../index-BUDrAxnl.js";
7
- import "../chatElementDisplayLocation-D4XF0UfI.js";
8
- import "../frontendConfig-Cawh5iqv.js";
6
+ import "../index-Bb3zXP0P.js";
7
+ import "../chatElementDisplayLocation-BO3fY4hq.js";
8
+ import "../frontendConfig-msK69LYN.js";
9
9
  import "../test-types-BEml_bm3.js";
10
- import "../spiffyWidgets-CR6F7FRE.js";
10
+ import "../spiffyWidgets-MTUAQq_u.js";
11
11
  import "../search-DrJiCT7d.js";
12
12
  import "../index-D7htGSQC.js";
13
- import { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours } from "../utils-QKFAbPT6.js";
13
+ import { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours } from "../utils-aa1jK0Xe.js";
14
14
  export { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours };