@sumaris-net/ngx-components 18.12.0 → 18.12.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 (1383) hide show
  1. package/doc/changelog.md +3 -0
  2. package/esm2022/public_api.mjs +380 -0
  3. package/esm2022/src/app/admin/admin-routing.module.mjs +34 -0
  4. package/esm2022/src/app/admin/admin.module.mjs +32 -0
  5. package/esm2022/src/app/admin/services/filter/person.filter.mjs +76 -0
  6. package/esm2022/src/app/admin/services/person.service.mjs +184 -0
  7. package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
  8. package/esm2022/src/app/admin/users/users.mjs +379 -0
  9. package/esm2022/src/app/admin/users/users.module.mjs +56 -0
  10. package/esm2022/src/app/core/about/about.modal.mjs +86 -0
  11. package/esm2022/src/app/core/about/about.module.mjs +22 -0
  12. package/esm2022/src/app/core/account/account.module.mjs +75 -0
  13. package/esm2022/src/app/core/account/account.page.mjs +364 -0
  14. package/esm2022/src/app/core/account/new-token.form.mjs +106 -0
  15. package/esm2022/src/app/core/account/new-token.modal.mjs +66 -0
  16. package/esm2022/src/app/core/account/password/change-password.form.mjs +63 -0
  17. package/esm2022/src/app/core/account/password/change-password.module.mjs +22 -0
  18. package/esm2022/src/app/core/account/password/change-password.page.mjs +150 -0
  19. package/esm2022/src/app/core/account/token.table.mjs +157 -0
  20. package/esm2022/src/app/core/auth/auth.form.mjs +159 -0
  21. package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
  22. package/esm2022/src/app/core/auth/auth.module.mjs +56 -0
  23. package/esm2022/src/app/core/auth/reset-password.modal.mjs +89 -0
  24. package/esm2022/src/app/core/core.module.mjs +151 -0
  25. package/esm2022/src/app/core/core.testing.module.mjs +107 -0
  26. package/esm2022/src/app/core/form/array/form-array.mjs +328 -0
  27. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +23 -0
  28. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +94 -0
  29. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +108 -0
  30. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +31 -0
  31. package/esm2022/src/app/core/form/entity/editor.class.mjs +268 -0
  32. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +420 -0
  33. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +741 -0
  34. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
  35. package/esm2022/src/app/core/form/entity/entity.module.mjs +32 -0
  36. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +190 -0
  37. package/esm2022/src/app/core/form/form-container.class.mjs +340 -0
  38. package/esm2022/src/app/core/form/form.class.mjs +337 -0
  39. package/esm2022/src/app/core/form/form.module.mjs +70 -0
  40. package/esm2022/src/app/core/form/form.utils.mjs +205 -0
  41. package/esm2022/src/app/core/form/list/list.form.mjs +235 -0
  42. package/esm2022/src/app/core/form/list/list.module.mjs +31 -0
  43. package/esm2022/src/app/core/form/properties/properties.form.mjs +317 -0
  44. package/esm2022/src/app/core/form/properties/properties.module.mjs +37 -0
  45. package/esm2022/src/app/core/form/properties/properties.table.mjs +264 -0
  46. package/esm2022/src/app/core/form/properties/properties.utils.mjs +304 -0
  47. package/esm2022/src/app/core/form/properties/property.validator.mjs +70 -0
  48. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +104 -0
  49. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +23 -0
  50. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
  51. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +30 -0
  52. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +161 -0
  53. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +31 -0
  54. package/esm2022/src/app/core/form/username/username.form.mjs +55 -0
  55. package/esm2022/src/app/core/form/username/username.module.mjs +20 -0
  56. package/esm2022/src/app/core/graphql/graphql.module.mjs +14 -0
  57. package/esm2022/src/app/core/graphql/graphql.service.mjs +781 -0
  58. package/esm2022/src/app/core/graphql/graphql.utils.mjs +119 -0
  59. package/esm2022/src/app/core/home/home.mjs +382 -0
  60. package/esm2022/src/app/core/home/home.module.mjs +46 -0
  61. package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
  62. package/esm2022/src/app/core/icon/icon.module.mjs +20 -0
  63. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +394 -0
  64. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +31 -0
  65. package/esm2022/src/app/core/menu/menu.component.mjs +258 -0
  66. package/esm2022/src/app/core/menu/menu.model.mjs +272 -0
  67. package/esm2022/src/app/core/menu/menu.module.mjs +47 -0
  68. package/esm2022/src/app/core/menu/menu.service.mjs +666 -0
  69. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
  70. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +50 -0
  71. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +158 -0
  72. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +60 -0
  73. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +28 -0
  74. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +31 -0
  75. package/esm2022/src/app/core/peer/select-peer.modal.mjs +344 -0
  76. package/esm2022/src/app/core/peer/select-peer.module.mjs +36 -0
  77. package/esm2022/src/app/core/register/register-confirm.page.mjs +90 -0
  78. package/esm2022/src/app/core/register/register.form.mjs +194 -0
  79. package/esm2022/src/app/core/register/register.modal.mjs +55 -0
  80. package/esm2022/src/app/core/register/register.module.mjs +23 -0
  81. package/esm2022/src/app/core/services/account.service.mjs +1358 -0
  82. package/esm2022/src/app/core/services/auth-guard.service.mjs +74 -0
  83. package/esm2022/src/app/core/services/base-entity-service.class.mjs +485 -0
  84. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +230 -0
  85. package/esm2022/src/app/core/services/base58.mjs +83 -0
  86. package/esm2022/src/app/core/services/config/core.config.mjs +258 -0
  87. package/esm2022/src/app/core/services/config.service.mjs +384 -0
  88. package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
  89. package/esm2022/src/app/core/services/errors.mjs +54 -0
  90. package/esm2022/src/app/core/services/local-settings.service.mjs +516 -0
  91. package/esm2022/src/app/core/services/model/account.model.mjs +178 -0
  92. package/esm2022/src/app/core/services/model/config.model.mjs +107 -0
  93. package/esm2022/src/app/core/services/model/department.model.mjs +35 -0
  94. package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
  95. package/esm2022/src/app/core/services/model/entity.model.mjs +338 -0
  96. package/esm2022/src/app/core/services/model/filter.model.mjs +93 -0
  97. package/esm2022/src/app/core/services/model/history.model.mjs +2 -0
  98. package/esm2022/src/app/core/services/model/model.enum.mjs +11 -0
  99. package/esm2022/src/app/core/services/model/node-feature.model.mjs +31 -0
  100. package/esm2022/src/app/core/services/model/peer.model.mjs +113 -0
  101. package/esm2022/src/app/core/services/model/person.model.mjs +114 -0
  102. package/esm2022/src/app/core/services/model/referential.model.mjs +205 -0
  103. package/esm2022/src/app/core/services/model/settings.model.mjs +6 -0
  104. package/esm2022/src/app/core/services/model/token.model.mjs +57 -0
  105. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +195 -0
  106. package/esm2022/src/app/core/services/network.service.mjs +638 -0
  107. package/esm2022/src/app/core/services/network.types.mjs +2 -0
  108. package/esm2022/src/app/core/services/network.utils.mjs +35 -0
  109. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +38 -0
  110. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
  111. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
  112. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  113. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  114. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
  115. package/esm2022/src/app/core/services/platform.service.mjs +627 -0
  116. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +427 -0
  117. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +450 -0
  118. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
  119. package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
  120. package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
  121. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
  122. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +57 -0
  123. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +27 -0
  124. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +55 -0
  125. package/esm2022/src/app/core/settings/settings.module.mjs +23 -0
  126. package/esm2022/src/app/core/settings/settings.page.mjs +403 -0
  127. package/esm2022/src/app/core/table/async-table.class.mjs +1811 -0
  128. package/esm2022/src/app/core/table/column/actions-column.component.mjs +130 -0
  129. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +117 -0
  130. package/esm2022/src/app/core/table/column/row-field.component.mjs +116 -0
  131. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +404 -0
  132. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +405 -0
  133. package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
  134. package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
  135. package/esm2022/src/app/core/table/table.class.mjs +1867 -0
  136. package/esm2022/src/app/core/table/table.model.mjs +21 -0
  137. package/esm2022/src/app/core/table/table.module.mjs +51 -0
  138. package/esm2022/src/app/core/table/table.pipes.mjs +77 -0
  139. package/esm2022/src/app/core/table/table.utils.mjs +34 -0
  140. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +32 -0
  141. package/esm2022/src/app/core/table/testing/table.testing.mjs +329 -0
  142. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +25 -0
  143. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
  144. package/esm2022/src/app/core/table/testing/table2.testing.mjs +273 -0
  145. package/esm2022/src/app/shared/alerts.mjs +243 -0
  146. package/esm2022/src/app/shared/audio/audio.mjs +255 -0
  147. package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
  148. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +30 -0
  149. package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
  150. package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
  151. package/esm2022/src/app/shared/constants.mjs +16 -0
  152. package/esm2022/src/app/shared/dates.mjs +180 -0
  153. package/esm2022/src/app/shared/debug/debug-service.class.mjs +3 -0
  154. package/esm2022/src/app/shared/debug/debug.component.mjs +44 -0
  155. package/esm2022/src/app/shared/debug/debug.module.mjs +23 -0
  156. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +91 -0
  157. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +75 -0
  158. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +30 -0
  159. package/esm2022/src/app/shared/directives/directives.module.mjs +24 -0
  160. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
  161. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
  162. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
  163. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
  164. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
  165. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +43 -0
  166. package/esm2022/src/app/shared/events.mjs +64 -0
  167. package/esm2022/src/app/shared/file/csv.utils.mjs +97 -0
  168. package/esm2022/src/app/shared/file/file.service.mjs +118 -0
  169. package/esm2022/src/app/shared/file/file.utils.mjs +117 -0
  170. package/esm2022/src/app/shared/file/images.utils.mjs +186 -0
  171. package/esm2022/src/app/shared/file/json.utils.mjs +58 -0
  172. package/esm2022/src/app/shared/file/uri.utils.mjs +29 -0
  173. package/esm2022/src/app/shared/file/url.utils.mjs +164 -0
  174. package/esm2022/src/app/shared/focusable.mjs +6 -0
  175. package/esm2022/src/app/shared/form/field.component.mjs +393 -0
  176. package/esm2022/src/app/shared/form/field.model.mjs +82 -0
  177. package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
  178. package/esm2022/src/app/shared/forms.mjs +510 -0
  179. package/esm2022/src/app/shared/functions.mjs +672 -0
  180. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +86 -0
  181. package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
  182. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +2 -0
  183. package/esm2022/src/app/shared/graph/colors.utils.mjs +60 -0
  184. package/esm2022/src/app/shared/graph/graph-colors.mjs +214 -0
  185. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +65 -0
  186. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  187. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +147 -0
  188. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +24 -0
  189. package/esm2022/src/app/shared/http/http.utils.mjs +56 -0
  190. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +443 -0
  191. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +62 -0
  192. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
  193. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +87 -0
  194. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +37 -0
  195. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +59 -0
  196. package/esm2022/src/app/shared/image/image.model.mjs +2 -0
  197. package/esm2022/src/app/shared/image/image.module.mjs +24 -0
  198. package/esm2022/src/app/shared/image/image.service.mjs +109 -0
  199. package/esm2022/src/app/shared/inputs.mjs +279 -0
  200. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +27 -0
  201. package/esm2022/src/app/shared/logging/log-level.model.mjs +48 -0
  202. package/esm2022/src/app/shared/logging/logger.model.mjs +47 -0
  203. package/esm2022/src/app/shared/logging/logging-service.class.mjs +125 -0
  204. package/esm2022/src/app/shared/logging/logging-service.config.mjs +2 -0
  205. package/esm2022/src/app/shared/logging/logging-service.module.mjs +30 -0
  206. package/esm2022/src/app/shared/markdown/markdown.component.mjs +321 -0
  207. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +34 -0
  208. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +99 -0
  209. package/esm2022/src/app/shared/markdown/markdown.module.mjs +87 -0
  210. package/esm2022/src/app/shared/markdown/markdown.service.mjs +204 -0
  211. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +87 -0
  212. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +55 -0
  213. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +30 -0
  214. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +46 -0
  215. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +1313 -0
  216. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +79 -0
  217. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +18 -0
  218. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +242 -0
  219. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +251 -0
  220. package/esm2022/src/app/shared/material/badge/badge.module.mjs +20 -0
  221. package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
  222. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +67 -0
  223. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +371 -0
  224. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +72 -0
  225. package/esm2022/src/app/shared/material/chips/chips.module.mjs +71 -0
  226. package/esm2022/src/app/shared/material/chips/material.chips.mjs +836 -0
  227. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +151 -0
  228. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +76 -0
  229. package/esm2022/src/app/shared/material/datetime/material.date.mjs +471 -0
  230. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +457 -0
  231. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +693 -0
  232. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +136 -0
  233. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +127 -0
  234. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +118 -0
  235. package/esm2022/src/app/shared/material/duration/duration.module.mjs +61 -0
  236. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +16 -0
  237. package/esm2022/src/app/shared/material/duration/material.duration.mjs +283 -0
  238. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +85 -0
  239. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +319 -0
  240. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +432 -0
  241. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +231 -0
  242. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +68 -0
  243. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +137 -0
  244. package/esm2022/src/app/shared/material/material.animations.mjs +200 -0
  245. package/esm2022/src/app/shared/material/material.config.mjs +3 -0
  246. package/esm2022/src/app/shared/material/material.module.mjs +229 -0
  247. package/esm2022/src/app/shared/material/material.testing.module.mjs +245 -0
  248. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +51 -0
  249. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
  250. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +379 -0
  251. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +52 -0
  252. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
  253. package/esm2022/src/app/shared/material/test/test-component.mjs +264 -0
  254. package/esm2022/src/app/shared/material/testing/common.test.mjs +111 -0
  255. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +42 -0
  256. package/esm2022/src/app/shared/material/text/text-form.component.mjs +205 -0
  257. package/esm2022/src/app/shared/material/text/text-form.module.mjs +63 -0
  258. package/esm2022/src/app/shared/modules.mjs +12 -0
  259. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +303 -0
  260. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
  261. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +24 -0
  262. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
  263. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +74 -0
  264. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +28 -0
  265. package/esm2022/src/app/shared/observables.mjs +100 -0
  266. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +217 -0
  267. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +24 -0
  268. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +29 -0
  269. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +50 -0
  270. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
  271. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
  272. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +18 -0
  273. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +23 -0
  274. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +34 -0
  275. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +53 -0
  276. package/esm2022/src/app/shared/pipes/form.pipes.mjs +219 -0
  277. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +50 -0
  278. package/esm2022/src/app/shared/pipes/html.pipes.mjs +69 -0
  279. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
  280. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +65 -0
  281. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +67 -0
  282. package/esm2022/src/app/shared/pipes/math.pipes.mjs +77 -0
  283. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
  284. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +17 -0
  285. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +63 -0
  286. package/esm2022/src/app/shared/pipes/pipes.module.mjs +285 -0
  287. package/esm2022/src/app/shared/pipes/property.pipes.mjs +135 -0
  288. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +179 -0
  289. package/esm2022/src/app/shared/pipes/string.pipes.mjs +183 -0
  290. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
  291. package/esm2022/src/app/shared/pipes/types.pipes.mjs +74 -0
  292. package/esm2022/src/app/shared/pipes/url.pipes.mjs +43 -0
  293. package/esm2022/src/app/shared/platforms.mjs +81 -0
  294. package/esm2022/src/app/shared/print/print.service.mjs +305 -0
  295. package/esm2022/src/app/shared/regexps.mjs +96 -0
  296. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +217 -0
  297. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +19 -0
  298. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +2 -0
  299. package/esm2022/src/app/shared/services/entity-service.class.mjs +10 -0
  300. package/esm2022/src/app/shared/services/job.utils.mjs +92 -0
  301. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +353 -0
  302. package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
  303. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +118 -0
  304. package/esm2022/src/app/shared/services/startable-service.class.mjs +107 -0
  305. package/esm2022/src/app/shared/services/translate-context.service.mjs +107 -0
  306. package/esm2022/src/app/shared/services/validator-service.class.mjs +2 -0
  307. package/esm2022/src/app/shared/services.mjs +85 -0
  308. package/esm2022/src/app/shared/shared-routing.module.mjs +72 -0
  309. package/esm2022/src/app/shared/shared.module.mjs +229 -0
  310. package/esm2022/src/app/shared/shared.testing.module.mjs +108 -0
  311. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +279 -0
  312. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +42 -0
  313. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +27 -0
  314. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +25 -0
  315. package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
  316. package/esm2022/src/app/shared/storage/storage.utils.mjs +13 -0
  317. package/esm2022/src/app/shared/testing/maskito.test.mjs +41 -0
  318. package/esm2022/src/app/shared/testing/observable.test.mjs +94 -0
  319. package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
  320. package/esm2022/src/app/shared/toast/toast.testing.mjs +54 -0
  321. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +31 -0
  322. package/esm2022/src/app/shared/toast/toasts.mjs +134 -0
  323. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +62 -0
  324. package/esm2022/src/app/shared/toolbar/toolbar.mjs +267 -0
  325. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +26 -0
  326. package/esm2022/src/app/shared/types.mjs +2 -0
  327. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
  328. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +30 -0
  329. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +109 -0
  330. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +216 -0
  331. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +26 -0
  332. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +114 -0
  333. package/esm2022/src/app/shared/validator/validators.mjs +621 -0
  334. package/esm2022/src/app/shared/version/versions.mjs +81 -0
  335. package/esm2022/src/app/social/job/job.module.mjs +23 -0
  336. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
  337. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +235 -0
  338. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +47 -0
  339. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +29 -0
  340. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +91 -0
  341. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +38 -0
  342. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +34 -0
  343. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +22 -0
  344. package/esm2022/src/app/social/message/message.form.mjs +141 -0
  345. package/esm2022/src/app/social/message/message.modal.mjs +110 -0
  346. package/esm2022/src/app/social/message/message.model.mjs +75 -0
  347. package/esm2022/src/app/social/message/message.module.mjs +22 -0
  348. package/esm2022/src/app/social/message/message.service.mjs +110 -0
  349. package/esm2022/src/app/social/social.errors.mjs +10 -0
  350. package/esm2022/src/app/social/social.module.mjs +22 -0
  351. package/esm2022/src/app/social/social.testing.module.mjs +40 -0
  352. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +127 -0
  353. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +260 -0
  354. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +257 -0
  355. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +129 -0
  356. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +22 -0
  357. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +128 -0
  358. package/esm2022/src/app/social/user-event/user-event.model.mjs +2 -0
  359. package/esm2022/src/app/social/user-event/user-event.module.mjs +23 -0
  360. package/esm2022/src/app/social/user-event/user-event.service.mjs +512 -0
  361. package/esm2022/src/environments/environment.class.mjs +65 -0
  362. package/esm2022/src/environments/environment.loader.mjs +77 -0
  363. package/esm2022/src/environments/environment.mjs +109 -0
  364. package/esm2022/sumaris-net.ngx-components.mjs +5 -0
  365. package/fesm2022/sumaris-net.ngx-components.mjs +48744 -0
  366. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
  367. package/index.d.ts +5 -0
  368. package/package.json +19 -132
  369. package/public_api.d.ts +344 -0
  370. package/src/app/admin/admin-routing.module.d.ts +9 -0
  371. package/src/app/admin/admin.module.d.ts +10 -0
  372. package/src/app/admin/services/filter/person.filter.d.ts +22 -0
  373. package/src/app/admin/services/person.service.d.ts +37 -0
  374. package/src/app/admin/services/validator/person.validator.d.ts +23 -0
  375. package/src/app/admin/users/users.d.ts +61 -0
  376. package/src/app/admin/users/users.module.d.ts +14 -0
  377. package/src/app/core/about/about.modal.d.ts +32 -0
  378. package/src/app/core/about/about.module.d.ts +11 -0
  379. package/src/app/core/account/account.module.d.ts +18 -0
  380. package/src/app/core/account/account.page.d.ts +83 -0
  381. package/src/app/core/account/new-token.form.d.ts +29 -0
  382. package/src/app/core/account/new-token.modal.d.ts +29 -0
  383. package/src/app/core/account/password/change-password.form.d.ts +19 -0
  384. package/src/app/core/account/password/change-password.module.d.ts +11 -0
  385. package/src/app/core/account/password/change-password.page.d.ts +36 -0
  386. package/src/app/core/account/token.table.d.ts +27 -0
  387. package/src/app/core/auth/auth.form.d.ts +38 -0
  388. package/src/app/core/auth/auth.modal.d.ts +24 -0
  389. package/src/app/core/auth/auth.module.d.ts +13 -0
  390. package/src/app/core/auth/reset-password.modal.d.ts +29 -0
  391. package/src/app/core/core.module.d.ts +28 -0
  392. package/src/app/core/core.testing.module.d.ts +15 -0
  393. package/src/app/core/form/array/form-array.d.ts +137 -0
  394. package/src/app/core/form/array/testing/form-array-test.module.d.ts +12 -0
  395. package/src/app/core/form/array/testing/form-array.test.d.ts +26 -0
  396. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +37 -0
  397. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +9 -0
  398. package/src/app/core/form/entity/editor.class.d.ts +84 -0
  399. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +126 -0
  400. package/src/app/core/form/entity/entity-editor.class.d.ts +204 -0
  401. package/src/app/core/form/entity/entity-metadata.component.d.ts +13 -0
  402. package/src/app/core/form/entity/entity.module.d.ts +10 -0
  403. package/src/app/core/form/entity/tab-editor.class.d.ts +66 -0
  404. package/src/app/core/form/form-container.class.d.ts +127 -0
  405. package/src/app/core/form/form.class.d.ts +144 -0
  406. package/src/app/core/form/form.module.d.ts +14 -0
  407. package/src/app/core/form/form.utils.d.ts +260 -0
  408. package/src/app/core/form/list/list.form.d.ts +81 -0
  409. package/src/app/core/form/list/list.module.d.ts +9 -0
  410. package/src/app/core/form/properties/properties.form.d.ts +92 -0
  411. package/src/app/core/form/properties/properties.module.d.ts +11 -0
  412. package/src/app/core/form/properties/properties.table.d.ts +72 -0
  413. package/src/app/core/form/properties/properties.utils.d.ts +59 -0
  414. package/src/app/core/form/properties/property.validator.d.ts +27 -0
  415. package/src/app/core/form/properties/testing/properties-form.test.d.ts +22 -0
  416. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +12 -0
  417. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +16 -0
  418. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +11 -0
  419. package/src/app/core/form/text-popover/text-popover.component.d.ts +80 -0
  420. package/src/app/core/form/text-popover/text-popover.module.d.ts +9 -0
  421. package/src/app/core/form/username/username.form.d.ts +19 -0
  422. package/src/app/core/form/username/username.module.d.ts +9 -0
  423. package/src/app/core/graphql/graphql.module.d.ts +7 -0
  424. package/src/app/core/graphql/graphql.service.d.ts +142 -0
  425. package/src/app/core/graphql/graphql.utils.d.ts +47 -0
  426. package/src/app/core/home/home.d.ts +109 -0
  427. package/src/app/core/home/home.module.d.ts +14 -0
  428. package/src/app/core/icon/icon.component.d.ts +13 -0
  429. package/src/app/core/icon/icon.module.d.ts +9 -0
  430. package/src/app/core/install/install-upgrade-card.component.d.ts +63 -0
  431. package/src/app/core/install/install-upgrade-card.module.d.ts +9 -0
  432. package/src/app/core/menu/menu.component.d.ts +66 -0
  433. package/src/app/core/menu/menu.model.d.ts +144 -0
  434. package/src/app/core/menu/menu.module.d.ts +12 -0
  435. package/src/app/core/menu/menu.service.d.ts +93 -0
  436. package/src/app/core/menu/sub-menu-tab.directive.d.ts +29 -0
  437. package/src/app/core/menu/testing/menu-other.testing.d.ts +15 -0
  438. package/src/app/core/menu/testing/menu.testing.d.ts +51 -0
  439. package/src/app/core/menu/testing/menu.testing.module.d.ts +12 -0
  440. package/src/app/core/offline/update-offline-mode-card.component.d.ts +11 -0
  441. package/src/app/core/offline/update-offline-mode-card.module.d.ts +9 -0
  442. package/src/app/core/peer/select-peer.modal.d.ts +101 -0
  443. package/src/app/core/peer/select-peer.module.d.ts +12 -0
  444. package/src/app/core/register/register-confirm.page.d.ts +24 -0
  445. package/src/app/core/register/register.form.d.ts +49 -0
  446. package/src/app/core/register/register.modal.d.ts +14 -0
  447. package/src/app/core/register/register.module.d.ts +12 -0
  448. package/src/app/core/services/account.service.d.ts +207 -0
  449. package/src/app/core/services/auth-guard.service.d.ts +17 -0
  450. package/src/app/core/services/base-entity-service.class.d.ts +135 -0
  451. package/src/app/core/services/base-graphql-service.class.d.ts +77 -0
  452. package/src/app/core/services/base58.d.ts +7 -0
  453. package/src/app/core/services/config/core.config.d.ts +46 -0
  454. package/src/app/core/services/config.service.d.ts +63 -0
  455. package/src/app/core/services/crypto.service.d.ts +44 -0
  456. package/src/app/core/services/errors.d.ts +65 -0
  457. package/src/app/core/services/local-settings.service.d.ts +99 -0
  458. package/src/app/core/services/model/account.model.d.ts +56 -0
  459. package/src/app/core/services/model/config.model.d.ts +36 -0
  460. package/src/app/core/services/model/department.model.d.ts +11 -0
  461. package/src/app/core/services/model/entity.decorators.d.ts +17 -0
  462. package/src/app/core/services/model/entity.model.d.ts +133 -0
  463. package/src/app/core/services/model/filter.model.d.ts +37 -0
  464. package/src/app/core/services/model/history.model.d.ts +20 -0
  465. package/src/app/core/services/model/model.enum.d.ts +7 -0
  466. package/src/app/core/services/model/node-feature.model.d.ts +14 -0
  467. package/src/app/core/services/model/peer.model.d.ts +35 -0
  468. package/src/app/core/services/model/person.model.d.ts +37 -0
  469. package/src/app/core/services/model/referential.model.d.ts +84 -0
  470. package/src/app/core/services/model/settings.model.d.ts +29 -0
  471. package/src/app/core/services/model/token.model.d.ts +22 -0
  472. package/src/app/core/services/model/tree-item-entity.model.d.ts +53 -0
  473. package/src/app/core/services/network.service.d.ts +159 -0
  474. package/src/app/core/services/network.types.d.ts +4 -0
  475. package/src/app/core/services/network.utils.d.ts +38 -0
  476. package/src/app/core/services/pipes/account.pipes.d.ts +15 -0
  477. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +9 -0
  478. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +11 -0
  479. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  480. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +13 -0
  481. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +15 -0
  482. package/src/app/core/services/platform.service.d.ts +110 -0
  483. package/src/app/core/services/storage/entities-storage.service.d.ts +108 -0
  484. package/src/app/core/services/storage/entity-store.class.d.ts +113 -0
  485. package/src/app/core/services/testing/referential-filter.model.d.ts +9 -0
  486. package/src/app/core/services/testing/referential.validator.d.ts +22 -0
  487. package/src/app/core/services/validator/account.validator.d.ts +24 -0
  488. package/src/app/core/services/validator/base.validator.class.d.ts +21 -0
  489. package/src/app/core/services/validator/local-settings.validator.d.ts +18 -0
  490. package/src/app/core/services/validator/user-settings.validator.d.ts +10 -0
  491. package/src/app/core/services/validator/user-token.validator.d.ts +13 -0
  492. package/src/app/core/settings/settings.module.d.ts +12 -0
  493. package/src/app/core/settings/settings.page.d.ts +88 -0
  494. package/src/app/core/table/async-table.class.d.ts +395 -0
  495. package/src/app/core/table/column/actions-column.component.d.ts +62 -0
  496. package/src/app/core/table/column/nav-actions-column.component.d.ts +46 -0
  497. package/src/app/core/table/column/row-field.component.d.ts +40 -0
  498. package/src/app/core/table/entities-async-table-datasource.class.d.ts +100 -0
  499. package/src/app/core/table/entities-table-datasource.class.d.ts +103 -0
  500. package/src/app/core/table/memory-table.class.d.ts +25 -0
  501. package/src/app/core/table/table-select-columns.component.d.ts +22 -0
  502. package/src/app/core/table/table.class.d.ts +400 -0
  503. package/src/app/core/table/table.model.d.ts +31 -0
  504. package/src/app/core/table/table.module.d.ts +14 -0
  505. package/src/app/core/table/table.pipes.d.ts +29 -0
  506. package/src/app/core/table/table.utils.d.ts +13 -0
  507. package/src/app/core/table/testing/table-validator.service.d.ts +17 -0
  508. package/src/app/core/table/testing/table.testing.d.ts +54 -0
  509. package/src/app/core/table/testing/table.testing.module.d.ts +14 -0
  510. package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
  511. package/src/app/core/table/testing/table2.testing.d.ts +48 -0
  512. package/src/app/shared/alerts.d.ts +55 -0
  513. package/src/app/shared/audio/audio.d.ts +45 -0
  514. package/src/app/shared/audio/audio.testing.d.ts +13 -0
  515. package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
  516. package/src/app/shared/capacitor/keyboard.d.ts +16 -0
  517. package/src/app/shared/capacitor/plugins.d.ts +7 -0
  518. package/src/app/shared/constants.d.ts +13 -0
  519. package/src/app/shared/dates.d.ts +61 -0
  520. package/src/app/shared/debug/debug-service.class.d.ts +5 -0
  521. package/src/app/shared/debug/debug.component.d.ts +14 -0
  522. package/src/app/shared/debug/debug.module.d.ts +12 -0
  523. package/src/app/shared/directives/autofocus.directive.d.ts +18 -0
  524. package/src/app/shared/directives/autoresize.directive.d.ts +20 -0
  525. package/src/app/shared/directives/autotitle.directive.d.ts +11 -0
  526. package/src/app/shared/directives/directives.module.d.ts +14 -0
  527. package/src/app/shared/directives/drag-and-drop.directive.d.ts +17 -0
  528. package/src/app/shared/directives/ng-var.directive.d.ts +12 -0
  529. package/src/app/shared/directives/resizable/resizable.component.d.ts +21 -0
  530. package/src/app/shared/directives/resizable/resizable.directive.d.ts +12 -0
  531. package/src/app/shared/directives/resizable/resizable.module.d.ts +8 -0
  532. package/src/app/shared/directives/throttled-click.directive.d.ts +16 -0
  533. package/src/app/shared/events.d.ts +29 -0
  534. package/src/app/shared/file/csv.utils.d.ts +30 -0
  535. package/src/app/shared/file/file.service.d.ts +23 -0
  536. package/src/app/shared/file/file.utils.d.ts +20 -0
  537. package/src/app/shared/file/images.utils.d.ts +36 -0
  538. package/src/app/shared/file/json.utils.d.ts +19 -0
  539. package/src/app/shared/file/uri.utils.d.ts +8 -0
  540. package/src/app/shared/file/url.utils.d.ts +77 -0
  541. package/src/app/shared/focusable.d.ts +4 -0
  542. package/src/app/shared/form/field.component.d.ts +85 -0
  543. package/src/app/shared/form/field.model.d.ts +82 -0
  544. package/src/app/shared/form/loading-spinner.d.ts +8 -0
  545. package/src/app/shared/forms.d.ts +135 -0
  546. package/src/app/shared/functions.d.ts +206 -0
  547. package/src/app/shared/geolocation/geolocation.utils.d.ts +19 -0
  548. package/src/app/shared/gesture/gesture-config.d.ts +15 -0
  549. package/src/app/shared/gesture/hammer.utils.d.ts +16 -0
  550. package/src/app/shared/graph/colors.utils.d.ts +17 -0
  551. package/src/app/shared/graph/graph-colors.d.ts +63 -0
  552. package/src/app/shared/guard/component-dirty.guard.d.ts +14 -0
  553. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +8 -0
  554. package/src/app/shared/hotkeys/hotkeys.service.d.ts +48 -0
  555. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +11 -0
  556. package/src/app/shared/http/http.utils.d.ts +28 -0
  557. package/src/app/shared/image/gallery/image-gallery.component.d.ts +137 -0
  558. package/src/app/shared/image/gallery/image-gallery.module.d.ts +15 -0
  559. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
  560. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
  561. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +16 -0
  562. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +13 -0
  563. package/src/app/shared/image/image.model.d.ts +7 -0
  564. package/src/app/shared/image/image.module.d.ts +8 -0
  565. package/src/app/shared/image/image.service.d.ts +36 -0
  566. package/src/app/shared/inputs.d.ts +36 -0
  567. package/src/app/shared/interceptors/progess.interceptor.d.ts +8 -0
  568. package/src/app/shared/logging/log-level.model.d.ts +38 -0
  569. package/src/app/shared/logging/logger.model.d.ts +68 -0
  570. package/src/app/shared/logging/logging-service.class.d.ts +39 -0
  571. package/src/app/shared/logging/logging-service.config.d.ts +25 -0
  572. package/src/app/shared/logging/logging-service.module.d.ts +9 -0
  573. package/src/app/shared/markdown/markdown.component.d.ts +86 -0
  574. package/src/app/shared/markdown/markdown.directive.d.ts +13 -0
  575. package/src/app/shared/markdown/markdown.modal.d.ts +49 -0
  576. package/src/app/shared/markdown/markdown.module.d.ts +17 -0
  577. package/src/app/shared/markdown/markdown.service.d.ts +37 -0
  578. package/src/app/shared/markdown/markdown.utils.d.ts +26 -0
  579. package/src/app/shared/markdown/testing/markdown.test.d.ts +18 -0
  580. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +12 -0
  581. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +74 -0
  582. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +211 -0
  583. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +22 -0
  584. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +5 -0
  585. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +48 -0
  586. package/src/app/shared/material/badge/badge.directive.d.ts +43 -0
  587. package/src/app/shared/material/badge/badge.module.d.ts +10 -0
  588. package/src/app/shared/material/badge/badge.test.d.ts +21 -0
  589. package/src/app/shared/material/boolean/boolean.module.d.ts +20 -0
  590. package/src/app/shared/material/boolean/material.boolean.d.ts +93 -0
  591. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +26 -0
  592. package/src/app/shared/material/chips/chips.module.d.ts +21 -0
  593. package/src/app/shared/material/chips/material.chips.d.ts +164 -0
  594. package/src/app/shared/material/chips/testing/chips.test.d.ts +32 -0
  595. package/src/app/shared/material/datetime/datetime.module.d.ts +24 -0
  596. package/src/app/shared/material/datetime/material.date.d.ts +90 -0
  597. package/src/app/shared/material/datetime/material.dateshort.d.ts +89 -0
  598. package/src/app/shared/material/datetime/material.datetime.d.ts +116 -0
  599. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +37 -0
  600. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +32 -0
  601. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +31 -0
  602. package/src/app/shared/material/duration/duration.module.d.ts +18 -0
  603. package/src/app/shared/material/duration/duration.utils.d.ts +2 -0
  604. package/src/app/shared/material/duration/material.duration.d.ts +64 -0
  605. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +23 -0
  606. package/src/app/shared/material/latlong/latlong.utils.d.ts +59 -0
  607. package/src/app/shared/material/latlong/material.latlong-input.d.ts +85 -0
  608. package/src/app/shared/material/latlong/material.latlong.d.ts +90 -0
  609. package/src/app/shared/material/latlong/material.latlong.module.d.ts +21 -0
  610. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +28 -0
  611. package/src/app/shared/material/material.animations.d.ts +8 -0
  612. package/src/app/shared/material/material.config.d.ts +3 -0
  613. package/src/app/shared/material/material.module.d.ts +45 -0
  614. package/src/app/shared/material/material.testing.module.d.ts +32 -0
  615. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +12 -0
  616. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +10 -0
  617. package/src/app/shared/material/swipe/material.swipe.d.ts +89 -0
  618. package/src/app/shared/material/swipe/swipe.module.d.ts +16 -0
  619. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +22 -0
  620. package/src/app/shared/material/test/test-component.d.ts +75 -0
  621. package/src/app/shared/material/testing/common.test.d.ts +25 -0
  622. package/src/app/shared/material/text/testing/text-form.testing.d.ts +19 -0
  623. package/src/app/shared/material/text/text-form.component.d.ts +66 -0
  624. package/src/app/shared/material/text/text-form.module.d.ts +16 -0
  625. package/src/app/shared/modules.d.ts +9 -0
  626. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +62 -0
  627. package/src/app/shared/named-filter/named-filter.model.d.ts +32 -0
  628. package/src/app/shared/named-filter/named-filter.module.d.ts +13 -0
  629. package/src/app/shared/named-filter/named-filter.service.d.ts +32 -0
  630. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +34 -0
  631. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +10 -0
  632. package/src/app/shared/observables.d.ts +30 -0
  633. package/src/app/shared/pipes/arrays.pipe.d.ts +82 -0
  634. package/src/app/shared/pipes/badge.pipes.d.ts +7 -0
  635. package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
  636. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +25 -0
  637. package/src/app/shared/pipes/date-format.pipe.d.ts +35 -0
  638. package/src/app/shared/pipes/date-from-now.pipe.d.ts +12 -0
  639. package/src/app/shared/pipes/dates.pipe.d.ts +10 -0
  640. package/src/app/shared/pipes/display-with.pipe.d.ts +8 -0
  641. package/src/app/shared/pipes/duration.pipe.d.ts +23 -0
  642. package/src/app/shared/pipes/file-size.pipe.d.ts +30 -0
  643. package/src/app/shared/pipes/form.pipes.d.ts +69 -0
  644. package/src/app/shared/pipes/highlight.pipe.d.ts +11 -0
  645. package/src/app/shared/pipes/html.pipes.d.ts +22 -0
  646. package/src/app/shared/pipes/latlong-format.pipe.d.ts +20 -0
  647. package/src/app/shared/pipes/maps.pipe.d.ts +23 -0
  648. package/src/app/shared/pipes/maskito.pipe.d.ts +14 -0
  649. package/src/app/shared/pipes/math.pipes.d.ts +26 -0
  650. package/src/app/shared/pipes/ng-init.pipe.d.ts +8 -0
  651. package/src/app/shared/pipes/number-format.pipe.d.ts +9 -0
  652. package/src/app/shared/pipes/observable.pipes.d.ts +25 -0
  653. package/src/app/shared/pipes/pipes.module.d.ts +35 -0
  654. package/src/app/shared/pipes/property.pipes.d.ts +41 -0
  655. package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
  656. package/src/app/shared/pipes/string.pipes.d.ts +68 -0
  657. package/src/app/shared/pipes/translate-context.pipe.d.ts +17 -0
  658. package/src/app/shared/pipes/types.pipes.d.ts +30 -0
  659. package/src/app/shared/pipes/url.pipes.d.ts +27 -0
  660. package/src/app/shared/platforms.d.ts +16 -0
  661. package/src/app/shared/print/print.service.d.ts +94 -0
  662. package/src/app/shared/regexps.d.ts +32 -0
  663. package/src/app/shared/rx-state/rx-state.decorators.d.ts +43 -0
  664. package/src/app/shared/rx-state/rx-state.module.d.ts +10 -0
  665. package/src/app/shared/rx-state/rx-state.types.d.ts +4 -0
  666. package/src/app/shared/services/entity-service.class.d.ts +75 -0
  667. package/src/app/shared/services/job.utils.d.ts +20 -0
  668. package/src/app/shared/services/memory-entity-service.class.d.ts +79 -0
  669. package/src/app/shared/services/progress-bar.service.d.ts +20 -0
  670. package/src/app/shared/services/startable-observable-service.class.d.ts +36 -0
  671. package/src/app/shared/services/startable-service.class.d.ts +37 -0
  672. package/src/app/shared/services/translate-context.service.d.ts +29 -0
  673. package/src/app/shared/services/validator-service.class.d.ts +11 -0
  674. package/src/app/shared/services.d.ts +17 -0
  675. package/src/app/shared/shared-routing.module.d.ts +23 -0
  676. package/src/app/shared/shared.module.d.ts +33 -0
  677. package/src/app/shared/shared.testing.module.d.ts +20 -0
  678. package/src/app/shared/storage/storage-explorer.component.d.ts +59 -0
  679. package/src/app/shared/storage/storage-explorer.module.d.ts +13 -0
  680. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +9 -0
  681. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +10 -0
  682. package/src/app/shared/storage/storage.service.d.ts +22 -0
  683. package/src/app/shared/storage/storage.utils.d.ts +19 -0
  684. package/src/app/shared/testing/maskito.test.d.ts +10 -0
  685. package/src/app/shared/testing/observable.test.d.ts +25 -0
  686. package/src/app/shared/testing/tests.page.d.ts +20 -0
  687. package/src/app/shared/toast/toast.testing.d.ts +15 -0
  688. package/src/app/shared/toast/toast.testing.module.d.ts +12 -0
  689. package/src/app/shared/toast/toasts.d.ts +16 -0
  690. package/src/app/shared/toolbar/modal-toolbar.d.ts +21 -0
  691. package/src/app/shared/toolbar/toolbar.d.ts +70 -0
  692. package/src/app/shared/toolbar/toolbar.module.d.ts +16 -0
  693. package/src/app/shared/types.d.ts +36 -0
  694. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +21 -0
  695. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +11 -0
  696. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +41 -0
  697. package/src/app/shared/upload-file/upload-file.component.d.ts +50 -0
  698. package/src/app/shared/upload-file/upload-file.model.d.ts +30 -0
  699. package/src/app/shared/validator/form-error-adapter.class.d.ts +33 -0
  700. package/src/app/shared/validator/validators.d.ts +139 -0
  701. package/src/app/shared/version/versions.d.ts +26 -0
  702. package/src/app/social/job/job.module.d.ts +12 -0
  703. package/src/app/social/job/progression/job-progression.component.d.ts +23 -0
  704. package/src/app/social/job/progression/job-progression.icon.d.ts +62 -0
  705. package/src/app/social/job/progression/job-progression.list.d.ts +19 -0
  706. package/src/app/social/job/progression/job-progression.model.d.ts +10 -0
  707. package/src/app/social/job/progression/job-progression.service.d.ts +33 -0
  708. package/src/app/social/job/testing/job-progression.testing.d.ts +13 -0
  709. package/src/app/social/job/testing/job-progression.testing.service.d.ts +9 -0
  710. package/src/app/social/job/testing/job.testing.module.d.ts +11 -0
  711. package/src/app/social/message/message.form.d.ts +36 -0
  712. package/src/app/social/message/message.modal.d.ts +43 -0
  713. package/src/app/social/message/message.model.d.ts +33 -0
  714. package/src/app/social/message/message.module.d.ts +12 -0
  715. package/src/app/social/message/message.service.d.ts +32 -0
  716. package/src/app/social/social.errors.d.ts +9 -0
  717. package/src/app/social/social.module.d.ts +20 -0
  718. package/src/app/social/social.testing.module.d.ts +13 -0
  719. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +32 -0
  720. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +71 -0
  721. package/src/app/social/user-event/testing/user-event.testing.d.ts +35 -0
  722. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +42 -0
  723. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +11 -0
  724. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +42 -0
  725. package/src/app/social/user-event/user-event.model.d.ts +44 -0
  726. package/src/app/social/user-event/user-event.module.d.ts +13 -0
  727. package/src/app/social/user-event/user-event.service.d.ts +124 -0
  728. package/src/assets/manifest.json +1 -1
  729. package/src/environments/environment.class.d.ts +75 -0
  730. package/src/environments/environment.d.ts +2 -0
  731. package/src/environments/environment.loader.d.ts +24 -0
  732. package/.editorconfig +0 -24
  733. package/.eslintrc.json +0 -95
  734. package/.gitattribute +0 -1
  735. package/.github/CONTRIBUTING.md +0 -10
  736. package/.github/ISSUE_TEMPLATE.md +0 -6
  737. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  738. package/.github/github_disclaimer.md +0 -14
  739. package/.gitlab-ci.yml +0 -46
  740. package/.graphqlconfig +0 -15
  741. package/.prettierignore +0 -9
  742. package/.prettierrc.json +0 -17
  743. package/angular.json +0 -236
  744. package/capacitor.config.ts +0 -49
  745. package/graphql.config.yml +0 -13
  746. package/ionic.config.json +0 -7
  747. package/karma.conf.js +0 -38
  748. package/ng-package.json +0 -21
  749. package/ngcc.config.js +0 -9
  750. package/public_api.ts +0 -426
  751. package/resources/README.md +0 -7
  752. package/resources/icon/TODO.md +0 -11
  753. package/resources/icon.png +0 -0
  754. package/resources/icon.png.md5 +0 -1
  755. package/resources/icon.xcf +0 -0
  756. package/resources/ios/icon/icon-1024.png +0 -0
  757. package/resources/ios/icon/icon-108@2x.png +0 -0
  758. package/resources/ios/icon/icon-20.png +0 -0
  759. package/resources/ios/icon/icon-20@2x.png +0 -0
  760. package/resources/ios/icon/icon-20@3x.png +0 -0
  761. package/resources/ios/icon/icon-24@2x.png +0 -0
  762. package/resources/ios/icon/icon-27.5@2x.png +0 -0
  763. package/resources/ios/icon/icon-29.png +0 -0
  764. package/resources/ios/icon/icon-29@2x.png +0 -0
  765. package/resources/ios/icon/icon-29@3x.png +0 -0
  766. package/resources/ios/icon/icon-40.png +0 -0
  767. package/resources/ios/icon/icon-40@2x.png +0 -0
  768. package/resources/ios/icon/icon-40@3x.png +0 -0
  769. package/resources/ios/icon/icon-44@2x.png +0 -0
  770. package/resources/ios/icon/icon-50.png +0 -0
  771. package/resources/ios/icon/icon-50@2x.png +0 -0
  772. package/resources/ios/icon/icon-60.png +0 -0
  773. package/resources/ios/icon/icon-60@2x.png +0 -0
  774. package/resources/ios/icon/icon-60@3x.png +0 -0
  775. package/resources/ios/icon/icon-72.png +0 -0
  776. package/resources/ios/icon/icon-72@2x.png +0 -0
  777. package/resources/ios/icon/icon-76.png +0 -0
  778. package/resources/ios/icon/icon-76@2x.png +0 -0
  779. package/resources/ios/icon/icon-83.5@2x.png +0 -0
  780. package/resources/ios/icon/icon-86@2x.png +0 -0
  781. package/resources/ios/icon/icon-98@2x.png +0 -0
  782. package/resources/ios/icon/icon-small.png +0 -0
  783. package/resources/ios/icon/icon-small@2x.png +0 -0
  784. package/resources/ios/icon/icon-small@3x.png +0 -0
  785. package/resources/ios/icon/icon.png +0 -0
  786. package/resources/ios/icon/icon@2x.png +0 -0
  787. package/resources/ios/splash/Default-1792h~iphone.png +0 -0
  788. package/resources/ios/splash/Default-2436h.png +0 -0
  789. package/resources/ios/splash/Default-2688h~iphone.png +0 -0
  790. package/resources/ios/splash/Default-568h@2x~iphone.png +0 -0
  791. package/resources/ios/splash/Default-667h.png +0 -0
  792. package/resources/ios/splash/Default-736h.png +0 -0
  793. package/resources/ios/splash/Default-Landscape-1792h~iphone.png +0 -0
  794. package/resources/ios/splash/Default-Landscape-2436h.png +0 -0
  795. package/resources/ios/splash/Default-Landscape-2688h~iphone.png +0 -0
  796. package/resources/ios/splash/Default-Landscape-736h.png +0 -0
  797. package/resources/ios/splash/Default-Landscape@2x~ipad.png +0 -0
  798. package/resources/ios/splash/Default-Landscape@~ipadpro.png +0 -0
  799. package/resources/ios/splash/Default-Landscape~ipad.png +0 -0
  800. package/resources/ios/splash/Default-Portrait@2x~ipad.png +0 -0
  801. package/resources/ios/splash/Default-Portrait@~ipadpro.png +0 -0
  802. package/resources/ios/splash/Default-Portrait~ipad.png +0 -0
  803. package/resources/ios/splash/Default@2x~iphone.png +0 -0
  804. package/resources/ios/splash/Default@2x~universal~anyany.png +0 -0
  805. package/resources/ios/splash/Default~iphone.png +0 -0
  806. package/resources/splash.png +0 -0
  807. package/resources/splash.png.md5 +0 -1
  808. package/scripts/build-android.sh +0 -18
  809. package/scripts/docker-start.sh +0 -6
  810. package/scripts/emulate-android.sh +0 -17
  811. package/scripts/env-android.sh +0 -83
  812. package/scripts/env-clean.sh +0 -23
  813. package/scripts/env-global.sh +0 -154
  814. package/scripts/install-android-sdk-tools.sh +0 -73
  815. package/scripts/ionic-update.sh +0 -24
  816. package/scripts/node/build-i18n.js +0 -37
  817. package/scripts/node/playground.ts +0 -9
  818. package/scripts/node/resources.js +0 -108
  819. package/scripts/release.sh +0 -162
  820. package/scripts/run-android.sh +0 -59
  821. package/scripts/test.sh +0 -19
  822. package/src/app/admin/admin-routing.module.ts +0 -26
  823. package/src/app/admin/admin.module.ts +0 -20
  824. package/src/app/admin/services/filter/person.filter.ts +0 -86
  825. package/src/app/admin/services/person.service.ts +0 -244
  826. package/src/app/admin/services/validator/person.validator.ts +0 -86
  827. package/src/app/admin/users/users.html +0 -613
  828. package/src/app/admin/users/users.module.ts +0 -32
  829. package/src/app/admin/users/users.scss +0 -80
  830. package/src/app/admin/users/users.ts +0 -387
  831. package/src/app/app-routing.module.ts +0 -165
  832. package/src/app/app.component.html +0 -14
  833. package/src/app/app.component.scss +0 -4
  834. package/src/app/app.component.ts +0 -252
  835. package/src/app/app.module.ts +0 -355
  836. package/src/app/core/about/about.modal.html +0 -145
  837. package/src/app/core/about/about.modal.scss +0 -22
  838. package/src/app/core/about/about.modal.ts +0 -69
  839. package/src/app/core/about/about.module.ts +0 -14
  840. package/src/app/core/account/account.module.ts +0 -43
  841. package/src/app/core/account/account.page.html +0 -329
  842. package/src/app/core/account/account.page.scss +0 -20
  843. package/src/app/core/account/account.page.ts +0 -389
  844. package/src/app/core/account/new-token.form.html +0 -90
  845. package/src/app/core/account/new-token.form.ts +0 -99
  846. package/src/app/core/account/new-token.modal.html +0 -52
  847. package/src/app/core/account/new-token.modal.ts +0 -68
  848. package/src/app/core/account/password/change-password.form.html +0 -62
  849. package/src/app/core/account/password/change-password.form.scss +0 -0
  850. package/src/app/core/account/password/change-password.form.ts +0 -58
  851. package/src/app/core/account/password/change-password.module.ts +0 -14
  852. package/src/app/core/account/password/change-password.page.html +0 -41
  853. package/src/app/core/account/password/change-password.page.scss +0 -49
  854. package/src/app/core/account/password/change-password.page.ts +0 -158
  855. package/src/app/core/account/token.table.html +0 -160
  856. package/src/app/core/account/token.table.scss +0 -7
  857. package/src/app/core/account/token.table.ts +0 -160
  858. package/src/app/core/auth/auth.form.html +0 -108
  859. package/src/app/core/auth/auth.form.scss +0 -0
  860. package/src/app/core/auth/auth.form.ts +0 -165
  861. package/src/app/core/auth/auth.modal.html +0 -50
  862. package/src/app/core/auth/auth.modal.scss +0 -0
  863. package/src/app/core/auth/auth.modal.ts +0 -78
  864. package/src/app/core/auth/auth.module.ts +0 -35
  865. package/src/app/core/auth/reset-password.modal.html +0 -59
  866. package/src/app/core/auth/reset-password.modal.ts +0 -83
  867. package/src/app/core/core.module.ts +0 -72
  868. package/src/app/core/core.testing.module.ts +0 -80
  869. package/src/app/core/form/array/form-array.ts +0 -409
  870. package/src/app/core/form/array/testing/form-array-test.module.ts +0 -15
  871. package/src/app/core/form/array/testing/form-array.test.html +0 -196
  872. package/src/app/core/form/array/testing/form-array.test.ts +0 -119
  873. package/src/app/core/form/buttons/form-buttons-bar.component.html +0 -82
  874. package/src/app/core/form/buttons/form-buttons-bar.component.scss +0 -19
  875. package/src/app/core/form/buttons/form-buttons-bar.component.ts +0 -89
  876. package/src/app/core/form/buttons/form-buttons-bar.module.ts +0 -20
  877. package/src/app/core/form/entity/editor.class.ts +0 -295
  878. package/src/app/core/form/entity/entity-editor-modal.class.ts +0 -494
  879. package/src/app/core/form/entity/entity-editor.class.ts +0 -894
  880. package/src/app/core/form/entity/entity-metadata.component.html +0 -57
  881. package/src/app/core/form/entity/entity-metadata.component.scss +0 -40
  882. package/src/app/core/form/entity/entity-metadata.component.ts +0 -18
  883. package/src/app/core/form/entity/entity.module.ts +0 -20
  884. package/src/app/core/form/entity/tab-editor.class.ts +0 -224
  885. package/src/app/core/form/form-container.class.ts +0 -380
  886. package/src/app/core/form/form.class.ts +0 -377
  887. package/src/app/core/form/form.module.ts +0 -38
  888. package/src/app/core/form/form.utils.ts +0 -305
  889. package/src/app/core/form/list/list.form.html +0 -68
  890. package/src/app/core/form/list/list.form.scss +0 -40
  891. package/src/app/core/form/list/list.form.ts +0 -266
  892. package/src/app/core/form/list/list.module.ts +0 -20
  893. package/src/app/core/form/properties/properties.form.html +0 -160
  894. package/src/app/core/form/properties/properties.form.scss +0 -21
  895. package/src/app/core/form/properties/properties.form.ts +0 -331
  896. package/src/app/core/form/properties/properties.module.ts +0 -24
  897. package/src/app/core/form/properties/properties.table.html +0 -228
  898. package/src/app/core/form/properties/properties.table.scss +0 -0
  899. package/src/app/core/form/properties/properties.table.ts +0 -275
  900. package/src/app/core/form/properties/properties.utils.ts +0 -391
  901. package/src/app/core/form/properties/property.validator.ts +0 -82
  902. package/src/app/core/form/properties/testing/properties-form.test.html +0 -23
  903. package/src/app/core/form/properties/testing/properties-form.test.ts +0 -109
  904. package/src/app/core/form/properties/testing/properties-form.testing.module.ts +0 -14
  905. package/src/app/core/form/text-popover/testing/text-popover.testing.html +0 -50
  906. package/src/app/core/form/text-popover/testing/text-popover.testing.module.ts +0 -21
  907. package/src/app/core/form/text-popover/testing/text-popover.testing.ts +0 -76
  908. package/src/app/core/form/text-popover/text-popover.component.html +0 -89
  909. package/src/app/core/form/text-popover/text-popover.component.scss +0 -7
  910. package/src/app/core/form/text-popover/text-popover.component.ts +0 -176
  911. package/src/app/core/form/text-popover/text-popover.module.ts +0 -19
  912. package/src/app/core/form/username/username.form.html +0 -27
  913. package/src/app/core/form/username/username.form.ts +0 -44
  914. package/src/app/core/form/username/username.module.ts +0 -12
  915. package/src/app/core/graphql/graphql.module.ts +0 -7
  916. package/src/app/core/graphql/graphql.service.ts +0 -962
  917. package/src/app/core/graphql/graphql.utils.ts +0 -166
  918. package/src/app/core/home/home.html +0 -295
  919. package/src/app/core/home/home.module.ts +0 -27
  920. package/src/app/core/home/home.scss +0 -279
  921. package/src/app/core/home/home.ts +0 -422
  922. package/src/app/core/icon/icon.component.html +0 -19
  923. package/src/app/core/icon/icon.component.ts +0 -22
  924. package/src/app/core/icon/icon.module.ts +0 -13
  925. package/src/app/core/install/install-upgrade-card.component.html +0 -144
  926. package/src/app/core/install/install-upgrade-card.component.scss +0 -3
  927. package/src/app/core/install/install-upgrade-card.component.ts +0 -445
  928. package/src/app/core/install/install-upgrade-card.module.ts +0 -18
  929. package/src/app/core/menu/menu.component.html +0 -219
  930. package/src/app/core/menu/menu.component.scss +0 -304
  931. package/src/app/core/menu/menu.component.ts +0 -251
  932. package/src/app/core/menu/menu.filter.ts +0 -28
  933. package/src/app/core/menu/menu.model.ts +0 -356
  934. package/src/app/core/menu/menu.module.ts +0 -27
  935. package/src/app/core/menu/menu.service.ts +0 -727
  936. package/src/app/core/menu/sub-menu-tab.directive.ts +0 -99
  937. package/src/app/core/menu/testing/menu-other.testing.ts +0 -57
  938. package/src/app/core/menu/testing/menu.testing.html +0 -143
  939. package/src/app/core/menu/testing/menu.testing.module.ts +0 -52
  940. package/src/app/core/menu/testing/menu.testing.scss +0 -5
  941. package/src/app/core/menu/testing/menu.testing.ts +0 -175
  942. package/src/app/core/offline/update-offline-mode-card.component.html +0 -39
  943. package/src/app/core/offline/update-offline-mode-card.component.scss +0 -3
  944. package/src/app/core/offline/update-offline-mode-card.component.ts +0 -23
  945. package/src/app/core/offline/update-offline-mode-card.module.ts +0 -20
  946. package/src/app/core/peer/select-peer.modal.html +0 -317
  947. package/src/app/core/peer/select-peer.modal.scss +0 -41
  948. package/src/app/core/peer/select-peer.modal.ts +0 -366
  949. package/src/app/core/peer/select-peer.module.ts +0 -23
  950. package/src/app/core/register/register-confirm.page.html +0 -51
  951. package/src/app/core/register/register-confirm.page.scss +0 -56
  952. package/src/app/core/register/register-confirm.page.ts +0 -90
  953. package/src/app/core/register/register.form.html +0 -143
  954. package/src/app/core/register/register.form.scss +0 -10
  955. package/src/app/core/register/register.form.ts +0 -218
  956. package/src/app/core/register/register.modal.html +0 -66
  957. package/src/app/core/register/register.modal.ts +0 -50
  958. package/src/app/core/register/register.module.ts +0 -15
  959. package/src/app/core/services/account.service.ts +0 -1567
  960. package/src/app/core/services/auth-guard.service.ts +0 -70
  961. package/src/app/core/services/base-entity-service.class.ts +0 -659
  962. package/src/app/core/services/base-graphql-service.class.ts +0 -319
  963. package/src/app/core/services/base58.ts +0 -90
  964. package/src/app/core/services/config/core.config.ts +0 -263
  965. package/src/app/core/services/config.service.ts +0 -425
  966. package/src/app/core/services/crypto.service.ts +0 -126
  967. package/src/app/core/services/errors.ts +0 -80
  968. package/src/app/core/services/local-settings.service.spec.ts +0 -39
  969. package/src/app/core/services/local-settings.service.ts +0 -605
  970. package/src/app/core/services/model/account.model.ts +0 -188
  971. package/src/app/core/services/model/config.model.ts +0 -116
  972. package/src/app/core/services/model/department.model.ts +0 -34
  973. package/src/app/core/services/model/entity.decorators.ts +0 -110
  974. package/src/app/core/services/model/entity.model.ts +0 -409
  975. package/src/app/core/services/model/filter.model.ts +0 -127
  976. package/src/app/core/services/model/history.model.ts +0 -25
  977. package/src/app/core/services/model/model.enum.ts +0 -10
  978. package/src/app/core/services/model/node-feature.model.ts +0 -31
  979. package/src/app/core/services/model/peer.model.ts +0 -119
  980. package/src/app/core/services/model/person.model.ts +0 -122
  981. package/src/app/core/services/model/referential.model.ts +0 -253
  982. package/src/app/core/services/model/settings.model.ts +0 -37
  983. package/src/app/core/services/model/token.model.ts +0 -60
  984. package/src/app/core/services/model/tree-item-entity.model.ts +0 -230
  985. package/src/app/core/services/network.service.spec.ts +0 -47
  986. package/src/app/core/services/network.service.ts +0 -761
  987. package/src/app/core/services/network.types.ts +0 -7
  988. package/src/app/core/services/network.utils.ts +0 -83
  989. package/src/app/core/services/pipes/account.pipes.ts +0 -22
  990. package/src/app/core/services/pipes/department-to-string.pipe.ts +0 -13
  991. package/src/app/core/services/pipes/person-to-string.pipe.ts +0 -13
  992. package/src/app/core/services/pipes/pipes.module.ts +0 -30
  993. package/src/app/core/services/pipes/referential-to-string.pipe.ts +0 -18
  994. package/src/app/core/services/pipes/usage-mode.pipes.ts +0 -23
  995. package/src/app/core/services/platform.service.spec.ts +0 -50
  996. package/src/app/core/services/platform.service.ts +0 -694
  997. package/src/app/core/services/storage/entities-storage.service.ts +0 -557
  998. package/src/app/core/services/storage/entity-store.class.ts +0 -589
  999. package/src/app/core/services/testing/local-settings.config.ts +0 -35
  1000. package/src/app/core/services/testing/referential-filter.model.ts +0 -28
  1001. package/src/app/core/services/testing/referential.validator.ts +0 -58
  1002. package/src/app/core/services/testing/user-settings.config.ts +0 -77
  1003. package/src/app/core/services/validator/account.validator.ts +0 -50
  1004. package/src/app/core/services/validator/base.validator.class.ts +0 -51
  1005. package/src/app/core/services/validator/local-settings.validator.ts +0 -59
  1006. package/src/app/core/services/validator/user-settings.validator.ts +0 -22
  1007. package/src/app/core/services/validator/user-token.validator.ts +0 -54
  1008. package/src/app/core/settings/settings.module.ts +0 -15
  1009. package/src/app/core/settings/settings.page.html +0 -300
  1010. package/src/app/core/settings/settings.page.ts +0 -455
  1011. package/src/app/core/table/async-table.class.ts +0 -2019
  1012. package/src/app/core/table/column/actions-column.component.html +0 -219
  1013. package/src/app/core/table/column/actions-column.component.scss +0 -17
  1014. package/src/app/core/table/column/actions-column.component.ts +0 -83
  1015. package/src/app/core/table/column/nav-actions-column.component.html +0 -119
  1016. package/src/app/core/table/column/nav-actions-column.component.ts +0 -108
  1017. package/src/app/core/table/column/row-field.component.html +0 -43
  1018. package/src/app/core/table/column/row-field.component.scss +0 -0
  1019. package/src/app/core/table/column/row-field.component.ts +0 -63
  1020. package/src/app/core/table/entities-async-table-datasource.class.ts +0 -501
  1021. package/src/app/core/table/entities-table-datasource.class.ts +0 -499
  1022. package/src/app/core/table/memory-table.class.ts +0 -56
  1023. package/src/app/core/table/table-select-columns.component.html +0 -56
  1024. package/src/app/core/table/table-select-columns.component.ts +0 -49
  1025. package/src/app/core/table/table.class.ts +0 -2080
  1026. package/src/app/core/table/table.model.ts +0 -39
  1027. package/src/app/core/table/table.module.ts +0 -28
  1028. package/src/app/core/table/table.pipes.ts +0 -87
  1029. package/src/app/core/table/table.utils.ts +0 -42
  1030. package/src/app/core/table/testing/multi-table.testing.html +0 -456
  1031. package/src/app/core/table/testing/multi-table.testing.ts +0 -263
  1032. package/src/app/core/table/testing/table-validator.service.ts +0 -29
  1033. package/src/app/core/table/testing/table.testing.html +0 -556
  1034. package/src/app/core/table/testing/table.testing.module.ts +0 -16
  1035. package/src/app/core/table/testing/table.testing.scss +0 -32
  1036. package/src/app/core/table/testing/table.testing.ts +0 -329
  1037. package/src/app/core/table/testing/table2-validator.service.ts +0 -19
  1038. package/src/app/core/table/testing/table2.testing.html +0 -470
  1039. package/src/app/core/table/testing/table2.testing.scss +0 -25
  1040. package/src/app/core/table/testing/table2.testing.ts +0 -274
  1041. package/src/app/shared/alerts.ts +0 -296
  1042. package/src/app/shared/audio/audio.testing.html +0 -29
  1043. package/src/app/shared/audio/audio.testing.module.ts +0 -21
  1044. package/src/app/shared/audio/audio.testing.ts +0 -27
  1045. package/src/app/shared/audio/audio.ts +0 -273
  1046. package/src/app/shared/base64.utils.ts +0 -66
  1047. package/src/app/shared/capacitor/keyboard.ts +0 -38
  1048. package/src/app/shared/capacitor/plugins.ts +0 -12
  1049. package/src/app/shared/constants.ts +0 -19
  1050. package/src/app/shared/dates.ts +0 -206
  1051. package/src/app/shared/debug/debug-service.class.ts +0 -7
  1052. package/src/app/shared/debug/debug.component.html +0 -13
  1053. package/src/app/shared/debug/debug.component.scss +0 -21
  1054. package/src/app/shared/debug/debug.component.spec.ts +0 -24
  1055. package/src/app/shared/debug/debug.component.ts +0 -25
  1056. package/src/app/shared/debug/debug.module.ts +0 -14
  1057. package/src/app/shared/directives/autofocus.directive.ts +0 -93
  1058. package/src/app/shared/directives/autoresize.directive.ts +0 -67
  1059. package/src/app/shared/directives/autotitle.directive.ts +0 -17
  1060. package/src/app/shared/directives/directives.module.ts +0 -16
  1061. package/src/app/shared/directives/drag-and-drop.directive.ts +0 -46
  1062. package/src/app/shared/directives/ng-var.directive.ts +0 -31
  1063. package/src/app/shared/directives/resizable/resizable.component.ts +0 -48
  1064. package/src/app/shared/directives/resizable/resizable.directive.ts +0 -43
  1065. package/src/app/shared/directives/resizable/resizable.module.ts +0 -9
  1066. package/src/app/shared/directives/resizable/resizable.style.scss +0 -37
  1067. package/src/app/shared/directives/resizable/resizable.template.html +0 -6
  1068. package/src/app/shared/directives/throttled-click.directive.ts +0 -36
  1069. package/src/app/shared/events.ts +0 -93
  1070. package/src/app/shared/file/csv.utils.ts +0 -123
  1071. package/src/app/shared/file/file.service.ts +0 -129
  1072. package/src/app/shared/file/file.utils.ts +0 -142
  1073. package/src/app/shared/file/images.utils.ts +0 -214
  1074. package/src/app/shared/file/json.utils.ts +0 -82
  1075. package/src/app/shared/file/uri.utils.ts +0 -31
  1076. package/src/app/shared/file/url.utils.ts +0 -163
  1077. package/src/app/shared/focusable.ts +0 -8
  1078. package/src/app/shared/form/field.component.html +0 -380
  1079. package/src/app/shared/form/field.component.scss +0 -7
  1080. package/src/app/shared/form/field.component.ts +0 -344
  1081. package/src/app/shared/form/field.model.ts +0 -158
  1082. package/src/app/shared/form/loading-spinner.ts +0 -16
  1083. package/src/app/shared/forms.ts +0 -577
  1084. package/src/app/shared/functions.spec.ts +0 -197
  1085. package/src/app/shared/functions.ts +0 -694
  1086. package/src/app/shared/geolocation/geolocation.utils.ts +0 -105
  1087. package/src/app/shared/gesture/gesture-config.ts +0 -43
  1088. package/src/app/shared/gesture/hammer.utils.ts +0 -14
  1089. package/src/app/shared/graph/colors.utils.ts +0 -69
  1090. package/src/app/shared/graph/graph-colors.ts +0 -270
  1091. package/src/app/shared/guard/component-dirty.guard.ts +0 -67
  1092. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.html +0 -11
  1093. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.scss +0 -37
  1094. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.ts +0 -14
  1095. package/src/app/shared/hotkeys/hotkeys.service.ts +0 -165
  1096. package/src/app/shared/hotkeys/shared-hotkeys.module.ts +0 -15
  1097. package/src/app/shared/http/http.utils.ts +0 -95
  1098. package/src/app/shared/image/gallery/image-gallery.component.html +0 -282
  1099. package/src/app/shared/image/gallery/image-gallery.component.scss +0 -218
  1100. package/src/app/shared/image/gallery/image-gallery.component.ts +0 -434
  1101. package/src/app/shared/image/gallery/image-gallery.module.ts +0 -35
  1102. package/src/app/shared/image/gallery/testing/gallegry.model.testing.ts +0 -23
  1103. package/src/app/shared/image/gallery/testing/gallery.service.testing.ts +0 -99
  1104. package/src/app/shared/image/gallery/testing/gallery.testing.html +0 -27
  1105. package/src/app/shared/image/gallery/testing/gallery.testing.module.ts +0 -39
  1106. package/src/app/shared/image/gallery/testing/gallery.testing.ts +0 -34
  1107. package/src/app/shared/image/image.model.ts +0 -8
  1108. package/src/app/shared/image/image.module.ts +0 -12
  1109. package/src/app/shared/image/image.service.ts +0 -111
  1110. package/src/app/shared/image/image.testing.module.ts +0 -16
  1111. package/src/app/shared/inputs.ts +0 -330
  1112. package/src/app/shared/interceptors/progess.interceptor.ts +0 -24
  1113. package/src/app/shared/logging/log-level.model.ts +0 -53
  1114. package/src/app/shared/logging/logger.model.ts +0 -117
  1115. package/src/app/shared/logging/logging-service.class.ts +0 -131
  1116. package/src/app/shared/logging/logging-service.config.ts +0 -29
  1117. package/src/app/shared/logging/logging-service.module.ts +0 -19
  1118. package/src/app/shared/markdown/markdown.component.html +0 -55
  1119. package/src/app/shared/markdown/markdown.component.scss +0 -75
  1120. package/src/app/shared/markdown/markdown.component.ts +0 -350
  1121. package/src/app/shared/markdown/markdown.directive.ts +0 -28
  1122. package/src/app/shared/markdown/markdown.modal.html +0 -42
  1123. package/src/app/shared/markdown/markdown.modal.ts +0 -91
  1124. package/src/app/shared/markdown/markdown.module.ts +0 -65
  1125. package/src/app/shared/markdown/markdown.service.ts +0 -234
  1126. package/src/app/shared/markdown/markdown.utils.ts +0 -90
  1127. package/src/app/shared/markdown/testing/markdown.test.html +0 -50
  1128. package/src/app/shared/markdown/testing/markdown.test.ts +0 -49
  1129. package/src/app/shared/markdown/testing/markdown.testing.module.ts +0 -22
  1130. package/src/app/shared/material/autocomplete/material.autocomplete.config.ts +0 -127
  1131. package/src/app/shared/material/autocomplete/material.autocomplete.html +0 -400
  1132. package/src/app/shared/material/autocomplete/material.autocomplete.module.ts +0 -41
  1133. package/src/app/shared/material/autocomplete/material.autocomplete.scss +0 -54
  1134. package/src/app/shared/material/autocomplete/material.autocomplete.ts +0 -1375
  1135. package/src/app/shared/material/autocomplete/material.autocomplete.utils.ts +0 -21
  1136. package/src/app/shared/material/autocomplete/testing/autocomplete.test.html +0 -1164
  1137. package/src/app/shared/material/autocomplete/testing/autocomplete.test.spec.ts +0 -33
  1138. package/src/app/shared/material/autocomplete/testing/autocomplete.test.ts +0 -272
  1139. package/src/app/shared/material/badge/badge.directive.ts +0 -217
  1140. package/src/app/shared/material/badge/badge.module.ts +0 -12
  1141. package/src/app/shared/material/badge/badge.test.html +0 -275
  1142. package/src/app/shared/material/badge/badge.test.ts +0 -34
  1143. package/src/app/shared/material/boolean/boolean.module.ts +0 -36
  1144. package/src/app/shared/material/boolean/material.boolean.html +0 -271
  1145. package/src/app/shared/material/boolean/material.boolean.scss +0 -27
  1146. package/src/app/shared/material/boolean/material.boolean.ts +0 -343
  1147. package/src/app/shared/material/boolean/testing/boolean.test.page.html +0 -469
  1148. package/src/app/shared/material/boolean/testing/boolean.test.page.ts +0 -66
  1149. package/src/app/shared/material/chips/chips.module.ts +0 -38
  1150. package/src/app/shared/material/chips/material.chips.html +0 -233
  1151. package/src/app/shared/material/chips/material.chips.scss +0 -67
  1152. package/src/app/shared/material/chips/material.chips.ts +0 -834
  1153. package/src/app/shared/material/chips/testing/chips.test.html +0 -207
  1154. package/src/app/shared/material/chips/testing/chips.test.ts +0 -169
  1155. package/src/app/shared/material/datetime/datetime.module.ts +0 -42
  1156. package/src/app/shared/material/datetime/material.date.html +0 -186
  1157. package/src/app/shared/material/datetime/material.date.scss +0 -17
  1158. package/src/app/shared/material/datetime/material.date.ts +0 -512
  1159. package/src/app/shared/material/datetime/material.dateshort.html +0 -194
  1160. package/src/app/shared/material/datetime/material.dateshort.scss +0 -23
  1161. package/src/app/shared/material/datetime/material.dateshort.ts +0 -497
  1162. package/src/app/shared/material/datetime/material.datetime.html +0 -325
  1163. package/src/app/shared/material/datetime/material.datetime.scss +0 -87
  1164. package/src/app/shared/material/datetime/material.datetime.ts +0 -758
  1165. package/src/app/shared/material/datetime/testing/mat-date-time.test.html +0 -794
  1166. package/src/app/shared/material/datetime/testing/mat-date-time.test.ts +0 -155
  1167. package/src/app/shared/material/datetime/testing/mat-date.test.html +0 -564
  1168. package/src/app/shared/material/datetime/testing/mat-date.test.ts +0 -145
  1169. package/src/app/shared/material/datetime/testing/mat-dateshort.test.html +0 -530
  1170. package/src/app/shared/material/datetime/testing/mat-dateshort.test.ts +0 -133
  1171. package/src/app/shared/material/duration/duration.module.ts +0 -33
  1172. package/src/app/shared/material/duration/duration.utils.ts +0 -18
  1173. package/src/app/shared/material/duration/material.duration.html +0 -116
  1174. package/src/app/shared/material/duration/material.duration.scss +0 -28
  1175. package/src/app/shared/material/duration/material.duration.ts +0 -308
  1176. package/src/app/shared/material/duration/testing/mat-duration.test.html +0 -170
  1177. package/src/app/shared/material/duration/testing/mat-duration.test.ts +0 -88
  1178. package/src/app/shared/material/latlong/latlong.utils.ts +0 -376
  1179. package/src/app/shared/material/latlong/material.latlong-input.html +0 -95
  1180. package/src/app/shared/material/latlong/material.latlong-input.scss +0 -66
  1181. package/src/app/shared/material/latlong/material.latlong-input.ts +0 -445
  1182. package/src/app/shared/material/latlong/material.latlong.html +0 -90
  1183. package/src/app/shared/material/latlong/material.latlong.module.ts +0 -37
  1184. package/src/app/shared/material/latlong/material.latlong.scss +0 -0
  1185. package/src/app/shared/material/latlong/material.latlong.ts +0 -203
  1186. package/src/app/shared/material/latlong/testing/latlong.test.html +0 -1008
  1187. package/src/app/shared/material/latlong/testing/latlong.test.ts +0 -144
  1188. package/src/app/shared/material/material.animations.ts +0 -269
  1189. package/src/app/shared/material/material.config.ts +0 -5
  1190. package/src/app/shared/material/material.module.ts +0 -94
  1191. package/src/app/shared/material/material.testing.module.ts +0 -192
  1192. package/src/app/shared/material/memory/memory.utils.ts +0 -57
  1193. package/src/app/shared/material/numpad/numpad.animation.ts +0 -1
  1194. package/src/app/shared/material/numpad/numpad.append-to-input.directive.ts +0 -110
  1195. package/src/app/shared/material/numpad/numpad.component.ts +0 -73
  1196. package/src/app/shared/material/numpad/numpad.container.html +0 -37
  1197. package/src/app/shared/material/numpad/numpad.container.scss +0 -55
  1198. package/src/app/shared/material/numpad/numpad.container.ts +0 -152
  1199. package/src/app/shared/material/numpad/numpad.content.html +0 -13
  1200. package/src/app/shared/material/numpad/numpad.content.ts +0 -10
  1201. package/src/app/shared/material/numpad/numpad.directive.ts +0 -159
  1202. package/src/app/shared/material/numpad/numpad.dom-service.ts +0 -35
  1203. package/src/app/shared/material/numpad/numpad.model.ts +0 -53
  1204. package/src/app/shared/material/numpad/numpad.module.ts +0 -18
  1205. package/src/app/shared/material/numpad/testing/numpad.test.html +0 -146
  1206. package/src/app/shared/material/numpad/testing/numpad.test.ts +0 -44
  1207. package/src/app/shared/material/paginator/material.paginator-i18n.ts +0 -47
  1208. package/src/app/shared/material/stepper/material.stepper-i18n.ts +0 -17
  1209. package/src/app/shared/material/swipe/material.swipe.html +0 -85
  1210. package/src/app/shared/material/swipe/material.swipe.scss +0 -55
  1211. package/src/app/shared/material/swipe/material.swipe.ts +0 -366
  1212. package/src/app/shared/material/swipe/swipe.module.ts +0 -29
  1213. package/src/app/shared/material/swipe/testing/swipe.test.html +0 -112
  1214. package/src/app/shared/material/swipe/testing/swipe.test.ts +0 -74
  1215. package/src/app/shared/material/test/test-component.css +0 -22
  1216. package/src/app/shared/material/test/test-component.html +0 -40
  1217. package/src/app/shared/material/test/test-component.ts +0 -295
  1218. package/src/app/shared/material/testing/common.test.html +0 -227
  1219. package/src/app/shared/material/testing/common.test.ts +0 -126
  1220. package/src/app/shared/material/text/testing/text-form.testing.html +0 -213
  1221. package/src/app/shared/material/text/testing/text-form.testing.ts +0 -30
  1222. package/src/app/shared/material/text/text-form.component.html +0 -63
  1223. package/src/app/shared/material/text/text-form.component.scss +0 -8
  1224. package/src/app/shared/material/text/text-form.component.ts +0 -177
  1225. package/src/app/shared/material/text/text-form.module.ts +0 -36
  1226. package/src/app/shared/modules.ts +0 -12
  1227. package/src/app/shared/named-filter/named-filter-selector.component.html +0 -77
  1228. package/src/app/shared/named-filter/named-filter-selector.component.scss +0 -3
  1229. package/src/app/shared/named-filter/named-filter-selector.component.ts +0 -287
  1230. package/src/app/shared/named-filter/named-filter.model.ts +0 -64
  1231. package/src/app/shared/named-filter/named-filter.module.ts +0 -15
  1232. package/src/app/shared/named-filter/named-filter.service.ts +0 -100
  1233. package/src/app/shared/named-filter/testing/named-filter-selector.testing.html +0 -61
  1234. package/src/app/shared/named-filter/testing/named-filter-selector.testing.ts +0 -80
  1235. package/src/app/shared/named-filter/testing/named-filter.testing.module.ts +0 -20
  1236. package/src/app/shared/named-filter/testing/named-filter.testing.service.ts +0 -83
  1237. package/src/app/shared/observables.ts +0 -139
  1238. package/src/app/shared/pipes/arrays.pipe.ts +0 -153
  1239. package/src/app/shared/pipes/badge.pipes.ts +0 -17
  1240. package/src/app/shared/pipes/colors.pipe.ts +0 -24
  1241. package/src/app/shared/pipes/date-diff-duration.pipe.ts +0 -53
  1242. package/src/app/shared/pipes/date-format.pipe.ts +0 -73
  1243. package/src/app/shared/pipes/date-from-now.pipe.ts +0 -17
  1244. package/src/app/shared/pipes/dates.pipe.ts +0 -13
  1245. package/src/app/shared/pipes/display-with.pipe.ts +0 -13
  1246. package/src/app/shared/pipes/duration.pipe.spec.ts +0 -41
  1247. package/src/app/shared/pipes/duration.pipe.ts +0 -28
  1248. package/src/app/shared/pipes/file-size.pipe.ts +0 -50
  1249. package/src/app/shared/pipes/form.pipes.ts +0 -209
  1250. package/src/app/shared/pipes/highlight.pipe.ts +0 -41
  1251. package/src/app/shared/pipes/html.pipes.ts +0 -49
  1252. package/src/app/shared/pipes/latlong-format.pipe.ts +0 -28
  1253. package/src/app/shared/pipes/maps.pipe.ts +0 -41
  1254. package/src/app/shared/pipes/maskito.pipe.ts +0 -68
  1255. package/src/app/shared/pipes/math.pipes.ts +0 -46
  1256. package/src/app/shared/pipes/ng-init.pipe.ts +0 -13
  1257. package/src/app/shared/pipes/number-format.pipe.ts +0 -11
  1258. package/src/app/shared/pipes/observable.pipes.ts +0 -45
  1259. package/src/app/shared/pipes/pipes.module.ts +0 -162
  1260. package/src/app/shared/pipes/property.pipes.ts +0 -115
  1261. package/src/app/shared/pipes/selection.pipes.ts +0 -165
  1262. package/src/app/shared/pipes/string.pipes.ts +0 -128
  1263. package/src/app/shared/pipes/translate-context.pipe.ts +0 -27
  1264. package/src/app/shared/pipes/types.pipes.ts +0 -52
  1265. package/src/app/shared/pipes/url.pipes.ts +0 -36
  1266. package/src/app/shared/platforms.ts +0 -99
  1267. package/src/app/shared/print/print.service.ts +0 -337
  1268. package/src/app/shared/regexps.ts +0 -112
  1269. package/src/app/shared/rx-state/rx-state.decorators.ts +0 -281
  1270. package/src/app/shared/rx-state/rx-state.module.ts +0 -11
  1271. package/src/app/shared/rx-state/rx-state.types.ts +0 -5
  1272. package/src/app/shared/services/entity-service.class.ts +0 -120
  1273. package/src/app/shared/services/job.utils.ts +0 -124
  1274. package/src/app/shared/services/memory-entity-service.class.ts +0 -435
  1275. package/src/app/shared/services/progress-bar.service.ts +0 -40
  1276. package/src/app/shared/services/startable-observable-service.class.ts +0 -129
  1277. package/src/app/shared/services/startable-service.class.ts +0 -120
  1278. package/src/app/shared/services/storage.utils.ts +0 -53
  1279. package/src/app/shared/services/translate-context.service.ts +0 -112
  1280. package/src/app/shared/services/validator-service.class.ts +0 -13
  1281. package/src/app/shared/services.ts +0 -134
  1282. package/src/app/shared/shared-routing.module.ts +0 -69
  1283. package/src/app/shared/shared.module.spec.ts +0 -13
  1284. package/src/app/shared/shared.module.ts +0 -168
  1285. package/src/app/shared/shared.testing.module.ts +0 -61
  1286. package/src/app/shared/storage/storage-explorer.component.html +0 -160
  1287. package/src/app/shared/storage/storage-explorer.component.scss +0 -37
  1288. package/src/app/shared/storage/storage-explorer.component.spec.ts +0 -24
  1289. package/src/app/shared/storage/storage-explorer.component.ts +0 -268
  1290. package/src/app/shared/storage/storage-explorer.module.ts +0 -24
  1291. package/src/app/shared/storage/storage-explorer.testing-routing.module.ts +0 -19
  1292. package/src/app/shared/storage/storage-explorer.testing.module.ts +0 -19
  1293. package/src/app/shared/storage/storage.service.ts +0 -131
  1294. package/src/app/shared/storage/storage.utils.ts +0 -25
  1295. package/src/app/shared/testing/maskito.test.html +0 -40
  1296. package/src/app/shared/testing/maskito.test.ts +0 -33
  1297. package/src/app/shared/testing/observable.test.html +0 -53
  1298. package/src/app/shared/testing/observable.test.scss +0 -3
  1299. package/src/app/shared/testing/observable.test.ts +0 -101
  1300. package/src/app/shared/testing/tests.page.html +0 -22
  1301. package/src/app/shared/testing/tests.page.ts +0 -32
  1302. package/src/app/shared/toast/toast.testing.html +0 -50
  1303. package/src/app/shared/toast/toast.testing.module.ts +0 -22
  1304. package/src/app/shared/toast/toast.testing.ts +0 -52
  1305. package/src/app/shared/toast/toasts.ts +0 -161
  1306. package/src/app/shared/toolbar/modal-toolbar.html +0 -30
  1307. package/src/app/shared/toolbar/modal-toolbar.scss +0 -0
  1308. package/src/app/shared/toolbar/modal-toolbar.ts +0 -64
  1309. package/src/app/shared/toolbar/toolbar.html +0 -68
  1310. package/src/app/shared/toolbar/toolbar.module.ts +0 -18
  1311. package/src/app/shared/toolbar/toolbar.scss +0 -0
  1312. package/src/app/shared/toolbar/toolbar.ts +0 -262
  1313. package/src/app/shared/types.ts +0 -44
  1314. package/src/app/shared/upload-file/testing/upload-file.testing.html +0 -30
  1315. package/src/app/shared/upload-file/testing/upload-file.testing.module.ts +0 -21
  1316. package/src/app/shared/upload-file/testing/upload-file.testing.ts +0 -65
  1317. package/src/app/shared/upload-file/upload-file-popover.component.html +0 -46
  1318. package/src/app/shared/upload-file/upload-file-popover.component.scss +0 -6
  1319. package/src/app/shared/upload-file/upload-file-popover.component.ts +0 -115
  1320. package/src/app/shared/upload-file/upload-file.component.html +0 -57
  1321. package/src/app/shared/upload-file/upload-file.component.scss +0 -60
  1322. package/src/app/shared/upload-file/upload-file.component.ts +0 -222
  1323. package/src/app/shared/upload-file/upload-file.model.ts +0 -40
  1324. package/src/app/shared/validator/form-error-adapter.class.ts +0 -136
  1325. package/src/app/shared/validator/validators.ts +0 -725
  1326. package/src/app/shared/version/versions.ts +0 -89
  1327. package/src/app/social/job/job.module.ts +0 -14
  1328. package/src/app/social/job/progression/job-progression.component.html +0 -19
  1329. package/src/app/social/job/progression/job-progression.component.scss +0 -15
  1330. package/src/app/social/job/progression/job-progression.component.ts +0 -39
  1331. package/src/app/social/job/progression/job-progression.icon.html +0 -30
  1332. package/src/app/social/job/progression/job-progression.icon.scss +0 -7
  1333. package/src/app/social/job/progression/job-progression.icon.ts +0 -276
  1334. package/src/app/social/job/progression/job-progression.list.html +0 -25
  1335. package/src/app/social/job/progression/job-progression.list.scss +0 -17
  1336. package/src/app/social/job/progression/job-progression.list.ts +0 -40
  1337. package/src/app/social/job/progression/job-progression.model.ts +0 -26
  1338. package/src/app/social/job/progression/job-progression.service.ts +0 -97
  1339. package/src/app/social/job/testing/job-progression.testing.html +0 -11
  1340. package/src/app/social/job/testing/job-progression.testing.service.ts +0 -33
  1341. package/src/app/social/job/testing/job-progression.testing.ts +0 -28
  1342. package/src/app/social/job/testing/job.testing.module.ts +0 -13
  1343. package/src/app/social/message/message.form.html +0 -71
  1344. package/src/app/social/message/message.form.scss +0 -6
  1345. package/src/app/social/message/message.form.ts +0 -128
  1346. package/src/app/social/message/message.modal.html +0 -68
  1347. package/src/app/social/message/message.modal.ts +0 -117
  1348. package/src/app/social/message/message.model.ts +0 -78
  1349. package/src/app/social/message/message.module.ts +0 -14
  1350. package/src/app/social/message/message.service.ts +0 -104
  1351. package/src/app/social/social.errors.ts +0 -10
  1352. package/src/app/social/social.module.ts +0 -23
  1353. package/src/app/social/social.testing.module.ts +0 -33
  1354. package/src/app/social/user-event/notification/user-event-notification.icon.html +0 -17
  1355. package/src/app/social/user-event/notification/user-event-notification.icon.ts +0 -112
  1356. package/src/app/social/user-event/notification/user-event-notification.list.html +0 -142
  1357. package/src/app/social/user-event/notification/user-event-notification.list.scss +0 -73
  1358. package/src/app/social/user-event/notification/user-event-notification.list.ts +0 -270
  1359. package/src/app/social/user-event/testing/user-event.testing.html +0 -26
  1360. package/src/app/social/user-event/testing/user-event.testing.model.ts +0 -142
  1361. package/src/app/social/user-event/testing/user-event.testing.module.ts +0 -13
  1362. package/src/app/social/user-event/testing/user-event.testing.service.ts +0 -161
  1363. package/src/app/social/user-event/testing/user-event.testing.ts +0 -282
  1364. package/src/app/social/user-event/user-event.model.ts +0 -55
  1365. package/src/app/social/user-event/user-event.module.ts +0 -15
  1366. package/src/app/social/user-event/user-event.service.ts +0 -686
  1367. package/src/browserslist +0 -9
  1368. package/src/environments/environment.class.ts +0 -106
  1369. package/src/environments/environment.loader.ts +0 -90
  1370. package/src/environments/environment.prod.ts +0 -49
  1371. package/src/environments/environment.test.ts +0 -92
  1372. package/src/environments/environment.ts +0 -126
  1373. package/src/favicon.ico +0 -0
  1374. package/src/global.scss +0 -13
  1375. package/src/index.html +0 -76
  1376. package/src/main.ts +0 -18
  1377. package/src/polyfills.ts +0 -34
  1378. package/src/schema.graphql +0 -4381
  1379. package/src/service-worker.js +0 -31
  1380. package/src/test.ts +0 -30
  1381. package/tsconfig.app.json +0 -15
  1382. package/tsconfig.json +0 -47
  1383. package/tsconfig.spec.json +0 -18
