@mediusinc/mng-commons 5.5.0 → 6.0.0-rc.3

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 (300) 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/notification.d.ts +17 -1
  7. package/core/helpers/route.d.ts +0 -1
  8. package/core/helpers/type-helpers.d.ts +8 -0
  9. package/core/i18n/i18n-error.d.ts +2 -3
  10. package/core/index.d.ts +0 -3
  11. package/core/models/menu.model.d.ts +0 -4
  12. package/core/router/route-builder.d.ts +1 -1
  13. package/core/services/commons.service.d.ts +0 -32
  14. package/core/services/tokens/module-config.token.d.ts +0 -28
  15. package/esm2022/core/action/action-parameters.model.mjs +1 -1
  16. package/esm2022/core/data-providers/base.data-provider.mjs +2 -4
  17. package/esm2022/core/data-providers/lookup.data-provider.mjs +1 -1
  18. package/esm2022/core/descriptors/model.descriptor.mjs +1 -1
  19. package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
  20. package/esm2022/core/helpers/notification.mjs +19 -4
  21. package/esm2022/core/helpers/type-helpers.mjs +1 -1
  22. package/esm2022/core/i18n/i18n-error.mjs +10 -8
  23. package/esm2022/core/index.mjs +1 -4
  24. package/esm2022/core/models/menu.model.mjs +1 -1
  25. package/esm2022/core/router/route-builder.mjs +2 -2
  26. package/esm2022/core/services/commons.service.mjs +1 -34
  27. package/esm2022/core/services/tokens/module-config.token.mjs +1 -1
  28. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +5 -86
  29. package/esm2022/filter/descriptors/filter.descriptor.mjs +7 -29
  30. package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +14 -41
  31. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +3 -3
  32. package/esm2022/form/api/descriptors/action-button.descriptor.mjs +5 -17
  33. package/esm2022/form/api/descriptors/button-style.builder.mjs +80 -101
  34. package/esm2022/form/api/index.mjs +2 -1
  35. package/esm2022/form/api/models/button.model.mjs +2 -0
  36. package/esm2022/model/class/data-providers/base-from-class-data-provider.factory.mjs +5 -0
  37. package/esm2022/model/class/descriptors/model-class.descriptor.mjs +28 -0
  38. package/esm2022/model/class/descriptors/type-class.descriptor.mjs +6 -0
  39. package/esm2022/model/class/helpers/model.mjs +53 -0
  40. package/esm2022/model/class/index.mjs +8 -0
  41. package/esm2022/model/class/mediusinc-mng-commons-model-class.mjs +5 -0
  42. package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +11 -6
  43. package/esm2022/model/descriptors/model.descriptor.mjs +11 -54
  44. package/esm2022/model/descriptors/type.descriptor.mjs +2 -10
  45. package/esm2022/model/helpers/i18n.mjs +14 -9
  46. package/esm2022/model/index.mjs +1 -2
  47. package/esm2022/table/api/class/class-table-attribute-converter.mjs +80 -0
  48. package/esm2022/table/api/class/class-table-attribute.model.mjs +2 -0
  49. package/esm2022/table/api/class/class-table-data-provider.factory.mjs +5 -0
  50. package/esm2022/table/api/class/class-table-descriptor-helpers.mjs +99 -0
  51. package/esm2022/table/api/class/class-table-descriptor.factory.mjs +21 -0
  52. package/esm2022/table/api/class/index.mjs +6 -0
  53. package/esm2022/table/api/class/mediusinc-mng-commons-table-api-class.mjs +5 -0
  54. package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +14 -41
  55. package/esm2022/table/api/data-providers/table.data-provider.mjs +3 -9
  56. package/esm2022/table/api/descriptors/column.descriptor.mjs +8 -3
  57. package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +10 -77
  58. package/esm2022/table/api/descriptors/table.descriptor.mjs +3 -3
  59. package/esm2022/table/api/helpers/column-converter.mjs +25 -0
  60. package/esm2022/table/api/helpers/table-data-provider-descriptor-convert.mjs +4 -4
  61. package/esm2022/table/api/index.mjs +2 -4
  62. package/esm2022/table/api/models/table-columns.model.mjs +1 -1
  63. package/esm2022/table/components/column-value/column-value.component.mjs +7 -5
  64. package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +3 -3
  65. package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +5 -5
  66. package/esm2022/table/components/table/table.component.mjs +17 -18
  67. package/esm2022/table/helpers/notification.mjs +19 -13
  68. package/esm2022/tableview/action/components/action/action.component.mjs +41 -37
  69. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +22 -13
  70. package/esm2022/tableview/action/helpers/action-execution.mjs +1 -1
  71. package/esm2022/tableview/action/helpers/i18n.mjs +50 -30
  72. package/esm2022/tableview/action/helpers/notification.mjs +73 -12
  73. package/esm2022/tableview/action/helpers/styles.mjs +2 -2
  74. package/esm2022/tableview/action/models/execution/action-context.model.mjs +1 -1
  75. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
  76. package/esm2022/tableview/action/services/action-executor.service.mjs +92 -75
  77. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +18 -3
  78. package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +13 -104
  79. package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +15 -62
  80. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +35 -82
  81. package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +20 -33
  82. package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +1 -1
  83. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +54 -95
  84. package/esm2022/tableview/api/action/descriptors/editor-action-descriptor.factory.mjs +21 -0
  85. package/esm2022/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.mjs +21 -0
  86. package/esm2022/tableview/api/action/descriptors/table-action-descriptor.factory.mjs +37 -0
  87. package/esm2022/tableview/api/action/descriptors/table-action-editor-descriptor.factory.mjs +40 -0
  88. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +25 -5
  89. package/esm2022/tableview/api/action/models/action-confirmation.model.mjs +2 -0
  90. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +1 -1
  91. package/esm2022/tableview/api/action/models/action-error.model.mjs +1 -1
  92. package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +1 -1
  93. package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +1 -1
  94. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
  95. package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +6 -6
  96. package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +3 -3
  97. package/esm2022/tableview/api/class/editor/class-editor-attribute-converter.mjs +85 -0
  98. package/esm2022/tableview/api/class/editor/class-editor-attribute.model.mjs +2 -0
  99. package/esm2022/tableview/api/class/editor/class-editor-data-provider.factory.mjs +5 -0
  100. package/esm2022/tableview/api/class/editor/class-editor-descriptor-helpers.mjs +95 -0
  101. package/esm2022/tableview/api/class/editor/class-editor-descriptor.factory.mjs +21 -0
  102. package/esm2022/tableview/api/class/index.mjs +13 -0
  103. package/esm2022/tableview/api/class/mediusinc-mng-commons-tableview-api-class.mjs +5 -0
  104. package/esm2022/tableview/api/class/tableview/class-tableview-attribute-converter.mjs +35 -0
  105. package/esm2022/tableview/api/class/tableview/class-tableview-attribute.model.mjs +2 -0
  106. package/esm2022/tableview/api/class/tableview/class-tableview-data-provider.factory.mjs +5 -0
  107. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor-helpers.mjs +111 -0
  108. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor.factory.mjs +26 -0
  109. package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +14 -32
  110. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +40 -7
  111. package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +7 -73
  112. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +49 -134
  113. package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +14 -8
  114. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +11 -2
  115. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +3 -5
  116. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +2 -18
  117. package/esm2022/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.mjs +51 -0
  118. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  119. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
  120. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +1 -1
  121. package/esm2022/tableview/api/index.mjs +9 -9
  122. package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +13 -51
  123. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +19 -11
  124. package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +19 -96
  125. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +29 -182
  126. package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +8 -6
  127. package/esm2022/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.mjs +4 -4
  128. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +154 -106
  129. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +164 -7
  130. package/esm2022/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.mjs +2 -0
  131. package/esm2022/tableview/api/tableview/models/tableview-descriptor-helper.type.mjs +2 -0
  132. package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +1 -1
  133. package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +1 -1
  134. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +5 -8
  135. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +7 -5
  136. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +34 -23
  137. package/esm2022/tableview/editor/helpers/editor-field.mjs +3 -3
  138. package/esm2022/tableview/editor/helpers/editor-formly.mjs +4 -4
  139. package/esm2022/tableview/editor/helpers/field-create.mjs +21 -0
  140. package/esm2022/tableview/index.mjs +3 -2
  141. package/esm2022/tableview/provide.mjs +44 -1
  142. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +1 -1
  143. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +3 -1
  144. package/fesm2022/mediusinc-mng-commons-core.mjs +715 -792
  145. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  146. package/fesm2022/mediusinc-mng-commons-filter.mjs +10 -113
  147. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  148. package/fesm2022/mediusinc-mng-commons-form-api.mjs +144 -203
  149. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  150. package/fesm2022/mediusinc-mng-commons-model-class.mjs +97 -0
  151. package/fesm2022/mediusinc-mng-commons-model-class.mjs.map +1 -0
  152. package/fesm2022/mediusinc-mng-commons-model.mjs +35 -144
  153. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  154. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs +204 -0
  155. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs.map +1 -0
  156. package/fesm2022/mediusinc-mng-commons-table-api.mjs +55 -319
  157. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  158. package/fesm2022/mediusinc-mng-commons-table.mjs +45 -38
  159. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  160. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs +367 -0
  161. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs.map +1 -0
  162. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +850 -1483
  163. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  164. package/fesm2022/mediusinc-mng-commons-tableview.mjs +421 -220
  165. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  166. package/filter/descriptors/filter-lookup.descriptor.d.ts +1 -26
  167. package/filter/descriptors/filter.descriptor.d.ts +5 -12
  168. package/form/api/data-providers/lookup-data-provider.factory.d.ts +17 -20
  169. package/form/api/data-providers/lookup.data-provider.d.ts +3 -3
  170. package/form/api/descriptors/action-button.descriptor.d.ts +11 -13
  171. package/form/api/descriptors/button-style.builder.d.ts +30 -44
  172. package/form/api/index.d.ts +1 -0
  173. package/form/api/models/button.model.d.ts +19 -0
  174. package/i18n/sl.json +56 -6
  175. package/model/class/README.md +8 -0
  176. package/model/class/data-providers/base-from-class-data-provider.factory.d.ts +3 -0
  177. package/model/class/descriptors/model-class.descriptor.d.ts +12 -0
  178. package/model/class/descriptors/type-class.descriptor.d.ts +3 -0
  179. package/model/{helpers → class/helpers}/model.d.ts +1 -2
  180. package/model/class/index.d.ts +4 -0
  181. package/model/data-providers/base-from-type-data-provider.factory.d.ts +13 -6
  182. package/model/descriptors/model.descriptor.d.ts +12 -27
  183. package/model/descriptors/type.descriptor.d.ts +0 -5
  184. package/model/helpers/i18n.d.ts +8 -3
  185. package/model/index.d.ts +0 -1
  186. package/package.json +25 -7
  187. package/table/api/class/README.md +10 -0
  188. package/table/api/{helpers/class-attribute-converter.d.ts → class/class-table-attribute-converter.d.ts} +2 -9
  189. package/table/api/{models → class}/class-table-attribute.model.d.ts +1 -1
  190. package/table/api/class/class-table-data-provider.factory.d.ts +4 -0
  191. package/table/api/{helpers/table-descriptor-helpers.d.ts → class/class-table-descriptor-helpers.d.ts} +2 -4
  192. package/table/api/class/class-table-descriptor.factory.d.ts +11 -0
  193. package/table/api/class/index.d.ts +5 -0
  194. package/table/api/data-providers/table-data-provider.factory.d.ts +17 -20
  195. package/table/api/data-providers/table.data-provider.d.ts +4 -12
  196. package/table/api/descriptors/column.descriptor.d.ts +5 -2
  197. package/table/api/descriptors/table-descriptor.factory.d.ts +3 -39
  198. package/table/api/descriptors/table.descriptor.d.ts +3 -3
  199. package/table/api/helpers/column-converter.d.ts +7 -0
  200. package/table/api/helpers/table-data-provider-descriptor-convert.d.ts +3 -3
  201. package/table/api/index.d.ts +1 -3
  202. package/table/api/models/table-columns.model.d.ts +2 -2
  203. package/table/components/column-value/column-value.component.d.ts +2 -0
  204. package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +1 -1
  205. package/table/components/filter/filter-form/filter-form.component.d.ts +1 -1
  206. package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +1 -1
  207. package/table/components/table/table.component.d.ts +0 -10
  208. package/table/helpers/notification.d.ts +10 -1
  209. package/tableview/action/components/action/action.component.d.ts +10 -13
  210. package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
  211. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +6 -5
  212. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +3 -3
  213. package/tableview/action/components/table/action-table.component.d.ts +3 -3
  214. package/tableview/action/helpers/action-execution.d.ts +1 -1
  215. package/tableview/action/helpers/i18n.d.ts +36 -11
  216. package/tableview/action/helpers/notification.d.ts +37 -3
  217. package/tableview/action/models/execution/action-context.model.d.ts +3 -3
  218. package/tableview/action/models/execution/action-instance.model.d.ts +5 -5
  219. package/tableview/action/services/action-executor.service.d.ts +7 -7
  220. package/tableview/action/services/data-provider-executor.service.d.ts +16 -16
  221. package/tableview/action/services/view-container.service.d.ts +1 -1
  222. package/tableview/api/action/descriptors/action-descriptor.factory.d.ts +20 -31
  223. package/tableview/api/action/descriptors/action-editor-descriptor.factory.d.ts +18 -25
  224. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +39 -47
  225. package/tableview/api/action/descriptors/action-link-descriptor.factory.d.ts +21 -13
  226. package/tableview/api/action/descriptors/action-link.descriptor.d.ts +3 -3
  227. package/tableview/api/action/descriptors/action.descriptor.d.ts +49 -60
  228. package/tableview/api/action/descriptors/editor-action-descriptor.factory.d.ts +21 -0
  229. package/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.d.ts +21 -0
  230. package/tableview/api/action/descriptors/table-action-descriptor.factory.d.ts +36 -0
  231. package/tableview/api/action/descriptors/table-action-editor-descriptor.factory.d.ts +40 -0
  232. package/tableview/api/action/helpers/data-provider-executors.d.ts +13 -8
  233. package/tableview/api/action/models/action-confirmation.model.d.ts +14 -0
  234. package/tableview/api/action/models/action-descriptor.types.d.ts +6 -2
  235. package/tableview/api/action/models/action-error.model.d.ts +1 -1
  236. package/tableview/api/action/models/execution/action-context-validation.model.d.ts +2 -2
  237. package/tableview/api/action/models/execution/action-context.model.d.ts +2 -2
  238. package/tableview/api/action/models/execution/action-instance.model.d.ts +1 -1
  239. package/tableview/api/action/models/tableview-action-default-categories.model.d.ts +5 -5
  240. package/tableview/api/action/services/data-provider-executor.service.d.ts +26 -25
  241. package/tableview/api/class/README.md +13 -0
  242. package/tableview/api/{editor/helpers/class-attribute-converter.d.ts → class/editor/class-editor-attribute-converter.d.ts} +2 -2
  243. package/tableview/api/{editor/models/class-tableview-attribute.model.d.ts → class/editor/class-editor-attribute.model.d.ts} +1 -1
  244. package/tableview/api/class/editor/class-editor-data-provider.factory.d.ts +4 -0
  245. package/tableview/api/{editor/helpers/editor-descriptor-helpers.d.ts → class/editor/class-editor-descriptor-helpers.d.ts} +2 -5
  246. package/tableview/api/class/editor/class-editor-descriptor.factory.d.ts +11 -0
  247. package/tableview/api/class/index.d.ts +10 -0
  248. package/tableview/api/{tableview/helpers/class-attribute-converter.d.ts → class/tableview/class-tableview-attribute-converter.d.ts} +1 -1
  249. package/tableview/api/{tableview/models → class/tableview}/class-tableview-attribute.model.d.ts +2 -2
  250. package/tableview/api/class/tableview/class-tableview-data-provider.factory.d.ts +4 -0
  251. package/tableview/api/{tableview/helpers/tableview-descriptor-helpers.d.ts → class/tableview/class-tableview-descriptor-helpers.d.ts} +1 -2
  252. package/tableview/api/class/tableview/class-tableview-descriptor.factory.d.ts +12 -0
  253. package/tableview/api/editor/data-providers/editor-data-provider.factory.d.ts +17 -16
  254. package/tableview/api/editor/data-providers/editor.data-provider.d.ts +64 -29
  255. package/tableview/api/editor/descriptors/editor-descriptor.factory.d.ts +5 -38
  256. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +48 -112
  257. package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +5 -5
  258. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +8 -1
  259. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +2 -3
  260. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +3 -11
  261. package/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.d.ts +25 -0
  262. package/tableview/api/editor/models/editor-fields.model.d.ts +25 -21
  263. package/tableview/api/editor/models/form-editor.event.d.ts +0 -4
  264. package/tableview/api/index.d.ts +8 -7
  265. package/tableview/api/tableview/data-providers/tableview-data-provider.factory.d.ts +20 -25
  266. package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +22 -22
  267. package/tableview/api/tableview/descriptors/tableview-descriptor.factory.d.ts +20 -50
  268. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +69 -163
  269. package/tableview/api/tableview/helpers/tableview-create.d.ts +18 -5
  270. package/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.d.ts +2 -2
  271. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +73 -20
  272. package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +87 -9
  273. package/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.d.ts +9 -0
  274. package/tableview/api/tableview/models/tableview-descriptor-helper.type.d.ts +2 -0
  275. package/tableview/api/tableview/models/tableview-input.model.d.ts +1 -1
  276. package/tableview/api/tableview/models/tableview-route.model.d.ts +1 -1
  277. package/tableview/editor/helpers/field-create.d.ts +9 -0
  278. package/tableview/index.d.ts +2 -1
  279. package/tableview/provide.d.ts +7 -0
  280. package/tableview/tableview/components/route/tableview-route.component.d.ts +1 -1
  281. package/tableview/tableview/components/tableview/tableview.component.d.ts +6 -6
  282. package/version-info.json +6 -6
  283. package/core/components/pages/error/error.page.component.d.ts +0 -11
  284. package/core/components/pages/not-found/not-found.page.component.d.ts +0 -11
  285. package/core/data-providers/base-data-provider.factory.d.ts +0 -13
  286. package/esm2022/core/components/pages/error/error.page.component.mjs +0 -24
  287. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +0 -24
  288. package/esm2022/core/data-providers/base-data-provider.factory.mjs +0 -28
  289. package/esm2022/model/helpers/model.mjs +0 -71
  290. package/esm2022/table/api/helpers/class-attribute-converter.mjs +0 -104
  291. package/esm2022/table/api/helpers/table-descriptor-helpers.mjs +0 -98
  292. package/esm2022/table/api/models/class-table-attribute.model.mjs +0 -2
  293. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +0 -88
  294. package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +0 -85
  295. package/esm2022/tableview/api/editor/helpers/editor-descriptor-helpers.mjs +0 -95
  296. package/esm2022/tableview/api/editor/models/class-tableview-attribute.model.mjs +0 -2
  297. package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +0 -34
  298. package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +0 -110
  299. package/esm2022/tableview/api/tableview/models/class-tableview-attribute.model.mjs +0 -2
  300. package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +0 -37
@@ -1,4 +1,8 @@
1
- import { createTableviewActions, getTableviewDefaultActions } from './tableview-default-actions';
1
+ import { CommonsInternalError } from '@mediusinc/mng-commons/core';
2
+ import { ActionPositionEnum } from '../../action/models/action.type';
3
+ import { TableviewActionDefaultCategories } from '../../action/models/tableview-action-default-categories.model';
4
+ import { TableviewDataProviderInst } from '../data-providers/tableview.data-provider';
5
+ import { tableviewCreateDefaultActions, tableviewGetDefaultActions } from './tableview-default-actions';
2
6
  /**
3
7
  * The `TableviewBuilder` class is used to build a tableview configuration.
4
8
  * It allows you to set various options such as the descriptor, data provider,
@@ -16,7 +20,7 @@ export class TableviewInputBuilder {
16
20
  this._descriptor = _descriptor;
17
21
  this._dataProvider = _dataProvider;
18
22
  this.injector = injector;
19
- this.defaultActions = getTableviewDefaultActions().map(a => ({ type: a, descriptor: undefined }));
23
+ this.defaultActions = tableviewGetDefaultActions().map(a => ({ type: a, descriptor: undefined }));
20
24
  this._customActions = [];
21
25
  }
22
26
  prepareSetterParams() {
@@ -72,6 +76,73 @@ export class TableviewInputBuilder {
72
76
  adjustFn(this.prepareSetterParams());
73
77
  return this;
74
78
  }
79
+ /**
80
+ * Associates a fetch function for a data provider API service with the specified parameters.
81
+ *
82
+ * @param {ServiceFn} serviceFn The function from the service class that performs the fetch API call.
83
+ * Must be a key of the service with a parameter and return an Observable.
84
+ * @param {ClassFunctionKeyParam1ObjKeyExtendsOfTargetType<Service, ServiceFn, IdType>} fnItemIdParamName The parameter name for itemId used as the key within the request object of fetch function on API service.
85
+ */
86
+ withDataServiceFetchFn(serviceFn, itemIdParamName) {
87
+ if (this._dataProvider instanceof TableviewDataProviderInst) {
88
+ this._dataProvider.withFetch((itemId, service) => service[serviceFn]({ [itemIdParamName]: itemId }));
89
+ }
90
+ return this;
91
+ }
92
+ /**
93
+ * Associates a create function for a data provider API service with the specified parameters.
94
+ *
95
+ * @param {ServiceFn} serviceFn The function from the service class that performs the create API call.
96
+ * Must be a key of the service with a parameter and return an Observable.
97
+ * @param {ClassFunctionKeyParam1ObjKeyExtendsOfTargetType<Service, ServiceFn, Undefined<EditModel>>} serviceFnItemParamName The parameter name for item used as the key within the request object of create function on API service.
98
+ * @param {EditorDataProviderFetchMapToFnType<Model, AddModel>} [mapFetchItem] Map function to transform model from fetch to form's add model.
99
+ */
100
+ withDataServiceCreateFn(serviceFn, serviceFnItemParamName, mapFetchItem) {
101
+ if (this._dataProvider instanceof TableviewDataProviderInst) {
102
+ this._dataProvider.withCreate((item, service) => service[serviceFn]({ [serviceFnItemParamName]: item }));
103
+ if (mapFetchItem) {
104
+ this._dataProvider.withMapFetchItemToCreateItem(mapFetchItem);
105
+ }
106
+ }
107
+ return this;
108
+ }
109
+ /**
110
+ * Associates an update function for a data provider API service with the specified parameters.
111
+ *
112
+ * @param {ServiceFn} serviceFn The function from the service class that performs the update API call.
113
+ * Must be a key of the service with a parameter and return an Observable.
114
+ * @param {ClassFunctionKeyParam1ObjKeyExtendsOfTargetType<Service, ServiceFn, Undefined<EditModel>>} fnItemParamName The parameter name for item used as the key within the request object of update function on API service.
115
+ * @param {ClassFunctionKeyParam1ObjKeyExtendsOfTargetType<Service, ServiceFn, IdType>} [fnItemIdParamName] The parameter name for itemId used as the key within the request object of update function on API service.
116
+ * @param {EditorDataProviderFetchMapToFnType<Model, EditModel>} [mapFetchItem] Map function to transform model from fetch to form' edit model.
117
+ */
118
+ withDataServiceUpdateFn(serviceFn, fnItemParamName, fnItemIdParamName, mapFetchItem) {
119
+ if (this._dataProvider instanceof TableviewDataProviderInst) {
120
+ this._dataProvider.withUpdate((id, item, service) => {
121
+ const params = { [fnItemParamName]: item };
122
+ if (fnItemIdParamName) {
123
+ params[fnItemIdParamName] = id;
124
+ }
125
+ return service[serviceFn](params);
126
+ });
127
+ if (mapFetchItem) {
128
+ this._dataProvider.withMapFetchItemToUpdateItem(mapFetchItem);
129
+ }
130
+ }
131
+ return this;
132
+ }
133
+ /**
134
+ * Associates a delete function for a data provider API service with the specified parameters.
135
+ *
136
+ * @param {ServiceFn} serviceFn The function from the service class that performs the delete API call.
137
+ * Must be a key of the service with a parameter and return an Observable.
138
+ * @param {ClassFunctionKeyParam1ObjKeyExtendsOfTargetType<Service, ServiceFn, IdType>} fnItemIdParamName The parameter name for itemId used as the key within the request object of delete function on API service.
139
+ */
140
+ withDataServiceDeleteFn(serviceFn, fnItemIdParamName) {
141
+ if (this._dataProvider instanceof TableviewDataProviderInst) {
142
+ this._dataProvider.withDelete((itemId, service) => service[serviceFn]({ [fnItemIdParamName]: itemId }));
143
+ }
144
+ return this;
145
+ }
75
146
  /**
76
147
  * Removes all the default tableview actions.
77
148
  *
@@ -115,7 +186,7 @@ export class TableviewInputBuilder {
115
186
  * Overrides the default action.
116
187
  *
117
188
  * @param {TableviewDefaultActionsEnum} type - The default actions to override.
118
- * @param {TvBuilderActionSetterFnType<Model, ActionService, Descriptor, DataProvider>} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
189
+ * @param {TvBuilderActionSetterFnType<Model, ActionService , ActionRunInput, ActionRunResult, Descriptor, DataProvider>} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
119
190
  * @typeParam ActionService - The service type (same as build `Service` by default).
120
191
  * @returns {this} - Returns the current instance of the builder.
121
192
  */
