@commercetools-frontend/application-shell 22.2.1 → 22.3.0

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 (209) hide show
  1. package/dist/{application-entry-point-32a3b092.cjs.dev.js → application-entry-point-0c3254b0.cjs.dev.js} +10 -19
  2. package/dist/{application-entry-point-ac068fc0.cjs.prod.js → application-entry-point-2333abb6.cjs.prod.js} +10 -19
  3. package/dist/{application-entry-point-07dbf99c.esm.js → application-entry-point-a1dfe994.esm.js} +10 -19
  4. package/dist/{box-8850277f.cjs.prod.js → box-686bc950.cjs.dev.js} +0 -2
  5. package/dist/{box-4395623b.esm.js → box-6ce924c9.esm.js} +0 -2
  6. package/dist/{box-6b5be9a9.cjs.dev.js → box-e17daf6c.cjs.prod.js} +0 -2
  7. package/dist/{cart-a49faf67.esm.js → cart-3b156a46.esm.js} +0 -2
  8. package/dist/{cart-41f0b7bc.cjs.dev.js → cart-796beed7.cjs.dev.js} +0 -2
  9. package/dist/{cart-0698b97d.cjs.prod.js → cart-f2fc1baf.cjs.prod.js} +0 -2
  10. package/dist/commercetools-frontend-application-shell.cjs.dev.js +5 -5
  11. package/dist/commercetools-frontend-application-shell.cjs.prod.js +5 -5
  12. package/dist/commercetools-frontend-application-shell.esm.js +5 -5
  13. package/dist/{configure-apollo-b2a0d497.cjs.prod.js → configure-apollo-70d83707.cjs.prod.js} +64 -181
  14. package/dist/{configure-apollo-4ea370b4.esm.js → configure-apollo-89ea99bf.esm.js} +64 -183
  15. package/dist/{configure-apollo-3daef70c.cjs.dev.js → configure-apollo-de2b9aa2.cjs.dev.js} +64 -183
  16. package/dist/{connected-square-47233754.cjs.dev.js → connected-square-960e046b.cjs.prod.js} +0 -2
  17. package/dist/{connected-square-b2e25621.cjs.prod.js → connected-square-961eb5b6.cjs.dev.js} +0 -2
  18. package/dist/{connected-square-3cac6bd7.esm.js → connected-square-f34a98ff.esm.js} +0 -2
  19. package/dist/{constants-a3c2194a.cjs.prod.js → constants-902cf3f3.cjs.prod.js} +2 -1
  20. package/dist/{constants-940f343f.esm.js → constants-b962b73e.esm.js} +2 -1
  21. package/dist/{constants-b201d328.cjs.dev.js → constants-e51cdcc0.cjs.dev.js} +2 -1
  22. package/dist/declarations/src/components/app-bar/app-bar.d.ts +1 -1
  23. package/dist/declarations/src/components/application-entry-point/application-entry-point.d.ts +1 -1
  24. package/dist/declarations/src/components/application-loader/application-loader.d.ts +1 -1
  25. package/dist/declarations/src/components/application-shell/application-shell.d.ts +1 -1
  26. package/dist/declarations/src/components/application-shell/global-styles.d.ts +1 -1
  27. package/dist/declarations/src/components/application-shell-authenticated/application-shell-authenticated.d.ts +1 -1
  28. package/dist/declarations/src/components/application-shell-provider/application-shell-provider.d.ts +1 -2
  29. package/dist/declarations/src/components/application-shell-provider/utils.d.ts +2 -0
  30. package/dist/declarations/src/components/authenticated/am-i-logged-in.d.ts +1 -1
  31. package/dist/declarations/src/components/authenticated/authenticated.d.ts +1 -1
  32. package/dist/declarations/src/components/authenticated/oidc-callback-error-page.d.ts +1 -1
  33. package/dist/declarations/src/components/authenticated/oidc-callback.async.d.ts +1 -1
  34. package/dist/declarations/src/components/authenticated/oidc-callback.d.ts +1 -1
  35. package/dist/declarations/src/components/back-to-project/back-to-project.d.ts +1 -1
  36. package/dist/declarations/src/components/configure-intl-provider/configure-intl-provider.d.ts +1 -1
  37. package/dist/declarations/src/components/error-apologizer/error-apologizer.d.ts +1 -1
  38. package/dist/declarations/src/components/error-apologizer/index.d.ts +1 -1
  39. package/dist/declarations/src/components/error-boundary/error-boundary.d.ts +1 -1
  40. package/dist/declarations/src/components/fetch-project/fetch-project.d.ts +1 -1
  41. package/dist/declarations/src/components/fetch-user/fetch-user.d.ts +1 -1
  42. package/dist/declarations/src/components/inject-reducers/inject-reducers.d.ts +1 -1
  43. package/dist/declarations/src/components/locale-switcher/locale-switcher.d.ts +2 -2
  44. package/dist/declarations/src/components/navbar/index.d.ts +1 -1
  45. package/dist/declarations/src/components/navbar/legacy-icons/box.d.ts +1 -1
  46. package/dist/declarations/src/components/navbar/legacy-icons/cart.d.ts +1 -1
  47. package/dist/declarations/src/components/navbar/legacy-icons/connected-square.d.ts +1 -1
  48. package/dist/declarations/src/components/navbar/legacy-icons/gear.d.ts +1 -1
  49. package/dist/declarations/src/components/navbar/legacy-icons/heart.d.ts +1 -1
  50. package/dist/declarations/src/components/navbar/legacy-icons/list-with-search.d.ts +1 -1
  51. package/dist/declarations/src/components/navbar/legacy-icons/paperclip.d.ts +1 -1
  52. package/dist/declarations/src/components/navbar/legacy-icons/plugin.d.ts +1 -1
  53. package/dist/declarations/src/components/navbar/legacy-icons/rocket.d.ts +1 -1
  54. package/dist/declarations/src/components/navbar/legacy-icons/speedometer.d.ts +1 -1
  55. package/dist/declarations/src/components/navbar/legacy-icons/star.d.ts +1 -1
  56. package/dist/declarations/src/components/navbar/legacy-icons/tag-multi.d.ts +1 -1
  57. package/dist/declarations/src/components/navbar/legacy-icons/tree-structure.d.ts +1 -1
  58. package/dist/declarations/src/components/navbar/legacy-icons/user-filled.d.ts +1 -1
  59. package/dist/declarations/src/components/navbar/legacy-icons/world.d.ts +1 -1
  60. package/dist/declarations/src/components/navbar/loading-navbar.d.ts +1 -1
  61. package/dist/declarations/src/components/navbar/menu-items.d.ts +8 -8
  62. package/dist/declarations/src/components/navbar/navbar.d.ts +1 -1
  63. package/dist/declarations/src/components/project-container/index.d.ts +1 -1
  64. package/dist/declarations/src/components/project-container/project-container.d.ts +1 -1
  65. package/dist/declarations/src/components/project-data-locale/project-data-locale.d.ts +1 -1
  66. package/dist/declarations/src/components/project-expired/index.d.ts +1 -1
  67. package/dist/declarations/src/components/project-expired/project-expired.d.ts +1 -1
  68. package/dist/declarations/src/components/project-not-found/index.d.ts +1 -1
  69. package/dist/declarations/src/components/project-not-found/project-not-found.d.ts +1 -1
  70. package/dist/declarations/src/components/project-not-initialized/index.d.ts +1 -1
  71. package/dist/declarations/src/components/project-not-initialized/project-not-initialized.d.ts +1 -1
  72. package/dist/declarations/src/components/project-suspended/index.d.ts +1 -1
  73. package/dist/declarations/src/components/project-suspended/project-suspended.d.ts +1 -1
  74. package/dist/declarations/src/components/project-switcher/project-switcher.d.ts +3 -3
  75. package/dist/declarations/src/components/quick-access/butler/butler.d.ts +1 -1
  76. package/dist/declarations/src/components/quick-access/butler-command/butler-command.d.ts +1 -1
  77. package/dist/declarations/src/components/quick-access/index.d.ts +1 -1
  78. package/dist/declarations/src/components/quick-access/quick-access.d.ts +1 -1
  79. package/dist/declarations/src/components/redirect-to-login/index.d.ts +1 -1
  80. package/dist/declarations/src/components/redirect-to-login/redirect-to-login.d.ts +1 -1
  81. package/dist/declarations/src/components/redirect-to-logout/index.d.ts +1 -1
  82. package/dist/declarations/src/components/redirect-to-logout/redirect-to-logout.d.ts +1 -1
  83. package/dist/declarations/src/components/redirect-to-project-create/index.d.ts +1 -1
  84. package/dist/declarations/src/components/redirect-to-project-create/redirect-to-project-create.d.ts +1 -1
  85. package/dist/declarations/src/components/route-catch-all/index.d.ts +1 -1
  86. package/dist/declarations/src/components/route-catch-all/route-catch-all.d.ts +1 -1
  87. package/dist/declarations/src/components/service-page-project-switcher/service-page-project-switcher.d.ts +1 -1
  88. package/dist/declarations/src/components/setup-flop-flip-provider/setup-flop-flip-provider.d.ts +1 -1
  89. package/dist/declarations/src/components/suspended-route/suspended-route.d.ts +1 -1
  90. package/dist/declarations/src/components/theme-switcher/new-design-release-info-dialog.d.ts +1 -1
  91. package/dist/declarations/src/components/theme-switcher/theme-switcher.d.ts +1 -1
  92. package/dist/declarations/src/components/user-settings-menu/index.d.ts +1 -1
  93. package/dist/declarations/src/components/user-settings-menu/user-settings-menu.d.ts +3 -3
  94. package/dist/declarations/src/types/generated/settings.d.ts +89 -1151
  95. package/dist/{error-apologizer-57a2fb57.cjs.prod.js → error-apologizer-24ad0b88.cjs.prod.js} +0 -3
  96. package/dist/{error-apologizer-d0409fcb.esm.js → error-apologizer-55551c07.esm.js} +0 -3
  97. package/dist/{error-apologizer-d20ca326.cjs.dev.js → error-apologizer-a5c03978.cjs.dev.js} +0 -3
  98. package/dist/{gear-300dd24c.esm.js → gear-1f381738.esm.js} +0 -2
  99. package/dist/{gear-2890f7fb.cjs.prod.js → gear-9b394c43.cjs.prod.js} +0 -2
  100. package/dist/{gear-e8014c5a.cjs.dev.js → gear-ab1f6210.cjs.dev.js} +0 -2
  101. package/dist/{get-mc-origin-7968e04f.cjs.prod.js → get-mc-origin-8f7a578c.cjs.prod.js} +10 -16
  102. package/dist/{get-mc-origin-314b77a2.cjs.dev.js → get-mc-origin-a86dff20.cjs.dev.js} +10 -16
  103. package/dist/{get-mc-origin-5df60933.esm.js → get-mc-origin-fecfee07.esm.js} +10 -16
  104. package/dist/{heart-000a023d.cjs.prod.js → heart-a6e7ccf9.cjs.dev.js} +0 -2
  105. package/dist/{heart-dded66b4.esm.js → heart-be7c779b.esm.js} +0 -2
  106. package/dist/{heart-f21b7d39.cjs.dev.js → heart-ebfab4cd.cjs.prod.js} +0 -2
  107. package/dist/{index-894f4596.cjs.dev.js → index-02a17607.cjs.dev.js} +241 -473
  108. package/dist/{index-3239484c.esm.js → index-667035b8.esm.js} +240 -472
  109. package/dist/{index-4e8fd5e2.cjs.prod.js → index-a03f4e81.cjs.prod.js} +237 -465
  110. package/dist/{list-with-search-a3302710.esm.js → list-with-search-3341bbf7.esm.js} +0 -2
  111. package/dist/{list-with-search-a5b72b33.cjs.prod.js → list-with-search-b5e9ae1b.cjs.dev.js} +0 -2
  112. package/dist/{list-with-search-ee796e9e.cjs.dev.js → list-with-search-e3ccba98.cjs.prod.js} +0 -2
  113. package/dist/{navbar-de19b951.cjs.prod.js → navbar-00a55ccf.cjs.prod.js} +53 -110
  114. package/dist/{navbar-af81c703.cjs.dev.js → navbar-1b61993a.cjs.dev.js} +53 -110
  115. package/dist/{navbar-614b1cce.esm.js → navbar-84dc97f9.esm.js} +53 -110
  116. package/dist/{new-design-release-info-dialog-629191c2.cjs.dev.js → new-design-release-info-dialog-57843832.cjs.dev.js} +0 -2
  117. package/dist/{new-design-release-info-dialog-879a4af8.cjs.prod.js → new-design-release-info-dialog-730137e2.cjs.prod.js} +0 -2
  118. package/dist/{new-design-release-info-dialog-6e19106c.esm.js → new-design-release-info-dialog-e2cd95fa.esm.js} +0 -2
  119. package/dist/{oidc-15d3a4c1.cjs.dev.js → oidc-4895bd80.cjs.dev.js} +13 -20
  120. package/dist/{oidc-callback-ab054f67.cjs.prod.js → oidc-callback-121ef6c1.cjs.prod.js} +12 -20
  121. package/dist/{oidc-callback-ec94dbba.esm.js → oidc-callback-cddf8bb4.esm.js} +12 -20
  122. package/dist/{oidc-callback-ca559a40.cjs.dev.js → oidc-callback-e60075ab.cjs.dev.js} +12 -20
  123. package/dist/{oidc-77115492.esm.js → oidc-d7f0409a.esm.js} +13 -20
  124. package/dist/{oidc-6c79100b.cjs.prod.js → oidc-da4ccc69.cjs.prod.js} +13 -20
  125. package/dist/{paperclip-23d1e69c.cjs.prod.js → paperclip-6f0b6ae5.cjs.prod.js} +0 -2
  126. package/dist/{paperclip-a61112e8.esm.js → paperclip-c76aec52.esm.js} +0 -2
  127. package/dist/{paperclip-d653c134.cjs.dev.js → paperclip-ec55e4a0.cjs.dev.js} +0 -2
  128. package/dist/{plugin-0ee6aee4.cjs.dev.js → plugin-16c01245.cjs.dev.js} +0 -2
  129. package/dist/{plugin-3d353a5b.esm.js → plugin-279f88cd.esm.js} +0 -2
  130. package/dist/{plugin-7e57f237.cjs.prod.js → plugin-f199ed20.cjs.prod.js} +0 -2
  131. package/dist/{project-container-8ca21a5f.cjs.dev.js → project-container-51e70095.cjs.dev.js} +21 -46
  132. package/dist/{project-container-493422d8.esm.js → project-container-98c2a789.esm.js} +21 -46
  133. package/dist/{project-container-805662a2.cjs.prod.js → project-container-e7f950b0.cjs.prod.js} +21 -45
  134. package/dist/{project-expired-f660e923.cjs.prod.js → project-expired-1cd4843f.cjs.prod.js} +6 -11
  135. package/dist/{project-expired-fe211a3d.esm.js → project-expired-513a8320.esm.js} +6 -11
  136. package/dist/{project-expired-d020ec6f.cjs.dev.js → project-expired-fd3efa19.cjs.dev.js} +6 -11
  137. package/dist/{project-not-found-b5502e08.esm.js → project-not-found-8bab15e7.esm.js} +6 -9
  138. package/dist/{project-not-found-46f1cd62.cjs.prod.js → project-not-found-9f21b30c.cjs.prod.js} +6 -9
  139. package/dist/{project-not-found-179f39e9.cjs.dev.js → project-not-found-e5eb5b7e.cjs.dev.js} +6 -9
  140. package/dist/{project-not-initialized-e9905ca9.cjs.dev.js → project-not-initialized-3cdb8692.cjs.dev.js} +6 -11
  141. package/dist/{project-not-initialized-0a4c847b.cjs.prod.js → project-not-initialized-a1a8d9dc.cjs.prod.js} +6 -11
  142. package/dist/{project-not-initialized-f14ed881.esm.js → project-not-initialized-a8562fd3.esm.js} +6 -11
  143. package/dist/{project-suspended-a1a46abb.cjs.dev.js → project-suspended-79c67f38.cjs.dev.js} +6 -10
  144. package/dist/{project-suspended-994f5d16.cjs.prod.js → project-suspended-8a558cb8.cjs.prod.js} +6 -10
  145. package/dist/{project-suspended-8e50fb5d.esm.js → project-suspended-e0fb960a.esm.js} +6 -10
  146. package/dist/{quick-access-4f55c2a1.cjs.dev.js → quick-access-0fb30eee.cjs.dev.js} +124 -194
  147. package/dist/{quick-access-9742ff95.esm.js → quick-access-8c7919d2.esm.js} +124 -194
  148. package/dist/{quick-access-e7d9ec95.cjs.prod.js → quick-access-ff6fee75.cjs.prod.js} +123 -191
  149. package/dist/{redirect-to-login-58e4614d.esm.js → redirect-to-login-02167259.esm.js} +14 -18
  150. package/dist/{redirect-to-login-d893ba27.cjs.prod.js → redirect-to-login-3c2a1258.cjs.prod.js} +14 -18
  151. package/dist/{redirect-to-login-7c89cdfd.cjs.dev.js → redirect-to-login-73396807.cjs.dev.js} +14 -18
  152. package/dist/{redirect-to-logout-7fa846f5.cjs.prod.js → redirect-to-logout-838758f3.cjs.prod.js} +7 -12
  153. package/dist/{redirect-to-logout-2967472e.esm.js → redirect-to-logout-b5c8fdbf.esm.js} +7 -12
  154. package/dist/{redirect-to-logout-429bb215.cjs.dev.js → redirect-to-logout-be3e139d.cjs.dev.js} +7 -12
  155. package/dist/{redirect-to-project-create-048efa71.cjs.prod.js → redirect-to-project-create-2266c427.cjs.prod.js} +1 -3
  156. package/dist/{redirect-to-project-create-f0e7b35e.cjs.dev.js → redirect-to-project-create-7b476aa6.cjs.dev.js} +1 -3
  157. package/dist/{redirect-to-project-create-052f293e.esm.js → redirect-to-project-create-c5323504.esm.js} +1 -3
  158. package/dist/{redirector-47a6be71.esm.js → redirector-368eeb0f.esm.js} +1 -8
  159. package/dist/{redirector-0d98f9df.cjs.dev.js → redirector-ec9fa17f.cjs.prod.js} +1 -8
  160. package/dist/{redirector-77ce2f5c.cjs.prod.js → redirector-f71198cc.cjs.dev.js} +1 -8
  161. package/dist/{requests-in-flight-loader-2d2db11b.cjs.dev.js → requests-in-flight-loader-3a40411c.cjs.dev.js} +5 -9
  162. package/dist/{requests-in-flight-loader-30deef32.esm.js → requests-in-flight-loader-78bce8a5.esm.js} +5 -9
  163. package/dist/{requests-in-flight-loader-06e4f458.cjs.prod.js → requests-in-flight-loader-d7963726.cjs.prod.js} +5 -9
  164. package/dist/{rocket-4b088727.esm.js → rocket-067c2f8c.esm.js} +0 -2
  165. package/dist/{rocket-3e3f0a98.cjs.prod.js → rocket-c6d44215.cjs.dev.js} +0 -2
  166. package/dist/{rocket-95b6858d.cjs.dev.js → rocket-f0bfae34.cjs.prod.js} +0 -2
  167. package/dist/{route-catch-all-3b490df1.cjs.prod.js → route-catch-all-293a1269.cjs.dev.js} +6 -6
  168. package/dist/{route-catch-all-9ac99936.cjs.dev.js → route-catch-all-373c69c6.cjs.prod.js} +6 -6
  169. package/dist/{route-catch-all-01cf0095.esm.js → route-catch-all-4af77675.esm.js} +6 -6
  170. package/dist/{service-page-project-switcher-52105f71.cjs.dev.js → service-page-project-switcher-2a4bc3ee.cjs.dev.js} +3 -4
  171. package/dist/{service-page-project-switcher-b1384fa6.cjs.prod.js → service-page-project-switcher-617a204e.cjs.prod.js} +3 -3
  172. package/dist/{service-page-project-switcher-ef6a88ea.esm.js → service-page-project-switcher-b99782a7.esm.js} +3 -4
  173. package/dist/{speedometer-2881cef6.cjs.prod.js → speedometer-0de260cf.cjs.prod.js} +0 -2
  174. package/dist/{speedometer-54f872f2.cjs.dev.js → speedometer-aedd9660.cjs.dev.js} +0 -2
  175. package/dist/{speedometer-08a11d5a.esm.js → speedometer-baa6ae82.esm.js} +0 -2
  176. package/dist/{star-52bf7a64.cjs.dev.js → star-49745c72.cjs.dev.js} +0 -2
  177. package/dist/{star-15244db1.esm.js → star-bd723a9c.esm.js} +0 -2
  178. package/dist/{star-f8502efb.cjs.prod.js → star-c11b0683.cjs.prod.js} +0 -2
  179. package/dist/{tag-multi-3be995ac.esm.js → tag-multi-1dee8212.esm.js} +0 -2
  180. package/dist/{tag-multi-1d1553b6.cjs.dev.js → tag-multi-2e7a68ec.cjs.dev.js} +0 -2
  181. package/dist/{tag-multi-f9acb1c2.cjs.prod.js → tag-multi-f8d9c9e6.cjs.prod.js} +0 -2
  182. package/dist/{tree-structure-c8753526.esm.js → tree-structure-0a1dc6bf.esm.js} +0 -2
  183. package/dist/{tree-structure-4650688d.cjs.dev.js → tree-structure-690366f9.cjs.prod.js} +0 -2
  184. package/dist/{tree-structure-f24ee3f6.cjs.prod.js → tree-structure-8c974c7a.cjs.dev.js} +0 -2
  185. package/dist/{use-applications-menu-a5568a7d.cjs.prod.js → use-applications-menu-2046cce4.cjs.dev.js} +30 -40
  186. package/dist/{use-applications-menu-3e85b058.cjs.dev.js → use-applications-menu-84a888d7.cjs.prod.js} +30 -40
  187. package/dist/{use-applications-menu-824f1519.esm.js → use-applications-menu-daf4a744.esm.js} +30 -40
  188. package/dist/{use-is-served-by-proxy-499bfa16.esm.js → use-is-served-by-proxy-77984220.esm.js} +0 -2
  189. package/dist/{use-is-served-by-proxy-2b4916e5.cjs.dev.js → use-is-served-by-proxy-845cace5.cjs.prod.js} +0 -2
  190. package/dist/{use-is-served-by-proxy-51e76976.cjs.prod.js → use-is-served-by-proxy-ed411f45.cjs.dev.js} +0 -2
  191. package/dist/{user-filled-2e6cb25e.cjs.dev.js → user-filled-58af1ae4.cjs.prod.js} +0 -2
  192. package/dist/{user-filled-815b49a0.cjs.prod.js → user-filled-5dd7a51a.cjs.dev.js} +0 -2
  193. package/dist/{user-filled-2dc4e79e.esm.js → user-filled-d40a7e17.esm.js} +0 -2
  194. package/dist/{user-settings-menu-1e5736ab.esm.js → user-settings-menu-b8ecc868.esm.js} +16 -53
  195. package/dist/{user-settings-menu-92a5cb53.cjs.prod.js → user-settings-menu-c50b95e4.cjs.prod.js} +16 -52
  196. package/dist/{user-settings-menu-615d91e4.cjs.dev.js → user-settings-menu-fe393647.cjs.dev.js} +16 -53
  197. package/dist/{version-tracker-5f6c37e6.cjs.dev.js → version-tracker-3b9eb5c6.cjs.dev.js} +5 -5
  198. package/dist/{version-tracker-73a18ff9.cjs.prod.js → version-tracker-4ad14ed3.cjs.prod.js} +5 -5
  199. package/dist/{version-tracker-3e5d5525.esm.js → version-tracker-f2e3185f.esm.js} +5 -5
  200. package/dist/{world-c5ea311a.esm.js → world-1b0e72fc.esm.js} +0 -2
  201. package/dist/{world-973090a5.cjs.dev.js → world-bfd04f52.cjs.dev.js} +0 -2
  202. package/dist/{world-e1f9dbf8.cjs.prod.js → world-f921d80c.cjs.prod.js} +0 -2
  203. package/package.json +41 -27
  204. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.dev.js +2 -2
  205. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.prod.js +2 -2
  206. package/ssr/dist/commercetools-frontend-application-shell-ssr.esm.js +2 -2
  207. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.dev.js +78 -112
  208. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.prod.js +78 -112
  209. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.esm.js +78 -112
