@envive-ai/react-hooks 0.1.4 → 0.1.5

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 (202) hide show
  1. package/dist/adapters/amplitude/index.cjs +2 -2
  2. package/dist/adapters/amplitude/index.js +2 -2
  3. package/dist/application/config/index.cjs +3 -3
  4. package/dist/application/config/index.js +3 -3
  5. package/dist/application/models/graphql/index.cjs +2 -2
  6. package/dist/application/models/graphql/index.js +2 -2
  7. package/dist/application/models/index.cjs +2 -2
  8. package/dist/application/models/index.d.cts +1 -1
  9. package/dist/application/models/index.d.ts +1 -1
  10. package/dist/application/models/index.js +2 -2
  11. package/dist/application/service/index.cjs +3 -2
  12. package/dist/application/service/index.d.cts +18 -4
  13. package/dist/application/service/index.d.ts +18 -4
  14. package/dist/application/service/index.js +3 -3
  15. package/dist/application/utils/index.cjs +2 -2
  16. package/dist/application/utils/index.d.cts +5 -5
  17. package/dist/application/utils/index.d.ts +5 -5
  18. package/dist/application/utils/index.js +2 -2
  19. package/dist/atomStore-ONYy0XuA.d.cts +24 -0
  20. package/dist/atomStore-kOKiEcNl.d.ts +24 -0
  21. package/dist/atoms/app/index.cjs +2 -2
  22. package/dist/atoms/app/index.d.cts +2 -2
  23. package/dist/atoms/app/index.d.ts +3 -3
  24. package/dist/atoms/app/index.js +2 -2
  25. package/dist/atoms/atomStore/index.d.cts +2 -24
  26. package/dist/atoms/atomStore/index.d.ts +2 -24
  27. package/dist/atoms/chat/index.cjs +2 -2
  28. package/dist/atoms/chat/index.d.cts +27 -27
  29. package/dist/atoms/chat/index.d.ts +27 -27
  30. package/dist/atoms/chat/index.js +2 -2
  31. package/dist/atoms/globalSearch/index.d.cts +5 -5
  32. package/dist/atoms/globalSearch/index.d.ts +6 -6
  33. package/dist/atoms/org/index.cjs +3 -2
  34. package/dist/atoms/org/index.d.cts +29 -26
  35. package/dist/atoms/org/index.d.ts +29 -26
  36. package/dist/atoms/org/index.js +3 -3
  37. package/dist/atoms/search/index.cjs +2 -2
  38. package/dist/atoms/search/index.d.cts +2 -2
  39. package/dist/atoms/search/index.d.ts +2 -2
  40. package/dist/atoms/search/index.js +2 -2
  41. package/dist/{bandolier-B76-OE75.cjs → bandolier-Da4wt6sm.cjs} +10 -10
  42. package/dist/{bandolier-DRn_x1g1.js → bandolier-DzEmYWcz.js} +10 -10
  43. package/dist/{carpe-kHi4RLB5.cjs → carpe-AXipz0Xl.cjs} +10 -10
  44. package/dist/{carpe-qrSU99gq.js → carpe-CaUKwcEa.js} +10 -10
  45. package/dist/{chat-CLJ4NWcN.js → chat-CHmD79E1.js} +1 -1
  46. package/dist/{chat-BgONoYU7.cjs → chat-_NzpO_Hn.cjs} +1 -1
  47. package/dist/{components-BKZbet67.cjs → components-D0XDRcaN.cjs} +1 -1
  48. package/dist/{components-CV1fhAkj.js → components-Dl-TMD9k.js} +1 -1
  49. package/dist/config/locators/components/chat/index.cjs +1 -1
  50. package/dist/config/locators/components/chat/index.d.cts +1 -1
  51. package/dist/config/locators/components/chat/index.d.ts +1 -1
  52. package/dist/config/locators/components/chat/index.js +1 -1
  53. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  54. package/dist/config/locators/components/index.cjs +1 -1
  55. package/dist/config/locators/components/index.d.cts +1 -1
  56. package/dist/config/locators/components/index.d.ts +1 -1
  57. package/dist/config/locators/components/index.js +1 -1
  58. package/dist/config/locators/components/search/index.d.ts +1 -1
  59. package/dist/config/locators/index.cjs +4 -4
  60. package/dist/config/locators/index.d.cts +2 -2
  61. package/dist/config/locators/index.d.ts +3 -3
  62. package/dist/config/locators/index.js +4 -4
  63. package/dist/contexts/index.cjs +2 -2
  64. package/dist/contexts/index.d.cts +4 -72
  65. package/dist/contexts/index.d.ts +4 -72
  66. package/dist/contexts/index.js +2 -2
  67. package/dist/contexts-CtRlNXaS.js +7674 -0
  68. package/dist/contexts-CtgmnYNn.cjs +9088 -0
  69. package/dist/{coterie-yQ-_JXSw.cjs → coterie--MGvWeVh.cjs} +10 -10
  70. package/dist/{coterie-mMirPcHP.js → coterie-oKHAT0lx.js} +10 -10
  71. package/dist/{custservice-types-C83itZmy.cjs → custservice-types-C8-9vKWb.cjs} +1 -1
  72. package/dist/{custservice-types-DPQ-4TI6.js → custservice-types-CamCiXjq.js} +1 -1
  73. package/dist/default-B4fINY5_.cjs +4 -0
  74. package/dist/default-BrTQxA0c.js +4 -0
  75. package/dist/{default-8Jfv8ehQ.cjs → default-C3LrcbZB.cjs} +2 -2
  76. package/dist/{default-C8PQf-38.js → default-CXkYrLEr.js} +2 -2
  77. package/dist/{divIds-CWkntTsx.js → divIds-0Vj9g-fM.js} +1 -1
  78. package/dist/{divIds-DEL_-qU0.cjs → divIds-CjceLRD9.cjs} +1 -1
  79. package/dist/{dreamlandBaby-cG0HM9bt.js → dreamlandBaby-BEqt0eKF.js} +10 -10
  80. package/dist/{dreamlandBaby-DHltv12Z.cjs → dreamlandBaby-DBDjEJCc.cjs} +10 -10
  81. package/dist/{embedded--2L0F4b5.cjs → embedded-B5Wi9g0T.cjs} +1 -1
  82. package/dist/{embedded-C5uJqmuD.js → embedded-_cLpd6FK.js} +1 -1
  83. package/dist/events/index.d.cts +1 -1
  84. package/dist/{fiveCbd-Cvnwh03g.cjs → fiveCbd-CdqNt16h.cjs} +10 -10
  85. package/dist/{fiveCbd-DhYMlsf9.js → fiveCbd-D6B-sgnX.js} +10 -10
  86. package/dist/{forLoveAndLemons-DR6a1zjJ.cjs → forLoveAndLemons-C7GsJG7f.cjs} +6 -6
  87. package/dist/{forLoveAndLemons-C8DuUexW.js → forLoveAndLemons-gNDlMtPR.js} +6 -6
  88. package/dist/{greenpan-B4Pu65kV.js → greenpan-B5AaW4M_.js} +10 -10
  89. package/dist/{greenpan-BL5p6j7f.cjs → greenpan-DrORpYms.cjs} +10 -10
  90. package/dist/{grooveLife-DjKWHoN3.cjs → grooveLife-BJqsfH2H.cjs} +10 -10
  91. package/dist/{grooveLife-JK0TyaPz.js → grooveLife-xIUmDM8s.js} +10 -10
  92. package/dist/{homegrownCannabis-ZnfCqW-m.cjs → homegrownCannabis-8TZ21u6L.cjs} +10 -10
  93. package/dist/{homegrownCannabis-DxqSDkmS.js → homegrownCannabis-BtMuEvbZ.js} +10 -10
  94. package/dist/hooks/index.cjs +3 -5
  95. package/dist/hooks/index.d.cts +19 -74
  96. package/dist/hooks/index.d.ts +15 -70
  97. package/dist/hooks/index.js +3 -3
  98. package/dist/index-BTK5uzs6.d.cts +1 -1
  99. package/dist/{index-jBATkcc_.d.cts → index-BdNKc2ix.d.cts} +1 -1
  100. package/dist/{index-C62lPpy4.d.cts → index-BrXuc_Ck.d.cts} +1 -1
  101. package/dist/index-BzgkfbNO.d.cts +1 -1
  102. package/dist/index-CKUpnyJQ.d.ts +72 -0
  103. package/dist/{index-DPx8s5YH.d.ts → index-CSIOQD-A.d.ts} +1 -1
  104. package/dist/{index-C_C0tLeD.d.ts → index-CbJZOEU4.d.ts} +31 -31
  105. package/dist/{index-CExtydIH.d.ts → index-Cr2y08f1.d.ts} +1 -1
  106. package/dist/{index-CNsGWfS6.d.cts → index-DXpgMVpp.d.ts} +7 -7
  107. package/dist/index-Dxpscrvz.d.ts +1 -1
  108. package/dist/{index-CYtsPztZ.d.cts → index-K2kNsOTw.d.cts} +31 -31
  109. package/dist/index-VHFMGkO-.d.cts +72 -0
  110. package/dist/index-aNW5V9fh.d.cts +749 -0
  111. package/dist/interceptors/index.cjs +2 -2
  112. package/dist/interceptors/index.d.cts +2 -2
  113. package/dist/interceptors/index.d.ts +1 -1
  114. package/dist/interceptors/index.js +2 -2
  115. package/dist/{jackArcher-mGkojXek.cjs → jackArcher-WtkbLBZj.cjs} +10 -10
  116. package/dist/{jackArcher-CXf_IAmC.js → jackArcher-sO9EbgrZ.js} +10 -10
  117. package/dist/{jordanCraig-Dv8pVCiS.cjs → jordanCraig-471FcgqF.cjs} +10 -10
  118. package/dist/{jordanCraig-BvCvPRoR.js → jordanCraig-DNOncplU.js} +10 -10
  119. package/dist/{kindredBravely-UQP7wiNu.cjs → kindredBravely-BlLyHGMX.cjs} +9 -9
  120. package/dist/{kindredBravely-X8F_LNph.js → kindredBravely-cqZ4OvXp.js} +9 -9
  121. package/dist/{kutFromTheKloth-BhYKk3CN.cjs → kutFromTheKloth-3mOIryvt.cjs} +10 -10
  122. package/dist/{kutFromTheKloth-D1xsTSJr.js → kutFromTheKloth-DtVNCMKa.js} +10 -10
  123. package/dist/{larryAndSerges-1411NuZa.cjs → larryAndSerges-88Bvq-Us.cjs} +7 -7
  124. package/dist/{larryAndSerges-DVIRLItu.js → larryAndSerges-cvak6May.js} +7 -7
  125. package/dist/{leapsAndRebounds-BJ8mwr33.js → leapsAndRebounds-Dmf8eUPq.js} +10 -10
  126. package/dist/{leapsAndRebounds-UcP9EJVO.cjs → leapsAndRebounds-iWKc923H.cjs} +10 -10
  127. package/dist/{longevityrx-Cp6wleWr.js → longevityrx-BTMI9vn-.js} +10 -10
  128. package/dist/{longevityrx-BFSv9GF5.cjs → longevityrx-CobPyigd.cjs} +10 -10
  129. package/dist/{lookOptic-KieSqskd.cjs → lookOptic-C4H_c0JZ.cjs} +10 -10
  130. package/dist/{lookOptic-BGhU4910.js → lookOptic-Jwf7EAU8.js} +10 -10
  131. package/dist/{mantraBrand-CHQw-0nw.cjs → mantraBrand-CySGqbn6.cjs} +10 -10
  132. package/dist/{mantraBrand-DrqG9uqO.js → mantraBrand-DoaVj837.js} +10 -10
  133. package/dist/{medterra-CLG6Co1C.cjs → medterra-BnZ5p27n.cjs} +10 -10
  134. package/dist/{medterra-D8ZX9NZC.js → medterra-DaICcPPp.js} +10 -10
  135. package/dist/{modells-CAfqOCW4.js → modells-CZ1L6dD_.js} +10 -10
  136. package/dist/{modells-BzyPwN2m.cjs → modells-DF0SndHr.cjs} +10 -10
  137. package/dist/{nodeSelector-BiCDowlK.d.ts → nodeSelector-DybpVr-i.d.ts} +1 -1
  138. package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-vKB44CDB.d.cts} +1 -1
  139. package/dist/orgConfigResults-BL0XBA6x.d.cts +1 -1
  140. package/dist/{pressedFloral-DULBuQwR.cjs → pressedFloral-B3t2cYzs.cjs} +10 -10
  141. package/dist/{pressedFloral-Dp-7Fk3S.js → pressedFloral-Dsws2Kfb.js} +10 -10
  142. package/dist/{search-filter-types-BNTLVXqQ.d.cts → search-filter-types-9rTb3jMj.d.cts} +1 -1
  143. package/dist/{search-filter-types-DkmH1TxJ.d.ts → search-filter-types-C-zZSpGo.d.ts} +1 -1
  144. package/dist/{skinPerfection-Cd3XZ6By.cjs → skinPerfection-CILQM2bR.cjs} +10 -10
  145. package/dist/{skinPerfection-BxuYCeJX.js → skinPerfection-DmQCntRf.js} +10 -10
  146. package/dist/{snapSupplements-Bf6htPM0.js → snapSupplements--X_v0KRM.js} +10 -10
  147. package/dist/{snapSupplements-ZFnXyMuZ.cjs → snapSupplements-Djuzl0Ed.cjs} +10 -10
  148. package/dist/{spanx-Cyd4qDlK.cjs → spanx-Bo81yXSF.cjs} +11 -11
  149. package/dist/{spanx-CwDPQaGj.js → spanx-DauxB8KE.js} +11 -11
  150. package/dist/{spanxStaging-ijbYnHzr.cjs → spanxStaging-BucYQvR1.cjs} +11 -11
  151. package/dist/{spanxStaging-D43nyAGy.js → spanxStaging-CfXUukdP.js} +11 -11
  152. package/dist/{suggestionBarV2-types-Dc4-zJlV.cjs → suggestionBarV2-types-B3lwrENK.cjs} +1 -1
  153. package/dist/{suggestionBarV2-types-CwOXzIKq.js → suggestionBarV2-types-Penx3Y67.js} +1 -1
  154. package/dist/{supergoop-BnbFG7hm.cjs → supergoop-8qa_NV3F.cjs} +11 -11
  155. package/dist/{supergoop-CY043wIg.js → supergoop-DOaui-A6.js} +11 -11
  156. package/dist/types/index.cjs +2 -2
  157. package/dist/types/index.d.cts +1 -1
  158. package/dist/types/index.d.ts +1 -1
  159. package/dist/types/index.js +2 -2
  160. package/dist/types-CGC6Oozp.cjs +231 -0
  161. package/dist/types-CnTCkyvK.js +177 -0
  162. package/dist/{uniqueVintage-Cui74mlJ.js → uniqueVintage-BWkDgt1z.js} +10 -10
  163. package/dist/{uniqueVintage-R2Jcu1y1.cjs → uniqueVintage-DAne8XcL.cjs} +10 -10
  164. package/dist/{variant-CKVRF2-W.d.ts → variant-CC1nrywd.d.ts} +3 -3
  165. package/dist/{variant-raYuOP4L.d.cts → variant-CQTuQQSq.d.cts} +3 -3
  166. package/dist/{venaCbd-r-IxEVc1.cjs → venaCbd-B1HO_Pkr.cjs} +10 -10
  167. package/dist/{venaCbd-o5_vOp4e.js → venaCbd-CnByO-5R.js} +10 -10
  168. package/dist/{westonJonBoucher-C95EuCl-.js → westonJonBoucher-BAGXegsX.js} +10 -10
  169. package/dist/{westonJonBoucher-DjGEW3ZB.cjs → westonJonBoucher-BRfHWMbs.cjs} +10 -10
  170. package/dist/{wineEnthusiast-DvfcV5B3.cjs → wineEnthusiast-DW8JVwV8.cjs} +10 -10
  171. package/dist/{wineEnthusiast-DeTFY8Gm.js → wineEnthusiast-EJbhMeKQ.js} +10 -10
  172. package/dist/{wolfMattress-BjGnGKjP.cjs → wolfMattress-B6INZNRJ.cjs} +10 -10
  173. package/dist/{wolfMattress-6xPfOJt3.js → wolfMattress-D9P7ErH_.js} +10 -10
  174. package/dist/{wolfTactical-C_F9-oPX.js → wolfTactical-C5Pupi3J.js} +10 -10
  175. package/dist/{wolfTactical-Bi3WZu0m.cjs → wolfTactical-TMthZM93.cjs} +10 -10
  176. package/package.json +2 -1
  177. package/src/application/models/supportedOrgs.ts +1 -1
  178. package/src/application/service/graphqlConfigService.ts +59 -0
  179. package/src/application/service/index.ts +1 -0
  180. package/src/atoms/org/graphqlConfig.ts +14 -3
  181. package/src/atoms/org/index.ts +7 -7
  182. package/src/atoms/org/merchantCss.ts +5 -2
  183. package/src/atoms/org/org.ts +2 -42
  184. package/src/atoms/search/searchAPI.ts +52 -42
  185. package/src/hooks/index.ts +1 -3
  186. package/src/hooks/useDynamicVariants.ts +48 -32
  187. package/src/hooks/useFileUpload.ts +1 -1
  188. package/src/hooks/useHideElements.ts +21 -18
  189. package/src/hooks/useImageResolver.ts +16 -8
  190. package/src/hooks/useNewOrgConfig.ts +80 -0
  191. package/dist/contexts-CQDwe3rK.cjs +0 -14333
  192. package/dist/contexts-e2sM-B9g.js +0 -12919
  193. package/dist/default-LukSiCz1.js +0 -4
  194. package/dist/default-rJSJ887P.cjs +0 -4
  195. package/dist/index-BfuO9b0Q.d.ts +0 -749
  196. package/dist/types-BF_CJeck.js +0 -177
  197. package/dist/types-CNH4sfF-.cjs +0 -231
  198. package/src/hooks/useHorizontalScrollAnimation.ts +0 -115
  199. package/src/hooks/useReducedMotionWithOverride.ts +0 -15
  200. package/src/hooks/useSnapControl.ts +0 -155
  201. /package/dist/{locators-lQMJj830.cjs → locators-CugndTUM.cjs} +0 -0
  202. /package/dist/{locators-Dc5ZT0aF.js → locators-DnKpajbY.js} +0 -0
@@ -0,0 +1,749 @@
1
+ import { ColorMapping, FrontendConfig, OrgConfig, OrgPageConfig, OrgUIConfig, OrganizationConfig as OrganizationConfig$1, PageVariantConfig, WidgetConfig, WidgetMountingConfig } from "./orgConfigResults-BL0XBA6x.cjs";
2
+ import { GetMerchantColorsQueryData } from "./index-BTK5uzs6.cjs";
3
+ import { AcceptableFormFieldType, ApiFormResponseAttributes, ApiPageResponseAttributes, OrderResponseAttributes as OrderResponseAttributes$1, PageResponseAttributes, ProductResponseAttributes, Response as Response$1, ReviewResponseAttributes, SearchProductFilterAttributes, SearchProductResponseAttributes, SearchResponseAttributes, TextResponseAttributes } from "./index-ClJ0nMsR.cjs";
4
+ import { CamelCasedPropertiesDeep, NonRecursiveType, UnknownArray, UpperCaseCharacters, WordSeparators } from "./index-BzgkfbNO.cjs";
5
+ import { VariantInfo } from "./index-D46Rd0io.cjs";
6
+ import { Context, CustServiceAttachment, FormSubmittedAttributes, FormType, FulfillmentDisplayStatus, GenerationParams, OrderItemInfo, OrderResponseAttributes, OrganizationConfig, OrganizationSettings, PDPAttributes, PLPAttributes, PLPIdAttributes, PageVisitCategory, ProductSearchFilterResponseAttributes, ProductSearchResponse, ProductSearchResponseAttributes, QueryTypedAttributes, SearchAttributes, SearchResponseProduct, StatsigExperiment, StatsigFeatureGate, Suggestion, SuggestionClickedAttributes, UserEvent, UserEventCategory } from "@spiffy-ai/commerce-api-client";
7
+
8
+ //#region src/application/models/cachedValue.d.ts
9
+ interface CachedValue {
10
+ value: unknown;
11
+ expiry: number;
12
+ }
13
+ //#endregion
14
+ //#region src/application/models/clientDetails.d.ts
15
+ interface ClientDetails {
16
+ os?: string;
17
+ osVersion?: string;
18
+ deviceBrand?: string;
19
+ deviceManufacturer?: string;
20
+ deviceModel?: string;
21
+ carrier?: string;
22
+ country?: string;
23
+ region?: string;
24
+ browser?: string;
25
+ browserVersion?: string;
26
+ browserIpAddress?: string;
27
+ userAgent?: string;
28
+ }
29
+ //#endregion
30
+ //#region src/application/models/conversationalSearchIds.d.ts
31
+ type ConversationalSearchIds = {
32
+ conversationalSearchEntrypointId?: string;
33
+ conversationalSearchInputId?: string;
34
+ conversationalSearchModalId?: string;
35
+ };
36
+ //#endregion
37
+ //#region src/application/models/dataLayer.d.ts
38
+ /**
39
+ * Base interface for common properties across all ecommerce events
40
+ */
41
+ interface BaseEcommerceEvent {
42
+ event: string;
43
+ ecommerce: UAEcommerceData | GA4EcommerceData;
44
+ }
45
+ /**
46
+ * Legacy universal analytics data. The actual payload contains more fields, but we
47
+ * only need the ones listed below.
48
+ */
49
+ interface UAEcommerceData {
50
+ add: {
51
+ products: {
52
+ name: string;
53
+ category: string;
54
+ price: string;
55
+ quantity: string;
56
+ }[];
57
+ currencyCode: string;
58
+ };
59
+ }
60
+ /**
61
+ * Google Analytics 4 data. The actual payload contains more fields, but we
62
+ * only need the ones listed below.
63
+ */
64
+ interface GA4EcommerceData {
65
+ currency: string;
66
+ items: {
67
+ item_name: string;
68
+ item_category: string;
69
+ price: number;
70
+ quantity: number;
71
+ }[];
72
+ }
73
+ interface UAEcommerceEvent extends BaseEcommerceEvent {
74
+ ecommerce: UAEcommerceData;
75
+ }
76
+ interface GA4EcommerceEvent extends BaseEcommerceEvent {
77
+ ecommerce: GA4EcommerceData;
78
+ }
79
+ //#endregion
80
+ //#region src/application/models/domMutationContinuation.d.ts
81
+ declare enum DomMutationObserverContinuation {
82
+ CONTINUE = "CONTINUE",
83
+ EXECUTING = "EXECUTING",
84
+ STOP = "STOP",
85
+ }
86
+ //#endregion
87
+ //#region src/application/models/domObservationStrategy.d.ts
88
+ declare enum DomObservationStrategy {
89
+ MutationObserver = "MutationObserver",
90
+ Polling = "Polling",
91
+ None = "None",
92
+ }
93
+ //#endregion
94
+ //#region src/application/models/events.d.ts
95
+ declare enum SpiffyEventName {
96
+ WidgetOpen = "spiffy:widgetopen",
97
+ WidgetClose = "spiffy:widgetclose",
98
+ }
99
+ //#endregion
100
+ //#region src/application/models/googleAnalyticsEvents.d.ts
101
+ declare enum GoogleAnalyticsEvents {
102
+ ADD_TO_CART_v1 = "add_to_cart",
103
+ ADD_TO_CART_v2 = "addToCart",
104
+ }
105
+ //#endregion
106
+ //#region src/application/models/message.d.ts
107
+ declare enum MessageRole {
108
+ User = "user",
109
+ Assistant = "assistant",
110
+ }
111
+ declare enum MessageType {
112
+ Text = "text",
113
+ SuggestionClicked = "suggestion_clicked",
114
+ Product = "product",
115
+ ProductSearch = "product_search",
116
+ Review = "review",
117
+ QueryTyped = "query_typed",
118
+ Separator = "separator",
119
+ Page = "page",
120
+ Search = "search",
121
+ Attachment = "attachment",
122
+ CXAgentResponse = "cx_agent_response",
123
+ Form = "form",
124
+ Order = "order",
125
+ ProductSearchFilter = "product_search_filter",
126
+ }
127
+ type Message = {
128
+ id: string;
129
+ role: MessageRole;
130
+ createdAt: string;
131
+ } & (TextMessageMetadata | QueryTypedMetadata | SuggestionMessageMetadata | ProductMessageMetadata | ProductSearchMessageMetadata | ReviewMessageMetadata | SeparatorMessageMetadata | PageMessageMetadata | SearchMessageMetadata | AttachmentMetadata | CXAgentResponseMetadata | FormMessageMetadata | OrderMessageMetadata | ProductSearchFilterMetadata);
132
+ type AttachmentMetadata = {
133
+ type: MessageType.Attachment;
134
+ metadata: {
135
+ message?: string;
136
+ attachment: CustServiceAttachment[];
137
+ };
138
+ };
139
+ type CXAgentResponseMetadata = {
140
+ type: MessageType.CXAgentResponse;
141
+ metadata: {
142
+ message: string;
143
+ agentName: string;
144
+ };
145
+ };
146
+ type TextMessageMetadata = {
147
+ type: MessageType.Text;
148
+ metadata: TextResponseAttributes['attributes'];
149
+ };
150
+ type QueryTypedMetadata = {
151
+ type: MessageType.QueryTyped;
152
+ metadata: TextResponseAttributes['attributes'];
153
+ };
154
+ type SuggestionMessageMetadata = {
155
+ type: MessageType.SuggestionClicked;
156
+ metadata: {
157
+ suggestionId: string;
158
+ suggestionContent: string;
159
+ };
160
+ };
161
+ type ProductMessageMetadata = {
162
+ type: MessageType.Product;
163
+ metadata: ProductResponseAttributes['attributes'];
164
+ };
165
+ type ProductSearchMessageMetadata = {
166
+ type: MessageType.ProductSearch;
167
+ metadata: SearchProductResponseAttributes['attributes'];
168
+ };
169
+ type ReviewMessageMetadata = {
170
+ type: MessageType.Review;
171
+ metadata: ReviewResponseAttributes['attributes'];
172
+ };
173
+ type SeparatorMessageMetadata = {
174
+ type: MessageType.Separator;
175
+ };
176
+ type PageMessageMetadata = {
177
+ type: MessageType.Page;
178
+ metadata: PageResponseAttributes['attributes'];
179
+ };
180
+ type SearchMessageMetadata = {
181
+ type: MessageType.Search;
182
+ metadata: SearchResponseAttributes['attributes'];
183
+ };
184
+ type ProductSearchFilterMetadata = {
185
+ type: MessageType.ProductSearchFilter;
186
+ metadata: SearchProductFilterAttributes['attributes'];
187
+ };
188
+ type FormField = {
189
+ key: string;
190
+ title: string;
191
+ type: AcceptableFormFieldType;
192
+ required: boolean;
193
+ format?: 'email';
194
+ value?: string;
195
+ };
196
+ type FormMessageMetadata = {
197
+ type: MessageType.Form;
198
+ metadata: {
199
+ formType?: FormType;
200
+ fields: FormField[];
201
+ };
202
+ };
203
+ type OrderMessageMetadata = {
204
+ type: MessageType.Order;
205
+ metadata: OrderResponseAttributes$1['attributes'];
206
+ };
207
+ //#endregion
208
+ //#region src/application/models/mobilePLPChatPlacementParameter.d.ts
209
+ interface MobilePLPChatPlacementParameter {
210
+ rowIndex: number;
211
+ }
212
+ //#endregion
213
+ //#region src/application/models/orgsEnum.d.ts
214
+ declare const OrgShortName: {
215
+ readonly Coterie: "coterie";
216
+ readonly ForLoveAndLemons: "for-love-and-lemons";
217
+ readonly Greenpan: "greenpan";
218
+ readonly JordanCraig: "jordan-craig";
219
+ readonly LarryAndSerges: "larry_and_serges";
220
+ readonly LeapsAndRebounds: "leaps-and-rebounds";
221
+ readonly MantraBrand: "mantra-brand";
222
+ readonly Spanx: "spanx";
223
+ readonly SpanxStaging: "staging-spanx";
224
+ readonly Supergoop: "supergoop";
225
+ readonly UniqueVintage: "unique-vintage";
226
+ readonly JackArcher: "jack-archer";
227
+ readonly SkinPerfection: "skin-perfection";
228
+ readonly LookOptic: "look-optic";
229
+ readonly FiveCbd: "five-cbd";
230
+ readonly SnapSupplements: "snap-supplements";
231
+ readonly Longevityrx: "longevityrx";
232
+ readonly VenaCbd: "vena-cbd";
233
+ readonly Medterra: "medterra";
234
+ readonly Modells: "modells";
235
+ readonly PressedFloral: "pressed-floral";
236
+ readonly KindredBravely: "kindred-bravely";
237
+ readonly WineEnthusiast: "wine-enthusiast";
238
+ readonly HomegrownCannabis: "homegrown-cannabis";
239
+ readonly DreamlandBaby: "dreamland-baby";
240
+ readonly Bandolier: "bandolier";
241
+ readonly WestonJonBoucher: "weston-jon-boucher";
242
+ readonly KutFromTheKloth: "kut-from-the-kloth";
243
+ readonly GrooveLife: "groove-life";
244
+ readonly Carpe: "carpe";
245
+ readonly WolfTactical: "wolf-tactical";
246
+ readonly WolfMattress: "wolfmattress";
247
+ readonly Default: "default";
248
+ };
249
+ //#endregion
250
+ //#region src/application/models/productExperiment.d.ts
251
+ declare enum ProductExperiment {
252
+ Default = "default",
253
+ }
254
+ //#endregion
255
+ //#region src/application/models/spanxTakeAQuizCtaParameter.d.ts
256
+ interface SpanxTakeAQuizCtaParameter {
257
+ text?: string;
258
+ value?: string;
259
+ }
260
+ //#endregion
261
+ //#region src/application/models/spiffyWidgets.d.ts
262
+ /**
263
+ * Enum of all widget names. These are widgets that are rendered and integrated into
264
+ * a merchant's website.
265
+ */
266
+ declare enum SpiffyWidgets {
267
+ ImageBanner = "image_banner",
268
+ ImagePromptCard = "image_prompt_card",
269
+ SingleImagePrompt = "single_image_prompt",
270
+ EmbeddedWidget = "embedded_widget",
271
+ FloatingButton = "floating_button",
272
+ SuggestionBar = "suggestion_bar",
273
+ SearchPrompt = "search_prompt",
274
+ GlobalSearch = "global_search",
275
+ SearchResults = "search_results",
276
+ GlobalSearchEntryPoint = "global_search_entry_point",
277
+ }
278
+ //#endregion
279
+ //#region src/application/models/supportedOrgs.d.ts
280
+ type BasicOrgInfoType = {
281
+ shortName: string;
282
+ name: string;
283
+ domain: string;
284
+ defaultProductId: string;
285
+ alwaysEnabledMerchants: boolean;
286
+ orgUIConfig: () => OrgUIConfig | undefined;
287
+ orgPageConfig: () => OrgPageConfig;
288
+ orgColors: () => ColorMapping | {};
289
+ };
290
+ declare const getOrgInfo: (orgShortName?: string) => Promise<BasicOrgInfoType>;
291
+ //#endregion
292
+ //#region src/application/models/api/context.d.ts
293
+ interface Context$1 extends CamelCasedPropertiesDeep<Context> {}
294
+ //#endregion
295
+ //#region src/application/models/api/generationParams.d.ts
296
+ interface GenerationParams$1 extends CamelCasedPropertiesDeep<GenerationParams> {}
297
+ //#endregion
298
+ //#region src/application/models/api/userEvent.d.ts
299
+ interface PDPAttributes$1 extends CamelCasedPropertiesDeep<PDPAttributes> {}
300
+ interface PLPAttributes$1 extends CamelCasedPropertiesDeep<PLPAttributes> {}
301
+ interface SearchAttributes$1 extends CamelCasedPropertiesDeep<SearchAttributes> {}
302
+ interface QueryTypedAttributes$1 extends CamelCasedPropertiesDeep<QueryTypedAttributes> {}
303
+ interface FormSubmittedAttributes$1 {
304
+ filledSchema: Record<string, unknown>;
305
+ formResponseId: string;
306
+ formType: FormType;
307
+ }
308
+ interface PageVisitAttributes {
309
+ url: string;
310
+ pageVisitCategory: PageVisitCategory;
311
+ }
312
+ interface SuggestionClickedAttributes$1 extends CamelCasedPropertiesDeep<SuggestionClickedAttributes> {}
313
+ type UserEventAttributes = PDPAttributes$1 | PLPAttributes$1 | QueryTypedAttributes$1 | SearchAttributes$1 | SuggestionClickedAttributes$1 | PageVisitAttributes;
314
+ interface PDPUserEvent {
315
+ category: UserEventCategory.PdpVisit | UserEventCategory.AddToCart;
316
+ attributes: PDPAttributes$1;
317
+ }
318
+ interface PLPUserEvent {
319
+ category: UserEventCategory.PlpVisit;
320
+ attributes: PLPAttributes$1;
321
+ }
322
+ interface QueryTypedUserEvent {
323
+ category: UserEventCategory.QueryTyped;
324
+ attributes: QueryTypedAttributes$1;
325
+ }
326
+ interface SearchUserEvent {
327
+ category: UserEventCategory.Search;
328
+ attributes: SearchAttributes$1;
329
+ }
330
+ interface SuggestionsClickedUserEvent {
331
+ category: UserEventCategory.SuggestionClicked;
332
+ attributes: SuggestionClickedAttributes$1;
333
+ }
334
+ interface AppLoadedUserEvent {
335
+ category: UserEventCategory.AppLoaded;
336
+ }
337
+ interface AppUnloadedEvent {
338
+ category: UserEventCategory.AppUnloaded;
339
+ }
340
+ interface PageVisitEvent {
341
+ category: UserEventCategory.PageVisit;
342
+ attributes: PageVisitAttributes;
343
+ }
344
+ interface FormSubmitted {
345
+ category: UserEventCategory.FormSubmitted;
346
+ attributes: FormSubmittedAttributes$1;
347
+ }
348
+ type UserEvent$1 = CamelCasedPropertiesDeep<Pick<UserEvent, 'event_id' | 'category' | 'created_at'>> & (SuggestionsClickedUserEvent | AppLoadedUserEvent | PDPUserEvent | QueryTypedUserEvent | SearchUserEvent | AppUnloadedEvent | PLPUserEvent | PageVisitEvent | FormSubmitted);
349
+ //#endregion
350
+ //#region src/application/models/api/nextMessageRequest.d.ts
351
+ interface NextMessageRequest$1 {
352
+ id: string;
353
+ context: Context$1;
354
+ userEvents?: UserEvent$1[];
355
+ featureFlags?: Record<string, boolean>;
356
+ generationParams?: GenerationParams$1;
357
+ }
358
+ //#endregion
359
+ //#region src/application/models/api/search.d.ts
360
+ interface ProductSearchResponse$1 extends CamelCasedPropertiesDeep<ProductSearchResponse> {}
361
+ interface ProductSearchResponseAttributes$1 extends CamelCasedPropertiesDeep<ProductSearchResponseAttributes> {}
362
+ interface SearchResult {
363
+ products: SearchResponseProduct[];
364
+ filters: string[];
365
+ generatedQuery?: string;
366
+ totalProductCount: number;
367
+ searchResponseId: string;
368
+ }
369
+ interface SearchParams {
370
+ query: string;
371
+ limit?: number;
372
+ }
373
+ //#endregion
374
+ //#region src/application/models/api/suggestion.d.ts
375
+ interface Suggestion$1 extends CamelCasedPropertiesDeep<Suggestion> {}
376
+ //#endregion
377
+ //#region src/application/models/api/supportedEventRequest.d.ts
378
+ interface SupportedEventRequest$1 {
379
+ id: string;
380
+ context: Context$1;
381
+ userEvent: UserEvent$1;
382
+ }
383
+ //#endregion
384
+ //#region src/application/models/graphql/queries/getMerchantOrgIdQuery.d.ts
385
+ declare const getMerchantOrgIdQuery = "\n query {\n me {\n org {\n id\n }\n }\n }\n";
386
+ //#endregion
387
+ //#region src/application/models/guards/isBaseEcommerceEvent.d.ts
388
+ /**
389
+ * Checks if an event is a base Google Analytics ecommerce event.
390
+ *
391
+ * @param data The event to check.
392
+ *
393
+ * @returns True if the event is a base ecommerce event, false otherwise.
394
+ */
395
+ declare const isBaseEcommerceEvent: (data: unknown) => data is BaseEcommerceEvent;
396
+ //#endregion
397
+ //#region src/application/models/guards/isGA4EcommerceEvent.d.ts
398
+ /**
399
+ * Checks if an event is a Google Analytics 4 ecommerce event.
400
+ *
401
+ * @param data The event to check.
402
+ *
403
+ * @returns True if the event is a GA4 ecommerce event, false otherwise.
404
+ */
405
+ declare const isGA4EcommerceEvent: (data: unknown) => data is GA4EcommerceEvent;
406
+ //#endregion
407
+ //#region src/application/models/guards/isLegacyUAEcommerceEvent.d.ts
408
+ /**
409
+ * Checks if an event is a legacy Universal Analytics ecommerce event.
410
+ *
411
+ * @param data The event to check.
412
+ *
413
+ * @returns True if the event is a legacy UA ecommerce event, false otherwise.
414
+ */
415
+ declare const isLegacyUAEcommerceEvent: (data: unknown) => data is UAEcommerceEvent;
416
+ //#endregion
417
+ //#region src/application/models/guards/isMobilePLPChatPlacementParameter.d.ts
418
+ interface MobilePlpChatPlacementParameter {
419
+ row_index: number;
420
+ }
421
+ declare const isMobilePLPChatPlacementParameter: (value: unknown) => value is MobilePlpChatPlacementParameter;
422
+ //#endregion
423
+ //#region src/application/models/guards/isSpanxTakeAQuizCtaParameter.d.ts
424
+ declare const isSpanxTakeAQuizCtaParameter: (value: unknown) => value is SpanxTakeAQuizCtaParameter;
425
+ //#endregion
426
+ //#region src/application/models/guards/isVariantInfo.d.ts
427
+ /**
428
+ * Type guard to check if an object is a valid VariantInfo.
429
+ *
430
+ * @param variantInfo - The unknown object to check.
431
+ *
432
+ * @returns True if the data is a valid VariantInfo object, false otherwise.
433
+ */
434
+ declare const isVariantInfo: (variantInfo: unknown) => variantInfo is VariantInfo;
435
+ //#endregion
436
+ //#region src/application/models/guards/utils.d.ts
437
+ /**
438
+ * Checks if an object has a property of a specific type
439
+ *
440
+ * @param obj - The object to check
441
+ * @param prop - The property name to check
442
+ * @param type - The expected type of the property
443
+ * @param isOptional - Whether the property is optional (defaults to false)
444
+ *
445
+ * @returns boolean indicating if the object has the property of the specified type
446
+ */
447
+ declare const hasPropertyOfType: <T extends object>(obj: unknown, prop: keyof T, type: "string" | "number" | "boolean" | "object" | "array", isOptional?: boolean) => obj is T;
448
+ //#endregion
449
+ //#region src/application/models/guards/api/isApiFormResponse.d.ts
450
+ /**
451
+ * Type guard to check if the provided data has the all of the properties (with the correct types) of
452
+ * a FormResponseAttribute
453
+ *
454
+ * @param data - The data to check
455
+ *
456
+ * @returns true if the data has the correct properties, false otherwise
457
+ */
458
+ declare const isApiFormResponseAttributes: (data: unknown) => data is ApiFormResponseAttributes;
459
+ //#endregion
460
+ //#region src/application/models/guards/api/isApiFormSubmittedResponseAttributes.d.ts
461
+ declare const isApiFormSubmittedResponseAttributes: (data: unknown) => data is FormSubmittedAttributes;
462
+ //#endregion
463
+ //#region src/application/models/guards/api/isApiOrderResponseAttributes.d.ts
464
+ interface ApiOrderItemInfo extends Omit<OrderItemInfo, 'delivered_at' | 'estimated_delivery_at' | 'in_transit_at'> {
465
+ delivered_at?: string;
466
+ estimated_delivery_at?: string;
467
+ in_transit_at?: string;
468
+ }
469
+ interface ApiOrderResponseAttributes extends Omit<OrderResponseAttributes, 'created_at' | 'latest_event_date' | 'line_items'> {
470
+ created_at: string;
471
+ latest_event_date: string;
472
+ line_items: ApiOrderItemInfo[];
473
+ }
474
+ declare const isApiOrderResponseAttributes: (data: unknown) => data is ApiOrderResponseAttributes;
475
+ //#endregion
476
+ //#region src/application/models/guards/api/isApiOrganizationConfig.d.ts
477
+ interface ApiOrgAnalyticsConfigAmplitude {
478
+ session_replay_enabled: boolean;
479
+ session_replay_sample_rate: number;
480
+ tracking_enabled: boolean;
481
+ }
482
+ interface ApiOrgAnalyticsConfigCustomerService {
483
+ provider: string;
484
+ }
485
+ interface ApiOrgAnalyticsConfigGoogleAnalytics {
486
+ measurement_id: string;
487
+ }
488
+ interface ApiOrgAnalyticsConfig {
489
+ amplitude?: ApiOrgAnalyticsConfigAmplitude;
490
+ customer_service?: ApiOrgAnalyticsConfigCustomerService;
491
+ google_analytics?: ApiOrgAnalyticsConfigGoogleAnalytics;
492
+ }
493
+ interface ApiOrganizationConfig extends OrganizationConfig {
494
+ config: ApiOrgAnalyticsConfig;
495
+ }
496
+ /**
497
+ *
498
+ * @param data
499
+ * @returns
500
+ */
501
+ declare const isApiOrganizationConfig: (data: unknown) => data is ApiOrganizationConfig;
502
+ //#endregion
503
+ //#region src/application/models/guards/api/isApiOrgConfigResults.d.ts
504
+ interface ApiOrgConfigResults {
505
+ configs: ApiOrganizationConfig[];
506
+ experiments: StatsigExperiment[];
507
+ gates: StatsigFeatureGate[];
508
+ org: OrganizationSettings;
509
+ }
510
+ /**
511
+ *
512
+ * @param data
513
+ * @returns
514
+ */
515
+ declare const isApiOrgConfigResults: (data: unknown) => data is Required<ApiOrgConfigResults>;
516
+ //#endregion
517
+ //#region src/application/models/guards/api/isApiPageResponseAttributes.d.ts
518
+ declare const isApiPageResponseAttributes: (obj: unknown) => obj is ApiPageResponseAttributes;
519
+ //#endregion
520
+ //#region src/application/models/guards/api/isApiPLPEventAttributes.d.ts
521
+ declare const isApiPLPIdAttribute: (data: unknown) => data is PLPIdAttributes;
522
+ declare const isApiPLPEventAttributes: (data: unknown) => data is PLPAttributes;
523
+ //#endregion
524
+ //#region src/application/models/guards/api/isApiProductSearchFilterAttributes.d.ts
525
+ declare const isApiProductSearchFilterResponseAttributes: (attributes: unknown) => attributes is ProductSearchFilterResponseAttributes;
526
+ //#endregion
527
+ //#region src/application/models/guards/graphQL/isGraphQLColorsConfig.d.ts
528
+ declare const isGraphQLColorsConfig: (data: unknown) => data is GetMerchantColorsQueryData;
529
+ //#endregion
530
+ //#region src/application/models/utilityTypes/delimiterCase.d.ts
531
+ type UpperCaseToLowerCase<T extends string> = T extends Uppercase<T> ? Lowercase<T> : T;
532
+ type SplitIncludingDelimiters_<Source extends string, Delimiter extends string> = Source extends '' ? [] : Source extends `${infer FirstPart}${Delimiter}${infer SecondPart}` ? Source extends `${FirstPart}${infer UsedDelimiter}${SecondPart}` ? UsedDelimiter extends Delimiter ? Source extends `${infer FirstPart}${UsedDelimiter}${infer SecondPart}` ? [...SplitIncludingDelimiters<FirstPart, Delimiter>, UsedDelimiter, ...SplitIncludingDelimiters<SecondPart, Delimiter>] : never : never : never : [Source];
533
+ /**
534
+ * Unlike a simpler split, this one includes the delimiter splitted on in the resulting array literal. This is to enable splitting on, for example, upper-case characters.
535
+ *
536
+ * @category Template literal
537
+ */
538
+ type SplitIncludingDelimiters<Source extends string, Delimiter extends string> = SplitIncludingDelimiters_<UpperCaseToLowerCase<Source>, Delimiter>;
539
+ /**
540
+ *Format a specific part of the splitted string literal that `StringArrayToDelimiterCase<>` fuses together, ensuring desired casing.
541
+ *
542
+ *@see StringArrayToDelimiterCase
543
+ */
544
+ type StringPartToDelimiterCase<StringPart extends string, Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> = StringPart extends UsedWordSeparators ? Delimiter : Start extends true ? Lowercase<StringPart> : StringPart extends UsedUpperCaseCharacters ? `${Delimiter}${Lowercase<StringPart>}` : StringPart;
545
+ /**
546
+ * Takes the result of a splitted string literal and recursively concatenates it together into the desired casing.
547
+ *
548
+ * It receives `UsedWordSeparators` and `UsedUpperCaseCharacters` as input to ensure it's fully encapsulated.
549
+ *
550
+ * @see SplitIncludingDelimiters
551
+ */
552
+ type StringArrayToDelimiterCase<Parts extends readonly any[], Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> = Parts extends [`${infer FirstPart}`, ...infer RemainingParts] ? `${StringPartToDelimiterCase<FirstPart, Start, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}${StringArrayToDelimiterCase<RemainingParts, false, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}` : Parts extends [string] ? string : '';
553
+ /**
554
+ * Convert a string literal to a custom string delimiter casing.
555
+ *
556
+ * This can be useful when, for example, converting a camel-cased object property to an oddly cased one.
557
+ *
558
+ * @see KebabCase
559
+ * @see SnakeCase
560
+ *
561
+ * @example
562
+ * ```
563
+ * import type {DelimiterCase} from 'type-fest';
564
+ *
565
+ * // Simple
566
+ *
567
+ * const someVariable: DelimiterCase<'fooBar', '#'> = 'foo#bar';
568
+ *
569
+ * // Advanced
570
+ *
571
+ * type OddlyCasedProperties<T> = {
572
+ * [K in keyof T as DelimiterCase<K, '#'>]: T[K]
573
+ * };
574
+ *
575
+ * interface SomeOptions {
576
+ * dryRun: boolean;
577
+ * includeFile: string;
578
+ * foo: number;
579
+ * }
580
+ *
581
+ * const rawCliOptions: OddlyCasedProperties<SomeOptions> = {
582
+ * 'dry#run': true,
583
+ * 'include#file': 'bar.js',
584
+ * foo: 123
585
+ * };
586
+ * ```
587
+ *
588
+ * @category Change case
589
+ * @category Template literal
590
+ */
591
+ type DelimiterCase<Value, Delimiter extends string> = string extends Value ? Value : Value extends string ? StringArrayToDelimiterCase<SplitIncludingDelimiters<Value, WordSeparators | UpperCaseCharacters>, true, WordSeparators, UpperCaseCharacters, Delimiter> : Value;
592
+ //#endregion
593
+ //#region src/application/models/utilityTypes/delimiterCasedPropertiesDeep.d.ts
594
+ /**
595
+ * Convert object properties to delimiter case recursively.
596
+ *
597
+ * This can be useful when, for example, converting some API types from a different style.
598
+ *
599
+ * @see DelimiterCase
600
+ * @see DelimiterCasedProperties
601
+ *
602
+ * @example
603
+ * ```
604
+ * import type {DelimiterCasedPropertiesDeep} from 'type-fest';
605
+ *
606
+ * interface User {
607
+ * userId: number;
608
+ * userName: string;
609
+ * }
610
+ *
611
+ * interface UserWithFriends {
612
+ * userInfo: User;
613
+ * userFriends: User[];
614
+ * }
615
+ *
616
+ * const result: DelimiterCasedPropertiesDeep<UserWithFriends, '-'> = {
617
+ * 'user-info': {
618
+ * 'user-id': 1,
619
+ * 'user-name': 'Tom',
620
+ * },
621
+ * 'user-friends': [
622
+ * {
623
+ * 'user-id': 2,
624
+ * 'user-name': 'Jerry',
625
+ * },
626
+ * {
627
+ * 'user-id': 3,
628
+ * 'user-name': 'Spike',
629
+ * },
630
+ * ],
631
+ * };
632
+ * ```
633
+ *
634
+ * @category Change case
635
+ * @category Template literal
636
+ * @category Object
637
+ */
638
+ type DelimiterCasedPropertiesDeep<Value, Delimiter extends string> = Value extends NonRecursiveType ? Value : Value extends UnknownArray ? DelimiterCasedPropertiesArrayDeep<Value, Delimiter> : Value extends Set<infer U> ? Set<DelimiterCasedPropertiesDeep<U, Delimiter>> : { [K in keyof Value as DelimiterCase<K, Delimiter>]: DelimiterCasedPropertiesDeep<Value[K], Delimiter> };
639
+ type DelimiterCasedPropertiesArrayDeep<Value extends UnknownArray, Delimiter extends string> = Value extends [] ? [] : Value extends [infer U, ...infer V] ? [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [infer U, ...infer V] ? readonly [DelimiterCasedPropertiesDeep<U, Delimiter>, ...DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [...infer U, infer V] ? [...DelimiterCasedPropertiesDeep<U, Delimiter>, DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends readonly [...infer U, infer V] ? readonly [...DelimiterCasedPropertiesDeep<U, Delimiter>, DelimiterCasedPropertiesDeep<V, Delimiter>] : Value extends Array<infer U> ? Array<DelimiterCasedPropertiesDeep<U, Delimiter>> : Value extends ReadonlyArray<infer U> ? ReadonlyArray<DelimiterCasedPropertiesDeep<U, Delimiter>> : never;
640
+ //#endregion
641
+ //#region src/application/models/utilityTypes/snakeCasedPropertiesDeep.d.ts
642
+ /**
643
+ * Convert object properties to snake case recursively.
644
+ *
645
+ * This can be useful when, for example, converting some API types from a different style.
646
+ *
647
+ * @see SnakeCase
648
+ * @see SnakeCasedProperties
649
+ *
650
+ * @example
651
+ * ```
652
+ * import type {SnakeCasedPropertiesDeep} from 'type-fest';
653
+ *
654
+ * interface User {
655
+ * userId: number;
656
+ * userName: string;
657
+ * }
658
+ *
659
+ * interface UserWithFriends {
660
+ * userInfo: User;
661
+ * userFriends: User[];
662
+ * }
663
+ *
664
+ * const result: SnakeCasedPropertiesDeep<UserWithFriends> = {
665
+ * user_info: {
666
+ * user_id: 1,
667
+ * user_name: 'Tom',
668
+ * },
669
+ * user_friends: [
670
+ * {
671
+ * user_id: 2,
672
+ * user_name: 'Jerry',
673
+ * },
674
+ * {
675
+ * user_id: 3,
676
+ * user_name: 'Spike',
677
+ * },
678
+ * ],
679
+ * };
680
+ * ```
681
+ *
682
+ * @category Change case
683
+ * @category Template literal
684
+ * @category Object
685
+ */
686
+ type SnakeCasedPropertiesDeep<Value> = DelimiterCasedPropertiesDeep<Value, '_'>;
687
+ //#endregion
688
+ //#region src/application/models/utils/snakeToCamelTransformer.d.ts
689
+ /**
690
+ * Generic utility to transform snake_case object keys to camelCase at runtime.
691
+ * This is the runtime equivalent of the CamelCasedPropertiesDeep type utility.
692
+ */
693
+ /**
694
+ * Recursively transforms all object keys from snake_case to camelCase
695
+ */
696
+ declare const transformSnakeToCamel: (obj: unknown) => unknown;
697
+ /**
698
+ * Recursively transforms all object keys from camelCase to snake_case
699
+ */
700
+ declare const transformCamelToSnake: (obj: unknown) => unknown;
701
+ //#endregion
702
+ //#region src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.d.ts
703
+ /**
704
+ * Converts a string to a FulfillmentDisplayStatus enum value.
705
+ *
706
+ * @param status - The string to convert.
707
+ *
708
+ * @returns The FulfillmentDisplayStatus enum value or undefined if the string
709
+ * does not map to a valid enum
710
+ */
711
+ declare const stringToFulfillmentDisplayStatusEnumValue: (status: string) => FulfillmentDisplayStatus | undefined;
712
+ //#endregion
713
+ //#region src/application/models/validators/validateGraphQLColorsConfig.d.ts
714
+ declare const validateGraphQLColorsConfig: (data: unknown) => ColorMapping | undefined;
715
+ //#endregion
716
+ //#region src/application/models/validators/validateGraphQLFrontendConfig.d.ts
717
+ declare const validateAndTransformPageVariants: (config: Record<string, unknown>) => PageVariantConfig;
718
+ declare const validateAndTransformMountingConfig: (config: Record<string, unknown>, configKey: string) => WidgetMountingConfig;
719
+ declare const validateAndTransformWidgetConfig: (config: Record<string, unknown>, configKey: string) => WidgetConfig;
720
+ declare const validateGraphQLFrontendConfig: (data: unknown) => FrontendConfig | undefined;
721
+ //#endregion
722
+ //#region src/application/models/validators/validateGraphQLOrgId.d.ts
723
+ declare const validateGraphQLOrgId: (data: unknown) => string | undefined;
724
+ //#endregion
725
+ //#region src/application/models/validators/validateMobilePLPChatPlacementParameter.d.ts
726
+ declare const validateMobilePLPChatPlacementParameter: (value: unknown) => MobilePLPChatPlacementParameter | undefined;
727
+ //#endregion
728
+ //#region src/application/models/validators/validateOrganizationConfig.d.ts
729
+ declare const validateOrganizationConfig: (data: unknown) => OrganizationConfig$1 | undefined;
730
+ //#endregion
731
+ //#region src/application/models/validators/validateOrgConfigResults.d.ts
732
+ /**
733
+ *
734
+ * @param data
735
+ * @returns
736
+ */
737
+ declare const validateOrgConfigResults: (data: unknown) => OrgConfig | undefined;
738
+ //#endregion
739
+ //#region src/application/models/validators/validateResponse.d.ts
740
+ declare const validateResponse: (data: unknown) => Response$1 | undefined;
741
+ //#endregion
742
+ //#region src/application/models/validators/validateSuggestion.d.ts
743
+ declare const validateSuggestion: (data: unknown) => Suggestion$1 | undefined;
744
+ //#endregion
745
+ //#region src/application/models/validators/validateUserEvent.d.ts
746
+ declare const validateUserEvent: (data: unknown) => UserEvent$1 | undefined;
747
+ //#endregion
748
+ export { ApiOrderItemInfo, ApiOrderResponseAttributes, ApiOrganizationConfig, AppLoadedUserEvent, AppUnloadedEvent, BaseEcommerceEvent, BasicOrgInfoType, type CachedValue, type ClientDetails, Context$1 as Context, ConversationalSearchIds, DelimiterCase, DelimiterCasedPropertiesDeep, DomMutationObserverContinuation, DomObservationStrategy, FormField, FormSubmitted, FormSubmittedAttributes$1 as FormSubmittedAttributes, GA4EcommerceEvent, GenerationParams$1 as GenerationParams, GoogleAnalyticsEvents, Message, MessageRole, MessageType, MobilePLPChatPlacementParameter, NextMessageRequest$1 as NextMessageRequest, OrgShortName, PDPAttributes$1 as PDPAttributes, PDPUserEvent, PLPAttributes$1 as PLPAttributes, PLPUserEvent, PageVisitAttributes, PageVisitEvent, ProductExperiment, ProductMessageMetadata, ProductSearchMessageMetadata, ProductSearchResponse$1 as ProductSearchResponse, ProductSearchResponseAttributes$1 as ProductSearchResponseAttributes, QueryTypedAttributes$1 as QueryTypedAttributes, QueryTypedUserEvent, SearchAttributes$1 as SearchAttributes, SearchParams, SearchResult, SearchUserEvent, SnakeCasedPropertiesDeep, SpanxTakeAQuizCtaParameter, SpiffyEventName, SpiffyWidgets, SplitIncludingDelimiters, Suggestion$1 as Suggestion, SuggestionClickedAttributes$1 as SuggestionClickedAttributes, SuggestionsClickedUserEvent, SupportedEventRequest$1 as SupportedEventRequest, UAEcommerceEvent, UserEvent$1 as UserEvent, UserEventAttributes, getMerchantOrgIdQuery, getOrgInfo, hasPropertyOfType, isApiFormResponseAttributes, isApiFormSubmittedResponseAttributes, isApiOrderResponseAttributes, isApiOrgConfigResults, isApiOrganizationConfig, isApiPLPEventAttributes, isApiPLPIdAttribute, isApiPageResponseAttributes, isApiProductSearchFilterResponseAttributes, isBaseEcommerceEvent, isGA4EcommerceEvent, isGraphQLColorsConfig, isLegacyUAEcommerceEvent, isMobilePLPChatPlacementParameter, isSpanxTakeAQuizCtaParameter, isVariantInfo, stringToFulfillmentDisplayStatusEnumValue, transformCamelToSnake, transformSnakeToCamel, validateAndTransformMountingConfig, validateAndTransformPageVariants, validateAndTransformWidgetConfig, validateGraphQLColorsConfig, validateGraphQLFrontendConfig, validateGraphQLOrgId, validateMobilePLPChatPlacementParameter, validateOrgConfigResults, validateOrganizationConfig, validateResponse, validateSuggestion, validateUserEvent };
749
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtYU5XNVY5ZmguZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jYWNoZWRWYWx1ZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jbGllbnREZXRhaWxzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbnZlcnNhdGlvbmFsU2VhcmNoSWRzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2RhdGFMYXllci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9kb21NdXRhdGlvbkNvbnRpbnVhdGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9kb21PYnNlcnZhdGlvblN0cmF0ZWd5LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2V2ZW50cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9nb29nbGVBbmFseXRpY3NFdmVudHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvbWVzc2FnZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9tb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL29yZ3NFbnVtLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3NwaWZmeVdpZGdldHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvc3VwcG9ydGVkT3Jncy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvY29udGV4dC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvZ2VuZXJhdGlvblBhcmFtcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvdXNlckV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9uZXh0TWVzc2FnZVJlcXVlc3QuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3NlYXJjaC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc3VnZ2VzdGlvbi5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnkuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzQmFzZUVjb21tZXJjZUV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0dBNEVjb21tZXJjZUV2ZW50LmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNWYXJpYW50SW5mby5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaUZvcm1SZXNwb25zZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JnQ29uZmlnUmVzdWx0cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUExQRXZlbnRBdHRyaWJ1dGVzLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyQXR0cmlidXRlcy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvZ3JhcGhRTC9pc0dyYXBoUUxDb2xvcnNDb25maWcuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL2RlbGltaXRlckNhc2UuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL2RlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXAuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzL3NuYWtlQ2FzZWRQcm9wZXJ0aWVzRGVlcC5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lci5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZS5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTENvbG9yc0NvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnLmQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cy5kLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UuZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVN1Z2dlc3Rpb24uZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVVzZXJFdmVudC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBDYWNoZWRWYWx1ZSB7XG4gICAgdmFsdWU6IHVua25vd247XG4gICAgZXhwaXJ5OiBudW1iZXI7XG59XG5leHBvcnQgdHlwZSB7IENhY2hlZFZhbHVlIH07XG4iLCJpbnRlcmZhY2UgQ2xpZW50RGV0YWlscyB7XG4gICAgb3M/OiBzdHJpbmc7XG4gICAgb3NWZXJzaW9uPzogc3RyaW5nO1xuICAgIGRldmljZUJyYW5kPzogc3RyaW5nO1xuICAgIGRldmljZU1hbnVmYWN0dXJlcj86IHN0cmluZztcbiAgICBkZXZpY2VNb2RlbD86IHN0cmluZztcbiAgICBjYXJyaWVyPzogc3RyaW5nO1xuICAgIGNvdW50cnk/OiBzdHJpbmc7XG4gICAgcmVnaW9uPzogc3RyaW5nO1xuICAgIGJyb3dzZXI/OiBzdHJpbmc7XG4gICAgYnJvd3NlclZlcnNpb24/OiBzdHJpbmc7XG4gICAgYnJvd3NlcklwQWRkcmVzcz86IHN0cmluZztcbiAgICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSB7IENsaWVudERldGFpbHMsIH07XG4iLCJleHBvcnQgdHlwZSBDb252ZXJzYXRpb25hbFNlYXJjaElkcyA9IHtcbiAgICBjb252ZXJzYXRpb25hbFNlYXJjaEVudHJ5cG9pbnRJZD86IHN0cmluZztcbiAgICBjb252ZXJzYXRpb25hbFNlYXJjaElucHV0SWQ/OiBzdHJpbmc7XG4gICAgY29udmVyc2F0aW9uYWxTZWFyY2hNb2RhbElkPzogc3RyaW5nO1xufTtcbiIsIi8qKlxuICogQmFzZSBpbnRlcmZhY2UgZm9yIGNvbW1vbiBwcm9wZXJ0aWVzIGFjcm9zcyBhbGwgZWNvbW1lcmNlIGV2ZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFY29tbWVyY2VFdmVudCB7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBlY29tbWVyY2U6IFVBRWNvbW1lcmNlRGF0YSB8IEdBNEVjb21tZXJjZURhdGE7XG59XG4vKipcbiAqIExlZ2FjeSB1bml2ZXJzYWwgYW5hbHl0aWNzIGRhdGEuIFRoZSBhY3R1YWwgcGF5bG9hZCBjb250YWlucyBtb3JlIGZpZWxkcywgYnV0IHdlXG4gKiBvbmx5IG5lZWQgdGhlIG9uZXMgbGlzdGVkIGJlbG93LlxuICovXG5pbnRlcmZhY2UgVUFFY29tbWVyY2VEYXRhIHtcbiAgICBhZGQ6IHtcbiAgICAgICAgcHJvZHVjdHM6IHtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgICAgICAgICBwcmljZTogc3RyaW5nO1xuICAgICAgICAgICAgcXVhbnRpdHk6IHN0cmluZztcbiAgICAgICAgfVtdO1xuICAgICAgICBjdXJyZW5jeUNvZGU6IHN0cmluZztcbiAgICB9O1xufVxuLyoqXG4gKiBHb29nbGUgQW5hbHl0aWNzIDQgZGF0YS4gVGhlIGFjdHVhbCBwYXlsb2FkIGNvbnRhaW5zIG1vcmUgZmllbGRzLCBidXQgd2VcbiAqIG9ubHkgbmVlZCB0aGUgb25lcyBsaXN0ZWQgYmVsb3cuXG4gKi9cbmludGVyZmFjZSBHQTRFY29tbWVyY2VEYXRhIHtcbiAgICBjdXJyZW5jeTogc3RyaW5nO1xuICAgIGl0ZW1zOiB7XG4gICAgICAgIGl0ZW1fbmFtZTogc3RyaW5nO1xuICAgICAgICBpdGVtX2NhdGVnb3J5OiBzdHJpbmc7XG4gICAgICAgIHByaWNlOiBudW1iZXI7XG4gICAgICAgIHF1YW50aXR5OiBudW1iZXI7XG4gICAgfVtdO1xufVxuZXhwb3J0IGludGVyZmFjZSBVQUVjb21tZXJjZUV2ZW50IGV4dGVuZHMgQmFzZUVjb21tZXJjZUV2ZW50IHtcbiAgICBlY29tbWVyY2U6IFVBRWNvbW1lcmNlRGF0YTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR0E0RWNvbW1lcmNlRXZlbnQgZXh0ZW5kcyBCYXNlRWNvbW1lcmNlRXZlbnQge1xuICAgIGVjb21tZXJjZTogR0E0RWNvbW1lcmNlRGF0YTtcbn1cbmV4cG9ydCB7fTtcbiIsImRlY2xhcmUgZW51bSBEb21NdXRhdGlvbk9ic2VydmVyQ29udGludWF0aW9uIHtcbiAgICBDT05USU5VRSA9IFwiQ09OVElOVUVcIixcbiAgICBFWEVDVVRJTkcgPSBcIkVYRUNVVElOR1wiLFxuICAgIFNUT1AgPSBcIlNUT1BcIlxufVxuZXhwb3J0IHsgRG9tTXV0YXRpb25PYnNlcnZlckNvbnRpbnVhdGlvbiB9O1xuIiwiZGVjbGFyZSBlbnVtIERvbU9ic2VydmF0aW9uU3RyYXRlZ3kge1xuICAgIE11dGF0aW9uT2JzZXJ2ZXIgPSBcIk11dGF0aW9uT2JzZXJ2ZXJcIixcbiAgICBQb2xsaW5nID0gXCJQb2xsaW5nXCIsXG4gICAgTm9uZSA9IFwiTm9uZVwiXG59XG5leHBvcnQgeyBEb21PYnNlcnZhdGlvblN0cmF0ZWd5IH07XG4iLCJleHBvcnQgZGVjbGFyZSBlbnVtIFNwaWZmeUV2ZW50TmFtZSB7XG4gICAgV2lkZ2V0T3BlbiA9IFwic3BpZmZ5OndpZGdldG9wZW5cIixcbiAgICBXaWRnZXRDbG9zZSA9IFwic3BpZmZ5OndpZGdldGNsb3NlXCJcbn1cbiIsImRlY2xhcmUgZW51bSBHb29nbGVBbmFseXRpY3NFdmVudHMge1xuICAgIEFERF9UT19DQVJUX3YxID0gXCJhZGRfdG9fY2FydFwiLFxuICAgIEFERF9UT19DQVJUX3YyID0gXCJhZGRUb0NhcnRcIlxufVxuZXhwb3J0IHsgR29vZ2xlQW5hbHl0aWNzRXZlbnRzIH07XG4iLCJpbXBvcnQgeyBDdXN0U2VydmljZUF0dGFjaG1lbnQsIEZvcm1UeXBlIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLCBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzLCBSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMsIFBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMsIFRleHRSZXNwb25zZUF0dHJpYnV0ZXMsIFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcywgU2VhcmNoUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcywgQWNjZXB0YWJsZUZvcm1GaWVsZFR5cGUsIFNlYXJjaFByb2R1Y3RGaWx0ZXJBdHRyaWJ1dGVzIH0gZnJvbSAnLi9hcGkvcmVzcG9uc2UnO1xuZXhwb3J0IGRlY2xhcmUgZW51bSBNZXNzYWdlUm9sZSB7XG4gICAgVXNlciA9IFwidXNlclwiLFxuICAgIEFzc2lzdGFudCA9IFwiYXNzaXN0YW50XCJcbn1cbmV4cG9ydCBkZWNsYXJlIGVudW0gTWVzc2FnZVR5cGUge1xuICAgIFRleHQgPSBcInRleHRcIixcbiAgICBTdWdnZXN0aW9uQ2xpY2tlZCA9IFwic3VnZ2VzdGlvbl9jbGlja2VkXCIsXG4gICAgUHJvZHVjdCA9IFwicHJvZHVjdFwiLFxuICAgIFByb2R1Y3RTZWFyY2ggPSBcInByb2R1Y3Rfc2VhcmNoXCIsXG4gICAgUmV2aWV3ID0gXCJyZXZpZXdcIixcbiAgICBRdWVyeVR5cGVkID0gXCJxdWVyeV90eXBlZFwiLFxuICAgIFNlcGFyYXRvciA9IFwic2VwYXJhdG9yXCIsXG4gICAgUGFnZSA9IFwicGFnZVwiLFxuICAgIFNlYXJjaCA9IFwic2VhcmNoXCIsXG4gICAgQXR0YWNobWVudCA9IFwiYXR0YWNobWVudFwiLFxuICAgIENYQWdlbnRSZXNwb25zZSA9IFwiY3hfYWdlbnRfcmVzcG9uc2VcIixcbiAgICBGb3JtID0gXCJmb3JtXCIsXG4gICAgT3JkZXIgPSBcIm9yZGVyXCIsXG4gICAgUHJvZHVjdFNlYXJjaEZpbHRlciA9IFwicHJvZHVjdF9zZWFyY2hfZmlsdGVyXCJcbn1cbmV4cG9ydCB0eXBlIE1lc3NhZ2UgPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICByb2xlOiBNZXNzYWdlUm9sZTtcbiAgICBjcmVhdGVkQXQ6IHN0cmluZztcbn0gJiAoVGV4dE1lc3NhZ2VNZXRhZGF0YSB8IFF1ZXJ5VHlwZWRNZXRhZGF0YSB8IFN1Z2dlc3Rpb25NZXNzYWdlTWV0YWRhdGEgfCBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhIHwgUHJvZHVjdFNlYXJjaE1lc3NhZ2VNZXRhZGF0YSB8IFJldmlld01lc3NhZ2VNZXRhZGF0YSB8IFNlcGFyYXRvck1lc3NhZ2VNZXRhZGF0YSB8IFBhZ2VNZXNzYWdlTWV0YWRhdGEgfCBTZWFyY2hNZXNzYWdlTWV0YWRhdGEgfCBBdHRhY2htZW50TWV0YWRhdGEgfCBDWEFnZW50UmVzcG9uc2VNZXRhZGF0YSB8IEZvcm1NZXNzYWdlTWV0YWRhdGEgfCBPcmRlck1lc3NhZ2VNZXRhZGF0YSB8IFByb2R1Y3RTZWFyY2hGaWx0ZXJNZXRhZGF0YSk7XG50eXBlIEF0dGFjaG1lbnRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5BdHRhY2htZW50O1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICAgIGF0dGFjaG1lbnQ6IEN1c3RTZXJ2aWNlQXR0YWNobWVudFtdO1xuICAgIH07XG59O1xudHlwZSBDWEFnZW50UmVzcG9uc2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5DWEFnZW50UmVzcG9uc2U7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nO1xuICAgICAgICBhZ2VudE5hbWU6IHN0cmluZztcbiAgICB9O1xufTtcbnR5cGUgVGV4dE1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5UZXh0O1xuICAgIG1ldGFkYXRhOiBUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xudHlwZSBRdWVyeVR5cGVkTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUXVlcnlUeXBlZDtcbiAgICBtZXRhZGF0YTogVGV4dFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgU3VnZ2VzdGlvbk1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5TdWdnZXN0aW9uQ2xpY2tlZDtcbiAgICBtZXRhZGF0YToge1xuICAgICAgICBzdWdnZXN0aW9uSWQ6IHN0cmluZztcbiAgICAgICAgc3VnZ2VzdGlvbkNvbnRlbnQ6IHN0cmluZztcbiAgICB9O1xufTtcbmV4cG9ydCB0eXBlIFByb2R1Y3RNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdDtcbiAgICBtZXRhZGF0YTogUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbmV4cG9ydCB0eXBlIFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaDtcbiAgICBtZXRhZGF0YTogU2VhcmNoUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbnR5cGUgUmV2aWV3TWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlJldmlldztcbiAgICBtZXRhZGF0YTogUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xudHlwZSBTZXBhcmF0b3JNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuU2VwYXJhdG9yO1xufTtcbnR5cGUgUGFnZU1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5QYWdlO1xuICAgIG1ldGFkYXRhOiBQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xudHlwZSBTZWFyY2hNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuU2VhcmNoO1xuICAgIG1ldGFkYXRhOiBTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG50eXBlIFByb2R1Y3RTZWFyY2hGaWx0ZXJNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoRmlsdGVyO1xuICAgIG1ldGFkYXRhOiBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcbmV4cG9ydCB0eXBlIEZvcm1GaWVsZCA9IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHR5cGU6IEFjY2VwdGFibGVGb3JtRmllbGRUeXBlO1xuICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgIGZvcm1hdD86ICdlbWFpbCc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG59O1xudHlwZSBGb3JtTWVzc2FnZU1ldGFkYXRhID0ge1xuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLkZvcm07XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZm9ybVR5cGU/OiBGb3JtVHlwZTtcbiAgICAgICAgZmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICB9O1xufTtcbnR5cGUgT3JkZXJNZXNzYWdlTWV0YWRhdGEgPSB7XG4gICAgdHlwZTogTWVzc2FnZVR5cGUuT3JkZXI7XG4gICAgbWV0YWRhdGE6IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGludGVyZmFjZSBNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIHtcbiAgICByb3dJbmRleDogbnVtYmVyO1xufVxuIiwiZXhwb3J0IGRlY2xhcmUgY29uc3QgT3JnU2hvcnROYW1lOiB7XG4gICAgcmVhZG9ubHkgQ290ZXJpZTogXCJjb3RlcmllXCI7XG4gICAgcmVhZG9ubHkgRm9yTG92ZUFuZExlbW9uczogXCJmb3ItbG92ZS1hbmQtbGVtb25zXCI7XG4gICAgcmVhZG9ubHkgR3JlZW5wYW46IFwiZ3JlZW5wYW5cIjtcbiAgICByZWFkb25seSBKb3JkYW5DcmFpZzogXCJqb3JkYW4tY3JhaWdcIjtcbiAgICByZWFkb25seSBMYXJyeUFuZFNlcmdlczogXCJsYXJyeV9hbmRfc2VyZ2VzXCI7XG4gICAgcmVhZG9ubHkgTGVhcHNBbmRSZWJvdW5kczogXCJsZWFwcy1hbmQtcmVib3VuZHNcIjtcbiAgICByZWFkb25seSBNYW50cmFCcmFuZDogXCJtYW50cmEtYnJhbmRcIjtcbiAgICByZWFkb25seSBTcGFueDogXCJzcGFueFwiO1xuICAgIHJlYWRvbmx5IFNwYW54U3RhZ2luZzogXCJzdGFnaW5nLXNwYW54XCI7XG4gICAgcmVhZG9ubHkgU3VwZXJnb29wOiBcInN1cGVyZ29vcFwiO1xuICAgIHJlYWRvbmx5IFVuaXF1ZVZpbnRhZ2U6IFwidW5pcXVlLXZpbnRhZ2VcIjtcbiAgICByZWFkb25seSBKYWNrQXJjaGVyOiBcImphY2stYXJjaGVyXCI7XG4gICAgcmVhZG9ubHkgU2tpblBlcmZlY3Rpb246IFwic2tpbi1wZXJmZWN0aW9uXCI7XG4gICAgcmVhZG9ubHkgTG9va09wdGljOiBcImxvb2stb3B0aWNcIjtcbiAgICByZWFkb25seSBGaXZlQ2JkOiBcImZpdmUtY2JkXCI7XG4gICAgcmVhZG9ubHkgU25hcFN1cHBsZW1lbnRzOiBcInNuYXAtc3VwcGxlbWVudHNcIjtcbiAgICByZWFkb25seSBMb25nZXZpdHlyeDogXCJsb25nZXZpdHlyeFwiO1xuICAgIHJlYWRvbmx5IFZlbmFDYmQ6IFwidmVuYS1jYmRcIjtcbiAgICByZWFkb25seSBNZWR0ZXJyYTogXCJtZWR0ZXJyYVwiO1xuICAgIHJlYWRvbmx5IE1vZGVsbHM6IFwibW9kZWxsc1wiO1xuICAgIHJlYWRvbmx5IFByZXNzZWRGbG9yYWw6IFwicHJlc3NlZC1mbG9yYWxcIjtcbiAgICByZWFkb25seSBLaW5kcmVkQnJhdmVseTogXCJraW5kcmVkLWJyYXZlbHlcIjtcbiAgICByZWFkb25seSBXaW5lRW50aHVzaWFzdDogXCJ3aW5lLWVudGh1c2lhc3RcIjtcbiAgICByZWFkb25seSBIb21lZ3Jvd25DYW5uYWJpczogXCJob21lZ3Jvd24tY2FubmFiaXNcIjtcbiAgICByZWFkb25seSBEcmVhbWxhbmRCYWJ5OiBcImRyZWFtbGFuZC1iYWJ5XCI7XG4gICAgcmVhZG9ubHkgQmFuZG9saWVyOiBcImJhbmRvbGllclwiO1xuICAgIHJlYWRvbmx5IFdlc3RvbkpvbkJvdWNoZXI6IFwid2VzdG9uLWpvbi1ib3VjaGVyXCI7XG4gICAgcmVhZG9ubHkgS3V0RnJvbVRoZUtsb3RoOiBcImt1dC1mcm9tLXRoZS1rbG90aFwiO1xuICAgIHJlYWRvbmx5IEdyb292ZUxpZmU6IFwiZ3Jvb3ZlLWxpZmVcIjtcbiAgICByZWFkb25seSBDYXJwZTogXCJjYXJwZVwiO1xuICAgIHJlYWRvbmx5IFdvbGZUYWN0aWNhbDogXCJ3b2xmLXRhY3RpY2FsXCI7XG4gICAgcmVhZG9ubHkgV29sZk1hdHRyZXNzOiBcIndvbGZtYXR0cmVzc1wiO1xuICAgIHJlYWRvbmx5IERlZmF1bHQ6IFwiZGVmYXVsdFwiO1xufTtcbiIsImV4cG9ydCBkZWNsYXJlIGVudW0gUHJvZHVjdEV4cGVyaW1lbnQge1xuICAgIERlZmF1bHQgPSBcImRlZmF1bHRcIlxufVxuIiwiZXhwb3J0IGludGVyZmFjZSBTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlciB7XG4gICAgdGV4dD86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZztcbn1cbiIsIi8qKlxuICogRW51bSBvZiBhbGwgd2lkZ2V0IG5hbWVzLiBUaGVzZSBhcmUgd2lkZ2V0cyB0aGF0IGFyZSByZW5kZXJlZCBhbmQgaW50ZWdyYXRlZCBpbnRvXG4gKiBhIG1lcmNoYW50J3Mgd2Vic2l0ZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZW51bSBTcGlmZnlXaWRnZXRzIHtcbiAgICBJbWFnZUJhbm5lciA9IFwiaW1hZ2VfYmFubmVyXCIsXG4gICAgSW1hZ2VQcm9tcHRDYXJkID0gXCJpbWFnZV9wcm9tcHRfY2FyZFwiLFxuICAgIFNpbmdsZUltYWdlUHJvbXB0ID0gXCJzaW5nbGVfaW1hZ2VfcHJvbXB0XCIsXG4gICAgRW1iZWRkZWRXaWRnZXQgPSBcImVtYmVkZGVkX3dpZGdldFwiLFxuICAgIEZsb2F0aW5nQnV0dG9uID0gXCJmbG9hdGluZ19idXR0b25cIixcbiAgICBTdWdnZXN0aW9uQmFyID0gXCJzdWdnZXN0aW9uX2JhclwiLFxuICAgIFNlYXJjaFByb21wdCA9IFwic2VhcmNoX3Byb21wdFwiLFxuICAgIEdsb2JhbFNlYXJjaCA9IFwiZ2xvYmFsX3NlYXJjaFwiLFxuICAgIFNlYXJjaFJlc3VsdHMgPSBcInNlYXJjaF9yZXN1bHRzXCIsXG4gICAgR2xvYmFsU2VhcmNoRW50cnlQb2ludCA9IFwiZ2xvYmFsX3NlYXJjaF9lbnRyeV9wb2ludFwiXG59XG4iLCJpbXBvcnQgeyBDb2xvck1hcHBpbmcsIE9yZ1BhZ2VDb25maWcsIE9yZ1VJQ29uZmlnIH0gZnJvbSBcInNyYy9jb250ZXh0cy90eXBlc1wiO1xuZXhwb3J0IHsgT3JnU2hvcnROYW1lIH0gZnJvbSBcIi4vb3Jnc0VudW1cIjtcbmV4cG9ydCB0eXBlIEJhc2ljT3JnSW5mb1R5cGUgPSB7XG4gICAgc2hvcnROYW1lOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRvbWFpbjogc3RyaW5nO1xuICAgIGRlZmF1bHRQcm9kdWN0SWQ6IHN0cmluZztcbiAgICBhbHdheXNFbmFibGVkTWVyY2hhbnRzOiBib29sZWFuO1xuICAgIG9yZ1VJQ29uZmlnOiAoKSA9PiBPcmdVSUNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgICBvcmdQYWdlQ29uZmlnOiAoKSA9PiBPcmdQYWdlQ29uZmlnO1xuICAgIG9yZ0NvbG9yczogKCkgPT4gQ29sb3JNYXBwaW5nIHwge307XG59O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZ2V0T3JnSW5mbzogKG9yZ1Nob3J0TmFtZT86IHN0cmluZykgPT4gUHJvbWlzZTxCYXNpY09yZ0luZm9UeXBlPjtcbiIsImltcG9ydCB7IENvbnRleHQgYXMgQXBpQ29udGV4dCB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxpdHlUeXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHQgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpQ29udGV4dD4ge1xufVxuIiwiaW1wb3J0IHsgR2VuZXJhdGlvblBhcmFtcyBhcyBBcGlHZW5lcmF0aW9uUGFyYW1zIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGlvblBhcmFtcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlHZW5lcmF0aW9uUGFyYW1zPiB7XG59XG4iLCJpbXBvcnQgeyBQRFBBdHRyaWJ1dGVzIGFzIEFwaVBEUEF0dHJpYnV0ZXMsIFBMUEF0dHJpYnV0ZXMgYXMgQXBpUExQQXR0cmlidXRlcywgUXVlcnlUeXBlZEF0dHJpYnV0ZXMgYXMgQXBpUXVlcnlUeXBlZEF0dHJpYnV0ZXMsIFNlYXJjaEF0dHJpYnV0ZXMgYXMgQXBpU2VhcmNoQXR0cmlidXRlcywgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzIGFzIEFwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcywgVXNlckV2ZW50IGFzIEFwaVVzZXJFdmVudCwgRm9ybVR5cGUsIFBhZ2VWaXNpdENhdGVnb3J5LCBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxpdHlUeXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIFBEUEF0dHJpYnV0ZXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUERQQXR0cmlidXRlcz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBQTFBBdHRyaWJ1dGVzIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVBMUEF0dHJpYnV0ZXM+IHtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoQXR0cmlidXRlcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlTZWFyY2hBdHRyaWJ1dGVzPiB7XG59XG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzIGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzPiB7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzIHtcbiAgICBmaWxsZWRTY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvcm1SZXNwb25zZUlkOiBzdHJpbmc7XG4gICAgZm9ybVR5cGU6IEZvcm1UeXBlO1xufVxuZXhwb3J0IGludGVyZmFjZSBQYWdlVmlzaXRBdHRyaWJ1dGVzIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBwYWdlVmlzaXRDYXRlZ29yeTogUGFnZVZpc2l0Q2F0ZWdvcnk7XG59XG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXM+IHtcbn1cbmV4cG9ydCB0eXBlIFVzZXJFdmVudEF0dHJpYnV0ZXMgPSBQRFBBdHRyaWJ1dGVzIHwgUExQQXR0cmlidXRlcyB8IFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzIHwgU2VhcmNoQXR0cmlidXRlcyB8IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyB8IFBhZ2VWaXNpdEF0dHJpYnV0ZXM7XG5leHBvcnQgaW50ZXJmYWNlIFBEUFVzZXJFdmVudCB7XG4gICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0IHwgVXNlckV2ZW50Q2F0ZWdvcnkuQWRkVG9DYXJ0O1xuICAgIGF0dHJpYnV0ZXM6IFBEUEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBMUFVzZXJFdmVudCB7XG4gICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBscFZpc2l0O1xuICAgIGF0dHJpYnV0ZXM6IFBMUEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5VHlwZWRVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkO1xuICAgIGF0dHJpYnV0ZXM6IFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2g7XG4gICAgYXR0cmlidXRlczogU2VhcmNoQXR0cmlidXRlcztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU3VnZ2VzdGlvbnNDbGlja2VkVXNlckV2ZW50IHtcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQ7XG4gICAgYXR0cmlidXRlczogU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBBcHBMb2FkZWRVc2VyRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5BcHBMb2FkZWQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFwcFVubG9hZGVkRXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5BcHBVbmxvYWRlZDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVZpc2l0RXZlbnQge1xuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQ7XG4gICAgYXR0cmlidXRlczogUGFnZVZpc2l0QXR0cmlidXRlcztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVN1Ym1pdHRlZCB7XG4gICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQ7XG4gICAgYXR0cmlidXRlczogRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM7XG59XG5leHBvcnQgdHlwZSBVc2VyRXZlbnQgPSBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8UGljazxBcGlVc2VyRXZlbnQsICdldmVudF9pZCcgfCAnY2F0ZWdvcnknIHwgJ2NyZWF0ZWRfYXQnPj4gJiAoU3VnZ2VzdGlvbnNDbGlja2VkVXNlckV2ZW50IHwgQXBwTG9hZGVkVXNlckV2ZW50IHwgUERQVXNlckV2ZW50IHwgUXVlcnlUeXBlZFVzZXJFdmVudCB8IFNlYXJjaFVzZXJFdmVudCB8IEFwcFVubG9hZGVkRXZlbnQgfCBQTFBVc2VyRXZlbnQgfCBQYWdlVmlzaXRFdmVudCB8IEZvcm1TdWJtaXR0ZWQpO1xuIiwiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICcuL3VzZXJFdmVudCc7XG5pbXBvcnQgeyBHZW5lcmF0aW9uUGFyYW1zIH0gZnJvbSAnLi9nZW5lcmF0aW9uUGFyYW1zJztcbmV4cG9ydCBpbnRlcmZhY2UgTmV4dE1lc3NhZ2VSZXF1ZXN0IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG4gICAgdXNlckV2ZW50cz86IFVzZXJFdmVudFtdO1xuICAgIGZlYXR1cmVGbGFncz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIGdlbmVyYXRpb25QYXJhbXM/OiBHZW5lcmF0aW9uUGFyYW1zO1xufVxuIiwiaW1wb3J0IHsgUHJvZHVjdFNlYXJjaFJlc3BvbnNlIGFzIEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZSwgUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyBhcyBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLCBTZWFyY2hSZXNwb25zZVByb2R1Y3QgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0U2VhcmNoUmVzcG9uc2UgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlPiB7XG59XG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXN1bHQge1xuICAgIHByb2R1Y3RzOiBTZWFyY2hSZXNwb25zZVByb2R1Y3RbXTtcbiAgICBmaWx0ZXJzOiBzdHJpbmdbXTtcbiAgICBnZW5lcmF0ZWRRdWVyeT86IHN0cmluZztcbiAgICB0b3RhbFByb2R1Y3RDb3VudDogbnVtYmVyO1xuICAgIHNlYXJjaFJlc3BvbnNlSWQ6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUGFyYW1zIHtcbiAgICBxdWVyeTogc3RyaW5nO1xuICAgIGxpbWl0PzogbnVtYmVyO1xufVxuIiwiaW1wb3J0IHsgU3VnZ2VzdGlvbiBhcyBBcGlTdWdnZXN0aW9uIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgU3VnZ2VzdGlvbiBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlTdWdnZXN0aW9uPiB7XG59XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICcuL3VzZXJFdmVudCc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmV4cG9ydCBpbnRlcmZhY2UgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG4gICAgdXNlckV2ZW50OiBVc2VyRXZlbnQ7XG59XG4iLCJkZWNsYXJlIGNvbnN0IGdldE1lcmNoYW50T3JnSWRRdWVyeSA9IFwiXFxuICBxdWVyeSB7XFxuICAgIG1lIHtcXG4gICAgICBvcmcge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjtcbmV4cG9ydCB7IGdldE1lcmNoYW50T3JnSWRRdWVyeSB9O1xuIiwiaW1wb3J0IHR5cGUgeyBCYXNlRWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIGEgYmFzZSBHb29nbGUgQW5hbHl0aWNzIGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBiYXNlIGVjb21tZXJjZSBldmVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0Jhc2VFY29tbWVyY2VFdmVudDogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgQmFzZUVjb21tZXJjZUV2ZW50O1xuIiwiaW1wb3J0IHR5cGUgeyBHQTRFY29tbWVyY2VFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBHb29nbGUgQW5hbHl0aWNzIDQgZWNvbW1lcmNlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBldmVudCB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBpcyBhIEdBNCBlY29tbWVyY2UgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNHQTRFY29tbWVyY2VFdmVudDogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgR0E0RWNvbW1lcmNlRXZlbnQ7XG4iLCJpbXBvcnQgdHlwZSB7IFVBRWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIGEgbGVnYWN5IFVuaXZlcnNhbCBBbmFseXRpY3MgZWNvbW1lcmNlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBldmVudCB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBpcyBhIGxlZ2FjeSBVQSBlY29tbWVyY2UgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50OiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBVQUVjb21tZXJjZUV2ZW50O1xuIiwiaW50ZXJmYWNlIE1vYmlsZVBscENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIge1xuICAgIHJvd19pbmRleDogbnVtYmVyO1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyOiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIE1vYmlsZVBscENoYXRQbGFjZW1lbnRQYXJhbWV0ZXI7XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlciB9IGZyb20gJy4uL3NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXI7XG4iLCJpbXBvcnQgeyBWYXJpYW50SW5mbyB9IGZyb20gJy4uL3ZhcmlhbnRJbmZvJztcbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCBWYXJpYW50SW5mby5cbiAqXG4gKiBAcGFyYW0gdmFyaWFudEluZm8gLSBUaGUgdW5rbm93biBvYmplY3QgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0YSBpcyBhIHZhbGlkIFZhcmlhbnRJbmZvIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1ZhcmlhbnRJbmZvOiAodmFyaWFudEluZm86IHVua25vd24pID0+IHZhcmlhbnRJbmZvIGlzIFZhcmlhbnRJbmZvO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5IG9mIGEgc3BlY2lmaWMgdHlwZVxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHRvIGNoZWNrXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGlzT3B0aW9uYWwgLSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBvcHRpb25hbCAoZGVmYXVsdHMgdG8gZmFsc2UpXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgc3BlY2lmaWVkIHR5cGVcbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaGFzUHJvcGVydHlPZlR5cGU6IDxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IHVua25vd24sIHByb3A6IGtleW9mIFQsIHR5cGU6IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcIm9iamVjdFwiIHwgXCJhcnJheVwiLCBpc09wdGlvbmFsPzogYm9vbGVhbikgPT4gb2JqIGlzIFQ7XG4iLCJpbXBvcnQgeyBBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIHByb3ZpZGVkIGRhdGEgaGFzIHRoZSBhbGwgb2YgdGhlIHByb3BlcnRpZXMgKHdpdGggdGhlIGNvcnJlY3QgdHlwZXMpIG9mXG4gKiBhIEZvcm1SZXNwb25zZUF0dHJpYnV0ZVxuICpcbiAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRhIGhhcyB0aGUgY29ycmVjdCBwcm9wZXJ0aWVzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBGb3JtU3VibWl0dGVkQXR0cmlidXRlcztcbiIsImltcG9ydCB7IE9yZGVySXRlbUluZm8sIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmV4cG9ydCBpbnRlcmZhY2UgQXBpT3JkZXJJdGVtSW5mbyBleHRlbmRzIE9taXQ8T3JkZXJJdGVtSW5mbywgJ2RlbGl2ZXJlZF9hdCcgfCAnZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0JyB8ICdpbl90cmFuc2l0X2F0Jz4ge1xuICAgIGRlbGl2ZXJlZF9hdD86IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfZGVsaXZlcnlfYXQ/OiBzdHJpbmc7XG4gICAgaW5fdHJhbnNpdF9hdD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgZXh0ZW5kcyBPbWl0PE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLCAnY3JlYXRlZF9hdCcgfCAnbGF0ZXN0X2V2ZW50X2RhdGUnIHwgJ2xpbmVfaXRlbXMnPiB7XG4gICAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICAgIGxhdGVzdF9ldmVudF9kYXRlOiBzdHJpbmc7XG4gICAgbGluZV9pdGVtczogQXBpT3JkZXJJdGVtSW5mb1tdO1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlczogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXM7XG4iLCJpbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSB7XG4gICAgc2Vzc2lvbl9yZXBsYXlfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBzZXNzaW9uX3JlcGxheV9zYW1wbGVfcmF0ZTogbnVtYmVyO1xuICAgIHRyYWNraW5nX2VuYWJsZWQ6IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlIHtcbiAgICBwcm92aWRlcjogc3RyaW5nO1xufVxuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0dvb2dsZUFuYWx5dGljcyB7XG4gICAgbWVhc3VyZW1lbnRfaWQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWcge1xuICAgIGFtcGxpdHVkZT86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTtcbiAgICBjdXN0b21lcl9zZXJ2aWNlPzogQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlO1xuICAgIGdvb2dsZV9hbmFseXRpY3M/OiBBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3M7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZ2FuaXphdGlvbkNvbmZpZyBleHRlbmRzIE9yZ2FuaXphdGlvbkNvbmZpZyB7XG4gICAgY29uZmlnOiBBcGlPcmdBbmFseXRpY3NDb25maWc7XG59XG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNBcGlPcmdhbml6YXRpb25Db25maWc6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbkNvbmZpZztcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IFN0YXRzaWdFeHBlcmltZW50IGFzIEFwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQsIFN0YXRzaWdGZWF0dXJlR2F0ZSBhcyBBcGlPcmdDb25maWdGZWF0dXJlR2F0ZSwgT3JnYW5pemF0aW9uU2V0dGluZ3MgYXMgQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQXBpT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnLi9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZyc7XG5pbnRlcmZhY2UgQXBpT3JnQ29uZmlnUmVzdWx0cyB7XG4gICAgY29uZmlnczogQXBpT3JnYW5pemF0aW9uQ29uZmlnW107XG4gICAgZXhwZXJpbWVudHM6IEFwaU9yZ0NvbmZpZ0V4cGVyaW1lbnRbXTtcbiAgICBnYXRlczogQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGVbXTtcbiAgICBvcmc6IEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzO1xufVxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpT3JnQ29uZmlnUmVzdWx0czogKGRhdGE6IHVua25vd24pID0+IGRhdGEgaXMgUmVxdWlyZWQ8QXBpT3JnQ29uZmlnUmVzdWx0cz47XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXM6IChvYmo6IHVua25vd24pID0+IG9iaiBpcyBBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgUExQQXR0cmlidXRlcywgUExQSWRBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpUExQSWRBdHRyaWJ1dGU6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIFBMUElkQXR0cmlidXRlcztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzQXBpUExQRXZlbnRBdHRyaWJ1dGVzOiAoZGF0YTogdW5rbm93bikgPT4gZGF0YSBpcyBQTFBBdHRyaWJ1dGVzO1xuIiwiaW1wb3J0IHsgUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0FwaVByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXM6IChhdHRyaWJ1dGVzOiB1bmtub3duKSA9PiBhdHRyaWJ1dGVzIGlzIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXM7XG4iLCJpbXBvcnQgeyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0dyYXBoUUxDb2xvcnNDb25maWc6IChkYXRhOiB1bmtub3duKSA9PiBkYXRhIGlzIEdldE1lcmNoYW50Q29sb3JzUXVlcnlEYXRhO1xuIiwiaW1wb3J0IHR5cGUgeyBVcHBlckNhc2VDaGFyYWN0ZXJzLCBXb3JkU2VwYXJhdG9ycyB9IGZyb20gJy4vaW50ZXJuYWwnO1xudHlwZSBVcHBlckNhc2VUb0xvd2VyQ2FzZTxUIGV4dGVuZHMgc3RyaW5nPiA9IFQgZXh0ZW5kcyBVcHBlcmNhc2U8VD4gPyBMb3dlcmNhc2U8VD4gOiBUO1xudHlwZSBTcGxpdEluY2x1ZGluZ0RlbGltaXRlcnNfPFNvdXJjZSBleHRlbmRzIHN0cmluZywgRGVsaW1pdGVyIGV4dGVuZHMgc3RyaW5nPiA9IFNvdXJjZSBleHRlbmRzICcnID8gW10gOiBTb3VyY2UgZXh0ZW5kcyBgJHtpbmZlciBGaXJzdFBhcnR9JHtEZWxpbWl0ZXJ9JHtpbmZlciBTZWNvbmRQYXJ0fWAgPyBTb3VyY2UgZXh0ZW5kcyBgJHtGaXJzdFBhcnR9JHtpbmZlciBVc2VkRGVsaW1pdGVyfSR7U2Vjb25kUGFydH1gID8gVXNlZERlbGltaXRlciBleHRlbmRzIERlbGltaXRlciA/IFNvdXJjZSBleHRlbmRzIGAke2luZmVyIEZpcnN0UGFydH0ke1VzZWREZWxpbWl0ZXJ9JHtpbmZlciBTZWNvbmRQYXJ0fWAgPyBbXG4gICAgLi4uU3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzPEZpcnN0UGFydCwgRGVsaW1pdGVyPixcbiAgICBVc2VkRGVsaW1pdGVyLFxuICAgIC4uLlNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyczxTZWNvbmRQYXJ0LCBEZWxpbWl0ZXI+XG5dIDogbmV2ZXIgOiBuZXZlciA6IG5ldmVyIDogW1NvdXJjZV07XG4vKipcbiAqIFVubGlrZSBhIHNpbXBsZXIgc3BsaXQsIHRoaXMgb25lIGluY2x1ZGVzIHRoZSBkZWxpbWl0ZXIgc3BsaXR0ZWQgb24gaW4gdGhlIHJlc3VsdGluZyBhcnJheSBsaXRlcmFsLiBUaGlzIGlzIHRvIGVuYWJsZSBzcGxpdHRpbmcgb24sIGZvciBleGFtcGxlLCB1cHBlci1jYXNlIGNoYXJhY3RlcnMuXG4gKlxuICogQGNhdGVnb3J5IFRlbXBsYXRlIGxpdGVyYWxcbiAqL1xuZXhwb3J0IHR5cGUgU3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzPFNvdXJjZSBleHRlbmRzIHN0cmluZywgRGVsaW1pdGVyIGV4dGVuZHMgc3RyaW5nPiA9IFNwbGl0SW5jbHVkaW5nRGVsaW1pdGVyc188VXBwZXJDYXNlVG9Mb3dlckNhc2U8U291cmNlPiwgRGVsaW1pdGVyPjtcbi8qKlxuICpGb3JtYXQgYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBzcGxpdHRlZCBzdHJpbmcgbGl0ZXJhbCB0aGF0IGBTdHJpbmdBcnJheVRvRGVsaW1pdGVyQ2FzZTw+YCBmdXNlcyB0b2dldGhlciwgZW5zdXJpbmcgZGVzaXJlZCBjYXNpbmcuXG4gKlxuICpAc2VlIFN0cmluZ0FycmF5VG9EZWxpbWl0ZXJDYXNlXG4gKi9cbnR5cGUgU3RyaW5nUGFydFRvRGVsaW1pdGVyQ2FzZTxTdHJpbmdQYXJ0IGV4dGVuZHMgc3RyaW5nLCBTdGFydCBleHRlbmRzIGJvb2xlYW4sIFVzZWRXb3JkU2VwYXJhdG9ycyBleHRlbmRzIHN0cmluZywgVXNlZFVwcGVyQ2FzZUNoYXJhY3RlcnMgZXh0ZW5kcyBzdHJpbmcsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBTdHJpbmdQYXJ0IGV4dGVuZHMgVXNlZFdvcmRTZXBhcmF0b3JzID8gRGVsaW1pdGVyIDogU3RhcnQgZXh0ZW5kcyB0cnVlID8gTG93ZXJjYXNlPFN0cmluZ1BhcnQ+IDogU3RyaW5nUGFydCBleHRlbmRzIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzID8gYCR7RGVsaW1pdGVyfSR7TG93ZXJjYXNlPFN0cmluZ1BhcnQ+fWAgOiBTdHJpbmdQYXJ0O1xuLyoqXG4gKiBUYWtlcyB0aGUgcmVzdWx0IG9mIGEgc3BsaXR0ZWQgc3RyaW5nIGxpdGVyYWwgYW5kIHJlY3Vyc2l2ZWx5IGNvbmNhdGVuYXRlcyBpdCB0b2dldGhlciBpbnRvIHRoZSBkZXNpcmVkIGNhc2luZy5cbiAqXG4gKiBJdCByZWNlaXZlcyBgVXNlZFdvcmRTZXBhcmF0b3JzYCBhbmQgYFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzYCBhcyBpbnB1dCB0byBlbnN1cmUgaXQncyBmdWxseSBlbmNhcHN1bGF0ZWQuXG4gKlxuICogQHNlZSBTcGxpdEluY2x1ZGluZ0RlbGltaXRlcnNcbiAqL1xudHlwZSBTdHJpbmdBcnJheVRvRGVsaW1pdGVyQ2FzZTxQYXJ0cyBleHRlbmRzIHJlYWRvbmx5IGFueVtdLCBTdGFydCBleHRlbmRzIGJvb2xlYW4sIFVzZWRXb3JkU2VwYXJhdG9ycyBleHRlbmRzIHN0cmluZywgVXNlZFVwcGVyQ2FzZUNoYXJhY3RlcnMgZXh0ZW5kcyBzdHJpbmcsIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBQYXJ0cyBleHRlbmRzIFtgJHtpbmZlciBGaXJzdFBhcnR9YCwgLi4uaW5mZXIgUmVtYWluaW5nUGFydHNdID8gYCR7U3RyaW5nUGFydFRvRGVsaW1pdGVyQ2FzZTxGaXJzdFBhcnQsIFN0YXJ0LCBVc2VkV29yZFNlcGFyYXRvcnMsIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzLCBEZWxpbWl0ZXI+fSR7U3RyaW5nQXJyYXlUb0RlbGltaXRlckNhc2U8UmVtYWluaW5nUGFydHMsIGZhbHNlLCBVc2VkV29yZFNlcGFyYXRvcnMsIFVzZWRVcHBlckNhc2VDaGFyYWN0ZXJzLCBEZWxpbWl0ZXI+fWAgOiBQYXJ0cyBleHRlbmRzIFtzdHJpbmddID8gc3RyaW5nIDogJyc7XG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgbGl0ZXJhbCB0byBhIGN1c3RvbSBzdHJpbmcgZGVsaW1pdGVyIGNhc2luZy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiwgZm9yIGV4YW1wbGUsIGNvbnZlcnRpbmcgYSBjYW1lbC1jYXNlZCBvYmplY3QgcHJvcGVydHkgdG8gYW4gb2RkbHkgY2FzZWQgb25lLlxuICpcbiAqIEBzZWUgS2ViYWJDYXNlXG4gKiBAc2VlIFNuYWtlQ2FzZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGltcG9ydCB0eXBlIHtEZWxpbWl0ZXJDYXNlfSBmcm9tICd0eXBlLWZlc3QnO1xuICpcbiAqIC8vIFNpbXBsZVxuICpcbiAqIGNvbnN0IHNvbWVWYXJpYWJsZTogRGVsaW1pdGVyQ2FzZTwnZm9vQmFyJywgJyMnPiA9ICdmb28jYmFyJztcbiAqXG4gKiAvLyBBZHZhbmNlZFxuICpcbiAqIHR5cGUgT2RkbHlDYXNlZFByb3BlcnRpZXM8VD4gPSB7XG4gKiBcdFtLIGluIGtleW9mIFQgYXMgRGVsaW1pdGVyQ2FzZTxLLCAnIyc+XTogVFtLXVxuICogfTtcbiAqXG4gKiBpbnRlcmZhY2UgU29tZU9wdGlvbnMge1xuICogXHRkcnlSdW46IGJvb2xlYW47XG4gKiBcdGluY2x1ZGVGaWxlOiBzdHJpbmc7XG4gKiBcdGZvbzogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IHJhd0NsaU9wdGlvbnM6IE9kZGx5Q2FzZWRQcm9wZXJ0aWVzPFNvbWVPcHRpb25zPiA9IHtcbiAqIFx0J2RyeSNydW4nOiB0cnVlLFxuICogXHQnaW5jbHVkZSNmaWxlJzogJ2Jhci5qcycsXG4gKiBcdGZvbzogMTIzXG4gKiB9O1xuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IENoYW5nZSBjYXNlXG4gKiBAY2F0ZWdvcnkgVGVtcGxhdGUgbGl0ZXJhbFxuICovXG5leHBvcnQgdHlwZSBEZWxpbWl0ZXJDYXNlPFZhbHVlLCBEZWxpbWl0ZXIgZXh0ZW5kcyBzdHJpbmc+ID0gc3RyaW5nIGV4dGVuZHMgVmFsdWUgPyBWYWx1ZSA6IFZhbHVlIGV4dGVuZHMgc3RyaW5nID8gU3RyaW5nQXJyYXlUb0RlbGltaXRlckNhc2U8U3BsaXRJbmNsdWRpbmdEZWxpbWl0ZXJzPFZhbHVlLCBXb3JkU2VwYXJhdG9ycyB8IFVwcGVyQ2FzZUNoYXJhY3RlcnM+LCB0cnVlLCBXb3JkU2VwYXJhdG9ycywgVXBwZXJDYXNlQ2hhcmFjdGVycywgRGVsaW1pdGVyPiA6IFZhbHVlO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBEZWxpbWl0ZXJDYXNlIH0gZnJvbSAnLi9kZWxpbWl0ZXJDYXNlJztcbmltcG9ydCB0eXBlIHsgTm9uUmVjdXJzaXZlVHlwZSB9IGZyb20gJy4vaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgeyBVbmtub3duQXJyYXkgfSBmcm9tICcuL3Vua25vd25BcnJheSc7XG4vKipcbiAqIENvbnZlcnQgb2JqZWN0IHByb3BlcnRpZXMgdG8gZGVsaW1pdGVyIGNhc2UgcmVjdXJzaXZlbHkuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4sIGZvciBleGFtcGxlLCBjb252ZXJ0aW5nIHNvbWUgQVBJIHR5cGVzIGZyb20gYSBkaWZmZXJlbnQgc3R5bGUuXG4gKlxuICogQHNlZSBEZWxpbWl0ZXJDYXNlXG4gKiBAc2VlIERlbGltaXRlckNhc2VkUHJvcGVydGllc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGltcG9ydCB0eXBlIHtEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwfSBmcm9tICd0eXBlLWZlc3QnO1xuICpcbiAqIGludGVyZmFjZSBVc2VyIHtcbiAqIFx0dXNlcklkOiBudW1iZXI7XG4gKiBcdHVzZXJOYW1lOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogaW50ZXJmYWNlIFVzZXJXaXRoRnJpZW5kcyB7XG4gKiBcdHVzZXJJbmZvOiBVc2VyO1xuICogXHR1c2VyRnJpZW5kczogVXNlcltdO1xuICogfVxuICpcbiAqIGNvbnN0IHJlc3VsdDogRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVc2VyV2l0aEZyaWVuZHMsICctJz4gPSB7XG4gKiBcdCd1c2VyLWluZm8nOiB7XG4gKiBcdCd1c2VyLWlkJzogMSxcbiAqIFx0XHQndXNlci1uYW1lJzogJ1RvbScsXG4gKiBcdH0sXG4gKiBcdCd1c2VyLWZyaWVuZHMnOiBbXG4gKiBcdFx0e1xuICogXHRcdFx0J3VzZXItaWQnOiAyLFxuICogXHRcdFx0J3VzZXItbmFtZSc6ICdKZXJyeScsXG4gKiBcdFx0fSxcbiAqIFx0XHR7XG4gKiBcdFx0XHQndXNlci1pZCc6IDMsXG4gKiBcdFx0XHQndXNlci1uYW1lJzogJ1NwaWtlJyxcbiAqIFx0XHR9LFxuICogXHRdLFxuICogfTtcbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBDaGFuZ2UgY2FzZVxuICogQGNhdGVnb3J5IFRlbXBsYXRlIGxpdGVyYWxcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqL1xuZXhwb3J0IHR5cGUgRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxWYWx1ZSwgRGVsaW1pdGVyIGV4dGVuZHMgc3RyaW5nPiA9IFZhbHVlIGV4dGVuZHMgTm9uUmVjdXJzaXZlVHlwZSA/IFZhbHVlIDogVmFsdWUgZXh0ZW5kcyBVbmtub3duQXJyYXkgPyBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNBcnJheURlZXA8VmFsdWUsIERlbGltaXRlcj4gOiBWYWx1ZSBleHRlbmRzIFNldDxpbmZlciBVPiA/IFNldDxEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFUsIERlbGltaXRlcj4+IDoge1xuICAgIFtLIGluIGtleW9mIFZhbHVlIGFzIERlbGltaXRlckNhc2U8SywgRGVsaW1pdGVyPl06IERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VmFsdWVbS10sIERlbGltaXRlcj47XG59O1xudHlwZSBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNBcnJheURlZXA8VmFsdWUgZXh0ZW5kcyBVbmtub3duQXJyYXksIERlbGltaXRlciBleHRlbmRzIHN0cmluZz4gPSBWYWx1ZSBleHRlbmRzIFtdID8gW10gOiBWYWx1ZSBleHRlbmRzIFtpbmZlciBVLCAuLi5pbmZlciBWXSA/IFtEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFUsIERlbGltaXRlcj4sIC4uLkRlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8ViwgRGVsaW1pdGVyPl0gOiBWYWx1ZSBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBVLCAuLi5pbmZlciBWXSA/IHJlYWRvbmx5IFtcbiAgICBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFUsIERlbGltaXRlcj4sXG4gICAgLi4uRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxWLCBEZWxpbWl0ZXI+XG5dIDogVmFsdWUgZXh0ZW5kcyByZWFkb25seSBbLi4uaW5mZXIgVSwgaW5mZXIgVl0gPyBbXG4gICAgLi4uRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+LFxuICAgIERlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8ViwgRGVsaW1pdGVyPlxuXSA6IFZhbHVlIGV4dGVuZHMgcmVhZG9ubHkgWy4uLmluZmVyIFUsIGluZmVyIFZdID8gcmVhZG9ubHkgW1xuICAgIC4uLkRlbGltaXRlckNhc2VkUHJvcGVydGllc0RlZXA8VSwgRGVsaW1pdGVyPixcbiAgICBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwPFYsIERlbGltaXRlcj5cbl0gOiBWYWx1ZSBleHRlbmRzIEFycmF5PGluZmVyIFU+ID8gQXJyYXk8RGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+PiA6IFZhbHVlIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IFJlYWRvbmx5QXJyYXk8RGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVLCBEZWxpbWl0ZXI+PiA6IG5ldmVyO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBEZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnLi9kZWxpbWl0ZXJDYXNlZFByb3BlcnRpZXNEZWVwJztcbi8qKlxuICogQ29udmVydCBvYmplY3QgcHJvcGVydGllcyB0byBzbmFrZSBjYXNlIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuLCBmb3IgZXhhbXBsZSwgY29udmVydGluZyBzb21lIEFQSSB0eXBlcyBmcm9tIGEgZGlmZmVyZW50IHN0eWxlLlxuICpcbiAqIEBzZWUgU25ha2VDYXNlXG4gKiBAc2VlIFNuYWtlQ2FzZWRQcm9wZXJ0aWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogaW1wb3J0IHR5cGUge1NuYWtlQ2FzZWRQcm9wZXJ0aWVzRGVlcH0gZnJvbSAndHlwZS1mZXN0JztcbiAqXG4gKiBpbnRlcmZhY2UgVXNlciB7XG4gKiBcdHVzZXJJZDogbnVtYmVyO1xuICogXHR1c2VyTmFtZTogc3RyaW5nO1xuICogfVxuICpcbiAqIGludGVyZmFjZSBVc2VyV2l0aEZyaWVuZHMge1xuICogXHR1c2VySW5mbzogVXNlcjtcbiAqIFx0dXNlckZyaWVuZHM6IFVzZXJbXTtcbiAqIH1cbiAqXG4gKiBjb25zdCByZXN1bHQ6IFNuYWtlQ2FzZWRQcm9wZXJ0aWVzRGVlcDxVc2VyV2l0aEZyaWVuZHM+ID0ge1xuICogXHR1c2VyX2luZm86IHtcbiAqIFx0XHR1c2VyX2lkOiAxLFxuICogXHRcdHVzZXJfbmFtZTogJ1RvbScsXG4gKiBcdH0sXG4gKiBcdHVzZXJfZnJpZW5kczogW1xuICogXHRcdHtcbiAqIFx0XHRcdHVzZXJfaWQ6IDIsXG4gKiBcdFx0XHR1c2VyX25hbWU6ICdKZXJyeScsXG4gKiBcdFx0fSxcbiAqIFx0XHR7XG4gKiBcdFx0XHR1c2VyX2lkOiAzLFxuICogXHRcdFx0dXNlcl9uYW1lOiAnU3Bpa2UnLFxuICogXHRcdH0sXG4gKiBcdF0sXG4gKiB9O1xuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IENoYW5nZSBjYXNlXG4gKiBAY2F0ZWdvcnkgVGVtcGxhdGUgbGl0ZXJhbFxuICogQGNhdGVnb3J5IE9iamVjdFxuICovXG5leHBvcnQgdHlwZSBTbmFrZUNhc2VkUHJvcGVydGllc0RlZXA8VmFsdWU+ID0gRGVsaW1pdGVyQ2FzZWRQcm9wZXJ0aWVzRGVlcDxWYWx1ZSwgJ18nPjtcbiIsIi8qKlxuICogR2VuZXJpYyB1dGlsaXR5IHRvIHRyYW5zZm9ybSBzbmFrZV9jYXNlIG9iamVjdCBrZXlzIHRvIGNhbWVsQ2FzZSBhdCBydW50aW1lLlxuICogVGhpcyBpcyB0aGUgcnVudGltZSBlcXVpdmFsZW50IG9mIHRoZSBDYW1lbENhc2VkUHJvcGVydGllc0RlZXAgdHlwZSB1dGlsaXR5LlxuICovXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG9iamVjdCBrZXlzIGZyb20gc25ha2VfY2FzZSB0byBjYW1lbENhc2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdHJhbnNmb3JtU25ha2VUb0NhbWVsOiAob2JqOiB1bmtub3duKSA9PiB1bmtub3duO1xuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBvYmplY3Qga2V5cyBmcm9tIGNhbWVsQ2FzZSB0byBzbmFrZV9jYXNlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRyYW5zZm9ybUNhbWVsVG9TbmFrZTogKG9iajogdW5rbm93bikgPT4gdW5rbm93bjtcbiIsImltcG9ydCB7IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzIGVudW0gdmFsdWUuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzIGVudW0gdmFsdWUgb3IgdW5kZWZpbmVkIGlmIHRoZSBzdHJpbmdcbiAqIGRvZXMgbm90IG1hcCB0byBhIHZhbGlkIGVudW1cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3Qgc3RyaW5nVG9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNFbnVtVmFsdWU6IChzdGF0dXM6IHN0cmluZykgPT4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzIHwgdW5kZWZpbmVkO1xuIiwiaW1wb3J0IHsgQ29sb3JNYXBwaW5nIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY29sb3JzQ29uZmlnXCI7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZUdyYXBoUUxDb2xvcnNDb25maWc6IChkYXRhOiB1bmtub3duKSA9PiBDb2xvck1hcHBpbmcgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBGcm9udGVuZENvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZnJvbnRlbmRDb25maWcnO1xuaW1wb3J0IHsgV2lkZ2V0Q29uZmlnLCBQYWdlVmFyaWFudENvbmZpZywgV2lkZ2V0TW91bnRpbmdDb25maWcgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXMnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHM6IChjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQYWdlVmFyaWFudENvbmZpZztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWc6IChjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb25maWdLZXk6IHN0cmluZykgPT4gV2lkZ2V0TW91bnRpbmdDb25maWc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybVdpZGdldENvbmZpZzogKGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGNvbmZpZ0tleTogc3RyaW5nKSA9PiBXaWRnZXRDb25maWc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZzogKGRhdGE6IHVua25vd24pID0+IEZyb250ZW5kQ29uZmlnIHwgdW5kZWZpbmVkO1xuIiwiZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVHcmFwaFFMT3JnSWQ6IChkYXRhOiB1bmtub3duKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIH0gZnJvbSAnLi4vbW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlcic7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB8IHVuZGVmaW5lZDtcbiIsImltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ2FuaXphdGlvbkNvbmZpZyc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZzogKGRhdGE6IHVua25vd24pID0+IE9yZ2FuaXphdGlvbkNvbmZpZyB8IHVuZGVmaW5lZDtcbiIsImltcG9ydCB7IE9yZ0NvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0czogKGRhdGE6IHVua25vd24pID0+IE9yZ0NvbmZpZyB8IHVuZGVmaW5lZDtcbiIsImltcG9ydCB7IFJlc3BvbnNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9pbmRleCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0ZVJlc3BvbnNlOiAoZGF0YTogdW5rbm93bikgPT4gUmVzcG9uc2UgfCB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyBTdWdnZXN0aW9uIH0gZnJvbSAnLi4vYXBpL3N1Z2dlc3Rpb24nO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVTdWdnZXN0aW9uOiAoZGF0YTogdW5rbm93bikgPT4gU3VnZ2VzdGlvbiB8IHVuZGVmaW5lZDtcbiIsImltcG9ydCB7IFVzZXJFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvaW5kZXgnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdmFsaWRhdGVVc2VyRXZlbnQ6IChkYXRhOiB1bmtub3duKSA9PiBVc2VyRXZlbnQgfCB1bmRlZmluZWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBSSxjQUFjLENBQUMsSUFBRzs7OztBQ0F0QixJQUFJLGdCQUFnQixDQUFDLElBQUc7Ozs7QUNBeEIsSUFBVywwQkFBMEIsQ0FBQyxJQUFBOzs7O0FDQXRDLElBQUUscUJBQUE7Q0FBQTtPQUFBO09BQUE7Q0FBQTtBQUNGLElBQUksa0JBQWtCLENBQUMsSUFBSTtBQUMzQixJQUFFLG1CQUFBLENBQUEsSUFBQTtBQUNGLElBQVcsbUJBQW1CO0NBQUM7T0FBSztPQUFBO0NBQUE7QUFDcEMsSUFBVyxvQkFBTTtDQUFBO09BQUE7T0FBQTtDQUFBOzs7O0FDSmpCLElBQUksa0NBQWtDLENBQUMsSUFBSTs7OztBQ0EzQyxJQUFJLHlCQUF5QixDQUFDLElBQUk7Ozs7QUNBbEMsSUFBVyxrQkFBa0IsQ0FBQyxJQUFJOzs7O0FDQWxDLElBQUksd0JBQXdCLENBQUMsSUFBSTs7OztBQ0VqQyxJQUFXLGNBQWMsQ0FBQyxJQUFJO0FBQzlCLElB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