@mediusinc/mng-commons 5.5.0-rc.4 → 6.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/core/action/action-parameters.model.d.ts +4 -4
  2. package/core/data-providers/base.data-provider.d.ts +4 -7
  3. package/core/data-providers/lookup.data-provider.d.ts +2 -2
  4. package/core/descriptors/model.descriptor.d.ts +1 -7
  5. package/core/descriptors/tableview.descriptor.d.ts +5 -5
  6. package/core/helpers/route.d.ts +0 -1
  7. package/core/helpers/type-helpers.d.ts +8 -0
  8. package/core/index.d.ts +0 -3
  9. package/core/models/menu.model.d.ts +0 -4
  10. package/core/services/commons.service.d.ts +0 -32
  11. package/core/services/tokens/module-config.token.d.ts +0 -28
  12. package/esm2022/core/action/action-parameters.model.mjs +1 -1
  13. package/esm2022/core/data-providers/base.data-provider.mjs +2 -4
  14. package/esm2022/core/data-providers/lookup.data-provider.mjs +1 -1
  15. package/esm2022/core/descriptors/model.descriptor.mjs +1 -1
  16. package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
  17. package/esm2022/core/helpers/type-helpers.mjs +1 -1
  18. package/esm2022/core/index.mjs +1 -4
  19. package/esm2022/core/models/menu.model.mjs +1 -1
  20. package/esm2022/core/services/commons.service.mjs +1 -34
  21. package/esm2022/core/services/tokens/module-config.token.mjs +1 -1
  22. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +5 -86
  23. package/esm2022/filter/descriptors/filter.descriptor.mjs +7 -29
  24. package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +14 -41
  25. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +3 -3
  26. package/esm2022/model/class/data-providers/base-from-class-data-provider.factory.mjs +5 -0
  27. package/esm2022/model/class/descriptors/model-class.descriptor.mjs +28 -0
  28. package/esm2022/model/class/descriptors/type-class.descriptor.mjs +6 -0
  29. package/esm2022/model/class/helpers/model.mjs +53 -0
  30. package/esm2022/model/class/index.mjs +8 -0
  31. package/esm2022/model/class/mediusinc-mng-commons-model-class.mjs +5 -0
  32. package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +11 -6
  33. package/esm2022/model/descriptors/model.descriptor.mjs +11 -54
  34. package/esm2022/model/descriptors/type.descriptor.mjs +2 -10
  35. package/esm2022/model/index.mjs +1 -2
  36. package/esm2022/table/api/class/class-table-attribute-converter.mjs +80 -0
  37. package/esm2022/table/api/class/class-table-attribute.model.mjs +2 -0
  38. package/esm2022/table/api/class/class-table-data-provider.factory.mjs +5 -0
  39. package/esm2022/table/api/class/class-table-descriptor-helpers.mjs +99 -0
  40. package/esm2022/table/api/class/class-table-descriptor.factory.mjs +21 -0
  41. package/esm2022/table/api/class/index.mjs +6 -0
  42. package/esm2022/table/api/class/mediusinc-mng-commons-table-api-class.mjs +5 -0
  43. package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +14 -41
  44. package/esm2022/table/api/data-providers/table.data-provider.mjs +3 -9
  45. package/esm2022/table/api/descriptors/column.descriptor.mjs +8 -3
  46. package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +10 -77
  47. package/esm2022/table/api/descriptors/table.descriptor.mjs +3 -3
  48. package/esm2022/table/api/helpers/column-converter.mjs +25 -0
  49. package/esm2022/table/api/helpers/table-data-provider-descriptor-convert.mjs +4 -4
  50. package/esm2022/table/api/index.mjs +2 -4
  51. package/esm2022/table/api/models/table-columns.model.mjs +1 -1
  52. package/esm2022/table/components/column-value/column-value.component.mjs +4 -3
  53. package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +3 -3
  54. package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +5 -5
  55. package/esm2022/table/components/table/table.component.mjs +6 -8
  56. package/esm2022/tableview/action/components/action/action.component.mjs +1 -1
  57. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +10 -6
  58. package/esm2022/tableview/action/helpers/action-execution.mjs +1 -1
  59. package/esm2022/tableview/action/models/execution/action-context.model.mjs +1 -1
  60. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
  61. package/esm2022/tableview/action/services/action-executor.service.mjs +11 -11
  62. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +18 -3
  63. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +1 -1
  64. package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +13 -104
  65. package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +15 -62
  66. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +3 -63
  67. package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +17 -30
  68. package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +1 -1
  69. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +6 -29
  70. package/esm2022/tableview/api/action/descriptors/editor-action-descriptor.factory.mjs +21 -0
  71. package/esm2022/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.mjs +21 -0
  72. package/esm2022/tableview/api/action/descriptors/table-action-descriptor.factory.mjs +37 -0
  73. package/esm2022/tableview/api/action/descriptors/table-action-editor-descriptor.factory.mjs +40 -0
  74. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +25 -5
  75. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +1 -1
  76. package/esm2022/tableview/api/action/models/action-error.model.mjs +1 -1
  77. package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +1 -1
  78. package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +1 -1
  79. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
  80. package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +6 -6
  81. package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +3 -3
  82. package/esm2022/tableview/api/class/editor/class-editor-attribute-converter.mjs +85 -0
  83. package/esm2022/tableview/api/class/editor/class-editor-attribute.model.mjs +2 -0
  84. package/esm2022/tableview/api/class/editor/class-editor-data-provider.factory.mjs +5 -0
  85. package/esm2022/tableview/api/class/editor/class-editor-descriptor-helpers.mjs +95 -0
  86. package/esm2022/tableview/api/class/editor/class-editor-descriptor.factory.mjs +21 -0
  87. package/esm2022/tableview/api/class/index.mjs +13 -0
  88. package/esm2022/tableview/api/class/mediusinc-mng-commons-tableview-api-class.mjs +5 -0
  89. package/esm2022/tableview/api/class/tableview/class-tableview-attribute-converter.mjs +35 -0
  90. package/esm2022/tableview/api/class/tableview/class-tableview-attribute.model.mjs +2 -0
  91. package/esm2022/tableview/api/class/tableview/class-tableview-data-provider.factory.mjs +5 -0
  92. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor-helpers.mjs +111 -0
  93. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor.factory.mjs +26 -0
  94. package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +14 -32
  95. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +40 -7
  96. package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +7 -73
  97. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +49 -134
  98. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +11 -2
  99. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +3 -5
  100. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +2 -18
  101. package/esm2022/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.mjs +51 -0
  102. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  103. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
  104. package/esm2022/tableview/api/index.mjs +8 -8
  105. package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +13 -51
  106. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +19 -11
  107. package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +19 -96
  108. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +29 -182
  109. package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +8 -6
  110. package/esm2022/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.mjs +4 -4
  111. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +117 -99
  112. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +164 -7
  113. package/esm2022/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.mjs +2 -0
  114. package/esm2022/tableview/api/tableview/models/tableview-descriptor-helper.type.mjs +2 -0
  115. package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +1 -1
  116. package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +1 -1
  117. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +6 -6
  118. package/esm2022/tableview/editor/helpers/editor-field.mjs +3 -3
  119. package/esm2022/tableview/editor/helpers/editor-formly.mjs +4 -4
  120. package/esm2022/tableview/editor/helpers/field-create.mjs +21 -0
  121. package/esm2022/tableview/index.mjs +3 -2
  122. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +1 -1
  123. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +3 -1
  124. package/fesm2022/mediusinc-mng-commons-core.mjs +687 -781
  125. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  126. package/fesm2022/mediusinc-mng-commons-filter.mjs +10 -113
  127. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  128. package/fesm2022/mediusinc-mng-commons-form-api.mjs +15 -42
  129. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  130. package/fesm2022/mediusinc-mng-commons-model-class.mjs +97 -0
  131. package/fesm2022/mediusinc-mng-commons-model-class.mjs.map +1 -0
  132. package/fesm2022/mediusinc-mng-commons-model.mjs +23 -137
  133. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  134. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs +204 -0
  135. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs.map +1 -0
  136. package/fesm2022/mediusinc-mng-commons-table-api.mjs +55 -319
  137. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  138. package/fesm2022/mediusinc-mng-commons-table.mjs +14 -15
  139. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  140. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs +367 -0
  141. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs.map +1 -0
  142. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +715 -1298
  143. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  144. package/fesm2022/mediusinc-mng-commons-tableview.mjs +67 -27
  145. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  146. package/filter/descriptors/filter-lookup.descriptor.d.ts +1 -26
  147. package/filter/descriptors/filter.descriptor.d.ts +5 -12
  148. package/form/api/data-providers/lookup-data-provider.factory.d.ts +17 -20
  149. package/form/api/data-providers/lookup.data-provider.d.ts +3 -3
  150. package/model/class/README.md +8 -0
  151. package/model/class/data-providers/base-from-class-data-provider.factory.d.ts +3 -0
  152. package/model/class/descriptors/model-class.descriptor.d.ts +12 -0
  153. package/model/class/descriptors/type-class.descriptor.d.ts +3 -0
  154. package/model/{helpers → class/helpers}/model.d.ts +1 -2
  155. package/model/class/index.d.ts +4 -0
  156. package/model/data-providers/base-from-type-data-provider.factory.d.ts +13 -6
  157. package/model/descriptors/model.descriptor.d.ts +12 -27
  158. package/model/descriptors/type.descriptor.d.ts +0 -5
  159. package/model/index.d.ts +0 -1
  160. package/package.json +25 -7
  161. package/table/api/class/README.md +10 -0
  162. package/table/api/{helpers/class-attribute-converter.d.ts → class/class-table-attribute-converter.d.ts} +2 -9
  163. package/table/api/{models → class}/class-table-attribute.model.d.ts +1 -1
  164. package/table/api/class/class-table-data-provider.factory.d.ts +4 -0
  165. package/table/api/{helpers/table-descriptor-helpers.d.ts → class/class-table-descriptor-helpers.d.ts} +2 -4
  166. package/table/api/class/class-table-descriptor.factory.d.ts +11 -0
  167. package/table/api/class/index.d.ts +5 -0
  168. package/table/api/data-providers/table-data-provider.factory.d.ts +17 -20
  169. package/table/api/data-providers/table.data-provider.d.ts +4 -12
  170. package/table/api/descriptors/column.descriptor.d.ts +5 -2
  171. package/table/api/descriptors/table-descriptor.factory.d.ts +3 -39
  172. package/table/api/descriptors/table.descriptor.d.ts +3 -3
  173. package/table/api/helpers/column-converter.d.ts +7 -0
  174. package/table/api/helpers/table-data-provider-descriptor-convert.d.ts +3 -3
  175. package/table/api/index.d.ts +1 -3
  176. package/table/api/models/table-columns.model.d.ts +2 -2
  177. package/table/components/column-value/column-value.component.d.ts +1 -0
  178. package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +1 -1
  179. package/table/components/filter/filter-form/filter-form.component.d.ts +1 -1
  180. package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +1 -1
  181. package/table/components/table/table.component.d.ts +0 -9
  182. package/tableview/action/components/action/action.component.d.ts +2 -2
  183. package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
  184. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +6 -5
  185. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +3 -3
  186. package/tableview/action/components/table/action-table.component.d.ts +3 -3
  187. package/tableview/action/helpers/action-execution.d.ts +1 -1
  188. package/tableview/action/models/execution/action-context.model.d.ts +3 -3
  189. package/tableview/action/models/execution/action-instance.model.d.ts +5 -5
  190. package/tableview/action/services/action-executor.service.d.ts +7 -7
  191. package/tableview/action/services/data-provider-executor.service.d.ts +16 -16
  192. package/tableview/action/services/view-container.service.d.ts +1 -1
  193. package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +1 -1
  194. package/tableview/api/action/descriptors/action-descriptor.factory.d.ts +20 -31
  195. package/tableview/api/action/descriptors/action-editor-descriptor.factory.d.ts +18 -25
  196. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +22 -40
  197. package/tableview/api/action/descriptors/action-link-descriptor.factory.d.ts +21 -13
  198. package/tableview/api/action/descriptors/action-link.descriptor.d.ts +3 -3
  199. package/tableview/api/action/descriptors/action.descriptor.d.ts +31 -33
  200. package/tableview/api/action/descriptors/editor-action-descriptor.factory.d.ts +21 -0
  201. package/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.d.ts +21 -0
  202. package/tableview/api/action/descriptors/table-action-descriptor.factory.d.ts +36 -0
  203. package/tableview/api/action/descriptors/table-action-editor-descriptor.factory.d.ts +40 -0
  204. package/tableview/api/action/helpers/data-provider-executors.d.ts +13 -8
  205. package/tableview/api/action/models/action-descriptor.types.d.ts +2 -2
  206. package/tableview/api/action/models/action-error.model.d.ts +1 -1
  207. package/tableview/api/action/models/execution/action-context-validation.model.d.ts +2 -2
  208. package/tableview/api/action/models/execution/action-context.model.d.ts +2 -2
  209. package/tableview/api/action/models/execution/action-instance.model.d.ts +1 -1
  210. package/tableview/api/action/models/tableview-action-default-categories.model.d.ts +5 -5
  211. package/tableview/api/action/services/data-provider-executor.service.d.ts +26 -25
  212. package/tableview/api/class/README.md +13 -0
  213. package/tableview/api/{editor/helpers/class-attribute-converter.d.ts → class/editor/class-editor-attribute-converter.d.ts} +2 -2
  214. package/tableview/api/{editor/models/class-tableview-attribute.model.d.ts → class/editor/class-editor-attribute.model.d.ts} +1 -1
  215. package/tableview/api/class/editor/class-editor-data-provider.factory.d.ts +4 -0
  216. package/tableview/api/{editor/helpers/editor-descriptor-helpers.d.ts → class/editor/class-editor-descriptor-helpers.d.ts} +2 -5
  217. package/tableview/api/class/editor/class-editor-descriptor.factory.d.ts +11 -0
  218. package/tableview/api/class/index.d.ts +10 -0
  219. package/tableview/api/{tableview/helpers/class-attribute-converter.d.ts → class/tableview/class-tableview-attribute-converter.d.ts} +1 -1
  220. package/tableview/api/{tableview/models → class/tableview}/class-tableview-attribute.model.d.ts +2 -2
  221. package/tableview/api/class/tableview/class-tableview-data-provider.factory.d.ts +4 -0
  222. package/tableview/api/{tableview/helpers/tableview-descriptor-helpers.d.ts → class/tableview/class-tableview-descriptor-helpers.d.ts} +1 -2
  223. package/tableview/api/class/tableview/class-tableview-descriptor.factory.d.ts +12 -0
  224. package/tableview/api/editor/data-providers/editor-data-provider.factory.d.ts +17 -16
  225. package/tableview/api/editor/data-providers/editor.data-provider.d.ts +64 -29
  226. package/tableview/api/editor/descriptors/editor-descriptor.factory.d.ts +5 -38
  227. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +48 -112
  228. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +8 -1
  229. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +2 -3
  230. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +3 -11
  231. package/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.d.ts +25 -0
  232. package/tableview/api/editor/models/editor-fields.model.d.ts +25 -21
  233. package/tableview/api/editor/models/form-editor.event.d.ts +0 -4
  234. package/tableview/api/index.d.ts +7 -6
  235. package/tableview/api/tableview/data-providers/tableview-data-provider.factory.d.ts +20 -25
  236. package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +22 -22
  237. package/tableview/api/tableview/descriptors/tableview-descriptor.factory.d.ts +20 -50
  238. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +69 -163
  239. package/tableview/api/tableview/helpers/tableview-create.d.ts +18 -5
  240. package/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.d.ts +2 -2
  241. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +73 -20
  242. package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +87 -9
  243. package/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.d.ts +9 -0
  244. package/tableview/api/tableview/models/tableview-descriptor-helper.type.d.ts +2 -0
  245. package/tableview/api/tableview/models/tableview-input.model.d.ts +1 -1
  246. package/tableview/api/tableview/models/tableview-route.model.d.ts +1 -1
  247. package/tableview/editor/helpers/field-create.d.ts +9 -0
  248. package/tableview/index.d.ts +2 -1
  249. package/tableview/tableview/components/route/tableview-route.component.d.ts +1 -1
  250. package/tableview/tableview/components/tableview/tableview.component.d.ts +6 -6
  251. package/version-info.json +5 -5
  252. package/core/components/pages/error/error.page.component.d.ts +0 -11
  253. package/core/components/pages/not-found/not-found.page.component.d.ts +0 -11
  254. package/core/data-providers/base-data-provider.factory.d.ts +0 -13
  255. package/esm2022/core/components/pages/error/error.page.component.mjs +0 -24
  256. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +0 -24
  257. package/esm2022/core/data-providers/base-data-provider.factory.mjs +0 -28
  258. package/esm2022/model/helpers/model.mjs +0 -71
  259. package/esm2022/table/api/helpers/class-attribute-converter.mjs +0 -104
  260. package/esm2022/table/api/helpers/table-descriptor-helpers.mjs +0 -98
  261. package/esm2022/table/api/models/class-table-attribute.model.mjs +0 -2
  262. package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +0 -85
  263. package/esm2022/tableview/api/editor/helpers/editor-descriptor-helpers.mjs +0 -95
  264. package/esm2022/tableview/api/editor/models/class-tableview-attribute.model.mjs +0 -2
  265. package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +0 -34
  266. package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +0 -110
  267. package/esm2022/tableview/api/tableview/models/class-tableview-attribute.model.mjs +0 -2
