@commercetools-frontend/application-shell 0.0.0-CRAFT-1791-20251006162610

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 (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/application-entry-point-10a5e1a5.esm.js +82 -0
  4. package/dist/application-entry-point-8c4b8e53.cjs.prod.js +86 -0
  5. package/dist/application-entry-point-c87294b0.cjs.dev.js +96 -0
  6. package/dist/box-09bf50e1.cjs.prod.js +30 -0
  7. package/dist/box-4857aa65.cjs.dev.js +30 -0
  8. package/dist/box-9cf180c1.esm.js +17 -0
  9. package/dist/cart-645074db.cjs.prod.js +30 -0
  10. package/dist/cart-b0044279.cjs.dev.js +30 -0
  11. package/dist/cart-bb491ca1.esm.js +17 -0
  12. package/dist/commercetools-frontend-application-shell.cjs.d.ts +2 -0
  13. package/dist/commercetools-frontend-application-shell.cjs.dev.js +214 -0
  14. package/dist/commercetools-frontend-application-shell.cjs.js +7 -0
  15. package/dist/commercetools-frontend-application-shell.cjs.prod.js +214 -0
  16. package/dist/commercetools-frontend-application-shell.esm.js +82 -0
  17. package/dist/connected-square-2d046cb8.cjs.prod.js +30 -0
  18. package/dist/connected-square-a2fea344.cjs.dev.js +30 -0
  19. package/dist/connected-square-fe6a790f.esm.js +17 -0
  20. package/dist/custom-view-dev-host-864a12e2.cjs.dev.js +197 -0
  21. package/dist/custom-view-dev-host-8e2f6aa7.cjs.prod.js +197 -0
  22. package/dist/custom-view-dev-host-d9c410aa.esm.js +186 -0
  23. package/dist/declarations/src/components/application-page-title/application-page-title.d.ts +24 -0
  24. package/dist/declarations/src/components/application-page-title/index.d.ts +1 -0
  25. package/dist/declarations/src/components/application-shell/application-shell.d.ts +45 -0
  26. package/dist/declarations/src/components/application-shell/index.d.ts +1 -0
  27. package/dist/declarations/src/components/application-shell-provider/application-shell-provider.d.ts +17 -0
  28. package/dist/declarations/src/components/application-shell-provider/index.d.ts +1 -0
  29. package/dist/declarations/src/components/application-shell-provider/utils.d.ts +3 -0
  30. package/dist/declarations/src/components/configure-intl-provider/configure-intl-provider.d.ts +12 -0
  31. package/dist/declarations/src/components/configure-intl-provider/index.d.ts +1 -0
  32. package/dist/declarations/src/components/custom-view-shell/custom-view-shell.d.ts +12 -0
  33. package/dist/declarations/src/components/custom-view-shell/index.d.ts +1 -0
  34. package/dist/declarations/src/components/error-apologizer/index.d.ts +5 -0
  35. package/dist/declarations/src/components/fetch-user/fetch-user.d.ts +16 -0
  36. package/dist/declarations/src/components/fetch-user/index.d.ts +1 -0
  37. package/dist/declarations/src/components/inject-reducers/index.d.ts +1 -0
  38. package/dist/declarations/src/components/inject-reducers/inject-reducers.d.ts +13 -0
  39. package/dist/declarations/src/components/redirect-to-login/index.d.ts +5 -0
  40. package/dist/declarations/src/components/redirect-to-logout/index.d.ts +4 -0
  41. package/dist/declarations/src/components/route-catch-all/index.d.ts +2 -0
  42. package/dist/declarations/src/components/setup-flop-flip-provider/index.d.ts +1 -0
  43. package/dist/declarations/src/components/setup-flop-flip-provider/setup-flop-flip-provider.d.ts +17 -0
  44. package/dist/declarations/src/components/suspended-route/index.d.ts +3 -0
  45. package/dist/declarations/src/components/suspended-route/protected-route.d.ts +7 -0
  46. package/dist/declarations/src/components/suspended-route/suspended-protected-route.d.ts +7 -0
  47. package/dist/declarations/src/components/suspended-route/suspended-route.d.ts +10 -0
  48. package/dist/declarations/src/configure-store.d.ts +22 -0
  49. package/dist/declarations/src/export-types.d.ts +8 -0
  50. package/dist/declarations/src/hooks/use-routes-creator/index.d.ts +1 -0
  51. package/dist/declarations/src/hooks/use-routes-creator/use-routes-creator.d.ts +22 -0
  52. package/dist/declarations/src/index.d.ts +33 -0
  53. package/dist/declarations/src/ssr/index.d.ts +2 -0
  54. package/dist/declarations/src/test-utils/custom-views-utils.d.ts +21 -0
  55. package/dist/declarations/src/test-utils/index.d.ts +2 -0
  56. package/dist/declarations/src/test-utils/test-utils.d.ts +87 -0
  57. package/dist/declarations/src/types/generated/mc.d.ts +742 -0
  58. package/dist/declarations/src/utils/get-previous-project-key/get-previous-project-key.d.ts +2 -0
  59. package/dist/declarations/src/utils/get-previous-project-key/index.d.ts +1 -0
  60. package/dist/declarations/src/utils/oidc.d.ts +10 -0
  61. package/dist/declarations/src/utils/setup-global-error-listener/index.d.ts +1 -0
  62. package/dist/declarations/src/utils/setup-global-error-listener/setup-global-error-listener.d.ts +1 -0
  63. package/dist/declarations/src/version.d.ts +2 -0
  64. package/dist/declarations-connectors/dist/commercetools-frontend-application-shell-connectors.cjs.d.ts +2 -0
  65. package/dist/declarations-connectors/src/components/application-context/application-context.d.ts +109 -0
  66. package/dist/declarations-connectors/src/components/application-context/index.d.ts +10 -0
  67. package/dist/declarations-connectors/src/components/application-context/normalizers.d.ts +48 -0
  68. package/dist/declarations-connectors/src/components/custom-view-context/custom-view-context.d.ts +19 -0
  69. package/dist/declarations-connectors/src/components/custom-view-context/index.d.ts +4 -0
  70. package/dist/declarations-connectors/src/components/project-extension-image-regex/index.d.ts +3 -0
  71. package/dist/declarations-connectors/src/components/project-extension-image-regex/project-extension-image-regex.d.ts +37 -0
  72. package/dist/declarations-connectors/src/configure-apollo.d.ts +7 -0
  73. package/dist/declarations-connectors/src/export-types.d.ts +21 -0
  74. package/dist/declarations-connectors/src/hooks/apollo-hooks/apollo-hooks.d.ts +12 -0
  75. package/dist/declarations-connectors/src/hooks/apollo-hooks/index.d.ts +1 -0
  76. package/dist/declarations-connectors/src/hooks/custom-views/use-custom-view-parent-data-refresher.d.ts +5 -0
  77. package/dist/declarations-connectors/src/index.d.ts +12 -0
  78. package/dist/declarations-connectors/src/types/generated/mc.d.ts +742 -0
  79. package/dist/declarations-connectors/src/types/generated/settings.d.ts +2116 -0
  80. package/dist/declarations-connectors/src/utils/apollo-client-runtime-cache.d.ts +4 -0
  81. package/dist/declarations-connectors/src/utils/apollo-context.d.ts +16 -0
  82. package/dist/declarations-connectors/src/utils/get-correlation-id/get-correlation-id.d.ts +3 -0
  83. package/dist/declarations-connectors/src/utils/get-correlation-id/index.d.ts +1 -0
  84. package/dist/declarations-connectors/src/utils/get-mc-api-url/get-mc-api-url.d.ts +3 -0
  85. package/dist/declarations-connectors/src/utils/get-mc-api-url/index.d.ts +1 -0
  86. package/dist/declarations-connectors/src/utils/http-client.d.ts +107 -0
  87. package/dist/declarations-connectors/src/utils/index.d.ts +7 -0
  88. package/dist/declarations-connectors/src/utils/logger.d.ts +10 -0
  89. package/dist/declarations-connectors/src/utils/oidc-storage.d.ts +12 -0
  90. package/dist/declarations-connectors/src/utils/select-project-key-from-url/index.d.ts +1 -0
  91. package/dist/declarations-connectors/src/utils/select-project-key-from-url/select-project-key-from-url.d.ts +1 -0
  92. package/dist/declarations-connectors/src/utils/select-team-id-from-storage/index.d.ts +1 -0
  93. package/dist/declarations-connectors/src/utils/select-team-id-from-storage/select-team-id-from-storage.d.ts +1 -0
  94. package/dist/declarations-connectors/src/utils/select-user-id/index.d.ts +1 -0
  95. package/dist/declarations-connectors/src/utils/select-user-id/select-user-id.d.ts +1 -0
  96. package/dist/declarations-connectors/src/version.d.ts +2 -0
  97. package/dist/error-apologizer-76f087f4.esm.js +39 -0
  98. package/dist/error-apologizer-84dc825c.cjs.prod.js +53 -0
  99. package/dist/error-apologizer-f6793491.cjs.dev.js +53 -0
  100. package/dist/gear-4f7cde98.cjs.prod.js +30 -0
  101. package/dist/gear-ee90ba83.esm.js +17 -0
  102. package/dist/gear-f2668579.cjs.dev.js +30 -0
  103. package/dist/get-mc-origin-8f7a578c.cjs.prod.js +51 -0
  104. package/dist/get-mc-origin-a86dff20.cjs.dev.js +51 -0
  105. package/dist/get-mc-origin-fecfee07.esm.js +44 -0
  106. package/dist/heart-01f01038.cjs.prod.js +30 -0
  107. package/dist/heart-86f780f3.esm.js +17 -0
  108. package/dist/heart-e49dd92a.cjs.dev.js +30 -0
  109. package/dist/index-245e2980.cjs.prod.js +237 -0
  110. package/dist/index-60cd194b.cjs.prod.js +2053 -0
  111. package/dist/index-614accc4.cjs.dev.js +237 -0
  112. package/dist/index-86039df7.esm.js +211 -0
  113. package/dist/index-8637a317.esm.js +2072 -0
  114. package/dist/index-f0f4fbcd.cjs.dev.js +2134 -0
  115. package/dist/list-with-search-027ab8eb.cjs.dev.js +30 -0
  116. package/dist/list-with-search-6462447e.cjs.prod.js +30 -0
  117. package/dist/list-with-search-d2901e34.esm.js +17 -0
  118. package/dist/location-537e0660.cjs.prod.js +32 -0
  119. package/dist/location-c835b8df.cjs.dev.js +32 -0
  120. package/dist/location-f21dbc25.esm.js +30 -0
  121. package/dist/navbar-022383bd.cjs.dev.js +1364 -0
  122. package/dist/navbar-844d350d.esm.js +1332 -0
  123. package/dist/navbar-acc2cd1b.cjs.prod.js +1225 -0
  124. package/dist/oidc-8827f9fe.cjs.dev.js +98 -0
  125. package/dist/oidc-b2520905.esm.js +84 -0
  126. package/dist/oidc-callback-2800b1f0.cjs.prod.js +243 -0
  127. package/dist/oidc-callback-5213e755.cjs.dev.js +246 -0
  128. package/dist/oidc-callback-619f18d9.esm.js +232 -0
  129. package/dist/oidc-d74e6aa2.cjs.prod.js +98 -0
  130. package/dist/paperclip-005ec544.cjs.dev.js +30 -0
  131. package/dist/paperclip-a820ee87.esm.js +17 -0
  132. package/dist/paperclip-fe72a70d.cjs.prod.js +30 -0
  133. package/dist/plugin-81ae1044.cjs.prod.js +30 -0
  134. package/dist/plugin-c7bf9e53.esm.js +17 -0
  135. package/dist/plugin-feb22442.cjs.dev.js +30 -0
  136. package/dist/project-container-22619059.cjs.prod.js +378 -0
  137. package/dist/project-container-96f2d671.cjs.dev.js +378 -0
  138. package/dist/project-container-ef2dfb60.esm.js +357 -0
  139. package/dist/project-expired-8c4cd8a0.cjs.dev.js +137 -0
  140. package/dist/project-expired-9994ed78.cjs.prod.js +137 -0
  141. package/dist/project-expired-dc881501.esm.js +123 -0
  142. package/dist/project-not-found-3933434f.cjs.prod.js +130 -0
  143. package/dist/project-not-found-3a76e8d7.cjs.dev.js +130 -0
  144. package/dist/project-not-found-57a3a216.esm.js +116 -0
  145. package/dist/project-not-initialized-2eebb2c7.esm.js +123 -0
  146. package/dist/project-not-initialized-3cfd0aed.cjs.dev.js +137 -0
  147. package/dist/project-not-initialized-91af2604.cjs.prod.js +137 -0
  148. package/dist/project-suspended-0c98a90e.cjs.dev.js +135 -0
  149. package/dist/project-suspended-dddbda8b.cjs.prod.js +135 -0
  150. package/dist/project-suspended-eeb5f62e.esm.js +121 -0
  151. package/dist/quick-access-1475bad4.cjs.dev.js +1893 -0
  152. package/dist/quick-access-ba70983f.cjs.prod.js +1875 -0
  153. package/dist/quick-access-d2f9b458.esm.js +1865 -0
  154. package/dist/redirect-to-login-12f467b8.cjs.prod.js +117 -0
  155. package/dist/redirect-to-login-2944c890.esm.js +115 -0
  156. package/dist/redirect-to-login-3bee13ba.cjs.dev.js +117 -0
  157. package/dist/redirect-to-logout-4587f4ed.cjs.dev.js +126 -0
  158. package/dist/redirect-to-logout-7bb3eb45.esm.js +113 -0
  159. package/dist/redirect-to-logout-a96985ce.cjs.prod.js +126 -0
  160. package/dist/redirect-to-project-create-9249e554.esm.js +60 -0
  161. package/dist/redirect-to-project-create-e4ff7797.cjs.prod.js +68 -0
  162. package/dist/redirect-to-project-create-f4f01842.cjs.dev.js +68 -0
  163. package/dist/redirector-0c72d0a4.cjs.prod.js +61 -0
  164. package/dist/redirector-72ccfbc2.cjs.dev.js +61 -0
  165. package/dist/redirector-d856975f.esm.js +46 -0
  166. package/dist/requests-in-flight-loader-0594117d.cjs.dev.js +122 -0
  167. package/dist/requests-in-flight-loader-59e8fb86.esm.js +107 -0
  168. package/dist/requests-in-flight-loader-a8288906.cjs.prod.js +122 -0
  169. package/dist/rocket-3372731a.cjs.dev.js +30 -0
  170. package/dist/rocket-bacf24be.esm.js +17 -0
  171. package/dist/rocket-cb99be06.cjs.prod.js +30 -0
  172. package/dist/route-catch-all-7803b1fd.esm.js +42 -0
  173. package/dist/route-catch-all-8e71a93c.cjs.prod.js +44 -0
  174. package/dist/route-catch-all-b979e1fd.cjs.dev.js +44 -0
  175. package/dist/service-page-project-switcher-37faf2fb.cjs.prod.js +37 -0
  176. package/dist/service-page-project-switcher-47296fb1.esm.js +39 -0
  177. package/dist/service-page-project-switcher-6cdff717.cjs.dev.js +45 -0
  178. package/dist/speedometer-26f52e73.cjs.prod.js +30 -0
  179. package/dist/speedometer-4c8e0b9c.esm.js +17 -0
  180. package/dist/speedometer-c1ec5a1d.cjs.dev.js +30 -0
  181. package/dist/star-6b9a91d2.cjs.dev.js +30 -0
  182. package/dist/star-af90a9c6.esm.js +17 -0
  183. package/dist/star-e4902bbb.cjs.prod.js +30 -0
  184. package/dist/tag-multi-1c065f61.cjs.prod.js +30 -0
  185. package/dist/tag-multi-4c2742de.esm.js +17 -0
  186. package/dist/tag-multi-abef3e15.cjs.dev.js +30 -0
  187. package/dist/tree-structure-3ec98cce.cjs.prod.js +30 -0
  188. package/dist/tree-structure-96ab0b7e.cjs.dev.js +30 -0
  189. package/dist/tree-structure-ca0498a0.esm.js +17 -0
  190. package/dist/use-applications-menu-14a5a1f4.cjs.prod.js +172 -0
  191. package/dist/use-applications-menu-1514af11.esm.js +157 -0
  192. package/dist/use-applications-menu-823a2492.cjs.dev.js +172 -0
  193. package/dist/use-is-served-by-proxy-28f19a6f.cjs.dev.js +10 -0
  194. package/dist/use-is-served-by-proxy-480e8de8.cjs.prod.js +10 -0
  195. package/dist/use-is-served-by-proxy-a383da4b.esm.js +8 -0
  196. package/dist/user-filled-26f333b2.cjs.prod.js +30 -0
  197. package/dist/user-filled-34aeebcc.cjs.dev.js +30 -0
  198. package/dist/user-filled-61d8a81b.esm.js +17 -0
  199. package/dist/user-settings-menu-6113cdd3.cjs.dev.js +338 -0
  200. package/dist/user-settings-menu-d75f4958.cjs.prod.js +326 -0
  201. package/dist/user-settings-menu-f98bea89.esm.js +313 -0
  202. package/dist/world-22189397.cjs.prod.js +30 -0
  203. package/dist/world-500baeb2.cjs.dev.js +30 -0
  204. package/dist/world-523efd61.esm.js +17 -0
  205. package/package.json +144 -0
  206. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.d.ts +2 -0
  207. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.dev.js +20 -0
  208. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.js +7 -0
  209. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.prod.js +20 -0
  210. package/ssr/dist/commercetools-frontend-application-shell-ssr.esm.js +4 -0
  211. package/ssr/package.json +4 -0
  212. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.d.ts +2 -0
  213. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.dev.js +554 -0
  214. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.js +7 -0
  215. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.prod.js +554 -0
  216. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.esm.js +502 -0
  217. package/test-utils/package.json +4 -0
@@ -0,0 +1,1865 @@
1
+ import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
2
+ import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
3
+ import _Array$isArray from '@babel/runtime-corejs3/core-js-stable/array/is-array';
4
+ import _JSON$stringify from '@babel/runtime-corejs3/core-js-stable/json/stringify';
5
+ import _forEachInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/for-each';
6
+ import _trimInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/trim';
7
+ import _startsWithInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/starts-with';
8
+ import { useReducer, useRef, useCallback, useState, useEffect } from 'react';
9
+ import { useApolloClient } from '@apollo/client/react';
10
+ import { useFeatureToggles } from '@flopflip/react-broadcast';
11
+ import { oneLineTrim } from 'common-tags';
12
+ import debounce from 'debounce-async';
13
+ import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
14
+ import { useHistory } from 'react-router-dom';
15
+ import { useApplicationContext } from '@commercetools-frontend/application-shell-connectors';
16
+ import { SUPPORT_PORTAL_URL, LOGOUT_REASONS, GRAPHQL_TARGETS, MC_API_PROXY_TARGETS } from '@commercetools-frontend/constants';
17
+ import { hasSomePermissions } from '@commercetools-frontend/permissions';
18
+ import { useAsyncDispatch, actions } from '@commercetools-frontend/sdk';
19
+ import { l as location } from './location-f21dbc25.esm.js';
20
+ import _Object$keys from '@babel/runtime-corejs3/core-js-stable/object/keys';
21
+ import _Object$getOwnPropertySymbols from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
22
+ import _Object$getOwnPropertyDescriptor from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor';
23
+ import _Object$getOwnPropertyDescriptors from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors';
24
+ import _Object$defineProperties from '@babel/runtime-corejs3/core-js-stable/object/define-properties';
25
+ import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object/define-property';
26
+ import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
27
+ import _includesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/includes';
28
+ import _sliceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/slice';
29
+ import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
30
+ import _findIndexInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find-index';
31
+ import { css, keyframes, ClassNames } from '@emotion/react';
32
+ import Fuse from 'fuse.js';
33
+ import last from 'lodash/last';
34
+ import { customProperties, designTokens } from '@commercetools-uikit/design-system';
35
+ import { AngleThinRightIcon, SearchIcon } from '@commercetools-uikit/icons';
36
+ import LoadingSpinner from '@commercetools-uikit/loading-spinner';
37
+ import { jsxs, jsx } from '@emotion/react/jsx-runtime';
38
+ import { B as ButlerContainer, p as pimIndexerStates } from './index-8637a317.esm.js';
39
+ import _Promise from '@babel/runtime-corejs3/core-js-stable/promise';
40
+ import _reduceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/reduce';
41
+ import _findInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find';
42
+ import './index-86039df7.esm.js';
43
+ import '@babel/runtime-corejs3/core-js-stable/object/entries';
44
+ import '@babel/runtime-corejs3/core-js-stable/instance/concat';
45
+ import '@babel/runtime-corejs3/core-js-stable/reflect/has';
46
+ import '@reduxjs/toolkit';
47
+ import 'lodash/mapValues';
48
+ import 'omit-empty-es';
49
+ import 'redux';
50
+ import 'redux-thunk';
51
+ import '@commercetools-frontend/notifications';
52
+ import '@babel/runtime-corejs3/core-js-stable/instance/index-of';
53
+ import '@commercetools-frontend/sentry';
54
+ import '@commercetools-frontend/react-notifications';
55
+ import 'redux-logger';
56
+ import '@emotion/styled/base';
57
+ import '@commercetools-frontend/application-components';
58
+ import '@commercetools-frontend/i18n';
59
+ import './oidc-b2520905.esm.js';
60
+ import '@babel/runtime-corejs3/core-js-stable/url';
61
+ import '@commercetools-uikit/spacings';
62
+ import '@commercetools-uikit/flat-button';
63
+ import '@babel/runtime-corejs3/helpers/objectWithoutProperties';
64
+ import 'memoize-one';
65
+ import 'react-select';
66
+ import '@commercetools-uikit/accessible-hidden';
67
+ import '@commercetools-uikit/select-input';
68
+ import '@commercetools-uikit/text';
69
+ import '@commercetools-frontend/assets/images/ct-logo.svg';
70
+ import '@commercetools-frontend/browser-history';
71
+ import '@commercetools-frontend/l10n';
72
+ import '@babel/runtime-corejs3/core-js-stable/reflect/construct';
73
+ import '@babel/runtime-corejs3/helpers/classCallCheck';
74
+ import '@babel/runtime-corejs3/helpers/createClass';
75
+ import '@babel/runtime-corejs3/helpers/possibleConstructorReturn';
76
+ import '@babel/runtime-corejs3/helpers/getPrototypeOf';
77
+ import '@babel/runtime-corejs3/helpers/inherits';
78
+ import '@babel/runtime-corejs3/core-js-stable/object/from-entries';
79
+ import '@babel/runtime-corejs3/core-js-stable/instance/flags';
80
+ import '@flopflip/combine-adapters';
81
+ import '@flopflip/http-adapter';
82
+ import '@flopflip/launchdarkly-adapter';
83
+ import '@flopflip/types';
84
+ import 'react-redux';
85
+ import '@commercetools-uikit/design-system/materials/resets.css';
86
+ import '@commercetools-frontend/application-config/ssr';
87
+ import '@flopflip/memory-adapter';
88
+ import '@babel/runtime-corejs3/core-js-stable/instance/some';
89
+ import '@commercetools-frontend/actions-global';
90
+
91
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
92
+ var _ref$1 = process.env.NODE_ENV === "production" ? {
93
+ name: "13n9jnb",
94
+ styles: "align-self:center;>*{display:block;}"
95
+ } : {
96
+ name: "1qkkrpz-ButlerCommand",
97
+ styles: "align-self:center;>*{display:block;};label:ButlerCommand;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrRGdCIiwiZmlsZSI6ImJ1dGxlci1jb21tYW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vdXNlRXZlbnRIYW5kbGVyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgQW5nbGVUaGluUmlnaHRJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjb21tYW5kOiBDb21tYW5kO1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgb25DbGljazogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvbk1vdXNlRW50ZXI6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbmNvbnN0IEJ1dGxlckNvbW1hbmQgPSAocHJvcHM6IFByb3BzKSA9PiAoXG4gIDxkaXZcbiAgICBrZXk9e3Byb3BzLmNvbW1hbmQuaWR9XG4gICAgZGF0YS10ZXN0aWQ9e2BxdWljay1hY2Nlc3MtcmVzdWx0KCR7cHJvcHMuY29tbWFuZC5pZH0pYH1cbiAgICBhcmlhLWN1cnJlbnQ9e3Byb3BzLmlzU2VsZWN0ZWQgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgIGNzcz17Y3NzYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBhZGRpbmc6IDAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfTtcbiAgICAgIGhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICR7cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICA/IGBcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvckFjY2VudH07XG4gICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYFxuICAgICAgICA6ICcnfVxuICAgIGB9XG4gICAgb25Nb3VzZUVudGVyPXtwcm9wcy5vbk1vdXNlRW50ZXJ9XG4gICAgb25DbGljaz17cHJvcHMub25DbGlja31cbiAgPlxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBmbGV4OiAxIGF1dG87XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgYH1cbiAgICA+XG4gICAgICB7cHJvcHMuY29tbWFuZC50ZXh0fVxuICAgIDwvZGl2PlxuICAgIHsoKEFycmF5LmlzQXJyYXkocHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcykgJiZcbiAgICAgIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgIHR5cGVvZiBwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzID09PSAnZnVuY3Rpb24nKSAmJiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICA+ICoge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICBgfVxuICAgICAgPlxuICAgICAgICA8QW5nbGVUaGluUmlnaHRJY29uXG4gICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgY29sb3I9e3Byb3BzLmlzU2VsZWN0ZWQgPyAnc3VyZmFjZScgOiAnbmV1dHJhbDYwJ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuQnV0bGVyQ29tbWFuZC5kaXNwbGF5TmFtZSA9ICdCdXRsZXJDb21tYW5kJztcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyQ29tbWFuZDtcbiJdfQ== */",
98
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
99
+ };
100
+ var _ref2 = process.env.NODE_ENV === "production" ? {
101
+ name: "lhzw0z",
102
+ styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis"
103
+ } : {
104
+ name: "zq3ooq-ButlerCommand",
105
+ styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;label:ButlerCommand;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQ2MiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */",
106
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
107
+ };
108
+ const ButlerCommand = props => jsxs("div", {
109
+ "data-testid": `quick-access-result(${props.command.id})`,
110
+ "aria-current": props.isSelected === true ? 'true' : 'false',
111
+ css: /*#__PURE__*/css("display:flex;padding:0 ", customProperties.spacingM, ";height:36px;font-size:16px;font-weight:200;line-height:36px;cursor:default;", props.isSelected === true ? `
112
+ background: ${customProperties.colorAccent};
113
+ color: ${customProperties.colorSurface};
114
+ ` : '', ";" + (process.env.NODE_ENV === "production" ? "" : ";label:ButlerCommand;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQlkiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */"),
115
+ onMouseEnter: props.onMouseEnter,
116
+ onClick: props.onClick,
117
+ children: [jsx("div", {
118
+ css: _ref2,
119
+ children: props.command.text
120
+ }), (_Array$isArray(props.command.subCommands) && props.command.subCommands.length > 0 || typeof props.command.subCommands === 'function') && jsx("div", {
121
+ css: _ref$1,
122
+ children: jsx(AngleThinRightIcon, {
123
+ size: "medium",
124
+ color: props.isSelected ? 'surface' : 'neutral60'
125
+ })
126
+ })]
127
+ }, props.command.id);
128
+ ButlerCommand.displayName = 'ButlerCommand';
129
+
130
+ var messages = defineMessages({
131
+ inputPlacehoder: {
132
+ id: 'QuickAccess.inputPlaceholder',
133
+ defaultMessage: 'Go to...'
134
+ },
135
+ offline: {
136
+ id: 'QuickAccess.offline',
137
+ defaultMessage: 'Offline'
138
+ },
139
+ noResults: {
140
+ id: 'QuickAccess.noResults',
141
+ defaultMessage: 'No results found'
142
+ },
143
+ // create-commands
144
+ setResourceLanguage: {
145
+ id: 'QuickAccess.setResourceLanguage',
146
+ defaultMessage: 'Set Resource Language'
147
+ },
148
+ openDashboard: {
149
+ id: 'QuickAccess.openDashboard',
150
+ defaultMessage: 'Open Dashboard'
151
+ },
152
+ openProducts: {
153
+ id: 'QuickAccess.openProducts',
154
+ defaultMessage: 'Open Products'
155
+ },
156
+ openProductList: {
157
+ id: 'QuickAccess.openProductList',
158
+ defaultMessage: 'Open Product List'
159
+ },
160
+ openProductVariantGeneral: {
161
+ id: 'QuickAccess.openProductVariantGeneral',
162
+ defaultMessage: 'General'
163
+ },
164
+ openProductVariantList: {
165
+ id: 'QuickAccess.openProductVariantList',
166
+ defaultMessage: 'Variants'
167
+ },
168
+ openProductVariantSearch: {
169
+ id: 'QuickAccess.openProductVariantSearch',
170
+ defaultMessage: 'Int. / Ext. Search'
171
+ },
172
+ openModifiedProducts: {
173
+ id: 'QuickAccess.openModifiedProducts',
174
+ defaultMessage: 'Open Review Modified Products'
175
+ },
176
+ openPimSearch: {
177
+ id: 'QuickAccess.openPimSearch',
178
+ defaultMessage: 'Open PIM Search'
179
+ },
180
+ openAddProducts: {
181
+ id: 'QuickAccess.openAddProducts',
182
+ defaultMessage: 'Open Add Products'
183
+ },
184
+ openCategories: {
185
+ id: 'QuickAccess.openCategories',
186
+ defaultMessage: 'Open Categories'
187
+ },
188
+ openCategoriesList: {
189
+ id: 'QuickAccess.openCategoriesList',
190
+ defaultMessage: 'Open Categories List'
191
+ },
192
+ openCategoriesSearch: {
193
+ id: 'QuickAccess.openCategoriesSearch',
194
+ defaultMessage: 'Open Categories Search'
195
+ },
196
+ openAddCategory: {
197
+ id: 'QuickAccess.openAddCategory',
198
+ defaultMessage: 'Open Add Category'
199
+ },
200
+ openCustomers: {
201
+ id: 'QuickAccess.openCustomers',
202
+ defaultMessage: 'Open Customers'
203
+ },
204
+ openCustomersList: {
205
+ id: 'QuickAccess.openCustomersList',
206
+ defaultMessage: 'Open Customers List'
207
+ },
208
+ openAddCustomer: {
209
+ id: 'QuickAccess.openAddCustomer',
210
+ defaultMessage: 'Open Add Customer'
211
+ },
212
+ openCustomerGroupsList: {
213
+ id: 'QuickAccess.openCustomerGroupsList',
214
+ defaultMessage: 'Open Customer Groups List'
215
+ },
216
+ openAddCustomerGroup: {
217
+ id: 'QuickAccess.openAddCustomerGroup',
218
+ defaultMessage: 'Open Add Customer Group'
219
+ },
220
+ openOrders: {
221
+ id: 'QuickAccess.openOrders',
222
+ defaultMessage: 'Open Orders'
223
+ },
224
+ openOrdersList: {
225
+ id: 'QuickAccess.openOrdersList',
226
+ defaultMessage: 'Open Orders List'
227
+ },
228
+ openAddOrder: {
229
+ id: 'QuickAccess.openAddOrder',
230
+ defaultMessage: 'Open Add Order'
231
+ },
232
+ openDiscounts: {
233
+ id: 'QuickAccess.openDiscounts',
234
+ defaultMessage: 'Open Discounts'
235
+ },
236
+ openProductDiscountsList: {
237
+ id: 'QuickAccess.openProductDiscountsList',
238
+ defaultMessage: 'Open Product Discounts List'
239
+ },
240
+ openCartDiscountsList: {
241
+ id: 'QuickAccess.openCartDiscountsList',
242
+ defaultMessage: 'Open Cart Discounts List'
243
+ },
244
+ openDiscountCodesList: {
245
+ id: 'QuickAccess.openDiscountCodesList',
246
+ defaultMessage: 'Open Discount Codes List'
247
+ },
248
+ openAddDiscount: {
249
+ id: 'QuickAccess.openAddDiscount',
250
+ defaultMessage: 'Open Add Discount'
251
+ },
252
+ openAddProductDiscount: {
253
+ id: 'QuickAccess.openAddProductDiscount',
254
+ defaultMessage: 'Open Add Product Discount'
255
+ },
256
+ openAddCartDiscount: {
257
+ id: 'QuickAccess.openAddCartDiscount',
258
+ defaultMessage: 'Open Add Cart Discount'
259
+ },
260
+ openAddDiscountCode: {
261
+ id: 'QuickAccess.openAddDiscountCode',
262
+ defaultMessage: 'Open Add Discount Code'
263
+ },
264
+ openSettings: {
265
+ id: 'QuickAccess.openSettings',
266
+ defaultMessage: 'Open Settings'
267
+ },
268
+ openProjectSettings: {
269
+ id: 'QuickAccess.openProjectSettings',
270
+ defaultMessage: 'Open Project Settings'
271
+ },
272
+ openProjectSettingsInternationalTab: {
273
+ id: 'QuickAccess.openProjectSettingsInternationalTab',
274
+ defaultMessage: 'Open Project Settings • International'
275
+ },
276
+ openProjectSettingsTaxesTab: {
277
+ id: 'QuickAccess.openProjectSettingsTaxesTab',
278
+ defaultMessage: 'Open Project Settings • Taxes'
279
+ },
280
+ openProjectSettingsShippingMethodsTab: {
281
+ id: 'QuickAccess.openProjectSettingsShippingMethodsTab',
282
+ defaultMessage: 'Open Project Settings • Shipping Methods'
283
+ },
284
+ openProjectSettingsChannelsTab: {
285
+ id: 'QuickAccess.openProjectSettingsChannelsTab',
286
+ defaultMessage: 'Open Project Settings • Channels'
287
+ },
288
+ openProjectSettingsStoresTab: {
289
+ id: 'QuickAccess.openProjectSettingsStoresTab',
290
+ defaultMessage: 'Open Project Settings • Stores'
291
+ },
292
+ openProductTypesSettings: {
293
+ id: 'QuickAccess.openProductTypesSettings',
294
+ defaultMessage: 'Open Product Types Settings'
295
+ },
296
+ openDeveloperSettings: {
297
+ id: 'QuickAccess.openDeveloperSettings',
298
+ defaultMessage: 'Open Developer Settings'
299
+ },
300
+ openCustomApplicationsSettings: {
301
+ id: 'QuickAccess.openCustomApplicationsSettings',
302
+ defaultMessage: 'Open Custom Applications Settings'
303
+ },
304
+ openApiClientsList: {
305
+ id: 'QuickAccess.openApiClientsList',
306
+ defaultMessage: 'Open API Clients'
307
+ },
308
+ openAddApiClient: {
309
+ id: 'QuickAccess.openAddApiClient',
310
+ defaultMessage: 'Open Add API Client'
311
+ },
312
+ openSupport: {
313
+ id: 'QuickAccess.openSupport',
314
+ defaultMessage: 'Open Support'
315
+ },
316
+ openMyProfile: {
317
+ id: 'QuickAccess.openMyProfile',
318
+ defaultMessage: 'Open My Profile'
319
+ },
320
+ showPrivacyPolicy: {
321
+ id: 'QuickAccess.showPrivacyPolicy',
322
+ defaultMessage: 'Show Privacy Policy'
323
+ },
324
+ logout: {
325
+ id: 'QuickAccess.logout',
326
+ defaultMessage: 'Logout'
327
+ },
328
+ useProject: {
329
+ id: 'QuickAccess.useProject',
330
+ defaultMessage: 'Switch to project "{projectName}"'
331
+ },
332
+ openManageProjects: {
333
+ id: 'QuickAccess.openManageProject',
334
+ defaultMessage: 'Open Manage Projects'
335
+ },
336
+ openManageOrganizations: {
337
+ id: 'QuickAccess.openManageOrganizations',
338
+ defaultMessage: 'Open Manage Organizations'
339
+ },
340
+ // subcommands
341
+ openVariantById: {
342
+ id: 'QuickAccess.openVariantById',
343
+ defaultMessage: 'Open Variant "{id}" (id)'
344
+ },
345
+ openVariantByKey: {
346
+ id: 'QuickAccess.openVariantByKey',
347
+ defaultMessage: 'Open Variant "{key}" (key)'
348
+ },
349
+ openVariantBySku: {
350
+ id: 'QuickAccess.openVariantBySku',
351
+ defaultMessage: 'Open Variant "{sku}" (sku)'
352
+ },
353
+ showProduct: {
354
+ id: 'QuickAccess.showProduct',
355
+ defaultMessage: 'Show Product "{productName}"'
356
+ },
357
+ showProductVariant: {
358
+ id: 'QuickAccess.showProductVariant',
359
+ defaultMessage: 'Show Product Variant "{variantName}"'
360
+ },
361
+ showProductVariantAttributes: {
362
+ id: 'QuickAccess.showProductVariantAttributes',
363
+ defaultMessage: 'Show Attributes'
364
+ },
365
+ showProductVariantImages: {
366
+ id: 'QuickAccess.showProductVariantImages',
367
+ defaultMessage: 'Show Images'
368
+ },
369
+ showProductVariantPrices: {
370
+ id: 'QuickAccess.showProductVariantPrices',
371
+ defaultMessage: 'Show Prices'
372
+ },
373
+ showProductVariantInventory: {
374
+ id: 'QuickAccess.showProductVariantInventory',
375
+ defaultMessage: 'Show Inventory'
376
+ }
377
+ });
378
+
379
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
380
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context10, _context11; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context10 = ownKeys(Object(t), !0)).call(_context10, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context11 = ownKeys(Object(t))).call(_context11, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
381
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
382
+ const isSelectAllCombo = event => event.key === 'a' && event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
383
+ const isCloseCombo = event => event.key === 'Escape' && !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
384
+ const getPlatform = () => {
385
+ var _context, _context2, _context3, _context4;
386
+ if (_includesInstanceProperty(_context = navigator.appVersion).call(_context, 'Win')) return 'windows';
387
+ if (_includesInstanceProperty(_context2 = navigator.appVersion).call(_context2, 'Mac')) return 'macos';
388
+ if (_includesInstanceProperty(_context3 = navigator.appVersion).call(_context3, 'X11')) return 'unix';
389
+ if (_includesInstanceProperty(_context4 = navigator.appVersion).call(_context4, 'Linux')) return 'linux';
390
+ return null;
391
+ };
392
+ const hasNewWindowModifier = event => {
393
+ const platform = getPlatform();
394
+ switch (platform) {
395
+ case 'macos':
396
+ return event.metaKey;
397
+ default:
398
+ return event.ctrlKey;
399
+ }
400
+ };
401
+ const shakeAnimation = keyframes`
402
+ from,
403
+ to {
404
+ transform: translate3d(0, 0, 0);
405
+ }
406
+
407
+ 14%,
408
+ 42%,
409
+ 70% {
410
+ transform: translate3d(-3px, 0, 0);
411
+ }
412
+
413
+ 28%,
414
+ 56%,
415
+ 84% {
416
+ transform: translate3d(3px, 0, 0);
417
+ }
418
+ `;
419
+ const initialState = {
420
+ hasNetworkError: false,
421
+ isLoading: false,
422
+ searchText: '',
423
+ selectedResult: -1,
424
+ // Used for UX when browsing through history
425
+ enableHistory: true,
426
+ results: [],
427
+ stack: []
428
+ };
429
+ const reducer = function () {
430
+ var _context5;
431
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
432
+ let action = arguments.length > 1 ? arguments[1] : undefined;
433
+ switch (action.type) {
434
+ case 'networkError':
435
+ return _objectSpread(_objectSpread({}, state), {}, {
436
+ hasNetworkError: action.payload
437
+ });
438
+ case 'loading':
439
+ return _objectSpread(_objectSpread({}, state), {}, {
440
+ isLoading: action.payload
441
+ });
442
+ case 'selectedResult':
443
+ return _objectSpread(_objectSpread({}, state), {}, {
444
+ selectedResult: action.payload
445
+ });
446
+ case 'incrementSelectedResult':
447
+ return _objectSpread(_objectSpread({}, state), {}, {
448
+ selectedResult: state.selectedResult === state.results.length - 1 ? 0 : state.selectedResult + 1,
449
+ enableHistory: false
450
+ });
451
+ case 'decrementSelectedResult':
452
+ return _objectSpread(_objectSpread({}, state), {}, {
453
+ selectedResult: state.selectedResult < 1 ? state.results.length - 1 : state.selectedResult - 1,
454
+ enableHistory: false
455
+ });
456
+ case 'pickCommandFromHistory':
457
+ return _objectSpread(_objectSpread({}, state), {}, {
458
+ selectedResult: 0,
459
+ searchText: action.payload.searchText,
460
+ results: action.payload.results,
461
+ stack: []
462
+ // The history does not get changed here, it will be changed along
463
+ // with the regular flow.
464
+ });
465
+ case 'setNextCommands':
466
+ return _objectSpread(_objectSpread({}, state), {}, {
467
+ stack: [...state.stack, {
468
+ searchText: state.searchText,
469
+ results: state.results,
470
+ selectedResult: state.selectedResult
471
+ }],
472
+ selectedResult: 0,
473
+ enableHistory: false,
474
+ results: action.payload.results
475
+ });
476
+ case 'setPrevCommands':
477
+ return _objectSpread(_objectSpread({}, state), {}, {
478
+ searchText: action.payload.searchText,
479
+ results: action.payload.results,
480
+ selectedResult: 0,
481
+ enableHistory: false,
482
+ // omit last item
483
+ stack: _sliceInstanceProperty(_context5 = state.stack).call(_context5, 0, -1)
484
+ });
485
+ case 'searchText':
486
+ return _objectSpread(_objectSpread({}, state), {}, {
487
+ searchText: action.payload,
488
+ // clear network error when search text is cleared, so that users
489
+ // are tempted to retry
490
+ hasNetworkError: action.payload.length > 0 && state.hasNetworkError
491
+ });
492
+ case 'setSearchTextResults':
493
+ return _objectSpread(_objectSpread({}, state), {}, {
494
+ results: action.payload,
495
+ selectedResult: action.payload.length > 0 ? 0 : -1,
496
+ enableHistory: true,
497
+ stack: []
498
+ });
499
+ case 'resetSearchText':
500
+ return _objectSpread(_objectSpread({}, state), {}, {
501
+ searchText: '',
502
+ results: [],
503
+ selectedResult: -1
504
+ });
505
+ case 'resetResultsWhenClosing':
506
+ return _objectSpread(_objectSpread({}, state), {}, {
507
+ selectedResult: -1,
508
+ enableHistory: true
509
+ });
510
+ case 'reset':
511
+ return initialState;
512
+ default:
513
+ return state;
514
+ }
515
+ };
516
+ var _ref = process.env.NODE_ENV === "production" ? {
517
+ name: "zjik7",
518
+ styles: "display:flex"
519
+ } : {
520
+ name: "vnvgom-Butler",
521
+ styles: "display:flex;label:Butler;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOG1Ca0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */",
522
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
523
+ };
524
+ const Butler = props => {
525
+ const intl = useIntl();
526
+ const _useReducer = useReducer(reducer, initialState),
527
+ _useReducer2 = _slicedToArray(_useReducer, 2),
528
+ state = _useReducer2[0],
529
+ dispatch = _useReducer2[1];
530
+ const shouldSelectFieldText = useRef(false);
531
+ const isNewWindowCombo = useRef(false);
532
+ const skipNextSelection = useRef(false);
533
+ const searchContainerRef = useRef(null);
534
+ const searchInputRef = useRef(null);
535
+ const setHasNetworkError = useCallback(() => {
536
+ dispatch({
537
+ type: 'networkError',
538
+ payload: true
539
+ });
540
+ }, []);
541
+ const unsetHasNetworkError = useCallback(() => {
542
+ dispatch({
543
+ type: 'networkError',
544
+ payload: false
545
+ });
546
+ }, []);
547
+ const setIsLoading = useCallback(() => {
548
+ dispatch({
549
+ type: 'loading',
550
+ payload: true
551
+ });
552
+ }, []);
553
+ const unsetIsLoading = useCallback(() => {
554
+ dispatch({
555
+ type: 'loading',
556
+ payload: false
557
+ });
558
+ }, []);
559
+
560
+ // Destructure functions from props to reference them in the hook dependency list
561
+ const searchFromParent = props.search,
562
+ onCloseFromParent = props.onClose,
563
+ executeCommandFromParent = props.executeCommand,
564
+ onHistoryEntriesChangeFromParent = props.onHistoryEntriesChange,
565
+ getNextCommandsFromParent = props.getNextCommands;
566
+ const shake = useCallback(() => {
567
+ if (searchContainerRef.current) {
568
+ searchContainerRef.current.classList.remove(props.classNameShakeAnimation);
569
+ // -> triggering reflow
570
+ // eslint-disable-next-line no-void
571
+ void searchContainerRef.current.offsetWidth;
572
+ searchContainerRef.current.classList.add(props.classNameShakeAnimation);
573
+ }
574
+ }, [props.classNameShakeAnimation]);
575
+ const execute = useCallback((command, meta) => {
576
+ var _context6;
577
+ // Only main entries get added to history, so when a subcommand is executed,
578
+ // we add the main command of it to the history (the top-level command).
579
+ //
580
+ // The key to identify history entries by is always the searchText
581
+ // There will never be two history entries with the same searchText
582
+ const entry = state.stack.length === 0 ?
583
+ // The stack is empty, so we are executing a top-level command
584
+ {
585
+ searchText: state.searchText,
586
+ results: state.results
587
+ } :
588
+ // We are executing a subcommand, so we get the top-level command for it,
589
+ // which is at the bottom of the stack.
590
+ {
591
+ searchText: state.stack[0].searchText,
592
+ results: state.stack[0].results
593
+ };
594
+
595
+ // Add the entry to the history, while excluding any earlier history entry
596
+ // with the same search text. This effectively "moves" that entry to the
597
+ // top of the history (with the most recent results), or appends a new entry
598
+ // when it didn't exist before.
599
+ onHistoryEntriesChangeFromParent([..._filterInstanceProperty(_context6 = props.historyEntries).call(_context6, command => command.searchText !== entry.searchText), entry]);
600
+ dispatch({
601
+ type: 'resetSearchText'
602
+ });
603
+ onCloseFromParent();
604
+ executeCommandFromParent(command, meta);
605
+ }, [executeCommandFromParent, onCloseFromParent, onHistoryEntriesChangeFromParent, props.historyEntries, state.results, state.searchText, state.stack]);
606
+ const handleKeyDown = useCallback(event => {
607
+ // Preventing cursor jumps can only happen in onKeyDown, but not in onKeyUp
608
+ event.persist();
609
+
610
+ // We want to know when the user presses cmd+enter (cmd being a meta key).
611
+ // We are only told about this in keyDown, but not in keyUp, so we need
612
+ // to handle it here
613
+ if (event.key === 'Enter' && hasNewWindowModifier(event)) {
614
+ isNewWindowCombo.current = true;
615
+ return;
616
+ }
617
+
618
+ // Avoid selecting the whole page when user selectes everything with
619
+ // a keyboard shortcut. There is probably a better way to do this though.
620
+ // This prevents the whole page from being selected in case the user
621
+ // 1) opens the search box
622
+ // 2) types into it
623
+ // 3) selects all text using cmd+a
624
+ // 4) closes the search box with esc
625
+ // Without this handling, the whole page would now be selected
626
+ if (isSelectAllCombo(event)) {
627
+ // This stops the browser from selecting anything
628
+ event.preventDefault();
629
+ if (searchInputRef.current) {
630
+ // This selects the text in the search input
631
+ searchInputRef.current.setSelectionRange(0, state.searchText.length);
632
+ }
633
+ return;
634
+ }
635
+
636
+ // avoid interfering with other key combinations using modifier keys
637
+ if (event.ctrlKey || event.altKey || event.shiftKey || event.metaKey) return;
638
+ if (isCloseCombo(event)) return;
639
+
640
+ // skip next mouseEnter to avoid setting selectedResult when cursor just
641
+ // happens to be where the results will pop up
642
+ skipNextSelection.current = true;
643
+ if (event.key === 'ArrowDown') {
644
+ // prevent cursor from jumping to end of text input
645
+ event.preventDefault();
646
+ dispatch({
647
+ type: 'incrementSelectedResult'
648
+ });
649
+ return;
650
+ }
651
+ if (event.key === 'ArrowUp') {
652
+ // browse through history
653
+ if (state.searchText.length === 0 || state.selectedResult < 1 && state.enableHistory) {
654
+ var _context7;
655
+ shouldSelectFieldText.current = true;
656
+ const selectedIndex = state.searchText.length === 0 ?
657
+ // When going back the first step
658
+ -1 :
659
+ // When going back more than one step
660
+ _findIndexInstanceProperty(_context7 = props.historyEntries).call(_context7, command => command.searchText === state.searchText);
661
+ // Pick the previous command from the history
662
+ const prevCommand = selectedIndex === -1 ?
663
+ // previous command on top of the history when going back on
664
+ // first step
665
+ last(props.historyEntries) :
666
+ // previous command is deeper down
667
+ // When the history does not exist (negative index), then
668
+ // this implicitly returns undefined
669
+ props.historyEntries[selectedIndex - 1];
670
+ // Skip when no previous entry exists in the history
671
+ if (!prevCommand) return;
672
+ dispatch({
673
+ type: 'pickCommandFromHistory',
674
+ payload: {
675
+ searchText: prevCommand.searchText,
676
+ results: prevCommand.results
677
+ }
678
+ });
679
+ return;
680
+ }
681
+ // prevent cursor from jumping to beginning of text input
682
+ event.preventDefault();
683
+ dispatch({
684
+ type: 'decrementSelectedResult'
685
+ });
686
+ return;
687
+ }
688
+ if (state.selectedResult > -1) {
689
+ if (event.key === 'ArrowRight') {
690
+ const command = state.results[state.selectedResult];
691
+ const searchText = state.searchText;
692
+ const isCursorAtEnd = searchInputRef.current && state.searchText.length === searchInputRef.current.selectionStart;
693
+ const isEverythingSelected = searchInputRef.current && searchInputRef.current.selectionStart === 0 && state.searchText.length === searchInputRef.current.selectionEnd;
694
+
695
+ // only allow diving in when cursor is at end of input or when
696
+ // the complete text is selected (when browsing through history)
697
+ if (!isCursorAtEnd && !isEverythingSelected) return;
698
+ unsetHasNetworkError();
699
+
700
+ // NOTE: since we need to fetch the "next command", which is an async operation,
701
+ // we use a IIFE to process that and eventually update the state.
702
+ (async () => {
703
+ if (command) {
704
+ const nextCommands = await getNextCommandsFromParent(command);
705
+ // avoid moving cursor when there are sub-options
706
+ if (nextCommands.length > 0) {
707
+ // Ensure the search text has not changed while we were loading
708
+ // the next results, otherwise we'd interrupt the user.
709
+ // Throw away the results in case the search text has changed.
710
+ if (state.searchText === searchText) {
711
+ dispatch({
712
+ type: 'setNextCommands',
713
+ payload: {
714
+ results: nextCommands
715
+ }
716
+ });
717
+ }
718
+ return;
719
+ }
720
+ }
721
+ shake();
722
+ })();
723
+ return;
724
+ }
725
+ if (event.key === 'ArrowLeft') {
726
+ // go left in stack
727
+ const prevCommand = last(state.stack);
728
+
729
+ // do nothing when we can't go left anymore
730
+ if (!prevCommand) return;
731
+
732
+ // prevent cursor from jumping a char to the left in text input
733
+ event.preventDefault();
734
+ dispatch({
735
+ type: 'setPrevCommands',
736
+ payload: {
737
+ searchText: prevCommand.searchText,
738
+ results: prevCommand.results
739
+ }
740
+ });
741
+ return;
742
+ }
743
+ }
744
+ }, [getNextCommandsFromParent, props.historyEntries, shake, state, unsetHasNetworkError]);
745
+ const handleKeyUp = useCallback(event => {
746
+ // setting the selection can only happen in onKeyUp
747
+ if (shouldSelectFieldText.current) {
748
+ const input = event.target;
749
+ input.focus();
750
+ input.select();
751
+ shouldSelectFieldText.current = false;
752
+ }
753
+ if (event.key !== 'Enter' && !isNewWindowCombo.current) return true;
754
+
755
+ // User just triggered the search
756
+ if (state.selectedResult === -1) return true;
757
+
758
+ // User had something selected and wants to go there
759
+ execute(state.results[state.selectedResult], {
760
+ openInNewTab: isNewWindowCombo.current
761
+ });
762
+ isNewWindowCombo.current = false;
763
+ return true;
764
+ }, [execute, state.results, state.selectedResult]);
765
+ const handleChange = useCallback(event => {
766
+ const searchText = event.target.value;
767
+ if (_trimInstanceProperty(searchText).call(searchText).length === 0) {
768
+ dispatch({
769
+ type: 'reset'
770
+ });
771
+ return;
772
+ }
773
+ dispatch({
774
+ type: 'searchText',
775
+ payload: searchText
776
+ });
777
+
778
+ // A search via network is only triggered when there
779
+ // are more than three characters. So no false loading
780
+ // indication is given.
781
+ if (_trimInstanceProperty(searchText).call(searchText).length > 3) {
782
+ setIsLoading();
783
+ }
784
+ searchFromParent(searchText).then(asyncResults => {
785
+ var _context8, _context9;
786
+ unsetHasNetworkError();
787
+ unsetIsLoading();
788
+ const fuse = new Fuse(asyncResults, {
789
+ keys: [{
790
+ name: 'text',
791
+ weight: 0.6
792
+ }, {
793
+ name: 'keywords',
794
+ weight: 0.4
795
+ }],
796
+ minMatchCharLength: 2,
797
+ includeScore: true
798
+ });
799
+ const searchResults = _sliceInstanceProperty(_context8 = _filterInstanceProperty(_context9 = fuse.search(searchText)
800
+ // Filter out results with a matching score over 0.75
801
+ ).call(_context9, result => result.score ? result.score < 0.75 : false)
802
+ // Keep a maximal of 9 results
803
+ ).call(_context8, 0, 9);
804
+ dispatch({
805
+ type: 'setSearchTextResults',
806
+ payload: _mapInstanceProperty(searchResults).call(searchResults, result => result.item)
807
+ });
808
+ }, error => {
809
+ // eslint-disable-next-line no-console
810
+ if (process.env.NODE_ENV !== 'production') console.error(error);
811
+ unsetIsLoading();
812
+ setHasNetworkError();
813
+ });
814
+ }, [searchFromParent, setHasNetworkError, setIsLoading, unsetHasNetworkError, unsetIsLoading]);
815
+ const handleContainerClick = useCallback(() => {
816
+ dispatch({
817
+ type: 'resetResultsWhenClosing'
818
+ });
819
+ onCloseFromParent();
820
+ }, [onCloseFromParent]);
821
+ const createCommandMouseEnterHandler = useCallback(index => () => {
822
+ // In case the cursor happened to be in a location where a
823
+ // result would appear, it would trigger onMouseEnter and the
824
+ // result would be selected immediately. This is not something
825
+ // a user would expect, hence we prevent it from happening.
826
+ // The user has to move the cursor to an option explicitly for
827
+ // it to become active. However, the user can always click and
828
+ // that action will be triggered.
829
+ if (skipNextSelection.current) {
830
+ skipNextSelection.current = false;
831
+ return;
832
+ }
833
+
834
+ // sets the selected result, mainly for the hover effect
835
+ dispatch({
836
+ type: 'selectedResult',
837
+ payload: index
838
+ });
839
+ }, []);
840
+ const createCommandClickHandler = useCallback(command => event => {
841
+ execute(command, {
842
+ openInNewTab: hasNewWindowModifier(event)
843
+ });
844
+ }, [execute]);
845
+ return jsx(ButlerContainer, {
846
+ onClick: handleContainerClick,
847
+ "data-testid": "quick-access",
848
+ tabIndex: -1,
849
+ children: jsxs("div", {
850
+ ref: searchContainerRef,
851
+ css: /*#__PURE__*/css("background-color:", designTokens.colorSurface, ";border:0;border-radius:", designTokens.borderRadius4, ";min-height:40px;z-index:20002;width:400px;margin:40px auto;overflow:hidden;-webkit-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);-moz-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);padding-bottom:", state.hasNetworkError ? '0' : designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbWxCZ0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
852
+ onClick: event => {
853
+ // Avoid closing when the searchContainer itself is clicked
854
+ // If we don't do this, then the overlay will close when e.g.
855
+ // the search input is clicked.
856
+ event.stopPropagation();
857
+ event.preventDefault();
858
+ },
859
+ children: [jsxs("div", {
860
+ css: _ref,
861
+ children: [jsx("label", {
862
+ htmlFor: "quick-access-search-input",
863
+ css: /*#__PURE__*/css("align-self:center;padding-left:", designTokens.spacingM, ";margin-top:", designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb25Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
864
+ children: jsx(SearchIcon, {
865
+ color: "neutral60"
866
+ })
867
+ }), jsx("input", {
868
+ id: "quick-access-search-input",
869
+ ref: searchInputRef,
870
+ placeholder: intl.formatMessage(messages.inputPlacehoder),
871
+ type: "text",
872
+ css: /*#__PURE__*/css("width:100%;border:0;outline:0;font-size:22px;font-weight:300;padding:", designTokens.spacingM, " ", designTokens.spacingM, " ", designTokens.spacingS, " ", designTokens.spacingS, ";&::placeholder{color:", designTokens.colorNeutral60, ";}" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaW9Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
873
+ value: state.searchText,
874
+ onChange: handleChange,
875
+ onKeyDown: handleKeyDown,
876
+ onKeyUp: handleKeyUp,
877
+ autoFocus: true,
878
+ autoComplete: "off",
879
+ "data-testid": "quick-access-search-input"
880
+ }), state.isLoading && jsx("div", {
881
+ css: /*#__PURE__*/css("align-self:center;margin-top:", designTokens.spacingS, ";margin-right:", designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd3BCc0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
882
+ children: jsx(LoadingSpinner, {})
883
+ })]
884
+ }), ((_context0, _context1) => {
885
+ if (state.hasNetworkError) return jsx("div", {
886
+ css: /*#__PURE__*/css("overflow:hidden;white-space:nowrap;cursor:default;background:", designTokens.colorError, ";text-align:center;text-transform:uppercase;color:", designTokens.colorSurface, ";font-size:", designTokens.fontSize20, ";padding:", designTokens.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc3FCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
887
+ children: jsx(FormattedMessage, _objectSpread({}, messages.offline))
888
+ });
889
+ if (state.results.length === 0 && _trimInstanceProperty(_context0 = state.searchText).call(_context0).length > 0) return jsx("div", {
890
+ css: /*#__PURE__*/css("overflow:hidden;white-space:nowrap;cursor:default;background:", designTokens.colorNeutral, ";color:", designTokens.colorSolid, ";text-align:center;text-transform:uppercase;font-size:", designTokens.fontSize20, ";padding:", designTokens.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeXJCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
891
+ children: jsx(FormattedMessage, _objectSpread({}, messages.noResults))
892
+ });
893
+ return _mapInstanceProperty(_context1 = state.results).call(_context1, (command, index) => jsx(ButlerCommand, {
894
+ command: command,
895
+ isSelected: state.selectedResult === index,
896
+ onMouseEnter: createCommandMouseEnterHandler(index),
897
+ onClick: createCommandClickHandler(command)
898
+ }, command.id));
899
+ })()]
900
+ })
901
+ });
902
+ };
903
+ Butler.displayName = 'Butler';
904
+ const ButlerWithAnimation = props => jsx(ClassNames, {
905
+ children: _ref2 => {
906
+ let css = _ref2.css;
907
+ return jsx(Butler, _objectSpread(_objectSpread({}, props), {}, {
908
+ classNameShakeAnimation: css`
909
+ animation-duration: 0.45s;
910
+ animation-fill-mode: both;
911
+ animation-name: ${shakeAnimation};
912
+ `
913
+ }));
914
+ }
915
+ });
916
+
917
+ // eslint-disable-next-line import/prefer-default-export
918
+
919
+ const permissions = {
920
+ ViewOrders: 'ViewOrders',
921
+ ManageOrders: 'ManageOrders',
922
+ ViewProducts: 'ViewProducts',
923
+ ManageProducts: 'ManageProducts',
924
+ ViewCategories: 'ViewCategories',
925
+ ManageCategories: 'ManageCategories',
926
+ ViewCustomers: 'ViewCustomers',
927
+ ManageCustomers: 'ManageCustomers',
928
+ ViewCustomerGroups: 'ViewCustomerGroups',
929
+ ManageCustomerGroups: 'ManageCustomerGroups',
930
+ ViewProductDiscounts: 'ViewProductDiscounts',
931
+ ManageProductDiscounts: 'ManageProductDiscounts',
932
+ ViewDiscountCodes: 'ViewDiscountCodes',
933
+ ManageDiscountCodes: 'ManageDiscountCodes',
934
+ ViewCartDiscounts: 'ViewCartDiscounts',
935
+ ManageCartDiscounts: 'ManageCartDiscounts',
936
+ ViewProjectSettings: 'ViewProjectSettings',
937
+ ManageProjectSettings: 'ManageProjectSettings',
938
+ ViewDeveloperSettings: 'ViewDeveloperSettings',
939
+ ManageDeveloperSettings: 'ManageDeveloperSettings',
940
+ ViewProductTypes: 'ViewProductTypes',
941
+ ManageProductTypes: 'ManageProductTypes'
942
+ };
943
+
944
+ const actionTypes = {
945
+ go: 'go'
946
+ };
947
+
948
+ function nonNullable(value) {
949
+ return value !== null && value !== undefined && typeof value !== 'boolean';
950
+ }
951
+ const createCommands = _ref => {
952
+ var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context0, _context11;
953
+ let intl = _ref.intl,
954
+ applicationContext = _ref.applicationContext,
955
+ featureToggles = _ref.featureToggles,
956
+ changeProjectDataLocale = _ref.changeProjectDataLocale;
957
+ return _filterInstanceProperty(_context = [applicationContext.project && applicationContext.permissions && featureToggles.canViewDashboard && hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
958
+ id: 'go/dashboard',
959
+ text: intl.formatMessage(messages.openDashboard),
960
+ keywords: ['Go to Dashboard'],
961
+ action: {
962
+ type: actionTypes.go,
963
+ to: `/${applicationContext.project.key}/dashboard`
964
+ }
965
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
966
+ id: 'go/products',
967
+ text: intl.formatMessage(messages.openProducts),
968
+ keywords: ['Go to Products'],
969
+ action: {
970
+ type: actionTypes.go,
971
+ to: `/${applicationContext.project.key}/products`
972
+ },
973
+ subCommands: _filterInstanceProperty(_context2 = [hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
974
+ id: 'go/products/list',
975
+ text: intl.formatMessage(messages.openProductList),
976
+ action: {
977
+ type: actionTypes.go,
978
+ to: `/${applicationContext.project.key}/products`
979
+ }
980
+ }, hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
981
+ id: 'go/products/modified',
982
+ text: intl.formatMessage(messages.openModifiedProducts),
983
+ action: {
984
+ type: actionTypes.go,
985
+ to: `/${applicationContext.project.key}/products/modified`
986
+ }
987
+ }, hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && featureToggles.pimSearch && {
988
+ id: 'go/products/pim-search',
989
+ text: intl.formatMessage(messages.openPimSearch),
990
+ action: {
991
+ type: actionTypes.go,
992
+ to: `/${applicationContext.project.key}/products`
993
+ }
994
+ }, hasSomePermissions([permissions.ManageProducts], applicationContext.permissions) && {
995
+ id: 'go/products/add',
996
+ text: intl.formatMessage(messages.openAddProducts),
997
+ action: {
998
+ type: actionTypes.go,
999
+ to: `/${applicationContext.project.key}/products/new`
1000
+ }
1001
+ }]).call(_context2, nonNullable)
1002
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1003
+ id: 'go/categories',
1004
+ text: intl.formatMessage(messages.openCategories),
1005
+ keywords: ['Go to Categories'],
1006
+ action: {
1007
+ type: actionTypes.go,
1008
+ to: `/${applicationContext.project.key}/categories`
1009
+ },
1010
+ subCommands: _filterInstanceProperty(_context3 = [hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1011
+ id: 'go/categories/list',
1012
+ text: intl.formatMessage(messages.openCategoriesList),
1013
+ action: {
1014
+ type: actionTypes.go,
1015
+ to: `/${applicationContext.project.key}/categories?mode=list`
1016
+ }
1017
+ }, hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1018
+ id: 'go/categories/search',
1019
+ text: intl.formatMessage(messages.openCategoriesSearch),
1020
+ action: {
1021
+ type: actionTypes.go,
1022
+ to: `/${applicationContext.project.key}/categories?mode=search`
1023
+ }
1024
+ }, hasSomePermissions([permissions.ManageCategories], applicationContext.permissions) && {
1025
+ id: 'go/categories/add',
1026
+ text: intl.formatMessage(messages.openAddCategory),
1027
+ action: {
1028
+ type: actionTypes.go,
1029
+ to: `/${applicationContext.project.key}/categories/new`
1030
+ }
1031
+ }]).call(_context3, nonNullable)
1032
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewCustomers, permissions.ViewCustomerGroups], applicationContext.permissions) && {
1033
+ id: 'go/customers',
1034
+ text: intl.formatMessage(messages.openCustomers),
1035
+ keywords: ['Go to Customers'],
1036
+ action: {
1037
+ type: actionTypes.go,
1038
+ to: `/${applicationContext.project.key}/customers`
1039
+ },
1040
+ subCommands: _filterInstanceProperty(_context4 = [hasSomePermissions([permissions.ViewCustomers], applicationContext.permissions) && {
1041
+ id: 'go/customers/list',
1042
+ text: intl.formatMessage(messages.openCustomersList),
1043
+ action: {
1044
+ type: actionTypes.go,
1045
+ to: `/${applicationContext.project.key}/customers`
1046
+ }
1047
+ }, hasSomePermissions([permissions.ManageCustomers], applicationContext.permissions) && {
1048
+ id: 'go/customers/new',
1049
+ text: intl.formatMessage(messages.openAddCustomer),
1050
+ action: {
1051
+ type: actionTypes.go,
1052
+ to: `/${applicationContext.project.key}/customers/new`
1053
+ }
1054
+ }, hasSomePermissions([permissions.ViewCustomerGroups], applicationContext.permissions) && {
1055
+ id: 'go/customer/customer-groups',
1056
+ text: intl.formatMessage(messages.openCustomerGroupsList),
1057
+ action: {
1058
+ type: actionTypes.go,
1059
+ to: `/${applicationContext.project.key}/customers/customer-groups`
1060
+ }
1061
+ }, hasSomePermissions([permissions.ManageCustomerGroups], applicationContext.permissions) && {
1062
+ id: 'go/customers/customer-groups/add',
1063
+ text: intl.formatMessage(messages.openAddCustomerGroup),
1064
+ action: {
1065
+ type: actionTypes.go,
1066
+ to: `/${applicationContext.project.key}/customers/customer-groups/new`
1067
+ }
1068
+ }]).call(_context4, nonNullable)
1069
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1070
+ id: 'go/orders',
1071
+ text: intl.formatMessage(messages.openOrders),
1072
+ keywords: ['Go to Orders'],
1073
+ action: {
1074
+ type: actionTypes.go,
1075
+ to: `/${applicationContext.project.key}/orders`
1076
+ },
1077
+ subCommands: _filterInstanceProperty(_context5 = [hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1078
+ id: 'go/orders/list',
1079
+ text: intl.formatMessage(messages.openOrdersList),
1080
+ action: {
1081
+ type: actionTypes.go,
1082
+ to: `/${applicationContext.project.key}/orders`
1083
+ }
1084
+ }, hasSomePermissions([permissions.ManageOrders], applicationContext.permissions) && {
1085
+ id: 'go/orders/add',
1086
+ text: intl.formatMessage(messages.openAddOrder),
1087
+ action: {
1088
+ type: actionTypes.go,
1089
+ to: `/${applicationContext.project.key}/orders/new`
1090
+ }
1091
+ }]).call(_context5, nonNullable)
1092
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewDiscountCodes, permissions.ViewProductDiscounts, permissions.ViewCartDiscounts], applicationContext.permissions) && {
1093
+ id: 'go/discounts',
1094
+ text: intl.formatMessage(messages.openDiscounts),
1095
+ keywords: ['Go to Discounts'],
1096
+ action: {
1097
+ type: actionTypes.go,
1098
+ to: `/${applicationContext.project.key}/discounts`
1099
+ },
1100
+ subCommands: _filterInstanceProperty(_context6 = [hasSomePermissions([permissions.ViewProductDiscounts], applicationContext.permissions) && {
1101
+ id: 'go/discounts/products/list',
1102
+ text: intl.formatMessage(messages.openProductDiscountsList),
1103
+ action: {
1104
+ type: actionTypes.go,
1105
+ to: `/${applicationContext.project.key}/discounts/products`
1106
+ }
1107
+ }, hasSomePermissions([permissions.ViewCartDiscounts], applicationContext.permissions) && {
1108
+ id: 'go/discounts/carts/list',
1109
+ text: intl.formatMessage(messages.openCartDiscountsList),
1110
+ action: {
1111
+ type: actionTypes.go,
1112
+ to: `/${applicationContext.project.key}/discounts/carts`
1113
+ }
1114
+ }, hasSomePermissions([permissions.ViewDiscountCodes], applicationContext.permissions) && {
1115
+ id: 'go/discounts/codes/list',
1116
+ text: intl.formatMessage(messages.openDiscountCodesList),
1117
+ action: {
1118
+ type: actionTypes.go,
1119
+ to: `/${applicationContext.project.key}/discounts/codes`
1120
+ }
1121
+ }, hasSomePermissions([permissions.ManageProductDiscounts, permissions.ManageDiscountCodes, permissions.ManageCartDiscounts], applicationContext.permissions) && {
1122
+ id: 'go/discounts/add',
1123
+ text: intl.formatMessage(messages.openAddDiscount),
1124
+ action: {
1125
+ type: actionTypes.go,
1126
+ to: `/${applicationContext.project.key}/discounts/new`
1127
+ },
1128
+ subCommands: _filterInstanceProperty(_context7 = [hasSomePermissions([permissions.ManageProductDiscounts], applicationContext.permissions) && {
1129
+ id: 'go/discounts/product/add',
1130
+ text: intl.formatMessage(messages.openAddProductDiscount),
1131
+ action: {
1132
+ type: actionTypes.go,
1133
+ to: `/${applicationContext.project.key}/discounts/products/new`
1134
+ }
1135
+ }, hasSomePermissions([permissions.ManageCartDiscounts], applicationContext.permissions) && {
1136
+ id: 'go/discounts/cart/add',
1137
+ text: intl.formatMessage(messages.openAddCartDiscount),
1138
+ action: {
1139
+ type: actionTypes.go,
1140
+ to: `/${applicationContext.project.key}/discounts/carts/new`
1141
+ }
1142
+ }, hasSomePermissions([permissions.ManageDiscountCodes], applicationContext.permissions) && {
1143
+ id: 'go/discounts/code/add',
1144
+ text: intl.formatMessage(messages.openAddCartDiscount),
1145
+ action: {
1146
+ type: actionTypes.go,
1147
+ to: `/${applicationContext.project.key}/discounts/codes/new`
1148
+ }
1149
+ }]).call(_context7, nonNullable)
1150
+ }]).call(_context6, nonNullable)
1151
+ }, applicationContext.project && applicationContext.permissions && hasSomePermissions([permissions.ViewProjectSettings, permissions.ViewDeveloperSettings, permissions.ViewProductTypes], applicationContext.permissions) && {
1152
+ id: 'go/settings',
1153
+ text: intl.formatMessage(messages.openSettings),
1154
+ keywords: ['Go to Settings'],
1155
+ action: {
1156
+ type: actionTypes.go,
1157
+ to: `/${applicationContext.project.key}/settings/project`
1158
+ },
1159
+ subCommands: _filterInstanceProperty(_context8 = [hasSomePermissions([permissions.ViewProjectSettings, permissions.ManageProjectSettings], applicationContext.permissions) && {
1160
+ id: 'go/settings/project',
1161
+ text: intl.formatMessage(messages.openProjectSettings),
1162
+ action: {
1163
+ type: actionTypes.go,
1164
+ to: `/${applicationContext.project.key}/settings/project`
1165
+ },
1166
+ subCommands: _filterInstanceProperty(_context9 = [{
1167
+ id: 'go/settings/project/international',
1168
+ text: intl.formatMessage(messages.openProjectSettingsInternationalTab),
1169
+ action: {
1170
+ type: actionTypes.go,
1171
+ to: `/${applicationContext.project.key}/settings/project/international`
1172
+ }
1173
+ }, {
1174
+ id: 'go/settings/project/taxes',
1175
+ text: intl.formatMessage(messages.openProjectSettingsTaxesTab),
1176
+ action: {
1177
+ type: actionTypes.go,
1178
+ to: `/${applicationContext.project.key}/settings/project/taxes`
1179
+ }
1180
+ }, {
1181
+ id: 'go/settings/project/shipping-methods',
1182
+ text: intl.formatMessage(messages.openProjectSettingsShippingMethodsTab),
1183
+ action: {
1184
+ type: actionTypes.go,
1185
+ to: `/${applicationContext.project.key}/settings/project/shipping-methods`
1186
+ }
1187
+ }, {
1188
+ id: 'go/settings/project/channels',
1189
+ text: intl.formatMessage(messages.openProjectSettingsChannelsTab),
1190
+ action: {
1191
+ type: actionTypes.go,
1192
+ to: `/${applicationContext.project.key}/settings/project/channels`
1193
+ }
1194
+ }, {
1195
+ id: 'go/settings/project/stores',
1196
+ text: intl.formatMessage(messages.openProjectSettingsStoresTab),
1197
+ action: {
1198
+ type: actionTypes.go,
1199
+ to: `/${applicationContext.project.key}/settings/project/stores`
1200
+ }
1201
+ }]).call(_context9, nonNullable)
1202
+ }, hasSomePermissions([permissions.ViewProductTypes], applicationContext.permissions) && {
1203
+ id: 'go/settings/product-types',
1204
+ text: intl.formatMessage(messages.openProductTypesSettings),
1205
+ action: {
1206
+ type: actionTypes.go,
1207
+ to: `/${applicationContext.project.key}/settings/product-types`
1208
+ }
1209
+ }, hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1210
+ id: 'go/settings/developer',
1211
+ text: intl.formatMessage(messages.openDeveloperSettings),
1212
+ action: {
1213
+ type: actionTypes.go,
1214
+ to: `/${applicationContext.project.key}/settings/developer`
1215
+ },
1216
+ subCommands: _filterInstanceProperty(_context0 = [hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1217
+ id: 'go/settings/developer/api-clients/list',
1218
+ text: intl.formatMessage(messages.openApiClientsList),
1219
+ action: {
1220
+ type: actionTypes.go,
1221
+ to: `/${applicationContext.project.key}/settings/developer/api-clients`
1222
+ }
1223
+ }, hasSomePermissions([permissions.ManageDeveloperSettings], applicationContext.permissions) && {
1224
+ id: 'go/settings/developer/api-clients/add',
1225
+ text: intl.formatMessage(messages.openAddApiClient),
1226
+ action: {
1227
+ type: actionTypes.go,
1228
+ to: `/${applicationContext.project.key}/settings/developer/api-clients/new`
1229
+ }
1230
+ }]).call(_context0, nonNullable)
1231
+ }, featureToggles.customApplications && hasSomePermissions([permissions.ManageProjectSettings], applicationContext.permissions) && {
1232
+ id: 'go/settings/custom-applications',
1233
+ text: intl.formatMessage(messages.openCustomApplicationsSettings),
1234
+ action: {
1235
+ type: actionTypes.go,
1236
+ to: `/${applicationContext.project.key}/settings/custom-applications`
1237
+ }
1238
+ }]).call(_context8, nonNullable)
1239
+ }, applicationContext.project && applicationContext.project.languages && applicationContext.project.languages.length > 1 && {
1240
+ id: 'action/set-resource-language',
1241
+ text: intl.formatMessage(messages.setResourceLanguage),
1242
+ keywords: ['set resource locale', 'set project data language', 'set project data locale'],
1243
+ action: () => void 0,
1244
+ // We would know these statically, but we define them here as we don't
1245
+ // want to include them in the top-level search results
1246
+ subCommands: () => {
1247
+ var _context1, _context10;
1248
+ return _Promise.resolve(_filterInstanceProperty(_context1 = _mapInstanceProperty(_context10 = applicationContext.project ? applicationContext.project.languages : []).call(_context10, language => changeProjectDataLocale && {
1249
+ id: `action/set-resource-language/${language}`,
1250
+ text: oneLineTrim`
1251
+ ${language}
1252
+ ${language === applicationContext.dataLocale ? ' (active)' : ''}
1253
+ `,
1254
+ action: () => {
1255
+ changeProjectDataLocale(language);
1256
+
1257
+ // We reload, since ProjectDataLocale is written in a way where
1258
+ // only the tree under the parent container reloads, but
1259
+ // not all of them reload.
1260
+ // So this action would seem like it had not effect, unless we
1261
+ // reload
1262
+ location.reload();
1263
+ }
1264
+ })).call(_context1, nonNullable));
1265
+ }
1266
+ }, {
1267
+ id: 'go/support',
1268
+ text: intl.formatMessage(messages.openSupport),
1269
+ keywords: ['Go to support'],
1270
+ action: {
1271
+ type: actionTypes.go,
1272
+ to: SUPPORT_PORTAL_URL
1273
+ }
1274
+ }, {
1275
+ id: 'go/account-profile',
1276
+ text: intl.formatMessage(messages.openMyProfile),
1277
+ keywords: ['Go to user account', 'Go to profile', 'Open profile'],
1278
+ action: {
1279
+ type: actionTypes.go,
1280
+ to: `/account/profile`
1281
+ }
1282
+ }, {
1283
+ id: 'go/privacy-policy',
1284
+ text: intl.formatMessage(messages.showPrivacyPolicy),
1285
+ keywords: ['Open Privacy Policy'],
1286
+ action: {
1287
+ type: actionTypes.go,
1288
+ to: 'https://commercetools.com/privacy#suppliers'
1289
+ }
1290
+ }, {
1291
+ id: 'go/logout',
1292
+ text: intl.formatMessage(messages.logout),
1293
+ keywords: ['Sign out'],
1294
+ action: {
1295
+ type: actionTypes.go,
1296
+ to: `/logout?reason=${LOGOUT_REASONS.USER}`
1297
+ }
1298
+ }, {
1299
+ id: 'go/manage-projects',
1300
+ text: intl.formatMessage(messages.openManageProjects),
1301
+ keywords: ['Go to manage projects', 'Go to projects', 'Open projects list'],
1302
+ action: {
1303
+ type: actionTypes.go,
1304
+ to: `/account/projects`
1305
+ }
1306
+ }, {
1307
+ id: 'go/manage-organizations',
1308
+ text: intl.formatMessage(messages.openManageOrganizations),
1309
+ keywords: ['Go to manage organizations', 'Go to organizations', 'Open organizations list'],
1310
+ action: {
1311
+ type: actionTypes.go,
1312
+ to: `/account/organizations`
1313
+ }
1314
+ }, ...(applicationContext.user ? _mapInstanceProperty(_context11 = applicationContext.user.projects.results).call(_context11, userProject => ({
1315
+ id: `go/project(${userProject.key})`,
1316
+ text: intl.formatMessage(messages.useProject, {
1317
+ projectName: userProject.name
1318
+ }),
1319
+ keywords: [userProject.key],
1320
+ action: () => {
1321
+ // Switching projects needs a full redirect so that
1322
+ // the feature flags are reloaded (and things caches get destroyed)
1323
+ window.location.href = `/${userProject.key}`;
1324
+ }
1325
+ })) : [])]).call(_context, nonNullable);
1326
+ };
1327
+
1328
+ const STORAGE_KEY = 'quickAccessHistoryEntries';
1329
+ const saveHistoryEntries = historyEntries => {
1330
+ try {
1331
+ window.sessionStorage.setItem(STORAGE_KEY, _JSON$stringify(historyEntries));
1332
+ return true;
1333
+ } catch (error) {
1334
+ return false;
1335
+ }
1336
+ };
1337
+ const loadHistoryEntries = () => {
1338
+ try {
1339
+ const value = sessionStorage.getItem(STORAGE_KEY);
1340
+ return value ? JSON.parse(value) : [];
1341
+ } catch (error) {
1342
+ return [];
1343
+ }
1344
+ };
1345
+
1346
+ var QuickAccessProductQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccessProduct" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productId" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "productId" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "allVariants" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 208, source: { body: "query QuickAccessProduct($productId: String!) {\n product(id: $productId) {\n id\n masterData {\n staged {\n allVariants {\n id\n key\n sku\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
1347
+ const createProductVariantSubCommands = _ref => {
1348
+ let intl = _ref.intl,
1349
+ applicationContext = _ref.applicationContext,
1350
+ productId = _ref.productId,
1351
+ variantId = _ref.variantId;
1352
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1353
+ if (!canViewProducts || !applicationContext.project) return [];
1354
+ return [{
1355
+ id: `go/product(${productId})/variant(${variantId})/attributes`,
1356
+ text: intl.formatMessage(messages.showProductVariantAttributes),
1357
+ action: {
1358
+ type: actionTypes.go,
1359
+ to: oneLineTrim`
1360
+ /${applicationContext.project.key}
1361
+ /products
1362
+ /${productId}
1363
+ /variants
1364
+ /${variantId}
1365
+ /attributes
1366
+ `
1367
+ }
1368
+ }, {
1369
+ id: `go/product(${productId})/variant${variantId}/images`,
1370
+ text: intl.formatMessage(messages.showProductVariantImages),
1371
+ action: {
1372
+ type: actionTypes.go,
1373
+ to: oneLineTrim`
1374
+ /${applicationContext.project.key}
1375
+ /products
1376
+ /${productId}
1377
+ /variants
1378
+ /${variantId}
1379
+ /images
1380
+ `
1381
+ }
1382
+ }, {
1383
+ id: `go/product(${productId})/variant(${variantId})/prices`,
1384
+ text: intl.formatMessage(messages.showProductVariantPrices),
1385
+ action: {
1386
+ type: actionTypes.go,
1387
+ to: oneLineTrim`
1388
+ /${applicationContext.project.key}
1389
+ /products
1390
+ /${productId}
1391
+ /variants
1392
+ /${variantId}
1393
+ /prices
1394
+ `
1395
+ }
1396
+ }, {
1397
+ id: `go/product(${productId})/variant(${variantId})/inventory`,
1398
+ text: intl.formatMessage(messages.showProductVariantInventory),
1399
+ action: {
1400
+ type: actionTypes.go,
1401
+ to: oneLineTrim`
1402
+ /${applicationContext.project.key}
1403
+ /products
1404
+ /${productId}
1405
+ /variants
1406
+ /${variantId}
1407
+ /inventory
1408
+ `
1409
+ }
1410
+ }];
1411
+ };
1412
+ const formatVariantMessage = (variant, intl) => {
1413
+ if (variant.sku) return intl.formatMessage(messages.openVariantBySku, {
1414
+ sku: variant.sku
1415
+ });
1416
+ if (variant.key) return intl.formatMessage(messages.openVariantByKey, {
1417
+ key: variant.key
1418
+ });
1419
+ return intl.formatMessage(messages.openVariantById, {
1420
+ id: variant.id
1421
+ });
1422
+ };
1423
+ const createProductVariantListSubCommands = async _ref2 => {
1424
+ let intl = _ref2.intl,
1425
+ applicationContext = _ref2.applicationContext,
1426
+ productId = _ref2.productId,
1427
+ execQuery = _ref2.execQuery;
1428
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1429
+ if (!canViewProducts) return [];
1430
+ const data = await execQuery(QuickAccessProductQuery, {
1431
+ productId
1432
+ }, {
1433
+ target: GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1434
+ });
1435
+ if (data && data.product && data.product.masterData && data.product.masterData.staged && applicationContext.project) {
1436
+ var _context;
1437
+ const projectKey = applicationContext.project.key;
1438
+ return _mapInstanceProperty(_context = data.product.masterData.staged.allVariants).call(_context, variant => ({
1439
+ id: `go/product(${productId})/variant(${variant.id})`,
1440
+ text: formatVariantMessage(variant, intl),
1441
+ subCommands: createProductVariantSubCommands({
1442
+ intl,
1443
+ applicationContext,
1444
+ productId,
1445
+ variantId: variant.id
1446
+ }),
1447
+ action: {
1448
+ type: actionTypes.go,
1449
+ to: oneLineTrim`
1450
+ /${projectKey}
1451
+ /products
1452
+ /${productId}
1453
+ /variants
1454
+ /${variant.id}
1455
+ `
1456
+ }
1457
+ }));
1458
+ }
1459
+ return [];
1460
+ };
1461
+ const createProductTabsSubCommands = _ref3 => {
1462
+ let intl = _ref3.intl,
1463
+ applicationContext = _ref3.applicationContext,
1464
+ productId = _ref3.productId;
1465
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1466
+ if (!canViewProducts || !applicationContext.project) return [];
1467
+ return [{
1468
+ id: `go/product(${productId})/general`,
1469
+ text: intl.formatMessage(messages.openProductVariantGeneral),
1470
+ action: {
1471
+ type: actionTypes.go,
1472
+ to: oneLineTrim`
1473
+ /${applicationContext.project.key}
1474
+ /products
1475
+ /${productId}
1476
+ /general
1477
+ `
1478
+ }
1479
+ }, {
1480
+ id: `go/product(${productId})/variants`,
1481
+ text: intl.formatMessage(messages.openProductVariantList),
1482
+ action: {
1483
+ type: actionTypes.go,
1484
+ to: oneLineTrim`
1485
+ /${applicationContext.project.key}
1486
+ /products
1487
+ /${productId}
1488
+ /variants
1489
+ `
1490
+ },
1491
+ subCommands: execQuery => createProductVariantListSubCommands({
1492
+ intl,
1493
+ applicationContext,
1494
+ productId,
1495
+ execQuery
1496
+ })
1497
+ }, {
1498
+ id: `go/product(${productId})/search`,
1499
+ text: intl.formatMessage(messages.openProductVariantSearch),
1500
+ action: {
1501
+ type: actionTypes.go,
1502
+ to: oneLineTrim`
1503
+ /${applicationContext.project.key}
1504
+ /products
1505
+ /${productId}
1506
+ /search
1507
+ `
1508
+ }
1509
+ }];
1510
+ };
1511
+
1512
+ const sanitize = param => param
1513
+ // Replace all \ with \\ (to prevent generate escape characters)
1514
+ .replace(/\\/g, '\\\\')
1515
+ // Replace all " with \"
1516
+ .replace(/"/g, '\\"');
1517
+ const flattenCommands = async (results, execQuery) => {
1518
+ async function flatten(commands) {
1519
+ return _reduceInstanceProperty(commands).call(commands, async (prevPromise, command) => {
1520
+ const prevResults = await prevPromise;
1521
+ if (command.subCommands) {
1522
+ if (typeof command.subCommands === 'function') {
1523
+ const subCommands = await command.subCommands(execQuery);
1524
+ const flattenSubCommands = await flatten(subCommands);
1525
+ return [...prevResults, command, ...flattenSubCommands];
1526
+ }
1527
+ const flattenSubCommands = await flatten(command.subCommands);
1528
+ return [...prevResults, command, ...flattenSubCommands];
1529
+ }
1530
+ return [...prevResults, command];
1531
+ }, _Promise.resolve([]));
1532
+ }
1533
+ return await flatten(results);
1534
+ };
1535
+
1536
+ // Once ui-kit exposes its fallback mechanism, we can use the same one here
1537
+ const translate = (nameAllLocales, projectDataLocale) => {
1538
+ const matchedTranslation = _findInstanceProperty(nameAllLocales).call(nameAllLocales, translation => translation.locale === projectDataLocale && translation.value);
1539
+ if (matchedTranslation) return matchedTranslation.value;
1540
+
1541
+ // Fall back to the first available locale
1542
+ if (nameAllLocales.length > 0) return nameAllLocales[0].value;
1543
+ return '';
1544
+ };
1545
+
1546
+ var QuickAccessQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccess" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "searchText" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", alias: { kind: "Name", value: "productsByIds" }, name: { kind: "Name", value: "products" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "where" }, value: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "results" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productById" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantSku" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "variantKey" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 1407, source: { body: "query QuickAccess(\n $searchText: String!\n $canViewProducts: Boolean!\n $productsWhereClause: String\n $includeProductsByIds: Boolean!\n) {\n productsByIds: products(where: $productsWhereClause)\n @include(if: $includeProductsByIds) {\n results {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n }\n\n productById: product(id: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByKey: product(key: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByVariantSku: product(sku: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(sku: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n\n productByVariantKey: product(variantKey: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(key: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
1547
+ const searchProductIdsAction = (searchText, projectKey, dataLocale) => actions.post({
1548
+ uri: `/${projectKey}/search/products`,
1549
+ mcApiProxyTarget: MC_API_PROXY_TARGETS.PIM_SEARCH,
1550
+ payload: {
1551
+ query: {
1552
+ fullText: {
1553
+ field: 'name',
1554
+ language: dataLocale,
1555
+ value: searchText
1556
+ }
1557
+ },
1558
+ sort: [{
1559
+ field: 'name',
1560
+ language: dataLocale,
1561
+ order: 'desc'
1562
+ }],
1563
+ limit: 9,
1564
+ offset: 0
1565
+ }
1566
+ });
1567
+ const pimIndexerStatusAction = (projectKey, dataLocale) =>
1568
+ // TODO this should be sdkActions.head()
1569
+ // and then we should check whether the response code is
1570
+ // - 200 meaning the project is indexed
1571
+ // - 404 meaning the project is not indexed
1572
+ //
1573
+ // But there is a problem in tne node-sdk client as it tries to
1574
+ // .json()-parse the response to HEAD requests which results in an
1575
+ // error, so we send a regular request for now and limit to no results
1576
+ // instead to keep the payload minimal
1577
+ actions.post({
1578
+ uri: `/${projectKey}/search/products`,
1579
+ mcApiProxyTarget: MC_API_PROXY_TARGETS.PIM_SEARCH,
1580
+ payload: {
1581
+ query: {
1582
+ fullText: {
1583
+ field: 'name',
1584
+ language: dataLocale,
1585
+ value: 'availability-check'
1586
+ }
1587
+ },
1588
+ limit: 0,
1589
+ offset: 0
1590
+ }
1591
+ });
1592
+ const QuickAccess = props => {
1593
+ const _useState = useState(loadHistoryEntries()),
1594
+ _useState2 = _slicedToArray(_useState, 2),
1595
+ historyEntries = _useState2[0],
1596
+ setHistoryEntries = _useState2[1];
1597
+ const handleHistoryEntriesChange = useCallback(entries => {
1598
+ // Keep the history in sync with the session storage
1599
+ saveHistoryEntries(entries);
1600
+ setHistoryEntries(entries);
1601
+ }, []);
1602
+ const history = useHistory();
1603
+ const apolloClient = useApolloClient();
1604
+ const intl = useIntl();
1605
+ const _useFeatureToggles = useFeatureToggles({
1606
+ pimSearch: true,
1607
+ customApplications: true,
1608
+ canViewDashboard: true
1609
+ }),
1610
+ _useFeatureToggles2 = _slicedToArray(_useFeatureToggles, 3),
1611
+ isPimSearchEnabled = _useFeatureToggles2[0],
1612
+ isCustomApplicationsEnabled = _useFeatureToggles2[1],
1613
+ isCanViewDashboardEnabled = _useFeatureToggles2[2];
1614
+ const applicationContext = useApplicationContext();
1615
+
1616
+ // Destructure functions from props to reference them in the hook dependency list
1617
+ const onPimIndexerStateChangeFromParent = props.onPimIndexerStateChange;
1618
+ const dispatchFetchProductIds = useAsyncDispatch();
1619
+ const fetchPimSearchProductIds = useCallback(async searchText => {
1620
+ if (applicationContext.project && applicationContext.dataLocale) {
1621
+ var _context;
1622
+ const result = await dispatchFetchProductIds(searchProductIdsAction(searchText, applicationContext.project.key, applicationContext.dataLocale));
1623
+ return result && result.hits ? _mapInstanceProperty(_context = result.hits).call(_context, hit => hit.id) : [];
1624
+ }
1625
+ return [];
1626
+ }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchProductIds]);
1627
+ const dispatchFetchPimIndexerStatus = useAsyncDispatch();
1628
+ const fetchPimIndexerStatus = useCallback(async () => {
1629
+ if (applicationContext.project && applicationContext.dataLocale) {
1630
+ try {
1631
+ dispatchFetchPimIndexerStatus(pimIndexerStatusAction(applicationContext.project.key, applicationContext.dataLocale));
1632
+ return pimIndexerStates.INDEXED;
1633
+ } catch (error) {
1634
+ // eslint-disable-next-line no-console
1635
+ if (process.env.NODE_ENV !== 'production') console.error(error);
1636
+ // project is not using pim-indexer when response error code is 404,
1637
+ // but we treat all errors as non-indexed as a safe guard, so we're
1638
+ // not checking the response error code at all
1639
+ return pimIndexerStates.NOT_INDEXED;
1640
+ }
1641
+ }
1642
+ return pimIndexerStates.NOT_INDEXED;
1643
+ }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchPimIndexerStatus]);
1644
+ const getProjectIndexStatus = useCallback(async () => {
1645
+ // skip when there is no project
1646
+ if (!applicationContext.project) return pimIndexerStates.NOT_INDEXED;
1647
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1648
+
1649
+ // skip checking when user can't view products anyways
1650
+ if (!canViewProducts) return pimIndexerStates.NOT_INDEXED;
1651
+ return await fetchPimIndexerStatus();
1652
+ }, [applicationContext.permissions, applicationContext.project, fetchPimIndexerStatus]);
1653
+ useEffect(() => {
1654
+ if (props.pimIndexerState === pimIndexerStates.UNCHECKED) {
1655
+ getProjectIndexStatus().then(status => {
1656
+ onPimIndexerStateChangeFromParent(status);
1657
+ });
1658
+ }
1659
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1660
+ }, []); // <-- run only once, when component mounts
1661
+
1662
+ const execQuery = useCallback((Query, variables, context) => apolloClient.query({
1663
+ query: Query,
1664
+ errorPolicy: 'ignore',
1665
+ variables,
1666
+ context
1667
+ }).then(response => response.data), [apolloClient]);
1668
+ const getNextCommands = useCallback(async command => {
1669
+ if (!command.subCommands) return [];
1670
+ if (_Array$isArray(command.subCommands)) return command.subCommands;
1671
+ return await command.subCommands(execQuery);
1672
+ }, [execQuery]);
1673
+ const getProjectCommands = useCallback(async searchText => {
1674
+ const idsOfProductsMatchingSearchText = props.pimIndexerState === pimIndexerStates.INDEXED ? await fetchPimSearchProductIds(searchText) : [];
1675
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1676
+ const data = await execQuery(QuickAccessQuery, {
1677
+ searchText: sanitize(searchText),
1678
+ // Pass conditional arguments to disable some of the queries
1679
+ canViewProducts,
1680
+ productsWhereClause: `id in (${_mapInstanceProperty(idsOfProductsMatchingSearchText).call(idsOfProductsMatchingSearchText, id => _JSON$stringify(id)).join(', ')})`,
1681
+ includeProductsByIds: Boolean(canViewProducts && idsOfProductsMatchingSearchText.length > 0)
1682
+ }, {
1683
+ target: GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1684
+ });
1685
+ const commands = [];
1686
+ if (data && data.productByVariantKey && data.productByVariantKey.masterData && data.productByVariantKey.masterData.staged && data.productByVariantKey.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1687
+ const productId = data.productByVariantKey.id;
1688
+ const variantId = data.productByVariantKey.masterData.staged.variant.id;
1689
+ const variantKey = data.productByVariantKey.masterData.staged.variant.key;
1690
+ commands.push({
1691
+ id: `go/product-variant-by-key/product(${productId}/variant(${variantId})`,
1692
+ text: intl.formatMessage(messages.showProductVariant, {
1693
+ variantName: translate(data.productByVariantKey.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1694
+ }),
1695
+ keywords: variantKey ? [variantKey] : undefined,
1696
+ action: {
1697
+ type: actionTypes.go,
1698
+ to: oneLineTrim`
1699
+ /${applicationContext.project.key}
1700
+ /products
1701
+ /${productId}
1702
+ /variants
1703
+ /${variantId}
1704
+ `
1705
+ },
1706
+ subCommands: createProductVariantSubCommands({
1707
+ intl,
1708
+ applicationContext,
1709
+ productId,
1710
+ variantId
1711
+ })
1712
+ });
1713
+ }
1714
+ if (data && data.productByVariantSku && data.productByVariantSku.masterData && data.productByVariantSku.masterData.staged && data.productByVariantSku.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1715
+ const productId = data.productByVariantSku.id;
1716
+ const variantId = data.productByVariantSku.masterData.staged.variant.id;
1717
+ commands.push({
1718
+ id: `go/product-variant-by-sku/product(${productId})/variant(${variantId})`,
1719
+ text: intl.formatMessage(messages.showProductVariant, {
1720
+ variantName: data.productByVariantSku.masterData.staged.variant.sku
1721
+ }),
1722
+ action: {
1723
+ type: actionTypes.go,
1724
+ to: oneLineTrim`
1725
+ /${applicationContext.project.key}
1726
+ /products
1727
+ /${productId}
1728
+ /variants
1729
+ /${variantId}
1730
+ `
1731
+ },
1732
+ subCommands: createProductVariantSubCommands({
1733
+ intl,
1734
+ applicationContext,
1735
+ productId,
1736
+ variantId
1737
+ })
1738
+ });
1739
+ }
1740
+ if (data && data.productById && data.productById.masterData && data.productById.masterData.staged && data.productById.masterData.staged.nameAllLocales && applicationContext.project && applicationContext.dataLocale) {
1741
+ const productId = data.productById.id;
1742
+ commands.push({
1743
+ id: `go/product-by-id/product(${productId})`,
1744
+ text: intl.formatMessage(messages.showProduct, {
1745
+ productName: translate(data.productById.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1746
+ }),
1747
+ keywords: [productId],
1748
+ action: {
1749
+ type: actionTypes.go,
1750
+ to: `/${applicationContext.project.key}/products/${productId}`
1751
+ },
1752
+ subCommands: createProductTabsSubCommands({
1753
+ intl,
1754
+ applicationContext,
1755
+ productId
1756
+ })
1757
+ });
1758
+ }
1759
+ if (data && data.productsByIds && data.productsByIds.results) {
1760
+ var _context2;
1761
+ _forEachInstanceProperty(_context2 = data.productsByIds.results).call(_context2, product => {
1762
+ if (product.masterData.staged && applicationContext.project && applicationContext.dataLocale) {
1763
+ commands.push({
1764
+ id: `go/product-by-search-text/product(${product.id})`,
1765
+ text: intl.formatMessage(messages.showProduct, {
1766
+ productName: translate(product.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1767
+ }),
1768
+ keywords: [product.id],
1769
+ action: {
1770
+ type: actionTypes.go,
1771
+ to: `/${applicationContext.project.key}/products/${product.id}`
1772
+ },
1773
+ subCommands: createProductTabsSubCommands({
1774
+ intl,
1775
+ applicationContext,
1776
+ productId: product.id
1777
+ })
1778
+ });
1779
+ }
1780
+ });
1781
+ }
1782
+ if (data && data.productByKey && applicationContext.project && applicationContext.dataLocale) {
1783
+ const productId = data.productByKey.id;
1784
+ commands.push({
1785
+ id: `go/product-by-key/product(${productId})`,
1786
+ text: intl.formatMessage(messages.showProduct, {
1787
+ productName: searchText
1788
+ }),
1789
+ action: {
1790
+ type: actionTypes.go,
1791
+ to: `/${applicationContext.project.key}/products/${productId}`
1792
+ },
1793
+ subCommands: createProductTabsSubCommands({
1794
+ intl,
1795
+ applicationContext,
1796
+ productId
1797
+ })
1798
+ });
1799
+ }
1800
+ return commands;
1801
+ }, [applicationContext, execQuery, fetchPimSearchProductIds, intl, props.pimIndexerState]);
1802
+ const debouncedGetProjectCommands = debounce(getProjectCommands, 200, {
1803
+ cancelObj: 'canceled'
1804
+ });
1805
+ const search = useCallback(async searchText => {
1806
+ const generalCommands = createCommands({
1807
+ applicationContext,
1808
+ changeProjectDataLocale: props.onChangeProjectDataLocale,
1809
+ intl,
1810
+ featureToggles: {
1811
+ pimSearch: isPimSearchEnabled,
1812
+ customApplications: isCustomApplicationsEnabled,
1813
+ canViewDashboard: isCanViewDashboardEnabled
1814
+ }
1815
+ });
1816
+ if (!applicationContext.project) return generalCommands;
1817
+
1818
+ // Avoid searching for short texts, as we won't get any good results
1819
+ // anyways. This results in commands popping up immediately when the user
1820
+ // starts typing, which gives the whole search a much more repsonsive
1821
+ // feeling.
1822
+ if (_trimInstanceProperty(searchText).call(searchText).length < 3) return generalCommands;
1823
+ try {
1824
+ const projectCommands = await debouncedGetProjectCommands(searchText);
1825
+ const allCommands = [...generalCommands, ...projectCommands];
1826
+ return await flattenCommands(allCommands, execQuery);
1827
+ } catch (error) {
1828
+ // When the debounced search is canceled, it throws with "canceled"
1829
+ // In that case we know that another search is going to happen
1830
+ // and we just resolve with the general commands.
1831
+ if (error === 'canceled') return generalCommands;
1832
+ throw error;
1833
+ }
1834
+ }, [applicationContext, debouncedGetProjectCommands, execQuery, intl, isCanViewDashboardEnabled, isCustomApplicationsEnabled, isPimSearchEnabled, props.onChangeProjectDataLocale]);
1835
+ const executeCommand = useCallback((command, meta) => {
1836
+ var _context3;
1837
+ if (typeof command.action === 'function') {
1838
+ // Idea: We could handle these errors and set them on status bar of Butler
1839
+ // We can also handle sync/async commands by checking command.action.then
1840
+ command.action();
1841
+ return;
1842
+ }
1843
+ // open in new window
1844
+ // and always open other pages in a new window
1845
+ if (meta.openInNewTab || !_startsWithInstanceProperty(_context3 = command.action.to).call(_context3, '/')) {
1846
+ // eslint-disable-next-line no-restricted-globals
1847
+ open(command.action.to, '_blank');
1848
+ } else if (applicationContext.environment.useFullRedirectsForLinks) {
1849
+ location.replace(command.action.to);
1850
+ } else {
1851
+ history.push(command.action.to);
1852
+ }
1853
+ }, [applicationContext.environment.useFullRedirectsForLinks, history]);
1854
+ return jsx(ButlerWithAnimation, {
1855
+ historyEntries: historyEntries,
1856
+ onHistoryEntriesChange: handleHistoryEntriesChange,
1857
+ search: search,
1858
+ executeCommand: executeCommand,
1859
+ onClose: props.onClose,
1860
+ getNextCommands: getNextCommands
1861
+ });
1862
+ };
1863
+ QuickAccess.displayName = 'QuickAccess';
1864
+
1865
+ export { QuickAccess as default };