@sumaris-net/ngx-components 18.14.0 → 18.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1416) hide show
  1. package/esm2022/public_api.mjs +390 -0
  2. package/esm2022/src/app/admin/admin-routing.module.mjs +34 -0
  3. package/esm2022/src/app/admin/admin.module.mjs +32 -0
  4. package/esm2022/src/app/admin/services/filter/person.filter.mjs +76 -0
  5. package/esm2022/src/app/admin/services/person.service.mjs +184 -0
  6. package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
  7. package/esm2022/src/app/admin/users/users.mjs +379 -0
  8. package/esm2022/src/app/admin/users/users.module.mjs +56 -0
  9. package/esm2022/src/app/core/about/about.modal.mjs +86 -0
  10. package/esm2022/src/app/core/about/about.module.mjs +22 -0
  11. package/esm2022/src/app/core/account/account.module.mjs +75 -0
  12. package/esm2022/src/app/core/account/account.page.mjs +364 -0
  13. package/esm2022/src/app/core/account/new-token.form.mjs +106 -0
  14. package/esm2022/src/app/core/account/new-token.modal.mjs +66 -0
  15. package/esm2022/src/app/core/account/password/change-password.form.mjs +63 -0
  16. package/esm2022/src/app/core/account/password/change-password.module.mjs +22 -0
  17. package/esm2022/src/app/core/account/password/change-password.page.mjs +150 -0
  18. package/esm2022/src/app/core/account/token.table.mjs +157 -0
  19. package/esm2022/src/app/core/auth/auth.form.mjs +159 -0
  20. package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
  21. package/esm2022/src/app/core/auth/auth.module.mjs +56 -0
  22. package/esm2022/src/app/core/auth/reset-password.modal.mjs +89 -0
  23. package/esm2022/src/app/core/core.module.mjs +151 -0
  24. package/esm2022/src/app/core/core.testing.module.mjs +107 -0
  25. package/esm2022/src/app/core/form/array/form-array.mjs +328 -0
  26. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +23 -0
  27. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +94 -0
  28. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +108 -0
  29. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +31 -0
  30. package/esm2022/src/app/core/form/entity/editor.class.mjs +268 -0
  31. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +420 -0
  32. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +741 -0
  33. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
  34. package/esm2022/src/app/core/form/entity/entity.module.mjs +32 -0
  35. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +190 -0
  36. package/esm2022/src/app/core/form/form-container.class.mjs +341 -0
  37. package/esm2022/src/app/core/form/form.class.mjs +337 -0
  38. package/esm2022/src/app/core/form/form.module.mjs +70 -0
  39. package/esm2022/src/app/core/form/form.utils.mjs +232 -0
  40. package/esm2022/src/app/core/form/list/list.form.mjs +235 -0
  41. package/esm2022/src/app/core/form/list/list.module.mjs +31 -0
  42. package/esm2022/src/app/core/form/properties/properties.form.mjs +317 -0
  43. package/esm2022/src/app/core/form/properties/properties.module.mjs +37 -0
  44. package/esm2022/src/app/core/form/properties/properties.table.mjs +264 -0
  45. package/esm2022/src/app/core/form/properties/properties.utils.mjs +304 -0
  46. package/esm2022/src/app/core/form/properties/property.validator.mjs +70 -0
  47. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +104 -0
  48. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +23 -0
  49. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
  50. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +30 -0
  51. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +161 -0
  52. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +31 -0
  53. package/esm2022/src/app/core/form/username/username.form.mjs +55 -0
  54. package/esm2022/src/app/core/form/username/username.module.mjs +20 -0
  55. package/esm2022/src/app/core/graphql/graphql.module.mjs +14 -0
  56. package/esm2022/src/app/core/graphql/graphql.service.mjs +781 -0
  57. package/esm2022/src/app/core/graphql/graphql.utils.mjs +119 -0
  58. package/esm2022/src/app/core/home/home.mjs +403 -0
  59. package/esm2022/src/app/core/home/home.module.mjs +54 -0
  60. package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
  61. package/esm2022/src/app/core/icon/icon.module.mjs +20 -0
  62. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +394 -0
  63. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +31 -0
  64. package/esm2022/src/app/core/menu/menu.component.mjs +258 -0
  65. package/esm2022/src/app/core/menu/menu.model.mjs +272 -0
  66. package/esm2022/src/app/core/menu/menu.module.mjs +47 -0
  67. package/esm2022/src/app/core/menu/menu.service.mjs +666 -0
  68. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
  69. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +50 -0
  70. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +158 -0
  71. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +60 -0
  72. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +28 -0
  73. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +31 -0
  74. package/esm2022/src/app/core/peer/select-peer.modal.mjs +344 -0
  75. package/esm2022/src/app/core/peer/select-peer.module.mjs +36 -0
  76. package/esm2022/src/app/core/register/register-confirm.page.mjs +90 -0
  77. package/esm2022/src/app/core/register/register.form.mjs +194 -0
  78. package/esm2022/src/app/core/register/register.modal.mjs +55 -0
  79. package/esm2022/src/app/core/register/register.module.mjs +23 -0
  80. package/esm2022/src/app/core/services/account.service.mjs +1358 -0
  81. package/esm2022/src/app/core/services/auth-guard.service.mjs +74 -0
  82. package/esm2022/src/app/core/services/base-entity-service.class.mjs +485 -0
  83. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +230 -0
  84. package/esm2022/src/app/core/services/base58.mjs +83 -0
  85. package/esm2022/src/app/core/services/config/core.config.mjs +258 -0
  86. package/esm2022/src/app/core/services/config.service.mjs +384 -0
  87. package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
  88. package/esm2022/src/app/core/services/errors.mjs +54 -0
  89. package/esm2022/src/app/core/services/local-settings.service.mjs +517 -0
  90. package/esm2022/src/app/core/services/model/account.model.mjs +178 -0
  91. package/esm2022/src/app/core/services/model/config.model.mjs +107 -0
  92. package/esm2022/src/app/core/services/model/department.model.mjs +35 -0
  93. package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
  94. package/esm2022/src/app/core/services/model/entity.model.mjs +338 -0
  95. package/esm2022/src/app/core/services/model/filter.model.mjs +93 -0
  96. package/esm2022/src/app/core/services/model/history.model.mjs +2 -0
  97. package/esm2022/src/app/core/services/model/model.enum.mjs +11 -0
  98. package/esm2022/src/app/core/services/model/node-feature.model.mjs +31 -0
  99. package/esm2022/src/app/core/services/model/peer.model.mjs +113 -0
  100. package/esm2022/src/app/core/services/model/person.model.mjs +114 -0
  101. package/esm2022/src/app/core/services/model/referential.model.mjs +205 -0
  102. package/esm2022/src/app/core/services/model/settings.model.mjs +6 -0
  103. package/esm2022/src/app/core/services/model/token.model.mjs +57 -0
  104. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +220 -0
  105. package/esm2022/src/app/core/services/network.service.mjs +649 -0
  106. package/esm2022/src/app/core/services/network.types.mjs +2 -0
  107. package/esm2022/src/app/core/services/network.utils.mjs +35 -0
  108. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +38 -0
  109. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  110. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  111. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  112. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  113. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  114. package/esm2022/src/app/core/services/platform.service.mjs +627 -0
  115. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +427 -0
  116. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +450 -0
  117. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
  118. package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
  119. package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
  120. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
  121. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +57 -0
  122. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +27 -0
  123. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +55 -0
  124. package/esm2022/src/app/core/settings/settings.module.mjs +23 -0
  125. package/esm2022/src/app/core/settings/settings.page.mjs +403 -0
  126. package/esm2022/src/app/core/table/async-table.class.mjs +1813 -0
  127. package/esm2022/src/app/core/table/column/actions-column.component.mjs +130 -0
  128. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +117 -0
  129. package/esm2022/src/app/core/table/column/row-field.component.mjs +116 -0
  130. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +415 -0
  131. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +407 -0
  132. package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
  133. package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
  134. package/esm2022/src/app/core/table/table.class.mjs +1869 -0
  135. package/esm2022/src/app/core/table/table.model.mjs +21 -0
  136. package/esm2022/src/app/core/table/table.module.mjs +51 -0
  137. package/esm2022/src/app/core/table/table.pipes.mjs +77 -0
  138. package/esm2022/src/app/core/table/table.utils.mjs +34 -0
  139. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +32 -0
  140. package/esm2022/src/app/core/table/testing/table.testing.mjs +329 -0
  141. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +25 -0
  142. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
  143. package/esm2022/src/app/core/table/testing/table2.testing.mjs +273 -0
  144. package/esm2022/src/app/shared/alerts.mjs +243 -0
  145. package/esm2022/src/app/shared/audio/audio.mjs +255 -0
  146. package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
  147. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +30 -0
  148. package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
  149. package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
  150. package/esm2022/src/app/shared/constants.mjs +16 -0
  151. package/esm2022/src/app/shared/dates.mjs +180 -0
  152. package/esm2022/src/app/shared/debug/debug-service.class.mjs +3 -0
  153. package/esm2022/src/app/shared/debug/debug.component.mjs +44 -0
  154. package/esm2022/src/app/shared/debug/debug.module.mjs +23 -0
  155. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +91 -0
  156. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +75 -0
  157. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +30 -0
  158. package/esm2022/src/app/shared/directives/directives.module.mjs +24 -0
  159. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
  160. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
  161. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
  162. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
  163. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  164. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +43 -0
  165. package/esm2022/src/app/shared/events.mjs +64 -0
  166. package/esm2022/src/app/shared/file/csv.utils.mjs +97 -0
  167. package/esm2022/src/app/shared/file/file.service.mjs +118 -0
  168. package/esm2022/src/app/shared/file/file.utils.mjs +117 -0
  169. package/esm2022/src/app/shared/file/images.utils.mjs +186 -0
  170. package/esm2022/src/app/shared/file/json.utils.mjs +58 -0
  171. package/esm2022/src/app/shared/file/uri.utils.mjs +29 -0
  172. package/esm2022/src/app/shared/file/url.utils.mjs +195 -0
  173. package/esm2022/src/app/shared/focusable.mjs +6 -0
  174. package/esm2022/src/app/shared/form/field.component.mjs +393 -0
  175. package/esm2022/src/app/shared/form/field.model.mjs +82 -0
  176. package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
  177. package/esm2022/src/app/shared/forms.mjs +573 -0
  178. package/esm2022/src/app/shared/functions.mjs +672 -0
  179. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +86 -0
  180. package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
  181. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +2 -0
  182. package/esm2022/src/app/shared/graph/colors.utils.mjs +60 -0
  183. package/esm2022/src/app/shared/graph/graph-colors.mjs +214 -0
  184. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +65 -0
  185. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  186. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +147 -0
  187. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +24 -0
  188. package/esm2022/src/app/shared/http/http.utils.mjs +56 -0
  189. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +443 -0
  190. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +62 -0
  191. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
  192. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +87 -0
  193. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +37 -0
  194. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +59 -0
  195. package/esm2022/src/app/shared/image/image.model.mjs +2 -0
  196. package/esm2022/src/app/shared/image/image.module.mjs +24 -0
  197. package/esm2022/src/app/shared/image/image.service.mjs +109 -0
  198. package/esm2022/src/app/shared/inputs.mjs +279 -0
  199. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +27 -0
  200. package/esm2022/src/app/shared/logging/log-level.model.mjs +48 -0
  201. package/esm2022/src/app/shared/logging/logger.model.mjs +47 -0
  202. package/esm2022/src/app/shared/logging/logging-service.class.mjs +125 -0
  203. package/esm2022/src/app/shared/logging/logging-service.config.mjs +2 -0
  204. package/esm2022/src/app/shared/logging/logging-service.module.mjs +30 -0
  205. package/esm2022/src/app/shared/markdown/markdown.component.mjs +321 -0
  206. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +34 -0
  207. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +99 -0
  208. package/esm2022/src/app/shared/markdown/markdown.module.mjs +87 -0
  209. package/esm2022/src/app/shared/markdown/markdown.service.mjs +204 -0
  210. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +87 -0
  211. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +55 -0
  212. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +30 -0
  213. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +46 -0
  214. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +1313 -0
  215. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +79 -0
  216. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +18 -0
  217. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +242 -0
  218. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +251 -0
  219. package/esm2022/src/app/shared/material/badge/badge.module.mjs +20 -0
  220. package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
  221. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +67 -0
  222. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +371 -0
  223. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +72 -0
  224. package/esm2022/src/app/shared/material/chips/chips.module.mjs +71 -0
  225. package/esm2022/src/app/shared/material/chips/material.chips.mjs +836 -0
  226. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +151 -0
  227. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +76 -0
  228. package/esm2022/src/app/shared/material/datetime/material.date.mjs +471 -0
  229. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +457 -0
  230. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +693 -0
  231. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +136 -0
  232. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +127 -0
  233. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +118 -0
  234. package/esm2022/src/app/shared/material/duration/duration.module.mjs +61 -0
  235. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +16 -0
  236. package/esm2022/src/app/shared/material/duration/material.duration.mjs +283 -0
  237. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +85 -0
  238. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +319 -0
  239. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +432 -0
  240. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +231 -0
  241. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +68 -0
  242. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +137 -0
  243. package/esm2022/src/app/shared/material/material.animations.mjs +200 -0
  244. package/esm2022/src/app/shared/material/material.config.mjs +3 -0
  245. package/esm2022/src/app/shared/material/material.module.mjs +229 -0
  246. package/esm2022/src/app/shared/material/material.testing.module.mjs +245 -0
  247. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +51 -0
  248. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
  249. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +379 -0
  250. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +52 -0
  251. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
  252. package/esm2022/src/app/shared/material/test/test-component.mjs +264 -0
  253. package/esm2022/src/app/shared/material/testing/common.test.mjs +111 -0
  254. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +42 -0
  255. package/esm2022/src/app/shared/material/text/text-form.component.mjs +205 -0
  256. package/esm2022/src/app/shared/material/text/text-form.module.mjs +63 -0
  257. package/esm2022/src/app/shared/modules.mjs +12 -0
  258. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +303 -0
  259. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
  260. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +24 -0
  261. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
  262. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +74 -0
  263. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +28 -0
  264. package/esm2022/src/app/shared/observables.mjs +100 -0
  265. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +217 -0
  266. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +25 -0
  267. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +29 -0
  268. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +50 -0
  269. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
  270. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
  271. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +18 -0
  272. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +23 -0
  273. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +34 -0
  274. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +53 -0
  275. package/esm2022/src/app/shared/pipes/form.pipes.mjs +219 -0
  276. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +50 -0
  277. package/esm2022/src/app/shared/pipes/html.pipes.mjs +69 -0
  278. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
  279. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +65 -0
  280. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +67 -0
  281. package/esm2022/src/app/shared/pipes/math.pipes.mjs +77 -0
  282. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
  283. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +17 -0
  284. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +63 -0
  285. package/esm2022/src/app/shared/pipes/pipes.module.mjs +285 -0
  286. package/esm2022/src/app/shared/pipes/property.pipes.mjs +135 -0
  287. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +179 -0
  288. package/esm2022/src/app/shared/pipes/string.pipes.mjs +183 -0
  289. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
  290. package/esm2022/src/app/shared/pipes/types.pipes.mjs +74 -0
  291. package/esm2022/src/app/shared/pipes/url.pipes.mjs +35 -0
  292. package/esm2022/src/app/shared/platforms.mjs +81 -0
  293. package/esm2022/src/app/shared/print/print.service.mjs +305 -0
  294. package/esm2022/src/app/shared/regexps.mjs +96 -0
  295. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +217 -0
  296. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +19 -0
  297. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +2 -0
  298. package/esm2022/src/app/shared/services/entity-service.class.mjs +10 -0
  299. package/esm2022/src/app/shared/services/job.utils.mjs +92 -0
  300. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +353 -0
  301. package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
  302. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +118 -0
  303. package/esm2022/src/app/shared/services/startable-service.class.mjs +107 -0
  304. package/esm2022/src/app/shared/services/translate-context.service.mjs +107 -0
  305. package/esm2022/src/app/shared/services/validator-service.class.mjs +2 -0
  306. package/esm2022/src/app/shared/services.mjs +85 -0
  307. package/esm2022/src/app/shared/shared-routing.module.mjs +72 -0
  308. package/esm2022/src/app/shared/shared.module.mjs +229 -0
  309. package/esm2022/src/app/shared/shared.testing.module.mjs +108 -0
  310. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +279 -0
  311. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +42 -0
  312. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +27 -0
  313. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +25 -0
  314. package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
  315. package/esm2022/src/app/shared/storage/storage.utils.mjs +13 -0
  316. package/esm2022/src/app/shared/testing/maskito.test.mjs +41 -0
  317. package/esm2022/src/app/shared/testing/observable.test.mjs +94 -0
  318. package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
  319. package/esm2022/src/app/shared/toast/toast.testing.mjs +54 -0
  320. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +31 -0
  321. package/esm2022/src/app/shared/toast/toasts.mjs +134 -0
  322. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +62 -0
  323. package/esm2022/src/app/shared/toolbar/toolbar.mjs +267 -0
  324. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +26 -0
  325. package/esm2022/src/app/shared/types.mjs +2 -0
  326. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
  327. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +30 -0
  328. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +109 -0
  329. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +216 -0
  330. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +26 -0
  331. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +115 -0
  332. package/esm2022/src/app/shared/validator/validators.mjs +621 -0
  333. package/esm2022/src/app/shared/version/versions.mjs +81 -0
  334. package/esm2022/src/app/social/config/social.config.mjs +9 -0
  335. package/esm2022/src/app/social/feed/discourse/discourse-feed.service.mjs +167 -0
  336. package/esm2022/src/app/social/feed/discourse/discourse.model.mjs +2 -0
  337. package/esm2022/src/app/social/feed/discourse/discourse.utils.mjs +168 -0
  338. package/esm2022/src/app/social/feed/feed.component.mjs +121 -0
  339. package/esm2022/src/app/social/feed/feed.directive.mjs +151 -0
  340. package/esm2022/src/app/social/feed/feed.model.mjs +68 -0
  341. package/esm2022/src/app/social/feed/feed.module.mjs +22 -0
  342. package/esm2022/src/app/social/feed/feed.service.mjs +3 -0
  343. package/esm2022/src/app/social/job/job.module.mjs +23 -0
  344. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
  345. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +235 -0
  346. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +47 -0
  347. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +29 -0
  348. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +91 -0
  349. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +38 -0
  350. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +34 -0
  351. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +22 -0
  352. package/esm2022/src/app/social/message/message.form.mjs +141 -0
  353. package/esm2022/src/app/social/message/message.modal.mjs +110 -0
  354. package/esm2022/src/app/social/message/message.model.mjs +75 -0
  355. package/esm2022/src/app/social/message/message.module.mjs +22 -0
  356. package/esm2022/src/app/social/message/message.service.mjs +110 -0
  357. package/esm2022/src/app/social/social.errors.mjs +10 -0
  358. package/esm2022/src/app/social/social.module.mjs +22 -0
  359. package/esm2022/src/app/social/social.testing.module.mjs +40 -0
  360. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +187 -0
  361. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +277 -0
  362. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +81 -0
  363. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +273 -0
  364. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +129 -0
  365. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +22 -0
  366. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +128 -0
  367. package/esm2022/src/app/social/user-event/user-event.model.mjs +2 -0
  368. package/esm2022/src/app/social/user-event/user-event.module.mjs +24 -0
  369. package/esm2022/src/app/social/user-event/user-event.service.mjs +512 -0
  370. package/esm2022/src/environments/environment.class.mjs +66 -0
  371. package/esm2022/src/environments/environment.loader.mjs +77 -0
  372. package/esm2022/src/environments/environment.mjs +118 -0
  373. package/esm2022/sumaris-net.ngx-components.mjs +5 -0
  374. package/fesm2022/sumaris-net.ngx-components.mjs +49754 -0
  375. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
  376. package/index.d.ts +5 -0
  377. package/package.json +19 -133
  378. package/public_api.d.ts +354 -0
  379. package/src/app/admin/admin-routing.module.d.ts +9 -0
  380. package/src/app/admin/admin.module.d.ts +10 -0
  381. package/src/app/admin/services/filter/person.filter.d.ts +22 -0
  382. package/src/app/admin/services/person.service.d.ts +37 -0
  383. package/src/app/admin/services/validator/person.validator.d.ts +23 -0
  384. package/src/app/admin/users/users.d.ts +61 -0
  385. package/src/app/admin/users/users.module.d.ts +14 -0
  386. package/src/app/core/about/about.modal.d.ts +32 -0
  387. package/src/app/core/about/about.module.d.ts +11 -0
  388. package/src/app/core/account/account.module.d.ts +18 -0
  389. package/src/app/core/account/account.page.d.ts +83 -0
  390. package/src/app/core/account/new-token.form.d.ts +29 -0
  391. package/src/app/core/account/new-token.modal.d.ts +29 -0
  392. package/src/app/core/account/password/change-password.form.d.ts +19 -0
  393. package/src/app/core/account/password/change-password.module.d.ts +11 -0
  394. package/src/app/core/account/password/change-password.page.d.ts +36 -0
  395. package/src/app/core/account/token.table.d.ts +27 -0
  396. package/src/app/core/auth/auth.form.d.ts +38 -0
  397. package/src/app/core/auth/auth.modal.d.ts +24 -0
  398. package/src/app/core/auth/auth.module.d.ts +13 -0
  399. package/src/app/core/auth/reset-password.modal.d.ts +29 -0
  400. package/src/app/core/core.module.d.ts +28 -0
  401. package/src/app/core/core.testing.module.d.ts +15 -0
  402. package/src/app/core/form/array/form-array.d.ts +137 -0
  403. package/src/app/core/form/array/testing/form-array-test.module.d.ts +12 -0
  404. package/src/app/core/form/array/testing/form-array.test.d.ts +26 -0
  405. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +37 -0
  406. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
  407. package/src/app/core/form/entity/editor.class.d.ts +84 -0
  408. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +126 -0
  409. package/src/app/core/form/entity/entity-editor.class.d.ts +204 -0
  410. package/src/app/core/form/entity/entity-metadata.component.d.ts +13 -0
  411. package/src/app/core/form/entity/entity.module.d.ts +10 -0
  412. package/src/app/core/form/entity/tab-editor.class.d.ts +66 -0
  413. package/src/app/core/form/form-container.class.d.ts +127 -0
  414. package/src/app/core/form/form.class.d.ts +144 -0
  415. package/src/app/core/form/form.module.d.ts +14 -0
  416. package/src/app/core/form/form.utils.d.ts +287 -0
  417. package/src/app/core/form/list/list.form.d.ts +81 -0
  418. package/src/app/core/form/list/list.module.d.ts +9 -0
  419. package/src/app/core/form/properties/properties.form.d.ts +92 -0
  420. package/src/app/core/form/properties/properties.module.d.ts +11 -0
  421. package/src/app/core/form/properties/properties.table.d.ts +72 -0
  422. package/src/app/core/form/properties/properties.utils.d.ts +59 -0
  423. package/src/app/core/form/properties/property.validator.d.ts +27 -0
  424. package/src/app/core/form/properties/testing/properties-form.test.d.ts +22 -0
  425. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  426. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +16 -0
  427. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +11 -0
  428. package/src/app/core/form/text-popover/text-popover.component.d.ts +80 -0
  429. package/src/app/core/form/text-popover/text-popover.module.d.ts +9 -0
  430. package/src/app/core/form/username/username.form.d.ts +19 -0
  431. package/src/app/core/form/username/username.module.d.ts +9 -0
  432. package/src/app/core/graphql/graphql.module.d.ts +7 -0
  433. package/src/app/core/graphql/graphql.service.d.ts +142 -0
  434. package/src/app/core/graphql/graphql.utils.d.ts +47 -0
  435. package/src/app/core/home/home.d.ts +117 -0
  436. package/src/app/core/home/home.module.d.ts +16 -0
  437. package/src/app/core/icon/icon.component.d.ts +13 -0
  438. package/src/app/core/icon/icon.module.d.ts +9 -0
  439. package/src/app/core/install/install-upgrade-card.component.d.ts +63 -0
  440. package/src/app/core/install/install-upgrade-card.module.d.ts +9 -0
  441. package/src/app/core/menu/menu.component.d.ts +66 -0
  442. package/src/app/core/menu/menu.model.d.ts +144 -0
  443. package/src/app/core/menu/menu.module.d.ts +12 -0
  444. package/src/app/core/menu/menu.service.d.ts +93 -0
  445. package/src/app/core/menu/sub-menu-tab.directive.d.ts +29 -0
  446. package/src/app/core/menu/testing/menu-other.testing.d.ts +15 -0
  447. package/src/app/core/menu/testing/menu.testing.d.ts +51 -0
  448. package/src/app/core/menu/testing/menu.testing.module.d.ts +12 -0
  449. package/src/app/core/offline/update-offline-mode-card.component.d.ts +11 -0
  450. package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
  451. package/src/app/core/peer/select-peer.modal.d.ts +101 -0
  452. package/src/app/core/peer/select-peer.module.d.ts +12 -0
  453. package/src/app/core/register/register-confirm.page.d.ts +24 -0
  454. package/src/app/core/register/register.form.d.ts +49 -0
  455. package/src/app/core/register/register.modal.d.ts +14 -0
  456. package/src/app/core/register/register.module.d.ts +12 -0
  457. package/src/app/core/services/account.service.d.ts +207 -0
  458. package/src/app/core/services/auth-guard.service.d.ts +17 -0
  459. package/src/app/core/services/base-entity-service.class.d.ts +135 -0
  460. package/src/app/core/services/base-graphql-service.class.d.ts +77 -0
  461. package/src/app/core/services/base58.d.ts +7 -0
  462. package/src/app/core/services/config/core.config.d.ts +46 -0
  463. package/src/app/core/services/config.service.d.ts +63 -0
  464. package/src/app/core/services/crypto.service.d.ts +44 -0
  465. package/src/app/core/services/errors.d.ts +65 -0
  466. package/src/app/core/services/local-settings.service.d.ts +100 -0
  467. package/src/app/core/services/model/account.model.d.ts +56 -0
  468. package/src/app/core/services/model/config.model.d.ts +36 -0
  469. package/src/app/core/services/model/department.model.d.ts +11 -0
  470. package/src/app/core/services/model/entity.decorators.d.ts +17 -0
  471. package/src/app/core/services/model/entity.model.d.ts +133 -0
  472. package/src/app/core/services/model/filter.model.d.ts +37 -0
  473. package/src/app/core/services/model/history.model.d.ts +20 -0
  474. package/src/app/core/services/model/model.enum.d.ts +7 -0
  475. package/src/app/core/services/model/node-feature.model.d.ts +14 -0
  476. package/src/app/core/services/model/peer.model.d.ts +35 -0
  477. package/src/app/core/services/model/person.model.d.ts +37 -0
  478. package/src/app/core/services/model/referential.model.d.ts +84 -0
  479. package/src/app/core/services/model/settings.model.d.ts +29 -0
  480. package/src/app/core/services/model/token.model.d.ts +22 -0
  481. package/src/app/core/services/model/tree-item-entity.model.d.ts +61 -0
  482. package/src/app/core/services/network.service.d.ts +160 -0
  483. package/src/app/core/services/network.types.d.ts +4 -0
  484. package/src/app/core/services/network.utils.d.ts +38 -0
  485. package/src/app/core/services/pipes/account.pipes.d.ts +15 -0
  486. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +9 -0
  487. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +11 -0
  488. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  489. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +13 -0
  490. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +15 -0
  491. package/src/app/core/services/platform.service.d.ts +110 -0
  492. package/src/app/core/services/storage/entities-storage.service.d.ts +108 -0
  493. package/src/app/core/services/storage/entity-store.class.d.ts +113 -0
  494. package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
  495. package/src/app/core/services/testing/referential.validator.d.ts +22 -0
  496. package/src/app/core/services/validator/account.validator.d.ts +24 -0
  497. package/src/app/core/services/validator/base.validator.class.d.ts +21 -0
  498. package/src/app/core/services/validator/local-settings.validator.d.ts +18 -0
  499. package/src/app/core/services/validator/user-settings.validator.d.ts +10 -0
  500. package/src/app/core/services/validator/user-token.validator.d.ts +13 -0
  501. package/src/app/core/settings/settings.module.d.ts +12 -0
  502. package/src/app/core/settings/settings.page.d.ts +88 -0
  503. package/src/app/core/table/async-table.class.d.ts +395 -0
  504. package/src/app/core/table/column/actions-column.component.d.ts +62 -0
  505. package/src/app/core/table/column/nav-actions-column.component.d.ts +46 -0
  506. package/src/app/core/table/column/row-field.component.d.ts +40 -0
  507. package/src/app/core/table/entities-async-table-datasource.class.d.ts +103 -0
  508. package/src/app/core/table/entities-table-datasource.class.d.ts +102 -0
  509. package/src/app/core/table/memory-table.class.d.ts +25 -0
  510. package/src/app/core/table/table-select-columns.component.d.ts +22 -0
  511. package/src/app/core/table/table.class.d.ts +400 -0
  512. package/src/app/core/table/table.model.d.ts +31 -0
  513. package/src/app/core/table/table.module.d.ts +14 -0
  514. package/src/app/core/table/table.pipes.d.ts +29 -0
  515. package/src/app/core/table/table.utils.d.ts +13 -0
  516. package/src/app/core/table/testing/table-validator.service.d.ts +17 -0
  517. package/src/app/core/table/testing/table.testing.d.ts +54 -0
  518. package/src/app/core/table/testing/table.testing.module.d.ts +14 -0
  519. package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
  520. package/src/app/core/table/testing/table2.testing.d.ts +48 -0
  521. package/src/app/shared/alerts.d.ts +55 -0
  522. package/src/app/shared/audio/audio.d.ts +45 -0
  523. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  524. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  525. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  526. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  527. package/src/app/shared/constants.d.ts +13 -0
  528. package/src/app/shared/dates.d.ts +61 -0
  529. package/src/app/shared/debug/debug-service.class.d.ts +5 -0
  530. package/src/app/shared/debug/debug.component.d.ts +14 -0
  531. package/src/app/shared/debug/debug.module.d.ts +12 -0
  532. package/src/app/shared/directives/autofocus.directive.d.ts +18 -0
  533. package/src/app/shared/directives/autoresize.directive.d.ts +20 -0
  534. package/src/app/shared/directives/autotitle.directive.d.ts +11 -0
  535. package/src/app/shared/directives/directives.module.d.ts +14 -0
  536. package/src/app/shared/directives/drag-and-drop.directive.d.ts +17 -0
  537. package/src/app/shared/directives/ng-var.directive.d.ts +12 -0
  538. package/src/app/shared/directives/resizable/resizable.component.d.ts +21 -0
  539. package/src/app/shared/directives/resizable/resizable.directive.d.ts +12 -0
  540. package/src/app/shared/directives/resizable/resizable.module.d.ts +8 -0
  541. package/src/app/shared/directives/throttled-click.directive.d.ts +16 -0
  542. package/src/app/shared/events.d.ts +29 -0
  543. package/src/app/shared/file/csv.utils.d.ts +30 -0
  544. package/src/app/shared/file/file.service.d.ts +23 -0
  545. package/src/app/shared/file/file.utils.d.ts +20 -0
  546. package/src/app/shared/file/images.utils.d.ts +36 -0
  547. package/src/app/shared/file/json.utils.d.ts +19 -0
  548. package/src/app/shared/file/uri.utils.d.ts +8 -0
  549. package/src/app/shared/file/url.utils.d.ts +99 -0
  550. package/src/app/shared/focusable.d.ts +4 -0
  551. package/src/app/shared/form/field.component.d.ts +85 -0
  552. package/src/app/shared/form/field.model.d.ts +82 -0
  553. package/src/app/shared/form/loading-spinner.d.ts +8 -0
  554. package/src/app/shared/forms.d.ts +162 -0
  555. package/src/app/shared/functions.d.ts +206 -0
  556. package/src/app/shared/geolocation/geolocation.utils.d.ts +19 -0
  557. package/src/app/shared/gesture/gesture-config.d.ts +15 -0
  558. package/src/app/shared/gesture/hammer.utils.d.ts +16 -0
  559. package/src/app/shared/graph/colors.utils.d.ts +17 -0
  560. package/src/app/shared/graph/graph-colors.d.ts +63 -0
  561. package/src/app/shared/guard/component-dirty.guard.d.ts +14 -0
  562. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +8 -0
  563. package/src/app/shared/hotkeys/hotkeys.service.d.ts +48 -0
  564. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +11 -0
  565. package/src/app/shared/http/http.utils.d.ts +28 -0
  566. package/src/app/shared/image/gallery/image-gallery.component.d.ts +137 -0
  567. package/src/app/shared/image/gallery/image-gallery.module.d.ts +15 -0
  568. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  569. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  570. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +16 -0
  571. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +13 -0
  572. package/src/app/shared/image/image.model.d.ts +7 -0
  573. package/src/app/shared/image/image.module.d.ts +8 -0
  574. package/src/app/shared/image/image.service.d.ts +36 -0
  575. package/src/app/shared/inputs.d.ts +36 -0
  576. package/src/app/shared/interceptors/progess.interceptor.d.ts +8 -0
  577. package/src/app/shared/logging/log-level.model.d.ts +38 -0
  578. package/src/app/shared/logging/logger.model.d.ts +68 -0
  579. package/src/app/shared/logging/logging-service.class.d.ts +39 -0
  580. package/src/app/shared/logging/logging-service.config.d.ts +25 -0
  581. package/src/app/shared/logging/logging-service.module.d.ts +9 -0
  582. package/src/app/shared/markdown/markdown.component.d.ts +86 -0
  583. package/src/app/shared/markdown/markdown.directive.d.ts +13 -0
  584. package/src/app/shared/markdown/markdown.modal.d.ts +49 -0
  585. package/src/app/shared/markdown/markdown.module.d.ts +17 -0
  586. package/src/app/shared/markdown/markdown.service.d.ts +37 -0
  587. package/src/app/shared/markdown/markdown.utils.d.ts +26 -0
  588. package/src/app/shared/markdown/testing/markdown.test.d.ts +18 -0
  589. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +12 -0
  590. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +74 -0
  591. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +211 -0
  592. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +22 -0
  593. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +5 -0
  594. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +48 -0
  595. package/src/app/shared/material/badge/badge.directive.d.ts +43 -0
  596. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  597. package/src/app/shared/material/badge/badge.test.d.ts +21 -0
  598. package/src/app/shared/material/boolean/boolean.module.d.ts +20 -0
  599. package/src/app/shared/material/boolean/material.boolean.d.ts +93 -0
  600. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +26 -0
  601. package/src/app/shared/material/chips/chips.module.d.ts +21 -0
  602. package/src/app/shared/material/chips/material.chips.d.ts +164 -0
  603. package/src/app/shared/material/chips/testing/chips.test.d.ts +32 -0
  604. package/src/app/shared/material/datetime/datetime.module.d.ts +24 -0
  605. package/src/app/shared/material/datetime/material.date.d.ts +90 -0
  606. package/src/app/shared/material/datetime/material.dateshort.d.ts +89 -0
  607. package/src/app/shared/material/datetime/material.datetime.d.ts +116 -0
  608. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +37 -0
  609. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +32 -0
  610. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +31 -0
  611. package/src/app/shared/material/duration/duration.module.d.ts +18 -0
  612. package/src/app/shared/material/duration/duration.utils.d.ts +2 -0
  613. package/src/app/shared/material/duration/material.duration.d.ts +64 -0
  614. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +23 -0
  615. package/src/app/shared/material/latlong/latlong.utils.d.ts +59 -0
  616. package/src/app/shared/material/latlong/material.latlong-input.d.ts +85 -0
  617. package/src/app/shared/material/latlong/material.latlong.d.ts +90 -0
  618. package/src/app/shared/material/latlong/material.latlong.module.d.ts +21 -0
  619. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +28 -0
  620. package/src/app/shared/material/material.animations.d.ts +8 -0
  621. package/src/app/shared/material/material.config.d.ts +3 -0
  622. package/src/app/shared/material/material.module.d.ts +45 -0
  623. package/src/app/shared/material/material.testing.module.d.ts +32 -0
  624. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +12 -0
  625. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +10 -0
  626. package/src/app/shared/material/swipe/material.swipe.d.ts +89 -0
  627. package/src/app/shared/material/swipe/swipe.module.d.ts +16 -0
  628. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +22 -0
  629. package/src/app/shared/material/test/test-component.d.ts +75 -0
  630. package/src/app/shared/material/testing/common.test.d.ts +25 -0
  631. package/src/app/shared/material/text/testing/text-form.testing.d.ts +19 -0
  632. package/src/app/shared/material/text/text-form.component.d.ts +66 -0
  633. package/src/app/shared/material/text/text-form.module.d.ts +16 -0
  634. package/src/app/shared/modules.d.ts +9 -0
  635. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +62 -0
  636. package/src/app/shared/named-filter/named-filter.model.d.ts +32 -0
  637. package/src/app/shared/named-filter/named-filter.module.d.ts +13 -0
  638. package/src/app/shared/named-filter/named-filter.service.d.ts +32 -0
  639. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +34 -0
  640. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +10 -0
  641. package/src/app/shared/observables.d.ts +30 -0
  642. package/src/app/shared/pipes/arrays.pipe.d.ts +82 -0
  643. package/src/app/shared/pipes/badge.pipes.d.ts +7 -0
  644. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  645. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +25 -0
  646. package/src/app/shared/pipes/date-format.pipe.d.ts +35 -0
  647. package/src/app/shared/pipes/date-from-now.pipe.d.ts +12 -0
  648. package/src/app/shared/pipes/dates.pipe.d.ts +10 -0
  649. package/src/app/shared/pipes/display-with.pipe.d.ts +8 -0
  650. package/src/app/shared/pipes/duration.pipe.d.ts +23 -0
  651. package/src/app/shared/pipes/file-size.pipe.d.ts +30 -0
  652. package/src/app/shared/pipes/form.pipes.d.ts +69 -0
  653. package/src/app/shared/pipes/highlight.pipe.d.ts +11 -0
  654. package/src/app/shared/pipes/html.pipes.d.ts +22 -0
  655. package/src/app/shared/pipes/latlong-format.pipe.d.ts +20 -0
  656. package/src/app/shared/pipes/maps.pipe.d.ts +23 -0
  657. package/src/app/shared/pipes/maskito.pipe.d.ts +14 -0
  658. package/src/app/shared/pipes/math.pipes.d.ts +26 -0
  659. package/src/app/shared/pipes/ng-init.pipe.d.ts +8 -0
  660. package/src/app/shared/pipes/number-format.pipe.d.ts +9 -0
  661. package/src/app/shared/pipes/observable.pipes.d.ts +25 -0
  662. package/src/app/shared/pipes/pipes.module.d.ts +35 -0
  663. package/src/app/shared/pipes/property.pipes.d.ts +41 -0
  664. package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
  665. package/src/app/shared/pipes/string.pipes.d.ts +68 -0
  666. package/src/app/shared/pipes/translate-context.pipe.d.ts +17 -0
  667. package/src/app/shared/pipes/types.pipes.d.ts +30 -0
  668. package/src/app/shared/pipes/url.pipes.d.ts +27 -0
  669. package/src/app/shared/platforms.d.ts +16 -0
  670. package/src/app/shared/print/print.service.d.ts +94 -0
  671. package/src/app/shared/regexps.d.ts +32 -0
  672. package/src/app/shared/rx-state/rx-state.decorators.d.ts +43 -0
  673. package/src/app/shared/rx-state/rx-state.module.d.ts +10 -0
  674. package/src/app/shared/rx-state/rx-state.types.d.ts +4 -0
  675. package/src/app/shared/services/entity-service.class.d.ts +75 -0
  676. package/src/app/shared/services/job.utils.d.ts +20 -0
  677. package/src/app/shared/services/memory-entity-service.class.d.ts +79 -0
  678. package/src/app/shared/services/progress-bar.service.d.ts +20 -0
  679. package/src/app/shared/services/startable-observable-service.class.d.ts +36 -0
  680. package/src/app/shared/services/startable-service.class.d.ts +37 -0
  681. package/src/app/shared/services/translate-context.service.d.ts +29 -0
  682. package/src/app/shared/services/validator-service.class.d.ts +11 -0
  683. package/src/app/shared/services.d.ts +17 -0
  684. package/src/app/shared/shared-routing.module.d.ts +23 -0
  685. package/src/app/shared/shared.module.d.ts +33 -0
  686. package/src/app/shared/shared.testing.module.d.ts +20 -0
  687. package/src/app/shared/storage/storage-explorer.component.d.ts +59 -0
  688. package/src/app/shared/storage/storage-explorer.module.d.ts +13 -0
  689. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +9 -0
  690. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +10 -0
  691. package/src/app/shared/storage/storage.service.d.ts +22 -0
  692. package/src/app/shared/storage/storage.utils.d.ts +19 -0
  693. package/src/app/shared/testing/maskito.test.d.ts +10 -0
  694. package/src/app/shared/testing/observable.test.d.ts +25 -0
  695. package/src/app/shared/testing/tests.page.d.ts +20 -0
  696. package/src/app/shared/toast/toast.testing.d.ts +15 -0
  697. package/src/app/shared/toast/toast.testing.module.d.ts +12 -0
  698. package/src/app/shared/toast/toasts.d.ts +16 -0
  699. package/src/app/shared/toolbar/modal-toolbar.d.ts +21 -0
  700. package/src/app/shared/toolbar/toolbar.d.ts +70 -0
  701. package/src/app/shared/toolbar/toolbar.module.d.ts +16 -0
  702. package/src/app/shared/types.d.ts +36 -0
  703. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +21 -0
  704. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +11 -0
  705. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +41 -0
  706. package/src/app/shared/upload-file/upload-file.component.d.ts +50 -0
  707. package/src/app/shared/upload-file/upload-file.model.d.ts +30 -0
  708. package/src/app/shared/validator/form-error-adapter.class.d.ts +33 -0
  709. package/src/app/shared/validator/validators.d.ts +139 -0
  710. package/src/app/shared/version/versions.d.ts +26 -0
  711. package/src/app/social/config/social.config.d.ts +4 -0
  712. package/src/app/social/feed/discourse/discourse-feed.service.d.ts +55 -0
  713. package/src/app/social/feed/discourse/discourse.model.d.ts +7 -0
  714. package/src/app/social/feed/discourse/discourse.utils.d.ts +44 -0
  715. package/src/app/social/feed/feed.component.d.ts +39 -0
  716. package/src/app/social/feed/feed.directive.d.ts +32 -0
  717. package/src/app/social/feed/feed.model.d.ts +69 -0
  718. package/src/app/social/feed/feed.module.d.ts +11 -0
  719. package/src/app/social/feed/feed.service.d.ts +13 -0
  720. package/src/app/social/job/job.module.d.ts +12 -0
  721. package/src/app/social/job/progression/job-progression.component.d.ts +23 -0
  722. package/src/app/social/job/progression/job-progression.icon.d.ts +62 -0
  723. package/src/app/social/job/progression/job-progression.list.d.ts +19 -0
  724. package/src/app/social/job/progression/job-progression.model.d.ts +10 -0
  725. package/src/app/social/job/progression/job-progression.service.d.ts +33 -0
  726. package/src/app/social/job/testing/job-progression.testing.d.ts +13 -0
  727. package/src/app/social/job/testing/job-progression.testing.service.d.ts +9 -0
  728. package/src/app/social/job/testing/job.testing.module.d.ts +11 -0
  729. package/src/app/social/message/message.form.d.ts +36 -0
  730. package/src/app/social/message/message.modal.d.ts +43 -0
  731. package/src/app/social/message/message.model.d.ts +33 -0
  732. package/src/app/social/message/message.module.d.ts +12 -0
  733. package/src/app/social/message/message.service.d.ts +32 -0
  734. package/src/app/social/social.errors.d.ts +9 -0
  735. package/src/app/social/social.module.d.ts +20 -0
  736. package/src/app/social/social.testing.module.d.ts +13 -0
  737. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +46 -0
  738. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +75 -0
  739. package/src/app/social/user-event/notification/user-event-notification.modal.d.ts +36 -0
  740. package/src/app/social/user-event/testing/user-event.testing.d.ts +44 -0
  741. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +42 -0
  742. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +11 -0
  743. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +42 -0
  744. package/src/app/social/user-event/user-event.model.d.ts +44 -0
  745. package/src/app/social/user-event/user-event.module.d.ts +14 -0
  746. package/src/app/social/user-event/user-event.service.d.ts +124 -0
  747. package/src/environments/environment.class.d.ts +83 -0
  748. package/src/environments/environment.d.ts +2 -0
  749. package/src/environments/environment.loader.d.ts +24 -0
  750. package/.editorconfig +0 -24
  751. package/.eslintrc.json +0 -95
  752. package/.gitattribute +0 -1
  753. package/.github/CONTRIBUTING.md +0 -10
  754. package/.github/ISSUE_TEMPLATE.md +0 -6
  755. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  756. package/.github/github_disclaimer.md +0 -14
  757. package/.gitlab-ci.yml +0 -46
  758. package/.graphqlconfig +0 -15
  759. package/.prettierignore +0 -9
  760. package/.prettierrc.json +0 -17
  761. package/angular.json +0 -239
  762. package/capacitor.config.ts +0 -49
  763. package/graphql.config.yml +0 -13
  764. package/ionic.config.json +0 -7
  765. package/karma.conf.js +0 -38
  766. package/ng-package.json +0 -21
  767. package/public_api.ts +0 -436
  768. package/resources/README.md +0 -7
  769. package/resources/icon/TODO.md +0 -11
  770. package/resources/icon.png +0 -0
  771. package/resources/icon.png.md5 +0 -1
  772. package/resources/icon.xcf +0 -0
  773. package/resources/ios/icon/icon-1024.png +0 -0
  774. package/resources/ios/icon/icon-108@2x.png +0 -0
  775. package/resources/ios/icon/icon-20.png +0 -0
  776. package/resources/ios/icon/icon-20@2x.png +0 -0
  777. package/resources/ios/icon/icon-20@3x.png +0 -0
  778. package/resources/ios/icon/icon-24@2x.png +0 -0
  779. package/resources/ios/icon/icon-27.5@2x.png +0 -0
  780. package/resources/ios/icon/icon-29.png +0 -0
  781. package/resources/ios/icon/icon-29@2x.png +0 -0
  782. package/resources/ios/icon/icon-29@3x.png +0 -0
  783. package/resources/ios/icon/icon-40.png +0 -0
  784. package/resources/ios/icon/icon-40@2x.png +0 -0
  785. package/resources/ios/icon/icon-40@3x.png +0 -0
  786. package/resources/ios/icon/icon-44@2x.png +0 -0
  787. package/resources/ios/icon/icon-50.png +0 -0
  788. package/resources/ios/icon/icon-50@2x.png +0 -0
  789. package/resources/ios/icon/icon-60.png +0 -0
  790. package/resources/ios/icon/icon-60@2x.png +0 -0
  791. package/resources/ios/icon/icon-60@3x.png +0 -0
  792. package/resources/ios/icon/icon-72.png +0 -0
  793. package/resources/ios/icon/icon-72@2x.png +0 -0
  794. package/resources/ios/icon/icon-76.png +0 -0
  795. package/resources/ios/icon/icon-76@2x.png +0 -0
  796. package/resources/ios/icon/icon-83.5@2x.png +0 -0
  797. package/resources/ios/icon/icon-86@2x.png +0 -0
  798. package/resources/ios/icon/icon-98@2x.png +0 -0
  799. package/resources/ios/icon/icon-small.png +0 -0
  800. package/resources/ios/icon/icon-small@2x.png +0 -0
  801. package/resources/ios/icon/icon-small@3x.png +0 -0
  802. package/resources/ios/icon/icon.png +0 -0
  803. package/resources/ios/icon/icon@2x.png +0 -0
  804. package/resources/ios/splash/Default-1792h~iphone.png +0 -0
  805. package/resources/ios/splash/Default-2436h.png +0 -0
  806. package/resources/ios/splash/Default-2688h~iphone.png +0 -0
  807. package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
  808. package/resources/ios/splash/Default-667h.png +0 -0
  809. package/resources/ios/splash/Default-736h.png +0 -0
  810. package/resources/ios/splash/Default-Landscape-1792h~iphone.png +0 -0
  811. package/resources/ios/splash/Default-Landscape-2436h.png +0 -0
  812. package/resources/ios/splash/Default-Landscape-2688h~iphone.png +0 -0
  813. package/resources/ios/splash/Default-Landscape-736h.png +0 -0
  814. package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
  815. package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
  816. package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
  817. package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
  818. package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
  819. package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
  820. package/resources/ios/splash/Default@2x~iphone.png +0 -0
  821. package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
  822. package/resources/ios/splash/Default~iphone.png +0 -0
  823. package/resources/splash.png +0 -0
  824. package/resources/splash.png.md5 +0 -1
  825. package/scripts/build-android.sh +0 -18
  826. package/scripts/docker-start.sh +0 -6
  827. package/scripts/emulate-android.sh +0 -17
  828. package/scripts/env-android.sh +0 -83
  829. package/scripts/env-clean.sh +0 -23
  830. package/scripts/env-global.sh +0 -154
  831. package/scripts/install-android-sdk-tools.sh +0 -73
  832. package/scripts/ionic-update.sh +0 -24
  833. package/scripts/node/build-i18n.js +0 -37
  834. package/scripts/node/playground.ts +0 -9
  835. package/scripts/node/resources.js +0 -108
  836. package/scripts/release.sh +0 -162
  837. package/scripts/run-android.sh +0 -59
  838. package/scripts/test.sh +0 -19
  839. package/src/app/admin/admin-routing.module.ts +0 -26
  840. package/src/app/admin/admin.module.ts +0 -20
  841. package/src/app/admin/services/filter/person.filter.ts +0 -86
  842. package/src/app/admin/services/person.service.ts +0 -244
  843. package/src/app/admin/services/validator/person.validator.ts +0 -86
  844. package/src/app/admin/users/users.html +0 -613
  845. package/src/app/admin/users/users.module.ts +0 -32
  846. package/src/app/admin/users/users.scss +0 -80
  847. package/src/app/admin/users/users.ts +0 -387
  848. package/src/app/app-routing.module.ts +0 -165
  849. package/src/app/app.component.html +0 -18
  850. package/src/app/app.component.scss +0 -4
  851. package/src/app/app.component.ts +0 -257
  852. package/src/app/app.module.ts +0 -366
  853. package/src/app/core/about/about.modal.html +0 -145
  854. package/src/app/core/about/about.modal.scss +0 -22
  855. package/src/app/core/about/about.modal.ts +0 -69
  856. package/src/app/core/about/about.module.ts +0 -14
  857. package/src/app/core/account/account.module.ts +0 -43
  858. package/src/app/core/account/account.page.html +0 -329
  859. package/src/app/core/account/account.page.scss +0 -20
  860. package/src/app/core/account/account.page.ts +0 -389
  861. package/src/app/core/account/new-token.form.html +0 -90
  862. package/src/app/core/account/new-token.form.ts +0 -99
  863. package/src/app/core/account/new-token.modal.html +0 -52
  864. package/src/app/core/account/new-token.modal.ts +0 -68
  865. package/src/app/core/account/password/change-password.form.html +0 -62
  866. package/src/app/core/account/password/change-password.form.scss +0 -0
  867. package/src/app/core/account/password/change-password.form.ts +0 -58
  868. package/src/app/core/account/password/change-password.module.ts +0 -14
  869. package/src/app/core/account/password/change-password.page.html +0 -41
  870. package/src/app/core/account/password/change-password.page.scss +0 -49
  871. package/src/app/core/account/password/change-password.page.ts +0 -158
  872. package/src/app/core/account/token.table.html +0 -160
  873. package/src/app/core/account/token.table.scss +0 -7
  874. package/src/app/core/account/token.table.ts +0 -160
  875. package/src/app/core/auth/auth.form.html +0 -108
  876. package/src/app/core/auth/auth.form.scss +0 -0
  877. package/src/app/core/auth/auth.form.ts +0 -165
  878. package/src/app/core/auth/auth.modal.html +0 -50
  879. package/src/app/core/auth/auth.modal.scss +0 -0
  880. package/src/app/core/auth/auth.modal.ts +0 -78
  881. package/src/app/core/auth/auth.module.ts +0 -35
  882. package/src/app/core/auth/reset-password.modal.html +0 -59
  883. package/src/app/core/auth/reset-password.modal.ts +0 -83
  884. package/src/app/core/core.module.ts +0 -72
  885. package/src/app/core/core.testing.module.ts +0 -80
  886. package/src/app/core/form/array/form-array.ts +0 -409
  887. package/src/app/core/form/array/testing/form-array-test.module.ts +0 -15
  888. package/src/app/core/form/array/testing/form-array.test.html +0 -196
  889. package/src/app/core/form/array/testing/form-array.test.ts +0 -119
  890. package/src/app/core/form/buttons/form-buttons-bar.component.html +0 -82
  891. package/src/app/core/form/buttons/form-buttons-bar.component.scss +0 -19
  892. package/src/app/core/form/buttons/form-buttons-bar.component.ts +0 -89
  893. package/src/app/core/form/buttons/form-buttons-bar.module.ts +0 -20
  894. package/src/app/core/form/entity/editor.class.ts +0 -295
  895. package/src/app/core/form/entity/entity-editor-modal.class.ts +0 -494
  896. package/src/app/core/form/entity/entity-editor.class.ts +0 -894
  897. package/src/app/core/form/entity/entity-metadata.component.html +0 -57
  898. package/src/app/core/form/entity/entity-metadata.component.scss +0 -40
  899. package/src/app/core/form/entity/entity-metadata.component.ts +0 -18
  900. package/src/app/core/form/entity/entity.module.ts +0 -20
  901. package/src/app/core/form/entity/tab-editor.class.ts +0 -224
  902. package/src/app/core/form/form-container.class.ts +0 -381
  903. package/src/app/core/form/form.class.ts +0 -377
  904. package/src/app/core/form/form.module.ts +0 -38
  905. package/src/app/core/form/form.utils.ts +0 -336
  906. package/src/app/core/form/list/list.form.html +0 -68
  907. package/src/app/core/form/list/list.form.scss +0 -40
  908. package/src/app/core/form/list/list.form.ts +0 -266
  909. package/src/app/core/form/list/list.module.ts +0 -20
  910. package/src/app/core/form/properties/properties.form.html +0 -160
  911. package/src/app/core/form/properties/properties.form.scss +0 -21
  912. package/src/app/core/form/properties/properties.form.ts +0 -331
  913. package/src/app/core/form/properties/properties.module.ts +0 -24
  914. package/src/app/core/form/properties/properties.table.html +0 -228
  915. package/src/app/core/form/properties/properties.table.scss +0 -0
  916. package/src/app/core/form/properties/properties.table.ts +0 -275
  917. package/src/app/core/form/properties/properties.utils.ts +0 -391
  918. package/src/app/core/form/properties/property.validator.ts +0 -82
  919. package/src/app/core/form/properties/testing/properties-form.test.html +0 -23
  920. package/src/app/core/form/properties/testing/properties-form.test.ts +0 -109
  921. package/src/app/core/form/properties/testing/properties-form.testing.module.ts +0 -14
  922. package/src/app/core/form/text-popover/testing/text-popover.testing.html +0 -50
  923. package/src/app/core/form/text-popover/testing/text-popover.testing.module.ts +0 -21
  924. package/src/app/core/form/text-popover/testing/text-popover.testing.ts +0 -76
  925. package/src/app/core/form/text-popover/text-popover.component.html +0 -89
  926. package/src/app/core/form/text-popover/text-popover.component.scss +0 -7
  927. package/src/app/core/form/text-popover/text-popover.component.ts +0 -176
  928. package/src/app/core/form/text-popover/text-popover.module.ts +0 -19
  929. package/src/app/core/form/username/username.form.html +0 -27
  930. package/src/app/core/form/username/username.form.ts +0 -44
  931. package/src/app/core/form/username/username.module.ts +0 -12
  932. package/src/app/core/graphql/graphql.module.ts +0 -7
  933. package/src/app/core/graphql/graphql.service.ts +0 -962
  934. package/src/app/core/graphql/graphql.utils.ts +0 -166
  935. package/src/app/core/home/home.html +0 -327
  936. package/src/app/core/home/home.module.ts +0 -31
  937. package/src/app/core/home/home.scss +0 -300
  938. package/src/app/core/home/home.ts +0 -453
  939. package/src/app/core/icon/icon.component.html +0 -19
  940. package/src/app/core/icon/icon.component.ts +0 -22
  941. package/src/app/core/icon/icon.module.ts +0 -13
  942. package/src/app/core/install/install-upgrade-card.component.html +0 -144
  943. package/src/app/core/install/install-upgrade-card.component.scss +0 -3
  944. package/src/app/core/install/install-upgrade-card.component.ts +0 -445
  945. package/src/app/core/install/install-upgrade-card.module.ts +0 -18
  946. package/src/app/core/menu/menu.component.html +0 -219
  947. package/src/app/core/menu/menu.component.scss +0 -304
  948. package/src/app/core/menu/menu.component.ts +0 -251
  949. package/src/app/core/menu/menu.filter.ts +0 -28
  950. package/src/app/core/menu/menu.model.ts +0 -356
  951. package/src/app/core/menu/menu.module.ts +0 -27
  952. package/src/app/core/menu/menu.service.ts +0 -727
  953. package/src/app/core/menu/sub-menu-tab.directive.ts +0 -99
  954. package/src/app/core/menu/testing/menu-other.testing.ts +0 -57
  955. package/src/app/core/menu/testing/menu.testing.html +0 -143
  956. package/src/app/core/menu/testing/menu.testing.module.ts +0 -52
  957. package/src/app/core/menu/testing/menu.testing.scss +0 -5
  958. package/src/app/core/menu/testing/menu.testing.ts +0 -175
  959. package/src/app/core/offline/update-offline-mode-card.component.html +0 -39
  960. package/src/app/core/offline/update-offline-mode-card.component.scss +0 -3
  961. package/src/app/core/offline/update-offline-mode-card.component.ts +0 -23
  962. package/src/app/core/offline/update-offline-mode-card.module.ts +0 -20
  963. package/src/app/core/peer/select-peer.modal.html +0 -317
  964. package/src/app/core/peer/select-peer.modal.scss +0 -41
  965. package/src/app/core/peer/select-peer.modal.ts +0 -366
  966. package/src/app/core/peer/select-peer.module.ts +0 -23
  967. package/src/app/core/register/register-confirm.page.html +0 -51
  968. package/src/app/core/register/register-confirm.page.scss +0 -56
  969. package/src/app/core/register/register-confirm.page.ts +0 -90
  970. package/src/app/core/register/register.form.html +0 -143
  971. package/src/app/core/register/register.form.scss +0 -10
  972. package/src/app/core/register/register.form.ts +0 -218
  973. package/src/app/core/register/register.modal.html +0 -66
  974. package/src/app/core/register/register.modal.ts +0 -50
  975. package/src/app/core/register/register.module.ts +0 -15
  976. package/src/app/core/services/account.service.ts +0 -1567
  977. package/src/app/core/services/auth-guard.service.ts +0 -70
  978. package/src/app/core/services/base-entity-service.class.ts +0 -659
  979. package/src/app/core/services/base-graphql-service.class.ts +0 -319
  980. package/src/app/core/services/base58.ts +0 -90
  981. package/src/app/core/services/config/core.config.ts +0 -263
  982. package/src/app/core/services/config.service.ts +0 -425
  983. package/src/app/core/services/crypto.service.ts +0 -126
  984. package/src/app/core/services/errors.ts +0 -80
  985. package/src/app/core/services/local-settings.service.spec.ts +0 -39
  986. package/src/app/core/services/local-settings.service.ts +0 -610
  987. package/src/app/core/services/model/account.model.ts +0 -188
  988. package/src/app/core/services/model/config.model.ts +0 -116
  989. package/src/app/core/services/model/department.model.ts +0 -34
  990. package/src/app/core/services/model/entity.decorators.ts +0 -110
  991. package/src/app/core/services/model/entity.model.ts +0 -409
  992. package/src/app/core/services/model/filter.model.ts +0 -127
  993. package/src/app/core/services/model/history.model.ts +0 -25
  994. package/src/app/core/services/model/model.enum.ts +0 -10
  995. package/src/app/core/services/model/node-feature.model.ts +0 -31
  996. package/src/app/core/services/model/peer.model.ts +0 -119
  997. package/src/app/core/services/model/person.model.ts +0 -122
  998. package/src/app/core/services/model/referential.model.ts +0 -253
  999. package/src/app/core/services/model/settings.model.ts +0 -37
  1000. package/src/app/core/services/model/token.model.ts +0 -60
  1001. package/src/app/core/services/model/tree-item-entity.model.ts +0 -256
  1002. package/src/app/core/services/network.service.spec.ts +0 -47
  1003. package/src/app/core/services/network.service.ts +0 -771
  1004. package/src/app/core/services/network.types.ts +0 -7
  1005. package/src/app/core/services/network.utils.ts +0 -83
  1006. package/src/app/core/services/pipes/account.pipes.ts +0 -22
  1007. package/src/app/core/services/pipes/department-to-string.pipe.ts +0 -13
  1008. package/src/app/core/services/pipes/person-to-string.pipe.ts +0 -13
  1009. package/src/app/core/services/pipes/pipes.module.ts +0 -30
  1010. package/src/app/core/services/pipes/referential-to-string.pipe.ts +0 -18
  1011. package/src/app/core/services/pipes/usage-mode.pipes.ts +0 -23
  1012. package/src/app/core/services/platform.service.spec.ts +0 -50
  1013. package/src/app/core/services/platform.service.ts +0 -694
  1014. package/src/app/core/services/storage/entities-storage.service.ts +0 -557
  1015. package/src/app/core/services/storage/entity-store.class.ts +0 -589
  1016. package/src/app/core/services/testing/local-settings.config.ts +0 -35
  1017. package/src/app/core/services/testing/referential-filter.model.ts +0 -28
  1018. package/src/app/core/services/testing/referential.validator.ts +0 -58
  1019. package/src/app/core/services/testing/user-settings.config.ts +0 -77
  1020. package/src/app/core/services/validator/account.validator.ts +0 -50
  1021. package/src/app/core/services/validator/base.validator.class.ts +0 -51
  1022. package/src/app/core/services/validator/local-settings.validator.ts +0 -59
  1023. package/src/app/core/services/validator/user-settings.validator.ts +0 -22
  1024. package/src/app/core/services/validator/user-token.validator.ts +0 -54
  1025. package/src/app/core/settings/settings.module.ts +0 -15
  1026. package/src/app/core/settings/settings.page.html +0 -300
  1027. package/src/app/core/settings/settings.page.ts +0 -455
  1028. package/src/app/core/table/async-table.class.ts +0 -2021
  1029. package/src/app/core/table/column/actions-column.component.html +0 -219
  1030. package/src/app/core/table/column/actions-column.component.scss +0 -17
  1031. package/src/app/core/table/column/actions-column.component.ts +0 -83
  1032. package/src/app/core/table/column/nav-actions-column.component.html +0 -119
  1033. package/src/app/core/table/column/nav-actions-column.component.ts +0 -108
  1034. package/src/app/core/table/column/row-field.component.html +0 -43
  1035. package/src/app/core/table/column/row-field.component.scss +0 -0
  1036. package/src/app/core/table/column/row-field.component.ts +0 -63
  1037. package/src/app/core/table/entities-async-table-datasource.class.ts +0 -515
  1038. package/src/app/core/table/entities-table-datasource.class.ts +0 -503
  1039. package/src/app/core/table/memory-table.class.ts +0 -56
  1040. package/src/app/core/table/table-select-columns.component.html +0 -56
  1041. package/src/app/core/table/table-select-columns.component.ts +0 -49
  1042. package/src/app/core/table/table.class.ts +0 -2082
  1043. package/src/app/core/table/table.model.ts +0 -39
  1044. package/src/app/core/table/table.module.ts +0 -28
  1045. package/src/app/core/table/table.pipes.ts +0 -87
  1046. package/src/app/core/table/table.utils.ts +0 -42
  1047. package/src/app/core/table/testing/multi-table.testing.html +0 -456
  1048. package/src/app/core/table/testing/multi-table.testing.ts +0 -263
  1049. package/src/app/core/table/testing/table-validator.service.ts +0 -29
  1050. package/src/app/core/table/testing/table.testing.html +0 -556
  1051. package/src/app/core/table/testing/table.testing.module.ts +0 -16
  1052. package/src/app/core/table/testing/table.testing.scss +0 -32
  1053. package/src/app/core/table/testing/table.testing.ts +0 -329
  1054. package/src/app/core/table/testing/table2-validator.service.ts +0 -19
  1055. package/src/app/core/table/testing/table2.testing.html +0 -470
  1056. package/src/app/core/table/testing/table2.testing.scss +0 -25
  1057. package/src/app/core/table/testing/table2.testing.ts +0 -274
  1058. package/src/app/shared/alerts.ts +0 -296
  1059. package/src/app/shared/audio/audio.testing.html +0 -29
  1060. package/src/app/shared/audio/audio.testing.module.ts +0 -21
  1061. package/src/app/shared/audio/audio.testing.ts +0 -27
  1062. package/src/app/shared/audio/audio.ts +0 -273
  1063. package/src/app/shared/base64.utils.ts +0 -66
  1064. package/src/app/shared/capacitor/keyboard.ts +0 -38
  1065. package/src/app/shared/capacitor/plugins.ts +0 -12
  1066. package/src/app/shared/constants.ts +0 -19
  1067. package/src/app/shared/dates.ts +0 -206
  1068. package/src/app/shared/debug/debug-service.class.ts +0 -7
  1069. package/src/app/shared/debug/debug.component.html +0 -13
  1070. package/src/app/shared/debug/debug.component.scss +0 -21
  1071. package/src/app/shared/debug/debug.component.spec.ts +0 -24
  1072. package/src/app/shared/debug/debug.component.ts +0 -25
  1073. package/src/app/shared/debug/debug.module.ts +0 -14
  1074. package/src/app/shared/directives/autofocus.directive.ts +0 -93
  1075. package/src/app/shared/directives/autoresize.directive.ts +0 -67
  1076. package/src/app/shared/directives/autotitle.directive.ts +0 -17
  1077. package/src/app/shared/directives/directives.module.ts +0 -16
  1078. package/src/app/shared/directives/drag-and-drop.directive.ts +0 -46
  1079. package/src/app/shared/directives/ng-var.directive.ts +0 -31
  1080. package/src/app/shared/directives/resizable/resizable.component.ts +0 -48
  1081. package/src/app/shared/directives/resizable/resizable.directive.ts +0 -43
  1082. package/src/app/shared/directives/resizable/resizable.module.ts +0 -9
  1083. package/src/app/shared/directives/resizable/resizable.style.scss +0 -37
  1084. package/src/app/shared/directives/resizable/resizable.template.html +0 -6
  1085. package/src/app/shared/directives/throttled-click.directive.ts +0 -36
  1086. package/src/app/shared/events.ts +0 -93
  1087. package/src/app/shared/file/csv.utils.ts +0 -123
  1088. package/src/app/shared/file/file.service.ts +0 -129
  1089. package/src/app/shared/file/file.utils.ts +0 -142
  1090. package/src/app/shared/file/images.utils.ts +0 -214
  1091. package/src/app/shared/file/json.utils.ts +0 -82
  1092. package/src/app/shared/file/uri.utils.ts +0 -31
  1093. package/src/app/shared/file/url.utils.ts +0 -193
  1094. package/src/app/shared/focusable.ts +0 -8
  1095. package/src/app/shared/form/field.component.html +0 -380
  1096. package/src/app/shared/form/field.component.scss +0 -7
  1097. package/src/app/shared/form/field.component.ts +0 -344
  1098. package/src/app/shared/form/field.model.ts +0 -158
  1099. package/src/app/shared/form/loading-spinner.ts +0 -16
  1100. package/src/app/shared/forms.ts +0 -651
  1101. package/src/app/shared/functions.spec.ts +0 -197
  1102. package/src/app/shared/functions.ts +0 -694
  1103. package/src/app/shared/geolocation/geolocation.utils.ts +0 -105
  1104. package/src/app/shared/gesture/gesture-config.ts +0 -43
  1105. package/src/app/shared/gesture/hammer.utils.ts +0 -14
  1106. package/src/app/shared/graph/colors.utils.ts +0 -69
  1107. package/src/app/shared/graph/graph-colors.ts +0 -270
  1108. package/src/app/shared/guard/component-dirty.guard.ts +0 -67
  1109. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.html +0 -11
  1110. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.scss +0 -37
  1111. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts +0 -14
  1112. package/src/app/shared/hotkeys/hotkeys.service.ts +0 -165
  1113. package/src/app/shared/hotkeys/shared-hotkeys.module.ts +0 -15
  1114. package/src/app/shared/http/http.utils.ts +0 -95
  1115. package/src/app/shared/image/gallery/image-gallery.component.html +0 -282
  1116. package/src/app/shared/image/gallery/image-gallery.component.scss +0 -218
  1117. package/src/app/shared/image/gallery/image-gallery.component.ts +0 -434
  1118. package/src/app/shared/image/gallery/image-gallery.module.ts +0 -35
  1119. package/src/app/shared/image/gallery/testing/gallegry.model.testing.ts +0 -23
  1120. package/src/app/shared/image/gallery/testing/gallery.service.testing.ts +0 -99
  1121. package/src/app/shared/image/gallery/testing/gallery.testing.html +0 -27
  1122. package/src/app/shared/image/gallery/testing/gallery.testing.module.ts +0 -39
  1123. package/src/app/shared/image/gallery/testing/gallery.testing.ts +0 -34
  1124. package/src/app/shared/image/image.model.ts +0 -8
  1125. package/src/app/shared/image/image.module.ts +0 -12
  1126. package/src/app/shared/image/image.service.ts +0 -111
  1127. package/src/app/shared/image/image.testing.module.ts +0 -16
  1128. package/src/app/shared/inputs.ts +0 -330
  1129. package/src/app/shared/interceptors/progess.interceptor.ts +0 -24
  1130. package/src/app/shared/logging/log-level.model.ts +0 -53
  1131. package/src/app/shared/logging/logger.model.ts +0 -117
  1132. package/src/app/shared/logging/logging-service.class.ts +0 -131
  1133. package/src/app/shared/logging/logging-service.config.ts +0 -29
  1134. package/src/app/shared/logging/logging-service.module.ts +0 -19
  1135. package/src/app/shared/markdown/markdown.component.html +0 -55
  1136. package/src/app/shared/markdown/markdown.component.scss +0 -75
  1137. package/src/app/shared/markdown/markdown.component.ts +0 -350
  1138. package/src/app/shared/markdown/markdown.directive.ts +0 -28
  1139. package/src/app/shared/markdown/markdown.modal.html +0 -42
  1140. package/src/app/shared/markdown/markdown.modal.ts +0 -91
  1141. package/src/app/shared/markdown/markdown.module.ts +0 -65
  1142. package/src/app/shared/markdown/markdown.service.ts +0 -234
  1143. package/src/app/shared/markdown/markdown.utils.ts +0 -90
  1144. package/src/app/shared/markdown/testing/markdown.test.html +0 -50
  1145. package/src/app/shared/markdown/testing/markdown.test.ts +0 -49
  1146. package/src/app/shared/markdown/testing/markdown.testing.module.ts +0 -22
  1147. package/src/app/shared/material/autocomplete/material.autocomplete.config.ts +0 -127
  1148. package/src/app/shared/material/autocomplete/material.autocomplete.html +0 -400
  1149. package/src/app/shared/material/autocomplete/material.autocomplete.module.ts +0 -41
  1150. package/src/app/shared/material/autocomplete/material.autocomplete.scss +0 -54
  1151. package/src/app/shared/material/autocomplete/material.autocomplete.ts +0 -1375
  1152. package/src/app/shared/material/autocomplete/material.autocomplete.utils.ts +0 -21
  1153. package/src/app/shared/material/autocomplete/testing/autocomplete.test.html +0 -1164
  1154. package/src/app/shared/material/autocomplete/testing/autocomplete.test.spec.ts +0 -33
  1155. package/src/app/shared/material/autocomplete/testing/autocomplete.test.ts +0 -272
  1156. package/src/app/shared/material/badge/badge.directive.ts +0 -217
  1157. package/src/app/shared/material/badge/badge.module.ts +0 -12
  1158. package/src/app/shared/material/badge/badge.test.html +0 -275
  1159. package/src/app/shared/material/badge/badge.test.ts +0 -34
  1160. package/src/app/shared/material/boolean/boolean.module.ts +0 -36
  1161. package/src/app/shared/material/boolean/material.boolean.html +0 -271
  1162. package/src/app/shared/material/boolean/material.boolean.scss +0 -27
  1163. package/src/app/shared/material/boolean/material.boolean.ts +0 -343
  1164. package/src/app/shared/material/boolean/testing/boolean.test.page.html +0 -469
  1165. package/src/app/shared/material/boolean/testing/boolean.test.page.ts +0 -66
  1166. package/src/app/shared/material/chips/chips.module.ts +0 -38
  1167. package/src/app/shared/material/chips/material.chips.html +0 -233
  1168. package/src/app/shared/material/chips/material.chips.scss +0 -67
  1169. package/src/app/shared/material/chips/material.chips.ts +0 -834
  1170. package/src/app/shared/material/chips/testing/chips.test.html +0 -207
  1171. package/src/app/shared/material/chips/testing/chips.test.ts +0 -169
  1172. package/src/app/shared/material/datetime/datetime.module.ts +0 -42
  1173. package/src/app/shared/material/datetime/material.date.html +0 -186
  1174. package/src/app/shared/material/datetime/material.date.scss +0 -17
  1175. package/src/app/shared/material/datetime/material.date.ts +0 -512
  1176. package/src/app/shared/material/datetime/material.dateshort.html +0 -194
  1177. package/src/app/shared/material/datetime/material.dateshort.scss +0 -23
  1178. package/src/app/shared/material/datetime/material.dateshort.ts +0 -497
  1179. package/src/app/shared/material/datetime/material.datetime.html +0 -325
  1180. package/src/app/shared/material/datetime/material.datetime.scss +0 -87
  1181. package/src/app/shared/material/datetime/material.datetime.ts +0 -758
  1182. package/src/app/shared/material/datetime/testing/mat-date-time.test.html +0 -794
  1183. package/src/app/shared/material/datetime/testing/mat-date-time.test.ts +0 -155
  1184. package/src/app/shared/material/datetime/testing/mat-date.test.html +0 -564
  1185. package/src/app/shared/material/datetime/testing/mat-date.test.ts +0 -145
  1186. package/src/app/shared/material/datetime/testing/mat-dateshort.test.html +0 -530
  1187. package/src/app/shared/material/datetime/testing/mat-dateshort.test.ts +0 -133
  1188. package/src/app/shared/material/duration/duration.module.ts +0 -33
  1189. package/src/app/shared/material/duration/duration.utils.ts +0 -18
  1190. package/src/app/shared/material/duration/material.duration.html +0 -116
  1191. package/src/app/shared/material/duration/material.duration.scss +0 -28
  1192. package/src/app/shared/material/duration/material.duration.ts +0 -308
  1193. package/src/app/shared/material/duration/testing/mat-duration.test.html +0 -170
  1194. package/src/app/shared/material/duration/testing/mat-duration.test.ts +0 -88
  1195. package/src/app/shared/material/latlong/latlong.utils.ts +0 -376
  1196. package/src/app/shared/material/latlong/material.latlong-input.html +0 -95
  1197. package/src/app/shared/material/latlong/material.latlong-input.scss +0 -66
  1198. package/src/app/shared/material/latlong/material.latlong-input.ts +0 -445
  1199. package/src/app/shared/material/latlong/material.latlong.html +0 -90
  1200. package/src/app/shared/material/latlong/material.latlong.module.ts +0 -37
  1201. package/src/app/shared/material/latlong/material.latlong.scss +0 -0
  1202. package/src/app/shared/material/latlong/material.latlong.ts +0 -203
  1203. package/src/app/shared/material/latlong/testing/latlong.test.html +0 -1008
  1204. package/src/app/shared/material/latlong/testing/latlong.test.ts +0 -144
  1205. package/src/app/shared/material/material.animations.ts +0 -269
  1206. package/src/app/shared/material/material.config.ts +0 -5
  1207. package/src/app/shared/material/material.module.ts +0 -94
  1208. package/src/app/shared/material/material.testing.module.ts +0 -192
  1209. package/src/app/shared/material/memory/memory.utils.ts +0 -57
  1210. package/src/app/shared/material/numpad/numpad.animation.ts +0 -1
  1211. package/src/app/shared/material/numpad/numpad.append-to-input.directive.ts +0 -110
  1212. package/src/app/shared/material/numpad/numpad.component.ts +0 -73
  1213. package/src/app/shared/material/numpad/numpad.container.html +0 -37
  1214. package/src/app/shared/material/numpad/numpad.container.scss +0 -55
  1215. package/src/app/shared/material/numpad/numpad.container.ts +0 -152
  1216. package/src/app/shared/material/numpad/numpad.content.html +0 -13
  1217. package/src/app/shared/material/numpad/numpad.content.ts +0 -10
  1218. package/src/app/shared/material/numpad/numpad.directive.ts +0 -159
  1219. package/src/app/shared/material/numpad/numpad.dom-service.ts +0 -35
  1220. package/src/app/shared/material/numpad/numpad.model.ts +0 -53
  1221. package/src/app/shared/material/numpad/numpad.module.ts +0 -18
  1222. package/src/app/shared/material/numpad/testing/numpad.test.html +0 -146
  1223. package/src/app/shared/material/numpad/testing/numpad.test.ts +0 -44
  1224. package/src/app/shared/material/paginator/material.paginator-i18n.ts +0 -47
  1225. package/src/app/shared/material/stepper/material.stepper-i18n.ts +0 -17
  1226. package/src/app/shared/material/swipe/material.swipe.html +0 -85
  1227. package/src/app/shared/material/swipe/material.swipe.scss +0 -55
  1228. package/src/app/shared/material/swipe/material.swipe.ts +0 -366
  1229. package/src/app/shared/material/swipe/swipe.module.ts +0 -29
  1230. package/src/app/shared/material/swipe/testing/swipe.test.html +0 -112
  1231. package/src/app/shared/material/swipe/testing/swipe.test.ts +0 -74
  1232. package/src/app/shared/material/test/test-component.css +0 -22
  1233. package/src/app/shared/material/test/test-component.html +0 -40
  1234. package/src/app/shared/material/test/test-component.ts +0 -295
  1235. package/src/app/shared/material/testing/common.test.html +0 -227
  1236. package/src/app/shared/material/testing/common.test.ts +0 -126
  1237. package/src/app/shared/material/text/testing/text-form.testing.html +0 -213
  1238. package/src/app/shared/material/text/testing/text-form.testing.ts +0 -30
  1239. package/src/app/shared/material/text/text-form.component.html +0 -63
  1240. package/src/app/shared/material/text/text-form.component.scss +0 -8
  1241. package/src/app/shared/material/text/text-form.component.ts +0 -177
  1242. package/src/app/shared/material/text/text-form.module.ts +0 -36
  1243. package/src/app/shared/modules.ts +0 -12
  1244. package/src/app/shared/named-filter/named-filter-selector.component.html +0 -77
  1245. package/src/app/shared/named-filter/named-filter-selector.component.scss +0 -3
  1246. package/src/app/shared/named-filter/named-filter-selector.component.ts +0 -287
  1247. package/src/app/shared/named-filter/named-filter.model.ts +0 -64
  1248. package/src/app/shared/named-filter/named-filter.module.ts +0 -15
  1249. package/src/app/shared/named-filter/named-filter.service.ts +0 -100
  1250. package/src/app/shared/named-filter/testing/named-filter-selector.testing.html +0 -61
  1251. package/src/app/shared/named-filter/testing/named-filter-selector.testing.ts +0 -80
  1252. package/src/app/shared/named-filter/testing/named-filter.testing.module.ts +0 -20
  1253. package/src/app/shared/named-filter/testing/named-filter.testing.service.ts +0 -83
  1254. package/src/app/shared/observables.ts +0 -139
  1255. package/src/app/shared/pipes/arrays.pipe.ts +0 -153
  1256. package/src/app/shared/pipes/badge.pipes.ts +0 -18
  1257. package/src/app/shared/pipes/colors.pipe.ts +0 -24
  1258. package/src/app/shared/pipes/date-diff-duration.pipe.ts +0 -53
  1259. package/src/app/shared/pipes/date-format.pipe.ts +0 -73
  1260. package/src/app/shared/pipes/date-from-now.pipe.ts +0 -17
  1261. package/src/app/shared/pipes/dates.pipe.ts +0 -13
  1262. package/src/app/shared/pipes/display-with.pipe.ts +0 -13
  1263. package/src/app/shared/pipes/duration.pipe.spec.ts +0 -41
  1264. package/src/app/shared/pipes/duration.pipe.ts +0 -28
  1265. package/src/app/shared/pipes/file-size.pipe.ts +0 -50
  1266. package/src/app/shared/pipes/form.pipes.ts +0 -209
  1267. package/src/app/shared/pipes/highlight.pipe.ts +0 -41
  1268. package/src/app/shared/pipes/html.pipes.ts +0 -49
  1269. package/src/app/shared/pipes/latlong-format.pipe.ts +0 -28
  1270. package/src/app/shared/pipes/maps.pipe.ts +0 -41
  1271. package/src/app/shared/pipes/maskito.pipe.ts +0 -68
  1272. package/src/app/shared/pipes/math.pipes.ts +0 -46
  1273. package/src/app/shared/pipes/ng-init.pipe.ts +0 -13
  1274. package/src/app/shared/pipes/number-format.pipe.ts +0 -11
  1275. package/src/app/shared/pipes/observable.pipes.ts +0 -46
  1276. package/src/app/shared/pipes/pipes.module.ts +0 -162
  1277. package/src/app/shared/pipes/property.pipes.ts +0 -115
  1278. package/src/app/shared/pipes/selection.pipes.ts +0 -165
  1279. package/src/app/shared/pipes/string.pipes.ts +0 -128
  1280. package/src/app/shared/pipes/translate-context.pipe.ts +0 -27
  1281. package/src/app/shared/pipes/types.pipes.ts +0 -52
  1282. package/src/app/shared/pipes/url.pipes.ts +0 -29
  1283. package/src/app/shared/platforms.ts +0 -99
  1284. package/src/app/shared/print/print.service.ts +0 -337
  1285. package/src/app/shared/regexps.ts +0 -112
  1286. package/src/app/shared/rx-state/rx-state.decorators.ts +0 -281
  1287. package/src/app/shared/rx-state/rx-state.module.ts +0 -11
  1288. package/src/app/shared/rx-state/rx-state.types.ts +0 -5
  1289. package/src/app/shared/services/entity-service.class.ts +0 -120
  1290. package/src/app/shared/services/job.utils.ts +0 -124
  1291. package/src/app/shared/services/memory-entity-service.class.ts +0 -435
  1292. package/src/app/shared/services/progress-bar.service.ts +0 -40
  1293. package/src/app/shared/services/startable-observable-service.class.ts +0 -129
  1294. package/src/app/shared/services/startable-service.class.ts +0 -120
  1295. package/src/app/shared/services/storage.utils.ts +0 -53
  1296. package/src/app/shared/services/translate-context.service.ts +0 -112
  1297. package/src/app/shared/services/validator-service.class.ts +0 -13
  1298. package/src/app/shared/services.ts +0 -134
  1299. package/src/app/shared/shared-routing.module.ts +0 -69
  1300. package/src/app/shared/shared.module.spec.ts +0 -13
  1301. package/src/app/shared/shared.module.ts +0 -168
  1302. package/src/app/shared/shared.testing.module.ts +0 -61
  1303. package/src/app/shared/storage/storage-explorer.component.html +0 -160
  1304. package/src/app/shared/storage/storage-explorer.component.scss +0 -37
  1305. package/src/app/shared/storage/storage-explorer.component.spec.ts +0 -24
  1306. package/src/app/shared/storage/storage-explorer.component.ts +0 -268
  1307. package/src/app/shared/storage/storage-explorer.module.ts +0 -24
  1308. package/src/app/shared/storage/storage-explorer.testing-routing.module.ts +0 -19
  1309. package/src/app/shared/storage/storage-explorer.testing.module.ts +0 -19
  1310. package/src/app/shared/storage/storage.service.ts +0 -131
  1311. package/src/app/shared/storage/storage.utils.ts +0 -25
  1312. package/src/app/shared/testing/maskito.test.html +0 -40
  1313. package/src/app/shared/testing/maskito.test.ts +0 -33
  1314. package/src/app/shared/testing/observable.test.html +0 -53
  1315. package/src/app/shared/testing/observable.test.scss +0 -3
  1316. package/src/app/shared/testing/observable.test.ts +0 -101
  1317. package/src/app/shared/testing/tests.page.html +0 -22
  1318. package/src/app/shared/testing/tests.page.ts +0 -32
  1319. package/src/app/shared/toast/toast.testing.html +0 -50
  1320. package/src/app/shared/toast/toast.testing.module.ts +0 -22
  1321. package/src/app/shared/toast/toast.testing.ts +0 -52
  1322. package/src/app/shared/toast/toasts.ts +0 -161
  1323. package/src/app/shared/toolbar/modal-toolbar.html +0 -30
  1324. package/src/app/shared/toolbar/modal-toolbar.scss +0 -0
  1325. package/src/app/shared/toolbar/modal-toolbar.ts +0 -64
  1326. package/src/app/shared/toolbar/toolbar.html +0 -68
  1327. package/src/app/shared/toolbar/toolbar.module.ts +0 -18
  1328. package/src/app/shared/toolbar/toolbar.scss +0 -0
  1329. package/src/app/shared/toolbar/toolbar.ts +0 -262
  1330. package/src/app/shared/types.ts +0 -44
  1331. package/src/app/shared/upload-file/testing/upload-file.testing.html +0 -30
  1332. package/src/app/shared/upload-file/testing/upload-file.testing.module.ts +0 -21
  1333. package/src/app/shared/upload-file/testing/upload-file.testing.ts +0 -65
  1334. package/src/app/shared/upload-file/upload-file-popover.component.html +0 -46
  1335. package/src/app/shared/upload-file/upload-file-popover.component.scss +0 -6
  1336. package/src/app/shared/upload-file/upload-file-popover.component.ts +0 -115
  1337. package/src/app/shared/upload-file/upload-file.component.html +0 -57
  1338. package/src/app/shared/upload-file/upload-file.component.scss +0 -60
  1339. package/src/app/shared/upload-file/upload-file.component.ts +0 -222
  1340. package/src/app/shared/upload-file/upload-file.model.ts +0 -40
  1341. package/src/app/shared/validator/form-error-adapter.class.ts +0 -139
  1342. package/src/app/shared/validator/validators.ts +0 -725
  1343. package/src/app/shared/version/versions.ts +0 -89
  1344. package/src/app/social/config/social.config.ts +0 -10
  1345. package/src/app/social/feed/discourse/discourse-feed.service.ts +0 -216
  1346. package/src/app/social/feed/discourse/discourse.model.ts +0 -9
  1347. package/src/app/social/feed/discourse/discourse.utils.ts +0 -210
  1348. package/src/app/social/feed/feed.component.html +0 -85
  1349. package/src/app/social/feed/feed.component.scss +0 -59
  1350. package/src/app/social/feed/feed.component.spec.ts +0 -24
  1351. package/src/app/social/feed/feed.component.ts +0 -115
  1352. package/src/app/social/feed/feed.directive.ts +0 -164
  1353. package/src/app/social/feed/feed.model.ts +0 -139
  1354. package/src/app/social/feed/feed.module.ts +0 -13
  1355. package/src/app/social/feed/feed.service.ts +0 -14
  1356. package/src/app/social/job/job.module.ts +0 -14
  1357. package/src/app/social/job/progression/job-progression.component.html +0 -19
  1358. package/src/app/social/job/progression/job-progression.component.scss +0 -15
  1359. package/src/app/social/job/progression/job-progression.component.ts +0 -39
  1360. package/src/app/social/job/progression/job-progression.icon.html +0 -32
  1361. package/src/app/social/job/progression/job-progression.icon.scss +0 -7
  1362. package/src/app/social/job/progression/job-progression.icon.ts +0 -277
  1363. package/src/app/social/job/progression/job-progression.list.html +0 -25
  1364. package/src/app/social/job/progression/job-progression.list.scss +0 -17
  1365. package/src/app/social/job/progression/job-progression.list.ts +0 -40
  1366. package/src/app/social/job/progression/job-progression.model.ts +0 -26
  1367. package/src/app/social/job/progression/job-progression.service.ts +0 -97
  1368. package/src/app/social/job/testing/job-progression.testing.html +0 -11
  1369. package/src/app/social/job/testing/job-progression.testing.service.ts +0 -33
  1370. package/src/app/social/job/testing/job-progression.testing.ts +0 -28
  1371. package/src/app/social/job/testing/job.testing.module.ts +0 -13
  1372. package/src/app/social/message/message.form.html +0 -71
  1373. package/src/app/social/message/message.form.scss +0 -6
  1374. package/src/app/social/message/message.form.ts +0 -128
  1375. package/src/app/social/message/message.modal.html +0 -68
  1376. package/src/app/social/message/message.modal.ts +0 -117
  1377. package/src/app/social/message/message.model.ts +0 -78
  1378. package/src/app/social/message/message.module.ts +0 -14
  1379. package/src/app/social/message/message.service.ts +0 -104
  1380. package/src/app/social/social.errors.ts +0 -10
  1381. package/src/app/social/social.module.ts +0 -23
  1382. package/src/app/social/social.testing.module.ts +0 -33
  1383. package/src/app/social/user-event/notification/user-event-notification.icon.html +0 -49
  1384. package/src/app/social/user-event/notification/user-event-notification.icon.scss +0 -4
  1385. package/src/app/social/user-event/notification/user-event-notification.icon.ts +0 -176
  1386. package/src/app/social/user-event/notification/user-event-notification.list.html +0 -151
  1387. package/src/app/social/user-event/notification/user-event-notification.list.scss +0 -73
  1388. package/src/app/social/user-event/notification/user-event-notification.list.ts +0 -282
  1389. package/src/app/social/user-event/notification/user-event-notification.modal.html +0 -71
  1390. package/src/app/social/user-event/notification/user-event-notification.modal.ts +0 -60
  1391. package/src/app/social/user-event/testing/user-event.testing.html +0 -54
  1392. package/src/app/social/user-event/testing/user-event.testing.model.ts +0 -142
  1393. package/src/app/social/user-event/testing/user-event.testing.module.ts +0 -13
  1394. package/src/app/social/user-event/testing/user-event.testing.service.ts +0 -161
  1395. package/src/app/social/user-event/testing/user-event.testing.ts +0 -300
  1396. package/src/app/social/user-event/user-event.model.ts +0 -55
  1397. package/src/app/social/user-event/user-event.module.ts +0 -16
  1398. package/src/app/social/user-event/user-event.service.ts +0 -686
  1399. package/src/browserslist +0 -9
  1400. package/src/environments/environment.class.ts +0 -113
  1401. package/src/environments/environment.loader.ts +0 -90
  1402. package/src/environments/environment.prod.ts +0 -49
  1403. package/src/environments/environment.test.ts +0 -92
  1404. package/src/environments/environment.ts +0 -136
  1405. package/src/favicon.ico +0 -0
  1406. package/src/global.scss +0 -13
  1407. package/src/index.html +0 -76
  1408. package/src/main.ts +0 -19
  1409. package/src/polyfills.ts +0 -34
  1410. package/src/schema.graphql +0 -4381
  1411. package/src/service-worker.js +0 -31
  1412. package/src/test.ts +0 -30
  1413. package/tsconfig-cs.json +0 -57
  1414. package/tsconfig.app.json +0 -15
  1415. package/tsconfig.json +0 -48
  1416. package/tsconfig.spec.json +0 -18
@@ -0,0 +1,741 @@
1
+ import { ChangeDetectorRef, Directive, EventEmitter, Optional } from '@angular/core';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
+ import { AlertController, IonRouterOutlet, NavController, ToastController } from '@ionic/angular';
4
+ import { TranslateService } from '@ngx-translate/core';
5
+ import { BehaviorSubject, of } from 'rxjs';
6
+ import { isMoment } from 'moment';
7
+ import { LocalSettingsService } from '../../services/local-settings.service';
8
+ import { debounceTime, filter, map, mergeMap } from 'rxjs/operators';
9
+ import { AppTabEditor, AppTabEditorOptions } from './tab-editor.class';
10
+ import { AppFormUtils } from '../form.utils';
11
+ import { Alerts } from '../../../shared/alerts';
12
+ import { ErrorCodes, ServerErrorCodes } from '../../services/errors';
13
+ import { equals, isInt, isNil, isNilOrBlank, isNotEmptyArray, isNotNil, isNotNilOrBlank, toBoolean, toNumber } from '../../../shared/functions';
14
+ import { DateFormatService } from '../../../shared/pipes/date-format.pipe';
15
+ import { ENVIRONMENT } from '../../../../environments/environment.class';
16
+ import { firstFalse, firstNotNilPromise, waitForFalse } from '../../../shared/observables';
17
+ import { FormErrorTranslator } from '../../../shared/validator/form-error-adapter.class';
18
+ import { isStartableService } from '../../../shared/services/startable-service.class';
19
+ import * as i0 from "@angular/core";
20
+ export class AppEditorOptions extends AppTabEditorOptions {
21
+ autoLoad;
22
+ autoLoadDelay;
23
+ pathIdAttribute;
24
+ enableListenChanges;
25
+ listenIntervalInSeconds;
26
+ /**
27
+ * Change page route (window URL) when saving for the first time
28
+ */
29
+ autoUpdateRoute; // Default to true
30
+ /**
31
+ * Open the next tab, after saving for the first time
32
+ */
33
+ autoOpenNextTab; // Default to true
34
+ i18nPrefix;
35
+ }
36
+ // @dynamic
37
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
38
+ export class AppEntityEditor extends AppTabEditor {
39
+ dataType;
40
+ dataService;
41
+ data;
42
+ previousDataId;
43
+ defaultBackHref;
44
+ historyIcon;
45
+ titleSubject = new BehaviorSubject(undefined);
46
+ onUpdateView = new EventEmitter();
47
+ /**
48
+ * @deprecated
49
+ */
50
+ get $title() {
51
+ return this.titleSubject;
52
+ }
53
+ cd;
54
+ dateFormat;
55
+ settings;
56
+ environment;
57
+ routerOutlet;
58
+ errorTranslator;
59
+ _usageMode;
60
+ _enableListenChanges;
61
+ _listenIntervalInSeconds;
62
+ _pathIdAttribute;
63
+ _autoLoad;
64
+ _autoLoadDelay;
65
+ _autoUpdateRoute;
66
+ _autoOpenNextTab;
67
+ _listenChangesSubscription;
68
+ get usageMode() {
69
+ return this._usageMode;
70
+ }
71
+ set usageMode(value) {
72
+ if (this._usageMode !== value) {
73
+ this._usageMode = value;
74
+ this.markForCheck();
75
+ }
76
+ }
77
+ get isOnFieldMode() {
78
+ return this.settings.isOnFieldMode(this._usageMode);
79
+ }
80
+ get isNewData() {
81
+ return isNil(this.data?.id);
82
+ }
83
+ get service() {
84
+ return this.dataService;
85
+ }
86
+ get autoOpenNextTab() {
87
+ return this._autoOpenNextTab;
88
+ }
89
+ set autoOpenNextTab(value) {
90
+ this._autoOpenNextTab = value;
91
+ }
92
+ get pathIdAttribute() {
93
+ return this._pathIdAttribute;
94
+ }
95
+ constructor(injector, dataType, dataService, options) {
96
+ super(injector.get(ActivatedRoute), injector.get(Router), injector.get(NavController), injector.get(AlertController), injector.get(TranslateService), options);
97
+ this.dataType = dataType;
98
+ this.dataService = dataService;
99
+ this.environment = injector.get(ENVIRONMENT);
100
+ options = {
101
+ // Default options
102
+ enableListenChanges: this.environment.entityEditor?.enableListenChanges || false, // False by default
103
+ listenIntervalInSeconds: toNumber(this.environment.entityEditor?.listenIntervalInSeconds, 0), // no timer by default
104
+ pathIdAttribute: 'id',
105
+ autoLoad: true,
106
+ autoUpdateRoute: true,
107
+ i18nPrefix: '',
108
+ // Following options are override inside ngOnInit()
109
+ // autoOpenNextTab: ...,
110
+ // Override defaults
111
+ ...options,
112
+ };
113
+ this.cd = injector.get(ChangeDetectorRef);
114
+ this.settings = injector.get(LocalSettingsService);
115
+ this.errorTranslator = injector.get(FormErrorTranslator);
116
+ this.routerOutlet = injector.get(IonRouterOutlet);
117
+ this.dateFormat = injector.get(DateFormatService);
118
+ this.toastController = injector.get(ToastController);
119
+ this._enableListenChanges = options.enableListenChanges;
120
+ this._listenIntervalInSeconds = options.listenIntervalInSeconds;
121
+ this._pathIdAttribute = options.pathIdAttribute;
122
+ this._autoLoad = options.autoLoad;
123
+ this._autoLoadDelay = options.autoLoadDelay;
124
+ this._autoUpdateRoute = options.autoUpdateRoute;
125
+ this._autoOpenNextTab = options.autoOpenNextTab;
126
+ this.i18nContext = {
127
+ prefix: options.i18nPrefix,
128
+ suffix: '',
129
+ };
130
+ // FOR DEV ONLY ----
131
+ //this.debug = !environment.production;
132
+ this._logPrefix = '[entity-editor] ';
133
+ }
134
+ ngOnInit() {
135
+ super.ngOnInit();
136
+ // Defaults
137
+ this._autoOpenNextTab = toBoolean(this._autoOpenNextTab, !this.isOnFieldMode);
138
+ this.historyIcon = this.historyIcon || { icon: 'list' };
139
+ // Register forms
140
+ this.registerForms();
141
+ // Disable page, during load
142
+ this.disable();
143
+ }
144
+ ngAfterViewInit() {
145
+ super.ngAfterViewInit();
146
+ // Load data
147
+ if (this._autoLoad) {
148
+ setTimeout(() => this.loadFromRoute(), this._autoLoadDelay);
149
+ }
150
+ }
151
+ ngOnDestroy() {
152
+ super.ngOnDestroy();
153
+ this.titleSubject.complete();
154
+ this.titleSubject.unsubscribe();
155
+ this.onUpdateView.complete();
156
+ this.onUpdateView.unsubscribe();
157
+ }
158
+ waitIdle(opts) {
159
+ // Wait end of saving
160
+ if (this.saving)
161
+ return waitForFalse(this.savingSubject, { stop: this.destroySubject });
162
+ return super.waitIdle(opts);
163
+ }
164
+ /**
165
+ * Load data from id, using the dataService
166
+ *
167
+ * @param id
168
+ * @param opts
169
+ */
170
+ async load(id, opts) {
171
+ if (!this.dataService)
172
+ throw new Error("Cannot load data: missing 'dataService'!");
173
+ this.resetError();
174
+ // New data
175
+ if (isNil(id)) {
176
+ try {
177
+ // Create using default values
178
+ const data = new this.dataType();
179
+ this._usageMode = this.computeUsageMode(data);
180
+ await this.onNewEntity(data, opts);
181
+ await this.updateView(data, {
182
+ openTabIndex: 0,
183
+ ...opts,
184
+ });
185
+ }
186
+ catch (err) {
187
+ this.setError(err, { emitEvent: false });
188
+ this.selectedTabIndex = 0;
189
+ }
190
+ finally {
191
+ this.markAsLoaded();
192
+ }
193
+ }
194
+ // Load existing data
195
+ else {
196
+ try {
197
+ const data = await this.dataService.load(id, opts);
198
+ if (!data)
199
+ throw { code: ErrorCodes.DATA_NOT_FOUND_ERROR, message: 'ERROR.DATA_NO_FOUND' };
200
+ this._usageMode = this.computeUsageMode(data);
201
+ await this.onEntityLoaded(data, opts);
202
+ await this.updateView(data, opts);
203
+ this.startListenChanges();
204
+ }
205
+ catch (err) {
206
+ this.setError(err);
207
+ this.selectedTabIndex = 0;
208
+ }
209
+ finally {
210
+ this.markAsLoaded();
211
+ }
212
+ }
213
+ }
214
+ canUserWrite(data, opts) {
215
+ return this.dataService.canUserWrite(data, opts);
216
+ }
217
+ startListenChanges() {
218
+ // Skip if disabled, or already listening
219
+ if (this._listenChangesSubscription || !this._enableListenChanges)
220
+ return;
221
+ // Skip if new (nothing to listen)
222
+ if (this.isNewData)
223
+ return;
224
+ // Listen for changes on server
225
+ const subscription = this.listenChanges(this.data.id, {
226
+ interval: this._listenIntervalInSeconds,
227
+ })
228
+ ?.pipe(filter(isNotNil), mergeMap((data) => this.saving
229
+ ? // If saving, wait end, to avoid to detect self changes
230
+ firstFalse(this.savingSubject).pipe(map(() => data), debounceTime(500))
231
+ : of(data)))
232
+ .subscribe((data) => {
233
+ const isNewer = isMoment(data.updateDate) && (!this.data.updateDate || data.updateDate.isAfter(this.data.updateDate));
234
+ if (!isNewer)
235
+ return; // Skip
236
+ // Editor has no changes: reload
237
+ if (!this.dirty) {
238
+ if (this.debug)
239
+ console.debug(`[data-editor] Changes detected on server, at {${data.updateDate}}: reloading page...`);
240
+ this.reload();
241
+ }
242
+ // Cannot reload: alert the user
243
+ else {
244
+ if (this.debug)
245
+ console.debug(`[data-editor] Changes detected on server, at {${data.updateDate}}, but page is dirty: skip reloading.`);
246
+ this.showToast({ message: 'ERROR.DATA_UPDATE_DATE_CHANGED', type: 'warning', showCloseButton: true });
247
+ }
248
+ });
249
+ // Register subscription
250
+ if (subscription) {
251
+ this._listenChangesSubscription = subscription;
252
+ this.registerSubscription(this._listenChangesSubscription);
253
+ subscription.add(() => {
254
+ this.unregisterSubscription(subscription);
255
+ this._listenChangesSubscription = null;
256
+ });
257
+ }
258
+ }
259
+ stopListenChanges() {
260
+ this._listenChangesSubscription?.unsubscribe();
261
+ }
262
+ async ready(opts) {
263
+ await super.ready(opts);
264
+ // Wait service to be ready
265
+ if (isStartableService(this.dataService)) {
266
+ await this.dataService.ready();
267
+ }
268
+ }
269
+ async updateView(data, opts) {
270
+ const idChanged = isNotNil(data.id) &&
271
+ this.previousDataId !== undefined && // Ignore if first loading (=undefined)
272
+ this.previousDataId !== data.id;
273
+ opts = {
274
+ updateRoute: this._autoUpdateRoute && idChanged && !this.loading,
275
+ ...opts,
276
+ };
277
+ this.data = data;
278
+ this.previousDataId = data.id || null;
279
+ await this.ready();
280
+ await this.setValue(data);
281
+ if (!opts || opts.emitEvent !== false) {
282
+ this.markAsPristine();
283
+ this.markAsUntouched();
284
+ this.updateViewState(data);
285
+ // Need to update route
286
+ if (opts.updateRoute === true) {
287
+ this.updateTabAndRoute(data, opts)
288
+ // Update the title - should be executed AFTER updateRoute because of path change - fix #185
289
+ .then(() => this.updateTitle(data));
290
+ }
291
+ else {
292
+ // Update the next tab
293
+ this.updateTabIndex(opts.openTabIndex);
294
+ // Update the title.
295
+ this.updateTitle(data);
296
+ }
297
+ this.onUpdateView.emit(data);
298
+ }
299
+ }
300
+ /**
301
+ * Enable or disable state
302
+ */
303
+ updateViewState(data, opts) {
304
+ if (this.isNewData || this.canUserWrite(data)) {
305
+ this.enable(opts);
306
+ }
307
+ else {
308
+ this.disable(opts);
309
+ // Allow to sort tables
310
+ this.tables?.forEach((t) => t.enableSort());
311
+ this.asyncTables?.forEach((t) => t.enableSort());
312
+ }
313
+ }
314
+ /**
315
+ * Update the route location, and open the next tab
316
+ */
317
+ async updateTabAndRoute(data, opts) {
318
+ const queryParams = { ...this.queryParams };
319
+ // Open the next tab
320
+ this.updateTabIndex(opts && opts.openTabIndex);
321
+ if (!this.queryTabIndexParamName || !this.route)
322
+ return; // Skip route update
323
+ // Update route location
324
+ queryParams[this.queryTabIndexParamName] = this.selectedTabIndex !== 0 ? this.selectedTabIndex : undefined;
325
+ await this.updateRoute(data, queryParams);
326
+ }
327
+ /**
328
+ * Update the route location, and open the next tab
329
+ */
330
+ updateTabIndex(tabIndex) {
331
+ if (isNotNil(tabIndex) && tabIndex >= 0 && tabIndex !== this.selectedTabIndex) {
332
+ this.selectedTabIndex = tabIndex;
333
+ this.markForCheck();
334
+ }
335
+ }
336
+ async saveAndClose(event, options) {
337
+ const saved = await this.save(event);
338
+ if (saved) {
339
+ await this.close(event);
340
+ }
341
+ return saved;
342
+ }
343
+ async close(event) {
344
+ if (event) {
345
+ if (event.defaultPrevented)
346
+ return;
347
+ event.preventDefault();
348
+ event.stopPropagation();
349
+ }
350
+ return this.goBack();
351
+ }
352
+ /**
353
+ * Save the editor, by calling the dataService.save().
354
+ * Ensure that editor if valid. If not, display an error
355
+ *
356
+ * @param event
357
+ * @param opts
358
+ */
359
+ async save(event, opts) {
360
+ if (this.loading || this.saving) {
361
+ console.debug('[data-editor] Skip save: editor is busy (loading or saving)');
362
+ return false;
363
+ }
364
+ if (!this.dirty && !this.isNewData) {
365
+ console.debug('[data-editor] Skip save: editor not dirty');
366
+ return true;
367
+ }
368
+ // Wait end of async validation
369
+ await this.waitWhilePending();
370
+ // If invalid
371
+ if (this.invalid) {
372
+ this.logFormErrors();
373
+ this.openFirstInvalidTab();
374
+ this.scrollToTop();
375
+ this.markAllAsTouched();
376
+ this.submitted = true;
377
+ return false;
378
+ }
379
+ this.markAsSaving();
380
+ this.resetError();
381
+ if (this.debug)
382
+ console.debug('[data-editor] Saving data...');
383
+ try {
384
+ // Compute next tab index (if enable)
385
+ const nextTabIndex = this._autoOpenNextTab && isNil(this.previousDataId) && this.computeNextTabIndex();
386
+ // Save all dirty tables
387
+ const saved = await this.saveDirtyChildren();
388
+ if (!saved)
389
+ return false;
390
+ // Get data
391
+ const data = await this.getValue();
392
+ this.disable();
393
+ // Save form
394
+ const updatedData = await this.dataService.save(data, opts);
395
+ await this.onEntitySaved(updatedData);
396
+ // Update the view (e.g metadata)
397
+ await this.updateView(updatedData, {
398
+ // Open next tab only if user has not changed it
399
+ openTabIndex: nextTabIndex > this._selectedTabIndex ? nextTabIndex : undefined,
400
+ ...opts,
401
+ });
402
+ // Subscribe to remote changes
403
+ if (!this._listenChangesSubscription)
404
+ this.startListenChanges();
405
+ this.submitted = false;
406
+ return true;
407
+ }
408
+ catch (err) {
409
+ this.submitted = true;
410
+ this.selectedTabIndex = 0; // Can be override by subclasses, using setError()
411
+ this.setError(err);
412
+ this.scrollToTop(); // Scroll to top (to show error)
413
+ this.markAsDirty();
414
+ this.enable();
415
+ // Concurrent change on pod
416
+ if (err.code === ServerErrorCodes.BAD_UPDATE_DATE && isNotNil(this.data.id)) {
417
+ // Call a data reload (in background), to update the GraphQL cache, and allow to cancel changes
418
+ this.dataService.load(this.data.id, { fetchPolicy: 'network-only' }).then(() => {
419
+ console.debug('[data-editor] Data cache reloaded. User can reload page');
420
+ });
421
+ }
422
+ return false;
423
+ }
424
+ finally {
425
+ this.markAsSaved();
426
+ }
427
+ }
428
+ /**
429
+ * Save data (if dirty and valid), and return it. Otherwise, return nil value.
430
+ */
431
+ async saveAndGetDataIfValid() {
432
+ // Form is not valid
433
+ if (!this.valid) {
434
+ // Make sure validation is finished
435
+ await AppFormUtils.waitWhilePending(this);
436
+ // If invalid: Open the first tab in error
437
+ if (this.invalid) {
438
+ this.openFirstInvalidTab();
439
+ return undefined;
440
+ }
441
+ // Continue (valid)
442
+ }
443
+ // Form is valid, but not saved
444
+ if (this.dirty) {
445
+ const saved = await this.save(new Event('save'));
446
+ if (!saved)
447
+ return undefined;
448
+ }
449
+ // Valid and saved data
450
+ return this.data;
451
+ }
452
+ async delete(event) {
453
+ if (this.loading || this.saving)
454
+ return false;
455
+ // Ask user confirmation
456
+ const confirmation = await Alerts.askDeleteConfirmation(this.alertCtrl, this.translate);
457
+ if (!confirmation)
458
+ return;
459
+ console.debug('[data-editor] Asking to delete...');
460
+ this.markAsSaving();
461
+ this.resetError();
462
+ try {
463
+ // Get data
464
+ const data = await this.getValue();
465
+ const isNew = this.isNewData;
466
+ this.disable();
467
+ if (!isNew) {
468
+ await this.dataService.delete(data);
469
+ }
470
+ await this.onEntityDeleted(data);
471
+ // Remove page history
472
+ this.removePageHistory();
473
+ }
474
+ catch (err) {
475
+ this.submitted = true;
476
+ this.selectedTabIndex = 0;
477
+ this.setError(err);
478
+ this.markAsSaved();
479
+ this.enable();
480
+ return false;
481
+ }
482
+ // Wait, then go back (wait is need in order to update back href is need)
483
+ await setTimeout(() => this.goBack(), 500);
484
+ return true;
485
+ }
486
+ async reload() {
487
+ this.markAsLoading();
488
+ await this.load(this.data?.id, { fetchPolicy: 'network-only' });
489
+ }
490
+ async unload(opts) {
491
+ await super.unload(opts);
492
+ this.stopListenChanges();
493
+ this.form.reset();
494
+ this.registerForms();
495
+ this.data = null;
496
+ // TODO: find a way to remove current page from the navigation history
497
+ }
498
+ async goBack(event) {
499
+ // Go back
500
+ if (this.toolbar?.canGoBack) {
501
+ return this.toolbar.goBack();
502
+ }
503
+ else if (this.defaultBackHref) {
504
+ return this.navController.navigateBack(this.defaultBackHref);
505
+ }
506
+ else {
507
+ // Back to home
508
+ return this.navController.navigateBack('/');
509
+ }
510
+ }
511
+ resetError(opts) {
512
+ super.resetError(opts);
513
+ }
514
+ setError(err, opts) {
515
+ if (!err) {
516
+ super.setError(undefined, opts);
517
+ }
518
+ else if (typeof err === 'string') {
519
+ console.error('[entity-editor] Error: ' + (err || ''));
520
+ super.setError(err, opts);
521
+ }
522
+ else {
523
+ console.error('[entity-editor] Error: ' + err.message || '', err);
524
+ let userMessage = (err.message && this.translate.instant(err.message)) || err;
525
+ // Add details error (if any) under the main message
526
+ const detailMessage = !err.details || typeof err.details === 'string' ? err.details : err.details.message;
527
+ if (isNotNilOrBlank(detailMessage)) {
528
+ const cssClass = opts?.detailsCssClass || 'error-details';
529
+ userMessage += `<br/><small class="${cssClass}" title="${detailMessage}">`;
530
+ userMessage += detailMessage.length < 70 ? detailMessage : detailMessage.substring(0, 67) + '...';
531
+ userMessage += '</small>';
532
+ }
533
+ super.setError(userMessage, opts);
534
+ }
535
+ }
536
+ /**
537
+ * Load data from the snapshot route
538
+ *
539
+ * @protected
540
+ */
541
+ loadFromRoute() {
542
+ const route = this.route.snapshot;
543
+ if (!route || isNilOrBlank(this._pathIdAttribute)) {
544
+ throw new Error("Unable to load from route: missing 'route' or 'options.pathIdAttribute'.");
545
+ }
546
+ let id = route.params[this._pathIdAttribute];
547
+ if (isNil(id) || id === 'new') {
548
+ return this.load(undefined, route.params);
549
+ }
550
+ else {
551
+ // Convert as number, if need
552
+ if (isInt(id)) {
553
+ id = parseInt(id);
554
+ }
555
+ return this.load(id, route.params);
556
+ }
557
+ }
558
+ /**
559
+ * Return undefined to keep same tab
560
+ *
561
+ * @protected
562
+ */
563
+ computeNextTabIndex() {
564
+ const nextTabIndex = this.selectedTabIndex + 1;
565
+ return nextTabIndex < this.tabCount ? nextTabIndex : undefined;
566
+ }
567
+ async onBeforeEntityLoad() {
568
+ // can be overwritten by subclasses
569
+ }
570
+ async onNewEntity(data, options) {
571
+ // can be overwritten by subclasses
572
+ }
573
+ async onEntityLoaded(data, options) {
574
+ // can be overwritten by subclasses
575
+ }
576
+ async onEntitySaved(data) {
577
+ // can be overwritten by subclasses
578
+ }
579
+ async onEntityDeleted(data) {
580
+ // can be overwritten by subclasses
581
+ }
582
+ computeUsageMode(data) {
583
+ // can be overwritten by subclasses
584
+ // Using local settings default value
585
+ return this.settings.usageMode;
586
+ }
587
+ waitWhilePending(opts) {
588
+ return AppFormUtils.waitWhilePending(this, opts);
589
+ }
590
+ async getValue() {
591
+ const json = await this.getJsonValueToSave();
592
+ const res = new this.dataType();
593
+ res.fromObject(json);
594
+ return res;
595
+ }
596
+ getJsonValueToSave() {
597
+ return Promise.resolve(this.form.value);
598
+ }
599
+ /**
600
+ * Compute the title
601
+ *
602
+ * @param data
603
+ */
604
+ async updateTitle(data) {
605
+ data = data || this.data;
606
+ const title = await this.computeTitle(data);
607
+ this.titleSubject.next(title);
608
+ // If NOT data, then add to page history
609
+ if (!this.isNewData) {
610
+ const page = await this.computePageHistory(title);
611
+ if (page)
612
+ return this.addToPageHistory(page);
613
+ }
614
+ }
615
+ async addToPageHistory(page, opts) {
616
+ if (!page)
617
+ return; // Skip
618
+ return this.settings.addToPageHistory(page, {
619
+ removePathQueryParams: true,
620
+ removeTitleSmallTag: true,
621
+ emitEvent: false,
622
+ ...opts,
623
+ });
624
+ }
625
+ async computePageHistory(title) {
626
+ if (this.debug)
627
+ console.debug('[entity-editor] Computing page history, using url: ' + this.router.url);
628
+ return {
629
+ title,
630
+ path: this.router.url,
631
+ };
632
+ }
633
+ async removePageHistory(opts) {
634
+ return this.settings.removePageHistory(this.router.url, opts);
635
+ }
636
+ computePageUrl(id) {
637
+ const parentUrl = this.getParentPageUrl();
638
+ return parentUrl && `${parentUrl}/${id}`;
639
+ }
640
+ getParentPageUrl(withQueryParams) {
641
+ let parentUrl = this.defaultBackHref;
642
+ // Remove query params
643
+ if (withQueryParams !== true && parentUrl && parentUrl.indexOf('?') !== -1) {
644
+ parentUrl = parentUrl.substring(0, parentUrl.indexOf('?'));
645
+ }
646
+ return parentUrl;
647
+ }
648
+ listenChanges(id, opts) {
649
+ return this.dataService.listenChanges(this.data.id, {
650
+ // Make sure to skip cache, because NOT the full graph will be fetched by subscription
651
+ // When a changes occur, we call reload() to force refetching the full graph
652
+ fetchPolicy: 'no-cache',
653
+ ...opts,
654
+ });
655
+ }
656
+ markForCheck() {
657
+ this.cd.markForCheck();
658
+ }
659
+ /**
660
+ * Update the route, without reloading the component
661
+ *
662
+ * @param data
663
+ * @param queryParams
664
+ * @protected
665
+ */
666
+ async updateRoute(data, queryParams) {
667
+ data = data || this.data;
668
+ if (!data || !this.route)
669
+ return false;
670
+ const currId = this.route.snapshot.paramMap.get(this.pathIdAttribute);
671
+ const futureId = isNotNil(data.id) ? data.id.toString() : 'new';
672
+ if (queryParams) {
673
+ this.queryParams = {
674
+ ...this.queryParams,
675
+ ...queryParams,
676
+ };
677
+ }
678
+ if (currId === futureId) {
679
+ // Update queryParam only (not the path)
680
+ // /!\ We should get query Params from the updated route, and not from snapshot that can be outdated
681
+ const actualQueryParams = await firstNotNilPromise(this.route.queryParams);
682
+ if (!equals(actualQueryParams, this.queryParams)) {
683
+ if (this.debug)
684
+ console.debug(`${this._logPrefix}Updating route using queryParams: `, this.queryParams);
685
+ return await this.router.navigate(['.'], {
686
+ relativeTo: this.route,
687
+ replaceUrl: false,
688
+ queryParams: this.queryParams,
689
+ state: { animated: false },
690
+ });
691
+ }
692
+ }
693
+ else {
694
+ const path = this.computePageUrl(isNotNil(data.id) ? data.id : 'new');
695
+ const commands = path && typeof path === 'string' ? path.split('/').slice(1) : path;
696
+ if (isNotEmptyArray(commands)) {
697
+ // Current route was '/new' => change to '/new?id=:id' (to allow CustomReuseStrategy to detect that route can be reused)
698
+ if (currId === 'new' && this.queryParams[this.pathIdAttribute] !== futureId) {
699
+ if (this.debug)
700
+ console.debug(`${this._logPrefix}Updating route /new into /:id, using queryParams: `, queryParams);
701
+ this.queryParams[this.pathIdAttribute] = futureId;
702
+ const res = await this.router.navigate(['.'], {
703
+ relativeTo: this.route,
704
+ replaceUrl: true,
705
+ queryParams: this.queryParams,
706
+ state: { animated: false },
707
+ });
708
+ if (!res)
709
+ return false;
710
+ }
711
+ if (this.debug)
712
+ console.debug(`${this._logPrefix}Updating route to: ` + path);
713
+ return await this.router.navigate(commands, {
714
+ replaceUrl: true,
715
+ queryParams: this.queryParams,
716
+ state: { animated: false },
717
+ });
718
+ }
719
+ return Promise.reject('Missing page URL');
720
+ }
721
+ }
722
+ /* -- private functions -- */
723
+ /**
724
+ * Open the first tab that is invalid
725
+ */
726
+ openFirstInvalidTab() {
727
+ const invalidTabIndex = this.getFirstInvalidTabIndex();
728
+ if (invalidTabIndex !== -1 && this.selectedTabIndex !== invalidTabIndex) {
729
+ this.selectedTabIndex = invalidTabIndex;
730
+ this.markForCheck();
731
+ }
732
+ }
733
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityEditor, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
734
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AppEntityEditor, usesInheritance: true, ngImport: i0 });
735
+ }
736
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppEntityEditor, decorators: [{
737
+ type: Directive
738
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined }, { type: undefined }, { type: AppEditorOptions, decorators: [{
739
+ type: Optional
740
+ }] }] });
741
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS9lbnRpdHktZWRpdG9yLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBK0IsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUF5QixNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBMkIsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJckUsT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQXVCLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWhKLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUV0RixPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7QUFPdEYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLG1CQUFtQjtJQUN2RCxRQUFRLENBQVc7SUFDbkIsYUFBYSxDQUFVO0lBQ3ZCLGVBQWUsQ0FBVTtJQUN6QixtQkFBbUIsQ0FBVztJQUM5Qix1QkFBdUIsQ0FBVTtJQUVqQzs7T0FFRztJQUNILGVBQWUsQ0FBVyxDQUFDLGtCQUFrQjtJQUU3Qzs7T0FFRztJQUNILGVBQWUsQ0FBVyxDQUFDLGtCQUFrQjtJQUU3QyxVQUFVLENBQVU7Q0FDckI7QUFFRCxXQUFXO0FBRVgsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0IsZUFNcEIsU0FBUSxZQUF1QjtJQXlFbkI7SUFDQTtJQXZFWixJQUFJLENBQUk7SUFDUixjQUFjLENBQUs7SUFFbkIsZUFBZSxDQUFTO0lBQ3hCLFdBQVcsQ0FBc0M7SUFFeEMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELFlBQVksR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO0lBRTlDOztPQUVHO0lBQ0gsSUFBYyxNQUFNO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRWtCLEVBQUUsQ0FBb0I7SUFDdEIsVUFBVSxDQUFvQjtJQUM5QixRQUFRLENBQXVCO0lBQy9CLFdBQVcsQ0FBYztJQUN6QixZQUFZLENBQWtCO0lBQ3ZDLGVBQWUsQ0FBc0I7SUFFdkMsVUFBVSxDQUFZO0lBQ2Isb0JBQW9CLENBQVU7SUFDOUIsd0JBQXdCLENBQVM7SUFDakMsZ0JBQWdCLENBQVM7SUFDekIsU0FBUyxDQUFVO0lBQ25CLGNBQWMsQ0FBUztJQUN2QixnQkFBZ0IsQ0FBVTtJQUNuQyxnQkFBZ0IsQ0FBVTtJQUMxQiwwQkFBMEIsQ0FBZTtJQUVqRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLEtBQWdCO1FBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksZUFBZSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxZQUNFLFFBQWtCLEVBQ1IsUUFBcUIsRUFDckIsV0FBZSxFQUNiLE9BQTBCO1FBRXRDLEtBQUssQ0FDSCxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUM1QixRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUNwQixRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUMzQixRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUM3QixRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQzlCLE9BQU8sQ0FDUixDQUFDO1FBWFEsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBSTtRQVd6QixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFxQjtZQUMxQixrQkFBa0I7WUFDbEIsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLElBQUksS0FBSyxFQUFFLG9CQUFvQjtZQUN0Ryx1QkFBdUIsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCO1lBQ3BILGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsZUFBZSxFQUFFLElBQUk7WUFDckIsVUFBVSxFQUFFLEVBQUU7WUFFZCxtREFBbUQ7WUFDbkQsd0JBQXdCO1lBRXhCLG9CQUFvQjtZQUNwQixHQUFHLE9BQU87U0FDWCxDQUFDO1FBRUYsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ3hELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVTtZQUMxQixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFFRixvQkFBb0I7UUFDcEIsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUM7SUFDdkMsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsV0FBVztRQUNYLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUV4RCxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGVBQWU7UUFDYixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsWUFBWTtRQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBcUI7UUFDNUIscUJBQXFCO1FBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRXhGLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUNSLEVBQU8sRUFDUCxJQUtDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixXQUFXO1FBQ1gsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQztnQkFDSCw4QkFBOEI7Z0JBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtvQkFDMUIsWUFBWSxFQUFFLENBQUM7b0JBQ2YsR0FBRyxJQUFJO2lCQUNSLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQztvQkFBUyxDQUFDO2dCQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELHFCQUFxQjthQUNoQixDQUFDO1lBQ0osSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsSUFBSTtvQkFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQztvQkFBUyxDQUFDO2dCQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsSUFBTyxFQUFFLElBQVU7UUFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQix5Q0FBeUM7UUFDekMsSUFBSSxJQUFJLENBQUMsMEJBQTBCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUMxRSxrQ0FBa0M7UUFDbEMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFM0IsK0JBQStCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDcEQsUUFBUSxFQUFFLElBQUksQ0FBQyx3QkFBd0I7U0FDeEMsQ0FBQztZQUNBLEVBQUUsSUFBSSxDQUNKLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFDaEIsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDaEIsSUFBSSxDQUFDLE1BQU07WUFDVCxDQUFDLENBQUMsdURBQXVEO2dCQUN2RCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FDbEI7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQ0Y7YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFPLEVBQUUsRUFBRTtZQUNyQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDdEgsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxDQUFDLE9BQU87WUFFN0IsZ0NBQWdDO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQsSUFBSSxDQUFDLFVBQVUsc0JBQXNCLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxnQ0FBZ0M7aUJBQzNCLENBQUM7Z0JBQ0osSUFBSSxJQUFJLENBQUMsS0FBSztvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxJQUFJLENBQUMsVUFBVSx1Q0FBdUMsQ0FBQyxDQUFDO2dCQUN2SSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEcsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsd0JBQXdCO1FBQ3hCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFlBQVksQ0FBQztZQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDM0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQXFCO1FBQy9CLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4QiwyQkFBMkI7UUFDM0IsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUNkLElBQWMsRUFDZCxJQUlDO1FBRUQsTUFBTSxTQUFTLEdBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksdUNBQXVDO1lBQzVFLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUVsQyxJQUFJLEdBQUc7WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2hFLEdBQUcsSUFBSTtTQUNSLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO1FBRXRDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNCLHVCQUF1QjtZQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO29CQUNoQyw0RkFBNEY7cUJBQzNGLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHNCQUFzQjtnQkFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRXZDLG9CQUFvQjtnQkFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxJQUFPLEVBQUUsSUFBa0Q7UUFDekUsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVuQix1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUNyQixJQUFPLEVBQ1AsSUFFQztRQUVELE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsb0JBQW9CO1FBRTdFLHdCQUF3QjtRQUN4QixXQUFXLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDM0csTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsUUFBaUI7UUFDOUIsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQVksRUFBRSxPQUFhO1FBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQVk7UUFDdEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksS0FBSyxDQUFDLGdCQUFnQjtnQkFBRSxPQUFPO1lBQ25DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQWEsRUFBRSxJQUFVO1FBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1lBQzdFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU5QixhQUFhO1FBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUV4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxCLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDO1lBQ0gscUNBQXFDO1lBQ3JDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRXZHLHdCQUF3QjtZQUN4QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXpCLFdBQVc7WUFDWCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFZixZQUFZO1lBQ1osTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFNUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXRDLGlDQUFpQztZQUNqQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxnREFBZ0Q7Z0JBQ2hELFlBQVksRUFBRSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQzlFLEdBQUcsSUFBSTthQUNSLENBQUMsQ0FBQztZQUVILDhCQUE4QjtZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQjtnQkFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUVoRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUV2QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLGtEQUFrRDtZQUM3RSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLGdDQUFnQztZQUNwRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRWQsMkJBQTJCO1lBQzNCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxlQUFlLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDNUUsK0ZBQStGO2dCQUMvRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzdFLE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztnQkFDM0UsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxxQkFBcUI7UUFDekIsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsbUNBQW1DO1lBQ25DLE1BQU0sWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTFDLDBDQUEwQztZQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxtQkFBbUI7UUFDckIsQ0FBQztRQUVELCtCQUErQjtRQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1FBQy9CLENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFOUMsd0JBQXdCO1FBQ3hCLE1BQU0sWUFBWSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUUxQixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUM7WUFDSCxXQUFXO1lBQ1gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUU3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFZixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBRUQsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpDLHNCQUFzQjtZQUN0QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUzQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNWLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUE4QjtRQUN6QyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsc0VBQXNFO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQWE7UUFDeEIsVUFBVTtRQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7YUFBTSxDQUFDO1lBQ04sZUFBZTtZQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBOEI7UUFDdkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQWlDLEVBQUUsSUFBd0Q7UUFDbEcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRSxJQUFJLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO1lBRTlFLG9EQUFvRDtZQUNwRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUUsR0FBRyxDQUFDLE9BQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3RILElBQUksZUFBZSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxlQUFlLElBQUksZUFBZSxDQUFDO2dCQUMxRCxXQUFXLElBQUksc0JBQXNCLFFBQVEsWUFBWSxhQUFhLElBQUksQ0FBQztnQkFDM0UsV0FBVyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDbEcsV0FBVyxJQUFJLFVBQVUsQ0FBQztZQUM1QixDQUFDO1lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ08sYUFBYTtRQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTiw2QkFBNkI7WUFDN0IsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDZCxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxtQkFBbUI7UUFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUMvQyxPQUFPLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0lBRVMsS0FBSyxDQUFDLGtCQUFrQjtRQUNoQyxtQ0FBbUM7SUFDckMsQ0FBQztJQUVTLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBTyxFQUFFLE9BQWtDO1FBQ3JFLG1DQUFtQztJQUNyQyxDQUFDO0lBRVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFPLEVBQUUsT0FBa0M7UUFDeEUsbUNBQW1DO0lBQ3JDLENBQUM7SUFFUyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQU87UUFDbkMsbUNBQW1DO0lBQ3JDLENBQUM7SUFFUyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQU87UUFDckMsbUNBQW1DO0lBQ3JDLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxJQUFPO1FBQ2hDLG1DQUFtQztRQUNuQyxxQ0FBcUM7UUFDckMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBRVMsZ0JBQWdCLENBQUMsSUFBcUI7UUFDOUMsT0FBTyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFUyxrQkFBa0I7UUFDMUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVE7UUFDbEMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5Qix3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFUyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBMEIsRUFBRSxJQUE4QjtRQUN6RixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sQ0FBQyxPQUFPO1FBRTFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDMUMscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEdBQUcsSUFBSTtTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBYTtRQUM5QyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxxREFBcUQsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU87WUFDTCxLQUFLO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUE4QjtRQUM5RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVTLGNBQWMsQ0FBQyxFQUFjO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLE9BQU8sU0FBUyxJQUFJLEdBQUcsU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxlQUF5QjtRQUNsRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRXJDLHNCQUFzQjtRQUN0QixJQUFJLGVBQWUsS0FBSyxJQUFJLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRSxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRVMsYUFBYSxDQUFDLEVBQU0sRUFBRSxJQUFVO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDbEQsc0ZBQXNGO1lBQ3RGLDRFQUE0RTtZQUM1RSxXQUFXLEVBQUUsVUFBVTtZQUN2QixHQUFHLElBQUk7U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVEsRUFBRSxXQUFpQjtRQUNyRCxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2hFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRztnQkFDakIsR0FBRyxJQUFJLENBQUMsV0FBVztnQkFDbkIsR0FBRyxXQUFXO2FBQ2YsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4Qix3Q0FBd0M7WUFDeEMsb0dBQW9HO1lBQ3BHLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEcsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDdEIsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtpQkFDM0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RSxNQUFNLFFBQVEsR0FBVSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBYyxDQUFDO1lBQ3RHLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLHdIQUF3SDtnQkFDeEgsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1RSxJQUFJLElBQUksQ0FBQyxLQUFLO3dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxvREFBb0QsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDbkgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUNsRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQzVDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDdEIsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDN0IsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtxQkFDM0IsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxHQUFHO3dCQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUN6QixDQUFDO2dCQUVELElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHFCQUFxQixHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUM5RSxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUMxQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO29CQUM3QixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2lCQUMzQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFRCw2QkFBNkI7SUFFN0I7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDdkQsSUFBSSxlQUFlLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO3dHQTN6Qm1CLGVBQWU7NEZBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFGcEMsU0FBUzs7MEJBbUZMLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBJb25Sb3V0ZXJPdXRsZXQsIE5hdkNvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc01vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucywgTG9jYWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IFVzYWdlTW9kZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFwcFRhYkVkaXRvciwgQXBwVGFiRWRpdG9yT3B0aW9ucywgSUFwcFRhYkVkaXRvciB9IGZyb20gJy4vdGFiLWVkaXRvci5jbGFzcyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMgfSBmcm9tICcuLi9mb3JtLnV0aWxzJztcbmltcG9ydCB7IEFsZXJ0cyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hbGVydHMnO1xuaW1wb3J0IHsgQXBwRXJyb3JXaXRoRGV0YWlscywgRXJyb3JDb2RlcywgU2VydmVyRXJyb3JDb2RlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQgeyBlcXVhbHMsIGlzSW50LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiwgdG9OdW1iZXIgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucywgSUVudGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcGlwZXMvZGF0ZS1mb3JtYXQucGlwZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7IGZpcnN0RmFsc2UsIGZpcnN0Tm90TmlsUHJvbWlzZSwgd2FpdEZvckZhbHNlLCBXYWl0Rm9yT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBGb3JtRXJyb3JUcmFuc2xhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHsgaXNTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQXBwRW50aXR5RWRpdG9yPFQ+IGV4dGVuZHMgSUFwcFRhYkVkaXRvcjxUPiB7XG4gIHVzYWdlTW9kZTogVXNhZ2VNb2RlO1xuICBpc05ld0RhdGE6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBFZGl0b3JPcHRpb25zIGV4dGVuZHMgQXBwVGFiRWRpdG9yT3B0aW9ucyB7XG4gIGF1dG9Mb2FkPzogYm9vbGVhbjtcbiAgYXV0b0xvYWREZWxheT86IG51bWJlcjtcbiAgcGF0aElkQXR0cmlidXRlPzogc3RyaW5nO1xuICBlbmFibGVMaXN0ZW5DaGFuZ2VzPzogYm9vbGVhbjtcbiAgbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoYW5nZSBwYWdlIHJvdXRlICh3aW5kb3cgVVJMKSB3aGVuIHNhdmluZyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICovXG4gIGF1dG9VcGRhdGVSb3V0ZT86IGJvb2xlYW47IC8vIERlZmF1bHQgdG8gdHJ1ZVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBuZXh0IHRhYiwgYWZ0ZXIgc2F2aW5nIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgYXV0b09wZW5OZXh0VGFiPzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byB0cnVlXG5cbiAgaTE4blByZWZpeD86IHN0cmluZztcbn1cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwRW50aXR5RWRpdG9yPFxuICAgIFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LFxuICAgIFMgZXh0ZW5kcyBJRW50aXR5U2VydmljZTxULCBJRD4gPSBJRW50aXR5U2VydmljZTxULCBhbnk+LFxuICAgIElEID0gbnVtYmVyLFxuICAgIExPIGV4dGVuZHMgRW50aXR5U2VydmljZUxvYWRPcHRpb25zID0gRW50aXR5U2VydmljZUxvYWRPcHRpb25zLFxuICA+XG4gIGV4dGVuZHMgQXBwVGFiRWRpdG9yPFQsIElELCBMTz5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgSUFwcEVudGl0eUVkaXRvcjxUPlxue1xuICBkYXRhOiBUO1xuICBwcmV2aW91c0RhdGFJZDogSUQ7XG5cbiAgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIGhpc3RvcnlJY29uOiB7IGljb24/OiBzdHJpbmc7IG1hdEljb24/OiBzdHJpbmcgfTtcblxuICByZWFkb25seSB0aXRsZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgb25VcGRhdGVWaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIC8qKlxuICAgKiAgQGRlcHJlY2F0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgJHRpdGxlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVTdWJqZWN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGVGb3JtYXQ6IERhdGVGb3JtYXRTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyT3V0bGV0OiBJb25Sb3V0ZXJPdXRsZXQ7XG4gIHByb3RlY3RlZCBlcnJvclRyYW5zbGF0b3I6IEZvcm1FcnJvclRyYW5zbGF0b3I7XG5cbiAgcHJpdmF0ZSBfdXNhZ2VNb2RlOiBVc2FnZU1vZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuYWJsZUxpc3RlbkNoYW5nZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbkludGVydmFsSW5TZWNvbmRzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhdGhJZEF0dHJpYnV0ZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvTG9hZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b0xvYWREZWxheTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvVXBkYXRlUm91dGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2F1dG9PcGVuTmV4dFRhYjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGdldCB1c2FnZU1vZGUoKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fdXNhZ2VNb2RlO1xuICB9XG5cbiAgc2V0IHVzYWdlTW9kZSh2YWx1ZTogVXNhZ2VNb2RlKSB7XG4gICAgaWYgKHRoaXMuX3VzYWdlTW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNPbkZpZWxkTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc09uRmllbGRNb2RlKHRoaXMuX3VzYWdlTW9kZSk7XG4gIH1cblxuICBnZXQgaXNOZXdEYXRhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLmRhdGE/LmlkKTtcbiAgfVxuXG4gIGdldCBzZXJ2aWNlKCk6IFMge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IGF1dG9PcGVuTmV4dFRhYigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b09wZW5OZXh0VGFiO1xuICB9XG5cbiAgc2V0IGF1dG9PcGVuTmV4dFRhYih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9PcGVuTmV4dFRhYiA9IHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBwYXRoSWRBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGF0aElkQXR0cmlidXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZGF0YVR5cGU6IG5ldyAoKSA9PiBULFxuICAgIHByb3RlY3RlZCBkYXRhU2VydmljZT86IFMsXG4gICAgQE9wdGlvbmFsKCkgb3B0aW9ucz86IEFwcEVkaXRvck9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBpbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFJvdXRlciksXG4gICAgICBpbmplY3Rvci5nZXQoTmF2Q29udHJvbGxlciksXG4gICAgICBpbmplY3Rvci5nZXQoQWxlcnRDb250cm9sbGVyKSxcbiAgICAgIGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKSxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBpbmplY3Rvci5nZXQoRU5WSVJPTk1FTlQpO1xuICAgIG9wdGlvbnMgPSA8QXBwRWRpdG9yT3B0aW9ucz57XG4gICAgICAvLyBEZWZhdWx0IG9wdGlvbnNcbiAgICAgIGVuYWJsZUxpc3RlbkNoYW5nZXM6IHRoaXMuZW52aXJvbm1lbnQuZW50aXR5RWRpdG9yPy5lbmFibGVMaXN0ZW5DaGFuZ2VzIHx8IGZhbHNlLCAvLyBGYWxzZSAgYnkgZGVmYXVsdFxuICAgICAgbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IHRvTnVtYmVyKHRoaXMuZW52aXJvbm1lbnQuZW50aXR5RWRpdG9yPy5saXN0ZW5JbnRlcnZhbEluU2Vjb25kcywgMCksIC8vIG5vIHRpbWVyIGJ5IGRlZmF1bHRcbiAgICAgIHBhdGhJZEF0dHJpYnV0ZTogJ2lkJyxcbiAgICAgIGF1dG9Mb2FkOiB0cnVlLFxuICAgICAgYXV0b1VwZGF0ZVJvdXRlOiB0cnVlLFxuICAgICAgaTE4blByZWZpeDogJycsXG5cbiAgICAgIC8vIEZvbGxvd2luZyBvcHRpb25zIGFyZSBvdmVycmlkZSBpbnNpZGUgbmdPbkluaXQoKVxuICAgICAgLy8gYXV0b09wZW5OZXh0VGFiOiAuLi4sXG5cbiAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLmVycm9yVHJhbnNsYXRvciA9IGluamVjdG9yLmdldChGb3JtRXJyb3JUcmFuc2xhdG9yKTtcbiAgICB0aGlzLnJvdXRlck91dGxldCA9IGluamVjdG9yLmdldChJb25Sb3V0ZXJPdXRsZXQpO1xuICAgIHRoaXMuZGF0ZUZvcm1hdCA9IGluamVjdG9yLmdldChEYXRlRm9ybWF0U2VydmljZSk7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzID0gb3B0aW9ucy5lbmFibGVMaXN0ZW5DaGFuZ2VzO1xuICAgIHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzID0gb3B0aW9ucy5saXN0ZW5JbnRlcnZhbEluU2Vjb25kcztcbiAgICB0aGlzLl9wYXRoSWRBdHRyaWJ1dGUgPSBvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZTtcbiAgICB0aGlzLl9hdXRvTG9hZCA9IG9wdGlvbnMuYXV0b0xvYWQ7XG4gICAgdGhpcy5fYXV0b0xvYWREZWxheSA9IG9wdGlvbnMuYXV0b0xvYWREZWxheTtcbiAgICB0aGlzLl9hdXRvVXBkYXRlUm91dGUgPSBvcHRpb25zLmF1dG9VcGRhdGVSb3V0ZTtcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSBvcHRpb25zLmF1dG9PcGVuTmV4dFRhYjtcbiAgICB0aGlzLmkxOG5Db250ZXh0ID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLmkxOG5QcmVmaXgsXG4gICAgICBzdWZmaXg6ICcnLFxuICAgIH07XG5cbiAgICAvLyBGT1IgREVWIE9OTFkgLS0tLVxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIHRoaXMuX2xvZ1ByZWZpeCA9ICdbZW50aXR5LWVkaXRvcl0gJztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBEZWZhdWx0c1xuICAgIHRoaXMuX2F1dG9PcGVuTmV4dFRhYiA9IHRvQm9vbGVhbih0aGlzLl9hdXRvT3Blbk5leHRUYWIsICF0aGlzLmlzT25GaWVsZE1vZGUpO1xuICAgIHRoaXMuaGlzdG9yeUljb24gPSB0aGlzLmhpc3RvcnlJY29uIHx8IHsgaWNvbjogJ2xpc3QnIH07XG5cbiAgICAvLyBSZWdpc3RlciBmb3Jtc1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtcygpO1xuXG4gICAgLy8gRGlzYWJsZSBwYWdlLCBkdXJpbmcgbG9hZFxuICAgIHRoaXMuZGlzYWJsZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgLy8gTG9hZCBkYXRhXG4gICAgaWYgKHRoaXMuX2F1dG9Mb2FkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZEZyb21Sb3V0ZSgpLCB0aGlzLl9hdXRvTG9hZERlbGF5KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMudGl0bGVTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy50aXRsZVN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uVXBkYXRlVmlldy5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25VcGRhdGVWaWV3LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBXYWl0IGVuZCBvZiBzYXZpbmdcbiAgICBpZiAodGhpcy5zYXZpbmcpIHJldHVybiB3YWl0Rm9yRmFsc2UodGhpcy5zYXZpbmdTdWJqZWN0LCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QgfSk7XG5cbiAgICByZXR1cm4gc3VwZXIud2FpdElkbGUob3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBkYXRhIGZyb20gaWQsIHVzaW5nIHRoZSBkYXRhU2VydmljZVxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGxvYWQoXG4gICAgaWQ/OiBJRCxcbiAgICBvcHRzPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zICYge1xuICAgICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICAgIHVwZGF0ZVJvdXRlPzogYm9vbGVhbjtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9XG4gICkge1xuICAgIGlmICghdGhpcy5kYXRhU2VydmljZSkgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGxvYWQgZGF0YTogbWlzc2luZyAnZGF0YVNlcnZpY2UnIVwiKTtcblxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgLy8gTmV3IGRhdGFcbiAgICBpZiAoaXNOaWwoaWQpKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDcmVhdGUgdXNpbmcgZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyB0aGlzLmRhdGFUeXBlKCk7XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbk5ld0VudGl0eShkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIHtcbiAgICAgICAgICBvcGVuVGFiSW5kZXg6IDAsXG4gICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnIsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCBleGlzdGluZyBkYXRhXG4gICAgZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5sb2FkKGlkLCBvcHRzKTtcbiAgICAgICAgaWYgKCFkYXRhKSB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuREFUQV9OT1RfRk9VTkRfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5EQVRBX05PX0ZPVU5EJyB9O1xuICAgICAgICB0aGlzLl91c2FnZU1vZGUgPSB0aGlzLmNvbXB1dGVVc2FnZU1vZGUoZGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlMb2FkZWQoZGF0YSwgb3B0cyk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyhkYXRhLCBvcHRzKTtcbiAgICAgICAgdGhpcy5zdGFydExpc3RlbkNoYW5nZXMoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhblVzZXJXcml0ZShkYXRhOiBULCBvcHRzPzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY2FuVXNlcldyaXRlKGRhdGEsIG9wdHMpO1xuICB9XG5cbiAgc3RhcnRMaXN0ZW5DaGFuZ2VzKCkge1xuICAgIC8vIFNraXAgaWYgZGlzYWJsZWQsIG9yIGFscmVhZHkgbGlzdGVuaW5nXG4gICAgaWYgKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gfHwgIXRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHJldHVybjtcbiAgICAvLyBTa2lwIGlmIG5ldyAobm90aGluZyB0byBsaXN0ZW4pXG4gICAgaWYgKHRoaXMuaXNOZXdEYXRhKSByZXR1cm47XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGNoYW5nZXMgb24gc2VydmVyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW5DaGFuZ2VzKHRoaXMuZGF0YS5pZCwge1xuICAgICAgaW50ZXJ2YWw6IHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzLFxuICAgIH0pXG4gICAgICA/LnBpcGUoXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICAgIG1lcmdlTWFwKChkYXRhKSA9PlxuICAgICAgICAgIHRoaXMuc2F2aW5nXG4gICAgICAgICAgICA/IC8vIElmIHNhdmluZywgd2FpdCBlbmQsIHRvIGF2b2lkIHRvIGRldGVjdCBzZWxmIGNoYW5nZXNcbiAgICAgICAgICAgICAgZmlyc3RGYWxzZSh0aGlzLnNhdmluZ1N1YmplY3QpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IGRhdGEpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogb2YoZGF0YSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogVCkgPT4ge1xuICAgICAgICBjb25zdCBpc05ld2VyID0gaXNNb21lbnQoZGF0YS51cGRhdGVEYXRlKSAmJiAoIXRoaXMuZGF0YS51cGRhdGVEYXRlIHx8IGRhdGEudXBkYXRlRGF0ZS5pc0FmdGVyKHRoaXMuZGF0YS51cGRhdGVEYXRlKSk7XG4gICAgICAgIGlmICghaXNOZXdlcikgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAgICAgLy8gRWRpdG9yIGhhcyBubyBjaGFuZ2VzOiByZWxvYWRcbiAgICAgICAgaWYgKCF0aGlzLmRpcnR5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkYXRhLWVkaXRvcl0gQ2hhbmdlcyBkZXRlY3RlZCBvbiBzZXJ2ZXIsIGF0IHske2RhdGEudXBkYXRlRGF0ZX19OiByZWxvYWRpbmcgcGFnZS4uLmApO1xuICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2Fubm90IHJlbG9hZDogYWxlcnQgdGhlIHVzZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkYXRhLWVkaXRvcl0gQ2hhbmdlcyBkZXRlY3RlZCBvbiBzZXJ2ZXIsIGF0IHske2RhdGEudXBkYXRlRGF0ZX19LCBidXQgcGFnZSBpcyBkaXJ0eTogc2tpcCByZWxvYWRpbmcuYCk7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnRVJST1IuREFUQV9VUERBVEVfREFURV9DSEFOR0VEJywgdHlwZTogJ3dhcm5pbmcnLCBzaG93Q2xvc2VCdXR0b246IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gUmVnaXN0ZXIgc3Vic2NyaXB0aW9uXG4gICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbik7XG4gICAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IHtcbiAgICAgICAgdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RvcExpc3RlbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFzeW5jIHJlYWR5KG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLnJlYWR5KG9wdHMpO1xuXG4gICAgLy8gV2FpdCBzZXJ2aWNlIHRvIGJlIHJlYWR5XG4gICAgaWYgKGlzU3RhcnRhYmxlU2VydmljZSh0aGlzLmRhdGFTZXJ2aWNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5kYXRhU2VydmljZS5yZWFkeSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVZpZXcoXG4gICAgZGF0YTogVCB8IG51bGwsXG4gICAgb3B0cz86IHtcbiAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gICAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgICB1cGRhdGVSb3V0ZT86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZENoYW5nZWQgPVxuICAgICAgaXNOb3ROaWwoZGF0YS5pZCkgJiZcbiAgICAgIHRoaXMucHJldmlvdXNEYXRhSWQgIT09IHVuZGVmaW5lZCAmJiAvLyBJZ25vcmUgaWYgZmlyc3QgbG9hZGluZyAoPXVuZGVmaW5lZClcbiAgICAgIHRoaXMucHJldmlvdXNEYXRhSWQgIT09IGRhdGEuaWQ7XG5cbiAgICBvcHRzID0ge1xuICAgICAgdXBkYXRlUm91dGU6IHRoaXMuX2F1dG9VcGRhdGVSb3V0ZSAmJiBpZENoYW5nZWQgJiYgIXRoaXMubG9hZGluZyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wcmV2aW91c0RhdGFJZCA9IGRhdGEuaWQgfHwgbnVsbDtcblxuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICBhd2FpdCB0aGlzLnNldFZhbHVlKGRhdGEpO1xuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlld1N0YXRlKGRhdGEpO1xuXG4gICAgICAvLyBOZWVkIHRvIHVwZGF0ZSByb3V0ZVxuICAgICAgaWYgKG9wdHMudXBkYXRlUm91dGUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUYWJBbmRSb3V0ZShkYXRhLCBvcHRzKVxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUgLSBzaG91bGQgYmUgZXhlY3V0ZWQgQUZURVIgdXBkYXRlUm91dGUgYmVjYXVzZSBvZiBwYXRoIGNoYW5nZSAtIGZpeCAjMTg1XG4gICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy51cGRhdGVUaXRsZShkYXRhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIG5leHQgdGFiXG4gICAgICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUuXG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25VcGRhdGVWaWV3LmVtaXQoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHN0YXRlXG4gICAqL1xuICB1cGRhdGVWaWV3U3RhdGUoZGF0YTogVCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5pc05ld0RhdGEgfHwgdGhpcy5jYW5Vc2VyV3JpdGUoZGF0YSkpIHtcbiAgICAgIHRoaXMuZW5hYmxlKG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc2FibGUob3B0cyk7XG5cbiAgICAgIC8vIEFsbG93IHRvIHNvcnQgdGFibGVzXG4gICAgICB0aGlzLnRhYmxlcz8uZm9yRWFjaCgodCkgPT4gdC5lbmFibGVTb3J0KCkpO1xuICAgICAgdGhpcy5hc3luY1RhYmxlcz8uZm9yRWFjaCgodCkgPT4gdC5lbmFibGVTb3J0KCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHJvdXRlIGxvY2F0aW9uLCBhbmQgb3BlbiB0aGUgbmV4dCB0YWJcbiAgICovXG4gIGFzeW5jIHVwZGF0ZVRhYkFuZFJvdXRlKFxuICAgIGRhdGE6IFQsXG4gICAgb3B0cz86IHtcbiAgICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnF1ZXJ5UGFyYW1zIH07XG5cbiAgICAvLyBPcGVuIHRoZSBuZXh0IHRhYlxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cyAmJiBvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICBpZiAoIXRoaXMucXVlcnlUYWJJbmRleFBhcmFtTmFtZSB8fCAhdGhpcy5yb3V0ZSkgcmV0dXJuOyAvLyBTa2lwIHJvdXRlIHVwZGF0ZVxuXG4gICAgLy8gVXBkYXRlIHJvdXRlIGxvY2F0aW9uXG4gICAgcXVlcnlQYXJhbXNbdGhpcy5xdWVyeVRhYkluZGV4UGFyYW1OYW1lXSA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCAhPT0gMCA/IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA6IHVuZGVmaW5lZDtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJvdXRlKGRhdGEsIHF1ZXJ5UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHJvdXRlIGxvY2F0aW9uLCBhbmQgb3BlbiB0aGUgbmV4dCB0YWJcbiAgICovXG4gIHVwZGF0ZVRhYkluZGV4KHRhYkluZGV4PzogbnVtYmVyKSB7XG4gICAgaWYgKGlzTm90TmlsKHRhYkluZGV4KSAmJiB0YWJJbmRleCA+PSAwICYmIHRhYkluZGV4ICE9PSB0aGlzLnNlbGVjdGVkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRhYkluZGV4O1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlQW5kQ2xvc2UoZXZlbnQ6IEV2ZW50LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUoZXZlbnQpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZShldmVudCk7XG4gICAgfVxuICAgIHJldHVybiBzYXZlZDtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBlZGl0b3IsIGJ5IGNhbGxpbmcgdGhlIGRhdGFTZXJ2aWNlLnNhdmUoKS5cbiAgICogRW5zdXJlIHRoYXQgZWRpdG9yIGlmIHZhbGlkLiBJZiBub3QsIGRpc3BsYXkgYW4gZXJyb3JcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBzYXZlKGV2ZW50PzogRXZlbnQsIG9wdHM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNraXAgc2F2ZTogZWRpdG9yIGlzIGJ1c3kgKGxvYWRpbmcgb3Igc2F2aW5nKScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGlydHkgJiYgIXRoaXMuaXNOZXdEYXRhKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNraXAgc2F2ZTogZWRpdG9yIG5vdCBkaXJ0eScpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gV2FpdCBlbmQgb2YgYXN5bmMgdmFsaWRhdGlvblxuICAgIGF3YWl0IHRoaXMud2FpdFdoaWxlUGVuZGluZygpO1xuXG4gICAgLy8gSWYgaW52YWxpZFxuICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgIHRoaXMubG9nRm9ybUVycm9ycygpO1xuICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTYXZpbmcgZGF0YS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbXB1dGUgbmV4dCB0YWIgaW5kZXggKGlmIGVuYWJsZSlcbiAgICAgIGNvbnN0IG5leHRUYWJJbmRleCA9IHRoaXMuX2F1dG9PcGVuTmV4dFRhYiAmJiBpc05pbCh0aGlzLnByZXZpb3VzRGF0YUlkKSAmJiB0aGlzLmNvbXB1dGVOZXh0VGFiSW5kZXgoKTtcblxuICAgICAgLy8gU2F2ZSBhbGwgZGlydHkgdGFibGVzXG4gICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZURpcnR5Q2hpbGRyZW4oKTtcbiAgICAgIGlmICghc2F2ZWQpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gR2V0IGRhdGFcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG5cbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICAvLyBTYXZlIGZvcm1cbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5zYXZlKGRhdGEsIG9wdHMpO1xuXG4gICAgICBhd2FpdCB0aGlzLm9uRW50aXR5U2F2ZWQodXBkYXRlZERhdGEpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHZpZXcgKGUuZyBtZXRhZGF0YSlcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyh1cGRhdGVkRGF0YSwge1xuICAgICAgICAvLyBPcGVuIG5leHQgdGFiIG9ubHkgaWYgdXNlciBoYXMgbm90IGNoYW5nZWQgaXRcbiAgICAgICAgb3BlblRhYkluZGV4OiBuZXh0VGFiSW5kZXggPiB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID8gbmV4dFRhYkluZGV4IDogdW5kZWZpbmVkLFxuICAgICAgICAuLi5vcHRzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byByZW1vdGUgY2hhbmdlc1xuICAgICAgaWYgKCF0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uKSB0aGlzLnN0YXJ0TGlzdGVuQ2hhbmdlcygpO1xuXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7IC8vIENhbiBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzLCB1c2luZyBzZXRFcnJvcigpXG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7IC8vIFNjcm9sbCB0byB0b3AgKHRvIHNob3cgZXJyb3IpXG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuXG4gICAgICAvLyBDb25jdXJyZW50IGNoYW5nZSBvbiBwb2RcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5CQURfVVBEQVRFX0RBVEUgJiYgaXNOb3ROaWwodGhpcy5kYXRhLmlkKSkge1xuICAgICAgICAvLyBDYWxsIGEgZGF0YSByZWxvYWQgKGluIGJhY2tncm91bmQpLCB0byB1cGRhdGUgdGhlIEdyYXBoUUwgY2FjaGUsIGFuZCBhbGxvdyB0byBjYW5jZWwgY2hhbmdlc1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQodGhpcy5kYXRhLmlkLCB7IGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIERhdGEgY2FjaGUgcmVsb2FkZWQuIFVzZXIgY2FuIHJlbG9hZCBwYWdlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBkYXRhIChpZiBkaXJ0eSBhbmQgdmFsaWQpLCBhbmQgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiBuaWwgdmFsdWUuXG4gICAqL1xuICBhc3luYyBzYXZlQW5kR2V0RGF0YUlmVmFsaWQoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gRm9ybSBpcyBub3QgdmFsaWRcbiAgICBpZiAoIXRoaXMudmFsaWQpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB2YWxpZGF0aW9uIGlzIGZpbmlzaGVkXG4gICAgICBhd2FpdCBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyh0aGlzKTtcblxuICAgICAgLy8gSWYgaW52YWxpZDogT3BlbiB0aGUgZmlyc3QgdGFiIGluIGVycm9yXG4gICAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICAgIHRoaXMub3BlbkZpcnN0SW52YWxpZFRhYigpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDb250aW51ZSAodmFsaWQpXG4gICAgfVxuXG4gICAgLy8gRm9ybSBpcyB2YWxpZCwgYnV0IG5vdCBzYXZlZFxuICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZShuZXcgRXZlbnQoJ3NhdmUnKSk7XG4gICAgICBpZiAoIXNhdmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFZhbGlkIGFuZCBzYXZlZCBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShldmVudD86IEV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCB0aGlzLnNhdmluZykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgQWxlcnRzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUpO1xuICAgIGlmICghY29uZmlybWF0aW9uKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIEFza2luZyB0byBkZWxldGUuLi4nKTtcblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGRhdGFcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBpc05ldyA9IHRoaXMuaXNOZXdEYXRhO1xuXG4gICAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgaWYgKCFpc05ldykge1xuICAgICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmRlbGV0ZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eURlbGV0ZWQoZGF0YSk7XG5cbiAgICAgIC8vIFJlbW92ZSBwYWdlIGhpc3RvcnlcbiAgICAgIHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdhaXQsIHRoZW4gZ28gYmFjayAod2FpdCBpcyBuZWVkIGluIG9yZGVyIHRvIHVwZGF0ZSBiYWNrIGhyZWYgaXMgbmVlZClcbiAgICBhd2FpdCBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZ29CYWNrKCksIDUwMCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZCgpIHtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWQodGhpcy5kYXRhPy5pZCwgeyBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScgfSk7XG4gIH1cblxuICBhc3luYyB1bmxvYWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIudW5sb2FkKG9wdHMpO1xuICAgIHRoaXMuc3RvcExpc3RlbkNoYW5nZXMoKTtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRm9ybXMoKTtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIC8vIFRPRE86IGZpbmQgYSB3YXkgdG8gcmVtb3ZlIGN1cnJlbnQgcGFnZSBmcm9tIHRoZSBuYXZpZ2F0aW9uIGhpc3RvcnlcbiAgfVxuXG4gIGFzeW5jIGdvQmFjayhldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbj4ge1xuICAgIC8vIEdvIGJhY2tcbiAgICBpZiAodGhpcy50b29sYmFyPy5jYW5Hb0JhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2xiYXIuZ29CYWNrKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRCYWNrSHJlZikge1xuICAgICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUJhY2sodGhpcy5kZWZhdWx0QmFja0hyZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrIHRvIGhvbWVcbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVCYWNrKCcvJyk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRFcnJvcihvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBzdXBlci5yZXNldEVycm9yKG9wdHMpO1xuICB9XG5cbiAgc2V0RXJyb3IoZXJyOiBzdHJpbmcgfCBBcHBFcnJvcldpdGhEZXRhaWxzLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBkZXRhaWxzQ3NzQ2xhc3M/OiBzdHJpbmcgfSkge1xuICAgIGlmICghZXJyKSB7XG4gICAgICBzdXBlci5zZXRFcnJvcih1bmRlZmluZWQsIG9wdHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tlbnRpdHktZWRpdG9yXSBFcnJvcjogJyArIChlcnIgfHwgJycpKTtcbiAgICAgIHN1cGVyLnNldEVycm9yKGVyciBhcyBzdHJpbmcsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZW50aXR5LWVkaXRvcl0gRXJyb3I6ICcgKyBlcnIubWVzc2FnZSB8fCAnJywgZXJyKTtcbiAgICAgIGxldCB1c2VyTWVzc2FnZSA9IChlcnIubWVzc2FnZSAmJiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGVyci5tZXNzYWdlKSkgfHwgZXJyO1xuXG4gICAgICAvLyBBZGQgZGV0YWlscyBlcnJvciAoaWYgYW55KSB1bmRlciB0aGUgbWFpbiBtZXNzYWdlXG4gICAgICBjb25zdCBkZXRhaWxNZXNzYWdlID0gIWVyci5kZXRhaWxzIHx8IHR5cGVvZiBlcnIuZGV0YWlscyA9PT0gJ3N0cmluZycgPyAoZXJyLmRldGFpbHMgYXMgc3RyaW5nKSA6IGVyci5kZXRhaWxzLm1lc3NhZ2U7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGRldGFpbE1lc3NhZ2UpKSB7XG4gICAgICAgIGNvbnN0IGNzc0NsYXNzID0gb3B0cz8uZGV0YWlsc0Nzc0NsYXNzIHx8ICdlcnJvci1kZXRhaWxzJztcbiAgICAgICAgdXNlck1lc3NhZ2UgKz0gYDxici8+PHNtYWxsIGNsYXNzPVwiJHtjc3NDbGFzc31cIiB0aXRsZT1cIiR7ZGV0YWlsTWVzc2FnZX1cIj5gO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSBkZXRhaWxNZXNzYWdlLmxlbmd0aCA8IDcwID8gZGV0YWlsTWVzc2FnZSA6IGRldGFpbE1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDY3KSArICcuLi4nO1xuICAgICAgICB1c2VyTWVzc2FnZSArPSAnPC9zbWFsbD4nO1xuICAgICAgfVxuICAgICAgc3VwZXIuc2V0RXJyb3IodXNlck1lc3NhZ2UsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc25hcHNob3Qgcm91dGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGxvYWRGcm9tUm91dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgIGlmICghcm91dGUgfHwgaXNOaWxPckJsYW5rKHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBsb2FkIGZyb20gcm91dGU6IG1pc3NpbmcgJ3JvdXRlJyBvciAnb3B0aW9ucy5wYXRoSWRBdHRyaWJ1dGUnLlwiKTtcbiAgICB9XG4gICAgbGV0IGlkID0gcm91dGUucGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV07XG4gICAgaWYgKGlzTmlsKGlkKSB8fCBpZCA9PT0gJ25ldycpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQodW5kZWZpbmVkLCByb3V0ZS5wYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFzIG51bWJlciwgaWYgbmVlZFxuICAgICAgaWYgKGlzSW50KGlkKSkge1xuICAgICAgICBpZCA9IHBhcnNlSW50KGlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxvYWQoaWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB1bmRlZmluZWQgdG8ga2VlcCBzYW1lIHRhYlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgY29tcHV0ZU5leHRUYWJJbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG5leHRUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCArIDE7XG4gICAgcmV0dXJuIG5leHRUYWJJbmRleCA8IHRoaXMudGFiQ291bnQgPyBuZXh0VGFiSW5kZXggOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25CZWZvcmVFbnRpdHlMb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25OZXdFbnRpdHkoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlMb2FkZWQoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlTYXZlZChkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eURlbGV0ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVVzYWdlTW9kZShkYXRhOiBUKTogVXNhZ2VNb2RlIHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3ViY2xhc3Nlc1xuICAgIC8vIFVzaW5nIGxvY2FsIHNldHRpbmdzIGRlZmF1bHQgdmFsdWVcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy51c2FnZU1vZGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2FpdFdoaWxlUGVuZGluZyhvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcywgb3B0cyk7XG4gIH1cblxuICBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgdGhpcy5nZXRKc29uVmFsdWVUb1NhdmUoKTtcblxuICAgIGNvbnN0IHJlcyA9IG5ldyB0aGlzLmRhdGFUeXBlKCk7XG4gICAgcmVzLmZyb21PYmplY3QoanNvbik7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEpzb25WYWx1ZVRvU2F2ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB0aXRsZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVRpdGxlKGRhdGE/OiBUKSB7XG4gICAgZGF0YSA9IGRhdGEgfHwgdGhpcy5kYXRhO1xuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5jb21wdXRlVGl0bGUoZGF0YSk7XG4gICAgdGhpcy50aXRsZVN1YmplY3QubmV4dCh0aXRsZSk7XG5cbiAgICAvLyBJZiBOT1QgZGF0YSwgdGhlbiBhZGQgdG8gcGFnZSBoaXN0b3J5XG4gICAgaWYgKCF0aGlzLmlzTmV3RGF0YSkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMuY29tcHV0ZVBhZ2VIaXN0b3J5KHRpdGxlKTtcbiAgICAgIGlmIChwYWdlKSByZXR1cm4gdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMpIHtcbiAgICBpZiAoIXBhZ2UpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM6IHRydWUsXG4gICAgICByZW1vdmVUaXRsZVNtYWxsVGFnOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY29tcHV0ZVBhZ2VIaXN0b3J5KHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPEhpc3RvcnlQYWdlUmVmZXJlbmNlPiB7XG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdHktZWRpdG9yXSBDb21wdXRpbmcgcGFnZSBoaXN0b3J5LCB1c2luZyB1cmw6ICcgKyB0aGlzLnJvdXRlci51cmwpO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIHBhdGg6IHRoaXMucm91dGVyLnVybCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlbW92ZVBhZ2VIaXN0b3J5KHRoaXMucm91dGVyLnVybCwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVBhZ2VVcmwoaWQ6IElEIHwgJ25ldycpOiBzdHJpbmcgfCBhbnlbXSB7XG4gICAgY29uc3QgcGFyZW50VXJsID0gdGhpcy5nZXRQYXJlbnRQYWdlVXJsKCk7XG4gICAgcmV0dXJuIHBhcmVudFVybCAmJiBgJHtwYXJlbnRVcmx9LyR7aWR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYXJlbnRQYWdlVXJsKHdpdGhRdWVyeVBhcmFtcz86IGJvb2xlYW4pIHtcbiAgICBsZXQgcGFyZW50VXJsID0gdGhpcy5kZWZhdWx0QmFja0hyZWY7XG5cbiAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgaWYgKHdpdGhRdWVyeVBhcmFtcyAhPT0gdHJ1ZSAmJiBwYXJlbnRVcmwgJiYgcGFyZW50VXJsLmluZGV4T2YoJz8nKSAhPT0gLTEpIHtcbiAgICAgIHBhcmVudFVybCA9IHBhcmVudFVybC5zdWJzdHJpbmcoMCwgcGFyZW50VXJsLmluZGV4T2YoJz8nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFVybDtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0ZW5DaGFuZ2VzKGlkOiBJRCwgb3B0cz86IGFueSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmxpc3RlbkNoYW5nZXModGhpcy5kYXRhLmlkLCB7XG4gICAgICAvLyBNYWtlIHN1cmUgdG8gc2tpcCBjYWNoZSwgYmVjYXVzZSBOT1QgdGhlIGZ1bGwgZ3JhcGggd2lsbCBiZSBmZXRjaGVkIGJ5IHN1YnNjcmlwdGlvblxuICAgICAgLy8gV2hlbiBhIGNoYW5nZXMgb2NjdXIsIHdlIGNhbGwgcmVsb2FkKCkgdG8gZm9yY2UgcmVmZXRjaGluZyB0aGUgZnVsbCBncmFwaFxuICAgICAgZmV0Y2hQb2xpY3k6ICduby1jYWNoZScsXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUsIHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVSb3V0ZShkYXRhPzogVCwgcXVlcnlQYXJhbXM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBkYXRhID0gZGF0YSB8fCB0aGlzLmRhdGE7XG4gICAgaWYgKCFkYXRhIHx8ICF0aGlzLnJvdXRlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjdXJySWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCh0aGlzLnBhdGhJZEF0dHJpYnV0ZSk7XG4gICAgY29uc3QgZnV0dXJlSWQgPSBpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQudG9TdHJpbmcoKSA6ICduZXcnO1xuICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgLi4ucXVlcnlQYXJhbXMsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY3VycklkID09PSBmdXR1cmVJZCkge1xuICAgICAgLy8gVXBkYXRlIHF1ZXJ5UGFyYW0gb25seSAobm90IHRoZSBwYXRoKVxuICAgICAgLy8gLyFcXCBXZSBzaG91bGQgZ2V0IHF1ZXJ5IFBhcmFtcyBmcm9tIHRoZSB1cGRhdGVkIHJvdXRlLCBhbmQgbm90IGZyb20gc25hcHNob3QgdGhhdCBjYW4gYmUgb3V0ZGF0ZWRcbiAgICAgIGNvbnN0IGFjdHVhbFF1ZXJ5UGFyYW1zID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMucm91dGUucXVlcnlQYXJhbXMpO1xuICAgICAgaWYgKCFlcXVhbHMoYWN0dWFsUXVlcnlQYXJhbXMsIHRoaXMucXVlcnlQYXJhbXMpKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1VcGRhdGluZyByb3V0ZSB1c2luZyBxdWVyeVBhcmFtczogYCwgdGhpcy5xdWVyeVBhcmFtcyk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgcmVwbGFjZVVybDogZmFsc2UsXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgc3RhdGU6IHsgYW5pbWF0ZWQ6IGZhbHNlIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGFnZVVybChpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQgOiAnbmV3Jyk7XG4gICAgICBjb25zdCBjb21tYW5kczogYW55W10gPSBwYXRoICYmIHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IHBhdGguc3BsaXQoJy8nKS5zbGljZSgxKSA6IChwYXRoIGFzIGFueVtdKTtcbiAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkoY29tbWFuZHMpKSB7XG4gICAgICAgIC8vIEN1cnJlbnQgcm91dGUgd2FzICcvbmV3JyA9PiBjaGFuZ2UgdG8gJy9uZXc/aWQ9OmlkJyAodG8gYWxsb3cgQ3VzdG9tUmV1c2VTdHJhdGVneSB0byBkZXRlY3QgdGhhdCByb3V0ZSBjYW4gYmUgcmV1c2VkKVxuICAgICAgICBpZiAoY3VycklkID09PSAnbmV3JyAmJiB0aGlzLnF1ZXJ5UGFyYW1zW3RoaXMucGF0aElkQXR0cmlidXRlXSAhPT0gZnV0dXJlSWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgcm91dGUgL25ldyBpbnRvIC86aWQsIHVzaW5nIHF1ZXJ5UGFyYW1zOiBgLCBxdWVyeVBhcmFtcyk7XG4gICAgICAgICAgdGhpcy5xdWVyeVBhcmFtc1t0aGlzLnBhdGhJZEF0dHJpYnV0ZV0gPSBmdXR1cmVJZDtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nXSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIHN0YXRlOiB7IGFuaW1hdGVkOiBmYWxzZSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgcm91dGUgdG86IGAgKyBwYXRoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICBzdGF0ZTogeyBhbmltYXRlZDogZmFsc2UgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcGFnZSBVUkwnKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBmaXJzdCB0YWIgdGhhdCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIG9wZW5GaXJzdEludmFsaWRUYWIoKSB7XG4gICAgY29uc3QgaW52YWxpZFRhYkluZGV4ID0gdGhpcy5nZXRGaXJzdEludmFsaWRUYWJJbmRleCgpO1xuICAgIGlmIChpbnZhbGlkVGFiSW5kZXggIT09IC0xICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCAhPT0gaW52YWxpZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpbnZhbGlkVGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBhYnN0cmFjdCBtZXRob2RzICh0byBvdmVycmlkZSkgLS0gKi9cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcHV0ZVRpdGxlKGRhdGE6IFQpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBmb3JtKCk6IEZvcm1Hcm91cDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Rmlyc3RJbnZhbGlkVGFiSW5kZXgoKTogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWdpc3RlckZvcm1zKCk6IHZvaWQ7XG5cbiAgYWJzdHJhY3Qgc2V0VmFsdWUoZGF0YTogVCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cbiJdfQ==