@@ -1,7 +1,7 @@
1
1
  import { TableviewDataProviderInst } from '../data-providers/tableview.data-provider';
2
- export function tableviewToDataProvider(descriptor, serviceType) {
2
+ export function tableviewDataProviderFromDescriptor(descriptor, serviceType) {
3
3
  return typeof serviceType !== 'undefined'
4
- ? new TableviewDataProviderInst(undefined, serviceType)
5
- : new TableviewDataProviderInst(undefined, undefined);
4
+ ? new TableviewDataProviderInst(serviceType)
5
+ : new TableviewDataProviderInst(undefined);
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWRhdGEtcHJvdmlkZXItZGVzY3JpcHRvci1jb252ZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvdGFibGV2aWV3L2hlbHBlcnMvdGFibGV2aWV3LWRhdGEtcHJvdmlkZXItZGVzY3JpcHRvci1jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBeUJwRixNQUFNLFVBQVUsdUJBQXVCLENBQ25DLFVBQTBELEVBQzFELFdBQTBCO0lBRTFCLE9BQU8sT0FBTyxXQUFXLEtBQUssV0FBVztRQUNyQyxDQUFDLENBQUMsSUFBSSx5QkFBeUIsQ0FBdUUsU0FBUyxFQUFFLFdBQXdDLENBQUM7UUFDMUosQ0FBQyxDQUFDLElBQUkseUJBQXlCLENBQXlELFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN0SCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2aWNlQ2xhc3NUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge1RhYmxldmlld0RhdGFQcm92aWRlckluc3R9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzL3RhYmxldmlldy5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGF0YSBwcm92aWRlciBmb3IgZnJvbSBkZXNjcmlwdG9yLiBETyBOT1QgdXNlIGlmIHRoZSBtb2RlbCBpcyBjbGFzcywgYmVjYXVzZSB0aGUgdHlwZSAoZnJvbSBtb2RlbCBkZXNjcmlwdG9yKSB3aWxsIG5vdCBiZSBzZXQgaW4gZGF0YSBwcm92aWRlci5cbiAqXG4gKiBAcGFyYW0ge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz59IGRlc2NyaXB0b3IgLSBUaGUgdGFibGUgZGVzY3JpcHRvci5cbiAqXG4gKiBAcmV0dXJuIHtUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZD59IC0gVGhlIGRhdGEgcHJvdmlkZXIgZm9yIHRoZSB0YWJsZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZXZpZXdUb0RhdGFQcm92aWRlcjxNb2RlbCwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnM+XG4pOiBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZD47XG4vKipcbiAqIENyZWF0ZXMgYSBkYXRhIHByb3ZpZGVyIGZvciBmcm9tIGRlc2NyaXB0b3IuIERPIE5PVCB1c2UgaWYgdGhlIG1vZGVsIGlzIGNsYXNzLCBiZWNhdXNlIHRoZSB0eXBlIChmcm9tIG1vZGVsIGRlc2NyaXB0b3IpIHdpbGwgbm90IGJlIHNldCBpbiBkYXRhIHByb3ZpZGVyLlxuICpcbiAqIEBwYXJhbSB7VGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPn0gZGVzY3JpcHRvciAtIFRoZSB0YWJsZSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+fSBzZXJ2aWNlQ2xhc3MgLSBUaGUgc2VydmljZSBjbGFzcyB0eXBlLlxuICpcbiAqIEByZXR1cm4ge1RhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+fSAtIFRoZSBkYXRhIHByb3ZpZGVyIGZvciB0aGUgdGFibGUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3VG9EYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2UgPSBhbnksIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4oXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPixcbiAgICBzZXJ2aWNlQ2xhc3M6IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT5cbik6IFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+O1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld1RvRGF0YVByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlID0gYW55LCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KFxuICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz4sXG4gICAgc2VydmljZVR5cGU/OiBTZXJ2aWNlQ2xhc3Ncbikge1xuICAgIHJldHVybiB0eXBlb2Ygc2VydmljZVR5cGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gbmV3IFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KHVuZGVmaW5lZCwgc2VydmljZVR5cGUgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPilcbiAgICAgICAgOiBuZXcgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCBTb3J0cywgRmlsdGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbn1cbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWRhdGEtcHJvdmlkZXItZGVzY3JpcHRvci1jb252ZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvdGFibGV2aWV3L2hlbHBlcnMvdGFibGV2aWV3LWRhdGEtcHJvdmlkZXItZGVzY3JpcHRvci1jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBd0NwRixNQUFNLFVBQVUsbUNBQW1DLENBU2pELFVBQTBHLEVBQUUsV0FBMEI7SUFDcEksT0FBTyxPQUFPLFdBQVcsS0FBSyxXQUFXO1FBQ3JDLENBQUMsQ0FBQyxJQUFJLHlCQUF5QixDQUFrRyxXQUF3QyxDQUFDO1FBQzFLLENBQUMsQ0FBQyxJQUFJLHlCQUF5QixDQUFvRixTQUFTLENBQUMsQ0FBQztBQUN0SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2aWNlQ2xhc3NUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge1RhYmxldmlld0RhdGFQcm92aWRlckluc3R9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzL3RhYmxldmlldy5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGF0YSBwcm92aWRlciBmb3IgZnJvbSBkZXNjcmlwdG9yLiBETyBOT1QgdXNlIGlmIHRoZSBtb2RlbCBpcyBjbGFzcywgYmVjYXVzZSB0aGUgdHlwZSAoZnJvbSBtb2RlbCBkZXNjcmlwdG9yKSB3aWxsIG5vdCBiZSBzZXQgaW4gZGF0YSBwcm92aWRlci5cbiAqXG4gKiBAcGFyYW0ge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz59IGRlc2NyaXB0b3IgLSBUaGUgdGFibGUgZGVzY3JpcHRvci5cbiAqXG4gKiBAcmV0dXJuIHtUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZD59IC0gVGhlIGRhdGEgcHJvdmlkZXIgZm9yIHRoZSB0YWJsZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZXZpZXdEYXRhUHJvdmlkZXJGcm9tRGVzY3JpcHRvcjxcbiAgICBNb2RlbCxcbiAgICBTb3J0cyA9IGtleW9mIE1vZGVsLFxuICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbCxcbiAgICBUYWJsZU1vZGVsID0gTW9kZWwsXG4gICAgQ3JlYXRlTW9kZWwgPSBNb2RlbCxcbiAgICBVcGRhdGVNb2RlbCA9IE1vZGVsXG4+KFxuICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycywgYW55LCBUYWJsZU1vZGVsLCBDcmVhdGVNb2RlbCwgVXBkYXRlTW9kZWwsIGFueT5cbik6IFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIHVuZGVmaW5lZCwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgVGFibGVNb2RlbCwgQ3JlYXRlTW9kZWwsIFVwZGF0ZU1vZGVsPjtcbi8qKlxuICogQ3JlYXRlcyBhIGRhdGEgcHJvdmlkZXIgZm9yIGZyb20gZGVzY3JpcHRvci4gRE8gTk9UIHVzZSBpZiB0aGUgbW9kZWwgaXMgY2xhc3MsIGJlY2F1c2UgdGhlIHR5cGUgKGZyb20gbW9kZWwgZGVzY3JpcHRvcikgd2lsbCBub3QgYmUgc2V0IGluIGRhdGEgcHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHtUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnM+fSBkZXNjcmlwdG9yIC0gVGhlIHRhYmxlIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge1NlcnZpY2VDbGFzc1R5cGU8U2VydmljZT59IHNlcnZpY2VDbGFzcyAtIFRoZSBzZXJ2aWNlIGNsYXNzIHR5cGUuXG4gKlxuICogQHJldHVybiB7VGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj59IC0gVGhlIGRhdGEgcHJvdmlkZXIgZm9yIHRoZSB0YWJsZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZXZpZXdEYXRhUHJvdmlkZXJGcm9tRGVzY3JpcHRvcjxcbiAgICBNb2RlbCxcbiAgICBTZXJ2aWNlID0gYW55LFxuICAgIFNvcnRzID0ga2V5b2YgTW9kZWwsXG4gICAgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsLFxuICAgIFRhYmxlTW9kZWwgPSBNb2RlbCxcbiAgICBDcmVhdGVNb2RlbCA9IE1vZGVsLFxuICAgIFVwZGF0ZU1vZGVsID0gTW9kZWxcbj4oXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCBhbnksIFRhYmxlTW9kZWwsIENyZWF0ZU1vZGVsLCBVcGRhdGVNb2RlbCwgYW55PixcbiAgICBzZXJ2aWNlQ2xhc3M6IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT5cbik6IFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+LCBUYWJsZU1vZGVsLCBDcmVhdGVNb2RlbCwgVXBkYXRlTW9kZWw+O1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0RhdGFQcm92aWRlckZyb21EZXNjcmlwdG9yPFxuICAgIE1vZGVsLFxuICAgIFNlcnZpY2UgPSBhbnksXG4gICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsXG4gICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPixcbiAgICBUYWJsZU1vZGVsID0gTW9kZWwsXG4gICAgQ3JlYXRlTW9kZWwgPSBNb2RlbCxcbiAgICBVcGRhdGVNb2RlbCA9IE1vZGVsXG4+KGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycywgYW55LCBUYWJsZU1vZGVsLCBDcmVhdGVNb2RlbCwgVXBkYXRlTW9kZWwsIGFueT4sIHNlcnZpY2VUeXBlPzogU2VydmljZUNsYXNzKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzZXJ2aWNlVHlwZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBuZXcgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4sIFRhYmxlTW9kZWwsIENyZWF0ZU1vZGVsLCBVcGRhdGVNb2RlbD4oc2VydmljZVR5cGUgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPilcbiAgICAgICAgOiBuZXcgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCBTb3J0cywgRmlsdGVycywgdW5kZWZpbmVkLCBUYWJsZU1vZGVsLCBDcmVhdGVNb2RlbCwgVXBkYXRlTW9kZWw+KHVuZGVmaW5lZCk7XG59XG4iXX0=
@@ -7,10 +7,9 @@ import { CommonsInternalError, StyleLevelEnum, StyleSizeEnum, copyDataListParams
7
7
  import { ActionButtonDescriptor, ButtonStyleRoundedEnum } from '@mediusinc/mng-commons/form/api';
8
8
  import { actionGetProviderCfgObj } from '../../action/descriptors/action-descriptor.factory';
9
9
  import { actionEditorGetProviderCfgObj } from '../../action/descriptors/action-editor-descriptor.factory';
10
- import { ActionEditorAddDescriptorInst, ActionEditorDetailsDescriptorInst, ActionEditorEditDescriptorInst } from '../../action/descriptors/action-editor.descriptor';
11
- import { actionLinkFromAction } from '../../action/descriptors/action-link-descriptor.factory';
12
- import { ActionLinkDescriptorInst } from '../../action/descriptors/action-link.descriptor';
13
- import { ActionDeleteDescriptorInst, ActionDescriptorInst } from '../../action/descriptors/action.descriptor';
10
+ import { ActionEditorDescriptorInst, actionEditorCancel } from '../../action/descriptors/action-editor.descriptor';
11
+ import { actionLink } from '../../action/descriptors/action-link-descriptor.factory';
12
+ import { ActionDescriptorInst } from '../../action/descriptors/action.descriptor';
14
13
  import { ActionPositionEnum } from '../../action/models/action.type';
15
14
  import { TableviewActionDefaultCategories } from '../../action/models/tableview-action-default-categories.model';
16
15
  import { DataProviderExecutor } from '../../action/services/data-provider-executor.service';
@@ -43,44 +42,42 @@ const tableviewDefaultActions = [
43
42
  TableviewDefaultActionsEnum.ExportCsv,
44
43
  TableviewDefaultActionsEnum.LocalizationLanguageSelect
45
44
  ];
46
- export function getTableviewDefaultActions() {
45
+ export function tableviewGetDefaultActions() {
47
46
  return [...tableviewDefaultActions];
48
47
  }
49
- export function createTableviewActions(tableview, defaultActions, defaultActionsOverrides, injector) {
50
- return (defaultActions ?? getTableviewDefaultActions())
51
- .map(t => createTableviewAction(t, tableview, defaultActions, defaultActionsOverrides, injector))
48
+ export function tableviewCreateDefaultActions(tableview, defaultActions, defaultActionsOverrides, injector) {
49
+ return (defaultActions ?? tableviewGetDefaultActions())
50
+ .map(t => tableviewCreateDefaultAction(t, tableview, defaultActions, defaultActionsOverrides, injector))
52
51
  .filter(e => e != null);
53
52
  }
54
- export function createTableviewAction(type, tableview, defaultActions, defaultActionsOverrides, injector) {
53
+ export function tableviewCreateDefaultAction(type, tableview, defaultActions, defaultActionsOverrides, injector) {
55
54
  if (defaultActionsOverrides != null && defaultActionsOverrides[type] !== undefined) {
56
55
  return defaultActionsOverrides[type];
57
56
  }
58
57
  switch (type) {
59
58
  // table row actions
60
59
  case TableviewDefaultActionsEnum.Details:
61
- return tableviewDetailsAction(tableview.detailsEditor, injector);
60
+ return tableviewActionDetailsOnTable(tableview.detailsEditor, { injector });
62
61
  case TableviewDefaultActionsEnum.Edit:
63
- return tableviewEditAction(tableview.editEditor, injector);
62
+ return tableviewActionEditOnTable(tableview.model, tableview.editEditor, { table: tableview.table, injector });
64
63
  case TableviewDefaultActionsEnum.Delete:
65
- return tableviewDeleteAction(tableview.model, injector);
64
+ return tableviewActionDeleteOnTable(tableview.model, { table: tableview.table, injector });
66
65
  // table toolbar actions
67
66
  case TableviewDefaultActionsEnum.Add:
68
- return tableviewAddAction(tableview.addEditor, injector);
67
+ return tableviewActionAddOnTable(tableview.model, tableview.addEditor, { injector });
69
68
  case TableviewDefaultActionsEnum.LocalizationLanguageSelect:
70
- return tableviewLocalizationLanguageSelectAction(tableview);
69
+ return tableviewActionLocalizationLangSelectOnTable(tableview);
71
70
  case TableviewDefaultActionsEnum.Refresh:
72
- return tableviewRefreshAction(tableview.model);
71
+ return tableviewActionRefreshOnTable(tableview.model);
73
72
  case TableviewDefaultActionsEnum.Export:
74
73
  return defaultActions == null || defaultActions.includes(TableviewDefaultActionsEnum.ExportJson) || defaultActions.includes(TableviewDefaultActionsEnum.ExportCsv)
75
- ? tableviewExportAction(tableview, injector, defaultActions)
74
+ ? tableviewActionExportOnTable(tableview, { injector: injector, defaultActions: defaultActions })
76
75
  : null;
77
76
  //details actions
78
77
  case TableviewDefaultActionsEnum.EditOnDetails:
79
- return defaultActions == null || defaultActions.includes(TableviewDefaultActionsEnum.Edit)
80
- ? tableviewEditOnDetailsAction(tableview.model, tableviewEditAction(tableview.editEditor, injector), injector)
81
- : null;
78
+ return defaultActions == null || defaultActions.includes(TableviewDefaultActionsEnum.Edit) ? tableviewActionEditOnDetails(tableview.model, { injector }) : null;
82
79
  case TableviewDefaultActionsEnum.DeleteOnDetails:
83
- return defaultActions == null || defaultActions.includes(TableviewDefaultActionsEnum.Delete) ? tableviewDeleteOnDetailsAction(tableview.model, injector) : null;
80
+ return defaultActions == null || defaultActions.includes(TableviewDefaultActionsEnum.Delete) ? tableviewActionDeleteOnDetails(tableview.model, { injector }) : null;
84
81
  // subactions
85
82
  case TableviewDefaultActionsEnum.ExportJson:
86
83
  case TableviewDefaultActionsEnum.ExportCsv:
@@ -95,81 +92,100 @@ function getInjector(injector) {
95
92
  function getRouteData(injector) {
96
93
  return getInjector(injector)?.get(ActivatedRoute)?.snapshot.data;
97
94
  }
98
- export function tableviewDetailsAction(descriptor, injector) {
99
- const routeData = getRouteData(injector);
100
- return !routeData?.tableviewActions || routeData.tableviewActions.hasDetails ? new ActionEditorDetailsDescriptorInst(descriptor) : null;
101
- }
102
- export function tableviewDetailsActionWithProvider(descriptor, serviceProvider, injector) {
103
- const routeData = getRouteData(injector);
104
- return !routeData?.tableviewActions || routeData.tableviewActions.hasDetails
105
- ? new ActionEditorDetailsDescriptorInst(descriptor, {
106
- ...actionEditorGetProviderCfgObj(serviceProvider)
107
- })
108
- : null;
109
- }
110
- export function tableviewAddAction(descriptor, injector) {
111
- const routeData = getRouteData(injector);
112
- return !routeData?.tableviewActions || routeData.tableviewActions.hasAdd ? new ActionEditorAddDescriptorInst(descriptor) : null;
113
- }
114
- export function tableviewAddActionWithProvider(descriptor, serviceProvider, injector) {
115
- const routeData = getRouteData(injector);
116
- return !routeData?.tableviewActions || routeData.tableviewActions.hasAdd
117
- ? new ActionEditorAddDescriptorInst(descriptor, {
118
- ...actionEditorGetProviderCfgObj(serviceProvider)
119
- })
120
- : null;
95
+ export const tableviewActionEditorDetailsActionName = 'details';
96
+ export const tableviewActionEditorDetailsRoute = ':itemId';
97
+ export function tableviewActionDetailsOnTable(descriptor, opts) {
98
+ const routeData = getRouteData(opts?.injector);
99
+ if (!routeData?.tableviewActions || routeData.tableviewActions.hasDetails) {
100
+ const action = new ActionEditorDescriptorInst(descriptor, tableviewActionEditorDetailsActionName, {
101
+ ...(opts?.serviceProvider ? actionEditorGetProviderCfgObj(opts?.serviceProvider) : {}),
102
+ isTableviewMainEditor: true
103
+ });
104
+ action.withPosition(opts?.position ?? ActionPositionEnum.RowClick);
105
+ action.withPosition(ActionPositionEnum.RowClick);
106
+ action.withRouteTrigger(tableviewActionEditorDetailsRoute);
107
+ action.withEditorActions([actionEditorCancel(action)]);
108
+ action.withTableviewCategory(TableviewActionDefaultCategories.DETAILS);
109
+ return action;
110
+ }
111
+ return null;
121
112
  }
122
- export function tableviewEditAction(descriptor, injector) {
123
- const routeData = getRouteData(injector);
124
- return !routeData?.tableviewActions || routeData.tableviewActions.hasEdit ? new ActionEditorEditDescriptorInst(descriptor) : null;
113
+ export const tableviewActionEditorAddActionName = 'add';
114
+ export const tableviewActionEditorAddRoute = 'add';
115
+ export function tableviewActionAddOnTable(model, descriptor, opts) {
116
+ const routeData = getRouteData(opts?.injector);
117
+ if (!routeData?.tableviewActions || routeData.tableviewActions.hasAdd) {
118
+ const action = new ActionEditorDescriptorInst(descriptor, tableviewActionEditorAddActionName, {
119
+ ...(opts?.serviceProvider ? actionEditorGetProviderCfgObj(opts.serviceProvider) : {}),
120
+ isTableviewMainEditor: true,
121
+ model: model
122
+ });
123
+ action.withPosition(opts?.position ?? ActionPositionEnum.ToolbarLeft);
124
+ action.withRouteTrigger(tableviewActionEditorAddRoute);
125
+ action.button.withIcon('pi pi-plus');
126
+ action.withTableviewCategory(TableviewActionDefaultCategories.ADD);
127
+ action.withUnsavedChangesConfirmation();
128
+ return action;
129
+ }
130
+ return null;
125
131
  }
126
- export function tableviewEditActionWithProvider(descriptor, serviceProvider, injector) {
127
- const routeData = getRouteData(injector);
128
- return !routeData?.tableviewActions || routeData.tableviewActions.hasEdit
129
- ? new ActionEditorEditDescriptorInst(descriptor, {
130
- ...actionEditorGetProviderCfgObj(serviceProvider)
131
- })
132
- : null;
132
+ export const tableviewActionEditorEditActionName = 'edit';
133
+ export const tableviewActionEditorEditRoute = ':itemId/edit';
134
+ export function tableviewActionEditOnTable(model, descriptor, opts) {
135
+ const routeData = getRouteData(opts?.injector);
136
+ if (!routeData?.tableviewActions || routeData.tableviewActions.hasEdit) {
137
+ const action = new ActionEditorDescriptorInst(descriptor, tableviewActionEditorEditActionName, {
138
+ ...(opts?.serviceProvider ? actionEditorGetProviderCfgObj(opts.serviceProvider) : {}),
139
+ isTableviewMainEditor: true,
140
+ model: model
141
+ });
142
+ action.withPosition(opts?.position ?? ActionPositionEnum.RowInline);
143
+ action.button.styleClass.withSize(StyleSizeEnum.Small);
144
+ action.withRouteTrigger(tableviewActionEditorEditRoute);
145
+ action.withTableviewCategory(TableviewActionDefaultCategories.EDIT);
146
+ action.button.withLabel(null).withIcon('pi pi-pencil');
147
+ action.withUnsavedChangesConfirmation();
148
+ return action;
149
+ }
150
+ return null;
133
151
  }
134
- export function tableviewEditOnDetailsAction(descriptor, editDescriptor, injector) {
135
- const routeData = getRouteData(injector);
152
+ export function tableviewActionEditOnDetails(model, opts) {
153
+ const routeData = getRouteData(opts?.injector);
136
154
  if (routeData?.tableviewActions && !routeData.tableviewActions.hasEdit) {
137
155
  return null;
138
156
  }
139
- const action = editDescriptor
140
- ? actionLinkFromAction(editDescriptor)
141
- : new ActionLinkDescriptorInst(ActionEditorEditDescriptorInst.ACTION_NAME, {
142
- model: descriptor
143
- });
144
- action
157
+ const linkAction = actionLink(tableviewActionEditorEditActionName, { model: model });
158
+ linkAction
145
159
  .withTableviewCategory(TableviewActionDefaultCategories.EDIT)
146
160
  .withPositionTableviewCategories([TableviewActionDefaultCategories.DETAILS])
147
- .withPosition(ActionPositionEnum.FooterLeft)
161
+ .withPosition(opts?.position ?? ActionPositionEnum.FooterLeft)
148
162
  .withRouterLink('./edit')
149
163
  .withQueryParams({}, 'merge');
150
- action.button.styleClass.withActionLevel(StyleLevelEnum.Secondary);
151
- action.button.styleClass.withSize(StyleSizeEnum.Normal);
152
- action.button.styleClass.withRoundedButton(ButtonStyleRoundedEnum.DEFAULT);
153
- action.button.withLabel();
154
- if (!editDescriptor)
155
- action.button.withIcon('pi pi-pencil');
156
- return action;
164
+ linkAction.button.styleClass.withActionLevel(StyleLevelEnum.Secondary);
165
+ linkAction.button.styleClass.withSize(StyleSizeEnum.Normal);
166
+ linkAction.button.styleClass.withRoundedButton(ButtonStyleRoundedEnum.DEFAULT);
167
+ linkAction.button.withLabel();
168
+ linkAction.button.withIcon('pi pi-pencil');
169
+ return linkAction;
157
170
  }
158
- export function tableviewDeleteAction(descriptor, injector) {
159
- const routeData = getRouteData(injector);
160
- return !routeData?.tableviewActions || routeData.tableviewActions.hasDelete ? new ActionDeleteDescriptorInst(descriptor) : null;
161
- }
162
- export function tableviewDeleteActionWithProvider(descriptor, serviceProvider, injector) {
163
- const routeData = getRouteData(injector);
164
- return !routeData?.tableviewActions || routeData.tableviewActions.hasDelete
165
- ? new ActionDeleteDescriptorInst(descriptor, {
166
- ...actionGetProviderCfgObj(serviceProvider)
167
- })
168
- : null;
171
+ export const tableviewActionDeleteActionName = 'delete';
172
+ export function tableviewActionDeleteOnTable(model, opts) {
173
+ const routeData = getRouteData(opts?.injector);
174
+ if (!routeData?.tableviewActions || routeData.tableviewActions.hasDelete) {
175
+ const action = new ActionDescriptorInst(tableviewActionDeleteActionName, opts?.serviceProvider ? actionGetProviderCfgObj(opts.serviceProvider) : {});
176
+ action.withPosition(opts?.position ?? ActionPositionEnum.RowInline);
177
+ action.button.styleClass.withSize(StyleSizeEnum.Small);
178
+ action.button.styleClass.withActionLevel(StyleLevelEnum.Danger);
179
+ action.withRunConfirmation();
180
+ action.withTableviewCategory(TableviewActionDefaultCategories.DELETE);
181
+ action.button.withLabel(null).withIcon('pi pi-trash');
182
+ return action;
183
+ }
184
+ return null;
169
185
  }
170
- export function tableviewDeleteOnDetailsAction(model, injector) {
171
- const action = tableviewDeleteAction(model, injector);
172
- const dataProviderExecutor = getInjector(injector)?.get(DataProviderExecutor);
186
+ export function tableviewActionDeleteOnDetails(model, opts) {
187
+ const action = tableviewActionDeleteOnTable(model, opts);
188
+ const dataProviderExecutor = getInjector(opts?.injector)?.get(DataProviderExecutor);
173
189
  if (action) {
174
190
  action
175
191
  .withTableviewCategory(TableviewActionDefaultCategories.DELETE)
@@ -187,22 +203,23 @@ export function tableviewDeleteOnDetailsAction(model, injector) {
187
203
  }
188
204
  return null;
189
205
  }
190
- export function tableviewExportAction(descriptor, injector, defaultActions) {
206
+ export function tableviewActionExportOnTable(descriptor, opts) {
191
207
  const exportAction = new ActionDescriptorInst('export', {
192
208
  model: descriptor.model
193
209
  })
194
210
  .withButtonDescriptor(new ActionButtonDescriptor().withIcon('pi pi-download'))
195
211
  .withSubactionsAsMenu();
196
212
  const subactions = [];
197
- if (defaultActions == null || defaultActions.includes(TableviewDefaultActionsEnum.ExportJson))
198
- subactions.push(tableviewExportJsonAction(descriptor, injector));
199
- if (defaultActions == null || defaultActions.includes(TableviewDefaultActionsEnum.ExportCsv))
200
- subactions.push(tableviewExportCsvAction(descriptor, injector));
213
+ if (opts?.defaultActions == null || opts?.defaultActions.includes(TableviewDefaultActionsEnum.ExportJson))
214
+ subactions.push(tableviewActionExportJsonOnTable(descriptor, opts));
215
+ if (opts?.defaultActions == null || opts?.defaultActions.includes(TableviewDefaultActionsEnum.ExportCsv))
216
+ subactions.push(tableviewActionExportCsvOnTable(descriptor, opts));
201
217
  exportAction.withSubactions(...subactions);
218
+ exportAction.withPosition(opts?.position ?? ActionPositionEnum.ToolbarRight);
202
219
  return exportAction;
203
220
  }
204
- export function tableviewExportJsonAction(descriptor, injector) {
205
- const dataProviderExecutor = getInjector(injector)?.get(DataProviderExecutor);
221
+ export function tableviewActionExportJsonOnTable(descriptor, opts) {
222
+ const dataProviderExecutor = getInjector(opts?.injector)?.get(DataProviderExecutor);
206
223
  return new ActionDescriptorInst('exportJson', {
207
224
  model: descriptor.model
208
225
  })
@@ -221,10 +238,10 @@ export function tableviewExportJsonAction(descriptor, injector) {
221
238
  : ctx.parameters.item;
222
239
  })
223
240
  .withButtonDescriptor(new ActionButtonDescriptor().withIcon('pi pi-code'))
224
- .withPosition(ActionPositionEnum.ToolbarRight);
241
+ .withPosition(opts?.position ?? ActionPositionEnum.ToolbarRight);
225
242
  }
226
- export function tableviewExportCsvAction(descriptor, injector) {
227
- const dataProviderExecutor = getInjector(injector)?.get(DataProviderExecutor);
243
+ export function tableviewActionExportCsvOnTable(descriptor, opts) {
244
+ const dataProviderExecutor = getInjector(opts?.injector)?.get(DataProviderExecutor);
228
245
  return new ActionDescriptorInst('exportCsv', {
229
246
  model: descriptor.model
230
247
  })
@@ -248,9 +265,9 @@ export function tableviewExportCsvAction(descriptor, injector) {
248
265
  : ctx.parameters.item;
249
266
  })
250
267
  .withButtonDescriptor(new ActionButtonDescriptor().withIcon('pi pi-file'))
251
- .withPosition(ActionPositionEnum.ToolbarRight);
268
+ .withPosition(opts?.position ?? ActionPositionEnum.ToolbarRight);
252
269
  }
253
- export function tableviewRefreshAction(descriptor) {
270
+ export function tableviewActionRefreshOnTable(descriptor, opts) {
254
271
  const action = new ActionDescriptorInst('refresh', {
255
272
  model: descriptor
256
273
  })
@@ -260,17 +277,18 @@ export function tableviewRefreshAction(descriptor) {
260
277
  .withRunFunction(ctx => {
261
278
  ctx.viewContainer?.reloadTable({});
262
279
  return of(null);
263
- });
280
+ })
281
+ .withPosition(opts?.position ?? ActionPositionEnum.ToolbarRight);
264
282
  action.button.withIcon('pi pi-refresh').styleClass.withActionLevel(StyleLevelEnum.Secondary);
265
283
  return action;
266
284
  }
267
- export function tableviewLocalizationLanguageSelectAction(descriptor) {
285
+ export function tableviewActionLocalizationLangSelectOnTable(descriptor, opts) {
268
286
  return descriptor.isLocalized()
269
287
  ? new ActionDescriptorInst('translator', {
270
288
  model: descriptor.model
271
289
  })
272
- .withPosition(ActionPositionEnum.ToolbarLeft)
290
+ .withPosition(opts?.position ?? ActionPositionEnum.ToolbarLeft)
273
291
  .withComponentFromDi(DATA_LANGUAGE_DROPDOWN_COMPONENT_IT)
274
292
  : null;
275
293
  }
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWRlZmF1bHQtYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL3RhYmxldmlldy9oZWxwZXJzL3RhYmxldmlldy1kZWZhdWx0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxFQUFFLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BILE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRy9GLE9BQU8sRUFBcUIsdUJBQXVCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMvRyxPQUFPLEVBQTJCLDZCQUE2QixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDbEksT0FBTyxFQUFDLDZCQUE2QixFQUFFLGlDQUFpQyxFQUFFLDhCQUE4QixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDbkssT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFDN0YsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDekYsT0FBTyxFQUFDLDBCQUEwQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDNUcsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlD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LFVBQWtDO0lBQzVFLE1BQU0sTUFBTSxHQUFHLElBQUksb0JBQW9CLENBQW1CLFNBQVMsRUFBRTtRQUNqRSxLQUFLLEVBQUUsVUFBVTtLQUNwQixDQUFDO1NBQ0csWUFBWSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQztTQUM3QyxxQkFBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUM7U0FDNUQsMEJBQTBCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7U0FDdkQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLEdBQUcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0YsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSx5Q0FBeUMsQ0FBUSxVQUEwQztJQUN2RyxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUU7UUFDM0IsQ0FBQyxDQUFDLElBQUksb0JBQW9CLENBQW1CLFlBQVksRUFBRTtZQUNyRCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7U0FDMUIsQ0FBQzthQUNHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7YUFDNUMsbUJBQW1CLENBQUMsbUNBQW1DLENBQUM7UUFDL0QsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdG9yLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7b2YsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBTdHlsZUxldmVsRW51bSwgU3R5bGVTaXplRW51bSwgY29weURhdGFMaXN0UGFyYW1zfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtBY3Rpb25CdXR0b25EZXNjcmlwdG9yLCBCdXR0b25TdHlsZVJvdW5kZWRFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuaW1wb3J0IHtBY3Rpb25Qcm92aWRlclR5cGUsIGFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqfSBmcm9tICcuLi8uLi9hY3Rpb24vZGVzY3JpcHRvcnMvYWN0aW9uLWRlc2NyaXB0b3IuZmFjdG9yeSc7XG5pbXBvcnQge0FjdGlvbkVkaXRvclByb3ZpZGVyVHlwZSwgYWN0aW9uRWRpdG9yR2V0UHJvdmlkZXJDZmdPYmp9IGZyb20gJy4uLy4uL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24tZWRpdG9yLWRlc2NyaXB0b3IuZmFjdG9yeSc7XG5pbXBvcnQge0FjdGlvbkVkaXRvckFkZERlc2NyaXB0b3JJbnN0LCBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvckluc3QsIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi4vLi4vYWN0aW9uL2Rlc2NyaXB0b3JzL2FjdGlvbi1lZGl0b3IuZGVzY3JpcHRvcic7XG5pbXBvcnQge2FjdGlvbkxpbmtGcm9tQWN0aW9ufSBmcm9tICcuLi8uLi9hY3Rpb24vZGVzY3JpcHRvcnMvYWN0aW9uLWxpbmstZGVzY3JpcHRvci5mYWN0b3J5JztcbmltcG9ydCB7QWN0aW9uTGlua0Rlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi9hY3Rpb24vZGVzY3JpcHRvcnMvYWN0aW9uLWxpbmsuZGVzY3JpcHRvcic7XG5pbXBvcnQge0FjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0LCBBY3Rpb25EZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi4vLi4vYWN0aW9uL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7QWN0aW9uUG9zaXRpb25FbnVtfSBmcm9tICcuLi8uLi9hY3Rpb24vbW9kZWxzL2FjdGlvbi50eXBlJztcbmltcG9ydCB7VGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXN9IGZyb20gJy4uLy4uL2FjdGlvbi9tb2RlbHMvdGFibGV2aWV3LWFjdGlvbi1kZWZhdWx0LWNhdGVnb3JpZXMubW9kZWwnO1xuaW1wb3J0IHtEYXRhUHJvdmlkZXJFeGVjdXRvcn0gZnJvbSAnLi4vLi4vYWN0aW9uL3NlcnZpY2VzL2RhdGEtcHJvdmlkZXItZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQge0RBVEFfTEFOR1VBR0VfRFJPUERPV05fQ09NUE9ORU5UX0lUfSBmcm9tICcuLi8uLi9hY3Rpb24vc2VydmljZXMvdG9rZW5zL2RhdGEtbGFuZ3VhZ2UtZHJvcGRvd24udG9rZW4nO1xuaW1wb3J0IHtFZGl0b3JEZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi4vLi4vZWRpdG9yL2Rlc2NyaXB0b3JzL2VkaXRvci5kZXNjcmlwdG9yJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcbmltcG9ydCB7VGFibGV2aWV3Um91dGVEYXRhfSBmcm9tICcuLi9tb2RlbHMvdGFibGV2aWV3LXJvdXRlLm1vZGVsJztcbmltcG9ydCB7Y29udmVydERhdGFUb1N0cmluZ1dpdGhEZWxpbWl0ZXIsIHNhdmVGaWxlQXN9IGZyb20gJy4vZmlsZXMtZXhwb3J0JztcblxuZXhwb3J0IGVudW0gVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtIHtcbiAgICBEZXRhaWxzLFxuICAgIEFkZCxcbiAgICBFZGl0LFxuICAgIEVkaXRPbkRldGFpbHMsXG4gICAgRGVsZXRlLFxuICAgIERlbGV0ZU9uRGV0YWlscyxcbiAgICBSZWZyZXNoLFxuICAgIEV4cG9ydCxcbiAgICBFeHBvcnRKc29uLFxuICAgIEV4cG9ydENzdixcbiAgICBMb2NhbGl6YXRpb25MYW5ndWFnZVNlbGVjdFxufVxuXG5jb25zdCB0YWJsZXZpZXdEZWZhdWx0QWN0aW9ucyA9IFtcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRGV0YWlscyxcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uQWRkLFxuICAgIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FZGl0LFxuICAgIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FZGl0T25EZXRhaWxzLFxuICAgIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5EZWxldGUsXG4gICAgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkRlbGV0ZU9uRGV0YWlscyxcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uUmVmcmVzaCxcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0LFxuICAgIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FeHBvcnRKc29uLFxuICAgIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FeHBvcnRDc3YsXG4gICAgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkxvY2FsaXphdGlvbkxhbmd1YWdlU2VsZWN0XG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGV2aWV3RGVmYXVsdEFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIFsuLi50YWJsZXZpZXdEZWZhdWx0QWN0aW9uc107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWJsZXZpZXdBY3Rpb25zKFxuICAgIHRhYmxldmlldzogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8YW55LCBhbnksIGFueT4sXG4gICAgZGVmYXVsdEFjdGlvbnM/OiBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW1bXSxcbiAgICBkZWZhdWx0QWN0aW9uc092ZXJyaWRlcz86IFJlY29yZDxudW1iZXIsIEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4+LFxuICAgIGluamVjdG9yPzogSW5qZWN0b3IgfCBudWxsXG4pOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+PiB7XG4gICAgcmV0dXJuIChkZWZhdWx0QWN0aW9ucyA/PyBnZXRUYWJsZXZpZXdEZWZhdWx0QWN0aW9ucygpKVxuICAgICAgICAubWFwKHQgPT4gY3JlYXRlVGFibGV2aWV3QWN0aW9uKHQsIHRhYmxldmlldywgZGVmYXVsdEFjdGlvbnMsIGRlZmF1bHRBY3Rpb25zT3ZlcnJpZGVzLCBpbmplY3RvcikpXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlICE9IG51bGwpIGFzIEFycmF5PEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGV2aWV3QWN0aW9uKFxuICAgIHR5cGU6IFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bSxcbiAgICB0YWJsZXZpZXc6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PGFueSwgYW55LCBhbnk+LFxuICAgIGRlZmF1bHRBY3Rpb25zPzogVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtW10sXG4gICAgZGVmYXVsdEFjdGlvbnNPdmVycmlkZXM/OiBSZWNvcmQ8bnVtYmVyLCBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+PixcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbFxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiB8IG51bGwge1xuICAgIGlmIChkZWZhdWx0QWN0aW9uc092ZXJyaWRlcyAhPSBudWxsICYmIGRlZmF1bHRBY3Rpb25zT3ZlcnJpZGVzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRBY3Rpb25zT3ZlcnJpZGVzW3R5cGVdO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAvLyB0YWJsZSByb3cgYWN0aW9uc1xuICAgICAgICBjYXNlIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5EZXRhaWxzOlxuICAgICAgICAgICAgcmV0dXJuIHRhYmxldmlld0RldGFpbHNBY3Rpb24odGFibGV2aWV3LmRldGFpbHNFZGl0b3IsIGluamVjdG9yKTtcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRWRpdDpcbiAgICAgICAgICAgIHJldHVybiB0YWJsZXZpZXdFZGl0QWN0aW9uKHRhYmxldmlldy5lZGl0RWRpdG9yLCBpbmplY3Rvcik7XG4gICAgICAgIGNhc2UgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkRlbGV0ZTpcbiAgICAgICAgICAgIHJldHVybiB0YWJsZXZpZXdEZWxldGVBY3Rpb24odGFibGV2aWV3Lm1vZGVsLCBpbmplY3Rvcik7XG4gICAgICAgIC8vIHRhYmxlIHRvb2xiYXIgYWN0aW9uc1xuICAgICAgICBjYXNlIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5BZGQ6XG4gICAgICAgICAgICByZXR1cm4gdGFibGV2aWV3QWRkQWN0aW9uKHRhYmxldmlldy5hZGRFZGl0b3IsIGluamVjdG9yKTtcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uTG9jYWxpemF0aW9uTGFuZ3VhZ2VTZWxlY3Q6XG4gICAgICAgICAgICByZXR1cm4gdGFibGV2aWV3TG9jYWxpemF0aW9uTGFuZ3VhZ2VTZWxlY3RBY3Rpb24odGFibGV2aWV3KTtcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uUmVmcmVzaDpcbiAgICAgICAgICAgIHJldHVybiB0YWJsZXZpZXdSZWZyZXNoQWN0aW9uKHRhYmxldmlldy5tb2RlbCk7XG4gICAgICAgIGNhc2UgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkV4cG9ydDpcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0QWN0aW9ucyA9PSBudWxsIHx8IGRlZmF1bHRBY3Rpb25zLmluY2x1ZGVzKFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FeHBvcnRKc29uKSB8fCBkZWZhdWx0QWN0aW9ucy5pbmNsdWRlcyhUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0Q3N2KVxuICAgICAgICAgICAgICAgID8gdGFibGV2aWV3RXhwb3J0QWN0aW9uKHRhYmxldmlldywgaW5qZWN0b3IsIGRlZmF1bHRBY3Rpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy9kZXRhaWxzIGFjdGlvbnNcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRWRpdE9uRGV0YWlsczpcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0QWN0aW9ucyA9PSBudWxsIHx8IGRlZmF1bHRBY3Rpb25zLmluY2x1ZGVzKFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FZGl0KVxuICAgICAgICAgICAgICAgID8gdGFibGV2aWV3RWRpdE9uRGV0YWlsc0FjdGlvbih0YWJsZXZpZXcubW9kZWwsIHRhYmxldmlld0VkaXRBY3Rpb24odGFibGV2aWV3LmVkaXRFZGl0b3IsIGluamVjdG9yKSwgaW5qZWN0b3IpXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjYXNlIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5EZWxldGVPbkRldGFpbHM6XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnMgPT0gbnVsbCB8fCBkZWZhdWx0QWN0aW9ucy5pbmNsdWRlcyhUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRGVsZXRlKSA/IHRhYmxldmlld0RlbGV0ZU9uRGV0YWlsc0FjdGlvbih0YWJsZXZpZXcubW9kZWwsIGluamVjdG9yKSA6IG51bGw7XG4gICAgICAgIC8vIHN1YmFjdGlvbnNcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0SnNvbjpcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0Q3N2OlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYFRhYmxldmlldyBkZWZhdWx0IGFjdGlvbiBvZiB0eXBlICR7dHlwZX0gbm90IHN1cHBvcnRlZGApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW5qZWN0b3IoaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGwpOiBJbmplY3RvciB8IG51bGwge1xuICAgIHJldHVybiBpbmplY3RvciA9PT0gdW5kZWZpbmVkID8gaW5qZWN0KEluamVjdG9yKSA6IGluamVjdG9yO1xufVxuXG5mdW5jdGlvbiBnZXRSb3V0ZURhdGEoaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0SW5qZWN0b3IoaW5qZWN0b3IpPy5nZXQoQWN0aXZhdGVkUm91dGUpPy5zbmFwc2hvdC5kYXRhIGFzIFRhYmxldmlld1JvdXRlRGF0YSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0RldGFpbHNBY3Rpb248TW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsPixcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbFxuKTogQWN0aW9uRWRpdG9yRGV0YWlsc0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB8IG51bGwge1xuICAgIGNvbnN0IHJvdXRlRGF0YSA9IGdldFJvdXRlRGF0YShpbmplY3Rvcik7XG4gICAgcmV0dXJuICFyb3V0ZURhdGE/LnRhYmxldmlld0FjdGlvbnMgfHwgcm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMuaGFzRGV0YWlscyA/IG5ldyBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KGRlc2NyaXB0b3IpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0RldGFpbHNBY3Rpb25XaXRoUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2U+KFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsPixcbiAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvbkVkaXRvclByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGxcbik6IEFjdGlvbkVkaXRvckRldGFpbHNEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4gfCBudWxsIHtcbiAgICBjb25zdCByb3V0ZURhdGEgPSBnZXRSb3V0ZURhdGEoaW5qZWN0b3IpO1xuICAgIHJldHVybiAhcm91dGVEYXRhPy50YWJsZXZpZXdBY3Rpb25zIHx8IHJvdXRlRGF0YS50YWJsZXZpZXdBY3Rpb25zLmhhc0RldGFpbHNcbiAgICAgICAgPyBuZXcgQWN0aW9uRWRpdG9yRGV0YWlsc0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPihkZXNjcmlwdG9yLCB7XG4gICAgICAgICAgICAgIC4uLmFjdGlvbkVkaXRvckdldFByb3ZpZGVyQ2ZnT2JqKHNlcnZpY2VQcm92aWRlcilcbiAgICAgICAgICB9KVxuICAgICAgICA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZXZpZXdBZGRBY3Rpb248TW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsPixcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbFxuKTogQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+IHwgbnVsbCB7XG4gICAgY29uc3Qgcm91dGVEYXRhID0gZ2V0Um91dGVEYXRhKGluamVjdG9yKTtcbiAgICByZXR1cm4gIXJvdXRlRGF0YT8udGFibGV2aWV3QWN0aW9ucyB8fCByb3V0ZURhdGEudGFibGV2aWV3QWN0aW9ucy5oYXNBZGQgPyBuZXcgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KGRlc2NyaXB0b3IpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0FkZEFjdGlvbldpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8TW9kZWw+LFxuICAgIHNlcnZpY2VQcm92aWRlcjogQWN0aW9uRWRpdG9yUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPixcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbFxuKTogQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+IHwgbnVsbCB7XG4gICAgY29uc3Qgcm91dGVEYXRhID0gZ2V0Um91dGVEYXRhKGluamVjdG9yKTtcbiAgICByZXR1cm4gIXJvdXRlRGF0YT8udGFibGV2aWV3QWN0aW9ucyB8fCByb3V0ZURhdGEudGFibGV2aWV3QWN0aW9ucy5oYXNBZGRcbiAgICAgICAgPyBuZXcgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KGRlc2NyaXB0b3IsIHtcbiAgICAgICAgICAgICAgLi4uYWN0aW9uRWRpdG9yR2V0UHJvdmlkZXJDZmdPYmooc2VydmljZVByb3ZpZGVyKVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0VkaXRBY3Rpb248TW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsPixcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbFxuKTogQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB8IG51bGwge1xuICAgIGNvbnN0IHJvdXRlRGF0YSA9IGdldFJvdXRlRGF0YShpbmplY3Rvcik7XG4gICAgcmV0dXJuICFyb3V0ZURhdGE/LnRhYmxldmlld0FjdGlvbnMgfHwgcm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMuaGFzRWRpdCA/IG5ldyBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KGRlc2NyaXB0b3IpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0VkaXRBY3Rpb25XaXRoUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2U+KFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsPixcbiAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvbkVkaXRvclByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGxcbik6IEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4gfCBudWxsIHtcbiAgICBjb25zdCByb3V0ZURhdGEgPSBnZXRSb3V0ZURhdGEoaW5qZWN0b3IpO1xuICAgIHJldHVybiAhcm91dGVEYXRhPy50YWJsZXZpZXdBY3Rpb25zIHx8IHJvdXRlRGF0YS50YWJsZXZpZXdBY3Rpb25zLmhhc0VkaXRcbiAgICAgICAgPyBuZXcgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPihkZXNjcmlwdG9yLCB7XG4gICAgICAgICAgICAgIC4uLmFjdGlvbkVkaXRvckdldFByb3ZpZGVyQ2ZnT2JqKHNlcnZpY2VQcm92aWRlcilcbiAgICAgICAgICB9KVxuICAgICAgICA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZXZpZXdFZGl0T25EZXRhaWxzQWN0aW9uPE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgIGVkaXREZXNjcmlwdG9yOiBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3Q8TW9kZWw+IHwgbnVsbCxcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbFxuKTogQWN0aW9uTGlua0Rlc2NyaXB0b3JJbnN0PE1vZGVsPiB8IG51bGwge1xuICAgIGNvbnN0IHJvdXRlRGF0YSA9IGdldFJvdXRlRGF0YShpbmplY3Rvcik7XG4gICAgaWYgKHJvdXRlRGF0YT8udGFibGV2aWV3QWN0aW9ucyAmJiAhcm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMuaGFzRWRpdCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb24gPSBlZGl0RGVzY3JpcHRvclxuICAgICAgICA/IGFjdGlvbkxpbmtGcm9tQWN0aW9uKGVkaXREZXNjcmlwdG9yKVxuICAgICAgICA6IG5ldyBBY3Rpb25MaW5rRGVzY3JpcHRvckluc3Q8TW9kZWw+KEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9ySW5zdC5BQ1RJT05fTkFNRSwge1xuICAgICAgICAgICAgICBtb2RlbDogZGVzY3JpcHRvclxuICAgICAgICAgIH0pO1xuICAgIGFjdGlvblxuICAgICAgICAud2l0aFRhYmxldmlld0NhdGVnb3J5KFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkVESVQpXG4gICAgICAgIC53aXRoUG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzKFtUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSlcbiAgICAgICAgLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyTGVmdClcbiAgICAgICAgLndpdGhSb3V0ZXJMaW5rKCcuL2VkaXQnKVxuICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHt9LCAnbWVyZ2UnKTtcbiAgICBhY3Rpb24uYnV0dG9uLnN0eWxlQ2xhc3Mud2l0aEFjdGlvbkxldmVsKFN0eWxlTGV2ZWxFbnVtLlNlY29uZGFyeSk7XG4gICAgYWN0aW9uLmJ1dHRvbi5zdHlsZUNsYXNzLndpdGhTaXplKFN0eWxlU2l6ZUVudW0uTm9ybWFsKTtcbiAgICBhY3Rpb24uYnV0dG9uLnN0eWxlQ2xhc3Mud2l0aFJvdW5kZWRCdXR0b24oQnV0dG9uU3R5bGVSb3VuZGVkRW51bS5ERUZBVUxUKTtcbiAgICBhY3Rpb24uYnV0dG9uLndpdGhMYWJlbCgpO1xuICAgIGlmICghZWRpdERlc2NyaXB0b3IpIGFjdGlvbi5idXR0b24ud2l0aEljb24oJ3BpIHBpLXBlbmNpbCcpO1xuXG4gICAgcmV0dXJuIGFjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0RlbGV0ZUFjdGlvbjxNb2RlbCwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgZGVzY3JpcHRvcjogTW9kZWxEZXNjcmlwdG9yPE1vZGVsPixcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbFxuKTogQWN0aW9uRGVsZXRlRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+IHwgbnVsbCB7XG4gICAgY29uc3Qgcm91dGVEYXRhID0gZ2V0Um91dGVEYXRhKGluamVjdG9yKTtcbiAgICByZXR1cm4gIXJvdXRlRGF0YT8udGFibGV2aWV3QWN0aW9ucyB8fCByb3V0ZURhdGEudGFibGV2aWV3QWN0aW9ucy5oYXNEZWxldGUgPyBuZXcgQWN0aW9uRGVsZXRlRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KGRlc2NyaXB0b3IpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0RlbGV0ZUFjdGlvbldpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgZGVzY3JpcHRvcjogTW9kZWxEZXNjcmlwdG9yPE1vZGVsPixcbiAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGxcbik6IEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB8IG51bGwge1xuICAgIGNvbnN0IHJvdXRlRGF0YSA9IGdldFJvdXRlRGF0YShpbmplY3Rvcik7XG4gICAgcmV0dXJuICFyb3V0ZURhdGE/LnRhYmxldmlld0FjdGlvbnMgfHwgcm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMuaGFzRGVsZXRlXG4gICAgICAgID8gbmV3IEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPihkZXNjcmlwdG9yLCB7XG4gICAgICAgICAgICAgIC4uLmFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqKHNlcnZpY2VQcm92aWRlcilcbiAgICAgICAgICB9KVxuICAgICAgICA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZXZpZXdEZWxldGVPbkRldGFpbHNBY3Rpb248TW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LCBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbCk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB8IG51bGwge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxldmlld0RlbGV0ZUFjdGlvbjxNb2RlbCwgU2VydmljZT4obW9kZWwsIGluamVjdG9yKTtcbiAgICBjb25zdCBkYXRhUHJvdmlkZXJFeGVjdXRvciA9IGdldEluamVjdG9yKGluamVjdG9yKT8uZ2V0KERhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIGFjdGlvblxuICAgICAgICAgICAgLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERUxFVEUpXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllcyhbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuREVUQUlMU10pXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0KVxuICAgICAgICAgICAgLndpdGhSdW5GdW5jdGlvbihjdHggPT5cbiAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXJFeGVjdXRvclxuICAgICAgICAgICAgICAgICAgICA/IGRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1bkRlbGV0ZU9yRmFpbChjdHgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudmlld0NvbnRhaW5lcj8ucmVsb2FkVGFibGUoe30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnZpZXdDb250YWluZXI/LmNsb3NlRWRpdG9yKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgIGFjdGlvbi5idXR0b24ud2l0aExhYmVsKHVuZGVmaW5lZCk7XG4gICAgICAgIGFjdGlvbi5idXR0b24uc3R5bGVDbGFzcy53aXRoU2l6ZShTdHlsZVNpemVFbnVtLk5vcm1hbCk7XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0V4cG9ydEFjdGlvbjxNb2RlbD4oXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWw+LFxuICAgIGluamVjdG9yPzogSW5qZWN0b3IgfCBudWxsLFxuICAgIGRlZmF1bHRBY3Rpb25zPzogVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtW11cbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsPiB8IG51bGwge1xuICAgIGNvbnN0IGV4cG9ydEFjdGlvbiA9IG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPignZXhwb3J0Jywge1xuICAgICAgICBtb2RlbDogZGVzY3JpcHRvci5tb2RlbFxuICAgIH0pXG4gICAgICAgIC53aXRoQnV0dG9uRGVzY3JpcHRvcihuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpLndpdGhJY29uKCdwaSBwaS1kb3dubG9hZCcpKVxuICAgICAgICAud2l0aFN1YmFjdGlvbnNBc01lbnUoKTtcblxuICAgIGNvbnN0IHN1YmFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsPltdID0gW107XG5cbiAgICBpZiAoZGVmYXVsdEFjdGlvbnMgPT0gbnVsbCB8fCBkZWZhdWx0QWN0aW9ucy5pbmNsdWRlcyhUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0SnNvbikpIHN1YmFjdGlvbnMucHVzaCh0YWJsZXZpZXdFeHBvcnRKc29uQWN0aW9uKGRlc2NyaXB0b3IsIGluamVjdG9yKSk7XG4gICAgaWYgKGRlZmF1bHRBY3Rpb25zID09IG51bGwgfHwgZGVmYXVsdEFjdGlvbnMuaW5jbHVkZXMoVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkV4cG9ydENzdikpIHN1YmFjdGlvbnMucHVzaCh0YWJsZXZpZXdFeHBvcnRDc3ZBY3Rpb24oZGVzY3JpcHRvciwgaW5qZWN0b3IpKTtcblxuICAgIGV4cG9ydEFjdGlvbi53aXRoU3ViYWN0aW9ucyguLi5zdWJhY3Rpb25zKTtcbiAgICByZXR1cm4gZXhwb3J0QWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3RXhwb3J0SnNvbkFjdGlvbjxNb2RlbD4oZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWw+LCBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbCk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsPiB7XG4gICAgY29uc3QgZGF0YVByb3ZpZGVyRXhlY3V0b3IgPSBnZXRJbmplY3RvcihpbmplY3Rvcik/LmdldChEYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPignZXhwb3J0SnNvbicsIHtcbiAgICAgICAgbW9kZWw6IGRlc2NyaXB0b3IubW9kZWxcbiAgICB9KVxuICAgICAgICAud2l0aFJ1bkZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBjdHgucGFyYW1ldGVycy5kYXRhTGlzdFBhcmFtcyA/IGNvcHlEYXRhTGlzdFBhcmFtcyhjdHgucGFyYW1ldGVycy5kYXRhTGlzdFBhcmFtcykgOiB7fTtcbiAgICAgICAgICAgIHBhcmFtcy5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgcGFyYW1zLmxpbWl0ID0gNTAwO1xuICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuZGF0YUxpc3RQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVByb3ZpZGVyRXhlY3V0b3JcbiAgICAgICAgICAgICAgICA/IGRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1bkdldEFsbE9yRmFpbChjdHgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEsIHVuZGVmaW5lZCwgNCldLCB7dHlwZTogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBjdHguaW5zdGFuY2UuYWN0aW9uLm1vZGVsPy5pMThuQmFzZUtleSA/PyAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGVBcyhibG9iLCBgJHt0eXBlTmFtZSA/IHR5cGVOYW1lICsgJ18nIDogJyd9JHtjdHguaW5zdGFuY2UuYWN0aW9uLmFjdGlvbk5hbWV9Lmpzb25gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogY3R4LnBhcmFtZXRlcnMuaXRlbTtcbiAgICAgICAgfSlcbiAgICAgICAgLndpdGhCdXR0b25EZXNjcmlwdG9yKG5ldyBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKCkud2l0aEljb24oJ3BpIHBpLWNvZGUnKSlcbiAgICAgICAgLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0V4cG9ydENzdkFjdGlvbjxNb2RlbD4oZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWw+LCBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbCk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsPiB7XG4gICAgY29uc3QgZGF0YVByb3ZpZGVyRXhlY3V0b3IgPSBnZXRJbmplY3RvcihpbmplY3Rvcik/LmdldChEYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPignZXhwb3J0Q3N2Jywge1xuICAgICAgICBtb2RlbDogZGVzY3JpcHRvci5tb2RlbFxuICAgIH0pXG4gICAgICAgIC53aXRoUnVuRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGN0eC5wYXJhbWV0ZXJzLmRhdGFMaXN0UGFyYW1zID8gY29weURhdGFMaXN0UGFyYW1zKGN0eC5wYXJhbWV0ZXJzLmRhdGFMaXN0UGFyYW1zKSA6IHt9O1xuICAgICAgICAgICAgcGFyYW1zLm9mZnNldCA9IDA7XG4gICAgICAgICAgICBwYXJhbXMubGltaXQgPSA1MDA7XG4gICAgICAgICAgICBjdHgucGFyYW1ldGVycy5kYXRhTGlzdFBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXJFeGVjdXRvclxuICAgICAgICAgICAgICAgID8gZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuR2V0QWxsT3JGYWlsKGN0eCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NvbnZlcnREYXRhVG9TdHJpbmdXaXRoRGVsaW1pdGVyKHJlcy5kYXRhLCAnLCcsIGRlc2NyaXB0b3IsIGN0eC5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkpXSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ubW9kZWw/LmkxOG5CYXNlS2V5ID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlRmlsZUFzKGJsb2IsIGAke3R5cGVOYW1lID8gdHlwZU5hbWUgKyAnXycgOiAnJ30ke2N0eC5pbnN0YW5jZS5hY3Rpb24uYWN0aW9uTmFtZX0uY3N2YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGN0eC5wYXJhbWV0ZXJzLml0ZW07XG4gICAgICAgIH0pXG4gICAgICAgIC53aXRoQnV0dG9uRGVzY3JpcHRvcihuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpLndpdGhJY29uKCdwaSBwaS1maWxlJykpXG4gICAgICAgIC53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZXZpZXdSZWZyZXNoQWN0aW9uPE1vZGVsPihkZXNjcmlwdG9yOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+KTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWw+IHwgbnVsbCB7XG4gICAgY29uc3QgYWN0aW9uID0gbmV3IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+KCdyZWZyZXNoJywge1xuICAgICAgICBtb2RlbDogZGVzY3JpcHRvclxuICAgIH0pXG4gICAgICAgIC53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodClcbiAgICAgICAgLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5SRUFEKVxuICAgICAgICAud2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKVxuICAgICAgICAud2l0aFJ1bkZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICBjdHgudmlld0NvbnRhaW5lcj8ucmVsb2FkVGFibGUoe30pO1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KTtcbiAgICBhY3Rpb24uYnV0dG9uLndpdGhJY29uKCdwaSBwaS1yZWZyZXNoJykuc3R5bGVDbGFzcy53aXRoQWN0aW9uTGV2ZWwoU3R5bGVMZXZlbEVudW0uU2Vjb25kYXJ5KTtcbiAgICByZXR1cm4gYWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3TG9jYWxpemF0aW9uTGFuZ3VhZ2VTZWxlY3RBY3Rpb248TW9kZWw+KGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsPik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsPiB8IG51bGwge1xuICAgIHJldHVybiBkZXNjcmlwdG9yLmlzTG9jYWxpemVkKClcbiAgICAgICAgPyBuZXcgQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZD4oJ3RyYW5zbGF0b3InLCB7XG4gICAgICAgICAgICAgIG1vZGVsOiBkZXNjcmlwdG9yLm1vZGVsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQpXG4gICAgICAgICAgICAgIC53aXRoQ29tcG9uZW50RnJvbURpKERBVEFfTEFOR1VBR0VfRFJPUERPV05fQ09NUE9ORU5UX0lUKVxuICAgICAgICA6IG51bGw7XG59XG4iXX0=
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWRlZmF1bHQtYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL3RhYmxldmlldy9oZWxwZXJzL3RhYmxldmlldy1kZWZhdWx0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxFQUFFLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsb0JBQW9CLEVBQW9CLGNBQWMsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN0SSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUkvRixPQUFPLEVBQXFCLHVCQUF1QixFQUFDLE1BQU0sb0RBQW9ELENBQUM7QUFDL0csT0FBTyxFQUEyQiw2QkFBNkIsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQ2xJLE9BQU8sRUFBQywwQkFBMEIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2pILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUVuRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUMvRyxPQUFPLEVBQUMsb0JB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QUFRLElBQUksa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0YsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQU1ELE1BQU0sVUFBVSw0Q0FBNEMsQ0FDeEQsVUFBMEMsRUFDMUMsSUFBMkQ7SUFFM0QsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFO1FBQzNCLENBQUMsQ0FBQyxJQUFJLG9CQUFvQixDQUFvRCxZQUFZLEVBQUU7WUFDdEYsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1NBQzFCLENBQUM7YUFDRyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7YUFDOUQsbUJBQW1CLENBQUMsbUNBQW1DLENBQUM7UUFDL0QsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdG9yLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7b2YsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBTZXJ2aWNlQ2xhc3NUeXBlLCBTdHlsZUxldmVsRW51bSwgU3R5bGVTaXplRW51bSwgY29weURhdGFMaXN0UGFyYW1zfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtBY3Rpb25CdXR0b25EZXNjcmlwdG9yLCBCdXR0b25TdHlsZVJvdW5kZWRFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcbmltcG9ydCB7VGFibGVEZXNjcmlwdG9ySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge0FjdGlvblByb3ZpZGVyVHlwZSwgYWN0aW9uR2V0UHJvdmlkZXJDZmdPYmp9IGZyb20gJy4uLy4uL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24tZGVzY3JpcHRvci5mYWN0b3J5JztcbmltcG9ydCB7QWN0aW9uRWRpdG9yUHJvdmlkZXJUeXBlLCBhY3Rpb25FZGl0b3JHZXRQcm92aWRlckNmZ09ian0gZnJvbSAnLi4vLi4vYWN0aW9uL2Rlc2NyaXB0b3JzL2FjdGlvbi1lZGl0b3ItZGVzY3JpcHRvci5mYWN0b3J5JztcbmltcG9ydCB7QWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3QsIGFjdGlvbkVkaXRvckNhbmNlbH0gZnJvbSAnLi4vLi4vYWN0aW9uL2Rlc2NyaXB0b3JzL2FjdGlvbi1lZGl0b3IuZGVzY3JpcHRvcic7XG5pbXBvcnQge2FjdGlvbkxpbmt9IGZyb20gJy4uLy4uL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24tbGluay1kZXNjcmlwdG9yLmZhY3RvcnknO1xuaW1wb3J0IHtBY3Rpb25MaW5rRGVzY3JpcHRvckluc3R9IGZyb20gJy4uLy4uL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24tbGluay5kZXNjcmlwdG9yJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvckluc3R9IGZyb20gJy4uLy4uL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24uZGVzY3JpcHRvcic7XG5pbXBvcnQge0FjdGlvblBvc2l0aW9uRW51bX0gZnJvbSAnLi4vLi4vYWN0aW9uL21vZGVscy9hY3Rpb24udHlwZSc7XG5pbXBvcnQge1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzfSBmcm9tICcuLi8uLi9hY3Rpb24vbW9kZWxzL3RhYmxldmlldy1hY3Rpb24tZGVmYXVsdC1jYXRlZ29yaWVzLm1vZGVsJztcbmltcG9ydCB7RGF0YVByb3ZpZGVyRXhlY3V0b3J9IGZyb20gJy4uLy4uL2FjdGlvbi9zZXJ2aWNlcy9kYXRhLXByb3ZpZGVyLWV4ZWN1dG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtEQVRBX0xBTkdVQUdFX0RST1BET1dOX0NPTVBPTkVOVF9JVH0gZnJvbSAnLi4vLi4vYWN0aW9uL3NlcnZpY2VzL3Rva2Vucy9kYXRhLWxhbmd1YWdlLWRyb3Bkb3duLnRva2VuJztcbmltcG9ydCB7SUVkaXRvckRhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZWRpdG9yL2RhdGEtcHJvdmlkZXJzL2VkaXRvci5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7RWRpdG9yRGVzY3JpcHRvckluc3R9IGZyb20gJy4uLy4uL2VkaXRvci9kZXNjcmlwdG9ycy9lZGl0b3IuZGVzY3JpcHRvcic7XG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi9kZXNjcmlwdG9ycy90YWJsZXZpZXcuZGVzY3JpcHRvcic7XG5pbXBvcnQge1RhYmxldmlld1JvdXRlRGF0YX0gZnJvbSAnLi4vbW9kZWxzL3RhYmxldmlldy1yb3V0ZS5tb2RlbCc7XG5pbXBvcnQge2NvbnZlcnREYXRhVG9TdHJpbmdXaXRoRGVsaW1pdGVyLCBzYXZlRmlsZUFzfSBmcm9tICcuL2ZpbGVzLWV4cG9ydCc7XG5cbmV4cG9ydCBlbnVtIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bSB7XG4gICAgRGV0YWlscyxcbiAgICBBZGQsXG4gICAgRWRpdCxcbiAgICBFZGl0T25EZXRhaWxzLFxuICAgIERlbGV0ZSxcbiAgICBEZWxldGVPbkRldGFpbHMsXG4gICAgUmVmcmVzaCxcbiAgICBFeHBvcnQsXG4gICAgRXhwb3J0SnNvbixcbiAgICBFeHBvcnRDc3YsXG4gICAgTG9jYWxpemF0aW9uTGFuZ3VhZ2VTZWxlY3Rcbn1cblxuY29uc3QgdGFibGV2aWV3RGVmYXVsdEFjdGlvbnMgPSBbXG4gICAgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkRldGFpbHMsXG4gICAgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkFkZCxcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRWRpdCxcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRWRpdE9uRGV0YWlscyxcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRGVsZXRlLFxuICAgIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5EZWxldGVPbkRldGFpbHMsXG4gICAgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLlJlZnJlc2gsXG4gICAgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkV4cG9ydCxcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0SnNvbixcbiAgICBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0Q3N2LFxuICAgIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5Mb2NhbGl6YXRpb25MYW5ndWFnZVNlbGVjdFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0dldERlZmF1bHRBY3Rpb25zKCkge1xuICAgIHJldHVybiBbLi4udGFibGV2aWV3RGVmYXVsdEFjdGlvbnNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3Q3JlYXRlRGVmYXVsdEFjdGlvbnMoXG4gICAgdGFibGV2aWV3OiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55PixcbiAgICBkZWZhdWx0QWN0aW9ucz86IFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bVtdLFxuICAgIGRlZmF1bHRBY3Rpb25zT3ZlcnJpZGVzPzogUmVjb3JkPG51bWJlciwgQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55Pj4sXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGxcbik6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4+IHtcbiAgICByZXR1cm4gKGRlZmF1bHRBY3Rpb25zID8/IHRhYmxldmlld0dldERlZmF1bHRBY3Rpb25zKCkpXG4gICAgICAgIC5tYXAodCA9PiB0YWJsZXZpZXdDcmVhdGVEZWZhdWx0QWN0aW9uKHQsIHRhYmxldmlldywgZGVmYXVsdEFjdGlvbnMsIGRlZmF1bHRBY3Rpb25zT3ZlcnJpZGVzLCBpbmplY3RvcikpXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlICE9IG51bGwpIGFzIEFycmF5PEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3Q3JlYXRlRGVmYXVsdEFjdGlvbihcbiAgICB0eXBlOiBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0sXG4gICAgdGFibGV2aWV3OiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55PixcbiAgICBkZWZhdWx0QWN0aW9ucz86IFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bVtdLFxuICAgIGRlZmF1bHRBY3Rpb25zT3ZlcnJpZGVzPzogUmVjb3JkPG51bWJlciwgQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55Pj4sXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGxcbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4gfCBudWxsIHtcbiAgICBpZiAoZGVmYXVsdEFjdGlvbnNPdmVycmlkZXMgIT0gbnVsbCAmJiBkZWZhdWx0QWN0aW9uc092ZXJyaWRlc1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0QWN0aW9uc092ZXJyaWRlc1t0eXBlXTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgLy8gdGFibGUgcm93IGFjdGlvbnNcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRGV0YWlsczpcbiAgICAgICAgICAgIHJldHVybiB0YWJsZXZpZXdBY3Rpb25EZXRhaWxzT25UYWJsZSh0YWJsZXZpZXcuZGV0YWlsc0VkaXRvciwge2luamVjdG9yfSk7XG4gICAgICAgIGNhc2UgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkVkaXQ6XG4gICAgICAgICAgICByZXR1cm4gdGFibGV2aWV3QWN0aW9uRWRpdE9uVGFibGUodGFibGV2aWV3Lm1vZGVsLCB0YWJsZXZpZXcuZWRpdEVkaXRvciwge3RhYmxlOiB0YWJsZXZpZXcudGFibGUsIGluamVjdG9yfSk7XG4gICAgICAgIGNhc2UgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkRlbGV0ZTpcbiAgICAgICAgICAgIHJldHVybiB0YWJsZXZpZXdBY3Rpb25EZWxldGVPblRhYmxlKHRhYmxldmlldy5tb2RlbCwge3RhYmxlOiB0YWJsZXZpZXcudGFibGUsIGluamVjdG9yfSk7XG4gICAgICAgIC8vIHRhYmxlIHRvb2xiYXIgYWN0aW9uc1xuICAgICAgICBjYXNlIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5BZGQ6XG4gICAgICAgICAgICByZXR1cm4gdGFibGV2aWV3QWN0aW9uQWRkT25UYWJsZSh0YWJsZXZpZXcubW9kZWwsIHRhYmxldmlldy5hZGRFZGl0b3IsIHtpbmplY3Rvcn0pO1xuICAgICAgICBjYXNlIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5Mb2NhbGl6YXRpb25MYW5ndWFnZVNlbGVjdDpcbiAgICAgICAgICAgIHJldHVybiB0YWJsZXZpZXdBY3Rpb25Mb2NhbGl6YXRpb25MYW5nU2VsZWN0T25UYWJsZSh0YWJsZXZpZXcpO1xuICAgICAgICBjYXNlIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5SZWZyZXNoOlxuICAgICAgICAgICAgcmV0dXJuIHRhYmxldmlld0FjdGlvblJlZnJlc2hPblRhYmxlKHRhYmxldmlldy5tb2RlbCk7XG4gICAgICAgIGNhc2UgVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkV4cG9ydDpcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0QWN0aW9ucyA9PSBudWxsIHx8IGRlZmF1bHRBY3Rpb25zLmluY2x1ZGVzKFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FeHBvcnRKc29uKSB8fCBkZWZhdWx0QWN0aW9ucy5pbmNsdWRlcyhUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0Q3N2KVxuICAgICAgICAgICAgICAgID8gdGFibGV2aWV3QWN0aW9uRXhwb3J0T25UYWJsZSh0YWJsZXZpZXcsIHtpbmplY3RvcjogaW5qZWN0b3IsIGRlZmF1bHRBY3Rpb25zOiBkZWZhdWx0QWN0aW9uc30pXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAvL2RldGFpbHMgYWN0aW9uc1xuICAgICAgICBjYXNlIFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FZGl0T25EZXRhaWxzOlxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRBY3Rpb25zID09IG51bGwgfHwgZGVmYXVsdEFjdGlvbnMuaW5jbHVkZXMoVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkVkaXQpID8gdGFibGV2aWV3QWN0aW9uRWRpdE9uRGV0YWlscyh0YWJsZXZpZXcubW9kZWwsIHtpbmplY3Rvcn0pIDogbnVsbDtcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRGVsZXRlT25EZXRhaWxzOlxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRBY3Rpb25zID09IG51bGwgfHwgZGVmYXVsdEFjdGlvbnMuaW5jbHVkZXMoVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkRlbGV0ZSkgPyB0YWJsZXZpZXdBY3Rpb25EZWxldGVPbkRldGFpbHModGFibGV2aWV3Lm1vZGVsLCB7aW5qZWN0b3J9KSA6IG51bGw7XG4gICAgICAgIC8vIHN1YmFjdGlvbnNcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0SnNvbjpcbiAgICAgICAgY2FzZSBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0uRXhwb3J0Q3N2OlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYFRhYmxldmlldyBkZWZhdWx0IGFjdGlvbiBvZiB0eXBlICR7dHlwZX0gbm90IHN1cHBvcnRlZGApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW5qZWN0b3IoaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGwpOiBJbmplY3RvciB8IG51bGwge1xuICAgIHJldHVybiBpbmplY3RvciA9PT0gdW5kZWZpbmVkID8gaW5qZWN0KEluamVjdG9yKSA6IGluamVjdG9yO1xufVxuXG5mdW5jdGlvbiBnZXRSb3V0ZURhdGEoaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGwpIHtcbiAgICByZXR1cm4gZ2V0SW5qZWN0b3IoaW5qZWN0b3IpPy5nZXQoQWN0aXZhdGVkUm91dGUpPy5zbmFwc2hvdC5kYXRhIGFzIFRhYmxldmlld1JvdXRlRGF0YSB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IHRhYmxldmlld0FjdGlvbkVkaXRvckRldGFpbHNBY3Rpb25OYW1lID0gJ2RldGFpbHMnO1xuZXhwb3J0IGNvbnN0IHRhYmxldmlld0FjdGlvbkVkaXRvckRldGFpbHNSb3V0ZSA9ICc6aXRlbUlkJztcblxudHlwZSBUYWJsZXZpZXdBY3Rpb25EZXRhaWxzT25UYWJsZU9wdHNUeXBlPE1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlPiA9IHtcbiAgICB0YWJsZT86IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbD47XG4gICAgc2VydmljZVByb3ZpZGVyPzogQWN0aW9uRWRpdG9yUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPjtcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbDtcbiAgICBwb3NpdGlvbj86IEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUgfCBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2s7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3QWN0aW9uRGV0YWlsc09uVGFibGU8TW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsPixcbiAgICBvcHRzPzogVGFibGV2aWV3QWN0aW9uRGV0YWlsc09uVGFibGVPcHRzVHlwZTxNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZT5cbik6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlLCBNb2RlbCwgVGFibGVNb2RlbCwgdW5kZWZpbmVkLCBUYWJsZU1vZGVsPiB8IG51bGwge1xuICAgIGNvbnN0IHJvdXRlRGF0YSA9IGdldFJvdXRlRGF0YShvcHRzPy5pbmplY3Rvcik7XG4gICAgaWYgKCFyb3V0ZURhdGE/LnRhYmxldmlld0FjdGlvbnMgfHwgcm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMuaGFzRGV0YWlscykge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBuZXcgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2UsIE1vZGVsLCBUYWJsZU1vZGVsLCB1bmRlZmluZWQsIFRhYmxlTW9kZWw+KGRlc2NyaXB0b3IsIHRhYmxldmlld0FjdGlvbkVkaXRvckRldGFpbHNBY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICAuLi4ob3B0cz8uc2VydmljZVByb3ZpZGVyID8gYWN0aW9uRWRpdG9yR2V0UHJvdmlkZXJDZmdPYmoob3B0cz8uc2VydmljZVByb3ZpZGVyKSA6IHt9KSxcbiAgICAgICAgICAgIGlzVGFibGV2aWV3TWFpbkVkaXRvcjogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aW9uLndpdGhQb3NpdGlvbihvcHRzPy5wb3NpdGlvbiA/PyBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2spO1xuICAgICAgICBhY3Rpb24ud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dDbGljayk7XG4gICAgICAgIGFjdGlvbi53aXRoUm91dGVUcmlnZ2VyKHRhYmxldmlld0FjdGlvbkVkaXRvckRldGFpbHNSb3V0ZSk7XG4gICAgICAgIGFjdGlvbi53aXRoRWRpdG9yQWN0aW9ucyhbYWN0aW9uRWRpdG9yQ2FuY2VsKGFjdGlvbildKTtcbiAgICAgICAgYWN0aW9uLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCB0YWJsZXZpZXdBY3Rpb25FZGl0b3JBZGRBY3Rpb25OYW1lID0gJ2FkZCc7XG5leHBvcnQgY29uc3QgdGFibGV2aWV3QWN0aW9uRWRpdG9yQWRkUm91dGUgPSAnYWRkJztcblxuZXhwb3J0IHR5cGUgQWN0aW9uRWRpdG9yUHJvdmlkZXJBZGRUeXBlPE1vZGVsLCBBZGRNb2RlbCwgU2VydmljZT4gPSBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+IHwgSUVkaXRvckRhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZSwgYW55LCBBZGRNb2RlbCwgYW55PjtcblxudHlwZSBUYWJsZXZpZXdBY3Rpb25BZGRPblRhYmxlT3B0c1R5cGU8TW9kZWwsIEFkZE1vZGVsLCBTZXJ2aWNlPiA9IHtcbiAgICBzZXJ2aWNlUHJvdmlkZXI/OiBBY3Rpb25FZGl0b3JQcm92aWRlckFkZFR5cGU8TW9kZWwsIEFkZE1vZGVsLCBTZXJ2aWNlPjtcbiAgICBpbmplY3Rvcj86IEluamVjdG9yIHwgbnVsbDtcbiAgICBwb3NpdGlvbj86IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCB8IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3QWN0aW9uQWRkT25UYWJsZTxNb2RlbCwgQWRkTW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEFkZE1vZGVsPixcbiAgICBvcHRzPzogVGFibGV2aWV3QWN0aW9uQWRkT25UYWJsZU9wdHNUeXBlPE1vZGVsLCBBZGRNb2RlbCwgU2VydmljZT5cbik6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlLCBBZGRNb2RlbCwgdW5kZWZpbmVkLCBNb2RlbCwgdW5kZWZpbmVkPiB8IG51bGwge1xuICAgIGNvbnN0IHJvdXRlRGF0YSA9IGdldFJvdXRlRGF0YShvcHRzPy5pbmplY3Rvcik7XG4gICAgaWYgKCFyb3V0ZURhdGE/LnRhYmxldmlld0FjdGlvbnMgfHwgcm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMuaGFzQWRkKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZSwgQWRkTW9kZWwsIHVuZGVmaW5lZCwgTW9kZWwsIHVuZGVmaW5lZD4oZGVzY3JpcHRvciwgdGFibGV2aWV3QWN0aW9uRWRpdG9yQWRkQWN0aW9uTmFtZSwge1xuICAgICAgICAgICAgLi4uKG9wdHM/LnNlcnZpY2VQcm92aWRlciA/IGFjdGlvbkVkaXRvckdldFByb3ZpZGVyQ2ZnT2JqKG9wdHMuc2VydmljZVByb3ZpZGVyKSA6IHt9KSxcbiAgICAgICAgICAgIGlzVGFibGV2aWV3TWFpbkVkaXRvcjogdHJ1ZSxcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbFxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aW9uLndpdGhQb3NpdGlvbihvcHRzPy5wb3NpdGlvbiA/PyBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQpO1xuICAgICAgICBhY3Rpb24ud2l0aFJvdXRlVHJpZ2dlcih0YWJsZXZpZXdBY3Rpb25FZGl0b3JBZGRSb3V0ZSk7XG4gICAgICAgIGFjdGlvbi5idXR0b24ud2l0aEljb24oJ3BpIHBpLXBsdXMnKTtcbiAgICAgICAgYWN0aW9uLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5BREQpO1xuICAgICAgICBhY3Rpb24ud2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKCk7XG4gICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgdGFibGV2aWV3QWN0aW9uRWRpdG9yRWRpdEFjdGlvbk5hbWUgPSAnZWRpdCc7XG5leHBvcnQgY29uc3QgdGFibGV2aWV3QWN0aW9uRWRpdG9yRWRpdFJvdXRlID0gJzppdGVtSWQvZWRpdCc7XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkVkaXRvclByb3ZpZGVyRWRpdFR5cGU8TW9kZWwsIEVkaXRNb2RlbCwgU2VydmljZT4gPSBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+IHwgSUVkaXRvckRhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZSwgYW55LCBhbnksIEVkaXRNb2RlbD47XG5cbnR5cGUgVGFibGV2aWV3QWN0aW9uRWRpdE9uVGFibGVPcHRzVHlwZTxNb2RlbCwgRWRpdE1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlPiA9IHtcbiAgICB0YWJsZT86IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgYW55LCBhbnk+O1xuICAgIHNlcnZpY2VQcm92aWRlcj86IEFjdGlvbkVkaXRvclByb3ZpZGVyRWRpdFR5cGU8TW9kZWwsIEVkaXRNb2RlbCwgU2VydmljZT47XG4gICAgaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGw7XG4gICAgcG9zaXRpb24/OiBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2sgfCBBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0FjdGlvbkVkaXRPblRhYmxlPE1vZGVsLCBFZGl0TW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRNb2RlbD4sXG4gICAgb3B0cz86IFRhYmxldmlld0FjdGlvbkVkaXRPblRhYmxlT3B0c1R5cGU8TW9kZWwsIEVkaXRNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZT5cbik6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlLCBFZGl0TW9kZWwsIFRhYmxlTW9kZWwsIE1vZGVsLCBUYWJsZU1vZGVsPiB8IG51bGwge1xuICAgIGNvbnN0IHJvdXRlRGF0YSA9IGdldFJvdXRlRGF0YShvcHRzPy5pbmplY3Rvcik7XG4gICAgaWYgKCFyb3V0ZURhdGE/LnRhYmxldmlld0FjdGlvbnMgfHwgcm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMuaGFzRWRpdCkge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBuZXcgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2UsIEVkaXRNb2RlbCwgVGFibGVNb2RlbCwgTW9kZWwsIFRhYmxlTW9kZWw+KGRlc2NyaXB0b3IsIHRhYmxldmlld0FjdGlvbkVkaXRvckVkaXRBY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICAuLi4ob3B0cz8uc2VydmljZVByb3ZpZGVyID8gYWN0aW9uRWRpdG9yR2V0UHJvdmlkZXJDZmdPYmoob3B0cy5zZXJ2aWNlUHJvdmlkZXIpIDoge30pLFxuICAgICAgICAgICAgaXNUYWJsZXZpZXdNYWluRWRpdG9yOiB0cnVlLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsXG4gICAgICAgIH0pO1xuICAgICAgICBhY3Rpb24ud2l0aFBvc2l0aW9uKG9wdHM/LnBvc2l0aW9uID8/IEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICBhY3Rpb24uYnV0dG9uLnN0eWxlQ2xhc3Mud2l0aFNpemUoU3R5bGVTaXplRW51bS5TbWFsbCk7XG4gICAgICAgIGFjdGlvbi53aXRoUm91dGVUcmlnZ2VyKHRhYmxldmlld0FjdGlvbkVkaXRvckVkaXRSb3V0ZSk7XG4gICAgICAgIGFjdGlvbi53aXRoVGFibGV2aWV3Q2F0ZWdvcnkoVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuRURJVCk7XG4gICAgICAgIGFjdGlvbi5idXR0b24ud2l0aExhYmVsKG51bGwpLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICAgICAgYWN0aW9uLndpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpO1xuICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxudHlwZSBUYWJsZXZpZXdBY3Rpb25FZGl0T25EZXRhaWxzT3B0c1R5cGUgPSB7XG4gICAgaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGw7XG4gICAgcG9zaXRpb24/OiBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyTGVmdCB8IEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJSaWdodDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZXZpZXdBY3Rpb25FZGl0T25EZXRhaWxzPE1vZGVsPihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPE1vZGVsPiwgb3B0cz86IFRhYmxldmlld0FjdGlvbkVkaXRPbkRldGFpbHNPcHRzVHlwZSk6IEFjdGlvbkxpbmtEZXNjcmlwdG9ySW5zdDxNb2RlbD4gfCBudWxsIHtcbiAgICBjb25zdCByb3V0ZURhdGEgPSBnZXRSb3V0ZURhdGEob3B0cz8uaW5qZWN0b3IpO1xuICAgIGlmIChyb3V0ZURhdGE/LnRhYmxldmlld0FjdGlvbnMgJiYgIXJvdXRlRGF0YS50YWJsZXZpZXdBY3Rpb25zLmhhc0VkaXQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbGlua0FjdGlvbiA9IGFjdGlvbkxpbmsodGFibGV2aWV3QWN0aW9uRWRpdG9yRWRpdEFjdGlvbk5hbWUsIHttb2RlbDogbW9kZWx9KTtcbiAgICBsaW5rQWN0aW9uXG4gICAgICAgIC53aXRoVGFibGV2aWV3Q2F0ZWdvcnkoVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuRURJVClcbiAgICAgICAgLndpdGhQb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXMoW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFVEFJTFNdKVxuICAgICAgICAud2l0aFBvc2l0aW9uKG9wdHM/LnBvc2l0aW9uID8/IEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0KVxuICAgICAgICAud2l0aFJvdXRlckxpbmsoJy4vZWRpdCcpXG4gICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe30sICdtZXJnZScpO1xuICAgIGxpbmtBY3Rpb24uYnV0dG9uLnN0eWxlQ2xhc3Mud2l0aEFjdGlvbkxldmVsKFN0eWxlTGV2ZWxFbnVtLlNlY29uZGFyeSk7XG4gICAgbGlua0FjdGlvbi5idXR0b24uc3R5bGVDbGFzcy53aXRoU2l6ZShTdHlsZVNpemVFbnVtLk5vcm1hbCk7XG4gICAgbGlua0FjdGlvbi5idXR0b24uc3R5bGVDbGFzcy53aXRoUm91bmRlZEJ1dHRvbihCdXR0b25TdHlsZVJvdW5kZWRFbnVtLkRFRkFVTFQpO1xuICAgIGxpbmtBY3Rpb24uYnV0dG9uLndpdGhMYWJlbCgpO1xuICAgIGxpbmtBY3Rpb24uYnV0dG9uLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICByZXR1cm4gbGlua0FjdGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IHRhYmxldmlld0FjdGlvbkRlbGV0ZUFjdGlvbk5hbWUgPSAnZGVsZXRlJztcblxudHlwZSBUYWJsZXZpZXdBY3Rpb25EZWxldGVPblRhYmxlT3B0c1R5cGU8TW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+ID0ge1xuICAgIGluamVjdG9yPzogSW5qZWN0b3IgfCBudWxsO1xuICAgIHRhYmxlPzogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBhbnksIGFueT47XG4gICAgc2VydmljZVByb3ZpZGVyPzogQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPjtcbiAgICBwb3NpdGlvbj86IEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUgfCBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2s7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3QWN0aW9uRGVsZXRlT25UYWJsZTxNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4sXG4gICAgb3B0cz86IFRhYmxldmlld0FjdGlvbkRlbGV0ZU9uVGFibGVPcHRzVHlwZTxNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZT5cbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlLCBUYWJsZU1vZGVsLCBNb2RlbCwgVGFibGVNb2RlbD4gfCBudWxsIHtcbiAgICBjb25zdCByb3V0ZURhdGEgPSBnZXRSb3V0ZURhdGEob3B0cz8uaW5qZWN0b3IpO1xuICAgIGlmICghcm91dGVEYXRhPy50YWJsZXZpZXdBY3Rpb25zIHx8IHJvdXRlRGF0YS50YWJsZXZpZXdBY3Rpb25zLmhhc0RlbGV0ZSkge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBuZXcgQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2UsIFRhYmxlTW9kZWwsIE1vZGVsLCBUYWJsZU1vZGVsPihcbiAgICAgICAgICAgIHRhYmxldmlld0FjdGlvbkRlbGV0ZUFjdGlvbk5hbWUsXG4gICAgICAgICAgICBvcHRzPy5zZXJ2aWNlUHJvdmlkZXIgPyBhY3Rpb25HZXRQcm92aWRlckNmZ09iaihvcHRzLnNlcnZpY2VQcm92aWRlcikgOiB7fVxuICAgICAgICApO1xuICAgICAgICBhY3Rpb24ud2l0aFBvc2l0aW9uKG9wdHM/LnBvc2l0aW9uID8/IEFjdGlvblBvc2l0aW9uRW51bS5Sb3dJbmxpbmUpO1xuICAgICAgICBhY3Rpb24uYnV0dG9uLnN0eWxlQ2xhc3Mud2l0aFNpemUoU3R5bGVTaXplRW51bS5TbWFsbCk7XG4gICAgICAgIGFjdGlvbi5idXR0b24uc3R5bGVDbGFzcy53aXRoQWN0aW9uTGV2ZWwoU3R5bGVMZXZlbEVudW0uRGFuZ2VyKTtcbiAgICAgICAgYWN0aW9uLndpdGhSdW5Db25maXJtYXRpb24oKTtcbiAgICAgICAgYWN0aW9uLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERUxFVEUpO1xuICAgICAgICBhY3Rpb24uYnV0dG9uLndpdGhMYWJlbChudWxsKS53aXRoSWNvbigncGkgcGktdHJhc2gnKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbnR5cGUgVGFibGV2aWV3QWN0aW9uRGVsZXRlT25EZXRhaWxzT3B0c1R5cGU8TW9kZWwsIFNlcnZpY2U+ID0ge1xuICAgIGluamVjdG9yPzogSW5qZWN0b3IgfCBudWxsO1xuICAgIHNlcnZpY2VQcm92aWRlcj86IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT47XG4gICAgcG9zaXRpb24/OiBBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lIHwgQWN0aW9uUG9zaXRpb25FbnVtLlJvd0NsaWNrO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0FjdGlvbkRlbGV0ZU9uRGV0YWlsczxNb2RlbCwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4sXG4gICAgb3B0cz86IFRhYmxldmlld0FjdGlvbkRlbGV0ZU9uRGV0YWlsc09wdHNUeXBlPE1vZGVsLCBTZXJ2aWNlPlxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2UsIE1vZGVsLCBNb2RlbCwgTW9kZWw+IHwgbnVsbCB7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGV2aWV3QWN0aW9uRGVsZXRlT25UYWJsZTxNb2RlbCwgTW9kZWwsIFNlcnZpY2U+KG1vZGVsLCBvcHRzKSBhcyB1bmtub3duIGFzIEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlLCBNb2RlbCwgTW9kZWwsIE1vZGVsPjtcbiAgICBjb25zdCBkYXRhUHJvdmlkZXJFeGVjdXRvciA9IGdldEluamVjdG9yKG9wdHM/LmluamVjdG9yKT8uZ2V0KERhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIGFjdGlvblxuICAgICAgICAgICAgLndpdGhUYWJsZXZpZXdDYXRlZ29yeShUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERUxFVEUpXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllcyhbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuREVUQUlMU10pXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0KVxuICAgICAgICAgICAgLndpdGhSdW5GdW5jdGlvbihjdHggPT5cbiAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXJFeGVjdXRvclxuICAgICAgICAgICAgICAgICAgICA/IGRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1bkRlbGV0ZU9yRmFpbChjdHgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudmlld0NvbnRhaW5lcj8ucmVsb2FkVGFibGUoe30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnZpZXdDb250YWluZXI/LmNsb3NlRWRpdG9yKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgIGFjdGlvbi5idXR0b24ud2l0aExhYmVsKHVuZGVmaW5lZCk7XG4gICAgICAgIGFjdGlvbi5idXR0b24uc3R5bGVDbGFzcy53aXRoU2l6ZShTdHlsZVNpemVFbnVtLk5vcm1hbCk7XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxudHlwZSBUYWJsZXZpZXdBY3Rpb25FeHBvcnRPblRhYmxlT3B0c1R5cGUgPSB7XG4gICAgaW5qZWN0b3I/OiBJbmplY3RvciB8IG51bGw7XG4gICAgZGVmYXVsdEFjdGlvbnM/OiBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW1bXTtcbiAgICBwb3NpdGlvbj86IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCB8IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3QWN0aW9uRXhwb3J0T25UYWJsZTxNb2RlbD4oXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWw+LFxuICAgIG9wdHM/OiBUYWJsZXZpZXdBY3Rpb25FeHBvcnRPblRhYmxlT3B0c1R5cGVcbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPiB8IG51bGwge1xuICAgIGNvbnN0IGV4cG9ydEFjdGlvbiA9IG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZD4oJ2V4cG9ydCcsIHtcbiAgICAgICAgbW9kZWw6IGRlc2NyaXB0b3IubW9kZWxcbiAgICB9KVxuICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IobmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKS53aXRoSWNvbigncGkgcGktZG93bmxvYWQnKSlcbiAgICAgICAgLndpdGhTdWJhY3Rpb25zQXNNZW51KCk7XG5cbiAgICBjb25zdCBzdWJhY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZD5bXSA9IFtdO1xuXG4gICAgaWYgKG9wdHM/LmRlZmF1bHRBY3Rpb25zID09IG51bGwgfHwgb3B0cz8uZGVmYXVsdEFjdGlvbnMuaW5jbHVkZXMoVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLkV4cG9ydEpzb24pKSBzdWJhY3Rpb25zLnB1c2godGFibGV2aWV3QWN0aW9uRXhwb3J0SnNvbk9uVGFibGUoZGVzY3JpcHRvciwgb3B0cykpO1xuICAgIGlmIChvcHRzPy5kZWZhdWx0QWN0aW9ucyA9PSBudWxsIHx8IG9wdHM/LmRlZmF1bHRBY3Rpb25zLmluY2x1ZGVzKFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bS5FeHBvcnRDc3YpKSBzdWJhY3Rpb25zLnB1c2godGFibGV2aWV3QWN0aW9uRXhwb3J0Q3N2T25UYWJsZShkZXNjcmlwdG9yLCBvcHRzKSk7XG5cbiAgICBleHBvcnRBY3Rpb24ud2l0aFN1YmFjdGlvbnMoLi4uc3ViYWN0aW9ucyk7XG4gICAgZXhwb3J0QWN0aW9uLndpdGhQb3NpdGlvbihvcHRzPy5wb3NpdGlvbiA/PyBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0KTtcbiAgICByZXR1cm4gZXhwb3J0QWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3QWN0aW9uRXhwb3J0SnNvbk9uVGFibGU8TW9kZWw+KFxuICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsPixcbiAgICBvcHRzPzogT21pdDxUYWJsZXZpZXdBY3Rpb25FeHBvcnRPblRhYmxlT3B0c1R5cGUsICdkZWZhdWx0QWN0aW9ucyc+XG4pOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGRhdGFQcm92aWRlckV4ZWN1dG9yID0gZ2V0SW5qZWN0b3Iob3B0cz8uaW5qZWN0b3IpPy5nZXQoRGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgIHJldHVybiBuZXcgQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQ+KCdleHBvcnRKc29uJywge1xuICAgICAgICBtb2RlbDogZGVzY3JpcHRvci5tb2RlbFxuICAgIH0pXG4gICAgICAgIC53aXRoUnVuRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGN0eC5wYXJhbWV0ZXJzLmRhdGFMaXN0UGFyYW1zID8gY29weURhdGFMaXN0UGFyYW1zKGN0eC5wYXJhbWV0ZXJzLmRhdGFMaXN0UGFyYW1zKSA6IHt9O1xuICAgICAgICAgICAgcGFyYW1zLm9mZnNldCA9IDA7XG4gICAgICAgICAgICBwYXJhbXMubGltaXQgPSA1MDA7XG4gICAgICAgICAgICBjdHgucGFyYW1ldGVycy5kYXRhTGlzdFBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXJFeGVjdXRvclxuICAgICAgICAgICAgICAgID8gZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuR2V0QWxsT3JGYWlsKGN0eCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShyZXMuZGF0YSwgdW5kZWZpbmVkLCA0KV0sIHt0eXBlOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04J30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ubW9kZWw/LmkxOG5CYXNlS2V5ID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlRmlsZUFzKGJsb2IsIGAke3R5cGVOYW1lID8gdHlwZU5hbWUgKyAnXycgOiAnJ30ke2N0eC5pbnN0YW5jZS5hY3Rpb24uYWN0aW9uTmFtZX0uanNvbmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBjdHgucGFyYW1ldGVycy5pdGVtO1xuICAgICAgICB9KVxuICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IobmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKS53aXRoSWNvbigncGkgcGktY29kZScpKVxuICAgICAgICAud2l0aFBvc2l0aW9uKG9wdHM/LnBvc2l0aW9uID8/IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFibGV2aWV3QWN0aW9uRXhwb3J0Q3N2T25UYWJsZTxNb2RlbD4oXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWw+LFxuICAgIG9wdHM/OiBPbWl0PFRhYmxldmlld0FjdGlvbkV4cG9ydE9uVGFibGVPcHRzVHlwZSwgJ2RlZmF1bHRBY3Rpb25zJz5cbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZGF0YVByb3ZpZGVyRXhlY3V0b3IgPSBnZXRJbmplY3RvcihvcHRzPy5pbmplY3Rvcik/LmdldChEYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZD4oJ2V4cG9ydENzdicsIHtcbiAgICAgICAgbW9kZWw6IGRlc2NyaXB0b3IubW9kZWxcbiAgICB9KVxuICAgICAgICAud2l0aFJ1bkZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBjdHgucGFyYW1ldGVycy5kYXRhTGlzdFBhcmFtcyA/IGNvcHlEYXRhTGlzdFBhcmFtcyhjdHgucGFyYW1ldGVycy5kYXRhTGlzdFBhcmFtcykgOiB7fTtcbiAgICAgICAgICAgIHBhcmFtcy5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgcGFyYW1zLmxpbWl0ID0gNTAwO1xuICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuZGF0YUxpc3RQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVByb3ZpZGVyRXhlY3V0b3JcbiAgICAgICAgICAgICAgICA/IGRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1bkdldEFsbE9yRmFpbChjdHgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjb252ZXJ0RGF0YVRvU3RyaW5nV2l0aERlbGltaXRlcihyZXMuZGF0YSwgJywnLCBkZXNjcmlwdG9yLCBjdHguaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpKV0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBjdHguaW5zdGFuY2UuYWN0aW9uLm1vZGVsPy5pMThuQmFzZUtleSA/PyAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUZpbGVBcyhibG9iLCBgJHt0eXBlTmFtZSA/IHR5cGVOYW1lICsgJ18nIDogJyd9JHtjdHguaW5zdGFuY2UuYWN0aW9uLmFjdGlvbk5hbWV9LmNzdmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBjdHgucGFyYW1ldGVycy5pdGVtO1xuICAgICAgICB9KVxuICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IobmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKS53aXRoSWNvbigncGkgcGktZmlsZScpKVxuICAgICAgICAud2l0aFBvc2l0aW9uKG9wdHM/LnBvc2l0aW9uID8/IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQpO1xufVxuXG50eXBlIFRhYmxldmlld0FjdGlvblJlZnJlc2hPblRhYmxlT3B0c1R5cGUgPSB7XG4gICAgcG9zaXRpb24/OiBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQgfCBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0FjdGlvblJlZnJlc2hPblRhYmxlPE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgIG9wdHM/OiBUYWJsZXZpZXdBY3Rpb25SZWZyZXNoT25UYWJsZU9wdHNUeXBlXG4pOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPiB8IG51bGwge1xuICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPigncmVmcmVzaCcsIHtcbiAgICAgICAgbW9kZWw6IGRlc2NyaXB0b3JcbiAgICB9KVxuICAgICAgICAud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQpXG4gICAgICAgIC53aXRoVGFibGV2aWV3Q2F0ZWdvcnkoVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuUkVBRClcbiAgICAgICAgLndpdGhSdW5Ob3RpZmljYXRpb25TdWNjZXNzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSlcbiAgICAgICAgLndpdGhSdW5GdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgY3R4LnZpZXdDb250YWluZXI/LnJlbG9hZFRhYmxlKHt9KTtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSlcbiAgICAgICAgLndpdGhQb3NpdGlvbihvcHRzPy5wb3NpdGlvbiA/PyBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0KTtcbiAgICBhY3Rpb24uYnV0dG9uLndpdGhJY29uKCdwaSBwaS1yZWZyZXNoJykuc3R5bGVDbGFzcy53aXRoQWN0aW9uTGV2ZWwoU3R5bGVMZXZlbEVudW0uU2Vjb25kYXJ5KTtcbiAgICByZXR1cm4gYWN0aW9uO1xufVxuXG50eXBlIFRhYmxldmlld0xvY2FsaXphdGlvbkxhbmdTZWxlY3RPblRhYmxlQWN0aW9uT3B0c1R5cGUgPSB7XG4gICAgcG9zaXRpb24/OiBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQgfCBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld0FjdGlvbkxvY2FsaXphdGlvbkxhbmdTZWxlY3RPblRhYmxlPE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbD4sXG4gICAgb3B0cz86IFRhYmxldmlld0xvY2FsaXphdGlvbkxhbmdTZWxlY3RPblRhYmxlQWN0aW9uT3B0c1R5cGVcbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQoKVxuICAgICAgICA/IG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPigndHJhbnNsYXRvcicsIHtcbiAgICAgICAgICAgICAgbW9kZWw6IGRlc2NyaXB0b3IubW9kZWxcbiAgICAgICAgICB9KVxuICAgICAgICAgICAgICAud2l0aFBvc2l0aW9uKG9wdHM/LnBvc2l0aW9uID8/IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdClcbiAgICAgICAgICAgICAgLndpdGhDb21wb25lbnRGcm9tRGkoREFUQV9MQU5HVUFHRV9EUk9QRE9XTl9DT01QT05FTlRfSVQpXG4gICAgICAgIDogbnVsbDtcbn1cbiJdfQ==