@@ -19,7 +19,7 @@ import { useApplicationContext } from '@commercetools-frontend/application-shell
19
19
  import { SUPPORT_PORTAL_URL, LOGOUT_REASONS, GRAPHQL_TARGETS, MC_API_PROXY_TARGETS } from '@commercetools-frontend/constants';
20
20
  import { hasSomePermissions } from '@commercetools-frontend/permissions';
21
21
  import { useAsyncDispatch, actions } from '@commercetools-frontend/sdk';
22
- import { l as location } from './use-is-served-by-proxy-499bfa16.esm.js';
22
+ import { l as location } from './use-is-served-by-proxy-77984220.esm.js';
23
23
  import _Object$keys from '@babel/runtime-corejs3/core-js-stable/object/keys';
24
24
  import _Object$getOwnPropertySymbols from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
25
25
  import _Object$getOwnPropertyDescriptor from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor';
@@ -38,11 +38,11 @@ import { customProperties } from '@commercetools-uikit/design-system';
38
38
  import { AngleThinRightIcon, SearchIcon } from '@commercetools-uikit/icons';
39
39
  import LoadingSpinner from '@commercetools-uikit/loading-spinner';
40
40
  import { jsxs, jsx } from '@emotion/react/jsx-runtime';
41
- import { B as ButlerContainer, p as pimIndexerStates } from './index-3239484c.esm.js';
41
+ import { B as ButlerContainer, p as pimIndexerStates } from './index-667035b8.esm.js';
42
42
  import _Promise from '@babel/runtime-corejs3/core-js-stable/promise';
43
43
  import _reduceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/reduce';
44
44
  import _findInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find';
45
- import './configure-apollo-4ea370b4.esm.js';
45
+ import './configure-apollo-89ea99bf.esm.js';
46
46
  import '@babel/runtime-corejs3/core-js-stable/object/entries';
47
47
  import '@babel/runtime-corejs3/core-js-stable/reflect/has';
48
48
  import '@reduxjs/toolkit';
@@ -52,7 +52,7 @@ import 'redux-thunk';
52
52
  import '@commercetools-frontend/notifications';
53
53
  import '@babel/runtime-corejs3/core-js-stable/instance/index-of';
54
54
  import '@commercetools-frontend/sentry';
55
- import './constants-940f343f.esm.js';
55
+ import './constants-b962b73e.esm.js';
56
56
  import '@commercetools-frontend/react-notifications';
57
57
  import 'redux-logger';
58
58
  import '@babel/runtime-corejs3/core-js-stable/url';
@@ -98,13 +98,12 @@ import '@flopflip/http-adapter';
98
98
  import '@flopflip/launchdarkly-adapter';
99
99
  import 'react-redux';
100
100
  import 'lodash/upperFirst';
101
- import './oidc-77115492.esm.js';
101
+ import './oidc-d7f0409a.esm.js';
102
102
  import '@commercetools-uikit/design-system/materials/resets.css';
103
103
  import '@commercetools-frontend/actions-global';
104
104
  import '@commercetools-frontend/application-config/ssr';
105
105
 
106
106
  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)."; }
107
-
108
107
  var _ref$1 = process.env.NODE_ENV === "production" ? {
109
108
  name: "13n9jnb",
110
109
  styles: "align-self:center;>*{display:block;}"
@@ -114,7 +113,6 @@ var _ref$1 = process.env.NODE_ENV === "production" ? {
114
113
  map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrRGdCIiwiZmlsZSI6ImJ1dGxlci1jb21tYW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vdXNlRXZlbnRIYW5kbGVyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgQW5nbGVUaGluUmlnaHRJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjb21tYW5kOiBDb21tYW5kO1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgb25DbGljazogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvbk1vdXNlRW50ZXI6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbmNvbnN0IEJ1dGxlckNvbW1hbmQgPSAocHJvcHM6IFByb3BzKSA9PiAoXG4gIDxkaXZcbiAgICBrZXk9e3Byb3BzLmNvbW1hbmQuaWR9XG4gICAgZGF0YS10ZXN0aWQ9e2BxdWljay1hY2Nlc3MtcmVzdWx0KCR7cHJvcHMuY29tbWFuZC5pZH0pYH1cbiAgICBhcmlhLWN1cnJlbnQ9e3Byb3BzLmlzU2VsZWN0ZWQgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgIGNzcz17Y3NzYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBhZGRpbmc6IDAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfTtcbiAgICAgIGhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICR7cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICA/IGBcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvckFjY2VudH07XG4gICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYFxuICAgICAgICA6ICcnfVxuICAgIGB9XG4gICAgb25Nb3VzZUVudGVyPXtwcm9wcy5vbk1vdXNlRW50ZXJ9XG4gICAgb25DbGljaz17cHJvcHMub25DbGlja31cbiAgPlxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBmbGV4OiAxIGF1dG87XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgYH1cbiAgICA+XG4gICAgICB7cHJvcHMuY29tbWFuZC50ZXh0fVxuICAgIDwvZGl2PlxuICAgIHsoKEFycmF5LmlzQXJyYXkocHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcykgJiZcbiAgICAgIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgIHR5cGVvZiBwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzID09PSAnZnVuY3Rpb24nKSAmJiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICA+ICoge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICBgfVxuICAgICAgPlxuICAgICAgICA8QW5nbGVUaGluUmlnaHRJY29uXG4gICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgY29sb3I9e3Byb3BzLmlzU2VsZWN0ZWQgPyAnc3VyZmFjZScgOiAnbmV1dHJhbDYwJ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuQnV0bGVyQ29tbWFuZC5kaXNwbGF5TmFtZSA9ICdCdXRsZXJDb21tYW5kJztcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyQ29tbWFuZDtcbiJdfQ== */",
115
114
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
116
115
  };
117
-
118
116
  var _ref2 = process.env.NODE_ENV === "production" ? {
119
117
  name: "lhzw0z",
120
118
  styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis"
@@ -124,10 +122,8 @@ var _ref2 = process.env.NODE_ENV === "production" ? {
124
122
  map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQ2MiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */",
125
123
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
126
124
  };
127
-
128
125
  const ButlerCommand = props => {
129
126
  var _context;
130
-
131
127
  return jsxs("div", {
132
128
  "data-testid": "quick-access-result(".concat(props.command.id, ")"),
133
129
  "aria-current": props.isSelected === true ? 'true' : 'false',
@@ -146,7 +142,6 @@ const ButlerCommand = props => {
146
142
  })]
147
143
  }, props.command.id);
148
144
  };
149
-
150
145
  ButlerCommand.propTypes = process.env.NODE_ENV !== "production" ? {
151
146
  command: _pt.any.isRequired,
152
147
  isSelected: _pt.bool,
@@ -405,39 +400,28 @@ var messages = defineMessages({
405
400
  });
406
401
 
407
402
  var _templateObject$3, _templateObject2$2;
408
-
409
403
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
410
-
411
404
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context12, _context13; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context12 = ownKeys(Object(source), !0)).call(_context12, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context13 = ownKeys(Object(source))).call(_context13, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
412
-
413
405
  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)."; }
414
-
415
406
  const isSelectAllCombo = event => event.key === 'a' && event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
416
-
417
407
  const isCloseCombo = event => event.key === 'Escape' && !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
418
-
419
408
  const getPlatform = () => {
420
409
  var _context, _context2, _context3, _context4;
421
-
422
410
  if (_includesInstanceProperty(_context = navigator.appVersion).call(_context, 'Win')) return 'windows';
423
411
  if (_includesInstanceProperty(_context2 = navigator.appVersion).call(_context2, 'Mac')) return 'macos';
424
412
  if (_includesInstanceProperty(_context3 = navigator.appVersion).call(_context3, 'X11')) return 'unix';
425
413
  if (_includesInstanceProperty(_context4 = navigator.appVersion).call(_context4, 'Linux')) return 'linux';
426
414
  return null;
427
415
  };
428
-
429
416
  const hasNewWindowModifier = event => {
430
417
  const platform = getPlatform();
431
-
432
418
  switch (platform) {
433
419
  case 'macos':
434
420
  return event.metaKey;
435
-
436
421
  default:
437
422
  return event.ctrlKey;
438
423
  }
439
424
  };
440
-
441
425
  const shakeAnimation = keyframes(_templateObject$3 || (_templateObject$3 = _taggedTemplateLiteral(["\n from,\n to {\n transform: translate3d(0, 0, 0);\n }\n\n 14%,\n 42%,\n 70% {\n transform: translate3d(-3px, 0, 0);\n }\n\n 28%,\n 56%,\n 84% {\n transform: translate3d(3px, 0, 0);\n }\n"])));
442
426
  const initialState = {
443
427
  hasNetworkError: false,
@@ -449,49 +433,41 @@ const initialState = {
449
433
  results: [],
450
434
  stack: []
451
435
  };
452
-
453
436
  const reducer = function () {
454
437
  var _context5;
455
-
456
438
  let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
457
439
  let action = arguments.length > 1 ? arguments[1] : undefined;
458
-
459
440
  switch (action.type) {
460
441
  case 'networkError':
461
442
  return _objectSpread(_objectSpread({}, state), {}, {
462
443
  hasNetworkError: action.payload
463
444
  });
464
-
465
445
  case 'loading':
466
446
  return _objectSpread(_objectSpread({}, state), {}, {
467
447
  isLoading: action.payload
468
448
  });
469
-
470
449
  case 'selectedResult':
471
450
  return _objectSpread(_objectSpread({}, state), {}, {
472
451
  selectedResult: action.payload
473
452
  });
474
-
475
453
  case 'incrementSelectedResult':
476
454
  return _objectSpread(_objectSpread({}, state), {}, {
477
455
  selectedResult: state.selectedResult === state.results.length - 1 ? 0 : state.selectedResult + 1,
478
456
  enableHistory: false
479
457
  });
480
-
481
458
  case 'decrementSelectedResult':
482
459
  return _objectSpread(_objectSpread({}, state), {}, {
483
460
  selectedResult: state.selectedResult < 1 ? state.results.length - 1 : state.selectedResult - 1,
484
461
  enableHistory: false
485
462
  });
486
-
487
463
  case 'pickCommandFromHistory':
488
464
  return _objectSpread(_objectSpread({}, state), {}, {
489
465
  selectedResult: 0,
490
466
  searchText: action.payload.searchText,
491
467
  results: action.payload.results,
492
- stack: [] // The history does not get changed here, it will be changed along
468
+ stack: []
469
+ // The history does not get changed here, it will be changed along
493
470
  // with the regular flow.
494
-
495
471
  });
496
472
 
497
473
  case 'setNextCommands':
@@ -505,7 +481,6 @@ const reducer = function () {
505
481
  enableHistory: false,
506
482
  results: action.payload.results
507
483
  });
508
-
509
484
  case 'setPrevCommands':
510
485
  return _objectSpread(_objectSpread({}, state), {}, {
511
486
  searchText: action.payload.searchText,
@@ -515,7 +490,6 @@ const reducer = function () {
515
490
  // omit last item
516
491
  stack: _sliceInstanceProperty(_context5 = state.stack).call(_context5, 0, -1)
517
492
  });
518
-
519
493
  case 'searchText':
520
494
  return _objectSpread(_objectSpread({}, state), {}, {
521
495
  searchText: action.payload,
@@ -523,7 +497,6 @@ const reducer = function () {
523
497
  // are tempted to retry
524
498
  hasNetworkError: action.payload.length > 0 && state.hasNetworkError
525
499
  });
526
-
527
500
  case 'setSearchTextResults':
528
501
  return _objectSpread(_objectSpread({}, state), {}, {
529
502
  results: action.payload,
@@ -531,28 +504,23 @@ const reducer = function () {
531
504
  enableHistory: true,
532
505
  stack: []
533
506
  });
534
-
535
507
  case 'resetSearchText':
536
508
  return _objectSpread(_objectSpread({}, state), {}, {
537
509
  searchText: '',
538
510
  results: [],
539
511
  selectedResult: -1
540
512
  });
541
-
542
513
  case 'resetResultsWhenClosing':
543
514
  return _objectSpread(_objectSpread({}, state), {}, {
544
515
  selectedResult: -1,
545
516
  enableHistory: true
546
517
  });
547
-
548
518
  case 'reset':
549
519
  return initialState;
550
-
551
520
  default:
552
521
  return state;
553
522
  }
554
523
  };
555
-
556
524
  var _ref = process.env.NODE_ENV === "production" ? {
557
525
  name: "zjik7",
558
526
  styles: "display:flex"
@@ -562,15 +530,12 @@ var _ref = process.env.NODE_ENV === "production" ? {
562
530
  map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ25Ca0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */",
563
531
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
564
532
  };
565
-
566
533
  const Butler = props => {
567
534
  const intl = useIntl();
568
-
569
535
  const _useReducer = useReducer(reducer, initialState),
570
- _useReducer2 = _slicedToArray(_useReducer, 2),
571
- state = _useReducer2[0],
572
- dispatch = _useReducer2[1];
573
-
536
+ _useReducer2 = _slicedToArray(_useReducer, 2),
537
+ state = _useReducer2[0],
538
+ dispatch = _useReducer2[1];
574
539
  const shouldSelectFieldText = useRef(false);
575
540
  const isNewWindowCombo = useRef(false);
576
541
  const skipNextSelection = useRef(false);
@@ -599,44 +564,47 @@ const Butler = props => {
599
564
  type: 'loading',
600
565
  payload: false
601
566
  });
602
- }, []); // Destructure functions from props to reference them in the hook dependency list
567
+ }, []);
603
568
 