@@ -0,0 +1,666 @@
1
+ import { EventEmitter, Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
+ import { NavigationEnd } from '@angular/router';
3
+ import { BehaviorSubject, combineLatest, from, merge, Subject } from 'rxjs';
4
+ import { distinctUntilChanged, filter, map, switchMap, throttleTime } from 'rxjs/operators';
5
+ import { ENVIRONMENT } from '../../../environments/environment.class';
6
+ import { DateUtils } from '../../shared/dates';
7
+ import { isEmptyArray, isNil, isNotEmptyArray, isNotNil, isNotNilOrBlank, toBoolean } from '../../shared/functions';
8
+ import { firstNotNilPromise } from '../../shared/observables';
9
+ import { StartableObservableService } from '../../shared/services/startable-observable-service.class';
10
+ import { AboutModal } from '../about/about.modal';
11
+ import { CORE_CONFIG_OPTIONS } from '../services/config/core.config';
12
+ import { TreeItemEntityUtils } from '../services/model/tree-item-entity.model';
13
+ import { MenuItem, MenuItems } from './menu.model';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "../services/local-settings.service";
16
+ import * as i2 from "../services/config.service";
17
+ import * as i3 from "../services/account.service";
18
+ import * as i4 from "@angular/router";
19
+ import * as i5 from "@ionic/angular";
20
+ import * as i6 from "@ngx-translate/core";
21
+ import * as i7 from "../../../environments/environment.class";
22
+ import * as i8 from "./menu.model";
23
+ export const DEFAULT_MENU_SHOW_WHEN = 'lg';
24
+ export const APP_MENU_ITEMS = new InjectionToken('menuItems');
25
+ export const APP_MENU_OPTIONS = new InjectionToken('menuOptions');
26
+ export class MenuService extends StartableObservableService {
27
+ settings;
28
+ configService;
29
+ accountService;
30
+ router;
31
+ modalCtrl;
32
+ alertController;
33
+ navController;
34
+ translate;
35
+ environment;
36
+ accountChanges = new BehaviorSubject(undefined);
37
+ onPinned = new EventEmitter(true);
38
+ _staticItems;
39
+ _detachedSubItems = [];
40
+ _itemCounter = 0;
41
+ _options;
42
+ _logPrefix = '[menu-service] ';
43
+ _$opened = new Subject();
44
+ _$splitPaneWhen = new BehaviorSubject(DEFAULT_MENU_SHOW_WHEN);
45
+ _$enabled;
46
+ _$enableSubMenu;
47
+ constructor(settings, configService, accountService, router, modalCtrl, alertController, navController, translate, environment, options, staticItems) {
48
+ super(settings);
49
+ this.settings = settings;
50
+ this.configService = configService;
51
+ this.accountService = accountService;
52
+ this.router = router;
53
+ this.modalCtrl = modalCtrl;
54
+ this.alertController = alertController;
55
+ this.navController = navController;
56
+ this.translate = translate;
57
+ this.environment = environment;
58
+ this._options = {
59
+ ...options,
60
+ subMenu: {
61
+ disableIcon: false,
62
+ savePinned: true,
63
+ ...(options?.subMenu || {}),
64
+ // Force disable on mobile
65
+ enable: options?.subMenu?.enable !== false && !this.settings.mobile,
66
+ },
67
+ };
68
+ this._$enabled = new BehaviorSubject(this.environment?.enableMenu !== false);
69
+ this._$enableSubMenu = new BehaviorSubject(this._options.subMenu.enable);
70
+ this._detachedSubItems = [];
71
+ this._staticItems = (staticItems || []).map((source) => {
72
+ const target = this.fromObject({ static: true, ...source }, { computeId: true, fillParent: true, fillDefaultFromParent: true });
73
+ const detachedSubItems = TreeItemEntityUtils.deleteRecursively(target, (item) => item.static !== true);
74
+ if (detachedSubItems?.length) {
75
+ detachedSubItems.forEach((item) => this._detachToParent(item));
76
+ console.debug(this._logPrefix + 'Initial detached sub items', detachedSubItems);
77
+ this._detachedSubItems.push(...detachedSubItems);
78
+ }
79
+ return target;
80
+ });
81
+ // DEBUG
82
+ this._debug = !environment.production;
83
+ }
84
+ get opened() {
85
+ return this._$opened.asObservable();
86
+ }
87
+ get splitPaneWhen() {
88
+ return this._$splitPaneWhen.asObservable();
89
+ }
90
+ get enabled() {
91
+ return this._$enabled.asObservable();
92
+ }
93
+ get subMenuEnabled() {
94
+ return this._$enableSubMenu.value;
95
+ }
96
+ get subItems() {
97
+ return (this.data || []).reduce((res, rootElement) => res.concat(rootElement.children), []);
98
+ }
99
+ get _staticSubItems() {
100
+ return (this._staticItems || []).reduce((res, rootElement) => res.concat(rootElement.children), []);
101
+ }
102
+ enable(value) {
103
+ this._$enabled.next(value);
104
+ }
105
+ enableSubMenu(value) {
106
+ this._$enableSubMenu.next(value);
107
+ }
108
+ setSplitPaneShowWhen(value) {
109
+ if (this._$splitPaneWhen.value !== value) {
110
+ this._$splitPaneWhen.next(value);
111
+ }
112
+ }
113
+ toggleSplitPaneWhen() {
114
+ if (this._$splitPaneWhen.value !== false) {
115
+ this._$splitPaneWhen.next(false);
116
+ }
117
+ else {
118
+ this._$splitPaneWhen.next(DEFAULT_MENU_SHOW_WHEN);
119
+ }
120
+ }
121
+ fromObject(source, opts) {
122
+ const target = MenuItem.fromObject(source, { withChildren: false });
123
+ // Compute id if need
124
+ if (opts?.computeId && isNil(target.id))
125
+ target.id = this._computeNewId();
126
+ // Remove icon if disabled
127
+ if (this._options.subMenu.disableIcon) {
128
+ Object.assign(target, { icon: undefined, matIcon: undefined, matSvgIcon: undefined });
129
+ }
130
+ // Recursive
131
+ target.children = (source.children || []).map((json) => this.fromObject(json, { ...opts, fillParent: false }));
132
+ // Fill parent (once, when the full tree is ready)
133
+ if (opts?.fillParent) {
134
+ TreeItemEntityUtils.treeFillParent(target);
135
+ // Fill defaults from the parent (once filled)
136
+ if (opts?.fillDefaultFromParent) {
137
+ TreeItemEntityUtils.visit(target, (item) => {
138
+ if (!item.parent)
139
+ return; // Skip if no parent
140
+ item.parentPath = item.parentPath || item.parent.path;
141
+ item.parentPathParams = item.parentPathParams || item.parent.pathParams;
142
+ item.static = toBoolean(item.static, item.parent.static);
143
+ // Compute path, from parent path + action
144
+ if (!item.path && !!item.action) {
145
+ item.path = item.parent.path;
146
+ item.pathParams = typeof item.action === 'string' ? { action: item.action } : { actionId: item.id.toString(), actionTitle: item.title };
147
+ }
148
+ });
149
+ }
150
+ }
151
+ return target;
152
+ }
153
+ createSubMenu(source) {
154
+ if (!this.subMenuEnabled)
155
+ return null; // Skip if disabled
156
+ const target = this.fromObject(source);
157
+ // Check if exists
158
+ if (this.started) {
159
+ const existingItem = this._findExistingItem(target);
160
+ if (existingItem)
161
+ return existingItem;
162
+ }
163
+ // Create
164
+ if (isNil(target.id))
165
+ target.id = this._computeNewId();
166
+ return target;
167
+ }
168
+ async addSubMenuItems(sources, opts) {
169
+ if (!this.started)
170
+ await this.ready();
171
+ if (!this.subMenuEnabled)
172
+ return; // Skip
173
+ return sources.map((source) => this._addSubMenuItem(this.fromObject(source), opts));
174
+ }
175
+ async addSubMenuItem(item, opts) {
176
+ if (!this.started)
177
+ await this.ready();
178
+ if (!this.subMenuEnabled)
179
+ return; // Skip
180
+ return this._addSubMenuItem(this.fromObject(item), opts);
181
+ }
182
+ async removeSubMenuItems(items) {
183
+ if (!this.started)
184
+ await this.ready();
185
+ return (items || []).map((item) => this._removeSubMenuItem(this.fromObject(item)));
186
+ }
187
+ async removeSubMenuItem(item) {
188
+ if (!this.started)
189
+ await this.ready();
190
+ return this._removeSubMenuItem(this.fromObject(item));
191
+ }
192
+ togglePinned(source) {
193
+ const item = source instanceof MenuItem ? source : this._findExistingItem(this.fromObject(source));
194
+ // Skip if not found
195
+ if (!item) {
196
+ if (this._debug)
197
+ console.warn(this._logPrefix + `Sub menu {${source.path}} cannot be found - unable to toggle pinned!`);
198
+ return;
199
+ }
200
+ // Skip if static
201
+ if (item.static)
202
+ return;
203
+ // Unpinned
204
+ if (item.pinned) {
205
+ item.pinned = false;
206
+ if (!item.detached) {
207
+ this._detachedSubItems = [...this._detachedSubItems, ...this._detachSubMenuItems()];
208
+ }
209
+ }
210
+ // Pinned
211
+ else {
212
+ item.pinned = true;
213
+ }
214
+ this.onPinned.emit(item);
215
+ }
216
+ async executeAction(event, item) {
217
+ const action = item?.action;
218
+ if (!action)
219
+ return; // skip
220
+ if (typeof action === 'string') {
221
+ switch (action) {
222
+ case 'logout':
223
+ await this.logout();
224
+ break;
225
+ case 'about':
226
+ await this.openAboutModal();
227
+ break;
228
+ case 'expand':
229
+ await this.toggleExpandableItem(item);
230
+ if (item.path) {
231
+ await this.navController.navigateRoot(item.path, {
232
+ queryParams: item.pathParams,
233
+ });
234
+ }
235
+ break;
236
+ default: {
237
+ if (item.path) {
238
+ await this.navController.navigateRoot(item.path, {
239
+ queryParams: item.pathParams,
240
+ });
241
+ }
242
+ else {
243
+ throw new Error('Unknown action: ' + action);
244
+ }
245
+ }
246
+ }
247
+ }
248
+ else if (typeof action === 'function') {
249
+ action(event);
250
+ }
251
+ }
252
+ async logout() {
253
+ const translations = await this.translate.instant([
254
+ 'AUTH.LOGOUT.CONFIRM_TITLE',
255
+ 'AUTH.LOGOUT.CONFIRM_MESSAGE',
256
+ 'COMMON.BTN_CANCEL',
257
+ 'AUTH.LOGOUT.BTN_CONFIRM',
258
+ ]);
259
+ const alert = await this.alertController.create({
260
+ header: translations['AUTH.LOGOUT.CONFIRM_TITLE'],
261
+ message: translations['AUTH.LOGOUT.CONFIRM_MESSAGE'],
262
+ buttons: [
263
+ {
264
+ text: translations['COMMON.BTN_CANCEL'],
265
+ role: 'cancel',
266
+ cssClass: 'secondary',
267
+ },
268
+ {
269
+ text: translations['AUTH.LOGOUT.BTN_CONFIRM'],
270
+ cssClass: 'ion-color-primary',
271
+ handler: async () => {
272
+ // Back to home
273
+ await this.navController.navigateRoot('/');
274
+ // WARNING: logout should be done AFTER home redirection, because of cache clearing - see issue #5
275
+ this.accountService.logout();
276
+ },
277
+ },
278
+ ],
279
+ });
280
+ await alert.present();
281
+ }
282
+ async openAboutModal() {
283
+ const modal = await this.modalCtrl.create({ component: AboutModal });
284
+ return modal.present();
285
+ }
286
+ async toggleExpandableItem(item) {
287
+ if (!item.expanded) {
288
+ if (this._debug)
289
+ console.debug(this._logPrefix + 'Expand item', item);
290
+ item.matIcon = 'expand_less';
291
+ // Try to attach some item
292
+ this._detachedSubItems
293
+ .filter((childItem) => !!this._findParent(childItem, [item]))
294
+ .forEach((childItem) => this._attachMenuToParent(item, childItem));
295
+ }
296
+ else {
297
+ item.matIcon = 'expand_more';
298
+ this._detachedSubItems = [...this._detachedSubItems, ...this._detachSubMenuItems({ path: '/', params: {} }, item.children)];
299
+ }
300
+ }
301
+ _markAsOpened() {
302
+ this._$opened.next(true);
303
+ }
304
+ _markAsClosed() {
305
+ this._$opened.next(false);
306
+ }
307
+ async close() {
308
+ this._$opened.next(false);
309
+ }
310
+ async open() {
311
+ this._$opened.next(true);
312
+ }
313
+ async ngOnStart() {
314
+ console.info(`${this._logPrefix}Starting...`);
315
+ // Restore sub items from settings
316
+ await this.settings.ready();
317
+ const settingsSubItems = this.settings.getPageSettings('menu', 'sub-items');
318
+ if (isNotEmptyArray(settingsSubItems)) {
319
+ const detachedSubItems = settingsSubItems.map((source) => this.fromObject(source, { computeId: true, fillParent: true }));
320
+ console.debug(this._logPrefix + 'Restoring pinned sub items from settings', detachedSubItems);
321
+ // TODO check if previous sub menu (from menu token) are kept
322
+ //this._detachedSubItems.push(...detachedSubItems);
323
+ this._detachedSubItems = detachedSubItems;
324
+ }
325
+ const accountEvent$ = merge(from(this.accountService.ready()), this.accountService.onLogin, this.accountService.onLogout.pipe(map((_) => null))).pipe(map((account) => (isNotNil(account?.id) ? account : null)), distinctUntilChanged((a1, a2) => DateUtils.isSame(a1?.updateDate, a2?.updateDate)));
326
+ this.registerSubscription(
327
+ // Combine config and account events
328
+ combineLatest([this.configService.config, accountEvent$]).subscribe(([config, account]) => {
329
+ const isLogin = this.accountService.isLogin();
330
+ if (this._debug)
331
+ console.debug(`${this._logPrefix}Received config or account event. Refreshing items... isLogin? `, isLogin);
332
+ // Make sure to clear account, if not login
333
+ account = isLogin ? account : null;
334
+ // Load all items
335
+ const items = this._loadMenuItems(config, account);
336
+ // Emit new root items
337
+ this.dataSubject.next(items);
338
+ // Emit account changes event
339
+ this.accountChanges.next(account);
340
+ }));
341
+ this.registerSubscription(merge(
342
+ // Force refresh when login/logout
343
+ this.accountChanges.pipe(map(() => MenuItems.parsePathWithQuery(this.router.routerState.snapshot.url))),
344
+ // Start listening route
345
+ this.startSubject.pipe(switchMap((_) => this.router.events), filter((event) => {
346
+ return event instanceof NavigationEnd;
347
+ }), map((event) => MenuItems.parsePathWithQuery(event.url))))
348
+ .pipe(throttleTime(250))
349
+ .subscribe((pathParam) => {
350
+ const detachedSubItems = this._detachSubMenuItems(pathParam);
351
+ if (detachedSubItems?.length) {
352
+ this._detachedSubItems = [...this._detachedSubItems, ...detachedSubItems];
353
+ if (this._debug)
354
+ console.debug(`${this._logPrefix}Newly detached items: `, detachedSubItems);
355
+ }
356
+ }));
357
+ // Save pinned items
358
+ this.registerSubscription(this.onPinned.subscribe((item) => {
359
+ // Collect pinned elements, then serialize it (without id)
360
+ const pinnedSubItems = this.subItems.filter((i) => i.isPinned()).map((item) => item.asObject({ withChildren: true, keepLocalId: false }));
361
+ if (pinnedSubItems.length && this._debug)
362
+ console.debug(this._logPrefix + `Saving ${pinnedSubItems.length} pinned items, in local settings`, pinnedSubItems);
363
+ this.settings.savePageSetting('menu', pinnedSubItems, 'sub-items');
364
+ }));
365
+ return firstNotNilPromise(this.dataSubject);
366
+ }
367
+ _loadMenuItems(config, account) {
368
+ if (this._debug)
369
+ console.debug(`${this._logPrefix}Loading menu items...`);
370
+ // Save previous children of root items
371
+ const detachedSubItems = (this.subItems || []).concat(this._staticSubItems || []).reduce((res, rootItem) => {
372
+ const children = rootItem.children;
373
+ if (isEmptyArray(children))
374
+ return res;
375
+ // Detach all root children
376
+ rootItem.children = [];
377
+ children.forEach((child) => (child.parent = null));
378
+ // Return root children
379
+ return res.concat(children);
380
+ }, this._detachedSubItems || []);
381
+ // Reset base root items (clean items added by config)
382
+ let items = this._staticItems.slice();
383
+ // Concat config's items
384
+ const configValue = config?.getProperty(CORE_CONFIG_OPTIONS.MENU_ITEMS);
385
+ if (isNotNilOrBlank(configValue)) {
386
+ try {
387
+ const configItems = JSON.parse(configValue);
388
+ items = (configItems || []).reduce((res, source) => {
389
+ // Normalize the item
390
+ const item = this.fromObject({ static: true, ...source }, { computeId: true });
391
+ // Skip is already loaded
392
+ if (res.find((i) => MenuItems.isSame(i, item)))
393
+ return res;
394
+ // Reuse existing id, if possible
395
+ const existingItem = this.data?.find((i) => MenuItems.isSame(i, item));
396
+ if (existingItem) {
397
+ item.id = existingItem.id;
398
+ }
399
+ if (item.after) {
400
+ const index = res.findIndex((i) => i.title === item.after);
401
+ if (index !== -1) {
402
+ return res
403
+ .slice(0, index + 1)
404
+ .concat(item)
405
+ .concat(res.slice(index + 1));
406
+ }
407
+ }
408
+ else if (item.before) {
409
+ const index = res.findIndex((i) => i.title === item.before);
410
+ if (index !== -1) {
411
+ return res.slice(0, index).concat(item).concat(res.slice(index));
412
+ }
413
+ }
414
+ return res.concat(item);
415
+ }, items);
416
+ }
417
+ catch (err) {
418
+ console.error(`${this._logPrefix}Invalid value for option '${CORE_CONFIG_OPTIONS.MENU_ITEMS.key}'. Expected an array of menu item`, err);
419
+ }
420
+ }
421
+ // Filter item using account rights
422
+ const opts = { debug: this._debug };
423
+ items = items
424
+ .filter((item) => MenuItems.checkIfVisible(item, account, config, opts))
425
+ .map((item) => {
426
+ // Replace title using a config property
427
+ if (isNotNilOrBlank(item.titleProperty) && config) {
428
+ item.title = config.properties[item.titleProperty] || item.title;
429
+ }
430
+ return item;
431
+ });
432
+ if (this._debug)
433
+ console.debug(`${this._logPrefix}Found ${items.length} visible root items...`);
434
+ // Re-attach sub menu items
435
+ if (this.subMenuEnabled && detachedSubItems.length) {
436
+ if (account) {
437
+ this._addSubMenuItems(detachedSubItems, { skipIfExists: false, availableParents: detachedSubItems.concat(items) });
438
+ }
439
+ else {
440
+ this._detachedSubItems = detachedSubItems;
441
+ }
442
+ }
443
+ else {
444
+ this._detachedSubItems = [];
445
+ }
446
+ return items;
447
+ }
448
+ _addSubMenuItems(sources, opts) {
449
+ return sources.map((source) => this._addSubMenuItem(source, opts));
450
+ }
451
+ _addSubMenuItem(newItem, opts) {
452
+ opts = {
453
+ skipIfExists: true,
454
+ ...opts,
455
+ };
456
+ const pathParam = MenuItems.parsePathWithQuery(this.router.routerState.snapshot.url);
457
+ // Find if item already exists
458
+ const existingItem = this._findExistingItem(newItem, opts?.availableParents);
459
+ if (existingItem) {
460
+ // No changes
461
+ if (opts.skipIfExists && MenuItems.isSame(existingItem, newItem) && existingItem.visible) {
462
+ // DEBUG
463
+ if (this._debug)
464
+ console.debug(`${this._logPrefix}Skipping sub item (same visible item already exist)`, newItem);
465
+ return existingItem;
466
+ }
467
+ if (this._debug)
468
+ console.debug(`${this._logPrefix}Updating existing sub item #`, existingItem.id);
469
+ // Replace existing item, but keep the existing id
470
+ if (newItem !== existingItem) {
471
+ newItem.id = existingItem.id;
472
+ newItem.$children = existingItem.$children;
473
+ newItem.pinned = existingItem.pinned;
474
+ newItem.static = existingItem.static;
475
+ if (newItem.pinned || newItem.static || existingItem.expanded) {
476
+ // If loading, keep existing title if pinned (avoid to show skeleton)
477
+ newItem.title = newItem.title || existingItem.title;
478
+ }
479
+ else {
480
+ newItem.title = isNotNil(newItem.title) ? newItem.title : existingItem.title;
481
+ }
482
+ // Auto set icon, for expand action
483
+ if (existingItem.action === 'expand') {
484
+ newItem.icon = null;
485
+ newItem.matIcon = existingItem.expanded ? 'expand_less' : 'expand_more';
486
+ }
487
+ }
488
+ }
489
+ // Generate item's id (if need)
490
+ else if (isNil(newItem.id)) {
491
+ newItem.id = this._computeNewId();
492
+ }
493
+ // Default icon for expand action
494
+ if (newItem.action === 'expand' && !newItem.matIcon) {
495
+ newItem.matIcon = 'expand_more';
496
+ }
497
+ // If visible, get the parent where to attach the item
498
+ const parent = this._findParent(newItem, opts?.availableParents);
499
+ if (parent && parent.expanded) {
500
+ // Attach item to parent
501
+ this._attachMenuToParent(parent, newItem);
502
+ // Update detached items :
503
+ // - excluded new item
504
+ // - attach and exclude those than can be attached to the new item
505
+ // Search in detached items one have newItem as parent
506
+ if (newItem.expanded) {
507
+ const ancestor = newItem.ancestor;
508
+ this._detachedSubItems = this._detachedSubItems.concat(...newItem.children).reduce((res, item) => {
509
+ // Excluded newly add item
510
+ if (item.id === newItem.id)
511
+ return res;
512
+ // If some detached can be attached to the new item: do it
513
+ if (MenuItems.checkIfSubMenuVisible(item, pathParam)) {
514
+ const parent = this._findParent(item, [ancestor]);
515
+ if (parent) {
516
+ // Update item's children
517
+ const detachedChildren = this._detachSubMenuItems(pathParam, item.children || []);
518
+ // Attach item
519
+ this._attachMenuToParent(parent, item);
520
+ // Remember detached children
521
+ return res.concat(...detachedChildren);
522
+ }
523
+ }
524
+ // Detach (if need)
525
+ this._detachToParent(item);
526
+ // Add to detached items
527
+ return res.concat(item);
528
+ }, []);
529
+ }
530
+ else {
531
+ // Remove from detached elements
532
+ this._detachedSubItems = this._detachedSubItems.filter((item) => item.id !== newItem.id);
533
+ // Detach children
534
+ newItem.children.forEach((item) => this._detachToParent(item));
535
+ }
536
+ }
537
+ else {
538
+ // Add or update detached item
539
+ const detachedIndex = isNotNil(newItem.id) ? this._detachedSubItems.findIndex((item) => item.id === newItem.id) : -1;
540
+ if (detachedIndex !== -1) {
541
+ this._detachedSubItems[detachedIndex] = newItem;
542
+ }
543
+ else {
544
+ this._detachedSubItems.push(newItem);
545
+ }
546
+ }
547
+ return newItem;
548
+ }
549
+ _computeNewId() {
550
+ return this._itemCounter++;
551
+ }
552
+ _removeSubMenuItem(item) {
553
+ const existingItem = this._findExistingItem(item);
554
+ if (existingItem) {
555
+ this._detachToParent(existingItem);
556
+ return existingItem;
557
+ }
558
+ }
559
+ _detachSubMenuItems(currentPathParam, subItems) {
560
+ currentPathParam = currentPathParam ? currentPathParam : MenuItems.parsePathWithQuery(this.router.routerState.snapshot.url.toString());
561
+ return (subItems || this.subItems).reduce((res, subItem) => {
562
+ // Not visible => should be detach
563
+ if (!MenuItems.checkIfSubMenuVisible(subItem, currentPathParam)) {
564
+ this._detachToParent(subItem);
565
+ return res.concat(subItem);
566
+ }
567
+ // Visible: check children
568
+ return res.concat(this._detachSubMenuItems(currentPathParam, subItem.children));
569
+ }, []);
570
+ }
571
+ _detachToParent(item) {
572
+ if (!item?.parent)
573
+ return; // Skip if already detached
574
+ let children = item.parent.children || [];
575
+ // Remove from parent children
576
+ const indexInParent = children.indexOf(item);
577
+ if (indexInParent !== -1) {
578
+ children = children.slice(); // Copy original array, because it can be used in a loop
579
+ children.splice(indexInParent, 1);
580
+ item.parent.children = children;
581
+ }
582
+ item.parent = null;
583
+ }
584
+ _findExistingItem(searchItem, items, recursive = true) {
585
+ items = items || [...this._detachedSubItems, ...this.data];
586
+ if (!items.length)
587
+ return undefined; // Not found
588
+ for (const item of items) {
589
+ if (MenuItems.isSameIdOrPathAndParams(searchItem, item))
590
+ return item;
591
+ if (recursive && item.children) {
592
+ const child = this._findExistingItem(searchItem, item.children);
593
+ if (child)
594
+ return child;
595
+ }
596
+ }
597
+ return null;
598
+ }
599
+ _findParent(childItem, availableParents) {
600
+ if (!childItem?.path)
601
+ return undefined;
602
+ if (childItem.parent)
603
+ return childItem.parent;
604
+ availableParents = availableParents || [...this._detachedSubItems, ...this.data];
605
+ return availableParents.reduce((res, item) => {
606
+ if (!item?.path)
607
+ return res;
608
+ // A found item already match with the menuItem.parentPath : keep it as it
609
+ // There is a found candidate that already match the current candidate : keep it
610
+ if (MenuItems.isParent(childItem, res))
611
+ return res;
612
+ // If the menu item has explicit parentPath and its path and path param are the same as the candidate : use it as parent
613
+ if (MenuItems.isParent(childItem, item))
614
+ return item;
615
+ if (!res && item.children?.length) {
616
+ return this._findParent(childItem, item.children);
617
+ }
618
+ return res;
619
+ }, undefined);
620
+ }
621
+ _attachMenuToParent(parent, child) {
622
+ if (this._debug)
623
+ console.debug(`${this._logPrefix}Attach sub-menu {${MenuItems.getUrl(child)}} to parent {${MenuItems.getUrl(parent)}}`);
624
+ // Avoid to keep identical menu item (we replace it with the new child menu item)
625
+ //if (!parent?.$children) parent.$children = new BehaviorSubject<MenuItem[]>([]);
626
+ const children = parent.children || [];
627
+ const existingIndex = children.findIndex((item) => MenuItems.isSameIdOrPathAndParams(item, child));
628
+ // Update existing element
629
+ if (existingIndex !== -1) {
630
+ if (children[existingIndex] !== child) {
631
+ children[existingIndex] = child;
632
+ parent.children = children;
633
+ child.parent = parent;
634
+ }
635
+ }
636
+ else {
637
+ children.push(child);
638
+ // Sort by tab (or id)
639
+ parent.children = children.sort(MenuItems.sortByTabOrId);
640
+ child.parent = parent;
641
+ }
642
+ }
643
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuService, deps: [{ token: i1.LocalSettingsService }, { token: i2.ConfigService }, { token: i3.AccountService }, { token: i4.Router }, { token: i5.ModalController }, { token: i5.AlertController }, { token: i5.NavController }, { token: i6.TranslateService }, { token: ENVIRONMENT }, { token: APP_MENU_OPTIONS, optional: true }, { token: APP_MENU_ITEMS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
644
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuService, providedIn: 'root' });
645
+ }
646
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuService, decorators: [{
647
+ type: Injectable,
648
+ args: [{
649
+ providedIn: 'root',
650
+ deps: [ENVIRONMENT],
651
+ }]
652
+ }], ctorParameters: () => [{ type: i1.LocalSettingsService }, { type: i2.ConfigService }, { type: i3.AccountService }, { type: i4.Router }, { type: i5.ModalController }, { type: i5.AlertController }, { type: i5.NavController }, { type: i6.TranslateService }, { type: i7.Environment, decorators: [{
653
+ type: Inject,
654
+ args: [ENVIRONMENT]
655
+ }] }, { type: i8.MenuOptions, decorators: [{
656
+ type: Optional
657
+ }, {
658
+ type: Inject,
659
+ args: [APP_MENU_OPTIONS]
660
+ }] }, { type: undefined, decorators: [{
661
+ type: Optional
662
+ }, {
663
+ type: Inject,
664
+ args: [APP_MENU_ITEMS]
665
+ }] }] });
666
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQWUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7QUFHM0Us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WUFFckIsc0JBQXNCO1lBQ3RCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7d0dBanJCVSxXQUFXLGtRQXVCWixXQUFXLGFBQ0MsZ0JBQWdCLDZCQUNoQixjQUFjOzRHQXpCekIsV0FBVyxjQUhWLE1BQU07OzRGQUdQLFdBQVc7a0JBSnZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztpQkFDcEI7OzBCQXdCSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ25DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIE1vZGFsQ29udHJvbGxlciwgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBJY29uUmVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IEFib3V0TW9kYWwgfSBmcm9tICcuLi9hYm91dC9hYm91dC5tb2RhbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlSXRlbUVudGl0eVV0aWxzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvdHJlZS1pdGVtLWVudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBJTWVudUl0ZW0sIE1lbnVJdGVtLCBNZW51SXRlbXMsIE1lbnVPcHRpb25zIH0gZnJvbSAnLi9tZW51Lm1vZGVsJztcblxuZXhwb3J0IHR5cGUgU3BsaXRQYW5lU2hvd1doZW4gPSBib29sZWFuIHwgJ2xnJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfU0hPV19XSEVOOiBTcGxpdFBhbmVTaG93V2hlbiA9ICdsZyc7XG5leHBvcnQgY29uc3QgQVBQX01FTlVfSVRFTVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48SU1lbnVJdGVtW10+KCdtZW51SXRlbXMnKTtcbmV4cG9ydCBjb25zdCBBUFBfTUVOVV9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE1lbnVPcHRpb25zPignbWVudU9wdGlvbnMnKTtcblxuZXhwb3J0IGludGVyZmFjZSBNZW51UGF0aFBhcmFtIHtcbiAgcGF0aDogc3RyaW5nO1xuICBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBkZXBzOiBbRU5WSVJPTk1FTlRdLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlPE1lbnVJdGVtW10+IHtcbiAgcmVhZG9ubHkgYWNjb3VudENoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjY291bnQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IG9uUGlubmVkID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSBfc3RhdGljSXRlbXM6IE1lbnVJdGVtW107XG4gIHByaXZhdGUgX2RldGFjaGVkU3ViSXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBNZW51T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nUHJlZml4ID0gJ1ttZW51LXNlcnZpY2VdICc7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRvcGVuZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kc3BsaXRQYW5lV2hlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3BsaXRQYW5lU2hvd1doZW4+KERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kZW5hYmxlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF8kZW5hYmxlU3ViTWVudTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBhbGVydENvbnRyb2xsZXI6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTUVOVV9PUFRJT05TKSBvcHRpb25zPzogTWVudU9wdGlvbnMsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTUVOVV9JVEVNUykgc3RhdGljSXRlbXM/OiBJTWVudUl0ZW1bXVxuICApIHtcbiAgICBzdXBlcihzZXR0aW5ncyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBzdWJNZW51OiB7XG4gICAgICAgIGRpc2FibGVJY29uOiBmYWxzZSxcbiAgICAgICAgc2F2ZVBpbm5lZDogdHJ1ZSxcbiAgICAgICAgLi4uKG9wdGlvbnM/LnN1Yk1lbnUgfHwge30pLFxuICAgICAgICAvLyBGb3JjZSBkaXNhYmxlIG9uIG1vYmlsZVxuICAgICAgICBlbmFibGU6IG9wdGlvbnM/LnN1Yk1lbnU/LmVuYWJsZSAhPT0gZmFsc2UgJiYgIXRoaXMuc2V0dGluZ3MubW9iaWxlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuXyRlbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0aGlzLmVudmlyb25tZW50Py5lbmFibGVNZW51ICE9PSBmYWxzZSk7XG4gICAgdGhpcy5fJGVuYWJsZVN1Yk1lbnUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX29wdGlvbnMuc3ViTWVudS5lbmFibGUpO1xuICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbXTtcbiAgICB0aGlzLl9zdGF0aWNJdGVtcyA9IChzdGF0aWNJdGVtcyB8fCBbXSkubWFwKChzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdCh7IHN0YXRpYzogdHJ1ZSwgLi4uc291cmNlIH0sIHsgY29tcHV0ZUlkOiB0cnVlLCBmaWxsUGFyZW50OiB0cnVlLCBmaWxsRGVmYXVsdEZyb21QYXJlbnQ6IHRydWUgfSk7XG5cbiAgICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSBUcmVlSXRlbUVudGl0eVV0aWxzLmRlbGV0ZVJlY3Vyc2l2ZWx5KHRhcmdldCwgKGl0ZW0pID0+IGl0ZW0uc3RhdGljICE9PSB0cnVlKTtcbiAgICAgIGlmIChkZXRhY2hlZFN1Ykl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgZGV0YWNoZWRTdWJJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB0aGlzLl9kZXRhY2hUb1BhcmVudChpdGVtKSk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ0luaXRpYWwgZGV0YWNoZWQgc3ViIGl0ZW1zJywgZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaCguLi5kZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG5cbiAgICAvLyBERUJVR1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBnZXQgb3BlbmVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl8kb3BlbmVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNwbGl0UGFuZVdoZW4oKTogT2JzZXJ2YWJsZTxTcGxpdFBhbmVTaG93V2hlbj4ge1xuICAgIHJldHVybiB0aGlzLl8kc3BsaXRQYW5lV2hlbi5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl8kZW5hYmxlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzdWJNZW51RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fJGVuYWJsZVN1Yk1lbnUudmFsdWU7XG4gIH1cblxuICBnZXQgc3ViSXRlbXMoKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEgfHwgW10pLnJlZHVjZSgocmVzLCByb290RWxlbWVudCkgPT4gcmVzLmNvbmNhdChyb290RWxlbWVudC5jaGlsZHJlbiksIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9zdGF0aWNTdWJJdGVtcygpOiBNZW51SXRlbVtdIHtcbiAgICByZXR1cm4gKHRoaXMuX3N0YXRpY0l0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlcywgcm9vdEVsZW1lbnQpID0+IHJlcy5jb25jYXQocm9vdEVsZW1lbnQuY2hpbGRyZW4pLCBbXSk7XG4gIH1cblxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlZC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGVuYWJsZVN1Yk1lbnUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlU3ViTWVudS5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNldFNwbGl0UGFuZVNob3dXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVdoZW4oKSB7XG4gICAgaWYgKHRoaXMuXyRzcGxpdFBhbmVXaGVuLnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fJHNwbGl0UGFuZVdoZW4ubmV4dChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfVxuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IHsgd2l0aENoaWxkcmVuPzogYm9vbGVhbjsgY29tcHV0ZUlkPzogYm9vbGVhbjsgZmlsbFBhcmVudD86IGJvb2xlYW47IGZpbGxEZWZhdWx0RnJvbVBhcmVudD86IGJvb2xlYW4gfSk6IE1lbnVJdGVtIHtcbiAgICBjb25zdCB0YXJnZXQgPSBNZW51SXRlbS5mcm9tT2JqZWN0KHNvdXJjZSwgeyB3aXRoQ2hpbGRyZW46IGZhbHNlIH0pO1xuICAgIC8vIENvbXB1dGUgaWQgaWYgbmVlZFxuICAgIGlmIChvcHRzPy5jb21wdXRlSWQgJiYgaXNOaWwodGFyZ2V0LmlkKSkgdGFyZ2V0LmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG5cbiAgICAvLyBSZW1vdmUgaWNvbiBpZiBkaXNhYmxlZFxuICAgIGlmICh0aGlzLl9vcHRpb25zLnN1Yk1lbnUuZGlzYWJsZUljb24pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCA8SWNvblJlZj57IGljb246IHVuZGVmaW5lZCwgbWF0SWNvbjogdW5kZWZpbmVkLCBtYXRTdmdJY29uOiB1bmRlZmluZWQgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlXG4gICAgdGFyZ2V0LmNoaWxkcmVuID0gKHNvdXJjZS5jaGlsZHJlbiB8fCBbXSkubWFwKChqc29uOiBhbnkpID0+IHRoaXMuZnJvbU9iamVjdChqc29uLCB7IC4uLm9wdHMsIGZpbGxQYXJlbnQ6IGZhbHNlIH0pKTtcblxuICAgIC8vIEZpbGwgcGFyZW50IChvbmNlLCB3aGVuIHRoZSBmdWxsIHRyZWUgaXMgcmVhZHkpXG4gICAgaWYgKG9wdHM/LmZpbGxQYXJlbnQpIHtcbiAgICAgIFRyZWVJdGVtRW50aXR5VXRpbHMudHJlZUZpbGxQYXJlbnQodGFyZ2V0KTtcblxuICAgICAgLy8gRmlsbCBkZWZhdWx0cyBmcm9tIHRoZSBwYXJlbnQgKG9uY2UgZmlsbGVkKVxuICAgICAgaWYgKG9wdHM/LmZpbGxEZWZhdWx0RnJvbVBhcmVudCkge1xuICAgICAgICBUcmVlSXRlbUVudGl0eVV0aWxzLnZpc2l0KHRhcmdldCwgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoIWl0ZW0ucGFyZW50KSByZXR1cm47IC8vIFNraXAgaWYgbm8gcGFyZW50XG4gICAgICAgICAgaXRlbS5wYXJlbnRQYXRoID0gaXRlbS5wYXJlbnRQYXRoIHx8IGl0ZW0ucGFyZW50LnBhdGg7XG4gICAgICAgICAgaXRlbS5wYXJlbnRQYXRoUGFyYW1zID0gaXRlbS5wYXJlbnRQYXRoUGFyYW1zIHx8IGl0ZW0ucGFyZW50LnBhdGhQYXJhbXM7XG4gICAgICAgICAgaXRlbS5zdGF0aWMgPSB0b0Jvb2xlYW4oaXRlbS5zdGF0aWMsIGl0ZW0ucGFyZW50LnN0YXRpYyk7XG4gICAgICAgICAgLy8gQ29tcHV0ZSBwYXRoLCBmcm9tIHBhcmVudCBwYXRoICsgYWN0aW9uXG4gICAgICAgICAgaWYgKCFpdGVtLnBhdGggJiYgISFpdGVtLmFjdGlvbikge1xuICAgICAgICAgICAgaXRlbS5wYXRoID0gaXRlbS5wYXJlbnQucGF0aDtcbiAgICAgICAgICAgIGl0ZW0ucGF0aFBhcmFtcyA9IHR5cGVvZiBpdGVtLmFjdGlvbiA9PT0gJ3N0cmluZycgPyB7IGFjdGlvbjogaXRlbS5hY3Rpb24gfSA6IHsgYWN0aW9uSWQ6IGl0ZW0uaWQudG9TdHJpbmcoKSwgYWN0aW9uVGl0bGU6IGl0ZW0udGl0bGUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBjcmVhdGVTdWJNZW51KHNvdXJjZTogUGFydGlhbDxJTWVudUl0ZW0+KTogTWVudUl0ZW0ge1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuIG51bGw7IC8vIFNraXAgaWYgZGlzYWJsZWRcblxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZnJvbU9iamVjdChzb3VyY2UpO1xuXG4gICAgLy8gQ2hlY2sgaWYgZXhpc3RzXG4gICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbSh0YXJnZXQpO1xuICAgICAgaWYgKGV4aXN0aW5nSXRlbSkgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVcbiAgICBpZiAoaXNOaWwodGFyZ2V0LmlkKSkgdGFyZ2V0LmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXN5bmMgYWRkU3ViTWVudUl0ZW1zKHNvdXJjZXM6IElNZW51SXRlbVtdLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGlmICghdGhpcy5zdWJNZW51RW5hYmxlZCkgcmV0dXJuOyAvLyBTa2lwXG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHRoaXMuZnJvbU9iamVjdChzb3VyY2UpLCBvcHRzKSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbShpdGVtOiBJTWVudUl0ZW0sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgaWYgKCF0aGlzLnN1Yk1lbnVFbmFibGVkKSByZXR1cm47IC8vIFNraXBcbiAgICByZXR1cm4gdGhpcy5fYWRkU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pLCBvcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVN1Yk1lbnVJdGVtcyhpdGVtczogSU1lbnVJdGVtW10pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiAoaXRlbXMgfHwgW10pLm1hcCgoaXRlbSkgPT4gdGhpcy5fcmVtb3ZlU3ViTWVudUl0ZW0odGhpcy5mcm9tT2JqZWN0KGl0ZW0pKSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVTdWJNZW51SXRlbShpdGVtOiBJTWVudUl0ZW0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiB0aGlzLl9yZW1vdmVTdWJNZW51SXRlbSh0aGlzLmZyb21PYmplY3QoaXRlbSkpO1xuICB9XG5cbiAgdG9nZ2xlUGlubmVkKHNvdXJjZTogSU1lbnVJdGVtKSB7XG4gICAgY29uc3QgaXRlbSA9IHNvdXJjZSBpbnN0YW5jZW9mIE1lbnVJdGVtID8gc291cmNlIDogdGhpcy5fZmluZEV4aXN0aW5nSXRlbSh0aGlzLmZyb21PYmplY3Qoc291cmNlKSk7XG5cbiAgICAvLyBTa2lwIGlmIG5vdCBmb3VuZFxuICAgIGlmICghaXRlbSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLndhcm4odGhpcy5fbG9nUHJlZml4ICsgYFN1YiBtZW51IHske3NvdXJjZS5wYXRofX0gY2Fubm90IGJlIGZvdW5kIC0gdW5hYmxlIHRvIHRvZ2dsZSBwaW5uZWQhYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2tpcCBpZiBzdGF0aWNcbiAgICBpZiAoaXRlbS5zdGF0aWMpIHJldHVybjtcblxuICAgIC8vIFVucGlubmVkXG4gICAgaWYgKGl0ZW0ucGlubmVkKSB7XG4gICAgICBpdGVtLnBpbm5lZCA9IGZhbHNlO1xuICAgICAgaWYgKCFpdGVtLmRldGFjaGVkKSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4udGhpcy5fZGV0YWNoU3ViTWVudUl0ZW1zKCldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBpbm5lZFxuICAgIGVsc2Uge1xuICAgICAgaXRlbS5waW5uZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMub25QaW5uZWQuZW1pdChpdGVtKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBY3Rpb24oZXZlbnQ6IEV2ZW50LCBpdGVtOiBNZW51SXRlbSkge1xuICAgIGNvbnN0IGFjdGlvbiA9IGl0ZW0/LmFjdGlvbjtcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuOyAvLyBza2lwXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBzd2l0Y2ggKGFjdGlvbiBhcyBzdHJpbmcpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhYm91dCc6XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVuQWJvdXRNb2RhbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdleHBhbmQnOlxuICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRXhwYW5kYWJsZUl0ZW0oaXRlbSk7XG4gICAgICAgICAgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlUm9vdChpdGVtLnBhdGgsIHtcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IGl0ZW0ucGF0aFBhcmFtcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGlmIChpdGVtLnBhdGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoaXRlbS5wYXRoLCB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnBhdGhQYXJhbXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGFjdGlvbjogJyArIGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAoYWN0aW9uIGFzIHVua25vd24gYXMgYW55KShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9nb3V0KCkge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoW1xuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fVElUTEUnLFxuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fTUVTU0FHRScsXG4gICAgICAnQ09NTU9OLkJUTl9DQU5DRUwnLFxuICAgICAgJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJyxcbiAgICBdKTtcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBoZWFkZXI6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQ09ORklSTV9USVRMRSddLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRpb25zWydBVVRILkxPR09VVC5DT05GSVJNX01FU1NBR0UnXSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQ09NTU9OLkJUTl9DQU5DRUwnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJ10sXG4gICAgICAgICAgY3NzQ2xhc3M6ICdpb24tY29sb3ItcHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQmFjayB0byBob21lXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KCcvJyk7XG5cbiAgICAgICAgICAgIC8vIFdBUk5JTkc6IGxvZ291dCBzaG91bGQgYmUgZG9uZSBBRlRFUiBob21lIHJlZGlyZWN0aW9uLCBiZWNhdXNlIG9mIGNhY2hlIGNsZWFyaW5nIC0gc2VlIGlzc3VlICM1XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgYXN5bmMgb3BlbkFib3V0TW9kYWwoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoeyBjb21wb25lbnQ6IEFib3V0TW9kYWwgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUV4cGFuZGFibGVJdGVtKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKCFpdGVtLmV4cGFuZGVkKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5fbG9nUHJlZml4ICsgJ0V4cGFuZCBpdGVtJywgaXRlbSk7XG5cbiAgICAgIGl0ZW0ubWF0SWNvbiA9ICdleHBhbmRfbGVzcyc7XG5cbiAgICAgIC8vIFRyeSB0byBhdHRhY2ggc29tZSBpdGVtXG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zXG4gICAgICAgIC5maWx0ZXIoKGNoaWxkSXRlbSkgPT4gISF0aGlzLl9maW5kUGFyZW50KGNoaWxkSXRlbSwgW2l0ZW1dKSlcbiAgICAgICAgLmZvckVhY2goKGNoaWxkSXRlbSkgPT4gdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KGl0ZW0sIGNoaWxkSXRlbSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLm1hdEljb24gPSAnZXhwYW5kX21vcmUnO1xuXG4gICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLnRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyh7IHBhdGg6ICcvJywgcGFyYW1zOiB7fSB9LCBpdGVtLmNoaWxkcmVuKV07XG4gICAgfVxuICB9XG5cbiAgX21hcmtBc09wZW5lZCgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBfbWFya0FzQ2xvc2VkKCkge1xuICAgIHRoaXMuXyRvcGVuZWQubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgb3BlbigpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCkge1xuICAgIGNvbnNvbGUuaW5mbyhgJHt0aGlzLl9sb2dQcmVmaXh9U3RhcnRpbmcuLi5gKTtcblxuICAgIC8vIFJlc3RvcmUgc3ViIGl0ZW1zIGZyb20gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgY29uc3Qgc2V0dGluZ3NTdWJJdGVtczogSU1lbnVJdGVtW10gPSB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncygnbWVudScsICdzdWItaXRlbXMnKTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHNldHRpbmdzU3ViSXRlbXMpKSB7XG4gICAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gc2V0dGluZ3NTdWJJdGVtcy5tYXAoKHNvdXJjZSkgPT4gdGhpcy5mcm9tT2JqZWN0KHNvdXJjZSwgeyBjb21wdXRlSWQ6IHRydWUsIGZpbGxQYXJlbnQ6IHRydWUgfSkpO1xuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyAnUmVzdG9yaW5nIHBpbm5lZCBzdWIgaXRlbXMgZnJvbSBzZXR0aW5ncycsIGRldGFjaGVkU3ViSXRlbXMpO1xuXG4gICAgICAvLyBUT0RPIGNoZWNrIGlmIHByZXZpb3VzIHN1YiBtZW51IChmcm9tIG1lbnUgdG9rZW4pIGFyZSBrZXB0XG4gICAgICAvL3RoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaCguLi5kZXRhY2hlZFN1Ykl0ZW1zKTtcbiAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMgPSBkZXRhY2hlZFN1Ykl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRFdmVudCQgPSBtZXJnZShcbiAgICAgIGZyb20odGhpcy5hY2NvdW50U2VydmljZS5yZWFkeSgpKSxcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbixcbiAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQucGlwZShtYXAoKF8pID0+IG51bGwpKVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoYWNjb3VudCkgPT4gKGlzTm90TmlsKGFjY291bnQ/LmlkKSA/IGFjY291bnQgOiBudWxsKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYTEsIGEyKSA9PiBEYXRlVXRpbHMuaXNTYW1lKGExPy51cGRhdGVEYXRlLCBhMj8udXBkYXRlRGF0ZSkpXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAvLyBDb21iaW5lIGNvbmZpZyBhbmQgYWNjb3VudCBldmVudHNcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZmlnU2VydmljZS5jb25maWcsIGFjY291bnRFdmVudCRdKS5zdWJzY3JpYmUoKFtjb25maWcsIGFjY291bnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTG9naW4gPSB0aGlzLmFjY291bnRTZXJ2aWNlLmlzTG9naW4oKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBjb25maWcgb3IgYWNjb3VudCBldmVudC4gUmVmcmVzaGluZyBpdGVtcy4uLiBpc0xvZ2luPyBgLCBpc0xvZ2luKTtcblxuICAgICAgICAvLyBNYWtlIHN1cmUgdG8gY2xlYXIgYWNjb3VudCwgaWYgbm90IGxvZ2luXG4gICAgICAgIGFjY291bnQgPSBpc0xvZ2luID8gYWNjb3VudCA6IG51bGw7XG5cbiAgICAgICAgLy8gTG9hZCBhbGwgaXRlbXNcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICAgICAgLy8gRW1pdCBuZXcgcm9vdCBpdGVtc1xuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoaXRlbXMpO1xuXG4gICAgICAgIC8vIEVtaXQgYWNjb3VudCBjaGFuZ2VzIGV2ZW50XG4gICAgICAgIHRoaXMuYWNjb3VudENoYW5nZXMubmV4dChhY2NvdW50KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gRm9yY2UgcmVmcmVzaCB3aGVuIGxvZ2luL2xvZ291dFxuICAgICAgICB0aGlzLmFjY291bnRDaGFuZ2VzLnBpcGUobWFwKCgpID0+IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKSkpLFxuICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgcm91dGVcbiAgICAgICAgdGhpcy5zdGFydFN1YmplY3QucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMucm91dGVyLmV2ZW50cyksXG4gICAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXAoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGV2ZW50LnVybCkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDI1MCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHBhdGhQYXJhbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRldGFjaGVkU3ViSXRlbXMgPSB0aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMocGF0aFBhcmFtKTtcbiAgICAgICAgICBpZiAoZGV0YWNoZWRTdWJJdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gWy4uLnRoaXMuX2RldGFjaGVkU3ViSXRlbXMsIC4uLmRldGFjaGVkU3ViSXRlbXNdO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1OZXdseSBkZXRhY2hlZCBpdGVtczogYCwgZGV0YWNoZWRTdWJJdGVtcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTYXZlIHBpbm5lZCBpdGVtc1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uUGlubmVkLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgICAvLyBDb2xsZWN0IHBpbm5lZCBlbGVtZW50cywgdGhlbiBzZXJpYWxpemUgaXQgKHdpdGhvdXQgaWQpXG4gICAgICAgIGNvbnN0IHBpbm5lZFN1Ykl0ZW1zID0gdGhpcy5zdWJJdGVtcy5maWx0ZXIoKGkpID0+IGkuaXNQaW5uZWQoKSkubWFwKChpdGVtKSA9PiBpdGVtLmFzT2JqZWN0KHsgd2l0aENoaWxkcmVuOiB0cnVlLCBrZWVwTG9jYWxJZDogZmFsc2UgfSkpO1xuXG4gICAgICAgIGlmIChwaW5uZWRTdWJJdGVtcy5sZW5ndGggJiYgdGhpcy5fZGVidWcpXG4gICAgICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLl9sb2dQcmVmaXggKyBgU2F2aW5nICR7cGlubmVkU3ViSXRlbXMubGVuZ3RofSBwaW5uZWQgaXRlbXMsIGluIGxvY2FsIHNldHRpbmdzYCwgcGlubmVkU3ViSXRlbXMpO1xuICAgICAgICB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZygnbWVudScsIHBpbm5lZFN1Ykl0ZW1zLCAnc3ViLWl0ZW1zJyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuZGF0YVN1YmplY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZE1lbnVJdGVtcyhjb25maWc6IENvbmZpZ3VyYXRpb24gfCBudWxsLCBhY2NvdW50OiBBY2NvdW50IHwgbnVsbCkge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TG9hZGluZyBtZW51IGl0ZW1zLi4uYCk7XG5cbiAgICAvLyBTYXZlIHByZXZpb3VzIGNoaWxkcmVuIG9mIHJvb3QgaXRlbXNcbiAgICBjb25zdCBkZXRhY2hlZFN1Ykl0ZW1zID0gKHRoaXMuc3ViSXRlbXMgfHwgW10pLmNvbmNhdCh0aGlzLl9zdGF0aWNTdWJJdGVtcyB8fCBbXSkucmVkdWNlKChyZXMsIHJvb3RJdGVtKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHJvb3RJdGVtLmNoaWxkcmVuO1xuICAgICAgaWYgKGlzRW1wdHlBcnJheShjaGlsZHJlbikpIHJldHVybiByZXM7XG4gICAgICAvLyBEZXRhY2ggYWxsIHJvb3QgY2hpbGRyZW5cbiAgICAgIHJvb3RJdGVtLmNoaWxkcmVuID0gW107XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gKGNoaWxkLnBhcmVudCA9IG51bGwpKTtcbiAgICAgIC8vIFJldHVybiByb290IGNoaWxkcmVuXG4gICAgICByZXR1cm4gcmVzLmNvbmNhdChjaGlsZHJlbik7XG4gICAgfSwgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyB8fCBbXSk7XG5cbiAgICAvLyBSZXNldCBiYXNlIHJvb3QgaXRlbXMgKGNsZWFuIGl0ZW1zIGFkZGVkIGJ5IGNvbmZpZylcbiAgICBsZXQgaXRlbXM6IE1lbnVJdGVtW10gPSB0aGlzLl9zdGF0aWNJdGVtcy5zbGljZSgpO1xuXG4gICAgLy8gQ29uY2F0IGNvbmZpZydzIGl0ZW1zXG4gICAgY29uc3QgY29uZmlnVmFsdWU6IHN0cmluZyA9IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbmZpZ1ZhbHVlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnSXRlbXMgPSBKU09OLnBhcnNlKGNvbmZpZ1ZhbHVlKSBhcyBJTWVudUl0ZW1bXTtcbiAgICAgICAgaXRlbXMgPSAoY29uZmlnSXRlbXMgfHwgW10pLnJlZHVjZSgocmVzOiBNZW51SXRlbVtdLCBzb3VyY2UpID0+IHtcbiAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZW1cbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5mcm9tT2JqZWN0KHsgc3RhdGljOiB0cnVlLCAuLi5zb3VyY2UgfSwgeyBjb21wdXRlSWQ6IHRydWUgfSk7XG5cbiAgICAgICAgICAvLyBTa2lwIGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgICAgaWYgKHJlcy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKSkgcmV0dXJuIHJlcztcblxuICAgICAgICAgIC8vIFJldXNlIGV4aXN0aW5nIGlkLCBpZiBwb3NzaWJsZVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuZGF0YT8uZmluZCgoaSkgPT4gTWVudUl0ZW1zLmlzU2FtZShpLCBpdGVtKSk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSXRlbSkge1xuICAgICAgICAgICAgaXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXRlbS5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KChpKSA9PiBpLnRpdGxlID09PSBpdGVtLmFmdGVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChpdGVtKVxuICAgICAgICAgICAgICAgIC5jb25jYXQocmVzLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVzLmZpbmRJbmRleCgoaSkgPT4gaS50aXRsZSA9PT0gaXRlbS5iZWZvcmUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIGluZGV4KS5jb25jYXQoaXRlbSkuY29uY2F0KHJlcy5zbGljZShpbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgICAgICAgfSwgaXRlbXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fUludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiAnJHtDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMua2V5fScuIEV4cGVjdGVkIGFuIGFycmF5IG9mIG1lbnUgaXRlbWAsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGl0ZW0gdXNpbmcgYWNjb3VudCByaWdodHNcbiAgICBjb25zdCBvcHRzID0geyBkZWJ1ZzogdGhpcy5fZGVidWcgfTtcbiAgICBpdGVtcyA9IGl0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgY29uZmlnLCBvcHRzKSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgLy8gUmVwbGFjZSB0aXRsZSB1c2luZyBhIGNvbmZpZyBwcm9wZXJ0eVxuICAgICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGl0ZW0udGl0bGVQcm9wZXJ0eSkgJiYgY29uZmlnKSB7XG4gICAgICAgICAgaXRlbS50aXRsZSA9IGNvbmZpZy5wcm9wZXJ0aWVzW2l0ZW0udGl0bGVQcm9wZXJ0eV0gfHwgaXRlbS50aXRsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUZvdW5kICR7aXRlbXMubGVuZ3RofSB2aXNpYmxlIHJvb3QgaXRlbXMuLi5gKTtcblxuICAgIC8vIFJlLWF0dGFjaCBzdWIgbWVudSBpdGVtc1xuICAgIGlmICh0aGlzLnN1Yk1lbnVFbmFibGVkICYmIGRldGFjaGVkU3ViSXRlbXMubGVuZ3RoKSB7XG4gICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICB0aGlzLl9hZGRTdWJNZW51SXRlbXMoZGV0YWNoZWRTdWJJdGVtcywgeyBza2lwSWZFeGlzdHM6IGZhbHNlLCBhdmFpbGFibGVQYXJlbnRzOiBkZXRhY2hlZFN1Ykl0ZW1zLmNvbmNhdChpdGVtcykgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gZGV0YWNoZWRTdWJJdGVtcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGV0YWNoZWRTdWJJdGVtcyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX2FkZFN1Yk1lbnVJdGVtcyhzb3VyY2VzOiBNZW51SXRlbVtdLCBvcHRzPzogeyBza2lwSWZFeGlzdHM/OiBib29sZWFuOyBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSB9KSB7XG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKHNvdXJjZSwgb3B0cykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkU3ViTWVudUl0ZW0obmV3SXRlbTogTWVudUl0ZW0sIG9wdHM/OiB7IHNraXBJZkV4aXN0cz86IGJvb2xlYW47IGF2YWlsYWJsZVBhcmVudHM/OiBNZW51SXRlbVtdIH0pIHtcbiAgICBvcHRzID0ge1xuICAgICAgc2tpcElmRXhpc3RzOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0aFBhcmFtID0gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpO1xuXG4gICAgLy8gRmluZCBpZiBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShuZXdJdGVtLCBvcHRzPy5hdmFpbGFibGVQYXJlbnRzKTtcbiAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICAvLyBObyBjaGFuZ2VzXG4gICAgICBpZiAob3B0cy5za2lwSWZFeGlzdHMgJiYgTWVudUl0ZW1zLmlzU2FtZShleGlzdGluZ0l0ZW0sIG5ld0l0ZW0pICYmIGV4aXN0aW5nSXRlbS52aXNpYmxlKSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2tpcHBpbmcgc3ViIGl0ZW0gKHNhbWUgdmlzaWJsZSBpdGVtIGFscmVhZHkgZXhpc3QpYCwgbmV3SXRlbSk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0l0ZW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgZXhpc3Rpbmcgc3ViIGl0ZW0gI2AsIGV4aXN0aW5nSXRlbS5pZCk7XG5cbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgaXRlbSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGlkXG4gICAgICBpZiAobmV3SXRlbSAhPT0gZXhpc3RpbmdJdGVtKSB7XG4gICAgICAgIG5ld0l0ZW0uaWQgPSBleGlzdGluZ0l0ZW0uaWQ7XG4gICAgICAgIG5ld0l0ZW0uJGNoaWxkcmVuID0gZXhpc3RpbmdJdGVtLiRjaGlsZHJlbjtcbiAgICAgICAgbmV3SXRlbS5waW5uZWQgPSBleGlzdGluZ0l0ZW0ucGlubmVkO1xuICAgICAgICBuZXdJdGVtLnN0YXRpYyA9IGV4aXN0aW5nSXRlbS5zdGF0aWM7XG4gICAgICAgIGlmIChuZXdJdGVtLnBpbm5lZCB8fCBuZXdJdGVtLnN0YXRpYyB8fCBleGlzdGluZ0l0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAvLyBJZiBsb2FkaW5nLCBrZWVwIGV4aXN0aW5nIHRpdGxlIGlmIHBpbm5lZCAoYXZvaWQgdG8gc2hvdyBza2VsZXRvbilcbiAgICAgICAgICBuZXdJdGVtLnRpdGxlID0gbmV3SXRlbS50aXRsZSB8fCBleGlzdGluZ0l0ZW0udGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3SXRlbS50aXRsZSA9IGlzTm90TmlsKG5ld0l0ZW0udGl0bGUpID8gbmV3SXRlbS50aXRsZSA6IGV4aXN0aW5nSXRlbS50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBdXRvIHNldCBpY29uLCBmb3IgZXhwYW5kIGFjdGlvblxuICAgICAgICBpZiAoZXhpc3RpbmdJdGVtLmFjdGlvbiA9PT0gJ2V4cGFuZCcpIHtcbiAgICAgICAgICBuZXdJdGVtLmljb24gPSBudWxsO1xuICAgICAgICAgIG5ld0l0ZW0ubWF0SWNvbiA9IGV4aXN0aW5nSXRlbS5leHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaXRlbSdzIGlkIChpZiBuZWVkKVxuICAgIGVsc2UgaWYgKGlzTmlsKG5ld0l0ZW0uaWQpKSB7XG4gICAgICBuZXdJdGVtLmlkID0gdGhpcy5fY29tcHV0ZU5ld0lkKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBpY29uIGZvciBleHBhbmQgYWN0aW9uXG4gICAgaWYgKG5ld0l0ZW0uYWN0aW9uID09PSAnZXhwYW5kJyAmJiAhbmV3SXRlbS5tYXRJY29uKSB7XG4gICAgICBuZXdJdGVtLm1hdEljb24gPSAnZXhwYW5kX21vcmUnO1xuICAgIH1cblxuICAgIC8vIElmIHZpc2libGUsIGdldCB0aGUgcGFyZW50IHdoZXJlIHRvIGF0dGFjaCB0aGUgaXRlbVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQobmV3SXRlbSwgb3B0cz8uYXZhaWxhYmxlUGFyZW50cyk7XG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuZXhwYW5kZWQpIHtcbiAgICAgIC8vIEF0dGFjaCBpdGVtIHRvIHBhcmVudFxuICAgICAgdGhpcy5fYXR0YWNoTWVudVRvUGFyZW50KHBhcmVudCwgbmV3SXRlbSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBkZXRhY2hlZCBpdGVtcyA6XG4gICAgICAvLyAtIGV4Y2x1ZGVkIG5ldyBpdGVtXG4gICAgICAvLyAtIGF0dGFjaCBhbmQgZXhjbHVkZSB0aG9zZSB0aGFuIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgbmV3IGl0ZW1cbiAgICAgIC8vIFNlYXJjaCBpbiBkZXRhY2hlZCBpdGVtcyBvbmUgaGF2ZSBuZXdJdGVtIGFzIHBhcmVudFxuICAgICAgaWYgKG5ld0l0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgY29uc3QgYW5jZXN0b3IgPSBuZXdJdGVtLmFuY2VzdG9yO1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5jb25jYXQoLi4ubmV3SXRlbS5jaGlsZHJlbikucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBFeGNsdWRlZCBuZXdseSBhZGQgaXRlbVxuICAgICAgICAgIGlmIChpdGVtLmlkID09PSBuZXdJdGVtLmlkKSByZXR1cm4gcmVzO1xuXG4gICAgICAgICAgLy8gSWYgc29tZSBkZXRhY2hlZCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIG5ldyBpdGVtOiBkbyBpdFxuICAgICAgICAgIGlmIChNZW51SXRlbXMuY2hlY2tJZlN1Yk1lbnVWaXNpYmxlKGl0ZW0sIHBhdGhQYXJhbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQoaXRlbSwgW2FuY2VzdG9yXSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSBpdGVtJ3MgY2hpbGRyZW5cbiAgICAgICAgICAgICAgY29uc3QgZGV0YWNoZWRDaGlsZHJlbiA9IHRoaXMuX2RldGFjaFN1Yk1lbnVJdGVtcyhwYXRoUGFyYW0sIGl0ZW0uY2hpbGRyZW4gfHwgW10pO1xuXG4gICAgICAgICAgICAgIC8vIEF0dGFjaCBpdGVtXG4gICAgICAgICAgICAgIHRoaXMuX2F0dGFjaE1lbnVUb1BhcmVudChwYXJlbnQsIGl0ZW0pO1xuXG4gICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGRldGFjaGVkIGNoaWxkcmVuXG4gICAgICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KC4uLmRldGFjaGVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERldGFjaCAoaWYgbmVlZClcbiAgICAgICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChpdGVtKTtcblxuICAgICAgICAgIC8vIEFkZCB0byBkZXRhY2hlZCBpdGVtc1xuICAgICAgICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBkZXRhY2hlZCBlbGVtZW50c1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zID0gdGhpcy5fZGV0YWNoZWRTdWJJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IG5ld0l0ZW0uaWQpO1xuXG4gICAgICAgIC8vIERldGFjaCBjaGlsZHJlblxuICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goKGl0ZW0pID0+IHRoaXMuX2RldGFjaFRvUGFyZW50KGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIG9yIHVwZGF0ZSBkZXRhY2hlZCBpdGVtXG4gICAgICBjb25zdCBkZXRhY2hlZEluZGV4ID0gaXNOb3ROaWwobmV3SXRlbS5pZCkgPyB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbmV3SXRlbS5pZCkgOiAtMTtcbiAgICAgIGlmIChkZXRhY2hlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zW2RldGFjaGVkSW5kZXhdID0gbmV3SXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RldGFjaGVkU3ViSXRlbXMucHVzaChuZXdJdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3SXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVOZXdJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbUNvdW50ZXIrKztcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZVN1Yk1lbnVJdGVtKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShpdGVtKTtcbiAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChleGlzdGluZ0l0ZW0pO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nSXRlbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZXRhY2hTdWJNZW51SXRlbXMoY3VycmVudFBhdGhQYXJhbT86IE1lbnVQYXRoUGFyYW0sIHN1Ykl0ZW1zPzogTWVudUl0ZW1bXSkge1xuICAgIGN1cnJlbnRQYXRoUGFyYW0gPSBjdXJyZW50UGF0aFBhcmFtID8gY3VycmVudFBhdGhQYXJhbSA6IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiAoc3ViSXRlbXMgfHwgdGhpcy5zdWJJdGVtcykucmVkdWNlKChyZXMsIHN1Ykl0ZW0pID0+IHtcbiAgICAgIC8vIE5vdCB2aXNpYmxlID0+IHNob3VsZCBiZSBkZXRhY2hcbiAgICAgIGlmICghTWVudUl0ZW1zLmNoZWNrSWZTdWJNZW51VmlzaWJsZShzdWJJdGVtLCBjdXJyZW50UGF0aFBhcmFtKSkge1xuICAgICAgICB0aGlzLl9kZXRhY2hUb1BhcmVudChzdWJJdGVtKTtcblxuICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChzdWJJdGVtKTtcbiAgICAgIH1cbiAgICAgIC8vIFZpc2libGU6IGNoZWNrIGNoaWxkcmVuXG4gICAgICByZXR1cm4gcmVzLmNvbmNhdCh0aGlzLl9kZXRhY2hTdWJNZW51SXRlbXMoY3VycmVudFBhdGhQYXJhbSwgc3ViSXRlbS5jaGlsZHJlbikpO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RldGFjaFRvUGFyZW50KGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKCFpdGVtPy5wYXJlbnQpIHJldHVybjsgLy8gU2tpcCBpZiBhbHJlYWR5IGRldGFjaGVkXG4gICAgbGV0IGNoaWxkcmVuID0gaXRlbS5wYXJlbnQuY2hpbGRyZW4gfHwgW107XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBwYXJlbnQgY2hpbGRyZW5cbiAgICBjb25zdCBpbmRleEluUGFyZW50ID0gY2hpbGRyZW4uaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXhJblBhcmVudCAhPT0gLTEpIHtcbiAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uc2xpY2UoKTsgLy8gQ29weSBvcmlnaW5hbCBhcnJheSwgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBpbiBhIGxvb3BcbiAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleEluUGFyZW50LCAxKTtcbiAgICAgIGl0ZW0ucGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgaXRlbS5wYXJlbnQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEV4aXN0aW5nSXRlbShzZWFyY2hJdGVtOiBJTWVudUl0ZW0sIGl0ZW1zPzogTWVudUl0ZW1bXSwgcmVjdXJzaXZlID0gdHJ1ZSk6IE1lbnVJdGVtIHtcbiAgICBpdGVtcyA9IGl0ZW1zIHx8IFsuLi50aGlzLl9kZXRhY2hlZFN1Ykl0ZW1zLCAuLi50aGlzLmRhdGFdO1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBOb3QgZm91bmRcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChNZW51SXRlbXMuaXNTYW1lSWRPclBhdGhBbmRQYXJhbXMoc2VhcmNoSXRlbSwgaXRlbSkpIHJldHVybiBpdGVtO1xuICAgICAgaWYgKHJlY3Vyc2l2ZSAmJiBpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5fZmluZEV4aXN0aW5nSXRlbShzZWFyY2hJdGVtLCBpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFBhcmVudChjaGlsZEl0ZW06IE1lbnVJdGVtLCBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpZiAoIWNoaWxkSXRlbT8ucGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoY2hpbGRJdGVtLnBhcmVudCkgcmV0dXJuIGNoaWxkSXRlbS5wYXJlbnQ7XG5cbiAgICBhdmFpbGFibGVQYXJlbnRzID0gYXZhaWxhYmxlUGFyZW50cyB8fCBbLi4udGhpcy5fZGV0YWNoZWRTdWJJdGVtcywgLi4udGhpcy5kYXRhXTtcblxuICAgIHJldHVybiBhdmFpbGFibGVQYXJlbnRzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0/LnBhdGgpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIEEgZm91bmQgaXRlbSBhbHJlYWR5IG1hdGNoIHdpdGggdGhlIG1lbnVJdGVtLnBhcmVudFBhdGggOiBrZWVwIGl0IGFzIGl0XG4gICAgICAvLyBUaGVyZSBpcyBhIGZvdW5kIGNhbmRpZGF0ZSB0aGF0IGFscmVhZHkgbWF0Y2ggdGhlIGN1cnJlbnQgY2FuZGlkYXRlIDoga2VlcCBpdFxuICAgICAgaWYgKE1lbnVJdGVtcy5pc1BhcmVudChjaGlsZEl0ZW0sIHJlcykpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIElmIHRoZSBtZW51IGl0ZW0gaGFzIGV4cGxpY2l0IHBhcmVudFBhdGggYW5kIGl0cyBwYXRoIGFuZCBwYXRoIHBhcmFtIGFyZSB0aGUgc2FtZSBhcyB0aGUgY2FuZGlkYXRlICA6IHVzZSBpdCBhcyBwYXJlbnRcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQYXJlbnQoY2hpbGRJdGVtLCBpdGVtKSkgcmV0dXJuIGl0ZW07XG5cbiAgICAgIGlmICghcmVzICYmIGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZFBhcmVudChjaGlsZEl0ZW0sIGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hNZW51VG9QYXJlbnQocGFyZW50OiBNZW51SXRlbSwgY2hpbGQ6IE1lbnVJdGVtKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1BdHRhY2ggc3ViLW1lbnUgeyR7TWVudUl0ZW1zLmdldFVybChjaGlsZCl9fSB0byBwYXJlbnQgeyR7TWVudUl0ZW1zLmdldFVybChwYXJlbnQpfX1gKTtcblxuICAgIC8vIEF2b2lkIHRvIGtlZXAgaWRlbnRpY2FsIG1lbnUgaXRlbSAod2UgcmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgY2hpbGQgbWVudSBpdGVtKVxuICAgIC8vaWYgKCFwYXJlbnQ/LiRjaGlsZHJlbikgcGFyZW50LiRjaGlsZHJlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuIHx8IFtdO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoKGl0ZW0pID0+IE1lbnVJdGVtcy5pc1NhbWVJZE9yUGF0aEFuZFBhcmFtcyhpdGVtLCBjaGlsZCkpO1xuXG4gICAgLy8gVXBkYXRlIGV4aXN0aW5nIGVsZW1lbnRcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGlmIChjaGlsZHJlbltleGlzdGluZ0luZGV4XSAhPT0gY2hpbGQpIHtcbiAgICAgICAgY2hpbGRyZW5bZXhpc3RpbmdJbmRleF0gPSBjaGlsZDtcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG5cbiAgICAgIC8vIFNvcnQgYnkgdGFiIChvciBpZClcbiAgICAgIHBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuLnNvcnQoTWVudUl0ZW1zLnNvcnRCeVRhYk9ySWQpO1xuICAgICAgY2hpbGQucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgfVxufVxuIl19