@veloceapps/sdk 8.0.0-20 → 8.0.0-201

Sign up to get free protection for your applications and to get access to all the features.
Files changed (317) hide show
  1. package/README.md +0 -1
  2. package/cms/README.md +0 -20
  3. package/cms/cms.actions.d.ts +15 -1
  4. package/cms/components/preview/preview.component.d.ts +2 -3
  5. package/cms/components/preview/preview.types.d.ts +4 -0
  6. package/cms/index.d.ts +1 -0
  7. package/cms/modules/runtime/services/runtime.service.d.ts +1 -1
  8. package/cms/services/index.d.ts +0 -1
  9. package/cms/services/resources.service.d.ts +2 -0
  10. package/cms/types/index.d.ts +0 -1
  11. package/cms/utils/element-metadata-worker.d.ts +11 -0
  12. package/cms/utils/elements-resolver.d.ts +0 -2
  13. package/cms/utils/index.d.ts +3 -0
  14. package/cms/utils/transpilation-worker.d.ts +13 -0
  15. package/cms/vendor-map.d.ts +29 -19
  16. package/core/README.md +20 -0
  17. package/core/modules/configuration/configuration.module.d.ts +2 -1
  18. package/core/modules/configuration/helpers.d.ts +4 -3
  19. package/core/modules/configuration/index.d.ts +1 -1
  20. package/core/modules/configuration/services/configuration-runtime.service.d.ts +1 -1
  21. package/core/modules/configuration/services/configuration-state.service.d.ts +54 -0
  22. package/core/modules/configuration/services/configuration.service.d.ts +11 -6
  23. package/core/modules/configuration/types/configuration.types.d.ts +4 -0
  24. package/core/modules/flow-configuration/flow-configuration.module.d.ts +2 -1
  25. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +5 -0
  26. package/core/pipes/action-code.pipe.d.ts +8 -0
  27. package/core/pipes/date.pipe.d.ts +2 -1
  28. package/core/pipes/index.d.ts +1 -0
  29. package/core/pipes/pipes.module.d.ts +2 -1
  30. package/core/services/context.service.d.ts +4 -0
  31. package/core/services/flow-info.service.d.ts +29 -0
  32. package/core/services/flow-state-configuration.service.d.ts +19 -0
  33. package/core/services/flow-state.service.d.ts +80 -0
  34. package/core/services/index.d.ts +4 -1
  35. package/core/services/quote-draft.service.d.ts +12 -28
  36. package/core/services/runtime-settings.service.d.ts +4 -1
  37. package/core/types/flow-customization.types.d.ts +22 -0
  38. package/core/types/flow-state.types.d.ts +11 -0
  39. package/core/types/formatting-settings.types.d.ts +2 -0
  40. package/core/types/index.d.ts +3 -0
  41. package/{cms → core}/types/integration.types.d.ts +1 -1
  42. package/core/types/pipe.types.d.ts +1 -0
  43. package/core/utils/line-item.utils.d.ts +1 -3
  44. package/esm2020/cms/cms.actions.mjs +25 -1
  45. package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +3 -3
  46. package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +3 -3
  47. package/esm2020/cms/components/preview/preview.component.mjs +10 -10
  48. package/esm2020/cms/components/preview/preview.module.mjs +2 -2
  49. package/esm2020/cms/components/preview/preview.types.mjs +1 -1
  50. package/esm2020/cms/index.mjs +2 -1
  51. package/esm2020/cms/launcher.module.mjs +4 -4
  52. package/esm2020/cms/modules/migrations/migrations.mjs +2 -2
  53. package/esm2020/cms/modules/migrations/services/migrations.service.mjs +6 -2
  54. package/esm2020/cms/modules/runtime/services/compilation.service.mjs +11 -7
  55. package/esm2020/cms/modules/runtime/services/runtime.service.mjs +4 -4
  56. package/esm2020/cms/plugins/configuration.plugin.mjs +8 -4
  57. package/esm2020/cms/services/index.mjs +1 -2
  58. package/esm2020/cms/services/io-provider.service.mjs +10 -9
  59. package/esm2020/cms/services/resources.service.mjs +10 -6
  60. package/esm2020/cms/services/templates.service.mjs +10 -9
  61. package/esm2020/cms/types/index.mjs +1 -2
  62. package/esm2020/cms/utils/element-metadata-worker.mjs +31 -0
  63. package/esm2020/cms/utils/elements-resolver.mjs +14 -28
  64. package/esm2020/cms/utils/encoding.utils.mjs +3 -2
  65. package/esm2020/cms/utils/index.mjs +4 -1
  66. package/esm2020/cms/utils/path.utils.mjs +3 -3
  67. package/esm2020/cms/utils/script.utils.mjs +19 -15
  68. package/esm2020/cms/utils/transpilation-worker.mjs +52 -0
  69. package/esm2020/cms/vendor-map.mjs +18 -6
  70. package/esm2020/core/core.module.mjs +12 -5
  71. package/esm2020/core/modules/configuration/configuration.module.mjs +7 -23
  72. package/esm2020/core/modules/configuration/helpers.mjs +28 -3
  73. package/esm2020/core/modules/configuration/index.mjs +2 -2
  74. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +8 -11
  75. package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +335 -0
  76. package/esm2020/core/modules/configuration/services/configuration.service.mjs +77 -52
  77. package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +6 -6
  78. package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
  79. package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +6 -6
  80. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +12 -9
  81. package/esm2020/core/pipes/action-code.pipe.mjs +20 -0
  82. package/esm2020/core/pipes/date.pipe.mjs +10 -4
  83. package/esm2020/core/pipes/index.mjs +2 -1
  84. package/esm2020/core/pipes/pipes.module.mjs +5 -4
  85. package/esm2020/core/services/context.service.mjs +33 -6
  86. package/esm2020/core/services/flow-info.service.mjs +99 -0
  87. package/esm2020/core/services/flow-state-configuration.service.mjs +53 -0
  88. package/esm2020/core/services/flow-state.service.mjs +512 -0
  89. package/esm2020/core/services/index.mjs +5 -2
  90. package/esm2020/core/services/integration.state.mjs +36 -0
  91. package/esm2020/core/services/product-images.service.mjs +4 -5
  92. package/esm2020/core/services/quote-draft.service.mjs +40 -91
  93. package/esm2020/core/services/runtime-settings.service.mjs +22 -5
  94. package/esm2020/core/types/flow-customization.types.mjs +3 -0
  95. package/esm2020/core/types/flow-state.types.mjs +2 -0
  96. package/esm2020/core/types/formatting-settings.types.mjs +1 -1
  97. package/esm2020/core/types/index.mjs +4 -1
  98. package/esm2020/core/types/integration.types.mjs +2 -0
  99. package/esm2020/core/types/pipe.types.mjs +2 -0
  100. package/esm2020/core/utils/line-item.utils.mjs +33 -32
  101. package/esm2020/src/components/doc-gen/doc-gen.component.mjs +49 -49
  102. package/esm2020/src/components/flow-header/flow-header.component.mjs +108 -0
  103. package/esm2020/src/components/flow-header/flow-header.module.mjs +19 -0
  104. package/esm2020/src/components/flow-header/index.mjs +2 -0
  105. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +37 -43
  106. package/esm2020/src/configure-primeng.mjs +33 -0
  107. package/esm2020/src/flow-routing.module.mjs +56 -78
  108. package/esm2020/src/flow.component.mjs +23 -32
  109. package/esm2020/src/flow.module.mjs +7 -5
  110. package/esm2020/src/guards/context.guard.mjs +6 -11
  111. package/esm2020/src/guards/flow.guard.mjs +37 -0
  112. package/esm2020/src/guards/product-unload.guard.mjs +4 -1
  113. package/esm2020/src/guards/root.guard.mjs +14 -10
  114. package/esm2020/src/pages/assets/assets.component.mjs +33 -37
  115. package/esm2020/src/pages/catalog/catalog.component.mjs +33 -37
  116. package/esm2020/src/pages/debug/debug.component.mjs +10 -14
  117. package/esm2020/src/pages/product/product.component.mjs +35 -22
  118. package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +6 -3
  119. package/esm2020/src/pages/remote/remote.component.mjs +19 -19
  120. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +34 -38
  121. package/esm2020/src/resolvers/flow.resolver.mjs +37 -49
  122. package/esm2020/src/resolvers/quote.resolver.mjs +55 -63
  123. package/esm2020/src/services/doc-gen.service.mjs +4 -3
  124. package/esm2020/src/services/flow-dialog.service.mjs +21 -6
  125. package/esm2020/src/services/flow-router.service.mjs +57 -16
  126. package/esm2020/src/services/flow.service.mjs +83 -28
  127. package/esm2020/src/services/guided-selling.service.mjs +5 -4
  128. package/esm2020/src/services/index.mjs +3 -1
  129. package/esm2020/src/types/index.mjs +1 -2
  130. package/esm2020/src/utils/flow.utils.mjs +6 -2
  131. package/fesm2015/veloceapps-sdk-cms.mjs +298 -195
  132. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  133. package/fesm2015/veloceapps-sdk-core.mjs +1846 -1023
  134. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  135. package/fesm2015/veloceapps-sdk.mjs +756 -1493
  136. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  137. package/fesm2020/veloceapps-sdk-cms.mjs +302 -209
  138. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  139. package/fesm2020/veloceapps-sdk-core.mjs +1596 -811
  140. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  141. package/fesm2020/veloceapps-sdk.mjs +819 -1553
  142. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  143. package/package.json +5 -12
  144. package/src/components/doc-gen/doc-gen.component.d.ts +8 -9
  145. package/src/components/flow-header/flow-header.component.d.ts +25 -0
  146. package/src/components/flow-header/flow-header.module.d.ts +9 -0
  147. package/src/components/flow-header/index.d.ts +1 -0
  148. package/src/components/guided-selling/guided-selling.component.d.ts +6 -8
  149. package/src/configure-primeng.d.ts +1 -0
  150. package/src/flow-routing.module.d.ts +5 -7
  151. package/src/flow.component.d.ts +7 -11
  152. package/src/flow.module.d.ts +2 -2
  153. package/src/guards/context.guard.d.ts +4 -5
  154. package/src/guards/flow.guard.d.ts +2 -0
  155. package/src/guards/product-unload.guard.d.ts +2 -2
  156. package/src/guards/root.guard.d.ts +0 -1
  157. package/src/pages/assets/assets.component.d.ts +5 -7
  158. package/src/pages/catalog/catalog.component.d.ts +5 -7
  159. package/src/pages/debug/debug.component.d.ts +5 -8
  160. package/src/pages/product/product.component.d.ts +8 -7
  161. package/src/pages/record-not-found/record-not-found.component.d.ts +2 -0
  162. package/src/pages/remote/remote.component.d.ts +2 -3
  163. package/src/pages/shopping-cart/shopping-cart.component.d.ts +5 -7
  164. package/src/resolvers/flow.resolver.d.ts +6 -7
  165. package/src/resolvers/quote.resolver.d.ts +7 -12
  166. package/src/services/doc-gen.service.d.ts +1 -1
  167. package/src/services/flow-dialog.service.d.ts +5 -2
  168. package/src/services/flow-router.service.d.ts +7 -3
  169. package/src/services/flow.service.d.ts +11 -4
  170. package/src/services/guided-selling.service.d.ts +1 -1
  171. package/src/services/index.d.ts +2 -0
  172. package/src/types/index.d.ts +0 -1
  173. package/core/modules/configuration/services/configuration.state.d.ts +0 -30
  174. package/core/services/metric-calculation/metric-calculation.service.d.ts +0 -25
  175. package/core/services/metric-calculation/metric-calculation.types.d.ts +0 -1
  176. package/core/services/metric-calculation/metric-calculation.utils.d.ts +0 -5
  177. package/esm2020/cms/services/integration.state.mjs +0 -37
  178. package/esm2020/cms/types/integration.types.mjs +0 -2
  179. package/esm2020/core/modules/configuration/services/configuration.state.mjs +0 -142
  180. package/esm2020/core/services/metric-calculation/metric-calculation.service.mjs +0 -85
  181. package/esm2020/core/services/metric-calculation/metric-calculation.types.mjs +0 -2
  182. package/esm2020/core/services/metric-calculation/metric-calculation.utils.mjs +0 -42
  183. package/esm2020/runtime/components/component-preview/component-preview.component.mjs +0 -125
  184. package/esm2020/runtime/components/index.mjs +0 -5
  185. package/esm2020/runtime/components/section-renderer/section-renderer.component.mjs +0 -67
  186. package/esm2020/runtime/components/ui-runtime/runtime.component.mjs +0 -440
  187. package/esm2020/runtime/components/ui-runtime-preview/runtime-preview.component.mjs +0 -108
  188. package/esm2020/runtime/execution/components/children-placeholder/children-placeholder.component.mjs +0 -60
  189. package/esm2020/runtime/execution/components/context-provider/context-provider.component.mjs +0 -39
  190. package/esm2020/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.mjs +0 -67
  191. package/esm2020/runtime/execution/components/federated/federated.component.mjs +0 -74
  192. package/esm2020/runtime/execution/components/velo-attribute/velo-attribute.component.mjs +0 -60
  193. package/esm2020/runtime/execution/components/velo-multiselect/velo-multiselect.component.mjs +0 -130
  194. package/esm2020/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.mjs +0 -72
  195. package/esm2020/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.mjs +0 -97
  196. package/esm2020/runtime/execution/components/velo-port-radio/velo-port-radio.component.mjs +0 -142
  197. package/esm2020/runtime/execution/components/velo-type/velo-type.component.mjs +0 -119
  198. package/esm2020/runtime/execution/directives/section-script.directive.mjs +0 -247
  199. package/esm2020/runtime/execution/directives/sf-query.directive.mjs +0 -35
  200. package/esm2020/runtime/execution/directives/velo-attribute.directive.mjs +0 -88
  201. package/esm2020/runtime/execution/directives/velo-port.directive.mjs +0 -376
  202. package/esm2020/runtime/execution/directives/vl-approval.directive.mjs +0 -23
  203. package/esm2020/runtime/execution/directives/vl-document-attachments.directive.mjs +0 -36
  204. package/esm2020/runtime/execution/directives/vl-document-templates.directive.mjs +0 -60
  205. package/esm2020/runtime/execution/directives/vl-quote.directive.mjs +0 -42
  206. package/esm2020/runtime/execution/directives/vl-ramp.directive.mjs +0 -55
  207. package/esm2020/runtime/execution/runtime-execution.module.mjs +0 -133
  208. package/esm2020/runtime/execution/utils/federated.util.mjs +0 -32
  209. package/esm2020/runtime/index.mjs +0 -5
  210. package/esm2020/runtime/runtime.module.mjs +0 -74
  211. package/esm2020/runtime/services/cart.service.mjs +0 -29
  212. package/esm2020/runtime/services/collapsible-state.service.mjs +0 -34
  213. package/esm2020/runtime/services/configuration.service.mjs +0 -119
  214. package/esm2020/runtime/services/current-state.service.mjs +0 -17
  215. package/esm2020/runtime/services/form-scope.service.mjs +0 -30
  216. package/esm2020/runtime/services/index.mjs +0 -4
  217. package/esm2020/runtime/services/product-model-cache.service.mjs +0 -31
  218. package/esm2020/runtime/services/runtime-context.service.mjs +0 -60
  219. package/esm2020/runtime/services/runtime-form.service.mjs +0 -219
  220. package/esm2020/runtime/services/runtime.service.mjs +0 -115
  221. package/esm2020/runtime/services/section-helper.service.mjs +0 -27
  222. package/esm2020/runtime/services/section-scope.service.mjs +0 -36
  223. package/esm2020/runtime/services/section-store.service.mjs +0 -22
  224. package/esm2020/runtime/services/section.service.mjs +0 -117
  225. package/esm2020/runtime/types/bound-data.types.mjs +0 -7
  226. package/esm2020/runtime/types/index.mjs +0 -3
  227. package/esm2020/runtime/types/quote-states.types.mjs +0 -2
  228. package/esm2020/runtime/types/runtime.types.mjs +0 -2
  229. package/esm2020/runtime/types/script-registry.types.mjs +0 -51
  230. package/esm2020/runtime/utils/line-item.util.mjs +0 -270
  231. package/esm2020/runtime/utils/section.utils.mjs +0 -26
  232. package/esm2020/runtime/utils/sections-binder.helper.mjs +0 -105
  233. package/esm2020/runtime/veloceapps-sdk-runtime.mjs +0 -5
  234. package/esm2020/src/components/header/cart-overlay/cart-preview.component.mjs +0 -119
  235. package/esm2020/src/components/header/cart-overlay/cart-preview.module.mjs +0 -47
  236. package/esm2020/src/components/header/header.component.mjs +0 -355
  237. package/esm2020/src/components/header/header.module.mjs +0 -52
  238. package/esm2020/src/components/header/header.types.mjs +0 -2
  239. package/esm2020/src/components/header/metrics/index.mjs +0 -2
  240. package/esm2020/src/components/header/metrics/metrics.component.mjs +0 -255
  241. package/esm2020/src/components/header/metrics/metrics.definitions.mjs +0 -2
  242. package/esm2020/src/components/header/metrics/metrics.module.mjs +0 -69
  243. package/esm2020/src/pages/empty-account/empty-account.component.mjs +0 -12
  244. package/esm2020/src/pages/empty-account/empty-account.module.mjs +0 -20
  245. package/esm2020/src/pages/legacy-product/legacy-product.component.mjs +0 -137
  246. package/esm2020/src/pages/legacy-product/legacy-product.module.mjs +0 -19
  247. package/esm2020/src/types/flow-customization.types.mjs +0 -3
  248. package/fesm2015/veloceapps-sdk-runtime.mjs +0 -3770
  249. package/fesm2015/veloceapps-sdk-runtime.mjs.map +0 -1
  250. package/fesm2020/veloceapps-sdk-runtime.mjs +0 -3767
  251. package/fesm2020/veloceapps-sdk-runtime.mjs.map +0 -1
  252. package/runtime/README.md +0 -5
  253. package/runtime/components/component-preview/component-preview.component.d.ts +0 -27
  254. package/runtime/components/index.d.ts +0 -4
  255. package/runtime/components/section-renderer/section-renderer.component.d.ts +0 -25
  256. package/runtime/components/ui-runtime/runtime.component.d.ts +0 -53
  257. package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +0 -27
  258. package/runtime/execution/components/children-placeholder/children-placeholder.component.d.ts +0 -30
  259. package/runtime/execution/components/context-provider/context-provider.component.d.ts +0 -14
  260. package/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.d.ts +0 -25
  261. package/runtime/execution/components/federated/federated.component.d.ts +0 -36
  262. package/runtime/execution/components/velo-attribute/velo-attribute.component.d.ts +0 -19
  263. package/runtime/execution/components/velo-multiselect/velo-multiselect.component.d.ts +0 -35
  264. package/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.d.ts +0 -22
  265. package/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.d.ts +0 -22
  266. package/runtime/execution/components/velo-port-radio/velo-port-radio.component.d.ts +0 -28
  267. package/runtime/execution/components/velo-type/velo-type.component.d.ts +0 -31
  268. package/runtime/execution/directives/section-script.directive.d.ts +0 -59
  269. package/runtime/execution/directives/sf-query.directive.d.ts +0 -15
  270. package/runtime/execution/directives/velo-attribute.directive.d.ts +0 -26
  271. package/runtime/execution/directives/velo-port.directive.d.ts +0 -74
  272. package/runtime/execution/directives/vl-approval.directive.d.ts +0 -10
  273. package/runtime/execution/directives/vl-document-attachments.directive.d.ts +0 -15
  274. package/runtime/execution/directives/vl-document-templates.directive.d.ts +0 -33
  275. package/runtime/execution/directives/vl-quote.directive.d.ts +0 -14
  276. package/runtime/execution/directives/vl-ramp.directive.d.ts +0 -15
  277. package/runtime/execution/runtime-execution.module.d.ts +0 -25
  278. package/runtime/execution/utils/federated.util.d.ts +0 -6
  279. package/runtime/index.d.ts +0 -4
  280. package/runtime/runtime.module.d.ts +0 -16
  281. package/runtime/services/cart.service.d.ts +0 -15
  282. package/runtime/services/collapsible-state.service.d.ts +0 -15
  283. package/runtime/services/configuration.service.d.ts +0 -20
  284. package/runtime/services/current-state.service.d.ts +0 -8
  285. package/runtime/services/form-scope.service.d.ts +0 -20
  286. package/runtime/services/index.d.ts +0 -3
  287. package/runtime/services/product-model-cache.service.d.ts +0 -14
  288. package/runtime/services/runtime-context.service.d.ts +0 -16
  289. package/runtime/services/runtime-form.service.d.ts +0 -24
  290. package/runtime/services/runtime.service.d.ts +0 -44
  291. package/runtime/services/section-helper.service.d.ts +0 -8
  292. package/runtime/services/section-scope.service.d.ts +0 -14
  293. package/runtime/services/section-store.service.d.ts +0 -11
  294. package/runtime/services/section.service.d.ts +0 -30
  295. package/runtime/types/bound-data.types.d.ts +0 -13
  296. package/runtime/types/index.d.ts +0 -2
  297. package/runtime/types/quote-states.types.d.ts +0 -6
  298. package/runtime/types/runtime.types.d.ts +0 -19
  299. package/runtime/types/script-registry.types.d.ts +0 -13
  300. package/runtime/utils/line-item.util.d.ts +0 -34
  301. package/runtime/utils/section.utils.d.ts +0 -2
  302. package/runtime/utils/sections-binder.helper.d.ts +0 -16
  303. package/src/components/header/cart-overlay/cart-preview.component.d.ts +0 -36
  304. package/src/components/header/cart-overlay/cart-preview.module.d.ts +0 -14
  305. package/src/components/header/header.component.d.ts +0 -70
  306. package/src/components/header/header.module.d.ts +0 -16
  307. package/src/components/header/header.types.d.ts +0 -20
  308. package/src/components/header/metrics/index.d.ts +0 -1
  309. package/src/components/header/metrics/metrics.component.d.ts +0 -67
  310. package/src/components/header/metrics/metrics.definitions.d.ts +0 -1
  311. package/src/components/header/metrics/metrics.module.d.ts +0 -18
  312. package/src/pages/empty-account/empty-account.component.d.ts +0 -5
  313. package/src/pages/empty-account/empty-account.module.d.ts +0 -10
  314. package/src/pages/legacy-product/legacy-product.component.d.ts +0 -37
  315. package/src/pages/legacy-product/legacy-product.module.d.ts +0 -9
  316. package/src/types/flow-customization.types.d.ts +0 -12
  317. /package/{cms → core}/services/integration.state.d.ts +0 -0
@@ -1,15 +1,15 @@
1
1
  import { Location } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { UUID, getUIDefinitionProperties, isLegacyUIDefinition, } from '@veloceapps/core';
4
- import { FlowAction, IntegrationState } from '@veloceapps/sdk/cms';
5
- import { ConfigurationRuntimeService, ConfigurationService, ConfigurationState, ContextService, QuoteDraftService, } from '@veloceapps/sdk/core';
3
+ import { UUID, } from '@veloceapps/core';
4
+ import { FlowAction } from '@veloceapps/sdk/cms';
5
+ import { ConfigurationRuntimeService, ConfigurationService, ConfigurationStateService, ContextService, IntegrationState, QuoteDraftService, } from '@veloceapps/sdk/core';
6
6
  import { MessageService } from 'primeng/api';
7
- import { BehaviorSubject, Subject, catchError, first, of, switchMap, takeUntil, tap, throwError, } from 'rxjs';
7
+ import { BehaviorSubject, catchError, first, of, Subject, switchMap, takeUntil, tap, throwError, } from 'rxjs';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@veloceapps/sdk/core";
10
10
  import * as i2 from "primeng/api";
11
- import * as i3 from "@veloceapps/sdk/cms";
12
- import * as i4 from "@angular/common";
11
+ import * as i3 from "@angular/common";
12
+ import * as i4 from "@veloceapps/sdk/cms";
13
13
  import * as i5 from "@veloceapps/components";
14
14
  export class RemoteComponent {
15
15
  constructor(contextService, quoteDraftService, runtimeService, configurationService, configurationState, messageService, integrationState, location) {
@@ -56,9 +56,8 @@ export class RemoteComponent {
56
56
  this.runtimeService
57
57
  .init({ productId })
58
58
  .pipe(first(), tap(context => {
59
- const uiDefinitionProperties = getUIDefinitionProperties(context.uiDefinitionContainer);
60
- const uiDefinition = context.uiDefinitionContainer?.source;
61
- this.uiDefinition = uiDefinition && !isLegacyUIDefinition(uiDefinition) ? uiDefinition : undefined;
59
+ const uiDefinitionProperties = context.uiDefinitionContainer?.source.properties ?? {};
60
+ this.uiDefinition = context.uiDefinitionContainer?.source;
62
61
  const pricingEnabled = uiDefinitionProperties.pricingEnabled ? 'true' : 'false';
63
62
  const priceListId = uiDefinitionProperties.priceList;
64
63
  const runtimeContextProperties = this.runtimeService.runtimeContext?.properties;
@@ -116,7 +115,7 @@ export class RemoteComponent {
116
115
  let items = [lineItem];
117
116
  for (let i = 0; i < items.length; i++) {
118
117
  const item = items[i];
119
- const children = options.get(item.id);
118
+ const children = item && options.get(item.id);
120
119
  if (children) {
121
120
  item.lineItems = children;
122
121
  items = items.concat(children);
@@ -189,7 +188,7 @@ export class RemoteComponent {
189
188
  if (rootOption) {
190
189
  const featureOptions = optionConfigurations[rootOption.featureName] ?? (optionConfigurations[rootOption.featureName] = []);
191
190
  const originOption = !rootOption.hasChildren
192
- ? optionConfigurations[rootOption.featureName].find(({ optionId }) => optionId === rootOption.optionId)
191
+ ? optionConfigurations[rootOption.featureName]?.find(({ optionId }) => optionId === rootOption.optionId)
193
192
  : undefined;
194
193
  const option = originOption ?? {};
195
194
  option.optionId = option.optionId ?? rootOption.optionId;
@@ -242,8 +241,9 @@ export class RemoteComponent {
242
241
  }
243
242
  }
244
243
  for (const option of notBundleOptions) {
245
- if (bundleOptionsByOptionId[option.configuredProductId]) {
246
- bundleOptionsByOptionId[option.configuredProductId].hasChildren = true;
244
+ const bundleOption = bundleOptionsByOptionId[option.configuredProductId];
245
+ if (bundleOption) {
246
+ bundleOption.hasChildren = true;
247
247
  }
248
248
  }
249
249
  }
@@ -251,7 +251,7 @@ export class RemoteComponent {
251
251
  let items = lineItem.lineItems ?? [];
252
252
  for (let i = 0; i < items.length; i++) {
253
253
  const item = items[i];
254
- if (item.lineItems) {
254
+ if (item?.lineItems) {
255
255
  items = items.concat(item.lineItems.map(li => ({ ...li, parentLineItem: item })));
256
256
  }
257
257
  }
@@ -317,7 +317,7 @@ export class RemoteComponent {
317
317
  .forEach(mapping => {
318
318
  const attribute = lineItem.attributes.find(a => a.name === mapping.name);
319
319
  if (attribute) {
320
- new Set(mapping.properties[propertyName].split(',')).forEach(k => (result[k] = attribute.value));
320
+ new Set(mapping.properties[propertyName]?.split(',')).forEach(k => (result[k] = attribute.value));
321
321
  }
322
322
  });
323
323
  return result;
@@ -333,10 +333,10 @@ export class RemoteComponent {
333
333
  return optionConfigurations;
334
334
  }
335
335
  }
336
- RemoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i1.ConfigurationRuntimeService }, { token: i1.ConfigurationService }, { token: i1.ConfigurationState }, { token: i2.MessageService }, { token: i3.IntegrationState }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Component });
337
- RemoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RemoteComponent, selector: "vl-flow-remote", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i5.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
336
+ RemoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i1.ConfigurationRuntimeService }, { token: i1.ConfigurationService }, { token: i1.ConfigurationStateService }, { token: i2.MessageService }, { token: i1.IntegrationState }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component });
337
+ RemoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RemoteComponent, selector: "vl-flow-remote", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i5.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
338
338
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, decorators: [{
339
339
  type: Component,
340
340
  args: [{ selector: 'vl-flow-remote', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
341
- }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i1.ConfigurationRuntimeService }, { type: i1.ConfigurationService }, { type: i1.ConfigurationState }, { type: i2.MessageService }, { type: i3.IntegrationState }, { type: i4.Location }]; } });
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFVTCxJQUFJLEVBRUoseUJBQXlCLEVBQ3pCLG9CQUFvQixHQUNyQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGlCQUFpQixHQUVsQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBQ1AsVUFBVSxFQUNWLEtBQUssRUFDTCxFQUFFLEVBQ0YsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxHQUNYLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBZ0JkLE1BQU0sT0FBTyxlQUFlO0lBUzFCLFlBQ1UsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLGNBQTJDLEVBQzNDLG9CQUEwQyxFQUMxQyxrQkFBc0MsRUFDdEMsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLFFBQWtCO1FBUGxCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1C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LENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNsRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE9BQW1CO1FBQ2pELE1BQU0sb0JBQW9CLEdBQTZDLEVBQUUsQ0FBQztRQUMxRSxNQUFNLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7UUFFdkUsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDekUsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDOzs0R0F6WlUsZUFBZTtnR0FBZixlQUFlLHNEQ3RENUIsd1ZBU0E7MkZENkNhLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENoYXJnZUdyb3VwSXRlbSxcbiAgQ29udGV4dFByb3BlcnRpZXMsXG4gIExpbmVJdGVtLFxuICBScGNNZXNzYWdlLFxuICBScGNPcHRpb24sXG4gIFJwY09wdGlvbkNvbmZpZ3VyYXRpb24sXG4gIFJwY1Byb2R1Y3QsXG4gIFJwY1F1b3RlLFxuICBVSURlZmluaXRpb24sXG4gIFVVSUQsXG4gIFZsV2luZG93LFxuICBnZXRVSURlZmluaXRpb25Qcm9wZXJ0aWVzLFxuICBpc0xlZ2FjeVVJRGVmaW5pdGlvbixcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBGbG93QWN0aW9uLCBJbnRlZ3JhdGlvblN0YXRlIH0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2Ntcyc7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UsXG4gIENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uU3RhdGUsXG4gIENvbnRleHRTZXJ2aWNlLFxuICBRdW90ZURyYWZ0U2VydmljZSxcbiAgUnVudGltZUNvbnRleHQsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBmaXJzdCxcbiAgb2YsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGluZUl0ZW1XaXRoUGFyZW50IH0gZnJvbSAnLi9yZW1vdGUudHlwZXMnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogVmxXaW5kb3c7XG5cbmludGVyZmFjZSBTdGF0ZSB7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGZhaWx1cmU6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLWZsb3ctcmVtb3RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlbW90ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlbW90ZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVtb3RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHVibGljIHVpRGVmaW5pdGlvbj86IFVJRGVmaW5pdGlvbjtcbiAgcHVibGljIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdGU+KHsgbG9hZGluZzogdHJ1ZSwgZmFpbHVyZTogZmFsc2UgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBEWU5BTUlDX09QVElPTl9QUk9EVUNUU19LRVkgPSAnRHluYW1pYyc7XG5cbiAgcHJpdmF0ZSBycGNNZXNzYWdlOiBScGNNZXNzYWdlO1xuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcnVudGltZVNlcnZpY2U6IENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TdGF0ZTogQ29uZmlndXJhdGlvblN0YXRlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW50ZWdyYXRpb25TdGF0ZTogSW50ZWdyYXRpb25TdGF0ZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5ycGNNZXNzYWdlID0gSlNPTi5wYXJzZSh3aW5kb3cuUlBDX01FU1NBR0UgYXMgc3RyaW5nKTtcbiAgICB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucy5zb3J0KChhLCBiKSA9PiAoYS5mZWF0dXJlTnVtYmVyID8/IDk5OTk5KSAtIChiLmZlYXR1cmVOdW1iZXIgPz8gOTk5OTkpKTtcbiAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuRmxhZyh0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5jb25maWd1cmVkUHJvZHVjdElkKTtcblxuICAgIC8vIHVwZGF0ZSBjb250ZXh0IHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiBDb250ZXh0UHJvcGVydGllcyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlWydTQlFRX19PcHBvcnR1bml0eTJfX2MnXSkge1xuICAgICAgICBwcm9wZXJ0aWVzLk9wcG9ydHVuaXR5SWQgPSB0aGlzLnJwY01lc3NhZ2UucXVvdGVbJ1NCUVFfX09wcG9ydHVuaXR5Ml9fYyddO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJwY01lc3NhZ2UucXVvdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoeyBwcm9wZXJ0aWVzIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmluaXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvZHVjdElkID0gdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QuY29uZmlndXJlZFByb2R1Y3RJZDtcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcblxuICAgIGlmICghcHJvZHVjdElkIHx8ICFxdW90ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucnVudGltZVNlcnZpY2VcbiAgICAgIC5pbml0KHsgcHJvZHVjdElkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgdGFwKGNvbnRleHQgPT4ge1xuICAgICAgICAgIGNvbnN0IHVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSBnZXRVSURlZmluaXRpb25Qcm9wZXJ0aWVzKGNvbnRleHQudWlEZWZpbml0aW9uQ29udGFpbmVyKTtcbiAgICAgICAgICBjb25zdCB1aURlZmluaXRpb24gPSBjb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uc291cmNlO1xuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uID0gdWlEZWZpbml0aW9uICYmICFpc0xlZ2FjeVVJRGVmaW5pdGlvbih1aURlZmluaXRpb24pID8gdWlEZWZpbml0aW9uIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgY29uc3QgcHJpY2luZ0VuYWJsZWQgPSB1aURlZmluaXRpb25Qcm9wZXJ0aWVzLnByaWNpbmdFbmFibGVkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgICAgICBjb25zdCBwcmljZUxpc3RJZCA9IHVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2VMaXN0O1xuXG4gICAgICAgICAgY29uc3QgcnVudGltZUNvbnRleHRQcm9wZXJ0aWVzID0gdGhpcy5ydW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8ucHJvcGVydGllcztcbiAgICAgICAgICBpZiAocnVudGltZUNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBydW50aW1lQ29udGV4dFByb3BlcnRpZXMuUHJpY2VMaXN0SWQgPSBwcmljZUxpc3RJZDtcbiAgICAgICAgICAgIHJ1bnRpbWVDb250ZXh0UHJvcGVydGllcy5QcmljaW5nRW5hYmxlZCA9IHByaWNpbmdFbmFibGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgTW9kZWxJZDogY29udGV4dC5tb2RlbElkLFxuICAgICAgICAgICAgICBSdW50aW1lTW9kZTogJ1RFU1QnLFxuICAgICAgICAgICAgICBQcmljaW5nRW5hYmxlZDogcHJpY2luZ0VuYWJsZWQsXG4gICAgICAgICAgICAgIFByaWNlTGlzdElkOiBwcmljZUxpc3RJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnNldENvbmZpZ3VyYWJsZVJhbXAodGhpcy5jcmVhdGVMaW5lSXRlbSgpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMudGhyb3dJZk5vVUlEZWZpbml0aW9uKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb25TdGF0ZS5pbml0JCgpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogZmFsc2UgfSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMudWlEZWZpbml0aW9uPy5wcm9wZXJ0aWVzPy5zdXBwcmVzc1RvYXN0TWVzc2FnZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6IGVycm9yIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0aHJvd0lmTm9VSURlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIDxUPihzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICByZXR1cm4gc291cmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy51aURlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICdQcm9kdWN0IGRvZXMgbm90IGhhdmUgQ29uZmlndXJhdGlvbiBVSScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzb3VyY2UkO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvblN0YXRlXG4gICAgICAubGlzdGVuJChGbG93QWN0aW9uLlJFTU9URV9DQU5DRUwpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9jYXRpb24uYmFjaygpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmludGVncmF0aW9uU3RhdGVcbiAgICAgIC5saXN0ZW4kKEZsb3dBY3Rpb24uUkVNT1RFX0FQUExZKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnNhdmVScGNNZXNzYWdlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGluZUl0ZW0oKTogTGluZUl0ZW0ge1xuICAgIGNvbnN0IFtxdW90ZURyYWZ0TGluZUl0ZW1dID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Py5jdXJyZW50U3RhdGUgPz8gW107XG4gICAgaWYgKHF1b3RlRHJhZnRMaW5lSXRlbSAmJiAocXVvdGVEcmFmdExpbmVJdGVtLmF0dHJpYnV0ZXMubGVuZ3RoID4gMCB8fCBxdW90ZURyYWZ0TGluZUl0ZW0ubGluZUl0ZW1zLmxlbmd0aCA+IDApKSB7XG4gICAgICByZXR1cm4gcXVvdGVEcmFmdExpbmVJdGVtO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jcmVhdGVSb290TGluZUl0ZW0oKTtcbiAgICBjb25zdCBkeW5hbWljT3B0aW9uUHJvZHVjdHMgPSB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5vcHRpb25Db25maWd1cmF0aW9uc1t0aGlzLkRZTkFNSUNfT1BUSU9OX1BST0RVQ1RTX0tFWV07XG5cbiAgICBpZiAoZHluYW1pY09wdGlvblByb2R1Y3RzKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy50b1BhcmVudENoaWxkTWFwKGR5bmFtaWNPcHRpb25Qcm9kdWN0cyk7XG4gICAgICBsZXQgaXRlbXMgPSBbbGluZUl0ZW1dO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gb3B0aW9ucy5nZXQoaXRlbS5pZCk7XG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgIGl0ZW0ubGluZUl0ZW1zID0gY2hpbGRyZW47XG4gICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaW5lSXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUm9vdExpbmVJdGVtKCk6IExpbmVJdGVtIHtcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3Q7XG4gICAgY29uc3QgcnVudGltZUNvbnRleHQgPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0IGFzIFJ1bnRpbWVDb250ZXh0O1xuICAgIGNvbnN0IHZlbG9jZUluc3RhbmNlSWQgPSBwcm9kdWN0LmNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzWydWZWxvY2VJbnN0YW5jZUlkX19jJ107XG4gICAgY29uc3QgcXVvdGVJZCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdD8uY3VycmVudFN0YXRlWzBdPy5pZDtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogcXVvdGVJZCB8fCB2ZWxvY2VJbnN0YW5jZUlkIHx8IFVVSUQuVVVJRCgpLFxuICAgICAgdHlwZTogcnVudGltZUNvbnRleHQucHJvZHVjdFR5cGUgPz8gJycsXG4gICAgICBuYW1lOiBydW50aW1lQ29udGV4dC5wcm9wZXJ0aWVzPy5bJ2Rpc3BsYXlOYW1lJ10gfHwgcnVudGltZUNvbnRleHQucHJvZHVjdE5hbWUsXG4gICAgICBwcm9kdWN0TmFtZTogcnVudGltZUNvbnRleHQucHJvZHVjdE5hbWUsXG4gICAgICBwcm9kdWN0SWQ6IHJ1bnRpbWVDb250ZXh0LnByb2R1Y3RJZCxcbiAgICAgIGNmZ1N0YXR1czogJ0RlZmF1bHQnLFxuICAgICAgYWN0aW9uQ29kZTogJ0FERCcsXG4gICAgICBxdHk6IDEsXG4gICAgfSBhcyBMaW5lSXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgdG9QYXJlbnRDaGlsZE1hcChyZW1vdGVPcHRpb25Qcm9kdWN0czogUnBjT3B0aW9uQ29uZmlndXJhdGlvbltdKTogTWFwPHN0cmluZywgTGluZUl0ZW1bXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBMaW5lSXRlbVtdPigpO1xuXG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgcmVtb3RlT3B0aW9uUHJvZHVjdHMpIHtcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25EYXRhID0gb3B0aW9uPy5yZWFkT25seT8ubGluZTtcbiAgICAgIGNvbnN0IGlkID0gY29uZmlndXJhdGlvbkRhdGE/LlZlbG9jZUluc3RhbmNlSWRfX2M7XG4gICAgICBjb25zdCBwYXJlbnRJZCA9IGNvbmZpZ3VyYXRpb25EYXRhPy5WZWxvY2VQYXJlbnRJbnN0YW5jZUlkX19jO1xuXG4gICAgICBpZiAoIW9wdGlvbi5zZWxlY3RlZCB8fCAhY29uZmlndXJhdGlvbkRhdGEgfHwgIWlkIHx8ICFwYXJlbnRJZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvZHVjdElkID0gb3B0aW9uLnByb2R1Y3RJZDtcbiAgICAgIGNvbnN0IGxpbmVJdGVtID0ge1xuICAgICAgICBpZCxcbiAgICAgICAgcHJvZHVjdElkLFxuICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgdHlwZTogY29uZmlndXJhdGlvbkRhdGEuTW9kZWxUeXBlX19jLFxuICAgICAgICBwb3J0OiBjb25maWd1cmF0aW9uRGF0YS5Nb2RlbFBvcnRfX2MsXG4gICAgICAgIGNmZ1N0YXR1czogY29uZmlndXJhdGlvbkRhdGEuQ29uZmlndXJhdGlvblN0YXR1c19fYyxcbiAgICAgICAgYWN0aW9uQ29kZTogY29uZmlndXJhdGlvbkRhdGEuQWN0aW9uQ29kZV9fYyxcbiAgICAgICAgcXR5OiBvcHRpb24uUXVhbnRpdHksXG4gICAgICB9IGFzIExpbmVJdGVtO1xuXG4gICAgICBsZXQgc2libGluZ3MgPSByZXN1bHQuZ2V0KHByb2R1Y3RJZCk7XG4gICAgICBpZiAoIXNpYmxpbmdzKSB7XG4gICAgICAgIHJlc3VsdC5zZXQocGFyZW50SWQsIChzaWJsaW5ncyA9IFtdKSk7XG4gICAgICB9XG5cbiAgICAgIHNpYmxpbmdzLnB1c2gobGluZUl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUnBjTWVzc2FnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcbiAgICBjb25zdCBsaW5lSXRlbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0U25hcHNob3QoKTtcblxuICAgIGlmICghcXVvdGUgfHwgIWxpbmVJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ycGNNZXNzYWdlLlZlbG9jZVJlZmVyZW5jZUlkID0gcXVvdGUucXVvdGVJZDtcbiAgICB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5jb25maWd1cmF0aW9uRGF0YS5WZWxvY2VJbnN0YW5jZUlkX19jID0gbGluZUl0ZW0uaWQ7XG4gICAgY29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZmxhdHRlbkNoaWxkTGluZUl0ZW1zKGxpbmVJdGVtKTtcbiAgICBjb25zdCBzYXZpbmdNb2RlID0gd2luZG93LlNhdmluZ01vZGU7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnREYXRhKHRoaXMucnBjTWVzc2FnZS5wcm9kdWN0LCBsaW5lSXRlbSk7XG4gICAgdGhpcy5ycGNNZXNzYWdlLnF1b3RlID0gdGhpcy5tYXBBdHRyaWJ1dGVzVG8oJ1F1b3RlJywgbGluZUl0ZW0pIGFzIFJwY1F1b3RlO1xuXG4gICAgaWYgKHNhdmluZ01vZGUgPT09ICdBTEwnKSB7XG4gICAgICBjb25zdCBvcHRpb25Db25maWd1cmF0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uQ29uZmlndXJhdGlvbnModGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QpO1xuICAgICAgY29uc3Qgcm9vdFByb2R1Y3RPcHRpb25zID0gdGhpcy5ycGNNZXNzYWdlLm9wdGlvbnMuZmlsdGVyKHBvID0+IHBvLmNvbmZpZ3VyZWRQcm9kdWN0SWQgPT09IGxpbmVJdGVtLnByb2R1Y3RJZCk7XG5cbiAgICAgIGNoaWxkSXRlbXMuZm9yRWFjaChsaW5lSXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3RPcHRpb24gPSByb290UHJvZHVjdE9wdGlvbnMuZmluZChwbyA9PiBwby5vcHRpb25hbFByb2R1Y3RJZCA9PT0gbGluZUl0ZW0ucHJvZHVjdElkKTtcbiAgICAgICAgaWYgKHJvb3RPcHRpb24pIHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlT3B0aW9ucyA9XG4gICAgICAgICAgICBvcHRpb25Db25maWd1cmF0aW9uc1tyb290T3B0aW9uLmZlYXR1cmVOYW1lXSA/PyAob3B0aW9uQ29uZmlndXJhdGlvbnNbcm9vdE9wdGlvbi5mZWF0dXJlTmFtZV0gPSBbXSk7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luT3B0aW9uID0gIXJvb3RPcHRpb24uaGFzQ2hpbGRyZW5cbiAgICAgICAgICAgID8gb3B0aW9uQ29uZmlndXJhdGlvbnNbcm9vdE9wdGlvbi5mZWF0dXJlTmFtZV0uZmluZCgoeyBvcHRpb25JZCB9KSA9PiBvcHRpb25JZCA9PT0gcm9vdE9wdGlvbi5vcHRpb25JZClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbjogUnBjT3B0aW9uQ29uZmlndXJhdGlvbiA9IG9yaWdpbk9wdGlvbiA/PyAoe30gYXMgUnBjT3B0aW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgICBvcHRpb24ub3B0aW9uSWQgPSBvcHRpb24ub3B0aW9uSWQgPz8gcm9vdE9wdGlvbi5vcHRpb25JZDtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnREYXRhKG9wdGlvbiwgbGluZUl0ZW0pO1xuICAgICAgICAgIG9wdGlvbi5pbmRleCA9IG9wdGlvbi5pbmRleCA/PyBmZWF0dXJlT3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmICghb3JpZ2luT3B0aW9uKSB7XG4gICAgICAgICAgICBmZWF0dXJlT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxpbmVJdGVtLnBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWRQcm9kdWN0T3B0aW9uID0gdGhpcy5ycGNNZXNzYWdlLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgcG8gPT5cbiAgICAgICAgICAgICAgICBwby5jb25maWd1cmVkUHJvZHVjdElkID09PSBsaW5lSXRlbS5wYXJlbnRMaW5lSXRlbT8ucHJvZHVjdElkICYmXG4gICAgICAgICAgICAgICAgcG8ub3B0aW9uYWxQcm9kdWN0SWQgPT09IGxpbmVJdGVtLnByb2R1Y3RJZCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChuZXN0ZWRQcm9kdWN0T3B0aW9uKSB7XG4gICAgICAgICAgICAgIG9wdGlvbi5jb25maWd1cmF0aW9uRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb24uY29uZmlndXJhdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgVmVsb2NlUGFyZW50SW5zdGFuY2VJZF9fYzogbGluZUl0ZW0ucGFyZW50TGluZUl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgVmVsb2NlTmVzdGVkT3B0aW9uSWRfX2M6IG5lc3RlZFByb2R1Y3RPcHRpb24ub3B0aW9uSWQsXG4gICAgICAgICAgICAgICAgVmVsb2NlTmVzdGVkRmVhdHVyZUlkX19jOiBuZXN0ZWRQcm9kdWN0T3B0aW9uLmZlYXR1cmVJZCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ycGNNZXNzYWdlLmR5bmFtaWNGZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZU9wdGlvbnMgPSBvcHRpb25Db25maWd1cmF0aW9uc1tmZWF0dXJlLm5hbWVdID8/IChvcHRpb25Db25maWd1cmF0aW9uc1tmZWF0dXJlLm5hbWVdID0gW10pO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luT3B0aW9uID0gZmVhdHVyZU9wdGlvbnMuZmluZCgoeyBwcm9kdWN0SWQgfSkgPT4gcHJvZHVjdElkID09PSBsaW5lSXRlbS5wcm9kdWN0SWQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uOiBScGNPcHRpb25Db25maWd1cmF0aW9uID0gb3JpZ2luT3B0aW9uID8/ICh7fSBhcyBScGNPcHRpb25Db25maWd1cmF0aW9uKTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50RGF0YShvcHRpb24sIGxpbmVJdGVtKTtcbiAgICAgICAgICAgIG9wdGlvbi5pbmRleCA9IG9wdGlvbi5pbmRleCA/PyBmZWF0dXJlT3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIW9yaWdpbk9wdGlvbikge1xuICAgICAgICAgICAgICBmZWF0dXJlT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdCA9IHsgLi4udGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QsIG9wdGlvbkNvbmZpZ3VyYXRpb25zIH07XG4gICAgfVxuXG4gICAgd2luZG93LlJQQ19CUk9BRENBU1Q/LmFwcGx5KG51bGwsIFt0aGlzLnJwY01lc3NhZ2VdKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSGFzQ2hpbGRyZW5GbGFnKGJ1bmRsZVByb2R1Y3RJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYnVuZGxlT3B0aW9uc0J5T3B0aW9uSWQ6IFJlY29yZDxzdHJpbmcsIFJwY09wdGlvbj4gPSB7fTtcbiAgICBjb25zdCBub3RCdW5kbGVPcHRpb25zOiBScGNPcHRpb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcHJvZHVjdE9wdGlvbiBvZiB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucykge1xuICAgICAgaWYgKHByb2R1Y3RPcHRpb24uY29uZmlndXJlZFByb2R1Y3RJZCA9PT0gYnVuZGxlUHJvZHVjdElkKSB7XG4gICAgICAgIGJ1bmRsZU9wdGlvbnNCeU9wdGlvbklkW3Byb2R1Y3RPcHRpb24ub3B0aW9uYWxQcm9kdWN0SWRdID0gcHJvZHVjdE9wdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vdEJ1bmRsZU9wdGlvbnMucHVzaChwcm9kdWN0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygbm90QnVuZGxlT3B0aW9ucykge1xuICAgICAgaWYgKGJ1bmRsZU9wdGlvbnNCeU9wdGlvbklkW29wdGlvbi5jb25maWd1cmVkUHJvZHVjdElkXSkge1xuICAgICAgICBidW5kbGVPcHRpb25zQnlPcHRpb25JZFtvcHRpb24uY29uZmlndXJlZFByb2R1Y3RJZF0uaGFzQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkNoaWxkTGluZUl0ZW1zKGxpbmVJdGVtOiBMaW5lSXRlbSk6IExpbmVJdGVtV2l0aFBhcmVudFtdIHtcbiAgICBsZXQgaXRlbXMgPSBsaW5lSXRlbS5saW5lSXRlbXMgPz8gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgaWYgKGl0ZW0ubGluZUl0ZW1zKSB7XG4gICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KGl0ZW0ubGluZUl0ZW1zLm1hcChsaSA9PiAoeyAuLi5saSwgcGFyZW50TGluZUl0ZW06IGl0ZW0gfSkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb250ZW50RGF0YShlbnRpdHk6IFJwY1Byb2R1Y3QgfCBScGNPcHRpb25Db25maWd1cmF0aW9uLCBsaW5lSXRlbTogTGluZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAobGluZUl0ZW0ucHJvZHVjdElkKSB7XG4gICAgICBlbnRpdHkucHJvZHVjdElkID0gbGluZUl0ZW0ucHJvZHVjdElkO1xuICAgIH1cblxuICAgIGNvbnN0IHF1YW50aXR5QXR0cmlidXRlID0gbGluZUl0ZW0ucHJvcGVydGllc1sncXVhbnRpdHlBdHRyaWJ1dGUnXTtcbiAgICBlbnRpdHkuUXVhbnRpdHkgPSBxdWFudGl0eUF0dHJpYnV0ZVxuICAgICAgPyBsaW5lSXRlbS5hdHRyaWJ1dGVzLmZpbmQoYXR0cmlidXRlID0+IGF0dHJpYnV0ZS5uYW1lID09PSBxdWFudGl0eUF0dHJpYnV0ZSk/LnZhbHVlID8/IDFcbiAgICAgIDogbGluZUl0ZW0ucXR5O1xuXG4gICAgY29uc3QgdG90YWxQcmljZSA9IHRoaXMuY29tcHV0ZU5ldFByaWNlKGxpbmVJdGVtKTtcbiAgICBjb25zdCB0YXJnZXRUb3RhbFByaWNlRmllbGQgPSBsaW5lSXRlbS5wcm9wZXJ0aWVzWydUYXJnZXRUb3RhbFByaWNlRmllbGQnXSB8fCAnVG90YWxQcmljZV9fYyc7XG4gICAgZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFRvdGFsUHJpY2VGaWVsZF0gPSBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0VG90YWxQcmljZUZpZWxkXVxuICAgICAgPyBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0VG90YWxQcmljZUZpZWxkXSArIHRvdGFsUHJpY2VcbiAgICAgIDogdG90YWxQcmljZTtcblxuICAgIGNvbnN0IHRhcmdldFByaWNlRmllbGQgPSBsaW5lSXRlbS5wcm9wZXJ0aWVzWydUYXJnZXRQcmljZUZpZWxkJ10gfHwgJ1NCUVFfX0xpc3RQcmljZV9fYyc7XG4gICAgY29uc3QgcHJpY2UgPSBlbnRpdHkuUXVhbnRpdHkgIT0gbnVsbCA/IGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRUb3RhbFByaWNlRmllbGRdIC8gZW50aXR5LlF1YW50aXR5IHx8IDAgOiAwO1xuICAgIGNvbnN0IHRhcmdldFByaWNlVmFsdWUgPSBOdW1iZXIoZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFByaWNlRmllbGRdKSB8fCAwO1xuICAgIGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRQcmljZUZpZWxkXSA9IHRhcmdldFByaWNlVmFsdWVcbiAgICAgID8gKHRhcmdldFByaWNlVmFsdWUgKyBwcmljZSkudG9GaXhlZCgyKVxuICAgICAgOiBwcmljZS50b0ZpeGVkKDIpO1xuXG4gICAgZW50aXR5LmNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzID0gdGhpcy5tYXBBdHRyaWJ1dGVzVG8oJ0F0dHJpYnV0ZScsIGxpbmVJdGVtKTtcbiAgICBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGEgPSB7XG4gICAgICAuLi5lbnRpdHkuY29uZmlndXJhdGlvbkRhdGEsXG4gICAgICAuLi50aGlzLm1hcEF0dHJpYnV0ZXNUbygnRmllbGQnLCBsaW5lSXRlbSksXG4gICAgICAuLi50aGlzLm1hcEF0dHJpYnV0ZXNUbygnJywgbGluZUl0ZW0pLFxuICAgICAgVmVsb2NlSW5zdGFuY2VJZF9fYzogbGluZUl0ZW0uaWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5ldFByaWNlKGxpbmVJdGVtOiBMaW5lSXRlbSk6IG51bWJlciB7XG4gICAgaWYgKGxpbmVJdGVtLnByb3BlcnRpZXNbJ0dyb3VwQ2hhcmdlcyddKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdW1OZXRQcmljZShsaW5lSXRlbS5jaGFyZ2VHcm91cEl0ZW1zLCB0aGlzLmdldENoYXJnZU5hbWVTZXQobGluZUl0ZW0ucHJvcGVydGllc1snR3JvdXBDaGFyZ2VzJ10pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdW1OZXRQcmljZShsaW5lSXRlbS5jaGFyZ2VJdGVtcywgdGhpcy5nZXRDaGFyZ2VOYW1lU2V0KGxpbmVJdGVtLnByb3BlcnRpZXNbJ0NoYXJnZXMnXSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFyZ2VOYW1lU2V0KHByb3BlcnR5Pzogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbmV3IFNldChwcm9wZXJ0eS5zcGxpdCgnLCcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdW1OZXRQcmljZShjaGFyZ2VJdGVtczogQ2hhcmdlR3JvdXBJdGVtW10sIGNoYXJnZXM6IFNldDxzdHJpbmc+KTogbnVtYmVyIHtcbiAgICBsZXQgbmV0UHJpY2UgPSAwO1xuXG4gICAgZm9yIChjb25zdCBjaGFyZ2VJdGVtIG9mIGNoYXJnZUl0ZW1zKSB7XG4gICAgICBpZiAoIWNoYXJnZXMgfHwgY2hhcmdlcy5oYXMoY2hhcmdlSXRlbS5jaGFyZ2VUeXBlKSkge1xuICAgICAgICBuZXRQcmljZSArPSBjaGFyZ2VJdGVtLm5ldFByaWNlID8/IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldFByaWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBBdHRyaWJ1dGVzVG8odGFyZ2V0OiBzdHJpbmcsIGxpbmVJdGVtOiBMaW5lSXRlbSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZU1vZGVsPy5jb21wb25lbnRzLmdldChsaW5lSXRlbS50eXBlKTtcblxuICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9ICdtYXBUbycgKyB0YXJnZXQ7XG4gICAgY29tcG9uZW50LmF0dHJpYnV0ZXNcbiAgICAgIC5maWx0ZXIoYSA9PiBhLnByb3BlcnRpZXMgJiYgYS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0pXG4gICAgICAuZm9yRWFjaChtYXBwaW5nID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbGluZUl0ZW0uYXR0cmlidXRlcy5maW5kKGEgPT4gYS5uYW1lID09PSBtYXBwaW5nLm5hbWUpO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICBuZXcgU2V0KG1hcHBpbmcucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnNwbGl0KCcsJykpLmZvckVhY2goayA9PiAocmVzdWx0W2tdID0gYXR0cmlidXRlLnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3B0aW9uQ29uZmlndXJhdGlvbnMocHJvZHVjdDogUnBjUHJvZHVjdCk6IFJlY29yZDxzdHJpbmcsIFJwY09wdGlvbkNvbmZpZ3VyYXRpb25bXT4ge1xuICAgIGNvbnN0IG9wdGlvbkNvbmZpZ3VyYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBScGNPcHRpb25Db25maWd1cmF0aW9uW10+ID0ge307XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbkNvbmZpZ3VyYXRpb25zID0gcHJvZHVjdC5vcHRpb25Db25maWd1cmF0aW9ucyA/PyB7fTtcblxuICAgIE9iamVjdC5rZXlzKHJlcXVlc3RPcHRpb25Db25maWd1cmF0aW9ucykuZm9yRWFjaChrID0+IHtcbiAgICAgIG9wdGlvbkNvbmZpZ3VyYXRpb25zW2tdID0gKHJlcXVlc3RPcHRpb25Db25maWd1cmF0aW9uc1trXSA/PyBbXSkubWFwKG9wdCA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLm9wdCwgc2VsZWN0ZWQ6IGZhbHNlIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvcHRpb25Db25maWd1cmF0aW9ucztcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCI+XG4gIDx2bC1sb2FkZXIgKm5nSWY9XCJzdGF0ZS5sb2FkaW5nOyBlbHNlIGNvbnRlbnRcIiBbbGFiZWxdPVwiJ0xvYWRpbmcgVUknXCI+PC92bC1sb2FkZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhdGUuZmFpbHVyZVwiPlxuICAgICAgPHZsLWNtcy1wcmV2aWV3IFt1aURlZmluaXRpb25dPVwidWlEZWZpbml0aW9uXCI+PC92bC1jbXMtcHJldmlldz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
341
+ }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i1.ConfigurationRuntimeService }, { type: i1.ConfigurationService }, { type: i1.ConfigurationStateService }, { type: i2.MessageService }, { type: i1.IntegrationState }, { type: i3.Location }]; } });
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFVTCxJQUFJLEdBRUwsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIseUJBQXlCLEVBQ3pCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBRWxCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBRUwsRUFBRSxFQUNGLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsRUFDSCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFnQmQsTUFBTSxPQUFPLGVBQWU7SUFTMUIsWUFDVSxjQUE4QixFQUM5QixpQkFBb0MsRUFDcEMsY0FBMkMsRUFDM0Msb0JBQTBDLEVBQzFDLGtCQUE2QyxFQUM3QyxjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsUUFBa0I7UUFQbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsbUJBQWMsR0FBZCxjQUFjLENBQTZCO1FBQzNDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEyQjtRQUM3QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBZnJCLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFN0QsZ0NBQTJCLEdBQUcsU0FBUyxDQUFDO1FBR2pELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBWXZDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBcUIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV4RSw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUN6QixNQUFNLFVBQVUsR0FBc0IsRUFBRSxDQUFDO1lBRXpDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsRUFBRTtnQkFDbEQsVUFBVSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2FBQzNFO1lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE1BQU0sQ0FBQyxFQUFFO29CQUNyRCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUVoRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3hCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxjQUFjO2FBQ2hCLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO2FBQ25CLElBQUksQ0FDSCxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUN0RixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUM7WUFFMUQsTUFBTSxjQUFjLEdBQUcsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoRixNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUM7WUFFckQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUM7WUFDaEYsSUFBSSx3QkFBd0IsRUFBRTtnQkFDNUIsd0JBQXdCLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFDbkQsd0JBQXdCLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQzthQUMxRDtZQUVELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUN6QixVQUFVLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29CQUN4QixXQUFXLEVBQUUsTUFBTTtvQkFDbkIsY0FBYyxFQUFFLGNBQWM7b0JBQzlCLFdBQVcsRUFBRSxXQUFXO2lCQUN6QjthQUNGLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFDNUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUNoRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQy9ELFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNoRTtZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE9BQU8sQ0FBSSxPQUFzQixFQUFpQixFQUFFO1lBQ2xELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDdEIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0NBQXdDLENBQUMsQ0FBQztpQkFDbkU7Z0JBRUQsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQzthQUNqQyxJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7YUFDaEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsRUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDbkYsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDL0csT0FBTyxrQkFBa0IsQ0FBQztTQUMzQjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFN0csSUFBSSxxQkFBcUIsRUFBRTtZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUM3RCxJQUFJLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxRQUFRLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7b0JBQzFCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNoQzthQUNGO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBZ0MsQ0FBQztRQUM1RSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV2RSxPQUFPO1lBQ0wsRUFBRSxFQUFFLE9BQU8sSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzlDLElBQUksRUFBRSxjQUFjLENBQUMsV0FBVyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxjQUFjLENBQUMsV0FBVztZQUM5RSxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLEdBQUcsRUFBRSxDQUFDO1NBQ0ssQ0FBQztJQUNoQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsb0JBQThDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1FBRTdDLEtBQUssTUFBTSxNQUFNLElBQUksb0JBQW9CLEVBQUU7WUFDekMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQztZQUNqRCxNQUFNLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQztZQUNsRCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQztZQUU5RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUM5RCxTQUFTO2FBQ1Y7WUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHO2dCQUNmLEVBQUU7Z0JBQ0YsU0FBUztnQkFDVCxRQUFRO2dCQUNSLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxZQUFZO2dCQUNwQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsWUFBWTtnQkFDcEMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDbkQsVUFBVSxFQUFFLGlCQUFpQixDQUFDLGFBQWE7Z0JBQzNDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUTthQUNULENBQUM7WUFFZCxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN2QztZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV6RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBRXJDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQWEsQ0FBQztRQUU1RSxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDeEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFL0csVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGlCQUFpQixLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDOUYsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsTUFBTSxjQUFjLEdBQ2xCLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDdEcsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVzt3QkFDMUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDeEcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDZCxNQUFNLE1BQU0sR0FBMkIsWUFBWSxJQUFLLEVBQTZCLENBQUM7b0JBRXRGLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDO29CQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN6QyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFDckQsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBRXZCLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ2pCLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzdCO29CQUVELElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRTt3QkFDM0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RELEVBQUUsQ0FBQyxFQUFFLENBQ0gsRUFBRSxDQUFDLG1CQUFtQixLQUFLLFFBQVEsQ0FBQyxjQUFjLEVBQUUsU0FBUzs0QkFDN0QsRUFBRSxDQUFDLGlCQUFpQixLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQzlDLENBQUM7d0JBRUYsSUFBSSxtQkFBbUIsRUFBRTs0QkFDdkIsTUFBTSxDQUFDLGlCQUFpQixHQUFHO2dDQUN6QixHQUFHLE1BQU0sQ0FBQyxpQkFBaUI7Z0NBQzNCLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQ0FDckQsdUJBQXVCLEVBQUUsbUJBQW1CLENBQUMsUUFBUTtnQ0FDckQsd0JBQXdCLEVBQUUsbUJBQW1CLENBQUMsU0FBUzs2QkFDeEQsQ0FBQzt5QkFDSDtxQkFDRjtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ2hELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzt3QkFDdkcsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQzlGLE1BQU0sTUFBTSxHQUEyQixZQUFZLElBQUssRUFBNkIsQ0FBQzt3QkFFdEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDekMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUM7d0JBQ3JELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUV2QixJQUFJLENBQUMsWUFBWSxFQUFFOzRCQUNqQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUM3QjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUM7U0FDaEY7UUFFRCxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsZUFBdUI7UUFDbkQsTUFBTSx1QkFBdUIsR0FBOEIsRUFBRSxDQUFDO1FBQzlELE1BQU0sZ0JBQWdCLEdBQWdCLEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO1lBQ25ELElBQUksYUFBYSxDQUFDLG1CQUFtQixLQUFLLGVBQWUsRUFBRTtnQkFDekQsdUJBQXVCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsYUFBYSxDQUFDO2FBQzFFO2lCQUFNO2dCQUNMLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN0QztTQUNGO1FBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTtZQUNyQyxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN6RSxJQUFJLFlBQVksRUFBRTtnQkFDaEIsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDakM7U0FDRjtJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUFrQjtRQUM5QyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQUNuQixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkY7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQTJDLEVBQUUsUUFBa0I7UUFDdkYsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUN2QztRQUVELE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLEdBQUcsaUJBQWlCO1lBQ2pDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQztZQUN6RixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUVqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLGVBQWUsQ0FBQztRQUM5RixNQUFNLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7WUFDL0YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLFVBQVU7WUFDOUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUVmLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO1FBQ3pGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGdCQUFnQjtZQUMzRCxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJCLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3RSxNQUFNLENBQUMsaUJBQWlCLEdBQUc7WUFDekIsR0FBRyxNQUFNLENBQUMsaUJBQWlCO1lBQzNCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1lBQzFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDO1lBQ3JDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxFQUFFO1NBQ2pDLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWtCO1FBQ3hDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN2QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoSDtRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsUUFBaUI7UUFDeEMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckM7UUFFRCxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxXQUE4QixFQUFFLE9BQW9CO1FBQ3RFLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVqQixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtZQUNwQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNsRCxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7YUFDdEM7U0FDRjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYyxFQUFFLFFBQWtCO1FBQ3hELE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEYsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxVQUFVO2FBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN2RCxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV6RSxJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ25HO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBbUI7UUFDakQsTUFBTSxvQkFBb0IsR0FBNkMsRUFBRSxDQUFDO1FBQzFFLE1BQU0sMkJBQTJCLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztRQUV2RSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25ELG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RSxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7OzRHQXpaVSxlQUFlO2dHQUFmLGVBQWUsc0RDckQ1Qix3VkFTQTsyRkQ0Q2EsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhcmdlR3JvdXBJdGVtLFxuICBDb250ZXh0UHJvcGVydGllcyxcbiAgTGluZUl0ZW0sXG4gIFJwY01lc3NhZ2UsXG4gIFJwY09wdGlvbixcbiAgUnBjT3B0aW9uQ29uZmlndXJhdGlvbixcbiAgUnBjUHJvZHVjdCxcbiAgUnBjUXVvdGUsXG4gIFVJRGVmaW5pdGlvbixcbiAgVVVJRCxcbiAgVmxXaW5kb3csXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgRmxvd0FjdGlvbiB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jbXMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgQ29uZmlndXJhdGlvblN0YXRlU2VydmljZSxcbiAgQ29udGV4dFNlcnZpY2UsXG4gIEludGVncmF0aW9uU3RhdGUsXG4gIFF1b3RlRHJhZnRTZXJ2aWNlLFxuICBSdW50aW1lQ29udGV4dCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2NvcmUnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGZpcnN0LFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMaW5lSXRlbVdpdGhQYXJlbnQgfSBmcm9tICcuL3JlbW90ZS50eXBlcyc7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBWbFdpbmRvdztcblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgZmFpbHVyZTogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmwtZmxvdy1yZW1vdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVtb3RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVtb3RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBSZW1vdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgdWlEZWZpbml0aW9uPzogVUlEZWZpbml0aW9uO1xuICBwdWJsaWMgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGF0ZT4oeyBsb2FkaW5nOiB0cnVlLCBmYWlsdXJlOiBmYWxzZSB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERZTkFNSUNfT1BUSU9OX1BST0RVQ1RTX0tFWSA9ICdEeW5hbWljJztcblxuICBwcml2YXRlIHJwY01lc3NhZ2U6IFJwY01lc3NhZ2U7XG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblN0YXRlOiBDb25maWd1cmF0aW9uU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW50ZWdyYXRpb25TdGF0ZTogSW50ZWdyYXRpb25TdGF0ZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5ycGNNZXNzYWdlID0gSlNPTi5wYXJzZSh3aW5kb3cuUlBDX01FU1NBR0UgYXMgc3RyaW5nKTtcbiAgICB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucy5zb3J0KChhLCBiKSA9PiAoYS5mZWF0dXJlTnVtYmVyID8/IDk5OTk5KSAtIChiLmZlYXR1cmVOdW1iZXIgPz8gOTk5OTkpKTtcbiAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuRmxhZyh0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5jb25maWd1cmVkUHJvZHVjdElkKTtcblxuICAgIC8vIHVwZGF0ZSBjb250ZXh0IHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiBDb250ZXh0UHJvcGVydGllcyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlWydTQlFRX19PcHBvcnR1bml0eTJfX2MnXSkge1xuICAgICAgICBwcm9wZXJ0aWVzLk9wcG9ydHVuaXR5SWQgPSB0aGlzLnJwY01lc3NhZ2UucXVvdGVbJ1NCUVFfX09wcG9ydHVuaXR5Ml9fYyddO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJwY01lc3NhZ2UucXVvdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoeyBwcm9wZXJ0aWVzIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmluaXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvZHVjdElkID0gdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QuY29uZmlndXJlZFByb2R1Y3RJZDtcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcblxuICAgIGlmICghcHJvZHVjdElkIHx8ICFxdW90ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucnVudGltZVNlcnZpY2VcbiAgICAgIC5pbml0KHsgcHJvZHVjdElkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgdGFwKGNvbnRleHQgPT4ge1xuICAgICAgICAgIGNvbnN0IHVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSBjb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uc291cmNlLnByb3BlcnRpZXMgPz8ge307XG4gICAgICAgICAgdGhpcy51aURlZmluaXRpb24gPSBjb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uc291cmNlO1xuXG4gICAgICAgICAgY29uc3QgcHJpY2luZ0VuYWJsZWQgPSB1aURlZmluaXRpb25Qcm9wZXJ0aWVzLnByaWNpbmdFbmFibGVkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgICAgICBjb25zdCBwcmljZUxpc3RJZCA9IHVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2VMaXN0O1xuXG4gICAgICAgICAgY29uc3QgcnVudGltZUNvbnRleHRQcm9wZXJ0aWVzID0gdGhpcy5ydW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8ucHJvcGVydGllcztcbiAgICAgICAgICBpZiAocnVudGltZUNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBydW50aW1lQ29udGV4dFByb3BlcnRpZXMuUHJpY2VMaXN0SWQgPSBwcmljZUxpc3RJZDtcbiAgICAgICAgICAgIHJ1bnRpbWVDb250ZXh0UHJvcGVydGllcy5QcmljaW5nRW5hYmxlZCA9IHByaWNpbmdFbmFibGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgTW9kZWxJZDogY29udGV4dC5tb2RlbElkLFxuICAgICAgICAgICAgICBSdW50aW1lTW9kZTogJ1RFU1QnLFxuICAgICAgICAgICAgICBQcmljaW5nRW5hYmxlZDogcHJpY2luZ0VuYWJsZWQsXG4gICAgICAgICAgICAgIFByaWNlTGlzdElkOiBwcmljZUxpc3RJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnNldENvbmZpZ3VyYWJsZVJhbXAodGhpcy5jcmVhdGVMaW5lSXRlbSgpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMudGhyb3dJZk5vVUlEZWZpbml0aW9uKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb25TdGF0ZS5pbml0JCgpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogZmFsc2UgfSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMudWlEZWZpbml0aW9uPy5wcm9wZXJ0aWVzPy5zdXBwcmVzc1RvYXN0TWVzc2FnZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6IGVycm9yIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0aHJvd0lmTm9VSURlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIDxUPihzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICByZXR1cm4gc291cmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy51aURlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICdQcm9kdWN0IGRvZXMgbm90IGhhdmUgQ29uZmlndXJhdGlvbiBVSScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzb3VyY2UkO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvblN0YXRlXG4gICAgICAubGlzdGVuJChGbG93QWN0aW9uLlJFTU9URV9DQU5DRUwpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9jYXRpb24uYmFjaygpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmludGVncmF0aW9uU3RhdGVcbiAgICAgIC5saXN0ZW4kKEZsb3dBY3Rpb24uUkVNT1RFX0FQUExZKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnNhdmVScGNNZXNzYWdlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGluZUl0ZW0oKTogTGluZUl0ZW0ge1xuICAgIGNvbnN0IFtxdW90ZURyYWZ0TGluZUl0ZW1dID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Py5jdXJyZW50U3RhdGUgPz8gW107XG4gICAgaWYgKHF1b3RlRHJhZnRMaW5lSXRlbSAmJiAocXVvdGVEcmFmdExpbmVJdGVtLmF0dHJpYnV0ZXMubGVuZ3RoID4gMCB8fCBxdW90ZURyYWZ0TGluZUl0ZW0ubGluZUl0ZW1zLmxlbmd0aCA+IDApKSB7XG4gICAgICByZXR1cm4gcXVvdGVEcmFmdExpbmVJdGVtO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jcmVhdGVSb290TGluZUl0ZW0oKTtcbiAgICBjb25zdCBkeW5hbWljT3B0aW9uUHJvZHVjdHMgPSB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5vcHRpb25Db25maWd1cmF0aW9uc1t0aGlzLkRZTkFNSUNfT1BUSU9OX1BST0RVQ1RTX0tFWV07XG5cbiAgICBpZiAoZHluYW1pY09wdGlvblByb2R1Y3RzKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy50b1BhcmVudENoaWxkTWFwKGR5bmFtaWNPcHRpb25Qcm9kdWN0cyk7XG4gICAgICBsZXQgaXRlbXMgPSBbbGluZUl0ZW1dO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gaXRlbSAmJiBvcHRpb25zLmdldChpdGVtLmlkKTtcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgaXRlbS5saW5lSXRlbXMgPSBjaGlsZHJlbjtcbiAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVJdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSb290TGluZUl0ZW0oKTogTGluZUl0ZW0ge1xuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdDtcbiAgICBjb25zdCBydW50aW1lQ29udGV4dCA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQgYXMgUnVudGltZUNvbnRleHQ7XG4gICAgY29uc3QgdmVsb2NlSW5zdGFuY2VJZCA9IHByb2R1Y3QuY29uZmlndXJhdGlvbkF0dHJpYnV0ZXNbJ1ZlbG9jZUluc3RhbmNlSWRfX2MnXTtcbiAgICBjb25zdCBxdW90ZUlkID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Py5jdXJyZW50U3RhdGVbMF0/LmlkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBxdW90ZUlkIHx8IHZlbG9jZUluc3RhbmNlSWQgfHwgVVVJRC5VVUlEKCksXG4gICAgICB0eXBlOiBydW50aW1lQ29udGV4dC5wcm9kdWN0VHlwZSA/PyAnJyxcbiAgICAgIG5hbWU6IHJ1bnRpbWVDb250ZXh0LnByb3BlcnRpZXM/LlsnZGlzcGxheU5hbWUnXSB8fCBydW50aW1lQ29udGV4dC5wcm9kdWN0TmFtZSxcbiAgICAgIHByb2R1Y3ROYW1lOiBydW50aW1lQ29udGV4dC5wcm9kdWN0TmFtZSxcbiAgICAgIHByb2R1Y3RJZDogcnVudGltZUNvbnRleHQucHJvZHVjdElkLFxuICAgICAgY2ZnU3RhdHVzOiAnRGVmYXVsdCcsXG4gICAgICBhY3Rpb25Db2RlOiAnQUREJyxcbiAgICAgIHF0eTogMSxcbiAgICB9IGFzIExpbmVJdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1BhcmVudENoaWxkTWFwKHJlbW90ZU9wdGlvblByb2R1Y3RzOiBScGNPcHRpb25Db25maWd1cmF0aW9uW10pOiBNYXA8c3RyaW5nLCBMaW5lSXRlbVtdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxzdHJpbmcsIExpbmVJdGVtW10+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiByZW1vdGVPcHRpb25Qcm9kdWN0cykge1xuICAgICAgY29uc3QgY29uZmlndXJhdGlvbkRhdGEgPSBvcHRpb24/LnJlYWRPbmx5Py5saW5lO1xuICAgICAgY29uc3QgaWQgPSBjb25maWd1cmF0aW9uRGF0YT8uVmVsb2NlSW5zdGFuY2VJZF9fYztcbiAgICAgIGNvbnN0IHBhcmVudElkID0gY29uZmlndXJhdGlvbkRhdGE/LlZlbG9jZVBhcmVudEluc3RhbmNlSWRfX2M7XG5cbiAgICAgIGlmICghb3B0aW9uLnNlbGVjdGVkIHx8ICFjb25maWd1cmF0aW9uRGF0YSB8fCAhaWQgfHwgIXBhcmVudElkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9kdWN0SWQgPSBvcHRpb24ucHJvZHVjdElkO1xuICAgICAgY29uc3QgbGluZUl0ZW0gPSB7XG4gICAgICAgIGlkLFxuICAgICAgICBwcm9kdWN0SWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICB0eXBlOiBjb25maWd1cmF0aW9uRGF0YS5Nb2RlbFR5cGVfX2MsXG4gICAgICAgIHBvcnQ6IGNvbmZpZ3VyYXRpb25EYXRhLk1vZGVsUG9ydF9fYyxcbiAgICAgICAgY2ZnU3RhdHVzOiBjb25maWd1cmF0aW9uRGF0YS5Db25maWd1cmF0aW9uU3RhdHVzX19jLFxuICAgICAgICBhY3Rpb25Db2RlOiBjb25maWd1cmF0aW9uRGF0YS5BY3Rpb25Db2RlX19jLFxuICAgICAgICBxdHk6IG9wdGlvbi5RdWFudGl0eSxcbiAgICAgIH0gYXMgTGluZUl0ZW07XG5cbiAgICAgIGxldCBzaWJsaW5ncyA9IHJlc3VsdC5nZXQocHJvZHVjdElkKTtcbiAgICAgIGlmICghc2libGluZ3MpIHtcbiAgICAgICAgcmVzdWx0LnNldChwYXJlbnRJZCwgKHNpYmxpbmdzID0gW10pKTtcbiAgICAgIH1cblxuICAgICAgc2libGluZ3MucHVzaChsaW5lSXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHNhdmVScGNNZXNzYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IHF1b3RlID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0O1xuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRTbmFwc2hvdCgpO1xuXG4gICAgaWYgKCFxdW90ZSB8fCAhbGluZUl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJwY01lc3NhZ2UuVmVsb2NlUmVmZXJlbmNlSWQgPSBxdW90ZS5xdW90ZUlkO1xuICAgIHRoaXMucnBjTWVzc2FnZS5wcm9kdWN0LmNvbmZpZ3VyYXRpb25EYXRhLlZlbG9jZUluc3RhbmNlSWRfX2MgPSBsaW5lSXRlbS5pZDtcbiAgICBjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5mbGF0dGVuQ2hpbGRMaW5lSXRlbXMobGluZUl0ZW0pO1xuICAgIGNvbnN0IHNhdmluZ01vZGUgPSB3aW5kb3cuU2F2aW5nTW9kZTtcblxuICAgIHRoaXMudXBkYXRlQ29udGVudERhdGEodGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QsIGxpbmVJdGVtKTtcbiAgICB0aGlzLnJwY01lc3NhZ2UucXVvdGUgPSB0aGlzLm1hcEF0dHJpYnV0ZXNUbygnUXVvdGUnLCBsaW5lSXRlbSkgYXMgUnBjUXVvdGU7XG5cbiAgICBpZiAoc2F2aW5nTW9kZSA9PT0gJ0FMTCcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkNvbmZpZ3VyYXRpb25zID0gdGhpcy5nZXRPcHRpb25Db25maWd1cmF0aW9ucyh0aGlzLnJwY01lc3NhZ2UucHJvZHVjdCk7XG4gICAgICBjb25zdCByb290UHJvZHVjdE9wdGlvbnMgPSB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucy5maWx0ZXIocG8gPT4gcG8uY29uZmlndXJlZFByb2R1Y3RJZCA9PT0gbGluZUl0ZW0ucHJvZHVjdElkKTtcblxuICAgICAgY2hpbGRJdGVtcy5mb3JFYWNoKGxpbmVJdGVtID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdE9wdGlvbiA9IHJvb3RQcm9kdWN0T3B0aW9ucy5maW5kKHBvID0+IHBvLm9wdGlvbmFsUHJvZHVjdElkID09PSBsaW5lSXRlbS5wcm9kdWN0SWQpO1xuICAgICAgICBpZiAocm9vdE9wdGlvbikge1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVPcHRpb25zID1cbiAgICAgICAgICAgIG9wdGlvbkNvbmZpZ3VyYXRpb25zW3Jvb3RPcHRpb24uZmVhdHVyZU5hbWVdID8/IChvcHRpb25Db25maWd1cmF0aW9uc1tyb290T3B0aW9uLmZlYXR1cmVOYW1lXSA9IFtdKTtcbiAgICAgICAgICBjb25zdCBvcmlnaW5PcHRpb24gPSAhcm9vdE9wdGlvbi5oYXNDaGlsZHJlblxuICAgICAgICAgICAgPyBvcHRpb25Db25maWd1cmF0aW9uc1tyb290T3B0aW9uLmZlYXR1cmVOYW1lXT8uZmluZCgoeyBvcHRpb25JZCB9KSA9PiBvcHRpb25JZCA9PT0gcm9vdE9wdGlvbi5vcHRpb25JZClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbjogUnBjT3B0aW9uQ29uZmlndXJhdGlvbiA9IG9yaWdpbk9wdGlvbiA/PyAoe30gYXMgUnBjT3B0aW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgICBvcHRpb24ub3B0aW9uSWQgPSBvcHRpb24ub3B0aW9uSWQgPz8gcm9vdE9wdGlvbi5vcHRpb25JZDtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnREYXRhKG9wdGlvbiwgbGluZUl0ZW0pO1xuICAgICAgICAgIG9wdGlvbi5pbmRleCA9IG9wdGlvbi5pbmRleCA/PyBmZWF0dXJlT3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmICghb3JpZ2luT3B0aW9uKSB7XG4gICAgICAgICAgICBmZWF0dXJlT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxpbmVJdGVtLnBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWRQcm9kdWN0T3B0aW9uID0gdGhpcy5ycGNNZXNzYWdlLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgcG8gPT5cbiAgICAgICAgICAgICAgICBwby5jb25maWd1cmVkUHJvZHVjdElkID09PSBsaW5lSXRlbS5wYXJlbnRMaW5lSXRlbT8ucHJvZHVjdElkICYmXG4gICAgICAgICAgICAgICAgcG8ub3B0aW9uYWxQcm9kdWN0SWQgPT09IGxpbmVJdGVtLnByb2R1Y3RJZCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChuZXN0ZWRQcm9kdWN0T3B0aW9uKSB7XG4gICAgICAgICAgICAgIG9wdGlvbi5jb25maWd1cmF0aW9uRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb24uY29uZmlndXJhdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgVmVsb2NlUGFyZW50SW5zdGFuY2VJZF9fYzogbGluZUl0ZW0ucGFyZW50TGluZUl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgVmVsb2NlTmVzdGVkT3B0aW9uSWRfX2M6IG5lc3RlZFByb2R1Y3RPcHRpb24ub3B0aW9uSWQsXG4gICAgICAgICAgICAgICAgVmVsb2NlTmVzdGVkRmVhdHVyZUlkX19jOiBuZXN0ZWRQcm9kdWN0T3B0aW9uLmZlYXR1cmVJZCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ycGNNZXNzYWdlLmR5bmFtaWNGZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZU9wdGlvbnMgPSBvcHRpb25Db25maWd1cmF0aW9uc1tmZWF0dXJlLm5hbWVdID8/IChvcHRpb25Db25maWd1cmF0aW9uc1tmZWF0dXJlLm5hbWVdID0gW10pO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luT3B0aW9uID0gZmVhdHVyZU9wdGlvbnMuZmluZCgoeyBwcm9kdWN0SWQgfSkgPT4gcHJvZHVjdElkID09PSBsaW5lSXRlbS5wcm9kdWN0SWQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uOiBScGNPcHRpb25Db25maWd1cmF0aW9uID0gb3JpZ2luT3B0aW9uID8/ICh7fSBhcyBScGNPcHRpb25Db25maWd1cmF0aW9uKTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50RGF0YShvcHRpb24sIGxpbmVJdGVtKTtcbiAgICAgICAgICAgIG9wdGlvbi5pbmRleCA9IG9wdGlvbi5pbmRleCA/PyBmZWF0dXJlT3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIW9yaWdpbk9wdGlvbikge1xuICAgICAgICAgICAgICBmZWF0dXJlT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdCA9IHsgLi4udGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QsIG9wdGlvbkNvbmZpZ3VyYXRpb25zIH07XG4gICAgfVxuXG4gICAgd2luZG93LlJQQ19CUk9BRENBU1Q/LmFwcGx5KG51bGwsIFt0aGlzLnJwY01lc3NhZ2VdKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSGFzQ2hpbGRyZW5GbGFnKGJ1bmRsZVByb2R1Y3RJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYnVuZGxlT3B0aW9uc0J5T3B0aW9uSWQ6IFJlY29yZDxzdHJpbmcsIFJwY09wdGlvbj4gPSB7fTtcbiAgICBjb25zdCBub3RCdW5kbGVPcHRpb25zOiBScGNPcHRpb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcHJvZHVjdE9wdGlvbiBvZiB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucykge1xuICAgICAgaWYgKHByb2R1Y3RPcHRpb24uY29uZmlndXJlZFByb2R1Y3RJZCA9PT0gYnVuZGxlUHJvZHVjdElkKSB7XG4gICAgICAgIGJ1bmRsZU9wdGlvbnNCeU9wdGlvbklkW3Byb2R1Y3RPcHRpb24ub3B0aW9uYWxQcm9kdWN0SWRdID0gcHJvZHVjdE9wdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vdEJ1bmRsZU9wdGlvbnMucHVzaChwcm9kdWN0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygbm90QnVuZGxlT3B0aW9ucykge1xuICAgICAgY29uc3QgYnVuZGxlT3B0aW9uID0gYnVuZGxlT3B0aW9uc0J5T3B0aW9uSWRbb3B0aW9uLmNvbmZpZ3VyZWRQcm9kdWN0SWRdO1xuICAgICAgaWYgKGJ1bmRsZU9wdGlvbikge1xuICAgICAgICBidW5kbGVPcHRpb24uaGFzQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkNoaWxkTGluZUl0ZW1zKGxpbmVJdGVtOiBMaW5lSXRlbSk6IExpbmVJdGVtV2l0aFBhcmVudFtdIHtcbiAgICBsZXQgaXRlbXMgPSBsaW5lSXRlbS5saW5lSXRlbXMgPz8gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgaWYgKGl0ZW0/LmxpbmVJdGVtcykge1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChpdGVtLmxpbmVJdGVtcy5tYXAobGkgPT4gKHsgLi4ubGksIHBhcmVudExpbmVJdGVtOiBpdGVtIH0pKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29udGVudERhdGEoZW50aXR5OiBScGNQcm9kdWN0IHwgUnBjT3B0aW9uQ29uZmlndXJhdGlvbiwgbGluZUl0ZW06IExpbmVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGxpbmVJdGVtLnByb2R1Y3RJZCkge1xuICAgICAgZW50aXR5LnByb2R1Y3RJZCA9IGxpbmVJdGVtLnByb2R1Y3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWFudGl0eUF0dHJpYnV0ZSA9IGxpbmVJdGVtLnByb3BlcnRpZXNbJ3F1YW50aXR5QXR0cmlidXRlJ107XG4gICAgZW50aXR5LlF1YW50aXR5ID0gcXVhbnRpdHlBdHRyaWJ1dGVcbiAgICAgID8gbGluZUl0ZW0uYXR0cmlidXRlcy5maW5kKGF0dHJpYnV0ZSA9PiBhdHRyaWJ1dGUubmFtZSA9PT0gcXVhbnRpdHlBdHRyaWJ1dGUpPy52YWx1ZSA/PyAxXG4gICAgICA6IGxpbmVJdGVtLnF0eTtcblxuICAgIGNvbnN0IHRvdGFsUHJpY2UgPSB0aGlzLmNvbXB1dGVOZXRQcmljZShsaW5lSXRlbSk7XG4gICAgY29uc3QgdGFyZ2V0VG90YWxQcmljZUZpZWxkID0gbGluZUl0ZW0ucHJvcGVydGllc1snVGFyZ2V0VG90YWxQcmljZUZpZWxkJ10gfHwgJ1RvdGFsUHJpY2VfX2MnO1xuICAgIGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRUb3RhbFByaWNlRmllbGRdID0gZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFRvdGFsUHJpY2VGaWVsZF1cbiAgICAgID8gZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFRvdGFsUHJpY2VGaWVsZF0gKyB0b3RhbFByaWNlXG4gICAgICA6IHRvdGFsUHJpY2U7XG5cbiAgICBjb25zdCB0YXJnZXRQcmljZUZpZWxkID0gbGluZUl0ZW0ucHJvcGVydGllc1snVGFyZ2V0UHJpY2VGaWVsZCddIHx8ICdTQlFRX19MaXN0UHJpY2VfX2MnO1xuICAgIGNvbnN0IHByaWNlID0gZW50aXR5LlF1YW50aXR5ICE9IG51bGwgPyBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0VG90YWxQcmljZUZpZWxkXSAvIGVudGl0eS5RdWFudGl0eSB8fCAwIDogMDtcbiAgICBjb25zdCB0YXJnZXRQcmljZVZhbHVlID0gTnVtYmVyKGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRQcmljZUZpZWxkXSkgfHwgMDtcbiAgICBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0UHJpY2VGaWVsZF0gPSB0YXJnZXRQcmljZVZhbHVlXG4gICAgICA/ICh0YXJnZXRQcmljZVZhbHVlICsgcHJpY2UpLnRvRml4ZWQoMilcbiAgICAgIDogcHJpY2UudG9GaXhlZCgyKTtcblxuICAgIGVudGl0eS5jb25maWd1cmF0aW9uQXR0cmlidXRlcyA9IHRoaXMubWFwQXR0cmlidXRlc1RvKCdBdHRyaWJ1dGUnLCBsaW5lSXRlbSk7XG4gICAgZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhID0ge1xuICAgICAgLi4uZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhLFxuICAgICAgLi4udGhpcy5tYXBBdHRyaWJ1dGVzVG8oJ0ZpZWxkJywgbGluZUl0ZW0pLFxuICAgICAgLi4udGhpcy5tYXBBdHRyaWJ1dGVzVG8oJycsIGxpbmVJdGVtKSxcbiAgICAgIFZlbG9jZUluc3RhbmNlSWRfX2M6IGxpbmVJdGVtLmlkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVOZXRQcmljZShsaW5lSXRlbTogTGluZUl0ZW0pOiBudW1iZXIge1xuICAgIGlmIChsaW5lSXRlbS5wcm9wZXJ0aWVzWydHcm91cENoYXJnZXMnXSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3VtTmV0UHJpY2UobGluZUl0ZW0uY2hhcmdlR3JvdXBJdGVtcywgdGhpcy5nZXRDaGFyZ2VOYW1lU2V0KGxpbmVJdGVtLnByb3BlcnRpZXNbJ0dyb3VwQ2hhcmdlcyddKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3VtTmV0UHJpY2UobGluZUl0ZW0uY2hhcmdlSXRlbXMsIHRoaXMuZ2V0Q2hhcmdlTmFtZVNldChsaW5lSXRlbS5wcm9wZXJ0aWVzWydDaGFyZ2VzJ10pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hhcmdlTmFtZVNldChwcm9wZXJ0eT86IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQocHJvcGVydHkuc3BsaXQoJywnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VtTmV0UHJpY2UoY2hhcmdlSXRlbXM6IENoYXJnZUdyb3VwSXRlbVtdLCBjaGFyZ2VzOiBTZXQ8c3RyaW5nPik6IG51bWJlciB7XG4gICAgbGV0IG5ldFByaWNlID0gMDtcblxuICAgIGZvciAoY29uc3QgY2hhcmdlSXRlbSBvZiBjaGFyZ2VJdGVtcykge1xuICAgICAgaWYgKCFjaGFyZ2VzIHx8IGNoYXJnZXMuaGFzKGNoYXJnZUl0ZW0uY2hhcmdlVHlwZSkpIHtcbiAgICAgICAgbmV0UHJpY2UgKz0gY2hhcmdlSXRlbS5uZXRQcmljZSA/PyAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXRQcmljZTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQXR0cmlidXRlc1RvKHRhcmdldDogc3RyaW5nLCBsaW5lSXRlbTogTGluZUl0ZW0pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVNb2RlbD8uY29tcG9uZW50cy5nZXQobGluZUl0ZW0udHlwZSk7XG5cbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSAnbWFwVG8nICsgdGFyZ2V0O1xuICAgIGNvbXBvbmVudC5hdHRyaWJ1dGVzXG4gICAgICAuZmlsdGVyKGEgPT4gYS5wcm9wZXJ0aWVzICYmIGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdKVxuICAgICAgLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGxpbmVJdGVtLmF0dHJpYnV0ZXMuZmluZChhID0+IGEubmFtZSA9PT0gbWFwcGluZy5uYW1lKTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgbmV3IFNldChtYXBwaW5nLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXT8uc3BsaXQoJywnKSkuZm9yRWFjaChrID0+IChyZXN1bHRba10gPSBhdHRyaWJ1dGUudmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25Db25maWd1cmF0aW9ucyhwcm9kdWN0OiBScGNQcm9kdWN0KTogUmVjb3JkPHN0cmluZywgUnBjT3B0aW9uQ29uZmlndXJhdGlvbltdPiB7XG4gICAgY29uc3Qgb3B0aW9uQ29uZmlndXJhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFJwY09wdGlvbkNvbmZpZ3VyYXRpb25bXT4gPSB7fTtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uQ29uZmlndXJhdGlvbnMgPSBwcm9kdWN0Lm9wdGlvbkNvbmZpZ3VyYXRpb25zID8/IHt9O1xuXG4gICAgT2JqZWN0LmtleXMocmVxdWVzdE9wdGlvbkNvbmZpZ3VyYXRpb25zKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgb3B0aW9uQ29uZmlndXJhdGlvbnNba10gPSAocmVxdWVzdE9wdGlvbkNvbmZpZ3VyYXRpb25zW2tdID8/IFtdKS5tYXAob3B0ID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4ub3B0LCBzZWxlY3RlZDogZmFsc2UgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9wdGlvbkNvbmZpZ3VyYXRpb25zO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUkIHwgYXN5bmMgYXMgc3RhdGVcIj5cbiAgPHZsLWxvYWRlciAqbmdJZj1cInN0YXRlLmxvYWRpbmc7IGVsc2UgY29udGVudFwiIFtsYWJlbF09XCInTG9hZGluZyBVSSdcIj48L3ZsLWxvYWRlcj5cblxuICA8bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdGF0ZS5mYWlsdXJlXCI+XG4gICAgICA8dmwtY21zLXByZXZpZXcgW3VpRGVmaW5pdGlvbl09XCJ1aURlZmluaXRpb25cIj48L3ZsLWNtcy1wcmV2aWV3PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -1,28 +1,27 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Optional, } from '@angular/core';
2
2
  import { UITemplatesApiService } from '@veloceapps/api';
3
3
  import { ToastService, ToastType } from '@veloceapps/components';
4
- import { UITemplateComponentType, } from '@veloceapps/core';
5
- import { ContextService } from '@veloceapps/sdk/core';
6
- import { BehaviorSubject, Subject, catchError, map, of, switchMap, takeUntil, tap } from 'rxjs';
7
- import { FLOW_CUSTOMIZATION } from '../../types';
4
+ import { btoaSafe } from '@veloceapps/sdk/cms';
5
+ import { FlowInfoService, FLOW_CUSTOMIZATION } from '@veloceapps/sdk/core';
6
+ import { BehaviorSubject, catchError, map, of, Subject, switchMap, takeUntil, tap } from 'rxjs';
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "@veloceapps/api";
10
- import * as i2 from "@veloceapps/sdk/core";
11
- import * as i3 from "@veloceapps/components";
9
+ import * as i2 from "@veloceapps/components";
10
+ import * as i3 from "@veloceapps/sdk/core";
12
11
  import * as i4 from "@angular/common";
13
12
  import * as i5 from "@veloceapps/sdk/cms";
14
13
  export class ShoppingCartComponent {
15
- constructor(templatesApi, contextService, cdr, toastService, customizationService) {
14
+ constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
16
15
  this.templatesApi = templatesApi;
17
- this.contextService = contextService;
18
16
  this.cdr = cdr;
19
17
  this.toastService = toastService;
18
+ this.flowInfo = flowInfo;
20
19
  this.customizationService = customizationService;
21
20
  this.uiDefinition = undefined;
22
21
  this.state$ = new BehaviorSubject({ loading: true, failure: false });
23
22
  this.templateApiName = '';
24
23
  this.destroyed$ = new Subject();
25
- this.templateApiName = this.contextService.resolve().properties.cartTemplateApiName ?? '';
24
+ this.templateApiName = this.flowInfo.flow?.properties.templates?.shoppingCart ?? '';
26
25
  }
27
26
  ngOnInit() {
28
27
  this.generateUIDefinition$()
@@ -33,7 +32,7 @@ export class ShoppingCartComponent {
33
32
  this.uiDefinition = uiDef;
34
33
  this.state$.next({ loading: false, failure: false });
35
34
  }), catchError(err => {
36
- const message = 'Failed to resolve Shopping cart component. ' + (err.message ?? '');
35
+ const message = 'Failed to resolve Shopping Cart component. ' + (err.message ?? '');
37
36
  this.toastService.add({ severity: ToastType.error, summary: message, sticky: true });
38
37
  this.uiDefinition = undefined;
39
38
  this.state$.next({ loading: false, failure: true });
@@ -45,37 +44,36 @@ export class ShoppingCartComponent {
45
44
  this.destroyed$.next();
46
45
  this.destroyed$.complete();
47
46
  }
48
- getTemplateRootComponent$(template) {
49
- return this.templatesApi
50
- .fetchComponents$(template.id)
51
- .pipe(map(components => components.find(c => c.type === UITemplateComponentType.ROOT) ?? undefined));
52
- }
53
- getLocalShoppingCartComponentMeta$() {
54
- if (!this.customizationService?.getShoppingCartComponent) {
47
+ getLocalMeta$() {
48
+ if (!this.customizationService?.getTemplateComponents) {
55
49
  return of(undefined);
56
50
  }
57
- return this.customizationService?.getShoppingCartComponent(this.templateApiName).pipe(map(component => {
58
- if (!component) {
51
+ return this.customizationService?.getTemplateComponents(this.templateApiName).pipe(map(components => {
52
+ if (!components) {
59
53
  return;
60
54
  }
61
- return {
55
+ return components.map(component => ({
62
56
  html: component.html,
63
57
  css: component.css,
64
58
  js: component.js,
65
59
  json: component.json,
66
- };
60
+ }));
67
61
  }));
68
62
  }
69
- getShoppingCartComponentMeta$() {
70
- return this.templatesApi.fetchTemplates$().pipe(map(templates => templates.find(template => template.name === this.templateApiName)), switchMap(template => (template ? this.getTemplateRootComponent$(template) : of(undefined))), switchMap(component => component ? this.templatesApi.fetchComponentAttachments$(component.uiTemplateId, component) : of(undefined)));
63
+ getOrgMeta$() {
64
+ const template = this.flowInfo.templates.SHOPPING_CART;
65
+ if (!template) {
66
+ return of(undefined);
67
+ }
68
+ return this.templatesApi.fetchComponentsAttachments$(template.id);
71
69
  }
72
70
  generateUIDefinition$() {
73
71
  return of(undefined).pipe(tap(() => {
74
72
  if (!this.templateApiName) {
75
- throw new Error("Flow Query parameter 'cartTemplateApiName' is missing.");
73
+ throw new Error("Flow 'shoppingCart' template is not defined.");
76
74
  }
77
- }), switchMap(() => this.getLocalShoppingCartComponentMeta$()), switchMap(meta => (meta ? of(meta) : this.getShoppingCartComponentMeta$())), map(meta => {
78
- if (!meta) {
75
+ }), switchMap(() => this.getLocalMeta$()), switchMap(metaList => (metaList ? of(metaList) : this.getOrgMeta$())), map(metaList => {
76
+ if (!metaList) {
79
77
  return;
80
78
  }
81
79
  const uiDef = {
@@ -84,28 +82,26 @@ export class ShoppingCartComponent {
84
82
  primary: true,
85
83
  type: 'DEFAULT',
86
84
  version: 2,
87
- children: [
88
- {
89
- children: [],
90
- template: meta.html && btoa(meta.html),
91
- script: meta.js && btoa(meta.js),
92
- styles: meta.css && btoa(meta.css),
93
- },
94
- ],
85
+ children: metaList.map(meta => ({
86
+ children: [],
87
+ template: meta.html && btoaSafe(meta.html),
88
+ script: meta.js && btoaSafe(meta.js),
89
+ styles: meta.css && btoaSafe(meta.css),
90
+ })),
95
91
  };
96
92
  return uiDef;
97
93
  }));
98
94
  }
99
95
  }
100
- ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1.UITemplatesApiService }, { token: i2.ContextService }, { token: i0.ChangeDetectorRef }, { token: i3.ToastService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
101
- ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i3.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
96
+ ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
97
+ ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
102
98
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, decorators: [{
103
99
  type: Component,
104
100
  args: [{ selector: 'vl-flow-shopping-cart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
105
- }], ctorParameters: function () { return [{ type: i1.UITemplatesApiService }, { type: i2.ContextService }, { type: i0.ChangeDetectorRef }, { type: i3.ToastService }, { type: undefined, decorators: [{
101
+ }], ctorParameters: function () { return [{ type: i1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3.FlowInfoService }, { type: undefined, decorators: [{
106
102
  type: Optional
107
103
  }, {
108
104
  type: Inject,
109
105
  args: [FLOW_CUSTOMIZATION]
110
106
  }] }]; } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvcGFnZXMvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9zaG9wcGluZy1jYXJ0L3Nob3BwaW5nLWNhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFHTixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBS0wsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7QUFhcEUsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxZQUNVLFlBQW1DLEVBQ25DLGNBQThCLEVBQzlCLEdBQXNCLEVBQ3RCLFlBQTBCLEVBQ2Msb0JBQXdDO1FBSmhGLGlCQUFZLEdBQVosWUFBWSxDQUF1QjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7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QUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLENBQUMsRUFDM0UsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxPQUFPO2FBQ1I7WUFFRCxNQUFNLEtBQUssR0FBaUI7Z0JBQzFCLElBQUksRUFBRSxFQUFFO2dCQUNSLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNWLFFBQVEsRUFBRTtvQkFDUjt3QkFDRSxRQUFRLEVBQUUsRUFBRTt3QkFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO3FCQUNuQztpQkFDRjthQUNGLENBQUM7WUFFRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOztrSEF0SFUscUJBQXFCLGtKQVlWLGtCQUFrQjtzR0FaN0IscUJBQXFCLDZEQ2pDbEMsd1ZBU0E7MkZEd0JhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU07OzBCQWM1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVSVRlbXBsYXRlc0FwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlLCBUb2FzdFR5cGUgfSBmcm9tICdAdmVsb2NlYXBwcy9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENvbXBvbmVudEF0dGFjaG1lbnRzLFxuICBUZW1wbGF0ZUNvbXBvbmVudCxcbiAgVUlEZWZpbml0aW9uLFxuICBVSVRlbXBsYXRlLFxuICBVSVRlbXBsYXRlQ29tcG9uZW50VHlwZSxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRkxPV19DVVNUT01JWkFUSU9OLCBGbG93Q3VzdG9taXphdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgZmFpbHVyZTogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmwtZmxvdy1zaG9wcGluZy1jYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Nob3BwaW5nLWNhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTaG9wcGluZ0NhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyB1aURlZmluaXRpb24/OiBVSURlZmluaXRpb24gPSB1bmRlZmluZWQ7XG4gIHB1YmxpYyBzdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0YXRlPih7IGxvYWRpbmc6IHRydWUsIGZhaWx1cmU6IGZhbHNlIH0pO1xuXG4gIHByaXZhdGUgdGVtcGxhdGVBcGlOYW1lID0gJyc7XG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZXNBcGk6IFVJVGVtcGxhdGVzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZMT1dfQ1VTVE9NSVpBVElPTikgcHJpdmF0ZSBjdXN0b21pemF0aW9uU2VydmljZT86IEZsb3dDdXN0b21pemF0aW9uLFxuICApIHtcbiAgICB0aGlzLnRlbXBsYXRlQXBpTmFtZSA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSgpLnByb3BlcnRpZXMuY2FydFRlbXBsYXRlQXBpTmFtZSA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyYXRlVUlEZWZpbml0aW9uJCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHVpRGVmID0+IHtcbiAgICAgICAgICBpZiAoIXVpRGVmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB3aXRoIG5hbWUgJyR7dGhpcy50ZW1wbGF0ZUFwaU5hbWV9JyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy51aURlZmluaXRpb24gPSB1aURlZjtcbiAgICAgICAgICB0aGlzLnN0YXRlJC5uZXh0KHsgbG9hZGluZzogZmFsc2UsIGZhaWx1cmU6IGZhbHNlIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnRmFpbGVkIHRvIHJlc29sdmUgU2hvcHBpbmcgY2FydCBjb21wb25lbnQuICcgKyAoZXJyLm1lc3NhZ2UgPz8gJycpO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IG1lc3NhZ2UsIHN0aWNreTogdHJ1ZSB9KTtcblxuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlbXBsYXRlUm9vdENvbXBvbmVudCQodGVtcGxhdGU6IFVJVGVtcGxhdGUpOiBPYnNlcnZhYmxlPFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzQXBpXG4gICAgICAuZmV0Y2hDb21wb25lbnRzJCh0ZW1wbGF0ZS5pZClcbiAgICAgIC5waXBlKG1hcChjb21wb25lbnRzID0+IGNvbXBvbmVudHMuZmluZChjID0+IGMudHlwZSA9PT0gVUlUZW1wbGF0ZUNvbXBvbmVudFR5cGUuUk9PVCkgPz8gdW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU2hvcHBpbmdDYXJ0Q29tcG9uZW50TWV0YSQoKTogT2JzZXJ2YWJsZTxDb21wb25lbnRBdHRhY2htZW50cyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0U2hvcHBpbmdDYXJ0Q29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0U2hvcHBpbmdDYXJ0Q29tcG9uZW50KHRoaXMudGVtcGxhdGVBcGlOYW1lKS5waXBlKFxuICAgICAgbWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxDb21wb25lbnRBdHRhY2htZW50cz57XG4gICAgICAgICAgaHRtbDogY29tcG9uZW50Lmh0bWwsXG4gICAgICAgICAgY3NzOiBjb21wb25lbnQuY3NzLFxuICAgICAgICAgIGpzOiBjb21wb25lbnQuanMsXG4gICAgICAgICAganNvbjogY29tcG9uZW50Lmpzb24sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaG9wcGluZ0NhcnRDb21wb25lbnRNZXRhJCgpOiBPYnNlcnZhYmxlPENvbXBvbmVudEF0dGFjaG1lbnRzIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzQXBpLmZldGNoVGVtcGxhdGVzJCgpLnBpcGUoXG4gICAgICBtYXA8VUlUZW1wbGF0ZVtdLCBVSVRlbXBsYXRlIHwgdW5kZWZpbmVkPih0ZW1wbGF0ZXMgPT5cbiAgICAgICAgdGVtcGxhdGVzLmZpbmQodGVtcGxhdGUgPT4gdGVtcGxhdGUubmFtZSA9PT0gdGhpcy50ZW1wbGF0ZUFwaU5hbWUpLFxuICAgICAgKSxcbiAgICAgIHN3aXRjaE1hcCh0ZW1wbGF0ZSA9PiAodGVtcGxhdGUgPyB0aGlzLmdldFRlbXBsYXRlUm9vdENvbXBvbmVudCQodGVtcGxhdGUpIDogb2YodW5kZWZpbmVkKSkpLFxuICAgICAgc3dpdGNoTWFwKGNvbXBvbmVudCA9PlxuICAgICAgICBjb21wb25lbnQgPyB0aGlzLnRlbXBsYXRlc0FwaS5mZXRjaENvbXBvbmVudEF0dGFjaG1lbnRzJChjb21wb25lbnQudWlUZW1wbGF0ZUlkLCBjb21wb25lbnQpIDogb2YodW5kZWZpbmVkKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVVSURlZmluaXRpb24kKCk6IE9ic2VydmFibGU8VUlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZUFwaU5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGbG93IFF1ZXJ5IHBhcmFtZXRlciAnY2FydFRlbXBsYXRlQXBpTmFtZScgaXMgbWlzc2luZy5cIik7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0TG9jYWxTaG9wcGluZ0NhcnRDb21wb25lbnRNZXRhJCgpKSxcbiAgICAgIHN3aXRjaE1hcChtZXRhID0+IChtZXRhID8gb2YobWV0YSkgOiB0aGlzLmdldFNob3BwaW5nQ2FydENvbXBvbmVudE1ldGEkKCkpKSxcbiAgICAgIG1hcChtZXRhID0+IHtcbiAgICAgICAgaWYgKCFtZXRhKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWlEZWY6IFVJRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBjcmVhdGVkVGltZXN0YW1wOiAwLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ0RFRkFVTFQnLFxuICAgICAgICAgIHZlcnNpb246IDIsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogbWV0YS5odG1sICYmIGJ0b2EobWV0YS5odG1sKSxcbiAgICAgICAgICAgICAgc2NyaXB0OiBtZXRhLmpzICYmIGJ0b2EobWV0YS5qcyksXG4gICAgICAgICAgICAgIHN0eWxlczogbWV0YS5jc3MgJiYgYnRvYShtZXRhLmNzcyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHVpRGVmO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCI+XG4gIDx2bC1sb2FkZXIgKm5nSWY9XCJzdGF0ZS5sb2FkaW5nOyBlbHNlIGNvbnRlbnRcIiBbbGFiZWxdPVwiJ0xvYWRpbmcgVUknXCI+PC92bC1sb2FkZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhdGUuZmFpbHVyZVwiPlxuICAgICAgPHZsLWNtcy1wcmV2aWV3IFt1aURlZmluaXRpb25dPVwidWlEZWZpbml0aW9uXCI+PC92bC1jbXMtcHJldmlldz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvcGFnZXMvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9zaG9wcGluZy1jYXJ0L3Nob3BwaW5nLWNhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFHTixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQWE1RyxNQUFNLE9BQU8scUJBQXFCO0lBT2hDLFlBQ1UsWUFBbUMsRUFDbkMsR0FBc0IsRUFDdEIsWUFBMEIsRUFDMUIsUUFBeUIsRUFDZSxvQkFBd0M7UUFKaEYsaUJBQVksR0FBWixZQUFZLENBQXVCO1FBQ25DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ2UseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFvQjtRQVhuRixpQkFBWSxHQUFrQixTQUFTLENBQUM7UUFDeEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUV0RSxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUN0RixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUN6QixJQUFJLENBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixJQUFJLENBQUMsZUFBZSxjQUFjLENBQUMsQ0FBQzthQUM3RTtZQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixNQUFNLE9BQU8sR0FBRyw2Q0FBNkMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXJGLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFO1lBQ3JELE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDaEYsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixPQUFPO2FBQ1I7WUFFRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQXVCLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUc7Z0JBQ2xCLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdEI7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN2QixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQzthQUNqRTtRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFDckMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFDckUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPO2FBQ1I7WUFFRCxNQUFNLEtBQUssR0FBaUI7Z0JBQzFCLElBQUksRUFBRSxFQUFFO2dCQUNSLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNWLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDOUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQzFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNwQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDdkMsQ0FBQyxDQUFDO2FBQ0osQ0FBQztZQUVGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7O2tIQTNHVSxxQkFBcUIsbUpBWVYsa0JBQWtCO3NHQVo3QixxQkFBcUIsNkRDM0JsQyx3VkFTQTsyRkRrQmEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBYzVDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVJVGVtcGxhdGVzQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50QXR0YWNobWVudHMsIFVJRGVmaW5pdGlvbiB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgYnRvYVNhZmUgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY21zJztcbmltcG9ydCB7IEZsb3dDdXN0b21pemF0aW9uLCBGbG93SW5mb1NlcnZpY2UsIEZMT1dfQ1VTVE9NSVpBVElPTiB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbnRlcmZhY2UgU3RhdGUge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBmYWlsdXJlOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1mbG93LXNob3BwaW5nLWNhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hvcHBpbmctY2FydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Nob3BwaW5nLWNhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNob3BwaW5nQ2FydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHVpRGVmaW5pdGlvbj86IFVJRGVmaW5pdGlvbiA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdGU+KHsgbG9hZGluZzogdHJ1ZSwgZmFpbHVyZTogZmFsc2UgfSk7XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZUFwaU5hbWUgPSAnJztcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbXBsYXRlc0FwaTogVUlUZW1wbGF0ZXNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0luZm86IEZsb3dJbmZvU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZMT1dfQ1VTVE9NSVpBVElPTikgcHJpdmF0ZSBjdXN0b21pemF0aW9uU2VydmljZT86IEZsb3dDdXN0b21pemF0aW9uLFxuICApIHtcbiAgICB0aGlzLnRlbXBsYXRlQXBpTmFtZSA9IHRoaXMuZmxvd0luZm8uZmxvdz8ucHJvcGVydGllcy50ZW1wbGF0ZXM/LnNob3BwaW5nQ2FydCA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyYXRlVUlEZWZpbml0aW9uJCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHVpRGVmID0+IHtcbiAgICAgICAgICBpZiAoIXVpRGVmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB3aXRoIG5hbWUgJyR7dGhpcy50ZW1wbGF0ZUFwaU5hbWV9JyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy51aURlZmluaXRpb24gPSB1aURlZjtcbiAgICAgICAgICB0aGlzLnN0YXRlJC5uZXh0KHsgbG9hZGluZzogZmFsc2UsIGZhaWx1cmU6IGZhbHNlIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnRmFpbGVkIHRvIHJlc29sdmUgU2hvcHBpbmcgQ2FydCBjb21wb25lbnQuICcgKyAoZXJyLm1lc3NhZ2UgPz8gJycpO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IG1lc3NhZ2UsIHN0aWNreTogdHJ1ZSB9KTtcblxuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsTWV0YSQoKTogT2JzZXJ2YWJsZTxDb21wb25lbnRBdHRhY2htZW50c1tdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlPy5nZXRUZW1wbGF0ZUNvbXBvbmVudHMpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlPy5nZXRUZW1wbGF0ZUNvbXBvbmVudHModGhpcy50ZW1wbGF0ZUFwaU5hbWUpLnBpcGUoXG4gICAgICBtYXAoY29tcG9uZW50cyA9PiB7XG4gICAgICAgIGlmICghY29tcG9uZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLm1hcDxDb21wb25lbnRBdHRhY2htZW50cz4oY29tcG9uZW50ID0+ICh7XG4gICAgICAgICAgaHRtbDogY29tcG9uZW50Lmh0bWwsXG4gICAgICAgICAgY3NzOiBjb21wb25lbnQuY3NzLFxuICAgICAgICAgIGpzOiBjb21wb25lbnQuanMsXG4gICAgICAgICAganNvbjogY29tcG9uZW50Lmpzb24sXG4gICAgICAgIH0pKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZ01ldGEkKCk6IE9ic2VydmFibGU8Q29tcG9uZW50QXR0YWNobWVudHNbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5mbG93SW5mby50ZW1wbGF0ZXMuU0hPUFBJTkdfQ0FSVDtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXNBcGkuZmV0Y2hDb21wb25lbnRzQXR0YWNobWVudHMkKHRlbXBsYXRlLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVVSURlZmluaXRpb24kKCk6IE9ic2VydmFibGU8VUlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZUFwaU5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGbG93ICdzaG9wcGluZ0NhcnQnIHRlbXBsYXRlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5nZXRMb2NhbE1ldGEkKCkpLFxuICAgICAgc3dpdGNoTWFwKG1ldGFMaXN0ID0+IChtZXRhTGlzdCA/IG9mKG1ldGFMaXN0KSA6IHRoaXMuZ2V0T3JnTWV0YSQoKSkpLFxuICAgICAgbWFwKG1ldGFMaXN0ID0+IHtcbiAgICAgICAgaWYgKCFtZXRhTGlzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpRGVmOiBVSURlZmluaXRpb24gPSB7XG4gICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgY3JlYXRlZFRpbWVzdGFtcDogMCxcbiAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdERUZBVUxUJyxcbiAgICAgICAgICB2ZXJzaW9uOiAyLFxuICAgICAgICAgIGNoaWxkcmVuOiBtZXRhTGlzdC5tYXAobWV0YSA9PiAoe1xuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgdGVtcGxhdGU6IG1ldGEuaHRtbCAmJiBidG9hU2FmZShtZXRhLmh0bWwpLFxuICAgICAgICAgICAgc2NyaXB0OiBtZXRhLmpzICYmIGJ0b2FTYWZlKG1ldGEuanMpLFxuICAgICAgICAgICAgc3R5bGVzOiBtZXRhLmNzcyAmJiBidG9hU2FmZShtZXRhLmNzcyksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB1aURlZjtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiPlxuICA8dmwtbG9hZGVyICpuZ0lmPVwic3RhdGUubG9hZGluZzsgZWxzZSBjb250ZW50XCIgW2xhYmVsXT1cIidMb2FkaW5nIFVJJ1wiPjwvdmwtbG9hZGVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0YXRlLmZhaWx1cmVcIj5cbiAgICAgIDx2bC1jbXMtcHJldmlldyBbdWlEZWZpbml0aW9uXT1cInVpRGVmaW5pdGlvblwiPjwvdmwtY21zLXByZXZpZXc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==