569
+ // Destructure functions from props to reference them in the hook dependency list
604
570
  const searchFromParent = props.search,
605
- onCloseFromParent = props.onClose,
606
- executeCommandFromParent = props.executeCommand,
607
- onHistoryEntriesChangeFromParent = props.onHistoryEntriesChange,
608
- getNextCommandsFromParent = props.getNextCommands;
571
+ onCloseFromParent = props.onClose,
572
+ executeCommandFromParent = props.executeCommand,
573
+ onHistoryEntriesChangeFromParent = props.onHistoryEntriesChange,
574
+ getNextCommandsFromParent = props.getNextCommands;
609
575
  const shake = useCallback(() => {
610
576
  if (searchContainerRef.current) {
611
- searchContainerRef.current.classList.remove(props.classNameShakeAnimation); // -> triggering reflow
577
+ searchContainerRef.current.classList.remove(props.classNameShakeAnimation);
578
+ // -> triggering reflow
612
579
  // eslint-disable-next-line no-void
613
-
614
580
  void searchContainerRef.current.offsetWidth;
615
581
  searchContainerRef.current.classList.add(props.classNameShakeAnimation);
616
582
  }
617
583
  }, [props.classNameShakeAnimation]);
618
584
  const execute = useCallback((command, meta) => {
619
585
  var _context6;
620
-
621
586
  // Only main entries get added to history, so when a subcommand is executed,
622
587
  // we add the main command of it to the history (the top-level command).
623
588
  //
624
589
  // The key to identify history entries by is always the searchText
625
590
  // There will never be two history entries with the same searchText
626
- const entry = state.stack.length === 0 ? // The stack is empty, so we are executing a top-level command
591
+ const entry = state.stack.length === 0 ?
592
+ // The stack is empty, so we are executing a top-level command
627
593
  {
628
594
  searchText: state.searchText,
629
595
  results: state.results
630
- } : // We are executing a subcommand, so we get the top-level command for it,
596
+ } :
597
+ // We are executing a subcommand, so we get the top-level command for it,
631
598
  // which is at the bottom of the stack.
632
599
  {
633
600
  searchText: state.stack[0].searchText,
634
601
  results: state.stack[0].results
635
- }; // Add the entry to the history, while excluding any earlier history entry
602
+ };
603
+
604
+ // Add the entry to the history, while excluding any earlier history entry
636
605
  // with the same search text. This effectively "moves" that entry to the
637
606
  // top of the history (with the most recent results), or appends a new entry
638
607
  // when it didn't exist before.
639
-
640
608
  onHistoryEntriesChangeFromParent([..._filterInstanceProperty(_context6 = props.historyEntries).call(_context6, command => command.searchText !== entry.searchText), entry]);
641
609
  dispatch({
642
610
  type: 'resetSearchText'
@@ -646,14 +614,17 @@ const Butler = props => {
646
614
  }, [executeCommandFromParent, onCloseFromParent, onHistoryEntriesChangeFromParent, props.historyEntries, state.results, state.searchText, state.stack]);
647
615
  const handleKeyDown = useCallback(event => {
648
616
  // Preventing cursor jumps can only happen in onKeyDown, but not in onKeyUp
649
- event.persist(); // We want to know when the user presses cmd+enter (cmd being a meta key).
617
+ event.persist();
618
+
619
+ // We want to know when the user presses cmd+enter (cmd being a meta key).
650
620
  // We are only told about this in keyDown, but not in keyUp, so we need
651
621
  // to handle it here
652
-
653
622
  if (event.key === 'Enter' && hasNewWindowModifier(event)) {
654
623
  isNewWindowCombo.current = true;
655
624
  return;
656
- } // Avoid selecting the whole page when user selectes everything with
625
+ }
626
+
627
+ // Avoid selecting the whole page when user selectes everything with
657
628
  // a keyboard shortcut. There is probably a better way to do this though.
658
629
  // This prevents the whole page from being selected in case the user
659
630
  // 1) opens the search box
@@ -661,27 +632,23 @@ const Butler = props => {
661
632
  // 3) selects all text using cmd+a
662
633
  // 4) closes the search box with esc
663
634
  // Without this handling, the whole page would now be selected
664
-
665
-
666
635
  if (isSelectAllCombo(event)) {
667
636
  // This stops the browser from selecting anything
668
637
  event.preventDefault();
669
-
670
638
  if (searchInputRef.current) {
671
639
  // This selects the text in the search input
672
640
  searchInputRef.current.setSelectionRange(0, state.searchText.length);
673
641
  }
674
-
675
642
  return;
676
- } // avoid interfering with other key combinations using modifier keys
677
-
643
+ }
678
644
 
645
+ // avoid interfering with other key combinations using modifier keys
679
646
  if (event.ctrlKey || event.altKey || event.shiftKey || event.metaKey) return;
680
- if (isCloseCombo(event)) return; // skip next mouseEnter to avoid setting selectedResult when cursor just
681
- // happens to be where the results will pop up
647
+ if (isCloseCombo(event)) return;
682
648
 
649
+ // skip next mouseEnter to avoid setting selectedResult when cursor just
650
+ // happens to be where the results will pop up
683
651
  skipNextSelection.current = true;
684
-
685
652
  if (event.key === 'ArrowDown') {
686
653
  // prevent cursor from jumping to end of text input
687
654
  event.preventDefault();
@@ -690,24 +657,26 @@ const Butler = props => {
690
657
  });
691
658
  return;
692
659
  }
693
-
694
660
  if (event.key === 'ArrowUp') {
695
661
  // browse through history
696
662
  if (state.searchText.length === 0 || state.selectedResult < 1 && state.enableHistory) {
697
663
  var _context7;
698
-
699
664
  shouldSelectFieldText.current = true;
700
- const selectedIndex = state.searchText.length === 0 ? // When going back the first step
701
- -1 : // When going back more than one step
702
- _findIndexInstanceProperty(_context7 = props.historyEntries).call(_context7, command => command.searchText === state.searchText); // Pick the previous command from the history
703
-
704
- const prevCommand = selectedIndex === -1 ? // previous command on top of the history when going back on
665
+ const selectedIndex = state.searchText.length === 0 ?
666
+ // When going back the first step
667
+ -1 :
668
+ // When going back more than one step
669
+ _findIndexInstanceProperty(_context7 = props.historyEntries).call(_context7, command => command.searchText === state.searchText);
670
+ // Pick the previous command from the history
671
+ const prevCommand = selectedIndex === -1 ?
672
+ // previous command on top of the history when going back on
705
673
  // first step
706
- last(props.historyEntries) : // previous command is deeper down
674
+ last(props.historyEntries) :
675
+ // previous command is deeper down
707
676
  // When the history does not exist (negative index), then
708
677
  // this implicitly returns undefined
709
- props.historyEntries[selectedIndex - 1]; // Skip when no previous entry exists in the history
710
-
678
+ props.historyEntries[selectedIndex - 1];
679
+ // Skip when no previous entry exists in the history
711
680
  if (!prevCommand) return;
712
681
  dispatch({
713
682
  type: 'pickCommandFromHistory',
@@ -717,32 +686,32 @@ const Butler = props => {
717
686
  }
718
687
  });
719
688
  return;
720
- } // prevent cursor from jumping to beginning of text input
721
-
722
-
689
+ }
690
+ // prevent cursor from jumping to beginning of text input
723
691
  event.preventDefault();
724
692
  dispatch({
725
693
  type: 'decrementSelectedResult'
726
694
  });
727
695
  return;
728
696
  }
729
-
730
697
  if (state.selectedResult > -1) {
731
698
  if (event.key === 'ArrowRight') {
732
699
  const command = state.results[state.selectedResult];
733
700
  const searchText = state.searchText;
734
701
  const isCursorAtEnd = searchInputRef.current && state.searchText.length === searchInputRef.current.selectionStart;
735
- const isEverythingSelected = searchInputRef.current && searchInputRef.current.selectionStart === 0 && state.searchText.length === searchInputRef.current.selectionEnd; // only allow diving in when cursor is at end of input or when
736
- // the complete text is selected (when browsing through history)
702
+ const isEverythingSelected = searchInputRef.current && searchInputRef.current.selectionStart === 0 && state.searchText.length === searchInputRef.current.selectionEnd;
737
703
 
704
+ // only allow diving in when cursor is at end of input or when
705
+ // the complete text is selected (when browsing through history)
738
706
  if (!isCursorAtEnd && !isEverythingSelected) return;
739
- unsetHasNetworkError(); // NOTE: since we need to fetch the "next command", which is an async operation,
740
- // we use a IIFE to process that and eventually update the state.
707
+ unsetHasNetworkError();
741
708
 
709
+ // NOTE: since we need to fetch the "next command", which is an async operation,
710
+ // we use a IIFE to process that and eventually update the state.
742
711
  (async () => {
743
712
  if (command) {
744
- const nextCommands = await getNextCommandsFromParent(command); // avoid moving cursor when there are sub-options
745
-
713
+ const nextCommands = await getNextCommandsFromParent(command);
714
+ // avoid moving cursor when there are sub-options
746
715
  if (nextCommands.length > 0) {
747
716
  // Ensure the search text has not changed while we were loading
748
717
  // the next results, otherwise we'd interrupt the user.
@@ -755,23 +724,21 @@ const Butler = props => {
755
724
  }
756
725
  });
757
726
  }
758
-
759
727
  return;
760
728
  }
761
729
  }
762
-
763
730
  shake();
764
731
  })();
765
-
766
732
  return;
767
733
  }
768
-
769
734
  if (event.key === 'ArrowLeft') {
770
735
  // go left in stack
771
- const prevCommand = last(state.stack); // do nothing when we can't go left anymore
736
+ const prevCommand = last(state.stack);
772
737
 
773
- if (!prevCommand) return; // prevent cursor from jumping a char to the left in text input
738
+ // do nothing when we can't go left anymore
739
+ if (!prevCommand) return;
774
740
 
741
+ // prevent cursor from jumping a char to the left in text input
775
742
  event.preventDefault();
776
743
  dispatch({
777
744
  type: 'setPrevCommands',
@@ -792,11 +759,12 @@ const Butler = props => {
792
759
  input.select();
793
760
  shouldSelectFieldText.current = false;
794
761
  }
762
+ if (event.key !== 'Enter' && !isNewWindowCombo.current) return true;
795
763
 
796
- if (event.key !== 'Enter' && !isNewWindowCombo.current) return true; // User just triggered the search
797
-
798
- if (state.selectedResult === -1) return true; // User had something selected and wants to go there
764
+ // User just triggered the search
765
+ if (state.selectedResult === -1) return true;
799
766
 
767
+ // User had something selected and wants to go there
800
768
  execute(state.results[state.selectedResult], {
801
769
  openInNewTab: isNewWindowCombo.current
802
770
  });
@@ -805,28 +773,25 @@ const Butler = props => {
805
773
  }, [execute, state.results, state.selectedResult]);
806
774
  const handleChange = useCallback(event => {
807
775
  const searchText = event.target.value;
808
-
809
776
  if (_trimInstanceProperty(searchText).call(searchText).length === 0) {
810
777
  dispatch({
811
778
  type: 'reset'
812
779
  });
813
780
  return;
814
781
  }
815
-
816
782
  dispatch({
817
783
  type: 'searchText',
818
784
  payload: searchText
819
- }); // A search via network is only triggered when there
785
+ });
786
+
787
+ // A search via network is only triggered when there
820
788
  // are more than three characters. So no false loading
821
789
  // indication is given.
822
-
823
790
  if (_trimInstanceProperty(searchText).call(searchText).length > 3) {
824
791
  setIsLoading();
825
792
  }
826
-
827
793
  searchFromParent(searchText).then(asyncResults => {
828
794
  var _context8, _context9;
829
-
830
795
  unsetHasNetworkError();
831
796
  unsetIsLoading();
832
797
  const fuse = new Fuse(asyncResults, {
@@ -840,11 +805,11 @@ const Butler = props => {
840
805
  minMatchCharLength: 2,
841
806
  includeScore: true
842
807
  });
843
-
844
- const searchResults = _sliceInstanceProperty(_context8 = _filterInstanceProperty(_context9 = fuse.search(searchText) // Filter out results with a matching score over 0.75
845
- ).call(_context9, result => result.score ? result.score < 0.75 : false) // Keep a maximal of 9 results
808
+ const searchResults = _sliceInstanceProperty(_context8 = _filterInstanceProperty(_context9 = fuse.search(searchText)
809
+ // Filter out results with a matching score over 0.75
810
+ ).call(_context9, result => result.score ? result.score < 0.75 : false)
811
+ // Keep a maximal of 9 results
846
812
  ).call(_context8, 0, 9);
847
-
848
813
  dispatch({
849
814
  type: 'setSearchTextResults',
850
815
  payload: _mapInstanceProperty(searchResults).call(searchResults, result => result.item)
@@ -873,9 +838,9 @@ const Butler = props => {
873
838
  if (skipNextSelection.current) {
874
839
  skipNextSelection.current = false;
875
840
  return;
876
- } // sets the selected result, mainly for the hover effect
877
-
841
+ }
878
842
 
843
+ // sets the selected result, mainly for the hover effect
879
844
  dispatch({
880
845
  type: 'selectedResult',
881
846
  payload: index
@@ -927,7 +892,6 @@ const Butler = props => {
927
892
  })]
928
893
  }), (() => {
929
894
  var _context10, _context11;
930
-
931
895
  if (state.hasNetworkError) return jsx("div", {
932
896
  css: /*#__PURE__*/css("overflow:hidden;white-space:nowrap;cursor:default;background:", customProperties.colorError, ";text-align:center;text-transform:uppercase;color:", customProperties.colorSurface, ";font-size:", customProperties.fontSizeSmall, ";padding:", customProperties.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdXFCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgU2VhcmNoSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBMb2FkaW5nU3Bpbm5lciBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IEJ1dGxlckNvbW1hbmQgZnJvbSAnLi4vYnV0bGVyLWNvbW1hbmQnO1xuaW1wb3J0IEJ1dGxlckNvbnRhaW5lciBmcm9tICcuLi9idXRsZXItY29udGFpbmVyJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIFNlYXJjaFRleHQsXG4gIFNlbGVjdGVkUmVzdWx0LFxuICBTdGFjayxcbiAgSGlzdG9yeUVudHJ5LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGlzU2VsZWN0QWxsQ29tYm8gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gIGV2ZW50LmtleSA9PT0gJ2EnICYmXG4gIGV2ZW50Lm1ldGFLZXkgJiZcbiAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgIWV2ZW50LmFsdEtleSAmJlxuICAhZXZlbnQuc2hpZnRLZXk7XG5cbmNvbnN0IGlzQ2xvc2VDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJlxuICAhZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSAoKSA9PiB7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnV2luJykpIHJldHVybiAnd2luZG93cyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTWFjJykpIHJldHVybiAnbWFjb3MnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ1gxMScpKSByZXR1cm4gJ3VuaXgnO1xuICBpZiAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5jbHVkZXMoJ0xpbnV4JykpIHJldHVybiAnbGludXgnO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaGFzTmV3V2luZG93TW9kaWZpZXIgPSAoXG4gIGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PiB8IE1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybSgpO1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnbWFjb3MnOlxuICAgICAgcmV0dXJuIGV2ZW50Lm1ldGFLZXk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldmVudC5jdHJsS2V5O1xuICB9XG59O1xuXG5jb25zdCBzaGFrZUFuaW1hdGlvbiA9IGtleWZyYW1lc2BcbiAgZnJvbSxcbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAxNCUsXG4gIDQyJSxcbiAgNzAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApO1xuICB9XG5cbiAgMjglLFxuICA1NiUsXG4gIDg0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzcHgsIDAsIDApO1xuICB9XG5gO1xuXG50eXBlIFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDtcbiAgc2VsZWN0ZWRSZXN1bHQ6IFNlbGVjdGVkUmVzdWx0O1xuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiBib29sZWFuO1xuICByZXN1bHRzOiBDb21tYW5kW107XG4gIHN0YWNrOiBTdGFja1tdO1xufTtcbnR5cGUgQWN0aW9uID1cbiAgfCB7IHR5cGU6ICduZXR3b3JrRXJyb3InOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdsb2FkaW5nJzsgcGF5bG9hZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnOyBwYXlsb2FkOiBudW1iZXIgfVxuICB8IHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9XG4gIHwgeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7XG4gICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeSc7XG4gICAgICBwYXlsb2FkOiB7IHNlYXJjaFRleHQ6IFNlYXJjaFRleHQ7IHJlc3VsdHM6IENvbW1hbmRbXSB9O1xuICAgIH1cbiAgfCB7IHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnOyBwYXlsb2FkOiB7IHJlc3VsdHM6IENvbW1hbmRbXSB9IH1cbiAgfCB7XG4gICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NlYXJjaFRleHQnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJzsgcGF5bG9hZDogQ29tbWFuZFtdIH1cbiAgfCB7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH1cbiAgfCB7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfVxuICB8IHsgdHlwZTogJ3Jlc2V0JyB9O1xuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBoYXNOZXR3b3JrRXJyb3I6IGZhbHNlLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBzZWFyY2hUZXh0OiAnJyxcbiAgc2VsZWN0ZWRSZXN1bHQ6IC0xLFxuICAvLyBVc2VkIGZvciBVWCB3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeVxuICBlbmFibGVIaXN0b3J5OiB0cnVlLFxuICByZXN1bHRzOiBbXSxcbiAgc3RhY2s6IFtdLFxufTtcbmNvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IEFjdGlvbik6IFN0YXRlID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ25ldHdvcmtFcnJvcic6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlzTG9hZGluZzogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdzZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OlxuICAgICAgICAgIHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSBzdGF0ZS5yZXN1bHRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCArIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxXG4gICAgICAgICAgICA/IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgOiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCAtIDEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgICAvLyBUaGUgaGlzdG9yeSBkb2VzIG5vdCBnZXQgY2hhbmdlZCBoZXJlLCBpdCB3aWxsIGJlIGNoYW5nZWQgYWxvbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVndWxhciBmbG93LlxuICAgICAgfTtcbiAgICBjYXNlICdzZXROZXh0Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHN0YWNrOiBbXG4gICAgICAgICAgLi4uc3RhdGUuc3RhY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMsXG4gICAgICAgICAgICBzZWxlY3RlZFJlc3VsdDogc3RhdGUuc2VsZWN0ZWRSZXN1bHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgfTtcbiAgICBjYXNlICdzZXRQcmV2Q29tbWFuZHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlYXJjaFRleHQ6IGFjdGlvbi5wYXlsb2FkLnNlYXJjaFRleHQsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBlbmFibGVIaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgLy8gb21pdCBsYXN0IGl0ZW1cbiAgICAgICAgc3RhY2s6IHN0YXRlLnN0YWNrLnNsaWNlKDAsIC0xKSxcbiAgICAgIH07XG4gICAgY2FzZSAnc2VhcmNoVGV4dCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIC8vIGNsZWFyIG5ldHdvcmsgZXJyb3Igd2hlbiBzZWFyY2ggdGV4dCBpcyBjbGVhcmVkLCBzbyB0aGF0IHVzZXJzXG4gICAgICAgIC8vIGFyZSB0ZW1wdGVkIHRvIHJldHJ5XG4gICAgICAgIGhhc05ldHdvcmtFcnJvcjogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCAmJiBzdGF0ZS5oYXNOZXR3b3JrRXJyb3IsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFNlYXJjaFRleHRSZXN1bHRzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLmxlbmd0aCA+IDAgPyAwIDogLTEsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gICAgICAgIHN0YWNrOiBbXSxcbiAgICAgIH07XG4gICAgY2FzZSAncmVzZXRTZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hUZXh0OiAnJywgcmVzdWx0czogW10sIHNlbGVjdGVkUmVzdWx0OiAtMSB9O1xuICAgIGNhc2UgJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogLTEsIGVuYWJsZUhpc3Rvcnk6IHRydWUgfTtcbiAgICBjYXNlICdyZXNldCc6XG4gICAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXTtcbiAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogKGhpc3RvcnlFbnRyaWVzOiBIaXN0b3J5RW50cnlbXSkgPT4gdm9pZDtcbiAgc2VhcmNoOiAoc2VhcmNoVGV4dDogU2VhcmNoVGV4dCkgPT4gUHJvbWlzZTxDb21tYW5kW10+O1xuICBnZXROZXh0Q29tbWFuZHM6IChjb21tYW5kOiBDb21tYW5kKSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGV4ZWN1dGVDb21tYW5kOiAoY29tbWFuZDogQ29tbWFuZCwgbWV0YTogeyBvcGVuSW5OZXdUYWI6IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgY2xhc3NOYW1lU2hha2VBbmltYXRpb246IHN0cmluZztcbn07XG5jb25zdCBCdXRsZXIgPSAocHJvcHM6IFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtzdGF0ZSwgZGlzcGF0Y2hdID0gdXNlUmVkdWNlcjxcbiAgICAocHJldlN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pID0+IFN0YXRlXG4gID4ocmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcblxuICBjb25zdCBzaG91bGRTZWxlY3RGaWVsZFRleHQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc05ld1dpbmRvd0NvbWJvID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2tpcE5leHRTZWxlY3Rpb24gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBzZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCBzZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRJc0xvYWRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbG9hZGluZycsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRGVzdHJ1Y3R1cmUgZnVuY3Rpb25zIGZyb20gcHJvcHMgdG8gcmVmZXJlbmNlIHRoZW0gaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0XG4gIGNvbnN0IHtcbiAgICBzZWFyY2g6IHNlYXJjaEZyb21QYXJlbnQsXG4gICAgb25DbG9zZTogb25DbG9zZUZyb21QYXJlbnQsXG4gICAgZXhlY3V0ZUNvbW1hbmQ6IGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICBnZXROZXh0Q29tbWFuZHM6IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzaGFrZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXG4gICAgICApO1xuICAgICAgLy8gLT4gdHJpZ2dlcmluZyByZWZsb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICB2b2lkIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoO1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbik7XG4gICAgfVxuICB9LCBbcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25dKTtcblxuICBjb25zdCBleGVjdXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQsIG1ldGEpID0+IHtcbiAgICAgIC8vIE9ubHkgbWFpbiBlbnRyaWVzIGdldCBhZGRlZCB0byBoaXN0b3J5LCBzbyB3aGVuIGEgc3ViY29tbWFuZCBpcyBleGVjdXRlZCxcbiAgICAgIC8vIHdlIGFkZCB0aGUgbWFpbiBjb21tYW5kIG9mIGl0IHRvIHRoZSBoaXN0b3J5ICh0aGUgdG9wLWxldmVsIGNvbW1hbmQpLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBrZXkgdG8gaWRlbnRpZnkgaGlzdG9yeSBlbnRyaWVzIGJ5IGlzIGFsd2F5cyB0aGUgc2VhcmNoVGV4dFxuICAgICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSB0d28gaGlzdG9yeSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgc2VhcmNoVGV4dFxuICAgICAgY29uc3QgZW50cnkgPVxuICAgICAgICBzdGF0ZS5zdGFjay5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IC8vIFRoZSBzdGFjayBpcyBlbXB0eSwgc28gd2UgYXJlIGV4ZWN1dGluZyBhIHRvcC1sZXZlbCBjb21tYW5kXG4gICAgICAgICAgICB7IHNlYXJjaFRleHQ6IHN0YXRlLnNlYXJjaFRleHQsIHJlc3VsdHM6IHN0YXRlLnJlc3VsdHMgfVxuICAgICAgICAgIDogLy8gV2UgYXJlIGV4ZWN1dGluZyBhIHN1YmNvbW1hbmQsIHNvIHdlIGdldCB0aGUgdG9wLWxldmVsIGNvbW1hbmQgZm9yIGl0LFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHN0YXRlLnN0YWNrWzBdLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHN0YXRlLnN0YWNrWzBdLnJlc3VsdHMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAvLyBBZGQgdGhlIGVudHJ5IHRvIHRoZSBoaXN0b3J5LCB3aGlsZSBleGNsdWRpbmcgYW55IGVhcmxpZXIgaGlzdG9yeSBlbnRyeVxuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBzZWFyY2ggdGV4dC4gVGhpcyBlZmZlY3RpdmVseSBcIm1vdmVzXCIgdGhhdCBlbnRyeSB0byB0aGVcbiAgICAgIC8vIHRvcCBvZiB0aGUgaGlzdG9yeSAod2l0aCB0aGUgbW9zdCByZWNlbnQgcmVzdWx0cyksIG9yIGFwcGVuZHMgYSBuZXcgZW50cnlcbiAgICAgIC8vIHdoZW4gaXQgZGlkbid0IGV4aXN0IGJlZm9yZS5cbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50KFtcbiAgICAgICAgLi4ucHJvcHMuaGlzdG9yeUVudHJpZXMuZmlsdGVyKFxuICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgIT09IGVudHJ5LnNlYXJjaFRleHRcbiAgICAgICAgKSxcbiAgICAgICAgZW50cnksXG4gICAgICBdKTtcblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRTZWFyY2hUZXh0JyB9KTtcblxuICAgICAgb25DbG9zZUZyb21QYXJlbnQoKTtcblxuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50KGNvbW1hbmQsIG1ldGEpO1xuICAgIH0sXG4gICAgW1xuICAgICAgZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgICAgb25DbG9zZUZyb21QYXJlbnQsXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc3RhdGUucmVzdWx0cyxcbiAgICAgIHN0YXRlLnNlYXJjaFRleHQsXG4gICAgICBzdGF0ZS5zdGFjayxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBQcmV2ZW50aW5nIGN1cnNvciBqdW1wcyBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlEb3duLCBidXQgbm90IGluIG9uS2V5VXBcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBrbm93IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBjbWQrZW50ZXIgKGNtZCBiZWluZyBhIG1ldGEga2V5KS5cbiAgICAgIC8vIFdlIGFyZSBvbmx5IHRvbGQgYWJvdXQgdGhpcyBpbiBrZXlEb3duLCBidXQgbm90IGluIGtleVVwLCBzbyB3ZSBuZWVkXG4gICAgICAvLyB0byBoYW5kbGUgaXQgaGVyZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCkpIHtcbiAgICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdm9pZCBzZWxlY3RpbmcgdGhlIHdob2xlIHBhZ2Ugd2hlbiB1c2VyIHNlbGVjdGVzIGV2ZXJ5dGhpbmcgd2l0aFxuICAgICAgLy8gYSBrZXlib2FyZCBzaG9ydGN1dC4gVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhvdWdoLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd2hvbGUgcGFnZSBmcm9tIGJlaW5nIHNlbGVjdGVkIGluIGNhc2UgdGhlIHVzZXJcbiAgICAgIC8vIDEpIG9wZW5zIHRoZSBzZWFyY2ggYm94XG4gICAgICAvLyAyKSB0eXBlcyBpbnRvIGl0XG4gICAgICAvLyAzKSBzZWxlY3RzIGFsbCB0ZXh0IHVzaW5nIGNtZCthXG4gICAgICAvLyA0KSBjbG9zZXMgdGhlIHNlYXJjaCBib3ggd2l0aCBlc2NcbiAgICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGluZywgdGhlIHdob2xlIHBhZ2Ugd291bGQgbm93IGJlIHNlbGVjdGVkXG4gICAgICBpZiAoaXNTZWxlY3RBbGxDb21ibyhldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzdG9wcyB0aGUgYnJvd3NlciBmcm9tIHNlbGVjdGluZyBhbnl0aGluZ1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoc2VhcmNoSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIC8vIFRoaXMgc2VsZWN0cyB0aGUgdGV4dCBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZXRTZWxlY3Rpb25SYW5nZSgwLCBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIG90aGVyIGtleSBjb21iaW5hdGlvbnMgdXNpbmcgbW9kaWZpZXIga2V5c1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmIChpc0Nsb3NlQ29tYm8oZXZlbnQpKSByZXR1cm47XG5cbiAgICAgIC8vIHNraXAgbmV4dCBtb3VzZUVudGVyIHRvIGF2b2lkIHNldHRpbmcgc2VsZWN0ZWRSZXN1bHQgd2hlbiBjdXJzb3IganVzdFxuICAgICAgLy8gaGFwcGVucyB0byBiZSB3aGVyZSB0aGUgcmVzdWx0cyB3aWxsIHBvcCB1cFxuICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBlbmQgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAvLyBicm93c2UgdGhyb3VnaCBoaXN0b3J5XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDEgJiYgc3RhdGUuZW5hYmxlSGlzdG9yeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPVxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgPyAvLyBXaGVuIGdvaW5nIGJhY2sgdGhlIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICA6IC8vIFdoZW4gZ29pbmcgYmFjayBtb3JlIHRoYW4gb25lIHN0ZXBcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ID09PSBzdGF0ZS5zZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAvLyBQaWNrIHRoZSBwcmV2aW91cyBjb21tYW5kIGZyb20gdGhlIGhpc3RvcnlcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4ID09PSAtMVxuICAgICAgICAgICAgICA/IC8vIHByZXZpb3VzIGNvbW1hbmQgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHdoZW4gZ29pbmcgYmFjayBvblxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHN0ZXBcbiAgICAgICAgICAgICAgICBsYXN0KHByb3BzLmhpc3RvcnlFbnRyaWVzKVxuICAgICAgICAgICAgICA6IC8vIHByZXZpb3VzIGNvbW1hbmQgaXMgZGVlcGVyIGRvd25cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBoaXN0b3J5IGRvZXMgbm90IGV4aXN0IChuZWdhdGl2ZSBpbmRleCksIHRoZW5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGltcGxpY2l0bHkgcmV0dXJucyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBwcm9wcy5oaXN0b3J5RW50cmllc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgICAgLy8gU2tpcCB3aGVuIG5vIHByZXZpb3VzIGVudHJ5IGV4aXN0cyBpbiB0aGUgaGlzdG9yeVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAncGlja0NvbW1hbmRGcm9tSGlzdG9yeScsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gYmVnaW5uaW5nIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnZGVjcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPiAtMSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICBjb25zdCBjb21tYW5kID0gc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF07XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHN0YXRlLnNlYXJjaFRleHQ7XG4gICAgICAgICAgY29uc3QgaXNDdXJzb3JBdEVuZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIGNvbnN0IGlzRXZlcnl0aGluZ1NlbGVjdGVkID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcblxuICAgICAgICAgIC8vIG9ubHkgYWxsb3cgZGl2aW5nIGluIHdoZW4gY3Vyc29yIGlzIGF0IGVuZCBvZiBpbnB1dCBvciB3aGVuXG4gICAgICAgICAgLy8gdGhlIGNvbXBsZXRlIHRleHQgaXMgc2VsZWN0ZWQgKHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5KVxuICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCAmJiAhaXNFdmVyeXRoaW5nU2VsZWN0ZWQpIHJldHVybjtcblxuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG5cbiAgICAgICAgICAvLyBOT1RFOiBzaW5jZSB3ZSBuZWVkIHRvIGZldGNoIHRoZSBcIm5leHQgY29tbWFuZFwiLCB3aGljaCBpcyBhbiBhc3luYyBvcGVyYXRpb24sXG4gICAgICAgICAgLy8gd2UgdXNlIGEgSUlGRSB0byBwcm9jZXNzIHRoYXQgYW5kIGV2ZW50dWFsbHkgdXBkYXRlIHRoZSBzdGF0ZS5cbiAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dENvbW1hbmRzID0gYXdhaXQgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudChjb21tYW5kKTtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgbW92aW5nIGN1cnNvciB3aGVuIHRoZXJlIGFyZSBzdWItb3B0aW9uc1xuICAgICAgICAgICAgICBpZiAobmV4dENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIHNlYXJjaCB0ZXh0IGhhcyBub3QgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCByZXN1bHRzLCBvdGhlcndpc2Ugd2UnZCBpbnRlcnJ1cHQgdGhlIHVzZXIuXG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSB0aGUgcmVzdWx0cyBpbiBjYXNlIHRoZSBzZWFyY2ggdGV4dCBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhcmNoVGV4dCA9PT0gc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2V0TmV4dENvbW1hbmRzJyxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogeyByZXN1bHRzOiBuZXh0Q29tbWFuZHMgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWtlKCk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAvLyBnbyBsZWZ0IGluIHN0YWNrXG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPSBsYXN0KHN0YXRlLnN0YWNrKTtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiB3ZSBjYW4ndCBnbyBsZWZ0IGFueW1vcmVcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgYSBjaGFyIHRvIHRoZSBsZWZ0IGluIHRleHQgaW5wdXRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFByZXZDb21tYW5kcycsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFRleHQ6IHByZXZDb21tYW5kLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgIHJlc3VsdHM6IHByZXZDb21tYW5kLnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLFxuICAgICAgc2hha2UsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5VXBcbiAgICAgIGlmIChzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VudGVyJyAmJiAhaXNOZXdXaW5kb3dDb21iby5jdXJyZW50KSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBqdXN0IHRyaWdnZXJlZCB0aGUgc2VhcmNoXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IC0xKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVXNlciBoYWQgc29tZXRoaW5nIHNlbGVjdGVkIGFuZCB3YW50cyB0byBnbyB0aGVyZVxuICAgICAgZXhlY3V0ZShzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XSwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGlzTmV3V2luZG93Q29tYm8uY3VycmVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgW2V4ZWN1dGUsIHN0YXRlLnJlc3VsdHMsIHN0YXRlLnNlbGVjdGVkUmVzdWx0XVxuICApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjazxDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlYXJjaFRleHQnLCBwYXlsb2FkOiBzZWFyY2hUZXh0IH0pO1xuXG4gICAgICAvLyBBIHNlYXJjaCB2aWEgbmV0d29yayBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbW9yZSB0aGFuIHRocmVlIGNoYXJhY3RlcnMuIFNvIG5vIGZhbHNlIGxvYWRpbmdcbiAgICAgIC8vIGluZGljYXRpb24gaXMgZ2l2ZW4uXG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMykge1xuICAgICAgICBzZXRJc0xvYWRpbmcoKTtcbiAgICAgIH1cblxuICAgICAgc2VhcmNoRnJvbVBhcmVudChzZWFyY2hUZXh0KS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHRzOiBDb21tYW5kW10pID0+IHtcbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoYXN5bmNSZXN1bHRzLCB7XG4gICAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB3ZWlnaHQ6IDAuNiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICdrZXl3b3JkcycsIHdlaWdodDogMC40IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoOiAyLFxuICAgICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGZ1c2VcbiAgICAgICAgICAgIC5zZWFyY2goc2VhcmNoVGV4dClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcmVzdWx0cyB3aXRoIGEgbWF0Y2hpbmcgc2NvcmUgb3ZlciAwLjc1XG4gICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPyByZXN1bHQuc2NvcmUgPCAwLjc1IDogZmFsc2UpKVxuICAgICAgICAgICAgLy8gS2VlcCBhIG1heGltYWwgb2YgOSByZXN1bHRzXG4gICAgICAgICAgICAuc2xpY2UoMCwgOSk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnLFxuICAgICAgICAgICAgcGF5bG9hZDogc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lml0ZW0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcbiAgICAgICAgICBzZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlYXJjaEZyb21QYXJlbnQsXG4gICAgICBzZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICBzZXRJc0xvYWRpbmcsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHVuc2V0SXNMb2FkaW5nLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnIH0pO1xuICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG4gIH0sIFtvbkNsb3NlRnJvbVBhcmVudF0pO1xuXG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChpbmRleDogbnVtYmVyKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoaW5kZXgpID0+ICgpID0+IHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIGN1cnNvciBoYXBwZW5lZCB0byBiZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGFcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBhcHBlYXIsIGl0IHdvdWxkIHRyaWdnZXIgb25Nb3VzZUVudGVyIGFuZCB0aGVcbiAgICAgIC8vIHJlc3VsdCB3b3VsZCBiZSBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBpcyBub3Qgc29tZXRoaW5nXG4gICAgICAvLyBhIHVzZXIgd291bGQgZXhwZWN0LCBoZW5jZSB3ZSBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nLlxuICAgICAgLy8gVGhlIHVzZXIgaGFzIHRvIG1vdmUgdGhlIGN1cnNvciB0byBhbiBvcHRpb24gZXhwbGljaXRseSBmb3JcbiAgICAgIC8vIGl0IHRvIGJlY29tZSBhY3RpdmUuIEhvd2V2ZXIsIHRoZSB1c2VyIGNhbiBhbHdheXMgY2xpY2sgYW5kXG4gICAgICAvLyB0aGF0IGFjdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICAgIGlmIChza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzZXRzIHRoZSBzZWxlY3RlZCByZXN1bHQsIG1haW5seSBmb3IgdGhlIGhvdmVyIGVmZmVjdFxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0ZWRSZXN1bHQnLCBwYXlsb2FkOiBpbmRleCB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG4gIGNvbnN0IGNyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoY29tbWFuZDogQ29tbWFuZCkgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGNvbW1hbmQpID0+IChldmVudCkgPT4ge1xuICAgICAgZXhlY3V0ZShjb21tYW5kLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZXhlY3V0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxCdXRsZXJDb250YWluZXJcbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvbnRhaW5lckNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3NcIlxuICAgICAgdGFiSW5kZXg9ey0xfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtzZWFyY2hDb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke2N1c3RvbVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiBjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgYH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQXZvaWQgY2xvc2luZyB3aGVuIHRoZSBzZWFyY2hDb250YWluZXIgaXRzZWxmIGlzIGNsaWNrZWRcbiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHRoZSBvdmVybGF5IHdpbGwgY2xvc2Ugd2hlbiBlLmcuXG4gICAgICAgICAgLy8gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGlja2VkLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgaHRtbEZvcj1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfSAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvck5ldXRyYWw2MH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgICB2YWx1ZT17c3RhdGUuc2VhcmNoVGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICBvbktleVVwPXtoYW5kbGVLZXlVcH1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3N0YXRlLmlzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yRXJyb3J9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5vZmZsaW5lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzdWx0cy5sZW5ndGggPT09IDAgJiYgc3RhdGUuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHtjdXN0b21Qcm9wZXJ0aWVzLmZvbnRTaXplU21hbGx9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
933
897
  children: jsx(FormattedMessage, _objectSpread({}, messages.offline))
@@ -946,7 +910,6 @@ const Butler = props => {
946
910
  })
947
911
  });
948
912
  };
949
-
950
913
  Butler.propTypes = process.env.NODE_ENV !== "production" ? {
951
914
  historyEntries: _pt.arrayOf(_pt.any).isRequired,
952
915
  onHistoryEntriesChange: _pt.func.isRequired,
@@ -957,7 +920,6 @@ Butler.propTypes = process.env.NODE_ENV !== "production" ? {
957
920
  classNameShakeAnimation: _pt.string.isRequired
958
921
  } : {};
959
922
  Butler.displayName = 'Butler';
960
-
961
923
  const ButlerWithAnimation = props => jsx(ClassNames, {
962
924
  children: _ref2 => {
963
925
  let css = _ref2.css;
@@ -968,6 +930,7 @@ const ButlerWithAnimation = props => jsx(ClassNames, {
968
930
  });
969
931
 
970
932
  // eslint-disable-next-line import/prefer-default-export
933
+
971
934
  const permissions = {
972
935
  ViewOrders: 'ViewOrders',
973
936
  ManageOrders: 'ManageOrders',
@@ -998,18 +961,15 @@ const actionTypes = {
998
961
  };
999
962
 
1000
963
  var _templateObject$2;
1001
-
1002
964
  function nonNullable(value) {
1003
965
  return value !== null && value !== undefined && typeof value !== 'boolean';
1004
966
  }
1005
-
1006
967
  const createCommands = _ref => {
1007
968
  var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context13;
1008
-
1009
969
  let intl = _ref.intl,
1010
- applicationContext = _ref.applicationContext,
1011
- featureToggles = _ref.featureToggles,
1012
- changeProjectDataLocale = _ref.changeProjectDataLocale;
970
+ applicationContext = _ref.applicationContext,
971
+ featureToggles = _ref.featureToggles,
972
+ changeProjectDataLocale = _ref.changeProjectDataLocale;
1013
973
  return _filterInstanceProperty(_context = [applicationContext.project && applicationContext.permissions && featureToggles.canViewDashboard && hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1014
974
  id: 'go/dashboard',
1015
975
  text: intl.formatMessage(messages.openDashboard),
@@ -1301,17 +1261,17 @@ const createCommands = _ref => {
1301
1261
  // want to include them in the top-level search results
1302
1262
  subCommands: () => {
1303
1263
  var _context11, _context12;
1304
-
1305
1264
  return _Promise.resolve(_filterInstanceProperty(_context11 = _mapInstanceProperty(_context12 = applicationContext.project ? applicationContext.project.languages : []).call(_context12, language => changeProjectDataLocale && {
1306
1265
  id: "action/set-resource-language/".concat(language),
1307
1266
  text: oneLineTrim(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral(["\n ", "\n ", "\n "])), language, language === applicationContext.dataLocale ? ' (active)' : ''),
1308
1267
  action: () => {
1309
- changeProjectDataLocale(language); // We reload, since ProjectDataLocale is written in a way where
1268
+ changeProjectDataLocale(language);
1269
+
1270
+ // We reload, since ProjectDataLocale is written in a way where
1310
1271
  // only the tree under the parent container reloads, but
1311
1272
  // not all of them reload.
1312
1273
  // So this action would seem like it had not effect, unless we
1313
1274
  // reload
1314
-
1315
1275
  location.reload();
1316
1276
  }
1317
1277
  })).call(_context11, nonNullable));
@@ -1400,11 +1360,10 @@ var _templateObject$1, _templateObject2$1, _templateObject3, _templateObject4, _
1400
1360
  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 } } } };
1401
1361
  const createProductVariantSubCommands = _ref => {
1402
1362
  var _context, _context2, _context3, _context4;
1403
-
1404
1363
  let intl = _ref.intl,
1405
- applicationContext = _ref.applicationContext,
1406
- productId = _ref.productId,
1407
- variantId = _ref.variantId;
1364
+ applicationContext = _ref.applicationContext,
1365
+ productId = _ref.productId,
1366
+ variantId = _ref.variantId;
1408
1367
  const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1409
1368
  if (!canViewProducts || !applicationContext.project) return [];
1410
1369
  return [{
@@ -1437,7 +1396,6 @@ const createProductVariantSubCommands = _ref => {
1437
1396
  }
1438
1397
  }];
1439
1398
  };
1440
-
1441
1399
  const formatVariantMessage = (variant, intl) => {
1442
1400
  if (variant.sku) return intl.formatMessage(messages.openVariantBySku, {
1443
1401
  sku: variant.sku
@@ -1449,12 +1407,11 @@ const formatVariantMessage = (variant, intl) => {
1449
1407
  id: variant.id
1450
1408
  });
1451
1409
  };
1452
-
1453
1410
  const createProductVariantListSubCommands = async _ref2 => {
1454
1411
  let intl = _ref2.intl,
1455
- applicationContext = _ref2.applicationContext,
1456
- productId = _ref2.productId,
1457
- execQuery = _ref2.execQuery;
1412
+ applicationContext = _ref2.applicationContext,
1413
+ productId = _ref2.productId,
1414
+ execQuery = _ref2.execQuery;
1458
1415
  const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1459
1416
  if (!canViewProducts) return [];
1460
1417
  const data = await execQuery(QuickAccessProductQuery, {
@@ -1462,14 +1419,11 @@ const createProductVariantListSubCommands = async _ref2 => {
1462
1419
  }, {
1463
1420
  target: GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1464
1421
  });
1465
-
1466
1422
  if (data && data.product && data.product.masterData && data.product.masterData.staged && applicationContext.project) {
1467
1423
  var _context5;
1468
-
1469
1424
  const projectKey = applicationContext.project.key;
1470
1425
  return _mapInstanceProperty(_context5 = data.product.masterData.staged.allVariants).call(_context5, variant => {
1471
1426
  var _context6;
1472
-
1473
1427
  return {
1474
1428
  id: _concatInstanceProperty(_context6 = "go/product(".concat(productId, ")/variant(")).call(_context6, variant.id, ")"),
1475
1429
  text: formatVariantMessage(variant, intl),
@@ -1486,14 +1440,12 @@ const createProductVariantListSubCommands = async _ref2 => {
1486
1440
  };
1487
1441
  });
1488
1442
  }
1489
-
1490
1443
  return [];
1491
1444
  };
1492
-
1493
1445
  const createProductTabsSubCommands = _ref3 => {
1494
1446
  let intl = _ref3.intl,
1495
- applicationContext = _ref3.applicationContext,
1496
- productId = _ref3.productId;
1447
+ applicationContext = _ref3.applicationContext,
1448
+ productId = _ref3.productId;
1497
1449
  const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1498
1450
  if (!canViewProducts || !applicationContext.project) return [];
1499
1451
  return [{
@@ -1526,44 +1478,42 @@ const createProductTabsSubCommands = _ref3 => {
1526
1478
  }];
1527
1479
  };
1528
1480
 
1529
- const sanitize = param => param // Replace all \ with \\ (to prevent generate escape characters)
1530
- .replace(/\\/g, '\\\\') // Replace all " with \"
1481
+ const sanitize = param => param
1482
+ // Replace all \ with \\ (to prevent generate escape characters)
1483
+ .replace(/\\/g, '\\\\')
1484
+ // Replace all " with \"
1531
1485
  .replace(/"/g, '\\"');
1532
1486
  const flattenCommands = async (results, execQuery) => {
1533
1487
  async function flatten(commands) {
1534
1488
  return _reduceInstanceProperty(commands).call(commands, async (prevPromise, command) => {
1535
1489
  const prevResults = await prevPromise;
1536
-
1537
1490
  if (command.subCommands) {
1538
1491
  if (typeof command.subCommands === 'function') {
1539
1492
  const subCommands = await command.subCommands(execQuery);
1540
1493
  const flattenSubCommands = await flatten(subCommands);
1541
1494
  return [...prevResults, command, ...flattenSubCommands];
1542
1495
  }
1543
-
1544
1496
  const flattenSubCommands = await flatten(command.subCommands);
1545
1497
  return [...prevResults, command, ...flattenSubCommands];
1546
1498
  }
1547
-
1548
1499
  return [...prevResults, command];
1549
1500
  }, _Promise.resolve([]));
1550
1501
  }
1551
-
1552
1502
  return await flatten(results);
1553
- }; // Once ui-kit exposes its fallback mechanism, we can use the same one here
1503
+ };
1554
1504
 
1505
+ // Once ui-kit exposes its fallback mechanism, we can use the same one here
1555
1506
  const translate = (nameAllLocales, projectDataLocale) => {
1556
1507
  const matchedTranslation = _findInstanceProperty(nameAllLocales).call(nameAllLocales, translation => translation.locale === projectDataLocale && translation.value);
1508
+ if (matchedTranslation) return matchedTranslation.value;
1557
1509
 
1558
- if (matchedTranslation) return matchedTranslation.value; // Fall back to the first available locale
1559
-
1510
+ // Fall back to the first available locale
1560
1511
  if (nameAllLocales.length > 0) return nameAllLocales[0].value;
1561
1512
  return '';
1562
1513
  };
1563
1514
 
1564
1515
  var _templateObject, _templateObject2;
1565
1516
  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 } } } };
1566
-
1567
1517
  const searchProductIdsAction = (searchText, projectKey, dataLocale) => actions.post({
1568
1518
  uri: "/".concat(projectKey, "/search/products"),
1569
1519
  mcApiProxyTarget: MC_API_PROXY_TARGETS.PIM_SEARCH,
@@ -1584,8 +1534,8 @@ const searchProductIdsAction = (searchText, projectKey, dataLocale) => actions.p
1584
1534
  offset: 0
1585
1535
  }
1586
1536
  });
1587
-
1588
- const pimIndexerStatusAction = (projectKey, dataLocale) => // TODO this should be sdkActions.head()
1537
+ const pimIndexerStatusAction = (projectKey, dataLocale) =>
1538
+ // TODO this should be sdkActions.head()
1589
1539
  // and then we should check whether the response code is
1590
1540
  // - 200 meaning the project is indexed
1591
1541
  // - 404 meaning the project is not indexed
@@ -1609,13 +1559,11 @@ actions.post({
1609
1559
  offset: 0
1610
1560
  }
1611
1561
  });
1612
-
1613
1562
  const QuickAccess = props => {
1614
1563
  const _useState = useState(loadHistoryEntries()),
1615
- _useState2 = _slicedToArray(_useState, 2),
1616
- historyEntries = _useState2[0],
1617
- setHistoryEntries = _useState2[1];
1618
-
1564
+ _useState2 = _slicedToArray(_useState, 2),
1565
+ historyEntries = _useState2[0],
1566
+ setHistoryEntries = _useState2[1];
1619
1567
  const handleHistoryEntriesChange = useCallback(entries => {
1620
1568
  // Keep the history in sync with the session storage
1621
1569
  saveHistoryEntries(entries);
@@ -1624,29 +1572,26 @@ const QuickAccess = props => {
1624
1572
  const history = useHistory();
1625
1573
  const apolloClient = useApolloClient();
1626
1574
  const intl = useIntl();
1627
-
1628
1575
  const _useFeatureToggles = useFeatureToggles({
1629
- pimSearch: true,
1630
- customApplications: true,
1631
- canViewDashboard: true
1632
- }),
1633
- _useFeatureToggles2 = _slicedToArray(_useFeatureToggles, 3),
1634
- isPimSearchEnabled = _useFeatureToggles2[0],
1635
- isCustomApplicationsEnabled = _useFeatureToggles2[1],
1636
- isCanViewDashboardEnabled = _useFeatureToggles2[2];
1637
-
1638
- const applicationContext = useApplicationContext(); // Destructure functions from props to reference them in the hook dependency list
1576
+ pimSearch: true,
1577
+ customApplications: true,
1578
+ canViewDashboard: true
1579
+ }),
1580
+ _useFeatureToggles2 = _slicedToArray(_useFeatureToggles, 3),
1581
+ isPimSearchEnabled = _useFeatureToggles2[0],
1582
+ isCustomApplicationsEnabled = _useFeatureToggles2[1],
1583
+ isCanViewDashboardEnabled = _useFeatureToggles2[2];
1584
+ const applicationContext = useApplicationContext();
1639
1585
 
1586
+ // Destructure functions from props to reference them in the hook dependency list
1640
1587
  const onPimIndexerStateChangeFromParent = props.onPimIndexerStateChange;
1641
1588
  const dispatchFetchProductIds = useAsyncDispatch();
1642
1589
  const fetchPimSearchProductIds = useCallback(async searchText => {
1643
1590
  if (applicationContext.project && applicationContext.dataLocale) {
1644
1591
  var _context;
1645
-
1646
1592
  const result = await dispatchFetchProductIds(searchProductIdsAction(searchText, applicationContext.project.key, applicationContext.dataLocale));
1647
1593
  return result && result.hits ? _mapInstanceProperty(_context = result.hits).call(_context, hit => hit.id) : [];
1648
1594
  }
1649
-
1650
1595
  return [];
1651
1596
  }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchProductIds]);
1652
1597
  const dispatchFetchPimIndexerStatus = useAsyncDispatch();
@@ -1657,21 +1602,21 @@ const QuickAccess = props => {
1657
1602
  return pimIndexerStates.INDEXED;
1658
1603
  } catch (error) {
1659
1604
  // eslint-disable-next-line no-console
1660
- if (process.env.NODE_ENV !== 'production') console.error(error); // project is not using pim-indexer when response error code is 404,
1605
+ if (process.env.NODE_ENV !== 'production') console.error(error);
1606
+ // project is not using pim-indexer when response error code is 404,
1661
1607
  // but we treat all errors as non-indexed as a safe guard, so we're
1662
1608
  // not checking the response error code at all
1663
-
1664
1609
  return pimIndexerStates.NOT_INDEXED;
1665
1610
  }
1666
1611
  }
1667
-
1668
1612
  return pimIndexerStates.NOT_INDEXED;
1669
1613
  }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchPimIndexerStatus]);
1670
1614
  const getProjectIndexStatus = useCallback(async () => {
1671
1615
  // skip when there is no project
1672
1616
  if (!applicationContext.project) return pimIndexerStates.NOT_INDEXED;
1673
- const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions); // skip checking when user can't view products anyways
1617
+ const canViewProducts = hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1674
1618
 
1619
+ // skip checking when user can't view products anyways
1675
1620
  if (!canViewProducts) return pimIndexerStates.NOT_INDEXED;
1676
1621
  return await fetchPimIndexerStatus();
1677
1622
  }, [applicationContext.permissions, applicationContext.project, fetchPimIndexerStatus]);
@@ -1680,8 +1625,8 @@ const QuickAccess = props => {
1680
1625
  getProjectIndexStatus().then(status => {
1681
1626
  onPimIndexerStateChangeFromParent(status);
1682
1627
  });
1683
- } // eslint-disable-next-line react-hooks/exhaustive-deps
1684
-
1628
+ }
1629
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1685
1630
  }, []); // <-- run only once, when component mounts
1686
1631
 
1687
1632
  const execQuery = useCallback((Query, variables, context) => apolloClient.query({
@@ -1708,10 +1653,8 @@ const QuickAccess = props => {
1708
1653
  target: GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1709
1654
  });
1710
1655
  const commands = [];
1711
-
1712
1656
  if (data && data.productByVariantKey && data.productByVariantKey.masterData && data.productByVariantKey.masterData.staged && data.productByVariantKey.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1713
1657
  var _context2;
1714
-
1715
1658
  const productId = data.productByVariantKey.id;
1716
1659
  const variantId = data.productByVariantKey.masterData.staged.variant.id;
1717
1660
  const variantKey = data.productByVariantKey.masterData.staged.variant.key;
@@ -1733,10 +1676,8 @@ const QuickAccess = props => {
1733
1676
  })
1734
1677
  });
1735
1678
  }
1736
-
1737
1679
  if (data && data.productByVariantSku && data.productByVariantSku.masterData && data.productByVariantSku.masterData.staged && data.productByVariantSku.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1738
1680
  var _context3;
1739
-
1740
1681
  const productId = data.productByVariantSku.id;
1741
1682
  const variantId = data.productByVariantSku.masterData.staged.variant.id;
1742
1683
  commands.push({
@@ -1756,10 +1697,8 @@ const QuickAccess = props => {
1756
1697
  })
1757
1698
  });
1758
1699
  }
1759
-
1760
1700
  if (data && data.productById && data.productById.masterData && data.productById.masterData.staged && data.productById.masterData.staged.nameAllLocales && applicationContext.project && applicationContext.dataLocale) {
1761
1701
  var _context4;
1762
-
1763
1702
  const productId = data.productById.id;
1764
1703
  commands.push({
1765
1704
  id: "go/product-by-id/product(".concat(productId, ")"),
@@ -1778,14 +1717,11 @@ const QuickAccess = props => {
1778
1717
  })
1779
1718
  });
1780
1719
  }
