geonetwork-ui 2.4.0-dev.f6f2f023 → 2.4.0-dev.fdf8f64b

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 (962) hide show
  1. package/esm2022/libs/api/metadata-converter/src/index.mjs +4 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/common/license.mjs +64 -0
  3. package/esm2022/libs/api/metadata-converter/src/lib/common/url.mjs +14 -0
  4. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +254 -0
  5. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/index.mjs +2 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/namespaces.mjs +17 -0
  7. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +196 -0
  8. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.mjs +46 -0
  9. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.mjs +74 -0
  10. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/utils/uri.mjs +2 -0
  11. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.mjs +27 -0
  12. package/esm2022/libs/api/metadata-converter/src/lib/find-converter.mjs +11 -1
  13. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +2 -1
  14. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +10 -3
  15. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.mjs +1 -1
  16. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  17. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +6 -6
  18. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +7 -4
  19. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +17 -29
  20. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +12 -17
  21. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +35 -7
  22. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/geometry.mjs +31 -0
  23. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +76 -54
  24. package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +44 -5
  25. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +108 -32
  26. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +2 -1
  27. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +3 -1
  28. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +12 -2
  29. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +59 -11
  30. package/esm2022/libs/common/domain/src/lib/model/record/contact.model.mjs +28 -1
  31. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  32. package/esm2022/libs/common/domain/src/lib/model/record/organization.model.mjs +1 -1
  33. package/esm2022/libs/common/domain/src/lib/model/user/user.model.mjs +1 -1
  34. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  35. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  36. package/esm2022/libs/data-access/gn4/src/fixtures/site.fixtures.mjs +5 -5
  37. package/esm2022/libs/data-access/gn4/src/fixtures/ui.fixtures.mjs +3 -3
  38. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +2 -6
  39. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  40. package/esm2022/libs/feature/catalog/src/index.mjs +2 -1
  41. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +7 -4
  42. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +11 -11
  43. package/esm2022/libs/feature/catalog/src/lib/organization-url.token.mjs +4 -0
  44. package/esm2022/libs/feature/catalog/src/lib/records/records.service.mjs +4 -6
  45. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +5 -5
  46. package/esm2022/libs/feature/dataviz/src/lib/feature-dataviz.module.mjs +14 -8
  47. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +40 -50
  48. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +1 -1
  49. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +2 -2
  50. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  51. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +3 -1
  52. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +10 -5
  53. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +10 -2
  54. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +1 -1
  55. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +7 -3
  56. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +16 -6
  57. package/esm2022/libs/feature/editor/src/lib/components/contact-card/contact-card.component.mjs +17 -0
  58. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +80 -0
  59. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +95 -0
  60. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +71 -0
  61. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +72 -0
  62. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +109 -0
  63. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +147 -0
  64. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.mjs +19 -0
  65. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +31 -68
  66. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +11 -9
  67. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.mjs +79 -0
  68. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +150 -0
  69. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +191 -0
  70. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.mjs +44 -0
  71. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +103 -0
  72. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +12 -16
  73. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.mjs +9 -8
  74. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +140 -5
  75. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +41 -68
  76. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +17 -15
  77. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +49 -44
  78. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -3
  79. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +13 -7
  80. package/esm2022/libs/feature/editor/src/lib/components/wizard/wizard.component.mjs +3 -3
  81. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +8 -8
  82. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +1 -1
  83. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +6 -4
  84. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +215 -57
  85. package/esm2022/libs/feature/editor/src/lib/models/editor-config.model.mjs +2 -0
  86. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +2 -1
  87. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +12 -7
  88. package/esm2022/libs/feature/map/src/index.mjs +2 -9
  89. package/esm2022/libs/feature/map/src/lib/+state/map.actions.mjs +4 -7
  90. package/esm2022/libs/feature/map/src/lib/+state/map.facade.mjs +9 -15
  91. package/esm2022/libs/feature/map/src/lib/+state/map.reducer.mjs +13 -44
  92. package/esm2022/libs/feature/map/src/lib/+state/map.selectors.mjs +3 -2
  93. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +6 -6
  94. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +20 -19
  95. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +23 -14
  96. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +15 -14
  97. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +18 -13
  98. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +16 -11
  99. package/esm2022/libs/feature/map/src/lib/constant/index.mjs +1 -2
  100. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +9 -68
  101. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +43 -29
  102. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +43 -18
  103. package/esm2022/libs/feature/map/src/lib/map-state-container/map-state-container.component.mjs +27 -0
  104. package/esm2022/libs/feature/map/src/lib/style/map-style.fixtures.mjs +3 -3
  105. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +12 -171
  106. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +1 -1
  107. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +42 -23
  108. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +13 -5
  109. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +49 -15
  110. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +21 -17
  111. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +18 -9
  112. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +40 -52
  113. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +11 -13
  114. package/esm2022/libs/feature/router/src/lib/default/constants.mjs +2 -1
  115. package/esm2022/libs/feature/router/src/lib/default/router.config.mjs +1 -1
  116. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +9 -2
  117. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +8 -1
  118. package/esm2022/libs/feature/search/src/index.mjs +2 -2
  119. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +7 -4
  120. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +4 -4
  121. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +94 -0
  122. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +8 -3
  123. package/esm2022/libs/feature/search/src/lib/state/selectors.mjs +4 -1
  124. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +7 -3
  125. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +5 -5
  126. package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +7 -7
  127. package/esm2022/libs/ui/catalog/src/lib/ui-catalog.module.mjs +5 -7
  128. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +5 -8
  129. package/esm2022/libs/ui/dataviz/src/lib/table/table.fixtures.mjs +3 -3
  130. package/esm2022/libs/ui/elements/src/index.mjs +3 -3
  131. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  132. package/esm2022/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.mjs +27 -0
  133. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +2 -2
  134. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +1 -1
  135. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +5 -3
  136. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +2 -2
  137. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +6 -5
  138. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +2 -2
  139. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +6 -6
  140. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +5 -11
  141. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +3 -3
  142. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +5 -5
  143. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +24 -5
  144. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +15 -11
  145. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +3 -3
  146. package/esm2022/libs/ui/inputs/src/index.mjs +6 -1
  147. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +79 -29
  148. package/esm2022/libs/ui/inputs/src/lib/badge/badge.component.mjs +5 -3
  149. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +8 -1
  150. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +11 -4
  151. package/esm2022/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.mjs +9 -3
  152. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +26 -24
  153. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +87 -0
  154. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +19 -15
  155. package/esm2022/libs/ui/inputs/src/lib/search-input/search-input.component.mjs +6 -4
  156. package/esm2022/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.mjs +34 -0
  157. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +7 -21
  158. package/esm2022/libs/ui/inputs/src/lib/text-input/text-input.component.mjs +6 -17
  159. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +4 -18
  160. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +59 -0
  161. package/esm2022/libs/ui/layout/src/index.mjs +4 -1
  162. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +5 -3
  163. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +3 -3
  164. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +71 -0
  165. package/esm2022/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.mjs +29 -0
  166. package/esm2022/libs/ui/layout/src/lib/sortable-list/sortable-list.component.mjs +43 -0
  167. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +1 -1
  168. package/esm2022/libs/ui/map/src/index.mjs +4 -3
  169. package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +8 -6
  170. package/esm2022/libs/ui/map/src/lib/components/map-container/map-container.component.mjs +137 -0
  171. package/esm2022/libs/ui/map/src/lib/components/map-container/map-settings.token.mjs +13 -0
  172. package/esm2022/libs/ui/map/src/lib/map-utils.mjs +37 -0
  173. package/esm2022/libs/ui/search/src/index.mjs +2 -1
  174. package/esm2022/libs/ui/search/src/lib/facets/fixtures/aggregations-model-response.mjs +7 -7
  175. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +67 -0
  176. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +140 -0
  177. package/esm2022/libs/ui/widgets/src/index.mjs +2 -1
  178. package/esm2022/libs/ui/widgets/src/lib/popover/popover.component.mjs +68 -0
  179. package/esm2022/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.mjs +5 -3
  180. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +1 -6
  181. package/esm2022/libs/util/app-config/src/index.mjs +2 -1
  182. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +10 -10
  183. package/esm2022/libs/util/app-config/src/lib/map-layers.mjs +27 -0
  184. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +1 -1
  185. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +1 -1
  186. package/esm2022/libs/util/shared/src/lib/services/theme.service.mjs +2 -1
  187. package/esm2022/libs/util/shared/src/lib/utils/bytes-convert.mjs +4 -1
  188. package/esm2022/translations/de.json +175 -38
  189. package/esm2022/translations/en.json +176 -39
  190. package/esm2022/translations/es.json +146 -9
  191. package/esm2022/translations/fr.json +207 -70
  192. package/esm2022/translations/it.json +149 -12
  193. package/esm2022/translations/nl.json +146 -9
  194. package/esm2022/translations/pt.json +146 -9
  195. package/fesm2022/geonetwork-ui.mjs +11807 -8523
  196. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  197. package/libs/api/metadata-converter/src/index.d.ts +3 -0
  198. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  199. package/libs/api/metadata-converter/src/lib/common/license.d.ts +3 -0
  200. package/libs/api/metadata-converter/src/lib/common/license.d.ts.map +1 -0
  201. package/libs/api/metadata-converter/src/lib/common/url.d.ts +7 -0
  202. package/libs/api/metadata-converter/src/lib/common/url.d.ts.map +1 -0
  203. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts +13 -0
  204. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts.map +1 -0
  205. package/libs/api/metadata-converter/src/lib/dcat-ap/index.d.ts +2 -0
  206. package/libs/api/metadata-converter/src/lib/dcat-ap/index.d.ts.map +1 -0
  207. package/libs/api/metadata-converter/src/lib/dcat-ap/namespaces.d.ts +16 -0
  208. package/libs/api/metadata-converter/src/lib/dcat-ap/namespaces.d.ts.map +1 -0
  209. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts +20 -0
  210. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts.map +1 -0
  211. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.d.ts +9 -0
  212. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.d.ts.map +1 -0
  213. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.d.ts +8 -0
  214. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.d.ts.map +1 -0
  215. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/uri.d.ts +2 -0
  216. package/libs/api/metadata-converter/src/lib/dcat-ap/utils/uri.d.ts.map +1 -0
  217. package/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.d.ts +6 -0
  218. package/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.d.ts.map +1 -0
  219. package/libs/api/metadata-converter/src/lib/find-converter.d.ts.map +1 -1
  220. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  221. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +3 -3
  222. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  223. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts +2 -6
  224. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts.map +1 -1
  225. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  226. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  227. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +1 -1
  228. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +2 -2
  229. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  230. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +1 -2
  231. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  232. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  233. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +12 -6
  234. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  235. package/libs/api/metadata-converter/src/lib/iso19139/utils/geometry.d.ts +5 -0
  236. package/libs/api/metadata-converter/src/lib/iso19139/utils/geometry.d.ts.map +1 -0
  237. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +13 -12
  238. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  239. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +59 -0
  240. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
  241. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +20 -8
  242. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  243. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts.map +1 -1
  244. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  245. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  246. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +24 -3
  247. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  248. package/libs/common/domain/src/lib/model/record/contact.model.d.ts +2 -1
  249. package/libs/common/domain/src/lib/model/record/contact.model.d.ts.map +1 -1
  250. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +9 -7
  251. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  252. package/libs/common/domain/src/lib/model/record/organization.model.d.ts +1 -0
  253. package/libs/common/domain/src/lib/model/record/organization.model.d.ts.map +1 -1
  254. package/libs/common/domain/src/lib/model/user/user.model.d.ts +1 -1
  255. package/libs/common/domain/src/lib/model/user/user.model.d.ts.map +1 -1
  256. package/libs/common/domain/src/lib/platform.service.interface.d.ts +18 -1
  257. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  258. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +26 -0
  259. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  260. package/libs/data-access/gn4/src/fixtures/site.fixtures.d.ts +2 -2
  261. package/libs/data-access/gn4/src/fixtures/site.fixtures.d.ts.map +1 -1
  262. package/libs/data-access/gn4/src/fixtures/ui.fixtures.d.ts +1 -1
  263. package/libs/data-access/gn4/src/fixtures/ui.fixtures.d.ts.map +1 -1
  264. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  265. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  266. package/libs/feature/catalog/src/index.d.ts +1 -0
  267. package/libs/feature/catalog/src/index.d.ts.map +1 -1
  268. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts +2 -1
  269. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts.map +1 -1
  270. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
  271. package/libs/feature/catalog/src/lib/organization-url.token.d.ts +3 -0
  272. package/libs/feature/catalog/src/lib/organization-url.token.d.ts.map +1 -0
  273. package/libs/feature/catalog/src/lib/records/records.service.d.ts.map +1 -1
  274. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +2 -2
  275. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  276. package/libs/feature/dataviz/src/lib/feature-dataviz.module.d.ts +10 -8
  277. package/libs/feature/dataviz/src/lib/feature-dataviz.module.d.ts.map +1 -1
  278. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts +13 -20
  279. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts.map +1 -1
  280. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +6 -6
  281. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  282. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +3 -3
  283. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  284. package/libs/feature/editor/src/index.d.ts +1 -0
  285. package/libs/feature/editor/src/index.d.ts.map +1 -1
  286. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +6 -0
  287. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  288. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +5 -0
  289. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  290. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +5 -4
  291. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  292. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +8 -0
  293. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
  294. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +4 -3
  295. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  296. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +4 -8
  297. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  298. package/libs/feature/editor/src/lib/components/contact-card/contact-card.component.d.ts +8 -0
  299. package/libs/feature/editor/src/lib/components/contact-card/contact-card.component.d.ts.map +1 -0
  300. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts +33 -0
  301. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts.map +1 -0
  302. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts +34 -0
  303. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts.map +1 -0
  304. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts +15 -0
  305. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts.map +1 -0
  306. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +16 -0
  307. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -0
  308. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.d.ts +38 -0
  309. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.d.ts.map +1 -0
  310. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts +41 -0
  311. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts.map +1 -0
  312. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.d.ts +9 -0
  313. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.d.ts.map +1 -0
  314. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts +13 -31
  315. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  316. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +6 -4
  317. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -1
  318. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts +15 -0
  319. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts.map +1 -0
  320. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts +35 -0
  321. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -0
  322. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +44 -0
  323. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -0
  324. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts +15 -0
  325. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts.map +1 -0
  326. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts +31 -0
  327. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -0
  328. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts +4 -6
  329. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -1
  330. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.d.ts +4 -3
  331. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.d.ts.map +1 -1
  332. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts +28 -0
  333. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
  334. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts +10 -16
  335. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts.map +1 -1
  336. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +5 -5
  337. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -1
  338. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +18 -20
  339. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  340. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -2
  341. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  342. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +7 -7
  343. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
  344. package/libs/feature/editor/src/lib/expressions.d.ts +1 -1
  345. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -1
  346. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +2 -1
  347. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  348. package/libs/feature/editor/src/lib/fields.config.d.ts +56 -2
  349. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  350. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +42 -0
  351. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -0
  352. package/libs/feature/editor/src/lib/models/index.d.ts +1 -0
  353. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  354. package/libs/feature/editor/src/lib/services/editor.service.d.ts +4 -3
  355. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  356. package/libs/feature/map/src/index.d.ts +1 -8
  357. package/libs/feature/map/src/index.d.ts.map +1 -1
  358. package/libs/feature/map/src/lib/+state/map.actions.d.ts +13 -39
  359. package/libs/feature/map/src/lib/+state/map.actions.d.ts.map +1 -1
  360. package/libs/feature/map/src/lib/+state/map.facade.d.ts +9 -10
  361. package/libs/feature/map/src/lib/+state/map.facade.d.ts.map +1 -1
  362. package/libs/feature/map/src/lib/+state/map.reducer.d.ts +4 -2
  363. package/libs/feature/map/src/lib/+state/map.reducer.d.ts.map +1 -1
  364. package/libs/feature/map/src/lib/+state/map.selectors.d.ts +6 -1
  365. package/libs/feature/map/src/lib/+state/map.selectors.d.ts.map +1 -1
  366. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.d.ts +1 -1
  367. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.d.ts.map +1 -1
  368. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.d.ts +8 -10
  369. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.d.ts.map +1 -1
  370. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +1 -1
  371. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -1
  372. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts +3 -3
  373. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
  374. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +2 -2
  375. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -1
  376. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts +2 -2
  377. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -1
  378. package/libs/feature/map/src/lib/constant/index.d.ts +0 -1
  379. package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
  380. package/libs/feature/map/src/lib/feature-map.module.d.ts +12 -23
  381. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  382. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +7 -7
  383. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -1
  384. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts +5 -4
  385. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts.map +1 -1
  386. package/libs/feature/map/src/lib/map-state-container/map-state-container.component.d.ts +14 -0
  387. package/libs/feature/map/src/lib/map-state-container/map-state-container.component.d.ts.map +1 -0
  388. package/libs/feature/map/src/lib/style/map-style.fixtures.d.ts +2 -2
  389. package/libs/feature/map/src/lib/style/map-style.fixtures.d.ts.map +1 -1
  390. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +0 -30
  391. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  392. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +3 -3
  393. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  394. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +4 -1
  395. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  396. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts +4 -1
  397. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts.map +1 -1
  398. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +4 -1
  399. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  400. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts +10 -7
  401. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts.map +1 -1
  402. package/libs/feature/record/src/lib/feature-record.module.d.ts +13 -10
  403. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  404. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +14 -20
  405. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  406. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +7 -7
  407. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  408. package/libs/feature/router/src/lib/default/constants.d.ts +1 -0
  409. package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
  410. package/libs/feature/router/src/lib/default/router.config.d.ts +1 -0
  411. package/libs/feature/router/src/lib/default/router.config.d.ts.map +1 -1
  412. package/libs/feature/router/src/lib/default/router.service.d.ts +1 -0
  413. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  414. package/libs/feature/router/src/lib/default/state/router.facade.d.ts +1 -0
  415. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  416. package/libs/feature/search/src/index.d.ts +1 -1
  417. package/libs/feature/search/src/index.d.ts.map +1 -1
  418. package/libs/feature/search/src/lib/feature-search.module.d.ts +2 -1
  419. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  420. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  421. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +37 -0
  422. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -0
  423. package/libs/feature/search/src/lib/state/search.facade.d.ts +2 -0
  424. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  425. package/libs/feature/search/src/lib/state/selectors.d.ts +1 -0
  426. package/libs/feature/search/src/lib/state/selectors.d.ts.map +1 -1
  427. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  428. package/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.d.ts +2 -2
  429. package/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.d.ts +1 -1
  430. package/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.d.ts.map +1 -1
  431. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts +9 -9
  432. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts.map +1 -1
  433. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts +1 -2
  434. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts.map +1 -1
  435. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts +2 -2
  436. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts.map +1 -1
  437. package/libs/ui/elements/src/index.d.ts +2 -2
  438. package/libs/ui/elements/src/index.d.ts.map +1 -1
  439. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts +18 -0
  440. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts.map +1 -0
  441. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts +2 -2
  442. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts.map +1 -1
  443. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +7 -7
  444. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  445. package/libs/ui/elements/src/lib/error/error.component.d.ts +3 -1
  446. package/libs/ui/elements/src/lib/error/error.component.d.ts.map +1 -1
  447. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts +2 -2
  448. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +1 -1
  449. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts +2 -2
  450. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts.map +1 -1
  451. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +0 -3
  452. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  453. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +1 -1
  454. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +5 -1
  455. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
  456. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +17 -15
  457. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  458. package/libs/ui/inputs/src/index.d.ts +5 -0
  459. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  460. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +15 -4
  461. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  462. package/libs/ui/inputs/src/lib/badge/badge.component.d.ts.map +1 -1
  463. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  464. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  465. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -1
  466. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts.map +1 -1
  467. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +5 -3
  468. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -1
  469. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts +24 -0
  470. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -0
  471. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts +4 -5
  472. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +1 -1
  473. package/libs/ui/inputs/src/lib/search-input/search-input.component.d.ts +1 -1
  474. package/libs/ui/inputs/src/lib/search-input/search-input.component.d.ts.map +1 -1
  475. package/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.d.ts +17 -0
  476. package/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.d.ts.map +1 -0
  477. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +0 -4
  478. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  479. package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts +2 -4
  480. package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts.map +1 -1
  481. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +33 -36
  482. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  483. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +21 -0
  484. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -0
  485. package/libs/ui/layout/src/index.d.ts +3 -0
  486. package/libs/ui/layout/src/index.d.ts.map +1 -1
  487. package/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.d.ts +2 -2
  488. package/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.d.ts.map +1 -1
  489. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
  490. package/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.d.ts +2 -2
  491. package/libs/ui/layout/src/lib/max-lines/max-lines.component.d.ts.map +1 -0
  492. package/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.d.ts +20 -0
  493. package/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.d.ts.map +1 -0
  494. package/libs/ui/layout/src/lib/sortable-list/sortable-list.component.d.ts +14 -0
  495. package/libs/ui/layout/src/lib/sortable-list/sortable-list.component.d.ts.map +1 -0
  496. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  497. package/libs/ui/map/src/index.d.ts +3 -2
  498. package/libs/ui/map/src/index.d.ts.map +1 -1
  499. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts +3 -4
  500. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts.map +1 -1
  501. package/libs/ui/map/src/lib/components/map-container/map-container.component.d.ts +37 -0
  502. package/libs/ui/map/src/lib/components/map-container/map-container.component.d.ts.map +1 -0
  503. package/libs/ui/map/src/lib/components/map-container/map-settings.token.d.ts +18 -0
  504. package/libs/ui/map/src/lib/components/map-container/map-settings.token.d.ts.map +1 -0
  505. package/libs/ui/map/src/lib/map-utils.d.ts +7 -0
  506. package/libs/ui/map/src/lib/map-utils.d.ts.map +1 -0
  507. package/libs/ui/search/src/index.d.ts +1 -0
  508. package/libs/ui/search/src/index.d.ts.map +1 -1
  509. package/libs/ui/search/src/lib/facets/fixtures/aggregations-model-response.d.ts +3 -3
  510. package/libs/ui/search/src/lib/facets/fixtures/aggregations-model-response.d.ts.map +1 -1
  511. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +20 -0
  512. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -0
  513. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +36 -0
  514. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
  515. package/libs/ui/widgets/src/index.d.ts +1 -0
  516. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  517. package/libs/ui/widgets/src/lib/popover/popover.component.d.ts +19 -0
  518. package/libs/ui/widgets/src/lib/popover/popover.component.d.ts.map +1 -0
  519. package/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.d.ts +1 -1
  520. package/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.d.ts.map +1 -1
  521. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +10 -11
  522. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  523. package/libs/util/app-config/src/index.d.ts +1 -0
  524. package/libs/util/app-config/src/index.d.ts.map +1 -1
  525. package/libs/util/app-config/src/lib/fixtures.d.ts +8 -8
  526. package/libs/util/app-config/src/lib/fixtures.d.ts.map +1 -1
  527. package/libs/util/app-config/src/lib/map-layers.d.ts +4 -0
  528. package/libs/util/app-config/src/lib/map-layers.d.ts.map +1 -0
  529. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts +3 -3
  530. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  531. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -6
  532. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  533. package/libs/util/shared/src/lib/services/theme.service.d.ts.map +1 -1
  534. package/libs/util/shared/src/lib/utils/bytes-convert.d.ts +2 -1
  535. package/libs/util/shared/src/lib/utils/bytes-convert.d.ts.map +1 -1
  536. package/package.json +5 -3
  537. package/src/libs/api/metadata-converter/src/index.ts +3 -0
  538. package/src/libs/api/metadata-converter/src/lib/common/license.ts +66 -0
  539. package/src/libs/api/metadata-converter/src/lib/common/url.ts +15 -0
  540. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +378 -0
  541. package/src/libs/api/metadata-converter/src/lib/dcat-ap/index.ts +1 -0
  542. package/src/libs/api/metadata-converter/src/lib/dcat-ap/namespaces.ts +17 -0
  543. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +370 -0
  544. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/graph-utils.ts +95 -0
  545. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/individual-name.ts +20 -0
  546. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/keyword.mapper.ts +16 -0
  547. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/role.mapper.ts +48 -0
  548. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/serialize-to-xml.ts +97 -0
  549. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/status.mapper.ts +19 -0
  550. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/update-frequency.mapper.ts +67 -0
  551. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/uri.ts +1 -0
  552. package/src/libs/api/metadata-converter/src/lib/dcat-ap/write-parts.ts +68 -0
  553. package/src/libs/api/metadata-converter/src/lib/find-converter.ts +13 -0
  554. package/src/libs/api/metadata-converter/src/lib/fixtures/eu.dcat-ap.records.ts +272 -0
  555. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +7 -2
  556. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +6 -2
  557. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +38 -13
  558. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +6 -2
  559. package/src/libs/api/metadata-converter/src/lib/fixtures/opendataswiss.records.ts +110 -0
  560. package/src/libs/api/metadata-converter/src/lib/fixtures/sextant.records.ts +85 -0
  561. package/src/libs/api/metadata-converter/src/lib/fixtures/vlaanderen.dcat-ap.records.ts +73 -0
  562. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +1 -0
  563. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +18 -16
  564. package/src/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.ts +2 -6
  565. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  566. package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +5 -6
  567. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +12 -4
  568. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +21 -43
  569. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +11 -16
  570. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +85 -17
  571. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/geometry.ts +39 -0
  572. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +203 -157
  573. package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +50 -7
  574. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +176 -58
  575. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +1 -0
  576. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +3 -1
  577. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +13 -2
  578. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +116 -30
  579. package/src/libs/common/domain/src/lib/model/record/contact.model.ts +29 -1
  580. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +10 -8
  581. package/src/libs/common/domain/src/lib/model/record/organization.model.ts +1 -0
  582. package/src/libs/common/domain/src/lib/model/user/user.model.ts +1 -1
  583. package/src/libs/common/domain/src/lib/platform.service.interface.ts +35 -1
  584. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +35 -0
  585. package/src/libs/common/fixtures/src/index.ts +6 -1
  586. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +156 -0
  587. package/src/libs/common/fixtures/src/lib/editor/index.ts +1 -0
  588. package/src/libs/common/fixtures/src/lib/elasticsearch/{aggregations-request.ts → aggregations-request.fixtures.ts} +1 -3
  589. package/src/libs/common/fixtures/src/lib/elasticsearch/{aggregations-response.ts → aggregations-response.fixtures.ts} +6 -8
  590. package/src/libs/common/fixtures/src/lib/elasticsearch/{full-response.ts → full-response.fixtures.ts} +1 -3
  591. package/src/libs/common/fixtures/src/lib/elasticsearch/index.ts +5 -5
  592. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +1 -3
  593. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata.fixtures.ts +1739 -1742
  594. package/src/libs/common/fixtures/src/lib/elasticsearch/{search-requests.ts → search-requests.fixtures.ts} +1 -3
  595. package/src/libs/common/fixtures/src/lib/elasticsearch/{search-responses.ts → search-responses.fixtures.ts} +4 -6
  596. package/src/libs/common/fixtures/src/lib/geojson.fixtures.ts +57178 -57195
  597. package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +2 -4
  598. package/src/libs/common/fixtures/src/lib/individual.fixtures.ts +61 -0
  599. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +233 -164
  600. package/src/libs/common/fixtures/src/lib/map/index.ts +1 -0
  601. package/src/libs/common/fixtures/src/lib/map/map-context.fixtures.ts +53 -0
  602. package/src/libs/common/fixtures/src/lib/ol-feature.fixtures.ts +10 -0
  603. package/src/libs/common/fixtures/src/lib/organisations.fixture.ts +65 -3
  604. package/src/libs/common/fixtures/src/lib/record-link.fixtures.ts +9 -7
  605. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +17 -9
  606. package/src/libs/common/fixtures/src/lib/repository.fixtures.ts +4 -4
  607. package/src/libs/common/fixtures/src/lib/search/aggregations.ts +2 -3
  608. package/src/libs/common/fixtures/src/lib/user-feedbacks.fixtures.ts +14 -15
  609. package/src/libs/common/fixtures/src/lib/user.fixtures.ts +45 -15
  610. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +4 -0
  611. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +2 -0
  612. package/src/libs/data-access/gn4/src/fixtures/site.fixtures.ts +4 -4
  613. package/src/libs/data-access/gn4/src/fixtures/ui.fixtures.ts +2 -2
  614. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +1 -5
  615. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  616. package/src/libs/data-access/gn4/src/spec.yaml +0 -8
  617. package/src/libs/feature/catalog/src/index.ts +1 -0
  618. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +5 -2
  619. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.html +1 -1
  620. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +2 -2
  621. package/src/libs/feature/catalog/src/lib/organization-url.token.ts +6 -0
  622. package/src/libs/feature/catalog/src/lib/records/records.service.ts +6 -8
  623. package/src/libs/feature/catalog/src/lib/sources/sources.fixture.ts +1 -1
  624. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +3 -3
  625. package/src/libs/feature/dataviz/src/lib/feature-dataviz.module.ts +8 -3
  626. package/src/libs/feature/dataviz/src/lib/figure/figure.fixtures.ts +2 -2
  627. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.html +5 -2
  628. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.ts +38 -78
  629. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +6 -6
  630. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +4 -4
  631. package/src/libs/feature/editor/src/index.ts +1 -0
  632. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +7 -0
  633. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +28 -6
  634. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +13 -1
  635. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +11 -0
  636. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +11 -5
  637. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +22 -8
  638. package/src/libs/feature/editor/src/lib/components/contact-card/contact-card.component.html +15 -0
  639. package/src/libs/feature/editor/src/lib/components/contact-card/contact-card.component.ts +18 -0
  640. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +26 -0
  641. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.ts +90 -0
  642. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.html +47 -0
  643. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +132 -0
  644. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.html +35 -0
  645. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +79 -0
  646. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +31 -0
  647. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +82 -0
  648. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.html +40 -0
  649. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.ts +170 -0
  650. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.css +4 -0
  651. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +66 -0
  652. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +210 -0
  653. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.html +4 -0
  654. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.ts +21 -0
  655. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.html +8 -18
  656. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +40 -81
  657. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.css +8 -0
  658. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +13 -5
  659. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.html +1 -0
  660. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.ts +86 -0
  661. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.html +43 -0
  662. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +185 -0
  663. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.css +0 -0
  664. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +71 -0
  665. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +241 -0
  666. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.css +0 -0
  667. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.html +6 -0
  668. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.ts +48 -0
  669. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.css +0 -0
  670. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.html +11 -0
  671. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +122 -0
  672. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.html +15 -8
  673. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +11 -14
  674. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.html +5 -3
  675. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.ts +11 -4
  676. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +20 -1
  677. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +212 -1
  678. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.css +4 -0
  679. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.html +31 -4
  680. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.ts +43 -86
  681. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.css +4 -0
  682. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.html +16 -14
  683. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +17 -15
  684. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +127 -70
  685. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +56 -44
  686. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -2
  687. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +52 -9
  688. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +20 -7
  689. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.html +2 -6
  690. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +1 -1
  691. package/src/libs/feature/editor/src/lib/expressions.ts +1 -1
  692. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +2 -1
  693. package/src/libs/feature/editor/src/lib/fields.config.ts +256 -57
  694. package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +65 -0
  695. package/src/libs/feature/editor/src/lib/models/index.ts +1 -0
  696. package/src/libs/feature/editor/src/lib/services/editor.service.ts +22 -7
  697. package/src/libs/feature/map/src/index.ts +1 -8
  698. package/src/libs/feature/map/src/lib/+state/map.actions.ts +10 -25
  699. package/src/libs/feature/map/src/lib/+state/map.facade.ts +11 -15
  700. package/src/libs/feature/map/src/lib/+state/map.reducer.ts +16 -53
  701. package/src/libs/feature/map/src/lib/+state/map.selectors.ts +7 -2
  702. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.ts +3 -0
  703. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.ts +23 -22
  704. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +22 -11
  705. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.html +1 -1
  706. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +21 -19
  707. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +1 -1
  708. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +17 -10
  709. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.html +1 -1
  710. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +17 -10
  711. package/src/libs/feature/map/src/lib/constant/index.ts +0 -1
  712. package/src/libs/feature/map/src/lib/feature-map.module.ts +2 -41
  713. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +38 -20
  714. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +2 -2
  715. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.ts +39 -6
  716. package/src/libs/feature/map/src/lib/map-state-container/map-state-container.component.css +0 -0
  717. package/src/libs/feature/map/src/lib/map-state-container/map-state-container.component.html +4 -0
  718. package/src/libs/feature/map/src/lib/map-state-container/map-state-container.component.ts +29 -0
  719. package/src/libs/feature/map/src/lib/style/map-style.fixtures.ts +29 -27
  720. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -232
  721. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +3 -3
  722. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +36 -19
  723. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +6 -2
  724. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +11 -0
  725. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +59 -12
  726. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.ts +29 -20
  727. package/src/libs/feature/record/src/lib/feature-record.module.ts +14 -5
  728. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +4 -4
  729. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +45 -72
  730. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +47 -32
  731. package/src/libs/feature/router/src/lib/default/constants.ts +1 -0
  732. package/src/libs/feature/router/src/lib/default/router.config.ts +1 -0
  733. package/src/libs/feature/router/src/lib/default/router.service.ts +13 -1
  734. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +8 -0
  735. package/src/libs/feature/search/src/index.ts +1 -1
  736. package/src/libs/feature/search/src/lib/feature-search.module.ts +2 -1
  737. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +2 -1
  738. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +2 -2
  739. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.css +0 -0
  740. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +15 -0
  741. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +114 -0
  742. package/src/libs/feature/search/src/lib/state/fixtures/search-state.fixtures.ts +2 -2
  743. package/src/libs/feature/search/src/lib/state/search.facade.ts +11 -0
  744. package/src/libs/feature/search/src/lib/state/selectors.ts +7 -0
  745. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +16 -2
  746. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.html +8 -6
  747. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.ts +2 -2
  748. package/src/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.ts +8 -1
  749. package/src/libs/ui/catalog/src/lib/ui-catalog.module.ts +2 -3
  750. package/src/libs/ui/dataviz/src/lib/chart/chart.fixtures.ts +2 -2
  751. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +11 -3
  752. package/src/libs/ui/dataviz/src/lib/figure/figure.component.ts +3 -7
  753. package/src/libs/ui/dataviz/src/lib/table/table.fixtures.ts +2 -2
  754. package/src/libs/ui/elements/src/index.ts +2 -2
  755. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +29 -29
  756. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.css +0 -0
  757. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.html +12 -0
  758. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.ts +37 -0
  759. package/src/libs/ui/elements/src/lib/download-item/download-item.component.ts +4 -4
  760. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +7 -7
  761. package/src/libs/ui/elements/src/lib/error/error.component.html +30 -6
  762. package/src/libs/ui/elements/src/lib/error/error.component.ts +2 -0
  763. package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +3 -3
  764. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +13 -17
  765. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +1 -1
  766. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +7 -1
  767. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +12 -8
  768. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +14 -20
  769. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +0 -10
  770. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.html +1 -1
  771. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +2 -2
  772. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
  773. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +22 -1
  774. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +10 -6
  775. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.html +1 -1
  776. package/src/libs/ui/inputs/src/index.ts +5 -0
  777. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.css +25 -19
  778. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +33 -15
  779. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +97 -30
  780. package/src/libs/ui/inputs/src/lib/badge/badge.component.html +11 -3
  781. package/src/libs/ui/inputs/src/lib/badge/badge.component.ts +2 -1
  782. package/src/libs/ui/inputs/src/lib/button/button.component.ts +15 -1
  783. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.css +7 -2
  784. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.html +14 -6
  785. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +7 -1
  786. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.css +7 -2
  787. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.html +28 -23
  788. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.ts +7 -1
  789. package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +40 -26
  790. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.css +4 -0
  791. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.html +89 -0
  792. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +92 -0
  793. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.css +4 -0
  794. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.html +76 -68
  795. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.ts +17 -14
  796. package/src/libs/ui/inputs/src/lib/search-input/search-input.component.ts +5 -1
  797. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +32 -0
  798. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +14 -0
  799. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +39 -0
  800. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.html +3 -2
  801. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +3 -28
  802. package/src/libs/ui/inputs/src/lib/text-input/text-input.component.html +4 -3
  803. package/src/libs/ui/inputs/src/lib/text-input/text-input.component.ts +4 -16
  804. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -9
  805. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.css +9 -0
  806. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +41 -0
  807. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +56 -0
  808. package/src/libs/ui/layout/src/index.ts +3 -0
  809. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.html +8 -3
  810. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +4 -3
  811. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +1 -1
  812. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +3 -2
  813. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.css +0 -0
  814. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.html +1 -0
  815. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.ts +9 -5
  816. package/src/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.css +0 -0
  817. package/src/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.html +15 -0
  818. package/src/libs/ui/layout/src/lib/modal-dialog/modal-dialog.component.ts +44 -0
  819. package/src/libs/ui/layout/src/lib/sortable-list/sortable-list.component.html +37 -0
  820. package/src/libs/ui/{elements → layout}/src/lib/sortable-list/sortable-list.component.ts +15 -18
  821. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -1
  822. package/src/libs/ui/map/src/index.ts +3 -2
  823. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.html +1 -1
  824. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.ts +8 -5
  825. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.css +0 -0
  826. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +203 -0
  827. package/src/libs/ui/map/src/lib/components/map-container/map-settings.token.ts +23 -0
  828. package/src/libs/ui/map/src/lib/map-utils.ts +54 -0
  829. package/src/libs/ui/search/src/index.ts +1 -0
  830. package/src/libs/ui/search/src/lib/facets/fixtures/aggregations-model-response.ts +7 -6
  831. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.css +0 -0
  832. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +26 -0
  833. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +74 -0
  834. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +0 -0
  835. package/src/libs/{feature → ui}/search/src/lib/results-table/results-table.component.html +41 -16
  836. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +151 -0
  837. package/src/libs/ui/widgets/src/index.ts +1 -0
  838. package/src/libs/ui/widgets/src/lib/popover/popover.component.css +0 -0
  839. package/src/libs/ui/widgets/src/lib/popover/popover.component.html +3 -0
  840. package/src/libs/ui/widgets/src/lib/popover/popover.component.ts +85 -0
  841. package/src/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.ts +4 -0
  842. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -3
  843. package/src/libs/util/app-config/src/index.ts +1 -0
  844. package/src/libs/util/app-config/src/lib/fixtures.ts +9 -9
  845. package/src/libs/util/app-config/src/lib/map-layers.ts +31 -0
  846. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -3
  847. package/src/libs/util/shared/src/lib/links/link-utils.ts +6 -6
  848. package/src/libs/util/shared/src/lib/services/theme.service.ts +1 -0
  849. package/src/libs/util/shared/src/lib/utils/bytes-convert.ts +4 -1
  850. package/tailwind.base.config.js +1 -0
  851. package/tailwind.base.css +53 -8
  852. package/translations/de.json +175 -38
  853. package/translations/en.json +176 -39
  854. package/translations/es.json +146 -9
  855. package/translations/fr.json +207 -70
  856. package/translations/it.json +149 -12
  857. package/translations/nl.json +146 -9
  858. package/translations/pt.json +146 -9
  859. package/translations/sk.json +148 -11
  860. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.mjs +0 -15
  861. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.mjs +0 -17
  862. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.mjs +0 -17
  863. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +0 -2
  864. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +0 -2
  865. package/esm2022/libs/feature/map/src/lib/+state/map.effects.mjs +0 -15
  866. package/esm2022/libs/feature/map/src/lib/+state/map.models.mjs +0 -2
  867. package/esm2022/libs/feature/map/src/lib/constant/map-options.mjs +0 -8
  868. package/esm2022/libs/feature/map/src/lib/constant/style.constant.mjs +0 -17
  869. package/esm2022/libs/feature/map/src/lib/feature-info/feature-info.service.mjs +0 -38
  870. package/esm2022/libs/feature/map/src/lib/manager/map-instance.directive.mjs +0 -19
  871. package/esm2022/libs/feature/map/src/lib/manager/map-manager.service.mjs +0 -19
  872. package/esm2022/libs/feature/map/src/lib/map-container/map-container.component.mjs +0 -27
  873. package/esm2022/libs/feature/map/src/lib/map-context/component/map-context.component.mjs +0 -46
  874. package/esm2022/libs/feature/map/src/lib/map-context/map-context.model.mjs +0 -10
  875. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +0 -289
  876. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +0 -136
  877. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +0 -69
  878. package/esm2022/libs/ui/elements/src/lib/sortable-list/sortable-list.component.mjs +0 -43
  879. package/esm2022/libs/ui/map/src/lib/components/map/map.component.mjs +0 -40
  880. package/esm2022/libs/ui/map/src/lib/ui-map.module.mjs +0 -33
  881. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts +0 -8
  882. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts.map +0 -1
  883. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.d.ts +0 -8
  884. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.d.ts.map +0 -1
  885. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.d.ts +0 -8
  886. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.d.ts.map +0 -1
  887. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts +0 -26
  888. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +0 -1
  889. package/libs/feature/editor/src/lib/models/fields.model.d.ts +0 -15
  890. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +0 -1
  891. package/libs/feature/map/src/lib/+state/map.effects.d.ts +0 -9
  892. package/libs/feature/map/src/lib/+state/map.effects.d.ts.map +0 -1
  893. package/libs/feature/map/src/lib/+state/map.models.d.ts +0 -9
  894. package/libs/feature/map/src/lib/+state/map.models.d.ts.map +0 -1
  895. package/libs/feature/map/src/lib/constant/map-options.d.ts +0 -9
  896. package/libs/feature/map/src/lib/constant/map-options.d.ts.map +0 -1
  897. package/libs/feature/map/src/lib/constant/style.constant.d.ts +0 -4
  898. package/libs/feature/map/src/lib/constant/style.constant.d.ts.map +0 -1
  899. package/libs/feature/map/src/lib/feature-info/feature-info.service.d.ts +0 -16
  900. package/libs/feature/map/src/lib/feature-info/feature-info.service.d.ts.map +0 -1
  901. package/libs/feature/map/src/lib/manager/map-instance.directive.d.ts +0 -9
  902. package/libs/feature/map/src/lib/manager/map-instance.directive.d.ts.map +0 -1
  903. package/libs/feature/map/src/lib/manager/map-manager.service.d.ts +0 -11
  904. package/libs/feature/map/src/lib/manager/map-manager.service.d.ts.map +0 -1
  905. package/libs/feature/map/src/lib/map-container/map-container.component.d.ts +0 -12
  906. package/libs/feature/map/src/lib/map-container/map-container.component.d.ts.map +0 -1
  907. package/libs/feature/map/src/lib/map-context/component/map-context.component.d.ts +0 -26
  908. package/libs/feature/map/src/lib/map-context/component/map-context.component.d.ts.map +0 -1
  909. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +0 -77
  910. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +0 -1
  911. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +0 -26
  912. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +0 -1
  913. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +0 -36
  914. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +0 -1
  915. package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +0 -1
  916. package/libs/ui/elements/src/lib/sortable-list/sortable-list.component.d.ts +0 -22
  917. package/libs/ui/elements/src/lib/sortable-list/sortable-list.component.d.ts.map +0 -1
  918. package/libs/ui/map/src/lib/components/map/map.component.d.ts +0 -19
  919. package/libs/ui/map/src/lib/components/map/map.component.d.ts.map +0 -1
  920. package/libs/ui/map/src/lib/ui-map.module.d.ts +0 -13
  921. package/libs/ui/map/src/lib/ui-map.module.d.ts.map +0 -1
  922. package/src/libs/common/fixtures/src/lib/ol-feature.fixture.ts +0 -7
  923. package/src/libs/common/fixtures/src/lib/utils/freeze.ts +0 -10
  924. package/src/libs/common/fixtures/src/lib/utils/index.ts +0 -1
  925. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.html +0 -8
  926. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.ts +0 -70
  927. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.html +0 -4
  928. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.ts +0 -15
  929. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.html +0 -7
  930. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.ts +0 -16
  931. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.html +0 -13
  932. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.ts +0 -16
  933. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts +0 -43
  934. package/src/libs/feature/editor/src/lib/models/fields.model.ts +0 -29
  935. package/src/libs/feature/map/src/lib/+state/map.effects.ts +0 -7
  936. package/src/libs/feature/map/src/lib/+state/map.models.ts +0 -9
  937. package/src/libs/feature/map/src/lib/constant/map-options.ts +0 -17
  938. package/src/libs/feature/map/src/lib/feature-info/feature-info.service.ts +0 -42
  939. package/src/libs/feature/map/src/lib/manager/map-instance.directive.ts +0 -10
  940. package/src/libs/feature/map/src/lib/manager/map-manager.service.ts +0 -13
  941. package/src/libs/feature/map/src/lib/map-container/map-container.component.html +0 -1
  942. package/src/libs/feature/map/src/lib/map-container/map-container.component.ts +0 -26
  943. package/src/libs/feature/map/src/lib/map-context/component/map-context.component.html +0 -1
  944. package/src/libs/feature/map/src/lib/map-context/component/map-context.component.ts +0 -57
  945. package/src/libs/feature/map/src/lib/map-context/map-context.fixtures.ts +0 -51
  946. package/src/libs/feature/map/src/lib/map-context/map-context.model.ts +0 -95
  947. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +0 -318
  948. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +0 -171
  949. package/src/libs/ui/elements/src/lib/sortable-list/sortable-list.component.html +0 -36
  950. package/src/libs/ui/map/src/lib/components/map/map.component.ts +0 -57
  951. package/src/libs/ui/map/src/lib/ui-map.module.ts +0 -19
  952. /package/src/libs/feature/editor/src/lib/components/{overview-upload/overview-upload.component.css → contact-card/contact-card.component.css} +0 -0
  953. /package/src/libs/feature/editor/src/lib/components/{record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.css → generic-keywords/generic-keywords.component.css} +0 -0
  954. /package/src/libs/feature/editor/src/lib/components/{record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.css → import-record/import-record.component.css} +0 -0
  955. /package/src/libs/feature/editor/src/lib/components/{record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.css → online-resource-card/online-resource-card.component.css} +0 -0
  956. /package/src/libs/feature/{map/src/lib/map-container/map-container.component.css → editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.css} +0 -0
  957. /package/src/libs/feature/{map/src/lib/map-context/component/map-context.component.css → editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.css} +0 -0
  958. /package/src/libs/feature/{search/src/lib/results-table/results-table.component.css → editor/src/lib/components/record-form/form-field/form-field-date-updated/form-field-date-updated.component.css} +0 -0
  959. /package/src/libs/{ui/elements/src/lib/max-lines/max-lines.component.css → feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.css} +0 -0
  960. /package/src/libs/{ui/map/src/lib/components/map/map.component.css → feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.css} +0 -0
  961. /package/src/libs/ui/{elements → layout}/src/lib/sortable-list/sortable-list.component.css +0 -0
  962. /package/src/libs/ui/map/src/lib/components/{map/map.component.html → map-container/map-container.component.html} +0 -0