@@ -129,7 +200,9 @@ export class TableviewInputBuilder {
129
200
  /**
130
201
  * Adds a custom action.
131
202
  *
132
- * @param {TvBuilderActionSetterFnType<Model, ActionService, Descriptor, DataProvider>} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
203
+ * @deprecated Use on of {withActionOnTable}, {withActionOnDetailsEditor}, {withActionOnEditEditor} or {withActionOnAddEditor} instead.
204
+ *
205
+ * @param {TvBuilderActionSetterFnType<Model, ActionService, ActionRunInput, ActionRunResult, Descriptor, DataProvider>} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
133
206
  * @typeParam ActionService - The service type (same as build `Service` by default).
134
207
  * @returns {this} - Returns the current instance of the builder.
135
208
  */
@@ -141,14 +214,98 @@ export class TableviewInputBuilder {
141
214
  return this;
142
215
  }
143
216
  /**
217
+ * Adds a custom action on table row or top (header or toolbar).
218
+ *
219
+ * @param {TvBuilderActionSetterFnType<Model, ActionService, ActionRunResult, Descriptor, DataProvider>} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
220
+ * @param {ActionPositionEnum} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
221
+ * @typeParam ActionService - The service type (same as build `Service` by default).
222
+ * @returns {this} - Returns the current instance of the builder.
223
+ */
224
+ withActionOnTable(fn) {
225
+ const action = fn(this.prepareSetterParams());
226
+ if (action) {
227
+ action.withPositionTableviewCategories([TableviewActionDefaultCategories.READ]);
228
+ if (![
229
+ ActionPositionEnum.ToolbarLeft,
230
+ ActionPositionEnum.ToolbarRight,
231
+ ActionPositionEnum.TableHeader,
232
+ ActionPositionEnum.RowInline,
233
+ ActionPositionEnum.RowClick
234
+ ].includes(action.position)) {
235
+ throw new CommonsInternalError(`Action ${action.actionNameLong} can not be positioned on table (${action.position}), define valid position.`);
236
+ }
237
+ this._customActions.push(action);
238
+ }
239
+ return this;
240
+ }
241
+ /**
242
+ * Adds a custom action on details editor.
243
+ *
244
+ * @param {TvBuilderActionSetterFnType<Model, ActionService, ActionRunResult, Descriptor, DataProvider>} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
245
+ * @param {ActionPositionEnum} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
246
+ * @typeParam ActionService - The service type (same as build `Service` by default).
247
+ * @returns {this} - Returns the current instance of the builder.
248
+ */
249
+ withActionOnDetailsEditor(fn) {
250
+ const action = fn(this.prepareSetterParams());
251
+ if (action) {
252
+ action.withPositionTableviewCategories([TableviewActionDefaultCategories.DETAILS]);
253
+ if (![ActionPositionEnum.ToolbarLeft, ActionPositionEnum.ToolbarRight, ActionPositionEnum.FooterLeft, ActionPositionEnum.FooterRight].includes(action.position)) {
254
+ throw new CommonsInternalError(`Action ${action.actionNameLong} can not be positioned on details (${action.position}), define valid position.`);
255
+ }
256
+ this._customActions.push(action);
257
+ }
258
+ return this;
259
+ }
260
+ /**
261
+ * Adds a custom action on edit editor.
262
+ *
263
+ * @param {TvBuilderActionSetterFnType<Model, ActionService, ActionRunResult, Descriptor, DataProvider>} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
264
+ * @param {ActionPositionEnum} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
265
+ * @typeParam ActionService - The service type (same as build `Service` by default).
266
+ * @returns {this} - Returns the current instance of the builder.
267
+ */
268
+ withActionOnEditEditor(fn) {
269
+ const action = fn(this.prepareSetterParams());
270
+ if (action) {
271
+ action.withPositionTableviewCategories([TableviewActionDefaultCategories.EDIT]);
272
+ if (![ActionPositionEnum.ToolbarLeft, ActionPositionEnum.ToolbarRight, ActionPositionEnum.FooterLeft, ActionPositionEnum.FooterRight].includes(action.position)) {
273
+ throw new CommonsInternalError(`Action ${action.actionNameLong} can not be positioned on edit (${action.position}), define valid position.`);
274
+ }
275
+ this._customActions.push(action);
276
+ }
277
+ return this;
278
+ }
279
+ /**
280
+ * Adds a custom action on add editor.
281
+ *
282
+ * @param {TvBuilderActionSetterFnType<Model, ActionService, ActionRunResult, Descriptor, DataProvider>} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
283
+ * @param {ActionPositionEnum} fn - The function that returns the new action descriptor. It accepts a single parameter of type `TvBuilderSetterParamsType<Descriptor, DataProvider>`.
284
+ * @typeParam ActionService - The service type (same as build `Service` by default).
285
+ * @returns {this} - Returns the current instance of the builder.
286
+ */
287
+ withActionOnAddEditor(fn) {
288
+ const action = fn(this.prepareSetterParams());
289
+ if (action) {
290
+ action.withPositionTableviewCategories([TableviewActionDefaultCategories.ADD]);
291
+ if (![ActionPositionEnum.ToolbarLeft, ActionPositionEnum.ToolbarRight, ActionPositionEnum.FooterLeft, ActionPositionEnum.FooterRight].includes(action.position)) {
292
+ throw new CommonsInternalError(`Action ${action.actionNameLong} can not be positioned on add (${action.position}), define valid position.`);
293
+ }
294
+ this._customActions.push(action);
295
+ }
296
+ return this;
297
+ }
298
+ /**
299
+ * @internal
300
+ *
144
301
  * Builds and returns an instance of ITableview.
145
302
  * DO NOT CALL this within tableview create callback function!
146
303
  *
147
- * @return {TableviewInput<Model, Service, Sorts, Filters, Descriptor, DataProvider>} - The built ITableview instance.
304
+ * @return {TableviewInput<Model, Service, Sorts, Filters, TableModel, AddModel, EditModel, Descriptor, DataProvider>} - The built ITableview instance.
148
305
  */
149
306
  build() {
150
307
  return {
151
- actions: createTableviewActions(this._descriptor, this.defaultActions.filter(a => a.descriptor !== null).map(a => a.type), this.defaultActions
308
+ actions: tableviewCreateDefaultActions(this._descriptor, this.defaultActions.filter(a => a.descriptor !== null).map(a => a.type), this.defaultActions
152
309
  .filter(a => a.descriptor != null)
153
310
  .reduce((acc, a) => ({
154
311
  ...acc,
@@ -159,4 +316,4 @@ export class TableviewInputBuilder {
159
316
  };
160
317
  }
161
318
  }
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWlucHV0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy90YWJsZXZpZXcvaGVscGVycy90YWJsZXZpZXctaW5wdXQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQThCLHNCQUFzQixFQUFFLDBCQUEwQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFjNUg7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBVzlCLFlBQ1ksV0FBdUIsRUFDdkIsYUFBMkIsRUFDbEIsUUFBa0I7UUFGM0IsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQU4vQixtQkFBYyxHQUFvQiwwQkFBMEIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkcsbUJBQWMsR0FBZ0MsRUFBRSxDQUFDO0lBTS9ELENBQUM7SUFFSSxtQkFBbUI7UUFDdkIsT0FBTyxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUM7SUFDckcsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLEVBQTZEO1FBQ3hFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsUUFBMEM7UUFDM0QsUUFBUSxDQUFDLElBQUks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M0IsSUFBSSxDQUFDLFdBQXFELEVBQzFELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ3ZFLElBQUksQ0FBQyxjQUFjO2lCQUNkLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO2lCQUNqQyxNQUFNLENBQ0gsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNULEdBQUcsR0FBRztnQkFDTixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVzthQUMxQixDQUFDLEVBQ3lDLEVBQUUsQ0FDaEQsRUFDTCxJQUFJLENBQUMsUUFBUSxDQUNoQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDL0IsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIE51bGxhYmxlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi9hY3Rpb24vZGVzY3JpcHRvcnMvYWN0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvdGFibGV2aWV3LmRlc2NyaXB0b3InO1xuaW1wb3J0IHtUYWJsZXZpZXdJbnB1dH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxldmlldy1pbnB1dC5tb2RlbCc7XG5pbXBvcnQge1RhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bSwgY3JlYXRlVGFibGV2aWV3QWN0aW9ucywgZ2V0VGFibGV2aWV3RGVmYXVsdEFjdGlvbnN9IGZyb20gJy4vdGFibGV2aWV3LWRlZmF1bHQtYWN0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPiA9IHtkZXNjcmlwdG9yOiBEZXNjcmlwdG9yOyBkYXRhUHJvdmlkZXI6IERhdGFQcm92aWRlcjsgaW5qZWN0b3I6IEluamVjdG9yfTtcbmV4cG9ydCB0eXBlIFR2QnVpbGRlckFjdGlvblNldHRlckZuVHlwZTxBY3Rpb25Nb2RlbCwgQWN0aW9uU2VydmljZSwgRGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPiA9IChcbiAgICBwYXJhbXM6IFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPlxuKSA9PiBOdWxsYWJsZTxBY3Rpb25EZXNjcmlwdG9ySW5zdDxBY3Rpb25Nb2RlbCwgQWN0aW9uU2VydmljZT4+O1xuZXhwb3J0IHR5cGUgVHZCdWlsZGVyRGVzY3JpcHRvclNldHRlckZuVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+ID0gKHBhcmFtczogVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+KSA9PiBEZXNjcmlwdG9yO1xuZXhwb3J0IHR5cGUgVHZCdWlsZGVyRGF0YVByb3ZpZGVyU2V0dGVyRm5UeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj4gPSAocGFyYW1zOiBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj4pID0+IERhdGFQcm92aWRlcjtcblxudHlwZSBEZWZhdWx0QWN0aW9uID0ge1xuICAgIHR5cGU6IFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bTtcbiAgICBkZXNjcmlwdG9yOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnksIGFueT4gfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBUaGUgYFRhYmxldmlld0J1aWxkZXJgIGNsYXNzIGlzIHVzZWQgdG8gYnVpbGQgYSB0YWJsZXZpZXcgY29uZmlndXJhdGlvbi5cbiAqIEl0IGFsbG93cyB5b3UgdG8gc2V0IHZhcmlvdXMgb3B0aW9ucyBzdWNoIGFzIHRoZSBkZXNjcmlwdG9yLCBkYXRhIHByb3ZpZGVyLFxuICogZGVmYXVsdCBhY3Rpb25zLCBhbmQgY3VzdG9tIGFjdGlvbnMgZm9yIHRoZSB0YWJsZXZpZXcuXG4gKlxuICogQHR5cGVwYXJhbSBNb2RlbCAtIFRoZSBtYWluIG1vZGVsIHR5cGUuXG4gKiBAdHlwZXBhcmFtIFNlcnZpY2UgLSBUaGUgQVBJIHNlcnZpY2UgdHlwZS5cbiAqIEB0eXBlcGFyYW0gRGVzY3JpcHRvciAtIFRoZSBkZXNjcmlwdG9yIHR5cGUuXG4gKiBAdHlwZXBhcmFtIERhdGFQcm92aWRlciAtIFRoZSBkYXRhIHByb3ZpZGVyIHR5cGUuXG4gKiBAdHlwZXBhcmFtIFNvcnRzIC0gVGhlIHNvcnQgdHlwZSByZXByZXNlbnRpbmcgYXZhaWxhYmxlIHNvcnQga2V5cy5cbiAqIEB0eXBlcGFyYW0gRmlsdGVycyAtIFRoZSBmaWx0ZXIgdHlwZSByZXByZXNlbnRpbmcgYXZhaWxhYmxlIGZpbHRlciBrZXlzLlxuICovXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3SW5wdXRCdWlsZGVyPFxuICAgIE1vZGVsLFxuICAgIFNlcnZpY2UsXG4gICAgRGVzY3JpcHRvciBleHRlbmRzIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz4sXG4gICAgRGF0YVByb3ZpZGVyIGV4dGVuZHMgSURhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZT4sXG4gICAgU29ydHMgPSBrZXlvZiBNb2RlbCxcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWxcbj4ge1xuICAgIHByaXZhdGUgZGVmYXVsdEFjdGlvbnM6IERlZmF1bHRBY3Rpb25bXSA9IGdldFRhYmxldmlld0RlZmF1bHRBY3Rpb25zKCkubWFwKGEgPT4gKHt0eXBlOiBhLCBkZXNjcmlwdG9yOiB1bmRlZmluZWR9KSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY3VzdG9tQWN0aW9uczogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgICAgICAgcHJpdmF0ZSBfZGF0YVByb3ZpZGVyOiBEYXRhUHJvdmlkZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7fVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlU2V0dGVyUGFyYW1zKCk6IFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPiB7XG4gICAgICAgIHJldHVybiB7ZGVzY3JpcHRvcjogdGhpcy5fZGVzY3JpcHRvciwgZGF0YVByb3ZpZGVyOiB0aGlzLl9kYXRhUHJvdmlkZXIsIGluamVjdG9yOiB0aGlzLmluamVjdG9yfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgZGVzY3JpcHRvciBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VHZCdWlsZGVyRGVzY3JpcHRvclNldHRlckZuVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+fSBmbiAtIFRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5ldyBkZXNjcmlwdG9yLiBJdCBzaG91bGQgYWNjZXB0IGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5gLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aERlc2NyaXB0b3IoZm46IFR2QnVpbGRlckRlc2NyaXB0b3JTZXR0ZXJGblR5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZXNjcmlwdG9yID0gZm4odGhpcy5wcmVwYXJlU2V0dGVyUGFyYW1zKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGp1c3RzIHRoZSBkZXNjcmlwdG9yIHVzaW5nIHRoZSBwcm92aWRlZCBhZGp1c3QgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyhkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSA9PiB2b2lkfSBhZGp1c3RGbiAtIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGFkanVzdCB0aGUgZGVzY3JpcHRvci4gSXQgYWNjZXB0cyBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YgdHlwZSBgRGVzY3JpcHRvcmAuXG4gICAgICogQHJldHVybnMge3RoaXN9IC0gUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICB3aXRoQWRqdXN0RGVzY3JpcHRvcihhZGp1c3RGbjogKGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpID0+IHZvaWQpOiB0aGlzIHtcbiAgICAgICAgYWRqdXN0Rm4odGhpcy5fZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRhdGEgcHJvdmlkZXIgZm9yIHRoZSBUdkJ1aWxkZXIgaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VHZCdWlsZGVyRGF0YVByb3ZpZGVyU2V0dGVyRm5UeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj59IGZuIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV3IGRhdGEgcHJvdmlkZXIuIEl0IGFjY2VwdHMgYSBzaW5nbGUgcGFyYW1ldGVyIG9mIHR5cGUgYFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPmAuXG4gICAgICogKiBAcmV0dXJucyB7dGhpc30gLSBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhEYXRhUHJvdmlkZXIoZm46IFR2QnVpbGRlckRhdGFQcm92aWRlclNldHRlckZuVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGZuKHRoaXMucHJlcGFyZVNldHRlclBhcmFtcygpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRqdXN0cyB0aGUgZGF0YSBwcm92aWRlciB1c2luZyB0aGUgcHJvdmlkZWQgYWRqdXN0IGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHsoZGF0YVByb3ZpZGVyOiBEYXRhUHJvdmlkZXIpID0+IHZvaWR9IGFkanVzdEZuIC0gVGhlIGZ1bmN0aW9uIHVzZWQgdG8gYWRqdXN0IHRoZSBkYXRhIHByb3ZpZGVyLiBJdCBhY2NlcHRzIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBEYXRhUHJvdmlkZXJgLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aEFkanVzdERhdGFQcm92aWRlcihhZGp1c3RGbjogKGRhdGFQcm92aWRlcjogRGF0YVByb3ZpZGVyKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIGFkanVzdEZuKHRoaXMuX2RhdGFQcm92aWRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdHMgdGhlIGRhdGEgcHJvdmlkZXIgYW5kL29yIGRlc2NyaXB0b3IgdXNpbmcgdGhlIHByb3ZpZGVkIGFkanVzdCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7KHBhcmFtczogVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+KSA9PiB2b2lkfSBhZGp1c3RGbiAtIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGFkanVzdCB0aGUgZGF0YSBwcm92aWRlci4gSXQgYWNjZXB0cyBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YgdHlwZSBgVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+YC5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gLSBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhBZGp1c3QoYWRqdXN0Rm46IChwYXJhbXM6IFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPikgPT4gdm9pZCk6IHRoaXMge1xuICAgICAgICBhZGp1c3RGbih0aGlzLnByZXBhcmVTZXR0ZXJQYXJhbXMoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRoZSBkZWZhdWx0IHRhYmxldmlldyBhY3Rpb25zLlxuICAgICAqXG4gICAgICogQHJldHVybnMge3RoaXN9IC0gUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICB3aXRoTm9EZWZhdWx0QWN0aW9ucygpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0QWN0aW9ucy5mb3JFYWNoKGEgPT4gKGEuZGVzY3JpcHRvciA9IG51bGwpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgZGVmYXVsdCBhY3Rpb25zIHNwZWNpZmllZCBpbiBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW1bXX0gdHlwZXMgLSBUaGUgZGVmYXVsdCBhY3Rpb25zIHRvIGFkZC5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gLSBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhEZWZhdWx0QWN0aW9ucyguLi50eXBlczogVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtW10pOiB0aGlzIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnMuZmluZChhID0+IGEudHlwZSA9PT0gdHlwZSk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uPy5kZXNjcmlwdG9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLmRlc2NyaXB0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBkZWZhdWx0IGFjdGlvbnMgc3BlY2lmaWVkIGluIHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1RhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bVtdfSB0eXBlcyAtIFRoZSBkZWZhdWx0IGFjdGlvbnMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aG91dERlZmF1bHRBY3Rpb25zKC4uLnR5cGVzOiBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW1bXSk6IHRoaXMge1xuICAgICAgICB0eXBlcy5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9ucy5maW5kKGEgPT4gYS50eXBlID09PSB0eXBlKTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24uZGVzY3JpcHRvciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW19IHR5cGUgLSBUaGUgZGVmYXVsdCBhY3Rpb25zIHRvIG92ZXJyaWRlLlxuICAgICAqIEBwYXJhbSB7VHZCdWlsZGVyQWN0aW9uU2V0dGVyRm5UeXBlPE1vZGVsLCBBY3Rpb25TZXJ2aWNlLCBEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+fSBmbiAtIFRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5ldyBhY3Rpb24gZGVzY3JpcHRvci4gSXQgYWNjZXB0cyBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YgdHlwZSBgVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+YC5cbiAgICAgKiBAdHlwZVBhcmFtIEFjdGlvblNlcnZpY2UgLSBUaGUgc2VydmljZSB0eXBlIChzYW1lIGFzIGJ1aWxkIGBTZXJ2aWNlYCBieSBkZWZhdWx0KS5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gLSBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhEZWZhdWx0QWN0aW9uT3ZlcnJpZGU8QWN0aW9uU2VydmljZSA9IFNlcnZpY2U+KHR5cGU6IFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bSwgZm46IFR2QnVpbGRlckFjdGlvblNldHRlckZuVHlwZTxNb2RlbCwgQWN0aW9uU2VydmljZSwgRGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPik6IHRoaXMge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zLmZpbmQoYSA9PiBhLnR5cGUgPT09IHR5cGUpO1xuICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICBhY3Rpb24uZGVzY3JpcHRvciA9IGZuKHRoaXMucHJlcGFyZVNldHRlclBhcmFtcygpKSA/PyBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjdXN0b20gYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUdkJ1aWxkZXJBY3Rpb25TZXR0ZXJGblR5cGU8TW9kZWwsIEFjdGlvblNlcnZpY2UsIERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj59IGZuIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV3IGFjdGlvbiBkZXNjcmlwdG9yLiBJdCBhY2NlcHRzIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5gLlxuICAgICAqIEB0eXBlUGFyYW0gQWN0aW9uU2VydmljZSAtIFRoZSBzZXJ2aWNlIHR5cGUgKHNhbWUgYXMgYnVpbGQgYFNlcnZpY2VgIGJ5IGRlZmF1bHQpLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aEFjdGlvbjxBY3Rpb25Nb2RlbCA9IE1vZGVsLCBBY3Rpb25TZXJ2aWNlID0gU2VydmljZT4oZm46IFR2QnVpbGRlckFjdGlvblNldHRlckZuVHlwZTxBY3Rpb25Nb2RlbCwgQWN0aW9uU2VydmljZSwgRGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPik6IHRoaXMge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBmbih0aGlzLnByZXBhcmVTZXR0ZXJQYXJhbXMoKSk7XG4gICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbUFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBJVGFibGV2aWV3LlxuICAgICAqIERPIE5PVCBDQUxMIHRoaXMgd2l0aGluIHRhYmxldmlldyBjcmVhdGUgY2FsbGJhY2sgZnVuY3Rpb24hXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtUYWJsZXZpZXdJbnB1dDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj59IC0gVGhlIGJ1aWx0IElUYWJsZXZpZXcgaW5zdGFuY2UuXG4gICAgICovXG4gICAgYnVpbGQoKSB7XG4gICAgICAgIHJldHVybiA8VGFibGV2aWV3SW5wdXQ8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+PntcbiAgICAgICAgICAgIGFjdGlvbnM6IGNyZWF0ZVRhYmxldmlld0FjdGlvbnMoXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVzY3JpcHRvciBhcyBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55PixcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRBY3Rpb25zLmZpbHRlcihhID0+IGEuZGVzY3JpcHRvciAhPT0gbnVsbCkubWFwKGEgPT4gYS50eXBlKSxcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLmRlc2NyaXB0b3IgIT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIChhY2MsIGEpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthLnR5cGVdOiBhLmRlc2NyaXB0b3IhXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxSZWNvcmQ8bnVtYmVyLCBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+Pj57fVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3JcbiAgICAgICAgICAgICkuY29uY2F0KHRoaXMuX2N1c3RvbUFjdGlvbnMpLFxuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiB0aGlzLl9kYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICBkZXNjcmlwdG9yOiB0aGlzLl9kZXNjcmlwdG9yXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWlucHV0LWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy90YWJsZXZpZXcvaGVscGVycy90YWJsZXZpZXctaW5wdXQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBR0gsb0JBQW9CLEVBSXZCLE1BQU0sNkJBQTZCLENBQUM7QUFJckMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGdDQUFnQyxFQUFDLE1BQU0sK0RBQStELENBQUM7QUFFL0csT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFHcEYsT0FBTyxFQUE4Qiw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBaUJuSTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFlOUIsWUFDWSxXQUF1QixFQUN2QixhQUEyQixFQUNsQixRQUFrQjtRQUYzQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBTi9CLG1CQUFjLEdBQW9CLDBCQUEwQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUNuRyxtQkFBYyxHQUFnQyxFQUFFLENBQUM7SUFNL0QsQ0FBQztJQUVJLG1CQUFtQjtRQUN2QixPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQ7Ozs7O09B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aW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBDbGFzc0Z1bmN0aW9uS2V5UGFyYW0xT2JqS2V5RXh0ZW5kc09mVGFyZ2V0VHlwZSxcbiAgICBDbGFzc0Z1bmN0aW9uS2V5c1dpdGhQYXJhbUFuZFJldHVyblR5cGUsXG4gICAgQ29tbW9uc0ludGVybmFsRXJyb3IsXG4gICAgSURhdGFQcm92aWRlcixcbiAgICBJZFR5cGUsXG4gICAgTnVsbGFibGVcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuaW1wb3J0IHtBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi4vLi4vYWN0aW9uL2Rlc2NyaXB0b3JzL2FjdGlvbi1lZGl0b3IuZGVzY3JpcHRvcic7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi9hY3Rpb24vZGVzY3JpcHRvcnMvYWN0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtBY3Rpb25Qb3NpdGlvbkVudW19IGZyb20gJy4uLy4uL2FjdGlvbi9tb2RlbHMvYWN0aW9uLnR5cGUnO1xuaW1wb3J0IHtUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllc30gZnJvbSAnLi4vLi4vYWN0aW9uL21vZGVscy90YWJsZXZpZXctYWN0aW9uLWRlZmF1bHQtY2F0ZWdvcmllcy5tb2RlbCc7XG5pbXBvcnQge0VkaXRvckRhdGFQcm92aWRlckZldGNoTWFwVG9GblR5cGV9IGZyb20gJy4uLy4uL2VkaXRvci9kYXRhLXByb3ZpZGVycy9lZGl0b3IuZGF0YS1wcm92aWRlcic7XG5pbXBvcnQge1RhYmxldmlld0RhdGFQcm92aWRlckluc3R9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzL3RhYmxldmlldy5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcbmltcG9ydCB7VGFibGV2aWV3SW5wdXR9IGZyb20gJy4uL21vZGVscy90YWJsZXZpZXctaW5wdXQubW9kZWwnO1xuaW1wb3J0IHtUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW0sIHRhYmxldmlld0NyZWF0ZURlZmF1bHRBY3Rpb25zLCB0YWJsZXZpZXdHZXREZWZhdWx0QWN0aW9uc30gZnJvbSAnLi90YWJsZXZpZXctZGVmYXVsdC1hY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+ID0ge2Rlc2NyaXB0b3I6IERlc2NyaXB0b3I7IGRhdGFQcm92aWRlcjogRGF0YVByb3ZpZGVyOyBpbmplY3RvcjogSW5qZWN0b3J9O1xuZXhwb3J0IHR5cGUgVHZCdWlsZGVyQWN0aW9uU2V0dGVyRm5UeXBlPEFjdGlvbk1vZGVsLCBBY3Rpb25TZXJ2aWNlLCBBY3Rpb25JbnB1dCwgQWN0aW9uUmVzdWx0LCBWYWxpZGF0aW9uSW5wdXQsIERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj4gPSAoXG4gICAgcGFyYW1zOiBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5cbikgPT4gTnVsbGFibGU8XG4gICAgfCBBY3Rpb25EZXNjcmlwdG9ySW5zdDxBY3Rpb25Nb2RlbCwgQWN0aW9uU2VydmljZSwgQWN0aW9uSW5wdXQsIEFjdGlvblJlc3VsdCwgVmFsaWRhdGlvbklucHV0PlxuICAgIHwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8QWN0aW9uTW9kZWwsIEFjdGlvblNlcnZpY2UsIGFueSwgQWN0aW9uSW5wdXQsIEFjdGlvblJlc3VsdCwgVmFsaWRhdGlvbklucHV0PlxuPjtcbmV4cG9ydCB0eXBlIFR2QnVpbGRlckRlc2NyaXB0b3JTZXR0ZXJGblR5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPiA9IChwYXJhbXM6IFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPikgPT4gRGVzY3JpcHRvcjtcbmV4cG9ydCB0eXBlIFR2QnVpbGRlckRhdGFQcm92aWRlclNldHRlckZuVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+ID0gKHBhcmFtczogVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+KSA9PiBEYXRhUHJvdmlkZXI7XG5cbnR5cGUgRGVmYXVsdEFjdGlvbiA9IHtcbiAgICB0eXBlOiBUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW07XG4gICAgZGVzY3JpcHRvcjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRoZSBgVGFibGV2aWV3QnVpbGRlcmAgY2xhc3MgaXMgdXNlZCB0byBidWlsZCBhIHRhYmxldmlldyBjb25maWd1cmF0aW9uLlxuICogSXQgYWxsb3dzIHlvdSB0byBzZXQgdmFyaW91cyBvcHRpb25zIHN1Y2ggYXMgdGhlIGRlc2NyaXB0b3IsIGRhdGEgcHJvdmlkZXIsXG4gKiBkZWZhdWx0IGFjdGlvbnMsIGFuZCBjdXN0b20gYWN0aW9ucyBmb3IgdGhlIHRhYmxldmlldy5cbiAqXG4gKiBAdHlwZXBhcmFtIE1vZGVsIC0gVGhlIG1haW4gbW9kZWwgdHlwZS5cbiAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBBUEkgc2VydmljZSB0eXBlLlxuICogQHR5cGVwYXJhbSBEZXNjcmlwdG9yIC0gVGhlIGRlc2NyaXB0b3IgdHlwZS5cbiAqIEB0eXBlcGFyYW0gRGF0YVByb3ZpZGVyIC0gVGhlIGRhdGEgcHJvdmlkZXIgdHlwZS5cbiAqIEB0eXBlcGFyYW0gU29ydHMgLSBUaGUgc29ydCB0eXBlIHJlcHJlc2VudGluZyBhdmFpbGFibGUgc29ydCBrZXlzLlxuICogQHR5cGVwYXJhbSBGaWx0ZXJzIC0gVGhlIGZpbHRlciB0eXBlIHJlcHJlc2VudGluZyBhdmFpbGFibGUgZmlsdGVyIGtleXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdJbnB1dEJ1aWxkZXI8XG4gICAgTW9kZWwsXG4gICAgU2VydmljZSxcbiAgICBEZXNjcmlwdG9yIGV4dGVuZHMgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPixcbiAgICBEYXRhUHJvdmlkZXIgZXh0ZW5kcyBJRGF0YVByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlPixcbiAgICBTb3J0cyA9IGtleW9mIE1vZGVsLFxuICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbCxcbiAgICBUYWJsZU1vZGVsID0gTW9kZWwsXG4gICAgQWRkTW9kZWwgPSBNb2RlbCxcbiAgICBFZGl0TW9kZWwgPSBNb2RlbCxcbiAgICBGaWVsZHNNb2RlbCA9IE1vZGVsXG4+IHtcbiAgICBwcml2YXRlIGRlZmF1bHRBY3Rpb25zOiBEZWZhdWx0QWN0aW9uW10gPSB0YWJsZXZpZXdHZXREZWZhdWx0QWN0aW9ucygpLm1hcChhID0+ICh7dHlwZTogYSwgZGVzY3JpcHRvcjogdW5kZWZpbmVkfSkpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2N1c3RvbUFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT5bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2Rlc2NyaXB0b3I6IERlc2NyaXB0b3IsXG4gICAgICAgIHByaXZhdGUgX2RhdGFQcm92aWRlcjogRGF0YVByb3ZpZGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvclxuICAgICkge31cblxuICAgIHByaXZhdGUgcHJlcGFyZVNldHRlclBhcmFtcygpOiBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj4ge1xuICAgICAgICByZXR1cm4ge2Rlc2NyaXB0b3I6IHRoaXMuX2Rlc2NyaXB0b3IsIGRhdGFQcm92aWRlcjogdGhpcy5fZGF0YVByb3ZpZGVyLCBpbmplY3RvcjogdGhpcy5pbmplY3Rvcn07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGRlc2NyaXB0b3IgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1R2QnVpbGRlckRlc2NyaXB0b3JTZXR0ZXJGblR5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPn0gZm4gLSBUaGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXcgZGVzY3JpcHRvci4gSXQgc2hvdWxkIGFjY2VwdCBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YgdHlwZSBgVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+YC5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gLSBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhEZXNjcmlwdG9yKGZuOiBUdkJ1aWxkZXJEZXNjcmlwdG9yU2V0dGVyRm5UeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGVzY3JpcHRvciA9IGZuKHRoaXMucHJlcGFyZVNldHRlclBhcmFtcygpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRqdXN0cyB0aGUgZGVzY3JpcHRvciB1c2luZyB0aGUgcHJvdmlkZWQgYWRqdXN0IGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHsoZGVzY3JpcHRvcjogRGVzY3JpcHRvcikgPT4gdm9pZH0gYWRqdXN0Rm4gLSBUaGUgZnVuY3Rpb24gdXNlZCB0byBhZGp1c3QgdGhlIGRlc2NyaXB0b3IuIEl0IGFjY2VwdHMgYSBzaW5nbGUgcGFyYW1ldGVyIG9mIHR5cGUgYERlc2NyaXB0b3JgLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aEFkanVzdERlc2NyaXB0b3IoYWRqdXN0Rm46IChkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIGFkanVzdEZuKHRoaXMuX2Rlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRhIHByb3ZpZGVyIGZvciB0aGUgVHZCdWlsZGVyIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1R2QnVpbGRlckRhdGFQcm92aWRlclNldHRlckZuVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+fSBmbiAtIFRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5ldyBkYXRhIHByb3ZpZGVyLiBJdCBhY2NlcHRzIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5gLlxuICAgICAqICogQHJldHVybnMge3RoaXN9IC0gUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICB3aXRoRGF0YVByb3ZpZGVyKGZuOiBUdkJ1aWxkZXJEYXRhUHJvdmlkZXJTZXR0ZXJGblR5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBmbih0aGlzLnByZXBhcmVTZXR0ZXJQYXJhbXMoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdHMgdGhlIGRhdGEgcHJvdmlkZXIgdXNpbmcgdGhlIHByb3ZpZGVkIGFkanVzdCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7KGRhdGFQcm92aWRlcjogRGF0YVByb3ZpZGVyKSA9PiB2b2lkfSBhZGp1c3RGbiAtIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGFkanVzdCB0aGUgZGF0YSBwcm92aWRlci4gSXQgYWNjZXB0cyBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YgdHlwZSBgRGF0YVByb3ZpZGVyYC5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gLSBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhBZGp1c3REYXRhUHJvdmlkZXIoYWRqdXN0Rm46IChkYXRhUHJvdmlkZXI6IERhdGFQcm92aWRlcikgPT4gdm9pZCk6IHRoaXMge1xuICAgICAgICBhZGp1c3RGbih0aGlzLl9kYXRhUHJvdmlkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGp1c3RzIHRoZSBkYXRhIHByb3ZpZGVyIGFuZC9vciBkZXNjcmlwdG9yIHVzaW5nIHRoZSBwcm92aWRlZCBhZGp1c3QgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyhwYXJhbXM6IFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPikgPT4gdm9pZH0gYWRqdXN0Rm4gLSBUaGUgZnVuY3Rpb24gdXNlZCB0byBhZGp1c3QgdGhlIGRhdGEgcHJvdmlkZXIuIEl0IGFjY2VwdHMgYSBzaW5nbGUgcGFyYW1ldGVyIG9mIHR5cGUgYFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPmAuXG4gICAgICogQHJldHVybnMge3RoaXN9IC0gUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICB3aXRoQWRqdXN0KGFkanVzdEZuOiAocGFyYW1zOiBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICAgICAgYWRqdXN0Rm4odGhpcy5wcmVwYXJlU2V0dGVyUGFyYW1zKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBc3NvY2lhdGVzIGEgZmV0Y2ggZnVuY3Rpb24gZm9yIGEgZGF0YSBwcm92aWRlciBBUEkgc2VydmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2VydmljZUZufSBzZXJ2aWNlRm4gVGhlIGZ1bmN0aW9uIGZyb20gdGhlIHNlcnZpY2UgY2xhc3MgdGhhdCBwZXJmb3JtcyB0aGUgZmV0Y2ggQVBJIGNhbGwuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGEga2V5IG9mIHRoZSBzZXJ2aWNlIHdpdGggYSBwYXJhbWV0ZXIgYW5kIHJldHVybiBhbiBPYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSB7Q2xhc3NGdW5jdGlvbktleVBhcmFtMU9iaktleUV4dGVuZHNPZlRhcmdldFR5cGU8U2VydmljZSwgU2VydmljZUZuLCBJZFR5cGU+fSBmbkl0ZW1JZFBhcmFtTmFtZSBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIGl0ZW1JZCB1c2VkIGFzIHRoZSBrZXkgd2l0aGluIHRoZSByZXF1ZXN0IG9iamVjdCBvZiBmZXRjaCBmdW5jdGlvbiBvbiBBUEkgc2VydmljZS5cbiAgICAgKi9cbiAgICB3aXRoRGF0YVNlcnZpY2VGZXRjaEZuPFNlcnZpY2VGbiBleHRlbmRzIENsYXNzRnVuY3Rpb25LZXlzV2l0aFBhcmFtQW5kUmV0dXJuVHlwZTxTZXJ2aWNlLCBhbnksIE9ic2VydmFibGU8TW9kZWw+Pj4oXG4gICAgICAgIHNlcnZpY2VGbjogU2VydmljZUZuLFxuICAgICAgICBpdGVtSWRQYXJhbU5hbWU6IENsYXNzRnVuY3Rpb25LZXlQYXJhbTFPYmpLZXlFeHRlbmRzT2ZUYXJnZXRUeXBlPFNlcnZpY2UsIFNlcnZpY2VGbiwgSWRUeXBlPlxuICAgICk6IHRoaXMge1xuICAgICAgICBpZiAodGhpcy5fZGF0YVByb3ZpZGVyIGluc3RhbmNlb2YgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdCkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyLndpdGhGZXRjaCgoaXRlbUlkLCBzZXJ2aWNlKSA9PiBzZXJ2aWNlW3NlcnZpY2VGbl0oe1tpdGVtSWRQYXJhbU5hbWVdOiBpdGVtSWR9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzb2NpYXRlcyBhIGNyZWF0ZSBmdW5jdGlvbiBmb3IgYSBkYXRhIHByb3ZpZGVyIEFQSSBzZXJ2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTZXJ2aWNlRm59IHNlcnZpY2VGbiBUaGUgZnVuY3Rpb24gZnJvbSB0aGUgc2VydmljZSBjbGFzcyB0aGF0IHBlcmZvcm1zIHRoZSBjcmVhdGUgQVBJIGNhbGwuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGEga2V5IG9mIHRoZSBzZXJ2aWNlIHdpdGggYSBwYXJhbWV0ZXIgYW5kIHJldHVybiBhbiBPYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSB7Q2xhc3NGdW5jdGlvbktleVBhcmFtMU9iaktleUV4dGVuZHNPZlRhcmdldFR5cGU8U2VydmljZSwgU2VydmljZUZuLCBVbmRlZmluZWQ8RWRpdE1vZGVsPj59IHNlcnZpY2VGbkl0ZW1QYXJhbU5hbWUgVGhlIHBhcmFtZXRlciBuYW1lIGZvciBpdGVtIHVzZWQgYXMgdGhlIGtleSB3aXRoaW4gdGhlIHJlcXVlc3Qgb2JqZWN0IG9mIGNyZWF0ZSBmdW5jdGlvbiBvbiBBUEkgc2VydmljZS5cbiAgICAgKiBAcGFyYW0ge0VkaXRvckRhdGFQcm92aWRlckZldGNoTWFwVG9GblR5cGU8TW9kZWwsIEFkZE1vZGVsPn0gW21hcEZldGNoSXRlbV0gTWFwIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSBtb2RlbCBmcm9tIGZldGNoIHRvIGZvcm0ncyBhZGQgbW9kZWwuXG4gICAgICovXG4gICAgd2l0aERhdGFTZXJ2aWNlQ3JlYXRlRm48U2VydmljZUZuIGV4dGVuZHMgQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlPFNlcnZpY2UsIGFueSwgT2JzZXJ2YWJsZTxhbnk+Pj4oXG4gICAgICAgIHNlcnZpY2VGbjogU2VydmljZUZuLFxuICAgICAgICBzZXJ2aWNlRm5JdGVtUGFyYW1OYW1lOiBDbGFzc0Z1bmN0aW9uS2V5UGFyYW0xT2JqS2V5RXh0ZW5kc09mVGFyZ2V0VHlwZTxTZXJ2aWNlLCBTZXJ2aWNlRm4sIEFkZE1vZGVsPixcbiAgICAgICAgbWFwRmV0Y2hJdGVtPzogRWRpdG9yRGF0YVByb3ZpZGVyRmV0Y2hNYXBUb0ZuVHlwZTxNb2RlbCwgQWRkTW9kZWw+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhUHJvdmlkZXIgaW5zdGFuY2VvZiBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0KSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIud2l0aENyZWF0ZSgoaXRlbSwgc2VydmljZSkgPT4gc2VydmljZVtzZXJ2aWNlRm5dKHtbc2VydmljZUZuSXRlbVBhcmFtTmFtZV06IGl0ZW19KSk7XG5cbiAgICAgICAgICAgIGlmIChtYXBGZXRjaEl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIud2l0aE1hcEZldGNoSXRlbVRvQ3JlYXRlSXRlbShtYXBGZXRjaEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc29jaWF0ZXMgYW4gdXBkYXRlIGZ1bmN0aW9uIGZvciBhIGRhdGEgcHJvdmlkZXIgQVBJIHNlcnZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NlcnZpY2VGbn0gc2VydmljZUZuIFRoZSBmdW5jdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIGNsYXNzIHRoYXQgcGVyZm9ybXMgdGhlIHVwZGF0ZSBBUEkgY2FsbC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgYSBrZXkgb2YgdGhlIHNlcnZpY2Ugd2l0aCBhIHBhcmFtZXRlciBhbmQgcmV0dXJuIGFuIE9ic2VydmFibGUuXG4gICAgICogQHBhcmFtIHtDbGFzc0Z1bmN0aW9uS2V5UGFyYW0xT2JqS2V5RXh0ZW5kc09mVGFyZ2V0VHlwZTxTZXJ2aWNlLCBTZXJ2aWNlRm4sIFVuZGVmaW5lZDxFZGl0TW9kZWw+Pn0gZm5JdGVtUGFyYW1OYW1lIFRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgaXRlbSB1c2VkIGFzIHRoZSBrZXkgd2l0aGluIHRoZSByZXF1ZXN0IG9iamVjdCBvZiB1cGRhdGUgZnVuY3Rpb24gb24gQVBJIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIHtDbGFzc0Z1bmN0aW9uS2V5UGFyYW0xT2JqS2V5RXh0ZW5kc09mVGFyZ2V0VHlwZTxTZXJ2aWNlLCBTZXJ2aWNlRm4sIElkVHlwZT59IFtmbkl0ZW1JZFBhcmFtTmFtZV0gVGhlIHBhcmFtZXRlciBuYW1lIGZvciBpdGVtSWQgdXNlZCBhcyB0aGUga2V5IHdpdGhpbiB0aGUgcmVxdWVzdCBvYmplY3Qgb2YgdXBkYXRlIGZ1bmN0aW9uIG9uIEFQSSBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSB7RWRpdG9yRGF0YVByb3ZpZGVyRmV0Y2hNYXBUb0ZuVHlwZTxNb2RlbCwgRWRpdE1vZGVsPn0gW21hcEZldGNoSXRlbV0gTWFwIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSBtb2RlbCBmcm9tIGZldGNoIHRvIGZvcm0nIGVkaXQgbW9kZWwuXG4gICAgICovXG4gICAgd2l0aERhdGFTZXJ2aWNlVXBkYXRlRm48U2VydmljZUZuIGV4dGVuZHMgQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlPFNlcnZpY2UsIGFueSwgT2JzZXJ2YWJsZTxhbnk+Pj4oXG4gICAgICAgIHNlcnZpY2VGbjogU2VydmljZUZuLFxuICAgICAgICBmbkl0ZW1QYXJhbU5hbWU6IENsYXNzRnVuY3Rpb25LZXlQYXJhbTFPYmpLZXlFeHRlbmRzT2ZUYXJnZXRUeXBlPFNlcnZpY2UsIFNlcnZpY2VGbiwgRWRpdE1vZGVsPixcbiAgICAgICAgZm5JdGVtSWRQYXJhbU5hbWU/OiBDbGFzc0Z1bmN0aW9uS2V5UGFyYW0xT2JqS2V5RXh0ZW5kc09mVGFyZ2V0VHlwZTxTZXJ2aWNlLCBTZXJ2aWNlRm4sIElkVHlwZT4sXG4gICAgICAgIG1hcEZldGNoSXRlbT86IEVkaXRvckRhdGFQcm92aWRlckZldGNoTWFwVG9GblR5cGU8TW9kZWwsIEVkaXRNb2RlbD5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGFQcm92aWRlciBpbnN0YW5jZW9mIFRhYmxldmlld0RhdGFQcm92aWRlckluc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFQcm92aWRlci53aXRoVXBkYXRlKChpZCwgaXRlbSwgc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1tmbkl0ZW1QYXJhbU5hbWVdOiBpdGVtfTtcbiAgICAgICAgICAgICAgICBpZiAoZm5JdGVtSWRQYXJhbU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ZuSXRlbUlkUGFyYW1OYW1lXSA9IGlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZVtzZXJ2aWNlRm5dKHBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKG1hcEZldGNoSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFQcm92aWRlci53aXRoTWFwRmV0Y2hJdGVtVG9VcGRhdGVJdGVtKG1hcEZldGNoSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzb2NpYXRlcyBhIGRlbGV0ZSBmdW5jdGlvbiBmb3IgYSBkYXRhIHByb3ZpZGVyIEFQSSBzZXJ2aWNlIHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTZXJ2aWNlRm59IHNlcnZpY2VGbiBUaGUgZnVuY3Rpb24gZnJvbSB0aGUgc2VydmljZSBjbGFzcyB0aGF0IHBlcmZvcm1zIHRoZSBkZWxldGUgQVBJIGNhbGwuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGEga2V5IG9mIHRoZSBzZXJ2aWNlIHdpdGggYSBwYXJhbWV0ZXIgYW5kIHJldHVybiBhbiBPYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSB7Q2xhc3NGdW5jdGlvbktleVBhcmFtMU9iaktleUV4dGVuZHNPZlRhcmdldFR5cGU8U2VydmljZSwgU2VydmljZUZuLCBJZFR5cGU+fSBmbkl0ZW1JZFBhcmFtTmFtZSBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIGl0ZW1JZCB1c2VkIGFzIHRoZSBrZXkgd2l0aGluIHRoZSByZXF1ZXN0IG9iamVjdCBvZiBkZWxldGUgZnVuY3Rpb24gb24gQVBJIHNlcnZpY2UuXG4gICAgICovXG4gICAgd2l0aERhdGFTZXJ2aWNlRGVsZXRlRm48U2VydmljZUZuIGV4dGVuZHMgQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlPFNlcnZpY2UsIGFueSwgT2JzZXJ2YWJsZTxhbnk+Pj4oXG4gICAgICAgIHNlcnZpY2VGbjogU2VydmljZUZuLFxuICAgICAgICBmbkl0ZW1JZFBhcmFtTmFtZTogQ2xhc3NGdW5jdGlvbktleVBhcmFtMU9iaktleUV4dGVuZHNPZlRhcmdldFR5cGU8U2VydmljZSwgU2VydmljZUZuLCBJZFR5cGU+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhUHJvdmlkZXIgaW5zdGFuY2VvZiBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0KSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIud2l0aERlbGV0ZSgoaXRlbUlkLCBzZXJ2aWNlKSA9PiBzZXJ2aWNlW3NlcnZpY2VGbl0oe1tmbkl0ZW1JZFBhcmFtTmFtZV06IGl0ZW1JZH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCB0aGUgZGVmYXVsdCB0YWJsZXZpZXcgYWN0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aE5vRGVmYXVsdEFjdGlvbnMoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbnMuZm9yRWFjaChhID0+IChhLmRlc2NyaXB0b3IgPSBudWxsKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGRlZmF1bHQgYWN0aW9ucyBzcGVjaWZpZWQgaW4gcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtW119IHR5cGVzIC0gVGhlIGRlZmF1bHQgYWN0aW9ucyB0byBhZGQuXG4gICAgICogQHJldHVybnMge3RoaXN9IC0gUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICB3aXRoRGVmYXVsdEFjdGlvbnMoLi4udHlwZXM6IFRhYmxldmlld0RlZmF1bHRBY3Rpb25zRW51bVtdKTogdGhpcyB7XG4gICAgICAgIHR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zLmZpbmQoYSA9PiBhLnR5cGUgPT09IHR5cGUpO1xuICAgICAgICAgICAgaWYgKGFjdGlvbj8uZGVzY3JpcHRvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi5kZXNjcmlwdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgZGVmYXVsdCBhY3Rpb25zIHNwZWNpZmllZCBpbiBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUYWJsZXZpZXdEZWZhdWx0QWN0aW9uc0VudW1bXX0gdHlwZXMgLSBUaGUgZGVmYXVsdCBhY3Rpb25zIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gLSBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHdpdGhvdXREZWZhdWx0QWN0aW9ucyguLi50eXBlczogVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtW10pOiB0aGlzIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnMuZmluZChhID0+IGEudHlwZSA9PT0gdHlwZSk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLmRlc2NyaXB0b3IgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtfSB0eXBlIC0gVGhlIGRlZmF1bHQgYWN0aW9ucyB0byBvdmVycmlkZS5cbiAgICAgKiBAcGFyYW0ge1R2QnVpbGRlckFjdGlvblNldHRlckZuVHlwZTxNb2RlbCwgQWN0aW9uU2VydmljZSAsIEFjdGlvblJ1bklucHV0LCBBY3Rpb25SdW5SZXN1bHQsIERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj59IGZuIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV3IGFjdGlvbiBkZXNjcmlwdG9yLiBJdCBhY2NlcHRzIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5gLlxuICAgICAqIEB0eXBlUGFyYW0gQWN0aW9uU2VydmljZSAtIFRoZSBzZXJ2aWNlIHR5cGUgKHNhbWUgYXMgYnVpbGQgYFNlcnZpY2VgIGJ5IGRlZmF1bHQpLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aERlZmF1bHRBY3Rpb25PdmVycmlkZTxBY3Rpb25TZXJ2aWNlID0gU2VydmljZSwgQWN0aW9uUnVuSW5wdXQgPSBNb2RlbCwgQWN0aW9uUnVuUmVzdWx0ID0gTW9kZWwsIFZhbGlkYXRpb25JbnB1dCA9IE1vZGVsPihcbiAgICAgICAgdHlwZTogVGFibGV2aWV3RGVmYXVsdEFjdGlvbnNFbnVtLFxuICAgICAgICBmbjogVHZCdWlsZGVyQWN0aW9uU2V0dGVyRm5UeXBlPE1vZGVsLCBBY3Rpb25TZXJ2aWNlLCBBY3Rpb25SdW5JbnB1dCwgQWN0aW9uUnVuUmVzdWx0LCBWYWxpZGF0aW9uSW5wdXQsIERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9ucy5maW5kKGEgPT4gYS50eXBlID09PSB0eXBlKTtcbiAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgYWN0aW9uLmRlc2NyaXB0b3IgPSBmbih0aGlzLnByZXBhcmVTZXR0ZXJQYXJhbXMoKSkgPz8gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY3VzdG9tIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBvbiBvZiB7d2l0aEFjdGlvbk9uVGFibGV9LCB7d2l0aEFjdGlvbk9uRGV0YWlsc0VkaXRvcn0sIHt3aXRoQWN0aW9uT25FZGl0RWRpdG9yfSBvciB7d2l0aEFjdGlvbk9uQWRkRWRpdG9yfSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUdkJ1aWxkZXJBY3Rpb25TZXR0ZXJGblR5cGU8TW9kZWwsIEFjdGlvblNlcnZpY2UsIEFjdGlvblJ1bklucHV0LCBBY3Rpb25SdW5SZXN1bHQsIERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj59IGZuIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV3IGFjdGlvbiBkZXNjcmlwdG9yLiBJdCBhY2NlcHRzIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5gLlxuICAgICAqIEB0eXBlUGFyYW0gQWN0aW9uU2VydmljZSAtIFRoZSBzZXJ2aWNlIHR5cGUgKHNhbWUgYXMgYnVpbGQgYFNlcnZpY2VgIGJ5IGRlZmF1bHQpLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aEFjdGlvbjxBY3Rpb25Nb2RlbCA9IE1vZGVsLCBBY3Rpb25TZXJ2aWNlID0gU2VydmljZSwgQWN0aW9uUnVuSW5wdXQgPSBNb2RlbCwgQWN0aW9uUnVuUmVzdWx0ID0gTW9kZWwsIFZhbGlkYXRpb25JbnB1dCA9IE1vZGVsPihcbiAgICAgICAgZm46IFR2QnVpbGRlckFjdGlvblNldHRlckZuVHlwZTxBY3Rpb25Nb2RlbCwgQWN0aW9uU2VydmljZSwgQWN0aW9uUnVuSW5wdXQsIEFjdGlvblJ1blJlc3VsdCwgVmFsaWRhdGlvbklucHV0LCBEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGZuKHRoaXMucHJlcGFyZVNldHRlclBhcmFtcygpKTtcbiAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fY3VzdG9tQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGN1c3RvbSBhY3Rpb24gb24gdGFibGUgcm93IG9yIHRvcCAoaGVhZGVyIG9yIHRvb2xiYXIpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUdkJ1aWxkZXJBY3Rpb25TZXR0ZXJGblR5cGU8TW9kZWwsIEFjdGlvblNlcnZpY2UsIEFjdGlvblJ1blJlc3VsdCwgRGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPn0gZm4gLSBUaGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXcgYWN0aW9uIGRlc2NyaXB0b3IuIEl0IGFjY2VwdHMgYSBzaW5nbGUgcGFyYW1ldGVyIG9mIHR5cGUgYFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPmAuXG4gICAgICogQHBhcmFtIHtBY3Rpb25Qb3NpdGlvbkVudW19IGZuIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV3IGFjdGlvbiBkZXNjcmlwdG9yLiBJdCBhY2NlcHRzIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5gLlxuICAgICAqIEB0eXBlUGFyYW0gQWN0aW9uU2VydmljZSAtIFRoZSBzZXJ2aWNlIHR5cGUgKHNhbWUgYXMgYnVpbGQgYFNlcnZpY2VgIGJ5IGRlZmF1bHQpLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aEFjdGlvbk9uVGFibGU8QWN0aW9uTW9kZWwgPSBNb2RlbCwgQWN0aW9uU2VydmljZSA9IFNlcnZpY2UsIEFjdGlvbklucHV0IGV4dGVuZHMgVGFibGVNb2RlbCB8IHVuZGVmaW5lZCA9IFRhYmxlTW9kZWwsIEFjdGlvblJ1blJlc3VsdCA9IE1vZGVsPihcbiAgICAgICAgZm46IFR2QnVpbGRlckFjdGlvblNldHRlckZuVHlwZTxBY3Rpb25Nb2RlbCwgQWN0aW9uU2VydmljZSwgQWN0aW9uSW5wdXQsIEFjdGlvblJ1blJlc3VsdCwgQWN0aW9uSW5wdXQsIERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZm4odGhpcy5wcmVwYXJlU2V0dGVyUGFyYW1zKCkpO1xuICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICBhY3Rpb24ud2l0aFBvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllcyhbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuUkVBRF0pO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgICAgICAgIEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgQWN0aW9uUG9zaXRpb25FbnVtLlRhYmxlSGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICBBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lLFxuICAgICAgICAgICAgICAgICAgICBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2tcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWVMb25nfSBjYW4gbm90IGJlIHBvc2l0aW9uZWQgb24gdGFibGUgKCR7YWN0aW9uLnBvc2l0aW9ufSksIGRlZmluZSB2YWxpZCBwb3NpdGlvbi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbUFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjdXN0b20gYWN0aW9uIG9uIGRldGFpbHMgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUdkJ1aWxkZXJBY3Rpb25TZXR0ZXJGblR5cGU8TW9kZWwsIEFjdGlvblNlcnZpY2UsIEFjdGlvblJ1blJlc3VsdCwgRGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPn0gZm4gLSBUaGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXcgYWN0aW9uIGRlc2NyaXB0b3IuIEl0IGFjY2VwdHMgYSBzaW5nbGUgcGFyYW1ldGVyIG9mIHR5cGUgYFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPmAuXG4gICAgICogQHBhcmFtIHtBY3Rpb25Qb3NpdGlvbkVudW19IGZuIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV3IGFjdGlvbiBkZXNjcmlwdG9yLiBJdCBhY2NlcHRzIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGBUdkJ1aWxkZXJTZXR0ZXJQYXJhbXNUeXBlPERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj5gLlxuICAgICAqIEB0eXBlUGFyYW0gQWN0aW9uU2VydmljZSAtIFRoZSBzZXJ2aWNlIHR5cGUgKHNhbWUgYXMgYnVpbGQgYFNlcnZpY2VgIGJ5IGRlZmF1bHQpLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSAtIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgd2l0aEFjdGlvbk9uRGV0YWlsc0VkaXRvcjxBY3Rpb25Nb2RlbCA9IE1vZGVsLCBBY3Rpb25TZXJ2aWNlID0gU2VydmljZSwgQWN0aW9uSW5wdXQgZXh0ZW5kcyBNb2RlbCA9IE1vZGVsLCBBY3Rpb25SZXN1bHQgPSBNb2RlbD4oXG4gICAgICAgIGZuOiBUdkJ1aWxkZXJBY3Rpb25TZXR0ZXJGblR5cGU8QWN0aW9uTW9kZWwsIEFjdGlvblNlcnZpY2UsIEFjdGlvbklucHV0LCBBY3Rpb25SZXN1bHQsIEFjdGlvbklucHV0LCBEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGZuKHRoaXMucHJlcGFyZVNldHRlclBhcmFtcygpKTtcbiAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgYWN0aW9uLndpdGhQb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXMoW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFVEFJTFNdKTtcbiAgICAgICAgICAgIGlmICghW0FjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCwgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodCwgQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlckxlZnQsIEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJSaWdodF0uaW5jbHVkZXMoYWN0aW9uLnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWVMb25nfSBjYW4gbm90IGJlIHBvc2l0aW9uZWQgb24gZGV0YWlscyAoJHthY3Rpb24ucG9zaXRpb259KSwgZGVmaW5lIHZhbGlkIHBvc2l0aW9uLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY3VzdG9tQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGN1c3RvbSBhY3Rpb24gb24gZWRpdCBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1R2QnVpbGRlckFjdGlvblNldHRlckZuVHlwZTxNb2RlbCwgQWN0aW9uU2VydmljZSwgQWN0aW9uUnVuUmVzdWx0LCBEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+fSBmbiAtIFRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5ldyBhY3Rpb24gZGVzY3JpcHRvci4gSXQgYWNjZXB0cyBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YgdHlwZSBgVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+YC5cbiAgICAgKiBAcGFyYW0ge0FjdGlvblBvc2l0aW9uRW51bX0gZm4gLSBUaGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXcgYWN0aW9uIGRlc2NyaXB0b3IuIEl0IGFjY2VwdHMgYSBzaW5nbGUgcGFyYW1ldGVyIG9mIHR5cGUgYFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPmAuXG4gICAgICogQHR5cGVQYXJhbSBBY3Rpb25TZXJ2aWNlIC0gVGhlIHNlcnZpY2UgdHlwZSAoc2FtZSBhcyBidWlsZCBgU2VydmljZWAgYnkgZGVmYXVsdCkuXG4gICAgICogQHJldHVybnMge3RoaXN9IC0gUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICB3aXRoQWN0aW9uT25FZGl0RWRpdG9yPEFjdGlvbk1vZGVsID0gTW9kZWwsIEFjdGlvblNlcnZpY2UgPSBTZXJ2aWNlLCBBY3Rpb25JbnB1dCBleHRlbmRzIEVkaXRNb2RlbCA9IEVkaXRNb2RlbCwgQWN0aW9uUmVzdWx0ID0gTW9kZWw+KFxuICAgICAgICBmbjogVHZCdWlsZGVyQWN0aW9uU2V0dGVyRm5UeXBlPEFjdGlvbk1vZGVsLCBBY3Rpb25TZXJ2aWNlLCBBY3Rpb25JbnB1dCwgQWN0aW9uUmVzdWx0LCBBY3Rpb25JbnB1dCwgRGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPlxuICAgICk6IHRoaXMge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBmbih0aGlzLnByZXBhcmVTZXR0ZXJQYXJhbXMoKSk7XG4gICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGFjdGlvbi53aXRoUG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzKFtUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElUXSk7XG4gICAgICAgICAgICBpZiAoIVtBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQsIEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQsIEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0LCBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHRdLmluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lTG9uZ30gY2FuIG5vdCBiZSBwb3NpdGlvbmVkIG9uIGVkaXQgKCR7YWN0aW9uLnBvc2l0aW9ufSksIGRlZmluZSB2YWxpZCBwb3NpdGlvbi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbUFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjdXN0b20gYWN0aW9uIG9uIGFkZCBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1R2QnVpbGRlckFjdGlvblNldHRlckZuVHlwZTxNb2RlbCwgQWN0aW9uU2VydmljZSwgQWN0aW9uUnVuUmVzdWx0LCBEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+fSBmbiAtIFRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5ldyBhY3Rpb24gZGVzY3JpcHRvci4gSXQgYWNjZXB0cyBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YgdHlwZSBgVHZCdWlsZGVyU2V0dGVyUGFyYW1zVHlwZTxEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+YC5cbiAgICAgKiBAcGFyYW0ge0FjdGlvblBvc2l0aW9uRW51bX0gZm4gLSBUaGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXcgYWN0aW9uIGRlc2NyaXB0b3IuIEl0IGFjY2VwdHMgYSBzaW5nbGUgcGFyYW1ldGVyIG9mIHR5cGUgYFR2QnVpbGRlclNldHRlclBhcmFtc1R5cGU8RGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPmAuXG4gICAgICogQHR5cGVQYXJhbSBBY3Rpb25TZXJ2aWNlIC0gVGhlIHNlcnZpY2UgdHlwZSAoc2FtZSBhcyBidWlsZCBgU2VydmljZWAgYnkgZGVmYXVsdCkuXG4gICAgICogQHJldHVybnMge3RoaXN9IC0gUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICB3aXRoQWN0aW9uT25BZGRFZGl0b3I8QWN0aW9uTW9kZWwgPSBNb2RlbCwgQWN0aW9uU2VydmljZSA9IFNlcnZpY2UsIEFjdGlvbklucHV0IGV4dGVuZHMgQWRkTW9kZWwgPSBBZGRNb2RlbCwgQWN0aW9uUmVzdWx0ID0gTW9kZWw+KFxuICAgICAgICBmbjogVHZCdWlsZGVyQWN0aW9uU2V0dGVyRm5UeXBlPEFjdGlvbk1vZGVsLCBBY3Rpb25TZXJ2aWNlLCBBY3Rpb25JbnB1dCwgQWN0aW9uUmVzdWx0LCBBY3Rpb25JbnB1dCwgRGVzY3JpcHRvciwgRGF0YVByb3ZpZGVyPlxuICAgICk6IHRoaXMge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBmbih0aGlzLnByZXBhcmVTZXR0ZXJQYXJhbXMoKSk7XG4gICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGFjdGlvbi53aXRoUG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzKFtUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5BRERdKTtcbiAgICAgICAgICAgIGlmICghW0FjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCwgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodCwgQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlckxlZnQsIEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJSaWdodF0uaW5jbHVkZXMoYWN0aW9uLnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWVMb25nfSBjYW4gbm90IGJlIHBvc2l0aW9uZWQgb24gYWRkICgke2FjdGlvbi5wb3NpdGlvbn0pLCBkZWZpbmUgdmFsaWQgcG9zaXRpb24uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jdXN0b21BY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKlxuICAgICAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBJVGFibGV2aWV3LlxuICAgICAqIERPIE5PVCBDQUxMIHRoaXMgd2l0aGluIHRhYmxldmlldyBjcmVhdGUgY2FsbGJhY2sgZnVuY3Rpb24hXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtUYWJsZXZpZXdJbnB1dDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIERlc2NyaXB0b3IsIERhdGFQcm92aWRlcj59IC0gVGhlIGJ1aWx0IElUYWJsZXZpZXcgaW5zdGFuY2UuXG4gICAgICovXG4gICAgYnVpbGQoKSB7XG4gICAgICAgIHJldHVybiA8VGFibGV2aWV3SW5wdXQ8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBUYWJsZU1vZGVsLCBBZGRNb2RlbCwgRWRpdE1vZGVsLCBEZXNjcmlwdG9yLCBEYXRhUHJvdmlkZXI+PntcbiAgICAgICAgICAgIGFjdGlvbnM6IHRhYmxldmlld0NyZWF0ZURlZmF1bHRBY3Rpb25zKFxuICAgICAgICAgICAgICAgIHRoaXMuX2Rlc2NyaXB0b3IgYXMgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbnMuZmlsdGVyKGEgPT4gYS5kZXNjcmlwdG9yICE9PSBudWxsKS5tYXAoYSA9PiBhLnR5cGUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihhID0+IGEuZGVzY3JpcHRvciAhPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGFjYywgYSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2EudHlwZV06IGEuZGVzY3JpcHRvciFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgPFJlY29yZDxudW1iZXIsIEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4+Pnt9XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvclxuICAgICAgICAgICAgKS5jb25jYXQodGhpcy5fY3VzdG9tQWN0aW9ucyksXG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IHRoaXMuX2RhdGFQcm92aWRlcixcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IHRoaXMuX2Rlc2NyaXB0b3JcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWRlc2NyaXB0b3ItZmllbGRzLW1hbmFnZS1oZWxwZXIudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL3RhYmxldmlldy9tb2RlbHMvdGFibGV2aWV3LWRlc2NyaXB0b3ItZmllbGRzLW1hbmFnZS1oZWxwZXIudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Qcm9wc09ialR5cGUzfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciBjYXNlcyB3aGVuIHlvdSBuZWVkIHRvIGN1c3RvbSBkZWZpbmUgRmllbGRzTWFuYWdlTW9kZWwgb24gVGFibGV2aWV3RGVzY3JpcHRvckluc3QgZnJvbSBvbmx5IG9uZSBtb2RlbCAoc2luZ2xlIG1vZGVsKS5cbiAqL1xuZXhwb3J0IHR5cGUgVGFibGV2aWV3RGVzY3JpcHRvckZpZWxkc01hbmFnZVNpbmdsZVR5cGU8VGFibGV2aWV3TW9kZWw+ID0gQ29tbW9uUHJvcHNPYmpUeXBlMzxUYWJsZXZpZXdNb2RlbCwgVGFibGV2aWV3TW9kZWwsIFRhYmxldmlld01vZGVsPjtcblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBmb3IgY2FzZXMgd2hlbiB5b3UgbmVlZCB0byBjdXN0b20gZGVmaW5lIEZpZWxkc01hbmFnZU1vZGVsIG9uIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0IGZyb20gb25seSAzIG1vZGVscyAobXVsdGkgbW9kZWwpLlxuICovXG5leHBvcnQgdHlwZSBUYWJsZXZpZXdEZXNjcmlwdG9yRmllbGRzTWFuYWdlTXVsdGlUeXBlPFRhYmxldmlld01vZGVsLCBBZGRNb2RlbCwgRWRpdE1vZGVsPiA9IENvbW1vblByb3BzT2JqVHlwZTM8VGFibGV2aWV3TW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWw+O1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWRlc2NyaXB0b3ItaGVscGVyLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy90YWJsZXZpZXcvbW9kZWxzL3RhYmxldmlldy1kZXNjcmlwdG9yLWhlbHBlci50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi9kZXNjcmlwdG9ycy90YWJsZXZpZXcuZGVzY3JpcHRvcic7XG5cbmV4cG9ydCB0eXBlIFRhYmxldmlld0Rlc2NyaXB0b3JUeXBlPFRhYmxldmlld01vZGVsLCBTb3J0cyA9IGtleW9mIFRhYmxldmlld01vZGVsLCBGaWx0ZXJzID0ga2V5b2YgVGFibGV2aWV3TW9kZWwsIFBhcmVudEVkaXRvck1vZGVsID0gdW5kZWZpbmVkPiA9IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PFxuICAgIFRhYmxldmlld01vZGVsLFxuICAgIFNvcnRzLFxuICAgIEZpbHRlcnMsXG4gICAgUGFyZW50RWRpdG9yTW9kZWwsXG4gICAgVGFibGV2aWV3TW9kZWwsXG4gICAgVGFibGV2aWV3TW9kZWwsXG4gICAgVGFibGV2aWV3TW9kZWwsXG4gICAgVGFibGV2aWV3TW9kZWxcbj47XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWlucHV0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvdGFibGV2aWV3L21vZGVscy90YWJsZXZpZXctaW5wdXQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9uRGVzY3JpcHRvckluc3R9IGZyb20gJy4uLy4uL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24uZGVzY3JpcHRvcic7XG5pbXBvcnQge0lUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzL3RhYmxldmlldy5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZXZpZXdJbnB1dDxcbiAgICBNb2RlbCxcbiAgICBTZXJ2aWNlLFxuICAgIFNvcnRzID0ga2V5b2YgTW9kZWwsXG4gICAgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsLFxuICAgIERlc2NyaXB0b3IgPSBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnM+LFxuICAgIERhdGFQcm92aWRlciA9IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzPlxuPiB7XG4gICAgZGVzY3JpcHRvcjogRGVzY3JpcHRvcjtcbiAgICBkYXRhUHJvdmlkZXI6IERhdGFQcm92aWRlcjtcbiAgICBhY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbD5bXTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWlucHV0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvdGFibGV2aWV3L21vZGVscy90YWJsZXZpZXctaW5wdXQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aW9uRGVzY3JpcHRvckluc3R9IGZyb20gJy4uLy4uL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24uZGVzY3JpcHRvcic7XG5pbXBvcnQge0lUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzL3RhYmxldmlldy5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxldmlldy5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZXZpZXdJbnB1dDxcbiAgICBNb2RlbCxcbiAgICBTZXJ2aWNlLFxuICAgIFNvcnRzID0ga2V5b2YgTW9kZWwsXG4gICAgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsLFxuICAgIFRhYmxlTW9kZWwgPSBNb2RlbCxcbiAgICBBZGRNb2RlbCA9IE1vZGVsLFxuICAgIEVkaXRNb2RlbCA9IE1vZGVsLFxuICAgIERlc2NyaXB0b3IgPSBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgVGFibGVNb2RlbCwgQWRkTW9kZWwsIEVkaXRNb2RlbD4sXG4gICAgRGF0YVByb3ZpZGVyID0gSVRhYmxldmlld0RhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIGFueSwgVGFibGVNb2RlbCwgQWRkTW9kZWwsIEVkaXRNb2RlbD5cbj4ge1xuICAgIGRlc2NyaXB0b3I6IERlc2NyaXB0b3I7XG4gICAgZGF0YVByb3ZpZGVyOiBEYXRhUHJvdmlkZXI7XG4gICAgYWN0aW9uczogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWw+W107XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LXJvdXRlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvdGFibGV2aWV3L21vZGVscy90YWJsZXZpZXctcm91dGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QVBlcm1pc3Npb25zLCBDb21tb25zUm91dGVEYXRhfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi9hY3Rpb24vZGVzY3JpcHRvcnMvYWN0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtJVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycy90YWJsZXZpZXcuZGF0YS1wcm92aWRlcic7XG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi9kZXNjcmlwdG9ycy90YWJsZXZpZXcuZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGV2aWV3Um91dGVEYXRhIGV4dGVuZHMgQ29tbW9uc1JvdXRlRGF0YSB7XG4gICAgdGFibGV2aWV3Pzoge1xuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55PjtcbiAgICAgICAgZGF0YVByb3ZpZGVyOiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyO1xuICAgICAgICBhY3Rpb25zPzogQXJyYXk8QWN0aW9uRGVzY3JpcHRvckluc3Q8YW55Pj47XG4gICAgfTtcbiAgICB0YWJsZXZpZXdQZXJtaXNzaW9ucz86IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogQVBlcm1pc3Npb25zO1xuICAgIH07XG4gICAgLy8gdGFibGV2aWV3IGFjdGlvbnMgZGVmaW5lZCB2aWEgcm91dGUgYnVpbGRlclxuICAgIHRhYmxldmlld0FjdGlvbnM/OiB7XG4gICAgICAgIGhhc0FkZD86IGJvb2xlYW47XG4gICAgICAgIGhhc0VkaXQ/OiBib29sZWFuO1xuICAgICAgICBoYXNEZXRhaWxzPzogYm9vbGVhbjtcbiAgICAgICAgaGFzRGVsZXRlPzogYm9vbGVhbjtcbiAgICB9O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LXJvdXRlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvdGFibGV2aWV3L21vZGVscy90YWJsZXZpZXctcm91dGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QVBlcm1pc3Npb25zLCBDb21tb25zUm91dGVEYXRhfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi9hY3Rpb24vZGVzY3JpcHRvcnMvYWN0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtJVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycy90YWJsZXZpZXcuZGF0YS1wcm92aWRlcic7XG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi9kZXNjcmlwdG9ycy90YWJsZXZpZXcuZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGV2aWV3Um91dGVEYXRhIGV4dGVuZHMgQ29tbW9uc1JvdXRlRGF0YSB7XG4gICAgdGFibGV2aWV3Pzoge1xuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55LCBhbnk+O1xuICAgICAgICBkYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI7XG4gICAgICAgIGFjdGlvbnM/OiBBcnJheTxBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+PjtcbiAgICB9O1xuICAgIHRhYmxldmlld1Blcm1pc3Npb25zPzoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBBUGVybWlzc2lvbnM7XG4gICAgfTtcbiAgICAvLyB0YWJsZXZpZXcgYWN0aW9ucyBkZWZpbmVkIHZpYSByb3V0ZSBidWlsZGVyXG4gICAgdGFibGV2aWV3QWN0aW9ucz86IHtcbiAgICAgICAgaGFzQWRkPzogYm9vbGVhbjtcbiAgICAgICAgaGFzRWRpdD86IGJvb2xlYW47XG4gICAgICAgIGhhc0RldGFpbHM/OiBib29sZWFuO1xuICAgICAgICBoYXNEZWxldGU/OiBib29sZWFuO1xuICAgIH07XG59XG4iXX0=