1781
-
1782
1720
  if (data && data.productsByIds && data.productsByIds.results) {
1783
1721
  var _context5;
1784
-
1785
1722
  _forEachInstanceProperty(_context5 = data.productsByIds.results).call(_context5, product => {
1786
1723
  if (product.masterData.staged && applicationContext.project && applicationContext.dataLocale) {
1787
1724
  var _context6;
1788
-
1789
1725
  commands.push({
1790
1726
  id: "go/product-by-search-text/product(".concat(product.id, ")"),
1791
1727
  text: intl.formatMessage(messages.showProduct, {
@@ -1805,10 +1741,8 @@ const QuickAccess = props => {
1805
1741
  }
1806
1742
  });
1807
1743
  }
1808
-
1809
1744
  if (data && data.productByKey && applicationContext.project && applicationContext.dataLocale) {
1810
1745
  var _context7;
1811
-
1812
1746
  const productId = data.productByKey.id;
1813
1747
  commands.push({
1814
1748
  id: "go/product-by-key/product(".concat(productId, ")"),
@@ -1826,7 +1760,6 @@ const QuickAccess = props => {
1826
1760
  })
1827
1761
  });
1828
1762
  }
1829
-
1830
1763
  return commands;
1831
1764
  }, [applicationContext, execQuery, fetchPimSearchProductIds, intl, props.pimIndexerState]);
1832
1765
  const debouncedGetProjectCommands = debounce(getProjectCommands, 200, {
@@ -1843,13 +1776,13 @@ const QuickAccess = props => {
1843
1776
  canViewDashboard: isCanViewDashboardEnabled
1844
1777
  }
1845
1778
  });
1846
- if (!applicationContext.project) return generalCommands; // Avoid searching for short texts, as we won't get any good results
1779
+ if (!applicationContext.project) return generalCommands;
1780
+
1781
+ // Avoid searching for short texts, as we won't get any good results
1847
1782
  // anyways. This results in commands popping up immediately when the user
1848
1783
  // starts typing, which gives the whole search a much more repsonsive
1849
1784
  // feeling.
1850
-
1851
1785
  if (_trimInstanceProperty(searchText).call(searchText).length < 3) return generalCommands;
1852
-
1853
1786
  try {
1854
1787
  const projectCommands = await debouncedGetProjectCommands(searchText);
1855
1788
  const allCommands = [...generalCommands, ...projectCommands];
@@ -1864,16 +1797,14 @@ const QuickAccess = props => {
1864
1797
  }, [applicationContext, debouncedGetProjectCommands, execQuery, intl, isCanViewDashboardEnabled, isCustomApplicationsEnabled, isPimSearchEnabled, props.onChangeProjectDataLocale]);
1865
1798
  const executeCommand = useCallback((command, meta) => {
1866
1799
  var _context8;
1867
-
1868
1800
  if (typeof command.action === 'function') {
1869
1801
  // Idea: We could handle these errors and set them on status bar of Butler
1870
1802
  // We can also handle sync/async commands by checking command.action.then
1871
1803
  command.action();
1872
1804
  return;
1873
- } // open in new window
1805
+ }
1806
+ // open in new window
1874
1807
  // and always open other pages in a new window
1875
-
1876
-
1877
1808
  if (meta.openInNewTab || !_startsWithInstanceProperty(_context8 = command.action.to).call(_context8, '/')) {
1878
1809
  // eslint-disable-next-line no-restricted-globals
1879
1810
  open(command.action.to, '_blank');
@@ -1892,7 +1823,6 @@ const QuickAccess = props => {
1892
1823
  getNextCommands: getNextCommands
1893
1824
  });
1894
1825
  };
1895
-
1896
1826
  QuickAccess.propTypes = process.env.NODE_ENV !== "production" ? {
1897
1827
  pimIndexerState: _pt.any.isRequired,
1898
1828
  onPimIndexerStateChange: _pt.func.isRequired,