@@ -28,7 +28,8 @@ export function createDocument(rootEl) {
28
28
  if (rootEl.attributes[`xmlns:${namespace}`])
29
29
  return;
30
30
  if (!NAMESPACES[namespace]) {
31
- throw new Error(`No known URI for namespace ${namespace}`);
31
+ // the namespace is unknown but it might still be declared correctly: ignore it
32
+ return;
32
33
  }
33
34
  rootEl.attributes[`xmlns:${namespace}`] = NAMESPACES[namespace];
34
35
  }
@@ -92,6 +93,9 @@ export function allChildrenElement(element) {
92
93
  ...element.children.filter((el) => el instanceof XmlElement),
93
94
  ];
94
95
  }
96
+ export function firstChildElement(element) {
97
+ return allChildrenElement(element)[0] ?? null;
98
+ }
95
99
  /**
96
100
  * Will return all matching elements nested according to the given
97
101
  * names (similar to a path), starting form the input element;
@@ -142,10 +146,12 @@ export function findParent(parentName) {
142
146
  }
143
147
  export function readText() {
144
148
  return (el) => {
145
- const textNode = el && Array.isArray(el.children)
149
+ if (!el)
150
+ return null;
151
+ const textNode = Array.isArray(el.children)
146
152
  ? el.children.find((node) => node.type === 'text')
147
153
  : null;
148
- return textNode ? textNode.text : null;
154
+ return textNode ? textNode.text : '';
149
155
  };
150
156
  }
151
157
  export function readAttribute(attrName) {
@@ -193,7 +199,7 @@ function extractNamespace(name) {
193
199
  const colon = name.indexOf(':');
194
200
  return colon > -1 ? name.substring(0, colon) : null;
195
201
  }
196
- const NAMESPACES = {
202
+ export const NAMESPACES = {
197
203
  gmd: 'http://www.isotc211.org/2005/gmd',
198
204
  gco: 'http://www.isotc211.org/2005/gco',
199
205
  gfc: 'http://www.isotc211.org/2005/gfc',
@@ -228,6 +234,22 @@ const NAMESPACES = {
228
234
  cat: 'http://standards.iso.org/iso/19115/-3/cat/1.0',
229
235
  lan: 'http://standards.iso.org/iso/19115/-3/lan/1.0',
230
236
  mrc: 'http://standards.iso.org/iso/19115/-3/mrc/2.0',
237
+ rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
238
+ rdfs: 'http://www.w3.org/2000/01/rdf-schema#',
239
+ foaf: 'http://xmlns.com/foaf/0.1/',
240
+ xsd: 'http://www.w3.org/2001/XMLSchema#',
241
+ dcat: 'http://www.w3.org/ns/dcat#',
242
+ dct: 'http://purl.org/dc/terms/',
243
+ skos: 'http://www.w3.org/2004/02/skos/core#',
244
+ schema_org: 'http://schema.org/',
245
+ spdx: 'https://spdx.org/rdf/terms/#',
246
+ adms: 'http://www.w3.org/ns/adms#',
247
+ dqv: 'http://www.w3.org/ns/dqv#',
248
+ owl: 'http://www.w3.org/2002/07/owl#',
249
+ vcard: 'http://www.w3.org/2006/vcard/ns#',
250
+ time: 'http://www.w3.org/2006/time#',
251
+ locn: 'http://www.w3.org/ns/locn#',
252
+ mdcat: 'https://data.vlaanderen.be/ns/metadata-dcat#',
231
253
  };
232
254
  /**
233
255
  * @param name Full name with namespace, e.g.: gmd:MD_Metadata
@@ -250,10 +272,12 @@ function getTreeRoot(element) {
250
272
  }
251
273
  // stays on the parent element
252
274
  // if the given elements are part of a subtree, will add the root of subtree
275
+ // will filter out falsy elements
253
276
  export function appendChildren(...childrenFns) {
254
277
  return (element) => {
255
278
  if (!element)
256
279
  return null;
280
+ childrenFns = childrenFns.filter((fn) => fn);
257
281
  element.children.push(...childrenFns.map((fn) => fn()).map(getTreeRoot));
258
282
  element.children.forEach((el) => (el.parent = element));
259
283
  return element;
@@ -359,4 +383,19 @@ export function renameElements(rootElement, replaceMap) {
359
383
  doReplace(rootElement);
360
384
  return rootElement;
361
385
  }
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYy9saWIveG1sLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBRVIsV0FBVyxFQUNYLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFM0QsTUFBTSxPQUFPLGFBQWMsU0FBUSxLQUFLO0lBQ3RDLFlBQVksT0FBTztRQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEIsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQWlCO0lBQzlDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQTtJQUNkLElBQUk7UUFDRixHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQzFCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixNQUFNLElBQUksYUFBYSxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQzVEO0lBQ0QsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFrQjtJQUMvQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFBO0lBRTNDLFNBQVMsd0JBQXdCLENBQUMsSUFBWTtRQUM1QyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QyxJQUFJLFNBQVMsS0FBSyxPQUFPLElBQUks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QUFJLENBQUMsQ0FDdkMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUE7U0FDbkM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7U0FDcEM7SUFDSCxDQUFDO0lBQ0QsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3RCLE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBwYXJzZVhtbCxcbiAgWG1sQ29tbWVudCxcbiAgWG1sRG9jdW1lbnQsXG4gIFhtbEVsZW1lbnQsXG4gIFhtbFRleHQsXG59IGZyb20gJ0ByZ3JvdmUvcGFyc2UteG1sJ1xuaW1wb3J0IHsgQ2hhaW5hYmxlRnVuY3Rpb24sIGZhbGxiYWNrIH0gZnJvbSAnLi9mdW5jdGlvbi11dGlscydcbmV4cG9ydCB7IFhtbERvY3VtZW50LCBYbWxFbGVtZW50IH0gZnJvbSAnQHJncm92ZS9wYXJzZS14bWwnXG5cbmV4cG9ydCBjbGFzcyBYbWxQYXJzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyBhIFhNTCBkb2N1bWVudCBhcyBzdHJpbmcsIHJldHVybiBhIGRvY3VtZW50IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VYbWxTdHJpbmcoeG1sU3RyaW5nOiBzdHJpbmcpOiBYbWxEb2N1bWVudCB7XG4gIGxldCBkb2MgPSBudWxsXG4gIHRyeSB7XG4gICAgZG9jID0gcGFyc2VYbWwoeG1sU3RyaW5nKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFhtbFBhcnNlRXJyb3IoZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogZSlcbiAgfVxuICByZXR1cm4gZG9jXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudChyb290RWw6IFhtbEVsZW1lbnQpOiBYbWxEb2N1bWVudCB7XG4gIHJvb3RFbC5hdHRyaWJ1dGVzID0gcm9vdEVsLmF0dHJpYnV0ZXMgfHwge31cblxuICBmdW5jdGlvbiBjb2xsZWN0TmFtZXNwYWNlRnJvbU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gZXh0cmFjdE5hbWVzcGFjZShuYW1lKVxuICAgIGlmIChuYW1lc3BhY2UgPT09ICd4bWxucycgfHwgbmFtZXNwYWNlID09PSBudWxsKSByZXR1cm5cbiAgICBpZiAocm9vdEVsLmF0dHJpYnV0ZXNbYHhtbG5zOiR7bmFtZXNwYWNlfWBdKSByZXR1cm5cbiAgICBpZiAoIU5BTUVTUEFDRVNbbmFtZXNwYWNlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBrbm93biBVUkkgZm9yIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKVxuICAgIH1cbiAgICByb290RWwuYXR0cmlidXRlc1tgeG1sbnM6JHtuYW1lc3BhY2V9YF0gPSBOQU1FU1BBQ0VTW25hbWVzcGFjZV1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROYW1lc3BhY2VzKGVsOiBYbWxFbGVtZW50KSB7XG4gICAgY29sbGVjdE5hbWVzcGFjZUZyb21OYW1lKGVsLm5hbWUpXG4gICAgZm9yIChjb25zdCBhdHRyIGluIGVsLmF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbGxlY3ROYW1lc3BhY2VGcm9tTmFtZShhdHRyKVxuICAgIH1cbiAgICBjb25zdCBjaGlsZHJlbiA9IGFsbENoaWxkcmVuRWxlbWVudChlbClcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNvbGxlY3ROYW1lc3BhY2VzKVxuICB9XG5cbiAgY29sbGVjdE5hbWVzcGFjZXMocm9vdEVsKVxuICByZXR1cm4gbmV3IFhtbERvY3VtZW50KFtyb290RWxdKVxufVxuXG4vKipcbiAqIFdpbGwgZG8gbm90aGluZyBpZiBubyBuYW1lc3BhY2UgcHJlc2VudFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBOYW1lc3BhY2UobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY29sb24gPSBuYW1lLmluZGV4T2YoJzonKVxuICByZXR1cm4gY29sb24gPiAtMSA/IG5hbWUuc3Vic3RyaW5nKGNvbG9uICsgMSkgOiBuYW1lXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2UobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY29sb24gPSBuYW1lLmluZGV4T2YoJzonKVxuICByZXR1cm4gY29sb24gPiAtMSA/IG5hbWUuc3Vic3RyaW5nKDAsIGNvbG9uKSA6ICcnXG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnROYW1lKGVsZW1lbnQ6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gZWxlbWVudC5uYW1lIHx8ICcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290RWxlbWVudCh4bWxEb2M6IFhtbERvY3VtZW50KTogWG1sRWxlbWVudCB7XG4gIHJldHVybiB4bWxEb2MuY2hpbGRyZW4uZmluZCgoZWwpID0+IGVsIGluc3RhbmNlb2YgWG1sRWxlbWVudCkgYXMgWG1sRWxlbWVudFxufVxuXG4vKipcbiAqIFdpbGwgcmV0dXJuIGFsbCBtYXRjaGluZyBlbGVtZW50cyAobmFtZXNwYWNlIHdpbGwgYmUgaWdub3JlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDaGlsZHJlbkVsZW1lbnQoXG4gIG5hbWU6IHN0cmluZyxcbiAgbmVzdGVkID0gdHJ1ZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgQXJyYXk8WG1sRWxlbWVudD4+IHtcbiAgcmV0dXJuIChlbCkgPT4ge1xuICAgIGNvbnN0IHN0cmlwcGVkTmFtZSA9IHN0cmlwTmFtZXNwYWNlKG5hbWUpXG4gICAgZnVuY3Rpb24gcmVkdWNlcihwcmV2LCBjdXJyKSB7XG4gICAgICBpZiAoc3RyaXBOYW1lc3BhY2UoZ2V0RWxlbWVudE5hbWUoY3VycikpID09PSBzdHJpcHBlZE5hbWUpIHtcbiAgICAgICAgcHJldi5wdXNoKGN1cnIpXG4gICAgICB9XG5cbiAgICAgIGlmIChuZXN0ZWQgJiYgQXJyYXkuaXNBcnJheShjdXJyLmNoaWxkcmVuKSkge1xuICAgICAgICByZXR1cm4gWy4uLnByZXYsIC4uLmN1cnIuY2hpbGRyZW4ucmVkdWNlKHJlZHVjZXIsIFtdKV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwcmV2XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsICYmIEFycmF5LmlzQXJyYXkoZWwuY2hpbGRyZW4pXG4gICAgICA/IGVsLmNoaWxkcmVuLnJlZHVjZShyZWR1Y2VyLCBbXSlcbiAgICAgIDogW11cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZENoaWxkRWxlbWVudChcbiAgbmFtZTogc3RyaW5nLFxuICBuZXN0ZWQgPSB0cnVlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWwpID0+IGZpbmRDaGlsZHJlbkVsZW1lbnQobmFtZSwgbmVzdGVkKShlbClbMF0gfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsQ2hpbGRyZW5FbGVtZW50KGVsZW1lbnQ6IFhtbEVsZW1lbnQpOiBBcnJheTxYbWxFbGVtZW50PiB7XG4gIGlmICghZWxlbWVudCB8fCAhQXJyYXkuaXNBcnJheShlbGVtZW50LmNoaWxkcmVuKSkgcmV0dXJuIFtdXG4gIHJldHVybiBbXG4gICAgLi4uZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoKGVsKSA9PiBlbCBpbnN0YW5jZW9mIFhtbEVsZW1lbnQpLFxuICBdIGFzIEFycmF5PFhtbEVsZW1lbnQ+XG59XG5cbi8qKlxuICogV2lsbCByZXR1cm4gYWxsIG1hdGNoaW5nIGVsZW1lbnRzIG5lc3RlZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuXG4gKiBuYW1lcyAoc2ltaWxhciB0byBhIHBhdGgpLCBzdGFydGluZyBmb3JtIHRoZSBpbnB1dCBlbGVtZW50O1xuICogcmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiBubyBtYXRjaGluZyBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmVzdGVkRWxlbWVudHMoXG4gIC4uLmVsZW1lbnROYW1lczogc3RyaW5nW11cbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIEFycmF5PFhtbEVsZW1lbnQ+PiB7XG4gIHJldHVybiAoZWwpID0+IHtcbiAgICBmdW5jdGlvbiBsb29rRm9yKGVsTmFtZUluZGV4OiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHN0cmlwcGVkTmFtZSA9IHN0cmlwTmFtZXNwYWNlKGVsZW1lbnROYW1lc1tlbE5hbWVJbmRleF0pXG4gICAgICByZXR1cm4gKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgaWYgKHN0cmlwTmFtZXNwYWNlKGdldEVsZW1lbnROYW1lKGN1cnIpKSAhPT0gc3RyaXBwZWROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxOYW1lSW5kZXggPT09IGVsZW1lbnROYW1lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCBjdXJyXVxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnIuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAuLi5jdXJyLmNoaWxkcmVuLnJlZHVjZShsb29rRm9yKGVsTmFtZUluZGV4ICsgMSksIFtdKSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZWwgJiYgQXJyYXkuaXNBcnJheShlbC5jaGlsZHJlbilcbiAgICAgID8gZWwuY2hpbGRyZW4ucmVkdWNlKGxvb2tGb3IoMCksIFtdKVxuICAgICAgOiBbXVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmVzdGVkRWxlbWVudChcbiAgLi4uZWxlbWVudE5hbWVzOiBzdHJpbmdbXVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsKSA9PiB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kTmVzdGVkRWxlbWVudHMoLi4uZWxlbWVudE5hbWVzKShlbClcbiAgICByZXR1cm4gZm91bmQubGVuZ3RoID8gZm91bmRbMF0gOiBudWxsXG4gIH1cbn1cblxuLy8gV2lsbCBsb29rIHRocm91Z2ggYWxsIHRoZSBwYXJlbnRzOyByZXR1cm5zIG51bGwgaWYgbm8gbWF0Y2hpbmcgcGFyZW50IGZvdW5kLlxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQYXJlbnQoXG4gIHBhcmVudE5hbWU6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsKSA9PiB7XG4gICAgbGV0IHBhcmVudDogWG1sRWxlbWVudCB8IFhtbERvY3VtZW50ID0gZWwucGFyZW50IGFzIFhtbEVsZW1lbnRcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCBpbnN0YW5jZW9mIFhtbEVsZW1lbnQpIHtcbiAgICAgIGlmIChzdHJpcE5hbWVzcGFjZShnZXRFbGVtZW50TmFtZShwYXJlbnQpKSA9PT0gc3RyaXBOYW1lc3BhY2UocGFyZW50TmFtZSkpXG4gICAgICAgIHJldHVybiBwYXJlbnRcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRleHQoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgc3RyaW5nPiB7XG4gIHJldHVybiAoZWwpID0+IHtcbiAgICBjb25zdCB0ZXh0Tm9kZSA9XG4gICAgICBlbCAmJiBBcnJheS5pc0FycmF5KGVsLmNoaWxkcmVuKVxuICAgICAgICA/IChlbC5jaGlsZHJlbi5maW5kKChub2RlKSA9PiBub2RlLnR5cGUgPT09ICd0ZXh0JykgYXMgWG1sVGV4dClcbiAgICAgICAgOiBudWxsXG4gICAgcmV0dXJuIHRleHROb2RlID8gdGV4dE5vZGUudGV4dCA6IG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEF0dHJpYnV0ZShcbiAgYXR0ck5hbWU6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgc3RyaW5nPiB7XG4gIHJldHVybiAoZWwpID0+IChlbCAmJiBlbC5hdHRyaWJ1dGVzW2F0dHJOYW1lXSkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24geG1sVG9TdHJpbmcoXG4gIGVsOiBYbWxFbGVtZW50IHwgWG1sVGV4dCB8IFhtbENvbW1lbnQgfCBYbWxEb2N1bWVudCxcbiAgaW5kZW50YXRpb25MZXZlbCA9IDBcbikge1xuICBpZiAoZWwgaW5zdGFuY2VvZiBYbWxEb2N1bWVudClcbiAgICByZXR1cm4gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiR7eG1sVG9TdHJpbmcoXG4gICAgICBlbC5jaGlsZHJlblswXVxuICAgICl9YFxuICBpZiAoZWwgaW5zdGFuY2VvZiBYbWxUZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IGVsLnRleHRcbiAgICBjb25zdCBpc0VtcHR5ID0gIXRleHQgfHwgdGV4dC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJykgPT09ICcnXG4gICAgaWYgKGlzRW1wdHkpIHJldHVybiAnJ1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICB9XG4gIGlmICghKGVsIGluc3RhbmNlb2YgWG1sRWxlbWVudCkpIHJldHVybiBgPCEtLSB1bmtub3duIC0tPmBcblxuICBjb25zdCBwYWRkaW5nID0gJyAgICAnLnJlcGVhdChpbmRlbnRhdGlvbkxldmVsKVxuICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoZWwuY2hpbGRyZW4pXG4gICAgPyBlbC5jaGlsZHJlblxuICAgICAgICAubWFwKChlbCkgPT4geG1sVG9TdHJpbmcoZWwsIGluZGVudGF0aW9uTGV2ZWwgKyAxKSlcbiAgICAgICAgLmZpbHRlcigoZWwpID0+IGVsICE9PSAnJylcbiAgICAgICAgLm1hcCgoZWxTdHJpbmcsIGluZGV4LCBhcnJheSkgPT5cbiAgICAgICAgICBpbmRleCA8IGFycmF5Lmxlbmd0aCAtIDEgPyBlbFN0cmluZy5yZXBsYWNlKC9cXG5cXHMqJC9nLCAnJykgOiBlbFN0cmluZ1xuICAgICAgICApXG4gICAgICAgIC5qb2luKCcnKVxuICAgIDogJydcbiAgY29uc3QgYXR0cnMgPSBPYmplY3Qua2V5cyhlbC5hdHRyaWJ1dGVzKS5yZWR1Y2UoXG4gICAgKHByZXYsIGN1cnIpID0+IHByZXYgKyBgICR7Y3Vycn09XCIke2VsLmF0dHJpYnV0ZXNbY3Vycl19XCJgLFxuICAgICcnXG4gIClcbiAgY29uc3QgcGFyZW50UGFkZGluZyA9ICcgICAgJy5yZXBlYXQoTWF0aC5tYXgoMCwgaW5kZW50YXRpb25MZXZlbCAtIDEpKVxuICBpZiAoY2hpbGRyZW4gPT09ICcnKSB7XG4gICAgcmV0dXJuIGBcbiR7cGFkZGluZ308JHtlbC5uYW1lfSR7YXR0cnN9Lz5cbiR7cGFyZW50UGFkZGluZ31gXG4gIH1cbiAgcmV0dXJuIGBcbiR7cGFkZGluZ308JHtlbC5uYW1lfSR7YXR0cnN9PiR7Y2hpbGRyZW59PC8ke2VsLm5hbWV9PlxuJHtwYXJlbnRQYWRkaW5nfWBcbn1cblxuLyoqXG4gKiBAcGFyYW0gbmFtZVxuICogQHJldHVybnMgbmFtZXNwYWNlLCBudWxsIGlmIG5vbmUgZm91bmRcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE5hbWVzcGFjZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgY29sb24gPSBuYW1lLmluZGV4T2YoJzonKVxuICByZXR1cm4gY29sb24gPiAtMSA/IG5hbWUuc3Vic3RyaW5nKDAsIGNvbG9uKSA6IG51bGxcbn1cblxuY29uc3QgTkFNRVNQQUNFUyA9IHtcbiAgZ21kOiAnaHR0cDovL3d3dy5pc290YzIxMS5vcmcvMjAwNS9nbWQnLFxuICBnY286ICdodHRwOi8vd3d3Lmlzb3RjMjExLm9yZy8yMDA1L2djbycsXG4gIGdmYzogJ2h0dHA6Ly93d3cuaXNvdGMyMTEub3JnLzIwMDUvZ2ZjJyxcbiAgZ21sOiAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwvMy4yJyxcbiAgeHNpOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnLFxuICBzcnY6ICdodHRwOi8vd3d3Lmlzb3RjMjExLm9yZy8yMDA1L3NydicsXG4gIGdteDogJ2h0dHA6Ly93d3cuaXNvdGMyMTEub3JnLzIwMDUvZ214JyxcbiAgZ3RzOiAnaHR0cDovL3d3dy5pc290YzIxMS5vcmcvMjAwNS9ndHMnLFxuICBnc3I6ICdodHRwOi8vd3d3Lmlzb3RjMjExLm9yZy8yMDA1L2dzcicsXG4gIGdtaTogJ2h0dHA6Ly93d3cuaXNvdGMyMTEub3JnLzIwMDUvZ21pJyxcbiAgeGxpbms6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyxcbiAgbWRiOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZGIvMi4wJyxcbiAgbWRxOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTE1Ny8tMi9tZHEvMS4wJyxcbiAgbXNyOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tc3IvMi4wJyxcbiAgbXJzOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcnMvMS4wJyxcbiAgbW1pOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tbWkvMS4wJyxcbiAgbXJsOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcmwvMi4wJyxcbiAgbWR0OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZHQvMi4wJyxcbiAgbXJkOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcmQvMS4wJyxcbiAgbWRzOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZHMvMi4wJyxcbiAgbXBjOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcGMvMS4wJyxcbiAgbWNjOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tY2MvMS4wJyxcbiAgbWFjOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tYWMvMi4wJyxcbiAgbWNvOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tY28vMS4wJyxcbiAgbWRhOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZGEvMS4wJyxcbiAgbWV4OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZXgvMS4wJyxcbiAgZ2V4OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9nZXgvMS4wJyxcbiAgZ2N4OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9nY3gvMS4wJyxcbiAgbWFzOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tYXMvMS4wJyxcbiAgbXJpOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcmkvMS4wJyxcbiAgY2l0OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9jaXQvMi4wJyxcbiAgY2F0OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9jYXQvMS4wJyxcbiAgbGFuOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9sYW4vMS4wJyxcbiAgbXJjOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcmMvMi4wJyxcbn1cblxuLyoqXG4gKiBAcGFyYW0gbmFtZSBGdWxsIG5hbWUgd2l0aCBuYW1lc3BhY2UsIGUuZy46IGdtZDpNRF9NZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudChcbiAgbmFtZTogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjx2b2lkLCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoKSA9PiBuZXcgWG1sRWxlbWVudChuYW1lLCB7fSwgW10pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRBdHRyaWJ1dGUoXG4gIG5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsZW1lbnQpID0+IHtcbiAgICBlbGVtZW50LmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZVxuICAgIHJldHVybiBlbGVtZW50XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFRyZWVSb290KGVsZW1lbnQ6IFhtbEVsZW1lbnQpOiBYbWxFbGVtZW50IHtcbiAgbGV0IHJvb3QgPSBlbGVtZW50XG4gIHdoaWxlIChyb290LnBhcmVudCBpbnN0YW5jZW9mIFhtbEVsZW1lbnQpIHtcbiAgICByb290ID0gcm9vdC5wYXJlbnRcbiAgfVxuICByZXR1cm4gcm9vdFxufVxuXG4vLyBzdGF5cyBvbiB0aGUgcGFyZW50IGVsZW1lbnRcbi8vIGlmIHRoZSBnaXZlbiBlbGVtZW50cyBhcmUgcGFydCBvZiBhIHN1YnRyZWUsIHdpbGwgYWRkIHRoZSByb290IG9mIHN1YnRyZWVcbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDaGlsZHJlbihcbiAgLi4uY2hpbGRyZW5GbnM6IEFycmF5PENoYWluYWJsZUZ1bmN0aW9uPHZvaWQsIFhtbEVsZW1lbnQ+PlxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBudWxsXG4gICAgZWxlbWVudC5jaGlsZHJlbi5wdXNoKC4uLmNoaWxkcmVuRm5zLm1hcCgoZm4pID0+IGZuKCkpLm1hcChnZXRUcmVlUm9vdCkpXG4gICAgZWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKChlbCkgPT4gKGVsLnBhcmVudCA9IGVsZW1lbnQpKVxuICAgIHJldHVybiBlbGVtZW50XG4gIH1cbn1cblxuLy8gc3dpdGNoIHRvIHRoZSB0aXAgb2YgdGhlIHN1YnRyZWVcbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDaGlsZFRyZWUoXG4gIGNoaWxkcmVuRm46IENoYWluYWJsZUZ1bmN0aW9uPHZvaWQsIFhtbEVsZW1lbnQ+XG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGxcbiAgICBjb25zdCB0cmVlVGlwID0gY2hpbGRyZW5GbigpXG4gICAgY29uc3QgdHJlZVJvb3QgPSBnZXRUcmVlUm9vdCh0cmVlVGlwKVxuICAgIGVsZW1lbnQuY2hpbGRyZW4ucHVzaCh0cmVlUm9vdClcbiAgICB0cmVlUm9vdC5wYXJlbnQgPSBlbGVtZW50XG4gICAgcmV0dXJuIHRyZWVUaXBcbiAgfVxufVxuXG4vLyBzd2l0Y2hlcyB0byB0aGUgY2hpbGQgZWxlbWVudFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKFxuICBjaGlsZE5hbWU6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBudWxsXG4gICAgY29uc3QgY2hpbGQgPSBjcmVhdGVFbGVtZW50KGNoaWxkTmFtZSkoKVxuICAgIGVsZW1lbnQuY2hpbGRyZW4ucHVzaChjaGlsZClcbiAgICBjaGlsZC5wYXJlbnQgPSBlbGVtZW50XG4gICAgcmV0dXJuIGNoaWxkXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDaGlsZE9yQ3JlYXRlKFxuICBuYW1lOiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIGZhbGxiYWNrKGZpbmRDaGlsZEVsZW1lbnQobmFtZSwgZmFsc2UpLCBjcmVhdGVDaGlsZChuYW1lKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAuLi5lbGVtZW50TmFtZXM6IHN0cmluZ1tdXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWxlbWVudCkgPT4ge1xuICAgIGxldCBjdXJyZW50ID0gZWxlbWVudFxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBlbGVtZW50TmFtZXMpIHtcbiAgICAgIGN1cnJlbnQgPSBmaW5kQ2hpbGRPckNyZWF0ZShuYW1lKShjdXJyZW50KVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUZXh0Q29udGVudChcbiAgdGV4dDogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGxcbiAgICBjb25zdCB0ZXh0RWwgPSBlbGVtZW50LmNoaWxkcmVuLmZpbmQoXG4gICAgICAoZWwpID0+IGVsIGluc3RhbmNlb2YgWG1sVGV4dFxuICAgICkgYXMgWG1sVGV4dFxuICAgIGlmICghdGV4dEVsKSB7XG4gICAgICBlbGVtZW50LmNoaWxkcmVuLnB1c2gobmV3IFhtbFRleHQodGV4dCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHRFbC50ZXh0ID0gdGV4dFxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBbGxDaGlsZHJlbigpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGxcbiAgICBlbGVtZW50LmNoaWxkcmVuLmZvckVhY2goKGVsKSA9PiAoZWwucGFyZW50ID0gbnVsbCkpXG4gICAgZWxlbWVudC5jaGlsZHJlbiA9IFtdXG4gICAgcmV0dXJuIGVsZW1lbnRcbiAgfVxufVxuXG4vLyBzdGF5cyBvbiB0aGUgc2FtZSBlbGVtZW50XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoXG4gIG5hbWU6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBudWxsXG4gICAgY29uc3Qgc3RyaXBwZWROYW1lID0gc3RyaXBOYW1lc3BhY2UobmFtZSlcbiAgICBjb25zdCByZW1vdmVkID0gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoXG4gICAgICAoY2hpbGQpID0+XG4gICAgICAgIGNoaWxkIGluc3RhbmNlb2YgWG1sRWxlbWVudCAmJlxuICAgICAgICBzdHJpcE5hbWVzcGFjZShnZXRFbGVtZW50TmFtZShjaGlsZCkpID09PSBzdHJpcHBlZE5hbWVcbiAgICApXG4gICAgcmVtb3ZlZC5mb3JFYWNoKChlbCkgPT4gKGVsLnBhcmVudCA9IG51bGwpKVxuICAgIGVsZW1lbnQuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuLmZpbHRlcihcbiAgICAgIChjaGlsZCkgPT4gcmVtb3ZlZC5pbmRleE9mKGNoaWxkKSA9PT0gLTFcbiAgICApXG4gICAgcmV0dXJuIGVsZW1lbnRcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4oXG4gIGNoaWxkcmVuRm46IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIEFycmF5PFhtbEVsZW1lbnQ+PlxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBjaGlsZHJlblRvUmVtb3ZlID0gY2hpbGRyZW5GbihlbGVtZW50KVxuICAgIGNoaWxkcmVuVG9SZW1vdmUuZm9yRWFjaCgoY2hpbGQpID0+IChjaGlsZC5wYXJlbnQgPSBudWxsKSlcbiAgICBlbGVtZW50LmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbi5maWx0ZXIoXG4gICAgICAoY2hpbGQpID0+XG4gICAgICAgIGNoaWxkIGluc3RhbmNlb2YgWG1sRWxlbWVudCAmJiBjaGlsZHJlblRvUmVtb3ZlLmluZGV4T2YoY2hpbGQpID09PSAtMVxuICAgIClcbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG59XG5cbi8qKlxuICogUmVuYW1lcyBlbGVtZW50cyBpbiB0aGUgWE1MIHRyZWUgYWNjb3JkaW5nIHRvIHRoZSBtYXBcbiAqIEVpdGhlciBzcGVjaWZ5IGEgZnVsbCBlbGVtZW50IG5hbWUgbGlrZSAnZ21kOk1EX01ldGFkYXRhJyBvciBzaW1wbHkgYSBuYW1lc3BhY2UgbGlrZSAnZ21kJ1xuICogQHBhcmFtIHJvb3RFbGVtZW50XG4gKiBAcGFyYW0gcmVwbGFjZU1hcFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRWxlbWVudHMoXG4gIHJvb3RFbGVtZW50OiBYbWxFbGVtZW50LFxuICByZXBsYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pIHtcbiAgZnVuY3Rpb24gZG9SZXBsYWNlKGVsZW1lbnQ6IFhtbEVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5uYW1lIGluIHJlcGxhY2VNYXApIHtcbiAgICAgIGVsZW1lbnQubmFtZSA9IHJlcGxhY2VNYXBbZWxlbWVudC5uYW1lXVxuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5uYW1lICYmIGdldE5hbWVzcGFjZShlbGVtZW50Lm5hbWUpIGluIHJlcGxhY2VNYXApIHtcbiAgICAgIGVsZW1lbnQubmFtZSA9IGAke1xuICAgICAgICByZXBsYWNlTWFwW2dldE5hbWVzcGFjZShlbGVtZW50Lm5hbWUpXVxuICAgICAgfToke3N0cmlwTmFtZXNwYWNlKGVsZW1lbnQubmFtZSl9YFxuICAgIH1cbiAgICBpZiAoZWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgZWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKGRvUmVwbGFjZSlcbiAgICB9XG4gIH1cbiAgZG9SZXBsYWNlKHJvb3RFbGVtZW50KVxuICByZXR1cm4gcm9vdEVsZW1lbnRcbn1cbiJdfQ==
386
+ /**
387
+ * This function use the DOMParser to check if the given xmlString is a valid XML file or throw an error
388
+ * (Generated by chatGPT)
389
+ * @param xmlString
390
+ */
391
+ export function assertValidXml(xmlString) {
392
+ const parser = new DOMParser();
393
+ const xmlDoc = parser.parseFromString(xmlString, 'application/xml');
394
+ const parserError = xmlDoc.querySelector('parsererror');
395
+ if (parserError) {
396
+ console.error(parserError);
397
+ throw new Error('File is not a valid XML.');
398
+ }
399
+ return xmlDoc;
400
+ }
401
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYy9saWIveG1sLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBRVIsV0FBVyxFQUNYLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTlELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFM0QsTUFBTSxPQUFPLGFBQWMsU0FBUSxLQUFLO0lBQ3RDLFlBQVksT0FBTztRQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEIsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQWlCO0lBQzlDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQTtJQUNkLElBQUk7UUFDRixHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQzFCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixNQUFNLElBQUksYUFBYSxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQzVEO0lBQ0QsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFrQjtJQUMvQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFBO0lBRTNDLFNBQVMsd0JBQXdCLENBQUMsSUFBWTtRQUM1QyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QyxJQUFJLFNBQVMsS0FBSyxPQUFPLElBQUks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LEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUNuRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRXZELElBQUksV0FBVyxFQUFFO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUE7S0FDNUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBwYXJzZVhtbCxcbiAgWG1sQ29tbWVudCxcbiAgWG1sRG9jdW1lbnQsXG4gIFhtbEVsZW1lbnQsXG4gIFhtbFRleHQsXG59IGZyb20gJ0ByZ3JvdmUvcGFyc2UteG1sJ1xuaW1wb3J0IHsgQ2hhaW5hYmxlRnVuY3Rpb24sIGZhbGxiYWNrIH0gZnJvbSAnLi9mdW5jdGlvbi11dGlscydcblxuZXhwb3J0IHsgWG1sRG9jdW1lbnQsIFhtbEVsZW1lbnQgfSBmcm9tICdAcmdyb3ZlL3BhcnNlLXhtbCdcblxuZXhwb3J0IGNsYXNzIFhtbFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICB9XG59XG5cbi8qKlxuICogUGFyc2VzIGEgWE1MIGRvY3VtZW50IGFzIHN0cmluZywgcmV0dXJuIGEgZG9jdW1lbnQgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVhtbFN0cmluZyh4bWxTdHJpbmc6IHN0cmluZyk6IFhtbERvY3VtZW50IHtcbiAgbGV0IGRvYyA9IG51bGxcbiAgdHJ5IHtcbiAgICBkb2MgPSBwYXJzZVhtbCh4bWxTdHJpbmcpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgWG1sUGFyc2VFcnJvcihlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlKVxuICB9XG4gIHJldHVybiBkb2Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50KHJvb3RFbDogWG1sRWxlbWVudCk6IFhtbERvY3VtZW50IHtcbiAgcm9vdEVsLmF0dHJpYnV0ZXMgPSByb290RWwuYXR0cmlidXRlcyB8fCB7fVxuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROYW1lc3BhY2VGcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBleHRyYWN0TmFtZXNwYWNlKG5hbWUpXG4gICAgaWYgKG5hbWVzcGFjZSA9PT0gJ3htbG5zJyB8fCBuYW1lc3BhY2UgPT09IG51bGwpIHJldHVyblxuICAgIGlmIChyb290RWwuYXR0cmlidXRlc1tgeG1sbnM6JHtuYW1lc3BhY2V9YF0pIHJldHVyblxuICAgIGlmICghTkFNRVNQQUNFU1tuYW1lc3BhY2VdKSB7XG4gICAgICAvLyB0aGUgbmFtZXNwYWNlIGlzIHVua25vd24gYnV0IGl0IG1pZ2h0IHN0aWxsIGJlIGRlY2xhcmVkIGNvcnJlY3RseTogaWdub3JlIGl0XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcm9vdEVsLmF0dHJpYnV0ZXNbYHhtbG5zOiR7bmFtZXNwYWNlfWBdID0gTkFNRVNQQUNFU1tuYW1lc3BhY2VdXG4gIH1cblxuICBmdW5jdGlvbiBjb2xsZWN0TmFtZXNwYWNlcyhlbDogWG1sRWxlbWVudCkge1xuICAgIGNvbGxlY3ROYW1lc3BhY2VGcm9tTmFtZShlbC5uYW1lKVxuICAgIGZvciAoY29uc3QgYXR0ciBpbiBlbC5hdHRyaWJ1dGVzKSB7XG4gICAgICBjb2xsZWN0TmFtZXNwYWNlRnJvbU5hbWUoYXR0cilcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW4gPSBhbGxDaGlsZHJlbkVsZW1lbnQoZWwpXG4gICAgY2hpbGRyZW4uZm9yRWFjaChjb2xsZWN0TmFtZXNwYWNlcylcbiAgfVxuXG4gIGNvbGxlY3ROYW1lc3BhY2VzKHJvb3RFbClcbiAgcmV0dXJuIG5ldyBYbWxEb2N1bWVudChbcm9vdEVsXSlcbn1cblxuLyoqXG4gKiBXaWxsIGRvIG5vdGhpbmcgaWYgbm8gbmFtZXNwYWNlIHByZXNlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwTmFtZXNwYWNlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbG9uID0gbmFtZS5pbmRleE9mKCc6JylcbiAgcmV0dXJuIGNvbG9uID4gLTEgPyBuYW1lLnN1YnN0cmluZyhjb2xvbiArIDEpIDogbmFtZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbG9uID0gbmFtZS5pbmRleE9mKCc6JylcbiAgcmV0dXJuIGNvbG9uID4gLTEgPyBuYW1lLnN1YnN0cmluZygwLCBjb2xvbikgOiAnJ1xufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50TmFtZShlbGVtZW50OiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGVsZW1lbnQubmFtZSB8fCAnJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdEVsZW1lbnQoeG1sRG9jOiBYbWxEb2N1bWVudCk6IFhtbEVsZW1lbnQge1xuICByZXR1cm4geG1sRG9jLmNoaWxkcmVuLmZpbmQoKGVsKSA9PiBlbCBpbnN0YW5jZW9mIFhtbEVsZW1lbnQpIGFzIFhtbEVsZW1lbnRcbn1cblxuLyoqXG4gKiBXaWxsIHJldHVybiBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgKG5hbWVzcGFjZSB3aWxsIGJlIGlnbm9yZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQ2hpbGRyZW5FbGVtZW50KFxuICBuYW1lOiBzdHJpbmcsXG4gIG5lc3RlZCA9IHRydWVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIEFycmF5PFhtbEVsZW1lbnQ+PiB7XG4gIHJldHVybiAoZWwpID0+IHtcbiAgICBjb25zdCBzdHJpcHBlZE5hbWUgPSBzdHJpcE5hbWVzcGFjZShuYW1lKVxuICAgIGZ1bmN0aW9uIHJlZHVjZXIocHJldiwgY3Vycikge1xuICAgICAgaWYgKHN0cmlwTmFtZXNwYWNlKGdldEVsZW1lbnROYW1lKGN1cnIpKSA9PT0gc3RyaXBwZWROYW1lKSB7XG4gICAgICAgIHByZXYucHVzaChjdXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAobmVzdGVkICYmIEFycmF5LmlzQXJyYXkoY3Vyci5jaGlsZHJlbikpIHtcbiAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5jdXJyLmNoaWxkcmVuLnJlZHVjZShyZWR1Y2VyLCBbXSldXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcHJldlxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbCAmJiBBcnJheS5pc0FycmF5KGVsLmNoaWxkcmVuKVxuICAgICAgPyBlbC5jaGlsZHJlbi5yZWR1Y2UocmVkdWNlciwgW10pXG4gICAgICA6IFtdXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDaGlsZEVsZW1lbnQoXG4gIG5hbWU6IHN0cmluZyxcbiAgbmVzdGVkID0gdHJ1ZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsKSA9PiBmaW5kQ2hpbGRyZW5FbGVtZW50KG5hbWUsIG5lc3RlZCkoZWwpWzBdIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbENoaWxkcmVuRWxlbWVudChlbGVtZW50OiBYbWxFbGVtZW50KTogQXJyYXk8WG1sRWxlbWVudD4ge1xuICBpZiAoIWVsZW1lbnQgfHwgIUFycmF5LmlzQXJyYXkoZWxlbWVudC5jaGlsZHJlbikpIHJldHVybiBbXVxuICByZXR1cm4gW1xuICAgIC4uLmVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKChlbCkgPT4gZWwgaW5zdGFuY2VvZiBYbWxFbGVtZW50KSxcbiAgXSBhcyBBcnJheTxYbWxFbGVtZW50PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RDaGlsZEVsZW1lbnQoZWxlbWVudDogWG1sRWxlbWVudCk6IFhtbEVsZW1lbnQge1xuICByZXR1cm4gYWxsQ2hpbGRyZW5FbGVtZW50KGVsZW1lbnQpWzBdID8/IG51bGxcbn1cblxuLyoqXG4gKiBXaWxsIHJldHVybiBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgbmVzdGVkIGFjY29yZGluZyB0byB0aGUgZ2l2ZW5cbiAqIG5hbWVzIChzaW1pbGFyIHRvIGEgcGF0aCksIHN0YXJ0aW5nIGZvcm0gdGhlIGlucHV0IGVsZW1lbnQ7XG4gKiByZXR1cm5zIGFuIGVtcHR5IGFycmF5IGlmIG5vIG1hdGNoaW5nIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgLi4uZWxlbWVudE5hbWVzOiBzdHJpbmdbXVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgQXJyYXk8WG1sRWxlbWVudD4+IHtcbiAgcmV0dXJuIChlbCkgPT4ge1xuICAgIGZ1bmN0aW9uIGxvb2tGb3IoZWxOYW1lSW5kZXg6IG51bWJlcikge1xuICAgICAgY29uc3Qgc3RyaXBwZWROYW1lID0gc3RyaXBOYW1lc3BhY2UoZWxlbWVudE5hbWVzW2VsTmFtZUluZGV4XSlcbiAgICAgIHJldHVybiAocHJldiwgY3VycikgPT4ge1xuICAgICAgICBpZiAoc3RyaXBOYW1lc3BhY2UoZ2V0RWxlbWVudE5hbWUoY3VycikpICE9PSBzdHJpcHBlZE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5hbWVJbmRleCA9PT0gZWxlbWVudE5hbWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICByZXR1cm4gWy4uLnByZXYsIGN1cnJdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3Vyci5jaGlsZHJlbikpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIC4uLmN1cnIuY2hpbGRyZW4ucmVkdWNlKGxvb2tGb3IoZWxOYW1lSW5kZXggKyAxKSwgW10pLFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldlxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbCAmJiBBcnJheS5pc0FycmF5KGVsLmNoaWxkcmVuKVxuICAgICAgPyBlbC5jaGlsZHJlbi5yZWR1Y2UobG9va0ZvcigwKSwgW10pXG4gICAgICA6IFtdXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXN0ZWRFbGVtZW50KFxuICAuLi5lbGVtZW50TmFtZXM6IHN0cmluZ1tdXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWwpID0+IHtcbiAgICBjb25zdCBmb3VuZCA9IGZpbmROZXN0ZWRFbGVtZW50cyguLi5lbGVtZW50TmFtZXMpKGVsKVxuICAgIHJldHVybiBmb3VuZC5sZW5ndGggPyBmb3VuZFswXSA6IG51bGxcbiAgfVxufVxuXG4vLyBXaWxsIGxvb2sgdGhyb3VnaCBhbGwgdGhlIHBhcmVudHM7IHJldHVybnMgbnVsbCBpZiBubyBtYXRjaGluZyBwYXJlbnQgZm91bmQuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudChcbiAgcGFyZW50TmFtZTogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWwpID0+IHtcbiAgICBsZXQgcGFyZW50OiBYbWxFbGVtZW50IHwgWG1sRG9jdW1lbnQgPSBlbC5wYXJlbnQgYXMgWG1sRWxlbWVudFxuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50IGluc3RhbmNlb2YgWG1sRWxlbWVudCkge1xuICAgICAgaWYgKHN0cmlwTmFtZXNwYWNlKGdldEVsZW1lbnROYW1lKHBhcmVudCkpID09PSBzdHJpcE5hbWVzcGFjZShwYXJlbnROYW1lKSlcbiAgICAgICAgcmV0dXJuIHBhcmVudFxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGV4dCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBzdHJpbmc+IHtcbiAgcmV0dXJuIChlbCkgPT4ge1xuICAgIGlmICghZWwpIHJldHVybiBudWxsXG4gICAgY29uc3QgdGV4dE5vZGUgPSBBcnJheS5pc0FycmF5KGVsLmNoaWxkcmVuKVxuICAgICAgPyAoZWwuY2hpbGRyZW4uZmluZCgobm9kZSkgPT4gbm9kZS50eXBlID09PSAndGV4dCcpIGFzIFhtbFRleHQpXG4gICAgICA6IG51bGxcbiAgICByZXR1cm4gdGV4dE5vZGUgPyB0ZXh0Tm9kZS50ZXh0IDogJydcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEF0dHJpYnV0ZShcbiAgYXR0ck5hbWU6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgc3RyaW5nPiB7XG4gIHJldHVybiAoZWwpID0+IChlbCAmJiBlbC5hdHRyaWJ1dGVzW2F0dHJOYW1lXSkgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24geG1sVG9TdHJpbmcoXG4gIGVsOiBYbWxFbGVtZW50IHwgWG1sVGV4dCB8IFhtbENvbW1lbnQgfCBYbWxEb2N1bWVudCxcbiAgaW5kZW50YXRpb25MZXZlbCA9IDBcbikge1xuICBpZiAoZWwgaW5zdGFuY2VvZiBYbWxEb2N1bWVudClcbiAgICByZXR1cm4gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PiR7eG1sVG9TdHJpbmcoXG4gICAgICBlbC5jaGlsZHJlblswXVxuICAgICl9YFxuICBpZiAoZWwgaW5zdGFuY2VvZiBYbWxUZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IGVsLnRleHRcbiAgICBjb25zdCBpc0VtcHR5ID0gIXRleHQgfHwgdGV4dC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJykgPT09ICcnXG4gICAgaWYgKGlzRW1wdHkpIHJldHVybiAnJ1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICB9XG4gIGlmICghKGVsIGluc3RhbmNlb2YgWG1sRWxlbWVudCkpIHJldHVybiBgPCEtLSB1bmtub3duIC0tPmBcblxuICBjb25zdCBwYWRkaW5nID0gJyAgICAnLnJlcGVhdChpbmRlbnRhdGlvbkxldmVsKVxuICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoZWwuY2hpbGRyZW4pXG4gICAgPyBlbC5jaGlsZHJlblxuICAgICAgICAubWFwKChlbCkgPT4geG1sVG9TdHJpbmcoZWwsIGluZGVudGF0aW9uTGV2ZWwgKyAxKSlcbiAgICAgICAgLmZpbHRlcigoZWwpID0+IGVsICE9PSAnJylcbiAgICAgICAgLm1hcCgoZWxTdHJpbmcsIGluZGV4LCBhcnJheSkgPT5cbiAgICAgICAgICBpbmRleCA8IGFycmF5Lmxlbmd0aCAtIDEgPyBlbFN0cmluZy5yZXBsYWNlKC9cXG5cXHMqJC9nLCAnJykgOiBlbFN0cmluZ1xuICAgICAgICApXG4gICAgICAgIC5qb2luKCcnKVxuICAgIDogJydcbiAgY29uc3QgYXR0cnMgPSBPYmplY3Qua2V5cyhlbC5hdHRyaWJ1dGVzKS5yZWR1Y2UoXG4gICAgKHByZXYsIGN1cnIpID0+IHByZXYgKyBgICR7Y3Vycn09XCIke2VsLmF0dHJpYnV0ZXNbY3Vycl19XCJgLFxuICAgICcnXG4gIClcbiAgY29uc3QgcGFyZW50UGFkZGluZyA9ICcgICAgJy5yZXBlYXQoTWF0aC5tYXgoMCwgaW5kZW50YXRpb25MZXZlbCAtIDEpKVxuICBpZiAoY2hpbGRyZW4gPT09ICcnKSB7XG4gICAgcmV0dXJuIGBcbiR7cGFkZGluZ308JHtlbC5uYW1lfSR7YXR0cnN9Lz5cbiR7cGFyZW50UGFkZGluZ31gXG4gIH1cblxuICByZXR1cm4gYFxuJHtwYWRkaW5nfTwke2VsLm5hbWV9JHthdHRyc30+JHtjaGlsZHJlbn08LyR7ZWwubmFtZX0+XG4ke3BhcmVudFBhZGRpbmd9YFxufVxuXG4vKipcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcmV0dXJucyBuYW1lc3BhY2UsIG51bGwgaWYgbm9uZSBmb3VuZFxuICovXG5mdW5jdGlvbiBleHRyYWN0TmFtZXNwYWNlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBjb2xvbiA9IG5hbWUuaW5kZXhPZignOicpXG4gIHJldHVybiBjb2xvbiA+IC0xID8gbmFtZS5zdWJzdHJpbmcoMCwgY29sb24pIDogbnVsbFxufVxuXG5leHBvcnQgY29uc3QgTkFNRVNQQUNFUyA9IHtcbiAgZ21kOiAnaHR0cDovL3d3dy5pc290YzIxMS5vcmcvMjAwNS9nbWQnLFxuICBnY286ICdodHRwOi8vd3d3Lmlzb3RjMjExLm9yZy8yMDA1L2djbycsXG4gIGdmYzogJ2h0dHA6Ly93d3cuaXNvdGMyMTEub3JnLzIwMDUvZ2ZjJyxcbiAgZ21sOiAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwvMy4yJyxcbiAgeHNpOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnLFxuICBzcnY6ICdodHRwOi8vd3d3Lmlzb3RjMjExLm9yZy8yMDA1L3NydicsXG4gIGdteDogJ2h0dHA6Ly93d3cuaXNvdGMyMTEub3JnLzIwMDUvZ214JyxcbiAgZ3RzOiAnaHR0cDovL3d3dy5pc290YzIxMS5vcmcvMjAwNS9ndHMnLFxuICBnc3I6ICdodHRwOi8vd3d3Lmlzb3RjMjExLm9yZy8yMDA1L2dzcicsXG4gIGdtaTogJ2h0dHA6Ly93d3cuaXNvdGMyMTEub3JnLzIwMDUvZ21pJyxcbiAgeGxpbms6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyxcbiAgbWRiOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZGIvMi4wJyxcbiAgbWRxOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTE1Ny8tMi9tZHEvMS4wJyxcbiAgbXNyOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tc3IvMi4wJyxcbiAgbXJzOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcnMvMS4wJyxcbiAgbW1pOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tbWkvMS4wJyxcbiAgbXJsOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcmwvMi4wJyxcbiAgbWR0OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZHQvMi4wJyxcbiAgbXJkOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcmQvMS4wJyxcbiAgbWRzOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZHMvMi4wJyxcbiAgbXBjOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcGMvMS4wJyxcbiAgbWNjOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tY2MvMS4wJyxcbiAgbWFjOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tYWMvMi4wJyxcbiAgbWNvOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tY28vMS4wJyxcbiAgbWRhOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZGEvMS4wJyxcbiAgbWV4OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tZXgvMS4wJyxcbiAgZ2V4OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9nZXgvMS4wJyxcbiAgZ2N4OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9nY3gvMS4wJyxcbiAgbWFzOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tYXMvMS4wJyxcbiAgbXJpOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcmkvMS4wJyxcbiAgY2l0OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9jaXQvMi4wJyxcbiAgY2F0OiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9jYXQvMS4wJyxcbiAgbGFuOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9sYW4vMS4wJyxcbiAgbXJjOiAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTExNS8tMy9tcmMvMi4wJyxcbiAgcmRmOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIycsXG4gIHJkZnM6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjJyxcbiAgZm9hZjogJ2h0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvJyxcbiAgeHNkOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjJyxcbiAgZGNhdDogJ2h0dHA6Ly93d3cudzMub3JnL25zL2RjYXQjJyxcbiAgZGN0OiAnaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLycsXG4gIHNrb3M6ICdodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAyL3Nrb3MvY29yZSMnLFxuICBzY2hlbWFfb3JnOiAnaHR0cDovL3NjaGVtYS5vcmcvJyxcbiAgc3BkeDogJ2h0dHBzOi8vc3BkeC5vcmcvcmRmL3Rlcm1zLyMnLFxuICBhZG1zOiAnaHR0cDovL3d3dy53My5vcmcvbnMvYWRtcyMnLFxuICBkcXY6ICdodHRwOi8vd3d3LnczLm9yZy9ucy9kcXYjJyxcbiAgb3dsOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjJyxcbiAgdmNhcmQ6ICdodHRwOi8vd3d3LnczLm9yZy8yMDA2L3ZjYXJkL25zIycsXG4gIHRpbWU6ICdodHRwOi8vd3d3LnczLm9yZy8yMDA2L3RpbWUjJyxcbiAgbG9jbjogJ2h0dHA6Ly93d3cudzMub3JnL25zL2xvY24jJyxcbiAgbWRjYXQ6ICdodHRwczovL2RhdGEudmxhYW5kZXJlbi5iZS9ucy9tZXRhZGF0YS1kY2F0IycsXG59XG5cbi8qKlxuICogQHBhcmFtIG5hbWUgRnVsbCBuYW1lIHdpdGggbmFtZXNwYWNlLCBlLmcuOiBnbWQ6TURfTWV0YWRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoXG4gIG5hbWU6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248dm9pZCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKCkgPT4gbmV3IFhtbEVsZW1lbnQobmFtZSwge30sIFtdKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQXR0cmlidXRlKFxuICBuYW1lOiBzdHJpbmcsXG4gIHZhbHVlOiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIChlbGVtZW50KSA9PiB7XG4gICAgZWxlbWVudC5hdHRyaWJ1dGVzW25hbWVdID0gdmFsdWVcbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG59XG5mdW5jdGlvbiBnZXRUcmVlUm9vdChlbGVtZW50OiBYbWxFbGVtZW50KTogWG1sRWxlbWVudCB7XG4gIGxldCByb290ID0gZWxlbWVudFxuICB3aGlsZSAocm9vdC5wYXJlbnQgaW5zdGFuY2VvZiBYbWxFbGVtZW50KSB7XG4gICAgcm9vdCA9IHJvb3QucGFyZW50XG4gIH1cbiAgcmV0dXJuIHJvb3Rcbn1cblxuLy8gc3RheXMgb24gdGhlIHBhcmVudCBlbGVtZW50XG4vLyBpZiB0aGUgZ2l2ZW4gZWxlbWVudHMgYXJlIHBhcnQgb2YgYSBzdWJ0cmVlLCB3aWxsIGFkZCB0aGUgcm9vdCBvZiBzdWJ0cmVlXG4vLyB3aWxsIGZpbHRlciBvdXQgZmFsc3kgZWxlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDaGlsZHJlbihcbiAgLi4uY2hpbGRyZW5GbnM6IEFycmF5PENoYWluYWJsZUZ1bmN0aW9uPHZvaWQsIFhtbEVsZW1lbnQ+PlxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBudWxsXG4gICAgY2hpbGRyZW5GbnMgPSBjaGlsZHJlbkZucy5maWx0ZXIoKGZuKSA9PiBmbilcbiAgICBlbGVtZW50LmNoaWxkcmVuLnB1c2goLi4uY2hpbGRyZW5GbnMubWFwKChmbikgPT4gZm4oKSkubWFwKGdldFRyZWVSb290KSlcbiAgICBlbGVtZW50LmNoaWxkcmVuLmZvckVhY2goKGVsKSA9PiAoZWwucGFyZW50ID0gZWxlbWVudCkpXG4gICAgcmV0dXJuIGVsZW1lbnRcbiAgfVxufVxuXG4vLyBzd2l0Y2ggdG8gdGhlIHRpcCBvZiB0aGUgc3VidHJlZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENoaWxkVHJlZShcbiAgY2hpbGRyZW5GbjogQ2hhaW5hYmxlRnVuY3Rpb248dm9pZCwgWG1sRWxlbWVudD5cbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIChlbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHRyZWVUaXAgPSBjaGlsZHJlbkZuKClcbiAgICBjb25zdCB0cmVlUm9vdCA9IGdldFRyZWVSb290KHRyZWVUaXApXG4gICAgZWxlbWVudC5jaGlsZHJlbi5wdXNoKHRyZWVSb290KVxuICAgIHRyZWVSb290LnBhcmVudCA9IGVsZW1lbnRcbiAgICByZXR1cm4gdHJlZVRpcFxuICB9XG59XG5cbi8vIHN3aXRjaGVzIHRvIHRoZSBjaGlsZCBlbGVtZW50XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hpbGQoXG4gIGNoaWxkTmFtZTogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBjaGlsZCA9IGNyZWF0ZUVsZW1lbnQoY2hpbGROYW1lKSgpXG4gICAgZWxlbWVudC5jaGlsZHJlbi5wdXNoKGNoaWxkKVxuICAgIGNoaWxkLnBhcmVudCA9IGVsZW1lbnRcbiAgICByZXR1cm4gY2hpbGRcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZENoaWxkT3JDcmVhdGUoXG4gIG5hbWU6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gZmFsbGJhY2soZmluZENoaWxkRWxlbWVudChuYW1lLCBmYWxzZSksIGNyZWF0ZUNoaWxkKG5hbWUpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gIC4uLmVsZW1lbnROYW1lczogc3RyaW5nW11cbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIChlbGVtZW50KSA9PiB7XG4gICAgbGV0IGN1cnJlbnQgPSBlbGVtZW50XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGVsZW1lbnROYW1lcykge1xuICAgICAgY3VycmVudCA9IGZpbmRDaGlsZE9yQ3JlYXRlKG5hbWUpKGN1cnJlbnQpXG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRleHRDb250ZW50KFxuICB0ZXh0OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIChlbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHRleHRFbCA9IGVsZW1lbnQuY2hpbGRyZW4uZmluZChcbiAgICAgIChlbCkgPT4gZWwgaW5zdGFuY2VvZiBYbWxUZXh0XG4gICAgKSBhcyBYbWxUZXh0XG4gICAgaWYgKCF0ZXh0RWwpIHtcbiAgICAgIGVsZW1lbnQuY2hpbGRyZW4ucHVzaChuZXcgWG1sVGV4dCh0ZXh0KSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dEVsLnRleHQgPSB0ZXh0XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbENoaWxkcmVuKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIChlbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm4gbnVsbFxuICAgIGVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaCgoZWwpID0+IChlbC5wYXJlbnQgPSBudWxsKSlcbiAgICBlbGVtZW50LmNoaWxkcmVuID0gW11cbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG59XG5cbi8vIHN0YXlzIG9uIHRoZSBzYW1lIGVsZW1lbnRcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbkJ5TmFtZShcbiAgbmFtZTogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBzdHJpcHBlZE5hbWUgPSBzdHJpcE5hbWVzcGFjZShuYW1lKVxuICAgIGNvbnN0IHJlbW92ZWQgPSBlbGVtZW50LmNoaWxkcmVuLmZpbHRlcihcbiAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgY2hpbGQgaW5zdGFuY2VvZiBYbWxFbGVtZW50ICYmXG4gICAgICAgIHN0cmlwTmFtZXNwYWNlKGdldEVsZW1lbnROYW1lKGNoaWxkKSkgPT09IHN0cmlwcGVkTmFtZVxuICAgIClcbiAgICByZW1vdmVkLmZvckVhY2goKGVsKSA9PiAoZWwucGFyZW50ID0gbnVsbCkpXG4gICAgZWxlbWVudC5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKFxuICAgICAgKGNoaWxkKSA9PiByZW1vdmVkLmluZGV4T2YoY2hpbGQpID09PSAtMVxuICAgIClcbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbihcbiAgY2hpbGRyZW5GbjogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgQXJyYXk8WG1sRWxlbWVudD4+XG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuVG9SZW1vdmUgPSBjaGlsZHJlbkZuKGVsZW1lbnQpXG4gICAgY2hpbGRyZW5Ub1JlbW92ZS5mb3JFYWNoKChjaGlsZCkgPT4gKGNoaWxkLnBhcmVudCA9IG51bGwpKVxuICAgIGVsZW1lbnQuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuLmZpbHRlcihcbiAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgY2hpbGQgaW5zdGFuY2VvZiBYbWxFbGVtZW50ICYmIGNoaWxkcmVuVG9SZW1vdmUuaW5kZXhPZihjaGlsZCkgPT09IC0xXG4gICAgKVxuICAgIHJldHVybiBlbGVtZW50XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5hbWVzIGVsZW1lbnRzIGluIHRoZSBYTUwgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIG1hcFxuICogRWl0aGVyIHNwZWNpZnkgYSBmdWxsIGVsZW1lbnQgbmFtZSBsaWtlICdnbWQ6TURfTWV0YWRhdGEnIG9yIHNpbXBseSBhIG5hbWVzcGFjZSBsaWtlICdnbWQnXG4gKiBAcGFyYW0gcm9vdEVsZW1lbnRcbiAqIEBwYXJhbSByZXBsYWNlTWFwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVFbGVtZW50cyhcbiAgcm9vdEVsZW1lbnQ6IFhtbEVsZW1lbnQsXG4gIHJlcGxhY2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBmdW5jdGlvbiBkb1JlcGxhY2UoZWxlbWVudDogWG1sRWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50Lm5hbWUgaW4gcmVwbGFjZU1hcCkge1xuICAgICAgZWxlbWVudC5uYW1lID0gcmVwbGFjZU1hcFtlbGVtZW50Lm5hbWVdXG4gICAgfSBlbHNlIGlmIChlbGVtZW50Lm5hbWUgJiYgZ2V0TmFtZXNwYWNlKGVsZW1lbnQubmFtZSkgaW4gcmVwbGFjZU1hcCkge1xuICAgICAgZWxlbWVudC5uYW1lID0gYCR7XG4gICAgICAgIHJlcGxhY2VNYXBbZ2V0TmFtZXNwYWNlKGVsZW1lbnQubmFtZSldXG4gICAgICB9OiR7c3RyaXBOYW1lc3BhY2UoZWxlbWVudC5uYW1lKX1gXG4gICAgfVxuICAgIGlmIChlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICBlbGVtZW50LmNoaWxkcmVuLmZvckVhY2goZG9SZXBsYWNlKVxuICAgIH1cbiAgfVxuICBkb1JlcGxhY2Uocm9vdEVsZW1lbnQpXG4gIHJldHVybiByb290RWxlbWVudFxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gdXNlIHRoZSBET01QYXJzZXIgdG8gY2hlY2sgaWYgdGhlIGdpdmVuIHhtbFN0cmluZyBpcyBhIHZhbGlkIFhNTCBmaWxlIG9yIHRocm93IGFuIGVycm9yXG4gKiAoR2VuZXJhdGVkIGJ5IGNoYXRHUFQpXG4gKiBAcGFyYW0geG1sU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZFhtbCh4bWxTdHJpbmc6IHN0cmluZyk6IERvY3VtZW50IHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpXG4gIGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sU3RyaW5nLCAnYXBwbGljYXRpb24veG1sJylcbiAgY29uc3QgcGFyc2VyRXJyb3IgPSB4bWxEb2MucXVlcnlTZWxlY3RvcigncGFyc2VyZXJyb3InKVxuXG4gIGlmIChwYXJzZXJFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IocGFyc2VyRXJyb3IpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIGlzIG5vdCBhIHZhbGlkIFhNTC4nKVxuICB9XG5cbiAgcmV0dXJuIHhtbERvY1xufVxuIl19
@@ -1,19 +1,25 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { RecordsApiService, SearchApiService, } from '../../../../../../libs/data-access/gn4/src';
3
3
  import { ElasticsearchService } from './elasticsearch';
4
- import { combineLatest, from, of, switchMap, throwError, } from 'rxjs';
4
+ import { combineLatest, exhaustMap, from, of, Subject, switchMap, throwError, } from 'rxjs';
5
5
  import { catchError, map, tap } from 'rxjs/operators';
6
- import { findConverterForDocument, Gn4Converter, Iso19139Converter, } from '../../../../../../libs/api/metadata-converter/src';
6
+ import { assertValidXml, findConverterForDocument, Gn4Converter, Iso19139Converter, } from '../../../../../../libs/api/metadata-converter/src';
7
+ import { HttpClient, HttpHeaders, } from '@angular/common/http';
7
8
  import * as i0 from "@angular/core";
8
- import * as i1 from "../../../../../../libs/data-access/gn4/src";
9
- import * as i2 from "./elasticsearch";
10
- import * as i3 from "../../../../../../libs/api/metadata-converter/src";
9
+ import * as i1 from "@angular/common/http";
10
+ import * as i2 from "../../../../../../libs/data-access/gn4/src";
11
+ import * as i3 from "./elasticsearch";
12
+ import * as i4 from "../../../../../../libs/api/metadata-converter/src";
13
+ const TEMPORARY_ID_PREFIX = 'TEMP-ID-';
11
14
  export class Gn4Repository {
12
- constructor(gn4SearchApi, gn4SearchHelper, gn4Mapper, gn4RecordsApi) {
15
+ constructor(httpClient, gn4SearchApi, gn4SearchHelper, gn4Mapper, gn4RecordsApi) {
16
+ this.httpClient = httpClient;
13
17
  this.gn4SearchApi = gn4SearchApi;
14
18
  this.gn4SearchHelper = gn4SearchHelper;
15
19
  this.gn4Mapper = gn4Mapper;
16
20
  this.gn4RecordsApi = gn4RecordsApi;
21
+ this._draftsChanged = new Subject();
22
+ this.draftsChanged$ = this._draftsChanged.asObservable();
17
23
  }
18
24
  search({ filters, fields, offset, limit, sort, filterIds, filterGeometry, }) {
19
25
  return this.gn4SearchApi
@@ -61,21 +67,9 @@ export class Gn4Repository {
61
67
  records,
62
68
  }))));
63
69
  }
64
- /**
65
- * Returns null if the record is not found
66
- */
67
- loadRecordAsXml(uniqueIdentifier) {
68
- return this.gn4RecordsApi
69
- .getRecordAs(uniqueIdentifier, undefined, false, undefined, undefined, undefined, 'application/xml', 'response', undefined, { httpHeaderAccept: 'text/xml,application/xml' } // this is to make sure that the response is parsed as text
70
- )
71
- .pipe(map((response) => response.body), catchError((error) => error.status === 404 ? of(null) : throwError(() => error)));
72
- }
73
- getLocalStorageKeyForRecord(uniqueIdentifier) {
74
- return `geonetwork-ui-draft-${uniqueIdentifier}`;
75
- }
76
70
  openRecordForEdition(uniqueIdentifier) {
77
- const draft$ = of(window.localStorage.getItem(this.getLocalStorageKeyForRecord(uniqueIdentifier)));
78
- const recordAsXml$ = this.loadRecordAsXml(uniqueIdentifier);
71
+ const draft$ = of(this.getRecordFromLocalStorage(uniqueIdentifier));
72
+ const recordAsXml$ = this.getRecordAsXml(uniqueIdentifier);
79
73
  return combineLatest([draft$, recordAsXml$]).pipe(switchMap(([draft, recordAsXml]) => {
80
74
  const xml = draft ?? recordAsXml;
81
75
  const isSavedAlready = recordAsXml !== null;
@@ -84,12 +78,17 @@ export class Gn4Repository {
84
78
  .then((record) => [record, xml, isSavedAlready]);
85
79
  }));
86
80
  }
87
- serializeRecordToXml(record, referenceRecordSource) {
88
- // if there's a reference record, use that standard; otherwise, use iso19139
89
- const converter = referenceRecordSource
90
- ? findConverterForDocument(referenceRecordSource)
91
- : new Iso19139Converter();
92
- return from(converter.writeRecord(record, referenceRecordSource));
81
+ openRecordForDuplication(uniqueIdentifier) {
82
+ return this.getRecordAsXml(uniqueIdentifier).pipe(switchMap(async (fetchedRecordAsXml) => {
83
+ const converter = findConverterForDocument(fetchedRecordAsXml);
84
+ const record = await converter.readRecord(fetchedRecordAsXml);
85
+ record.uniqueIdentifier = `${TEMPORARY_ID_PREFIX}${Date.now()}`;
86
+ record.title = `${record.title} (Copy)`;
87
+ const recordAsXml = await converter.writeRecord(record, fetchedRecordAsXml);
88
+ this.saveRecordToLocalStorage(recordAsXml, record.uniqueIdentifier);
89
+ this._draftsChanged.next();
90
+ return [record, recordAsXml, false];
91
+ }));
93
92
  }
94
93
  saveRecord(record, referenceRecordSource) {
95
94
  return this.serializeRecordToXml(record, referenceRecordSource).pipe(switchMap((recordXml) => this.gn4RecordsApi
@@ -99,19 +98,96 @@ export class Gn4Repository {
99
98
  return response.metadataInfos[metadataId][0].uuid;
100
99
  }))));
101
100
  }
101
+ duplicateExternalRecord(recordDownloadUrl) {
102
+ return this.getExternalRecordAsXml(recordDownloadUrl).pipe(exhaustMap(async (fetchedRecordAsXml) => {
103
+ const converter = findConverterForDocument(fetchedRecordAsXml);
104
+ const record = await converter.readRecord(fetchedRecordAsXml);
105
+ const tempId = this.generateTemporaryId();
106
+ record.title = `${record.title} (Copy)`;
107
+ record.uniqueIdentifier = tempId;
108
+ const recordAsXml = await converter.writeRecord(record, fetchedRecordAsXml);
109
+ this.saveRecordToLocalStorage(recordAsXml, record.uniqueIdentifier);
110
+ this._draftsChanged.next();
111
+ return tempId;
112
+ }), catchError((error) => {
113
+ return throwError(() => error);
114
+ }));
115
+ }
116
+ deleteRecord(uniqueIdentifier) {
117
+ return this.gn4RecordsApi.deleteRecord(uniqueIdentifier);
118
+ }
119
+ generateTemporaryId() {
120
+ return `${TEMPORARY_ID_PREFIX}${Date.now()}`;
121
+ }
102
122
  saveRecordAsDraft(record, referenceRecordSource) {
103
- return this.serializeRecordToXml(record, referenceRecordSource).pipe(tap((recordXml) => window.localStorage.setItem(this.getLocalStorageKeyForRecord(record.uniqueIdentifier), recordXml)));
123
+ return this.serializeRecordToXml(record, referenceRecordSource).pipe(tap((recordXml) => {
124
+ this.saveRecordToLocalStorage(recordXml, record.uniqueIdentifier);
125
+ this._draftsChanged.next();
126
+ }));
104
127
  }
105
128
  clearRecordDraft(uniqueIdentifier) {
106
- window.localStorage.removeItem(this.getLocalStorageKeyForRecord(uniqueIdentifier));
129
+ this.removeRecordFromLocalStorage(uniqueIdentifier);
130
+ this._draftsChanged.next();
107
131
  }
108
132
  recordHasDraft(uniqueIdentifier) {
109
- return (window.localStorage.getItem(this.getLocalStorageKeyForRecord(uniqueIdentifier)) !== null);
133
+ return this.getRecordFromLocalStorage(uniqueIdentifier) !== null;
134
+ }
135
+ isRecordNotYetSaved(uniqueIdentifier) {
136
+ return uniqueIdentifier.startsWith(TEMPORARY_ID_PREFIX);
137
+ }
138
+ // generated by copilot
139
+ getAllDrafts() {
140
+ const items = { ...window.localStorage };
141
+ const drafts = Object.keys(items)
142
+ .filter((key) => key.startsWith('geonetwork-ui-draft-'))
143
+ .map((key) => window.localStorage.getItem(key))
144
+ .filter((draft) => draft !== null);
145
+ return from(Promise.all(drafts.map((draft) => findConverterForDocument(draft).readRecord(draft))));
146
+ }
147
+ getRecordAsXml(uniqueIdentifier) {
148
+ return this.gn4RecordsApi
149
+ .getRecordAs(uniqueIdentifier, undefined, false, undefined, undefined, undefined, 'application/xml', 'response', undefined, { httpHeaderAccept: 'text/xml,application/xml' } // this is to make sure that the response is parsed as text
150
+ )
151
+ .pipe(map((response) => response.body), catchError((error) => error.status === 404 ? of(null) : throwError(() => error)));
152
+ }
153
+ serializeRecordToXml(record, referenceRecordSource) {
154
+ // if there's a reference record, use that standard; otherwise, use iso19139
155
+ const converter = referenceRecordSource
156
+ ? findConverterForDocument(referenceRecordSource)
157
+ : new Iso19139Converter();
158
+ return from(converter.writeRecord(record, referenceRecordSource));
159
+ }
160
+ getExternalRecordAsXml(recordDownloadUrl) {
161
+ let headers = new HttpHeaders();
162
+ const responseType_ = 'text';
163
+ headers = headers.set('Accept', 'text/xml,application/xml');
164
+ return this.httpClient
165
+ .get(recordDownloadUrl, {
166
+ responseType: responseType_,
167
+ headers: headers,
168
+ observe: 'body',
169
+ })
170
+ .pipe(map((recordAsXmlFile) => {
171
+ assertValidXml(recordAsXmlFile);
172
+ return recordAsXmlFile;
173
+ }));
174
+ }
175
+ getLocalStorageKeyForRecord(recordId) {
176
+ return `geonetwork-ui-draft-${recordId}`; // Never change this prefix as it is a breaking change
177
+ }
178
+ saveRecordToLocalStorage(recordAsXml, recordId) {
179
+ window.localStorage.setItem(this.getLocalStorageKeyForRecord(recordId), recordAsXml);
180
+ }
181
+ getRecordFromLocalStorage(recordId) {
182
+ return window.localStorage.getItem(this.getLocalStorageKeyForRecord(recordId));
183
+ }
184
+ removeRecordFromLocalStorage(recordId) {
185
+ window.localStorage.removeItem(this.getLocalStorageKeyForRecord(recordId));
110
186
  }
111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Gn4Repository, deps: [{ token: i1.SearchApiService }, { token: i2.ElasticsearchService }, { token: i3.Gn4Converter }, { token: i1.RecordsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
187
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Gn4Repository, deps: [{ token: i1.HttpClient }, { token: i2.SearchApiService }, { token: i3.ElasticsearchService }, { token: i4.Gn4Converter }, { token: i2.RecordsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
112
188
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Gn4Repository }); }
113
189
  }
114
190
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Gn4Repository, decorators: [{
115
191
  type: Injectable
116
- }], ctorParameters: function () { return [{ type: i1.SearchApiService }, { type: i2.ElasticsearchService }, { type: i3.Gn4Converter }, { type: i1.RecordsApiService }]; } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2duNC1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSw0Q0FBNEMsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN0RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLElBQUksRUFFSixFQUFFLEVBQ0YsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQTtBQVdiLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsWUFBWSxFQUVaLGlCQUFpQixHQUNsQixNQUFNLG1EQUFtRCxDQUFBOzs7OztBQUsxRCxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUNVLFlBQThCLEVBQzlCLGVBQXFDLEVBQ3JDLFNBQXVCLEVBQ3ZCLGFBQWdDO1FBSGhDLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBc0I7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7SUFDdkMsQ0FBQztJQUVKLE1BQU0sQ0FBQyxFQUNMLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxJQUFJLEVBQ0osU0FBUyxFQUNULGNBQWMsR0FDRDtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVk7YUFDckIsTUFBTSxDQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FDWixJQUFJLENB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Q0osQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUNmLE1BQXFCLEVBQ3JCLHFCQUE4QjtRQUU5QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxJQUFJLENBQ2xFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ2hCLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQ3pELFNBQVMsQ0FDVixDQUNGLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxnQkFBd0I7UUFDdkMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQzVCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNuRCxDQUFBO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxnQkFBd0I7UUFDckMsT0FBTyxDQUNMLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixJQUFJLENBQUMsMkJBQTJCLENBQUMsZ0JBQWdCLENBQUMsQ0FDbkQsS0FBSyxJQUFJLENBQ1gsQ0FBQTtJQUNILENBQUM7K0dBNVFVLGFBQWE7bUhBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgUmVjb3Jkc0FwaVNlcnZpY2UsXG4gIFNlYXJjaEFwaVNlcnZpY2UsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3MvZ240L3NyYydcbmltcG9ydCB7IEVsYXN0aWNzZWFyY2hTZXJ2aWNlIH0gZnJvbSAnLi9lbGFzdGljc2VhcmNoJ1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgZnJvbSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN3aXRjaE1hcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcydcbmltcG9ydCB7IFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcmVwb3NpdG9yeS9yZWNvcmRzLXJlcG9zaXRvcnkuaW50ZXJmYWNlJ1xuaW1wb3J0IHtcbiAgU2VhcmNoUGFyYW1zLFxuICBTZWFyY2hSZXN1bHRzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gvc2VhcmNoLm1vZGVsJ1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb25zLFxuICBBZ2dyZWdhdGlvbnNQYXJhbXMsXG4gIEZpZWxkRmlsdGVycyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvc2VhcmNoJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7XG4gIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCxcbiAgR240Q29udmVydGVyLFxuICBHbjRTZWFyY2hSZXN1bHRzLFxuICBJc28xOTEzOUNvbnZlcnRlcixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYydcbmltcG9ydCB7IENhdGFsb2dSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR240UmVwb3NpdG9yeSBpbXBsZW1lbnRzIFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hBcGk6IFNlYXJjaEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hIZWxwZXI6IEVsYXN0aWNzZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ240TWFwcGVyOiBHbjRDb252ZXJ0ZXIsXG4gICAgcHJpdmF0ZSBnbjRSZWNvcmRzQXBpOiBSZWNvcmRzQXBpU2VydmljZVxuICApIHt9XG5cbiAgc2VhcmNoKHtcbiAgICBmaWx0ZXJzLFxuICAgIGZpZWxkcyxcbiAgICBvZmZzZXQsXG4gICAgbGltaXQsXG4gICAgc29ydCxcbiAgICBmaWx0ZXJJZHMsXG4gICAgZmlsdGVyR2VvbWV0cnksXG4gIH06IFNlYXJjaFBhcmFtcyk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0cz4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsdGVySWRzLFxuICAgICAgICAgICAgZmlsdGVyR2VvbWV0cnlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpLnRoZW4oKHJlY29yZHMpID0+ICh7XG4gICAgICAgICAgICBjb3VudDogcmVzdWx0cy5oaXRzLnRvdGFsPy52YWx1ZSB8fCAwLFxuICAgICAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0TWF0Y2hlc0NvdW50KGZpbHRlcnM6IEZpZWxkRmlsdGVycyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAncmVjb3Jkcy1jb3VudCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAuLi50aGlzLmduNFNlYXJjaEhlbHBlci5nZXRTZWFyY2hSZXF1ZXN0Qm9keShcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0cmFja190b3RhbF9oaXRzOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDApKVxuICB9XG5cbiAgZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRNZXRhZGF0YUJ5SWRQYXlsb2FkKHVuaXF1ZUlkZW50aWZpZXIpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+IHJlc3VsdHMuaGl0cy5oaXRzWzBdKSxcbiAgICAgICAgc3dpdGNoTWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgcmVjb3JkID8gdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZChyZWNvcmQpIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0U2ltaWxhclJlY29yZHMoc2ltaWxhclRvOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRSZWxhdGVkUmVjb3JkUGF5bG9hZChcbiAgICAgICAgICAgIHNpbWlsYXJUby50aXRsZSxcbiAgICAgICAgICAgIHNpbWlsYXJUby51bmlxdWVJZGVudGlmaWVyLFxuICAgICAgICAgICAgM1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cylcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG4gIGFnZ3JlZ2F0ZShwYXJhbXM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IE9ic2VydmFibGU8QWdncmVnYXRpb25zPiB7XG4gICAgLy8gaWYgYWdncmVnYXRpb25zIGFyZSBlbXB0eSwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCByaWdodCBhd2F5XG4gICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKSByZXR1cm4gb2Yoe30pXG5cbiAgICBjb25zdCBhZ2dyZWdhdGlvbnMgPSB0aGlzLmduNFNlYXJjaEhlbHBlci5idWlsZEFnZ3JlZ2F0aW9uc1BheWxvYWQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KGFnZ3JlZ2F0aW9ucykpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZS5hZ2dyZWdhdGlvbnMpLnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3Vycl06IHRoaXMuZ240U2VhcmNoSGVscGVyLnBhcnNlQWdncmVnYXRpb25SZXN1bHQoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuYWdncmVnYXRpb25zW2N1cnJdLFxuICAgICAgICAgICAgICAgIHBhcmFtc1tjdXJyXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZnV6enlTZWFyY2gocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0cz4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ240U2VhcmNoSGVscGVyLmJ1aWxkQXV0b2NvbXBsZXRlUGF5bG9hZChxdWVyeSkpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PlxuICAgICAgICAgIHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmRzKHJlc3VsdHMuaGl0cy5oaXRzKS50aGVuKChyZWNvcmRzKSA9PiAoe1xuICAgICAgICAgICAgY291bnQ6IHJlc3VsdHMuaGl0cy50b3RhbD8udmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJlY29yZHMsXG4gICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIHJlY29yZCBpcyBub3QgZm91bmRcbiAgICovXG4gIHByaXZhdGUgbG9hZFJlY29yZEFzWG1sKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFJlY29yZHNBcGlcbiAgICAgIC5nZXRSZWNvcmRBcyhcbiAgICAgICAgdW5pcXVlSWRlbnRpZmllcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCcsXG4gICAgICAgICdyZXNwb25zZScsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBodHRwSGVhZGVyQWNjZXB0OiAndGV4dC94bWwsYXBwbGljYXRpb24veG1sJyBhcyAnYXBwbGljYXRpb24veG1sJyB9IC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlc3BvbnNlIGlzIHBhcnNlZCBhcyB0ZXh0XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT5cbiAgICAgICAgICBlcnJvci5zdGF0dXMgPT09IDQwNCA/IG9mKG51bGwpIDogdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBnZW9uZXR3b3JrLXVpLWRyYWZ0LSR7dW5pcXVlSWRlbnRpZmllcn1gXG4gIH1cblxuICBvcGVuUmVjb3JkRm9yRWRpdGlvbihcbiAgICB1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCBib29sZWFuXSB8IG51bGw+IHtcbiAgICBjb25zdCBkcmFmdCQgPSBvZihcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgICAgdGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQodW5pcXVlSWRlbnRpZmllcilcbiAgICAgIClcbiAgICApXG4gICAgY29uc3QgcmVjb3JkQXNYbWwkID0gdGhpcy5sb2FkUmVjb3JkQXNYbWwodW5pcXVlSWRlbnRpZmllcilcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbZHJhZnQkLCByZWNvcmRBc1htbCRdKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChbZHJhZnQsIHJlY29yZEFzWG1sXSkgPT4ge1xuICAgICAgICBjb25zdCB4bWwgPSBkcmFmdCA/PyByZWNvcmRBc1htbFxuICAgICAgICBjb25zdCBpc1NhdmVkQWxyZWFkeSA9IHJlY29yZEFzWG1sICE9PSBudWxsXG4gICAgICAgIHJldHVybiBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoeG1sKVxuICAgICAgICAgIC5yZWFkUmVjb3JkKHhtbClcbiAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgIChyZWNvcmQpID0+XG4gICAgICAgICAgICAgIFtyZWNvcmQsIHhtbCwgaXNTYXZlZEFscmVhZHldIGFzIFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGJvb2xlYW5dXG4gICAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVJlY29yZFRvWG1sKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICByZWZlcmVuY2VSZWNvcmRTb3VyY2U/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAvLyBpZiB0aGVyZSdzIGEgcmVmZXJlbmNlIHJlY29yZCwgdXNlIHRoYXQgc3RhbmRhcmQ7IG90aGVyd2lzZSwgdXNlIGlzbzE5MTM5XG4gICAgY29uc3QgY29udmVydGVyID0gcmVmZXJlbmNlUmVjb3JkU291cmNlXG4gICAgICA/IGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudChyZWZlcmVuY2VSZWNvcmRTb3VyY2UpXG4gICAgICA6IG5ldyBJc28xOTEzOUNvbnZlcnRlcigpXG4gICAgcmV0dXJuIGZyb20oY29udmVydGVyLndyaXRlUmVjb3JkKHJlY29yZCwgcmVmZXJlbmNlUmVjb3JkU291cmNlKSlcbiAgfVxuXG4gIHNhdmVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY29yZFRvWG1sKHJlY29yZCwgcmVmZXJlbmNlUmVjb3JkU291cmNlKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZWNvcmRYbWwpID0+XG4gICAgICAgIHRoaXMuZ240UmVjb3Jkc0FwaVxuICAgICAgICAgIC5pbnNlcnQoXG4gICAgICAgICAgICAnTUVUQURBVEEnLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdPVkVSV1JJVEUnLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ19ub25lXycsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICByZWNvcmRYbWxcbiAgICAgICAgICApXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhSWQgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5tZXRhZGF0YUluZm9zKVswXVxuICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UubWV0YWRhdGFJbmZvc1ttZXRhZGF0YUlkXVswXS51dWlkXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBzYXZlUmVjb3JkQXNEcmFmdChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplUmVjb3JkVG9YbWwocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpLnBpcGUoXG4gICAgICB0YXAoKHJlY29yZFhtbCkgPT5cbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgIHRoaXMuZ2V0TG9jYWxTdG9yYWdlS2V5Rm9yUmVjb3JkKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKSxcbiAgICAgICAgICByZWNvcmRYbWxcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGNsZWFyUmVjb3JkRHJhZnQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFxuICAgICAgdGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQodW5pcXVlSWRlbnRpZmllcilcbiAgICApXG4gIH1cblxuICByZWNvcmRIYXNEcmFmdCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgICB0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZCh1bmlxdWVJZGVudGlmaWVyKVxuICAgICAgKSAhPT0gbnVsbFxuICAgIClcbiAgfVxufVxuIl19
192
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.SearchApiService }, { type: i3.ElasticsearchService }, { type: i4.Gn4Converter }, { type: i2.RecordsApiService }]; } });
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2duNC1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSw0Q0FBNEMsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN0RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixJQUFJLEVBRUosRUFBRSxFQUNGLE9BQU8sRUFDUCxTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sTUFBTSxDQUFBO0FBV2IsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUNMLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsWUFBWSxFQUVaLGlCQUFpQixHQUNsQixNQUFNLG1EQUFtRCxDQUFBO0FBRTFELE9BQU8sRUFDTCxVQUFVLEVBRVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUE7Ozs7OztBQUU3QixNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQTtBQUt0QyxNQUFNLE9BQU8sYUFBYTtJQUl4QixZQUNVLFVBQXNCLEVBQ3RCLFlBQThCLEVBQzlCLGVBQXFDLEVBQ3JDLFNBQXVCLEVBQ3ZCLGFBQWdDO1FBSmhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLG9CQUFlLEdBQWYsZUFBZSxDQUFzQjtRQUNyQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQVIxQyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENB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Q0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7K0dBdlhVLGFBQWE7bUhBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgUmVjb3Jkc0FwaVNlcnZpY2UsXG4gIFNlYXJjaEFwaVNlcnZpY2UsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3MvZ240L3NyYydcbmltcG9ydCB7IEVsYXN0aWNzZWFyY2hTZXJ2aWNlIH0gZnJvbSAnLi9lbGFzdGljc2VhcmNoJ1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgZXhoYXVzdE1hcCxcbiAgZnJvbSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcydcbmltcG9ydCB7IFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcmVwb3NpdG9yeS9yZWNvcmRzLXJlcG9zaXRvcnkuaW50ZXJmYWNlJ1xuaW1wb3J0IHtcbiAgU2VhcmNoUGFyYW1zLFxuICBTZWFyY2hSZXN1bHRzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gvc2VhcmNoLm1vZGVsJ1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb25zLFxuICBBZ2dyZWdhdGlvbnNQYXJhbXMsXG4gIEZpZWxkRmlsdGVycyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvc2VhcmNoJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7XG4gIGFzc2VydFZhbGlkWG1sLFxuICBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQsXG4gIEduNENvbnZlcnRlcixcbiAgR240U2VhcmNoUmVzdWx0cyxcbiAgSXNvMTkxMzlDb252ZXJ0ZXIsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMnXG5pbXBvcnQgeyBDYXRhbG9nUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcblxuY29uc3QgVEVNUE9SQVJZX0lEX1BSRUZJWCA9ICdURU1QLUlELSdcblxuZXhwb3J0IHR5cGUgUmVjb3JkQXNYbWwgPSBzdHJpbmdcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEduNFJlcG9zaXRvcnkgaW1wbGVtZW50cyBSZWNvcmRzUmVwb3NpdG9yeUludGVyZmFjZSB7XG4gIF9kcmFmdHNDaGFuZ2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuICBkcmFmdHNDaGFuZ2VkJCA9IHRoaXMuX2RyYWZ0c0NoYW5nZWQuYXNPYnNlcnZhYmxlKClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hBcGk6IFNlYXJjaEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hIZWxwZXI6IEVsYXN0aWNzZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ240TWFwcGVyOiBHbjRDb252ZXJ0ZXIsXG4gICAgcHJpdmF0ZSBnbjRSZWNvcmRzQXBpOiBSZWNvcmRzQXBpU2VydmljZVxuICApIHt9XG5cbiAgc2VhcmNoKHtcbiAgICBmaWx0ZXJzLFxuICAgIGZpZWxkcyxcbiAgICBvZmZzZXQsXG4gICAgbGltaXQsXG4gICAgc29ydCxcbiAgICBmaWx0ZXJJZHMsXG4gICAgZmlsdGVyR2VvbWV0cnksXG4gIH06IFNlYXJjaFBhcmFtcyk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0cz4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsdGVySWRzLFxuICAgICAgICAgICAgZmlsdGVyR2VvbWV0cnlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpLnRoZW4oKHJlY29yZHMpID0+ICh7XG4gICAgICAgICAgICBjb3VudDogcmVzdWx0cy5oaXRzLnRvdGFsPy52YWx1ZSB8fCAwLFxuICAgICAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0TWF0Y2hlc0NvdW50KGZpbHRlcnM6IEZpZWxkRmlsdGVycyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAncmVjb3Jkcy1jb3VudCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAuLi50aGlzLmduNFNlYXJjaEhlbHBlci5nZXRTZWFyY2hSZXF1ZXN0Qm9keShcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0cmFja190b3RhbF9oaXRzOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDApKVxuICB9XG5cbiAgZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRNZXRhZGF0YUJ5SWRQYXlsb2FkKHVuaXF1ZUlkZW50aWZpZXIpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+IHJlc3VsdHMuaGl0cy5oaXRzWzBdKSxcbiAgICAgICAgc3dpdGNoTWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgcmVjb3JkID8gdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZChyZWNvcmQpIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0U2ltaWxhclJlY29yZHMoc2ltaWxhclRvOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRSZWxhdGVkUmVjb3JkUGF5bG9hZChcbiAgICAgICAgICAgIHNpbWlsYXJUby50aXRsZSxcbiAgICAgICAgICAgIHNpbWlsYXJUby51bmlxdWVJZGVudGlmaWVyLFxuICAgICAgICAgICAgM1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cylcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgYWdncmVnYXRlKHBhcmFtczogQWdncmVnYXRpb25zUGFyYW1zKTogT2JzZXJ2YWJsZTxBZ2dyZWdhdGlvbnM+IHtcbiAgICAvLyBpZiBhZ2dyZWdhdGlvbnMgYXJlIGVtcHR5LCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHJpZ2h0IGF3YXlcbiAgICBpZiAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT09IDApIHJldHVybiBvZih7fSlcblxuICAgIGNvbnN0IGFnZ3JlZ2F0aW9ucyA9IHRoaXMuZ240U2VhcmNoSGVscGVyLmJ1aWxkQWdncmVnYXRpb25zUGF5bG9hZChwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0U2VhcmNoUmVxdWVzdEJvZHkoYWdncmVnYXRpb25zKSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBHbjRTZWFyY2hSZXN1bHRzKSA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3BvbnNlLmFnZ3JlZ2F0aW9ucykucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnIpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyXTogdGhpcy5nbjRTZWFyY2hIZWxwZXIucGFyc2VBZ2dyZWdhdGlvblJlc3VsdChcbiAgICAgICAgICAgICAgICByZXNwb25zZS5hZ2dyZWdhdGlvbnNbY3Vycl0sXG4gICAgICAgICAgICAgICAgcGFyYW1zW2N1cnJdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBmdXp6eVNlYXJjaChxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHRzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5nbjRTZWFyY2hIZWxwZXIuYnVpbGRBdXRvY29tcGxldGVQYXlsb2FkKHF1ZXJ5KSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpLnRoZW4oKHJlY29yZHMpID0+ICh7XG4gICAgICAgICAgICBjb3VudDogcmVzdWx0cy5oaXRzLnRvdGFsPy52YWx1ZSB8fCAwLFxuICAgICAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgb3BlblJlY29yZEZvckVkaXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl0gfCBudWxsPiB7XG4gICAgY29uc3QgZHJhZnQkID0gb2YodGhpcy5nZXRSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHVuaXF1ZUlkZW50aWZpZXIpKVxuICAgIGNvbnN0IHJlY29yZEFzWG1sJCA9IHRoaXMuZ2V0UmVjb3JkQXNYbWwodW5pcXVlSWRlbnRpZmllcilcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtkcmFmdCQsIHJlY29yZEFzWG1sJF0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKFtkcmFmdCwgcmVjb3JkQXNYbWxdKSA9PiB7XG4gICAgICAgIGNvbnN0IHhtbCA9IGRyYWZ0ID8/IHJlY29yZEFzWG1sXG4gICAgICAgIGNvbnN0IGlzU2F2ZWRBbHJlYWR5ID0gcmVjb3JkQXNYbWwgIT09IG51bGxcbiAgICAgICAgcmV0dXJuIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCh4bWwpXG4gICAgICAgICAgLnJlYWRSZWNvcmQoeG1sKVxuICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgKHJlY29yZCkgPT5cbiAgICAgICAgICAgICAgW3JlY29yZCwgeG1sLCBpc1NhdmVkQWxyZWFkeV0gYXMgW0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl1cbiAgICAgICAgICApXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIG9wZW5SZWNvcmRGb3JEdXBsaWNhdGlvbihcbiAgICB1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCBmYWxzZV0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkQXNYbWwodW5pcXVlSWRlbnRpZmllcikucGlwZShcbiAgICAgIHN3aXRjaE1hcChhc3luYyAoZmV0Y2hlZFJlY29yZEFzWG1sKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudChmZXRjaGVkUmVjb3JkQXNYbWwpXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGNvbnZlcnRlci5yZWFkUmVjb3JkKGZldGNoZWRSZWNvcmRBc1htbClcblxuICAgICAgICByZWNvcmQudW5pcXVlSWRlbnRpZmllciA9IGAke1RFTVBPUkFSWV9JRF9QUkVGSVh9JHtEYXRlLm5vdygpfWBcbiAgICAgICAgcmVjb3JkLnRpdGxlID0gYCR7cmVjb3JkLnRpdGxlfSAoQ29weSlgXG5cbiAgICAgICAgY29uc3QgcmVjb3JkQXNYbWwgPSBhd2FpdCBjb252ZXJ0ZXIud3JpdGVSZWNvcmQoXG4gICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgIGZldGNoZWRSZWNvcmRBc1htbFxuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zYXZlUmVjb3JkVG9Mb2NhbFN0b3JhZ2UocmVjb3JkQXNYbWwsIHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICAgICAgICB0aGlzLl9kcmFmdHNDaGFuZ2VkLm5leHQoKVxuXG4gICAgICAgIHJldHVybiBbcmVjb3JkLCByZWNvcmRBc1htbCwgZmFsc2VdIGFzIFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGZhbHNlXVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBzYXZlUmVjb3JkKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICByZWZlcmVuY2VSZWNvcmRTb3VyY2U/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVSZWNvcmRUb1htbChyZWNvcmQsIHJlZmVyZW5jZVJlY29yZFNvdXJjZSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVjb3JkWG1sKSA9PlxuICAgICAgICB0aGlzLmduNFJlY29yZHNBcGlcbiAgICAgICAgICAuaW5zZXJ0KFxuICAgICAgICAgICAgJ01FVEFEQVRBJyxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAnT1ZFUldSSVRFJyxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdfbm9uZV8nLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmVjb3JkWG1sXG4gICAgICAgICAgKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YUlkID0gT2JqZWN0LmtleXMocmVzcG9uc2UubWV0YWRhdGFJbmZvcylbMF1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm1ldGFkYXRhSW5mb3NbbWV0YWRhdGFJZF1bMF0udXVpZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgZHVwbGljYXRlRXh0ZXJuYWxSZWNvcmQocmVjb3JkRG93bmxvYWRVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RXh0ZXJuYWxSZWNvcmRBc1htbChyZWNvcmREb3dubG9hZFVybCkucGlwZShcbiAgICAgIGV4aGF1c3RNYXAoYXN5bmMgKGZldGNoZWRSZWNvcmRBc1htbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudChmZXRjaGVkUmVjb3JkQXNYbWwpXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGNvbnZlcnRlci5yZWFkUmVjb3JkKGZldGNoZWRSZWNvcmRBc1htbClcbiAgICAgICAgY29uc3QgdGVtcElkID0gdGhpcy5nZW5lcmF0ZVRlbXBvcmFyeUlkKClcblxuICAgICAgICByZWNvcmQudGl0bGUgPSBgJHtyZWNvcmQudGl0bGV9IChDb3B5KWBcbiAgICAgICAgcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIgPSB0ZW1wSWRcblxuICAgICAgICBjb25zdCByZWNvcmRBc1htbCA9IGF3YWl0IGNvbnZlcnRlci53cml0ZVJlY29yZChcbiAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgZmV0Y2hlZFJlY29yZEFzWG1sXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLnNhdmVSZWNvcmRUb0xvY2FsU3RvcmFnZShyZWNvcmRBc1htbCwgcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpXG4gICAgICAgIHRoaXMuX2RyYWZ0c0NoYW5nZWQubmV4dCgpXG5cbiAgICAgICAgcmV0dXJuIHRlbXBJZFxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGRlbGV0ZVJlY29yZCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRSZWNvcmRzQXBpLmRlbGV0ZVJlY29yZCh1bmlxdWVJZGVudGlmaWVyKVxuICB9XG5cbiAgZ2VuZXJhdGVUZW1wb3JhcnlJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtURU1QT1JBUllfSURfUFJFRklYfSR7RGF0ZS5ub3coKX1gXG4gIH1cblxuICBzYXZlUmVjb3JkQXNEcmFmdChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplUmVjb3JkVG9YbWwocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpLnBpcGUoXG4gICAgICB0YXAoKHJlY29yZFhtbCkgPT4ge1xuICAgICAgICB0aGlzLnNhdmVSZWNvcmRUb0xvY2FsU3RvcmFnZShyZWNvcmRYbWwsIHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICAgICAgICB0aGlzLl9kcmFmdHNDaGFuZ2VkLm5leHQoKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBjbGVhclJlY29yZERyYWZ0KHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlUmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKVxuICAgIHRoaXMuX2RyYWZ0c0NoYW5nZWQubmV4dCgpXG4gIH1cblxuICByZWNvcmRIYXNEcmFmdCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHVuaXF1ZUlkZW50aWZpZXIpICE9PSBudWxsXG4gIH1cblxuICBpc1JlY29yZE5vdFlldFNhdmVkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1bmlxdWVJZGVudGlmaWVyLnN0YXJ0c1dpdGgoVEVNUE9SQVJZX0lEX1BSRUZJWClcbiAgfVxuXG4gIC8vIGdlbmVyYXRlZCBieSBjb3BpbG90XG4gIGdldEFsbERyYWZ0cygpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT4ge1xuICAgIGNvbnN0IGl0ZW1zID0geyAuLi53aW5kb3cubG9jYWxTdG9yYWdlIH1cbiAgICBjb25zdCBkcmFmdHMgPSBPYmplY3Qua2V5cyhpdGVtcylcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2dlb25ldHdvcmstdWktZHJhZnQtJykpXG4gICAgICAubWFwKChrZXkpID0+IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKVxuICAgICAgLmZpbHRlcigoZHJhZnQpID0+IGRyYWZ0ICE9PSBudWxsKVxuICAgIHJldHVybiBmcm9tKFxuICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgIGRyYWZ0cy5tYXAoKGRyYWZ0KSA9PiBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoZHJhZnQpLnJlYWRSZWNvcmQoZHJhZnQpKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVjb3JkQXNYbWwodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240UmVjb3Jkc0FwaVxuICAgICAgLmdldFJlY29yZEFzKFxuICAgICAgICB1bmlxdWVJZGVudGlmaWVyLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAnYXBwbGljYXRpb24veG1sJyxcbiAgICAgICAgJ3Jlc3BvbnNlJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGh0dHBIZWFkZXJBY2NlcHQ6ICd0ZXh0L3htbCxhcHBsaWNhdGlvbi94bWwnIGFzICdhcHBsaWNhdGlvbi94bWwnIH0gLy8gdGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVzcG9uc2UgaXMgcGFyc2VkIGFzIHRleHRcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PlxuICAgICAgICAgIGVycm9yLnN0YXR1cyA9PT0gNDA0ID8gb2YobnVsbCkgOiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVJlY29yZFRvWG1sKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICByZWZlcmVuY2VSZWNvcmRTb3VyY2U/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAvLyBpZiB0aGVyZSdzIGEgcmVmZXJlbmNlIHJlY29yZCwgdXNlIHRoYXQgc3RhbmRhcmQ7IG90aGVyd2lzZSwgdXNlIGlzbzE5MTM5XG4gICAgY29uc3QgY29udmVydGVyID0gcmVmZXJlbmNlUmVjb3JkU291cmNlXG4gICAgICA/IGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudChyZWZlcmVuY2VSZWNvcmRTb3VyY2UpXG4gICAgICA6IG5ldyBJc28xOTEzOUNvbnZlcnRlcigpXG4gICAgcmV0dXJuIGZyb20oY29udmVydGVyLndyaXRlUmVjb3JkKHJlY29yZCwgcmVmZXJlbmNlUmVjb3JkU291cmNlKSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXh0ZXJuYWxSZWNvcmRBc1htbChcbiAgICByZWNvcmREb3dubG9hZFVybDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgIGNvbnN0IHJlc3BvbnNlVHlwZV8gPSAndGV4dCdcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsICd0ZXh0L3htbCxhcHBsaWNhdGlvbi94bWwnKVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldDxzdHJpbmc+KHJlY29yZERvd25sb2FkVXJsLCB7XG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiAnYm9keScsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVjb3JkQXNYbWxGaWxlKSA9PiB7XG4gICAgICAgICAgYXNzZXJ0VmFsaWRYbWwocmVjb3JkQXNYbWxGaWxlKVxuXG4gICAgICAgICAgcmV0dXJuIHJlY29yZEFzWG1sRmlsZVxuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBnZW9uZXR3b3JrLXVpLWRyYWZ0LSR7cmVjb3JkSWR9YCAvLyBOZXZlciBjaGFuZ2UgdGhpcyBwcmVmaXggYXMgaXQgaXMgYSBicmVha2luZyBjaGFuZ2VcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVJlY29yZFRvTG9jYWxTdG9yYWdlKHJlY29yZEFzWG1sOiBSZWNvcmRBc1htbCwgcmVjb3JkSWQ6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIHRoaXMuZ2V0TG9jYWxTdG9yYWdlS2V5Rm9yUmVjb3JkKHJlY29yZElkKSxcbiAgICAgIHJlY29yZEFzWG1sXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHJlY29yZElkOiBzdHJpbmcpOiBSZWNvcmRBc1htbCB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgIHRoaXMuZ2V0TG9jYWxTdG9yYWdlS2V5Rm9yUmVjb3JkKHJlY29yZElkKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVjb3JkRnJvbUxvY2FsU3RvcmFnZShyZWNvcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuZ2V0TG9jYWxTdG9yYWdlS2V5Rm9yUmVjb3JkKHJlY29yZElkKSlcbiAgfVxufVxuIl19