geonetwork-ui 2.6.0-dev.9df114cd4 → 2.6.0-dev.a0bd52a21

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 (504) hide show
  1. package/esm2022/libs/api/metadata-converter/src/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/base.converter.mjs +1 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +3 -1
  4. package/esm2022/libs/api/metadata-converter/src/lib/common/resource-types.mjs +17 -15
  5. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +42 -6
  6. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +8 -4
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +5 -2
  9. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +6 -6
  10. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +5 -5
  11. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +3 -1
  12. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +4 -12
  13. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +79 -16
  14. package/esm2022/libs/api/repository/src/lib/gn4/gn4.provider.mjs +7 -1
  15. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +7 -1
  16. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  17. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  18. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  19. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +45 -9
  20. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +2 -2
  21. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +32 -2
  22. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +25 -6
  23. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  24. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +273 -0
  25. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +2 -3
  26. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +1 -1
  27. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +5 -5
  28. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
  29. package/esm2022/libs/feature/record/src/index.mjs +2 -4
  30. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +3 -3
  31. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +5 -9
  32. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +3 -3
  33. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +7 -11
  34. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +6 -3
  35. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +33 -7
  36. package/esm2022/libs/feature/record/src/lib/record-meta/record-meta.component.mjs +1 -1
  37. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +3 -1
  38. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +14 -5
  39. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +13 -15
  40. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +7 -1
  41. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +3 -1
  42. package/esm2022/libs/feature/router/src/lib/default/constants.mjs +3 -1
  43. package/esm2022/libs/feature/router/src/lib/default/router.config.mjs +1 -1
  44. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +10 -2
  45. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +9 -3
  46. package/esm2022/libs/feature/search/src/index.mjs +2 -2
  47. package/esm2022/libs/feature/search/src/lib/constants.mjs +4 -2
  48. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +4 -4
  49. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +13 -19
  50. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +5 -3
  51. package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -2
  52. package/esm2022/libs/feature/search/src/lib/results-hits/results-hits.container.component.mjs +41 -0
  53. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +30 -10
  54. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  55. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +70 -1
  56. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +4 -3
  57. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +3 -3
  58. package/esm2022/libs/ui/dataviz/src/lib/chart/chart.component.mjs +5 -3
  59. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +11 -6
  60. package/esm2022/libs/ui/elements/src/index.mjs +5 -1
  61. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  62. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +3 -3
  63. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +18 -7
  64. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +55 -0
  65. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +3 -3
  66. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +42 -83
  67. package/esm2022/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.mjs +59 -0
  68. package/esm2022/libs/ui/elements/src/lib/kind-badge/kind-badge.component.mjs +68 -0
  69. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +3 -3
  70. package/esm2022/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.mjs +3 -3
  71. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
  72. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +8 -5
  73. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +37 -12
  74. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +5 -1
  75. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +72 -0
  76. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +17 -7
  77. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +169 -0
  78. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +26 -4
  79. package/esm2022/libs/ui/inputs/src/index.mjs +3 -1
  80. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
  81. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -2
  82. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
  83. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +3 -3
  84. package/esm2022/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.mjs +42 -0
  85. package/esm2022/libs/ui/inputs/src/lib/inline-filter/inline-filter.model.mjs +2 -0
  86. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +68 -0
  87. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +3 -3
  88. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +8 -9
  89. package/esm2022/libs/ui/layout/src/index.mjs +3 -1
  90. package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +48 -11
  91. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +3 -3
  92. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  93. package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +34 -13
  94. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +25 -3
  95. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +3 -3
  96. package/esm2022/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +6 -6
  97. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +73 -0
  98. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +4 -12
  99. package/esm2022/libs/ui/map/src/index.mjs +2 -1
  100. package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +29 -4
  101. package/esm2022/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.mjs +80 -0
  102. package/esm2022/libs/ui/search/src/index.mjs +3 -1
  103. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +4 -8
  104. package/esm2022/libs/ui/search/src/lib/results-hits-number/results-hits-number.component.mjs +3 -3
  105. package/esm2022/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.mjs +53 -0
  106. package/esm2022/libs/ui/search/src/lib/results-list/results-layout.config.mjs +2 -2
  107. package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
  108. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +21 -12
  109. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +39 -17
  110. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +19 -5
  111. package/esm2022/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.mjs +3 -3
  112. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +2 -1
  113. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +2 -1
  114. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +42 -1
  115. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +24 -2
  116. package/esm2022/libs/util/shared/src/index.mjs +2 -1
  117. package/esm2022/libs/util/shared/src/lib/gn-ui-version.mjs +6 -0
  118. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  119. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +16 -6
  120. package/esm2022/translations/de.json +75 -8
  121. package/esm2022/translations/en.json +77 -10
  122. package/esm2022/translations/es.json +74 -7
  123. package/esm2022/translations/fr.json +76 -9
  124. package/esm2022/translations/it.json +81 -14
  125. package/esm2022/translations/nl.json +74 -7
  126. package/esm2022/translations/pt.json +74 -7
  127. package/fesm2022/geonetwork-ui.mjs +3585 -1487
  128. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  129. package/libs/api/metadata-converter/src/index.d.ts +1 -0
  130. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  131. package/libs/api/metadata-converter/src/lib/base.converter.d.ts.map +1 -1
  132. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  133. package/libs/api/metadata-converter/src/lib/common/resource-types.d.ts +21 -0
  134. package/libs/api/metadata-converter/src/lib/common/resource-types.d.ts.map +1 -1
  135. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  136. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +0 -1
  137. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  138. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
  139. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  140. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  141. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  142. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  143. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  144. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
  145. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  146. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +13 -2
  147. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  148. package/libs/api/repository/src/lib/gn4/gn4.provider.d.ts.map +1 -1
  149. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
  150. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  151. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  152. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  153. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +23 -17
  154. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  155. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +6 -0
  156. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  157. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +12 -8
  158. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  159. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +1 -0
  160. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  161. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +5 -2
  162. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  163. package/libs/feature/editor/src/index.d.ts +1 -0
  164. package/libs/feature/editor/src/index.d.ts.map +1 -1
  165. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +52 -0
  166. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -0
  167. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts.map +1 -1
  168. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +6 -6
  169. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  170. 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
  171. package/libs/feature/record/src/index.d.ts +1 -3
  172. package/libs/feature/record/src/index.d.ts.map +1 -1
  173. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +9 -1
  174. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  175. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +2 -3
  176. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  177. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +1 -2
  178. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  179. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts +2 -1
  180. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts.map +1 -1
  181. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  182. package/libs/feature/record/src/lib/record-meta/record-meta.component.d.ts +2 -2
  183. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +10 -0
  184. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  185. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +9 -1
  186. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  187. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -21
  188. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  189. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +2 -0
  190. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  191. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  192. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  193. package/libs/feature/router/src/lib/default/constants.d.ts +2 -0
  194. package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
  195. package/libs/feature/router/src/lib/default/router.config.d.ts +2 -0
  196. package/libs/feature/router/src/lib/default/router.config.d.ts.map +1 -1
  197. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  198. package/libs/feature/router/src/lib/default/state/router.facade.d.ts +5 -0
  199. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  200. package/libs/feature/search/src/index.d.ts +1 -1
  201. package/libs/feature/search/src/index.d.ts.map +1 -1
  202. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  203. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  204. package/libs/feature/search/src/lib/feature-search.module.d.ts +4 -2
  205. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  206. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  207. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  208. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -1
  209. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -1
  210. package/libs/feature/search/src/lib/results-hits/results-hits.container.component.d.ts +21 -0
  211. package/libs/feature/search/src/lib/results-hits/results-hits.container.component.d.ts.map +1 -0
  212. package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts +5 -3
  213. package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts.map +1 -1
  214. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  215. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  216. package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -0
  217. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  218. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  219. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +2 -1
  220. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts.map +1 -1
  221. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts +6 -1
  222. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
  223. package/libs/ui/elements/src/index.d.ts +4 -0
  224. package/libs/ui/elements/src/index.d.ts.map +1 -1
  225. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts +1 -1
  226. package/libs/ui/elements/src/lib/download-item/download-item.component.d.ts.map +1 -1
  227. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +7 -1
  228. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  229. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +15 -0
  230. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -0
  231. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +6 -13
  232. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  233. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts +14 -0
  234. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts.map +1 -0
  235. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts +13 -0
  236. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts.map +1 -0
  237. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts +1 -1
  238. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +1 -1
  239. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +2 -2
  240. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  241. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +3 -0
  242. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  243. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
  244. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +27 -0
  245. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -0
  246. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +8 -1
  247. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
  248. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts +31 -0
  249. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -0
  250. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +5 -1
  251. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  252. package/libs/ui/inputs/src/index.d.ts +2 -0
  253. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  254. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  255. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  256. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.d.ts +14 -0
  257. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.d.ts.map +1 -0
  258. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.model.d.ts +6 -0
  259. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.model.d.ts.map +1 -0
  260. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +17 -0
  261. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -0
  262. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +25 -24
  263. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  264. package/libs/ui/layout/src/index.d.ts +2 -0
  265. package/libs/ui/layout/src/index.d.ts.map +1 -1
  266. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts +9 -2
  267. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts.map +1 -1
  268. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  269. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  270. package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts +15 -8
  271. package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts.map +1 -1
  272. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +5 -1
  273. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  274. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +22 -0
  275. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -0
  276. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  277. package/libs/ui/map/src/index.d.ts +1 -0
  278. package/libs/ui/map/src/index.d.ts.map +1 -1
  279. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts +6 -2
  280. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts.map +1 -1
  281. package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.d.ts +15 -0
  282. package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.d.ts.map +1 -0
  283. package/libs/ui/search/src/index.d.ts +2 -0
  284. package/libs/ui/search/src/index.d.ts.map +1 -1
  285. package/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.d.ts +17 -0
  286. package/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.d.ts.map +1 -0
  287. package/libs/ui/search/src/lib/results-list/results-list.component.d.ts.map +1 -1
  288. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -3
  289. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  290. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +10 -4
  291. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  292. package/libs/ui/search/src/lib/ui-search.module.d.ts +22 -19
  293. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  294. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  295. package/libs/util/app-config/src/lib/fixtures.d.ts.map +1 -1
  296. package/libs/util/i18n/src/lib/i18n.constants.d.ts +1 -0
  297. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  298. package/libs/util/i18n/src/lib/language-codes.d.ts +23 -1
  299. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  300. package/libs/util/shared/src/index.d.ts +1 -0
  301. package/libs/util/shared/src/index.d.ts.map +1 -1
  302. package/libs/util/shared/src/lib/gn-ui-version.d.ts +3 -0
  303. package/libs/util/shared/src/lib/gn-ui-version.d.ts.map +1 -0
  304. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts +3 -3
  305. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  306. package/libs/util/shared/src/lib/links/link-utils.d.ts +14 -7
  307. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  308. package/package.json +2 -2
  309. package/src/libs/api/metadata-converter/src/index.ts +1 -0
  310. package/src/libs/api/metadata-converter/src/lib/base.converter.ts +1 -4
  311. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +1 -0
  312. package/src/libs/api/metadata-converter/src/lib/common/resource-types.ts +29 -15
  313. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +2 -2
  314. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +3 -3
  315. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  316. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +2 -2
  317. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +64 -6
  318. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +0 -1
  319. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +13 -3
  320. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +5 -1
  321. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +10 -6
  322. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +7 -4
  323. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +2 -0
  324. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +3 -11
  325. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +118 -16
  326. package/src/libs/api/repository/src/lib/gn4/gn4.provider.ts +6 -0
  327. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +11 -0
  328. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  329. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +24 -11
  330. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +6 -0
  331. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +36 -26
  332. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +16 -2
  333. package/src/libs/common/fixtures/src/lib/record-link.fixtures.ts +5 -5
  334. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +64 -1
  335. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.html +12 -9
  336. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +54 -10
  337. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +37 -0
  338. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +1 -0
  339. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +27 -1
  340. package/src/libs/feature/editor/src/index.ts +1 -0
  341. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +120 -0
  342. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +325 -0
  343. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +1 -2
  344. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +2 -2
  345. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +2 -2
  346. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +2 -2
  347. package/src/libs/feature/record/src/index.ts +1 -3
  348. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +16 -10
  349. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +2 -3
  350. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +1 -1
  351. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +4 -5
  352. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.html +2 -2
  353. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.ts +1 -0
  354. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +25 -16
  355. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +35 -4
  356. package/src/libs/feature/record/src/lib/record-meta/record-meta.component.ts +2 -2
  357. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +10 -0
  358. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +27 -3
  359. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +21 -17
  360. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +12 -0
  361. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +9 -0
  362. package/src/libs/feature/router/src/lib/default/constants.ts +2 -0
  363. package/src/libs/feature/router/src/lib/default/router.config.ts +2 -0
  364. package/src/libs/feature/router/src/lib/default/router.service.ts +10 -0
  365. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +10 -1
  366. package/src/libs/feature/search/src/index.ts +1 -1
  367. package/src/libs/feature/search/src/lib/constants.ts +3 -1
  368. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -2
  369. package/src/libs/feature/search/src/lib/feature-search.module.ts +9 -10
  370. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -1
  371. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +1 -0
  372. package/src/libs/feature/search/src/lib/record-url.token.ts +10 -1
  373. package/src/libs/feature/search/src/lib/results-hits/results-hits.container.component.css +0 -0
  374. package/src/libs/feature/search/src/lib/results-hits/results-hits.container.component.html +16 -0
  375. package/src/libs/feature/search/src/lib/results-hits/results-hits.container.component.ts +59 -0
  376. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.html +1 -0
  377. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +26 -5
  378. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  379. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  380. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +4 -5
  381. package/src/libs/feature/search/src/lib/utils/service/fields.ts +99 -0
  382. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -1
  383. package/src/libs/ui/dataviz/src/lib/chart/chart.component.ts +2 -1
  384. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +6 -3
  385. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +5 -4
  386. package/src/libs/ui/elements/src/index.ts +4 -0
  387. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -4
  388. package/src/libs/ui/elements/src/lib/download-item/download-item.component.html +8 -5
  389. package/src/libs/ui/elements/src/lib/download-item/download-item.component.ts +2 -2
  390. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +38 -7
  391. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +29 -2
  392. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.css +4 -0
  393. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +13 -0
  394. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +54 -0
  395. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +1 -1
  396. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +68 -141
  397. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +38 -97
  398. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.html +69 -0
  399. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.ts +61 -0
  400. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.css +6 -0
  401. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.html +11 -0
  402. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.ts +70 -0
  403. package/src/libs/ui/elements/src/lib/link-card/link-card.component.html +5 -2
  404. package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +3 -7
  405. package/src/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.html +3 -5
  406. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +12 -9
  407. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +9 -0
  408. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +24 -7
  409. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +12 -4
  410. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +2 -3
  411. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +48 -9
  412. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +4 -0
  413. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +107 -0
  414. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +83 -0
  415. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +8 -29
  416. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +14 -1
  417. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.css +0 -0
  418. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.html +110 -0
  419. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +191 -0
  420. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +11 -1
  421. package/src/libs/ui/inputs/src/index.ts +2 -0
  422. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  423. package/src/libs/ui/inputs/src/lib/button/button.component.ts +2 -2
  424. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
  425. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +1 -1
  426. package/src/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.html +23 -0
  427. package/src/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.ts +44 -0
  428. package/src/libs/ui/inputs/src/lib/inline-filter/inline-filter.model.ts +5 -0
  429. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.css +0 -0
  430. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +43 -0
  431. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +77 -0
  432. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +3 -4
  433. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -3
  434. package/src/libs/ui/layout/src/index.ts +2 -0
  435. package/src/libs/ui/layout/src/lib/block-list/block-list.component.css +22 -0
  436. package/src/libs/ui/layout/src/lib/block-list/block-list.component.html +2 -2
  437. package/src/libs/ui/layout/src/lib/block-list/block-list.component.ts +43 -5
  438. package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +0 -1
  439. package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +1 -1
  440. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  441. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  442. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.html +24 -8
  443. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.ts +36 -10
  444. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +4 -7
  445. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +20 -0
  446. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.html +1 -1
  447. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.html +17 -5
  448. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.ts +3 -3
  449. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +27 -0
  450. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +91 -0
  451. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +2 -6
  452. package/src/libs/ui/map/src/index.ts +1 -0
  453. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.html +3 -3
  454. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.ts +27 -3
  455. package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.css +0 -0
  456. package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.html +4 -0
  457. package/src/libs/{feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.ts → ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts} +8 -8
  458. package/src/libs/ui/search/src/index.ts +2 -0
  459. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +9 -81
  460. package/src/libs/ui/search/src/lib/results-hits-number/results-hits-number.component.html +1 -1
  461. package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.html +25 -0
  462. package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.ts +53 -0
  463. package/src/libs/ui/search/src/lib/results-list/results-layout.config.ts +2 -2
  464. package/src/libs/ui/search/src/lib/results-list/results-list.component.html +1 -0
  465. package/src/libs/ui/search/src/lib/results-list/results-list.component.ts +0 -1
  466. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +16 -6
  467. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +15 -11
  468. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +4 -0
  469. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +31 -24
  470. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +33 -14
  471. package/src/libs/ui/search/src/lib/ui-search.module.ts +8 -0
  472. package/src/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.html +2 -1
  473. package/src/libs/util/app-config/src/lib/app-config.ts +1 -0
  474. package/src/libs/util/app-config/src/lib/fixtures.ts +1 -0
  475. package/src/libs/util/i18n/src/lib/i18n.constants.ts +42 -0
  476. package/src/libs/util/i18n/src/lib/language-codes.ts +23 -1
  477. package/src/libs/util/shared/src/index.ts +1 -0
  478. package/src/libs/util/shared/src/lib/gn-ui-version.ts +8 -0
  479. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +15 -3
  480. package/src/libs/util/shared/src/lib/links/link-utils.ts +33 -12
  481. package/tailwind.base.config.js +3 -0
  482. package/tailwind.base.css +5 -17
  483. package/translations/de.json +75 -8
  484. package/translations/en.json +77 -10
  485. package/translations/es.json +74 -7
  486. package/translations/fr.json +76 -9
  487. package/translations/it.json +81 -14
  488. package/translations/nl.json +74 -7
  489. package/translations/pt.json +74 -7
  490. package/translations/sk.json +74 -7
  491. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.mjs +0 -79
  492. package/esm2022/libs/feature/record/src/lib/gn-ui-version.token.mjs +0 -3
  493. package/esm2022/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.mjs +0 -18
  494. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts +0 -15
  495. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts.map +0 -1
  496. package/libs/feature/record/src/lib/gn-ui-version.token.d.ts +0 -3
  497. package/libs/feature/record/src/lib/gn-ui-version.token.d.ts.map +0 -1
  498. package/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.d.ts +0 -9
  499. package/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.d.ts.map +0 -1
  500. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.html +0 -1
  501. package/src/libs/feature/record/src/lib/gn-ui-version.token.ts +0 -3
  502. package/src/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.html +0 -4
  503. package/src/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.ts +0 -10
  504. /package/src/libs/feature/editor/src/lib/components/{record-form/form-field/form-field-map-container/form-field-map-container.component.css → multilingual-panel/multilingual-panel.component.css} +0 -0
@@ -73,11 +73,11 @@ export class ElasticsearchService {
73
73
  registerRuntimeField(fieldName, expression) {
74
74
  this.runtimeFields[fieldName] = expression;
75
75
  }
76
- getMetadataByIdPayload(uuid) {
76
+ getMetadataByIdsPayload(uuids) {
77
77
  return {
78
78
  query: {
79
79
  ids: {
80
- values: [uuid],
80
+ values: uuids,
81
81
  },
82
82
  },
83
83
  };
@@ -224,14 +224,6 @@ export class ElasticsearchService {
224
224
  }
225
225
  mustNotFilters() {
226
226
  return [
227
- {
228
- ...this.queryFilterOnValues('resourceType', [
229
- 'service',
230
- 'map',
231
- 'map/static',
232
- 'mapDigital',
233
- ]),
234
- },
235
227
  {
236
228
  query_string: {
237
229
  query: 'resourceType:featureCatalog AND !resourceType:dataset AND !cl_level.key:dataset',
@@ -330,7 +322,7 @@ export class ElasticsearchService {
330
322
  must_not: this.mustNotFilters(),
331
323
  },
332
324
  },
333
- _source: ['resourceTitleObject', 'uuid'],
325
+ _source: ['resourceTitleObject', 'uuid', 'resourceType'],
334
326
  from: 0,
335
327
  size: 20,
336
328
  };
@@ -512,4 +504,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
512
504
  type: Inject,
513
505
  args: [METADATA_LANGUAGE]
514
506
  }] }] });
515
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxhc3RpY3NlYXJjaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvcmVwb3NpdG9yeS9zcmMvbGliL2duNC9lbGFzdGljc2VhcmNoL2VsYXN0aWNzZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFNUQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixpQkFBaUIsR0FFbEIsTUFBTSxZQUFZLENBQUE7QUFXbkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFXM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7OztBQVE1RCxNQUFNLE9BQU8sb0JBQW9CO0lBTS9CLFlBQ1UsV0FBd0IsRUFDZSxZQUFvQjtRQUQzRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNlLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBUHJFLHNEQUFzRDtRQUN0RCxtR0FBbUc7UUFDM0Ysa0JBQWEsR0FBMkIsRUFBRSxDQUFBO1FBQzFDLFVBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQTtJQUtsQyxDQUFDO0lBRUosb0JBQW9CLENBQ2xCLGVBQW9CLEVBQUUsRUFDdEIsSUFBSSxHQUFHLENBQUMsRUFDUixJQUFJLEdBQUcsQ0FBQyxFQUNSLFNBQXNCLElBQUksRUFDMUIsZ0JBQStCLElBQUksRUFDbkMsZ0JBQStCLEVBQUUsRUFDakMsZ0JBQStCLEVBQUUsRUFDakMsS0FBZ0IsRUFDaEIsUUFBbUI7UUFFbkIsTUFBTSxPQUFPLEdBQUc7WUFDZCxZQUFZO1lBQ1osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJLEVB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RSxFQUFFLENBQUMsQ0FBQztvQkFDeEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHO29CQUNwQixTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUseUVBQXlFO29CQUM3RyxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVM7aUJBQ3hCLENBQUMsQ0FBQyxDQUFBO2dCQUNILE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQSxDQUFDLFlBQVk7Z0JBQzFCLE9BQU87b0JBQ0wsT0FBTztpQkFDUixDQUFBO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQXhrQlUsb0JBQW9CLDZDQVFULGlCQUFpQjttSEFSNUIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVNJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJ2dlb2pzb24nXG5pbXBvcnQge1xuICBFU19RVUVSWV9GSUVMRFNfUFJJT1JJVFksXG4gIEVTX1NPVVJDRV9TVU1NQVJZLFxuICBFc1F1ZXJ5RmllbGRzUHJpb3JpdHlUeXBlLFxufSBmcm9tICcuL2NvbnN0YW50J1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb24sXG4gIEFnZ3JlZ2F0aW9uUGFyYW1zLFxuICBBZ2dyZWdhdGlvbnNQYXJhbXMsXG4gIEZpZWxkRmlsdGVyLFxuICBGaWVsZEZpbHRlcnMsXG4gIEZpbHRlclF1ZXJ5LFxuICBGaWx0ZXJzQWdncmVnYXRpb25QYXJhbXMsXG4gIFNvcnRCeUZpZWxkLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gnXG5pbXBvcnQgeyBNRVRBREFUQV9MQU5HVUFHRSB9IGZyb20gJy4uLy4uL21ldGFkYXRhLWxhbmd1YWdlJ1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb25SZXN1bHQsXG4gIEVzU2VhcmNoUGFyYW1zLFxuICBGaWx0ZXJzQWdncmVnYXRpb25SZXN1bHQsXG4gIEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBSZXF1ZXN0RmllbGRzLFxuICBTZWFyY2hGaWx0ZXJzLFxuICBTb3J0UGFyYW1zLFxuICBUZXJtc0FnZ3JlZ2F0aW9uUmVzdWx0LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjJ1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5pbXBvcnQgeyBmb3JtYXREYXRlLCBpc0RhdGVSYW5nZSB9IGZyb20gJy4vZGF0ZS1yYW5nZS51dGlscydcbmltcG9ydCB7IENhdGFsb2dSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5cbmV4cG9ydCB0eXBlIERhdGVSYW5nZSA9IHsgc3RhcnQ/OiBEYXRlOyBlbmQ/OiBEYXRlIH1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVsYXN0aWNzZWFyY2hTZXJ2aWNlIHtcbiAgLy8gcnVudGltZSBmaWVsZHMgYXJlIGNvbXB1dGVkIHVzaW5nIGEgUGFpbmxlc3Mgc2NyaXB0XG4gIC8vIHNlZTogaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lbGFzdGljc2VhcmNoL3JlZmVyZW5jZS9jdXJyZW50L3J1bnRpbWUtbWFwcGluZy1maWVsZHMuaHRtbFxuICBwcml2YXRlIHJ1bnRpbWVGaWVsZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICBwcml2YXRlIGxhbmczID0gdGhpcy5sYW5nU2VydmljZS5pc28zXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNRVRBREFUQV9MQU5HVUFHRSkgcHJpdmF0ZSBtZXRhZGF0YUxhbmc6IHN0cmluZ1xuICApIHt9XG5cbiAgZ2V0U2VhcmNoUmVxdWVzdEJvZHkoXG4gICAgYWdncmVnYXRpb25zOiBhbnkgPSB7fSxcbiAgICBzaXplID0gMCxcbiAgICBmcm9tID0gMCxcbiAgICBzb3J0Qnk6IFNvcnRCeUZpZWxkID0gbnVsbCxcbiAgICByZXF1ZXN0RmllbGRzOiBSZXF1ZXN0RmllbGRzID0gbnVsbCxcbiAgICBzZWFyY2hGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJzID0ge30sXG4gICAgY29uZmlnRmlsdGVyczogU2VhcmNoRmlsdGVycyA9IHt9LFxuICAgIHV1aWRzPzogc3RyaW5nW10sXG4gICAgZ2VvbWV0cnk/OiBHZW9tZXRyeVxuICApOiBFc1NlYXJjaFBhcmFtcyB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGFnZ3JlZ2F0aW9ucyxcbiAgICAgIGZyb20sXG4gICAgICBzaXplLFxuICAgICAgc29ydDogdGhpcy5idWlsZFBheWxvYWRTb3J0KHNvcnRCeSksXG4gICAgICBxdWVyeTogdGhpcy5idWlsZFBheWxvYWRRdWVyeShcbiAgICAgICAgc2VhcmNoRmlsdGVycyxcbiAgICAgICAgY29uZmlnRmlsdGVycyxcbiAgICAgICAgdXVpZHMsXG4gICAgICAgIGdlb21ldHJ5XG4gICAgICApLFxuICAgICAgLi4uKHNpemUgPiAwID8geyB0cmFja190b3RhbF9oaXRzOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4ocmVxdWVzdEZpZWxkcyAmJiB7IF9zb3VyY2U6IHJlcXVlc3RGaWVsZHMgfSksXG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc1J1bnRpbWVGaWVsZHMocGF5bG9hZClcbiAgICByZXR1cm4gcGF5bG9hZFxuICB9XG5cbiAgLy8gcGF5bG9hZCBvYmplY3Qgd2lsbCBiZSBtdXRhdGVkXG4gIHByaXZhdGUgcHJvY2Vzc1J1bnRpbWVGaWVsZHMocGF5bG9hZDogRXNTZWFyY2hQYXJhbXMpOiBFc1NlYXJjaFBhcmFtcyB7XG4gICAgY29uc3QgYWRkTWFwcGluZyA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFwYXlsb2FkLnJ1bnRpbWVfbWFwcGluZ3MpIHBheWxvYWQucnVudGltZV9tYXBwaW5ncyA9IHt9XG4gICAgICBwYXlsb2FkLnJ1bnRpbWVfbWFwcGluZ3NbZmllbGROYW1lXSA9IHtcbiAgICAgICAgdHlwZTogJ2tleXdvcmQnLFxuICAgICAgICBzY3JpcHQ6IHRoaXMucnVudGltZUZpZWxkc1tmaWVsZE5hbWVdLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBsb29rRm9yRmllbGQgPSAobm9kZTogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgbm9kZS5mb3JFYWNoKGxvb2tGb3JGaWVsZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICAgIGlmICgnZmllbGQnIGluIG5vZGUgJiYgdHlwZW9mIG5vZGUuZmllbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChub2RlLmZpZWxkIGluIHRoaXMucnVudGltZUZpZWxkcykge1xuICAgICAgICAgIGFkZE1hcHBpbmcobm9kZS5maWVsZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBydW50aW1lRmllbGQgaW4gdGhpcy5ydW50aW1lRmllbGRzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBydW50aW1lRmllbGQgaW4gbm9kZSAmJlxuICAgICAgICAgIChub2RlW3J1bnRpbWVGaWVsZF0gPT09ICdhc2MnIHx8IG5vZGVbcnVudGltZUZpZWxkXSA9PT0gJ2Rlc2MnKVxuICAgICAgICApIHtcbiAgICAgICAgICBhZGRNYXBwaW5nKHJ1bnRpbWVGaWVsZClcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgJ3F1ZXJ5JyBpbiBub2RlICYmXG4gICAgICAgICAgdHlwZW9mIG5vZGUucXVlcnkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgbm9kZS5xdWVyeS5pbmRleE9mKHJ1bnRpbWVGaWVsZCArICc6JykgPiAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBhZGRNYXBwaW5nKHJ1bnRpbWVGaWVsZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gbm9kZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5vZGVba2V5XSA9PT0gJ29iamVjdCcpIGxvb2tGb3JGaWVsZChub2RlW2tleV0pXG4gICAgICB9XG4gICAgfVxuICAgIGxvb2tGb3JGaWVsZChwYXlsb2FkLmFnZ3JlZ2F0aW9ucylcbiAgICBsb29rRm9yRmllbGQocGF5bG9hZC5zb3J0KVxuICAgIGxvb2tGb3JGaWVsZChwYXlsb2FkLnF1ZXJ5KVxuICAgIHJldHVybiBwYXlsb2FkXG4gIH1cblxuICByZWdpc3RlclJ1bnRpbWVGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5ydW50aW1lRmllbGRzW2ZpZWxkTmFtZV0gPSBleHByZXNzaW9uXG4gIH1cblxuICBnZXRNZXRhZGF0YUJ5SWRQYXlsb2FkKHV1aWQ6IHN0cmluZyk6IEVzU2VhcmNoUGFyYW1zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgaWRzOiB7XG4gICAgICAgICAgdmFsdWVzOiBbdXVpZF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIGdldFJlbGF0ZWRSZWNvcmRQYXlsb2FkKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICBzaXplID0gNixcbiAgICBfc291cmNlID0gWy4uLkVTX1NPVVJDRV9TVU1NQVJZLCAnYWxsS2V5d29yZHMnLCAnY3JlYXRlRGF0ZSddXG4gICk6IEVzU2VhcmNoUGFyYW1zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgYm9vbDoge1xuICAgICAgICAgIG11c3Q6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbW9yZV9saWtlX3RoaXM6IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgICAgICdyZXNvdXJjZVRpdGxlT2JqZWN0LmRlZmF1bHQnLFxuICAgICAgICAgICAgICAgICAgJ3Jlc291cmNlQWJzdHJhY3RPYmplY3QuZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgICAnYWxsS2V5d29yZHMnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgbGlrZTogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkb2M6IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVRpdGxlT2JqZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZWNvcmQudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUFic3RyYWN0T2JqZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZWNvcmQuYWJzdHJhY3QsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBhbGxLZXl3b3JkczogcmVjb3JkLmtleXdvcmRzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl3b3JkKSA9PiBrZXl3b3JkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBtaW5fdGVybV9mcmVxOiAxLFxuICAgICAgICAgICAgICAgIG1heF9xdWVyeV90ZXJtczogMTIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXJtczoge1xuICAgICAgICAgICAgICAgIGlzVGVtcGxhdGU6IFsnbiddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGVybXM6IHtcbiAgICAgICAgICAgICAgICBkcmFmdDogWyduJywgJ2UnXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtdXN0X25vdDogW3sgd2lsZGNhcmQ6IHsgdXVpZDogcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIgfSB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzaXplLFxuICAgICAgX3NvdXJjZSxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGF5bG9hZFNvcnQoc29ydEJ5OiBTb3J0QnlGaWVsZCk6IFNvcnRQYXJhbXMge1xuICAgIGlmIChzb3J0QnkgPT09IG51bGwpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBmaWVsZHMgPSBBcnJheS5pc0FycmF5KHNvcnRCeVswXSkgPyBzb3J0QnkgOiBbc29ydEJ5XVxuICAgIHJldHVybiBmaWVsZHMubWFwKChmaWVsZCkgPT4gKHsgW2ZpZWxkWzFdXTogZmllbGRbMF0gfSkpXG4gIH1cblxuICBwcml2YXRlIGluamVjdExhbmdJblF1ZXJ5U3RyaW5nRmllbGRzKFxuICAgIHF1ZXJ5RmllbGRzUHJpb3JpdHk6IEVzUXVlcnlGaWVsZHNQcmlvcml0eVR5cGVcbiAgKSB7XG4gICAgY29uc3QgcXVlcnlMYW5nID0gdGhpcy5nZXRRdWVyeUxhbmcoKVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhxdWVyeUZpZWxkc1ByaW9yaXR5KS5yZWR1Y2UoKHF1ZXJ5LCBmaWVsZCkgPT4ge1xuICAgICAgY29uc3QgbXVsdGlMYW5nUmVnRXhwID0gL1xcJFxce3NlYXJjaExhbmdcXH0vZ1xuICAgICAgY29uc3QgaXNNdWx0aWxhbmdGaWVsZCA9IG11bHRpTGFuZ1JlZ0V4cC50ZXN0KGZpZWxkKVxuICAgICAgY29uc3QgZmllbGRQcmlvcml0eSA9IHF1ZXJ5RmllbGRzUHJpb3JpdHlbZmllbGRdXG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5xdWVyeSxcbiAgICAgICAgLi4uKHRoaXMuaXNDdXJyZW50U2VhcmNoTGFuZygpICYmIGlzTXVsdGlsYW5nRmllbGRcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgYCR7ZmllbGQucmVwbGFjZShtdWx0aUxhbmdSZWdFeHAsIHF1ZXJ5TGFuZyl9XiR7XG4gICAgICAgICAgICAgICAgZmllbGRQcmlvcml0eSArIDEwXG4gICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICBmaWVsZC5yZXBsYWNlKG11bHRpTGFuZ1JlZ0V4cCwgJyonKSArXG4gICAgICAgICAgICAgICAgKGZpZWxkUHJpb3JpdHkgPiAxID8gYF4ke2ZpZWxkUHJpb3JpdHl9YCA6ICcnKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgZmllbGQucmVwbGFjZShtdWx0aUxhbmdSZWdFeHAsIHF1ZXJ5TGFuZykgK1xuICAgICAgICAgICAgICAgIChmaWVsZFByaW9yaXR5ID4gMSA/IGBeJHtmaWVsZFByaW9yaXR5fWAgOiAnJyksXG4gICAgICAgICAgICBdKSxcbiAgICAgIF1cbiAgICB9LCBbXSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlMYW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubWV0YWRhdGFMYW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0N1cnJlbnRTZWFyY2hMYW5nKClcbiAgICAgICAgPyBgbGFuZyR7dGhpcy5sYW5nM31gXG4gICAgICAgIDogYGxhbmcke3RoaXMubWV0YWRhdGFMYW5nfWBcbiAgICB9IGVsc2UgcmV0dXJuICcqJ1xuICB9XG4gIHByaXZhdGUgaXNDdXJyZW50U2VhcmNoTGFuZygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUxhbmcgPT09ICdjdXJyZW50J1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJzVG9RdWVyeShcbiAgICBmaWx0ZXJzOiBGaWVsZEZpbHRlcnMgfCBGaWx0ZXJzQWdncmVnYXRpb25QYXJhbXMgfCBzdHJpbmdcbiAgKTogRmlsdGVyUXVlcnkge1xuICAgIGNvbnN0IGFkZFF1b3RlID0gKGtleTogc3RyaW5nKSA9PiAoL15cXC8uK1xcLyQvLnRlc3Qoa2V5KSA/IGtleSA6IGBcIiR7a2V5fVwiYClcbiAgICBjb25zdCBtYWtlUXVlcnkgPSAoZmlsdGVyOiBGaWVsZEZpbHRlcik6IHN0cmluZyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclxuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcilcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlcltrZXldID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkUXVvdGUoa2V5KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYC0ke2FkZFF1b3RlKGtleSl9YFxuICAgICAgICB9KVxuICAgICAgICAuam9pbignIE9SICcpXG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID1cbiAgICAgIHR5cGVvZiBmaWx0ZXJzID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGZpbHRlcnNcbiAgICAgICAgOiBPYmplY3Qua2V5cyhmaWx0ZXJzKVxuICAgICAgICAgICAgLmZpbHRlcigoZmllbGRuYW1lKSA9PiAhaXNEYXRlUmFuZ2UoZmlsdGVyc1tmaWVsZG5hbWVdKSlcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgIChmaWVsZG5hbWUpID0+XG4gICAgICAgICAgICAgICAgZmlsdGVyc1tmaWVsZG5hbWVdICYmXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZmlsdGVyc1tmaWVsZG5hbWVdKSAhPT0gJ3t9J1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgKGZpZWxkbmFtZSkgPT4gYCR7ZmllbGRuYW1lfTooJHttYWtlUXVlcnkoZmlsdGVyc1tmaWVsZG5hbWVdKX0pYFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJyBBTkQgJylcbiAgICBjb25zdCBxdWVyeVJhbmdlID0gT2JqZWN0LmVudHJpZXMoZmlsdGVycylcbiAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gaXNEYXRlUmFuZ2UodmFsdWUpKVxuICAgICAgLm1hcCgoW3NlYXJjaEZpZWxkLCBkYXRlUmFuZ2VdKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQsXG4gICAgICAgICAgZGF0ZVJhbmdlLFxuICAgICAgICB9IGFzIHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc3RyaW5nXG4gICAgICAgICAgZGF0ZVJhbmdlOiBEYXRlUmFuZ2VcbiAgICAgICAgfVxuICAgICAgfSlbMF1cbiAgICBjb25zdCBxdWVyeVBhcnRzID0gW1xuICAgICAgcXVlcnlTdHJpbmcgJiYge1xuICAgICAgICBxdWVyeV9zdHJpbmc6IHtcbiAgICAgICAgICBxdWVyeTogcXVlcnlTdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcXVlcnlSYW5nZSAmJlxuICAgICAgICBxdWVyeVJhbmdlLmRhdGVSYW5nZSAmJiB7XG4gICAgICAgICAgcmFuZ2U6IHtcbiAgICAgICAgICAgIFtxdWVyeVJhbmdlLnNlYXJjaEZpZWxkXToge1xuICAgICAgICAgICAgICAuLi4ocXVlcnlSYW5nZS5kYXRlUmFuZ2Uuc3RhcnQgJiYge1xuICAgICAgICAgICAgICAgIGd0ZTogZm9ybWF0RGF0ZShxdWVyeVJhbmdlLmRhdGVSYW5nZS5zdGFydCksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAuLi4ocXVlcnlSYW5nZS5kYXRlUmFuZ2UuZW5kICYmIHtcbiAgICAgICAgICAgICAgICBsdGU6IGZvcm1hdERhdGUocXVlcnlSYW5nZS5kYXRlUmFuZ2UuZW5kKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGZvcm1hdDogJ3l5eXktTU0tZGQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pXG4gICAgcmV0dXJuIHF1ZXJ5UGFydHMubGVuZ3RoID4gMCA/IChxdWVyeVBhcnRzIGFzIEZpbHRlclF1ZXJ5KSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgcHJpdmF0ZSBtdXN0Tm90RmlsdGVycygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICAuLi50aGlzLnF1ZXJ5RmlsdGVyT25WYWx1ZXMoJ3Jlc291cmNlVHlwZScsIFtcbiAgICAgICAgICAnc2VydmljZScsXG4gICAgICAgICAgJ21hcCcsXG4gICAgICAgICAgJ21hcC9zdGF0aWMnLFxuICAgICAgICAgICdtYXBEaWdpdGFsJyxcbiAgICAgICAgXSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBxdWVyeV9zdHJpbmc6IHtcbiAgICAgICAgICBxdWVyeTpcbiAgICAgICAgICAgICdyZXNvdXJjZVR5cGU6ZmVhdHVyZUNhdGFsb2cgQU5EICFyZXNvdXJjZVR5cGU6ZGF0YXNldCBBTkQgIWNsX2xldmVsLmtleTpkYXRhc2V0JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBheWxvYWRRdWVyeShcbiAgICB7IGFueSwgLi4uZmllbGRTZWFyY2hGaWx0ZXJzIH06IFNlYXJjaEZpbHRlcnMsXG4gICAgY29uZmlnRmlsdGVyczogU2VhcmNoRmlsdGVycyxcbiAgICB1dWlkcz86IHN0cmluZ1tdLFxuICAgIGdlb21ldHJ5PzogR2VvbWV0cnlcbiAgKSB7XG4gICAgY29uc3QgbXVzdCA9IFtdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W11cbiAgICBjb25zdCBtdXN0X25vdCA9IHRoaXMubXVzdE5vdEZpbHRlcnMoKVxuICAgIGNvbnN0IHNob3VsZCA9IFtdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W11cbiAgICBjb25zdCBmaWx0ZXIgPSBbdGhpcy5xdWVyeUZpbHRlck9uVmFsdWVzKCdpc1RlbXBsYXRlJywgJ24nKV0gYXMgUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAgdW5rbm93blxuICAgID5bXVxuXG4gICAgaWYgKGFueSkge1xuICAgICAgbXVzdC5wdXNoKHtcbiAgICAgICAgcXVlcnlfc3RyaW5nOiB7XG4gICAgICAgICAgcXVlcnk6IHRoaXMuZXNjYXBlU3BlY2lhbENoYXJhY3RlcnMoYW55KSxcbiAgICAgICAgICBkZWZhdWx0X29wZXJhdG9yOiAnQU5EJyxcbiAgICAgICAgICBmaWVsZHM6IHRoaXMuaW5qZWN0TGFuZ0luUXVlcnlTdHJpbmdGaWVsZHMoRVNfUVVFUllfRklFTERTX1BSSU9SSVRZKSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5RmlsdGVycyA9IHRoaXMuZmlsdGVyc1RvUXVlcnkoZmllbGRTZWFyY2hGaWx0ZXJzKVxuICAgIGlmIChxdWVyeUZpbHRlcnMpIHtcbiAgICAgIGZpbHRlci5wdXNoKC4uLnF1ZXJ5RmlsdGVycylcbiAgICB9XG4gICAgaWYgKHV1aWRzKSB7XG4gICAgICBmaWx0ZXIucHVzaCh7XG4gICAgICAgIGlkczoge1xuICAgICAgICAgIHZhbHVlczogdXVpZHMsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoZ2VvbWV0cnkpIHtcbiAgICAgIHNob3VsZC5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgZ2VvX3NoYXBlOiB7XG4gICAgICAgICAgICBnZW9tOiB7XG4gICAgICAgICAgICAgIHNoYXBlOiBnZW9tZXRyeSxcbiAgICAgICAgICAgICAgcmVsYXRpb246ICd3aXRoaW4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvb3N0OiAxMC4wLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBnZW9fc2hhcGU6IHtcbiAgICAgICAgICAgIGdlb206IHtcbiAgICAgICAgICAgICAgc2hhcGU6IGdlb21ldHJ5LFxuICAgICAgICAgICAgICByZWxhdGlvbjogJ2ludGVyc2VjdHMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvb3N0OiA3LjAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBib29sOiB7XG4gICAgICAgIG11c3QsXG4gICAgICAgIG11c3Rfbm90LFxuICAgICAgICBzaG91bGQsXG4gICAgICAgIGZpbHRlcixcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgYnVpbGRNb3JlT25BZ2dyZWdhdGlvblBheWxvYWQoXG4gICAgYWdncmVnYXRpb25zOiBhbnksXG4gICAga2V5OiBzdHJpbmcsXG4gICAgc2VhcmNoRmlsdGVyczogU2VhcmNoRmlsdGVycyxcbiAgICBjb25maWdGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJzXG4gICk6IEVzU2VhcmNoUGFyYW1zIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWdncmVnYXRpb25zOiB7IFtrZXldOiBhZ2dyZWdhdGlvbnNba2V5XSB9LFxuICAgICAgc2l6ZTogMCxcbiAgICAgIHF1ZXJ5OiB0aGlzLmJ1aWxkUGF5bG9hZFF1ZXJ5KHNlYXJjaEZpbHRlcnMsIGNvbmZpZ0ZpbHRlcnMpLFxuICAgIH1cbiAgfVxuXG4gIHF1ZXJ5RmlsdGVyT25WYWx1ZXMoa2V5LCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gIXZhbHVlcyB8fCB2YWx1ZXMubGVuZ3RoIDw9IDBcbiAgICAgID8ge31cbiAgICAgIDoge1xuICAgICAgICAgIHRlcm1zOiB7XG4gICAgICAgICAgICBba2V5XTogWy4uLnZhbHVlc10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICB9XG5cbiAgYnVpbGRBdXRvY29tcGxldGVQYXlsb2FkKHF1ZXJ5OiBzdHJpbmcpOiBFc1NlYXJjaFBhcmFtcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIGJvb2w6IHtcbiAgICAgICAgICBtdXN0OiBbXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5RmlsdGVyT25WYWx1ZXMoJ2lzVGVtcGxhdGUnLCAnbicpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtdWx0aV9tYXRjaDoge1xuICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sX3ByZWZpeCcsXG4gICAgICAgICAgICAgICAgZmllbGRzOiB0aGlzLmluamVjdExhbmdJblF1ZXJ5U3RyaW5nRmllbGRzKHtcbiAgICAgICAgICAgICAgICAgICdyZXNvdXJjZVRpdGxlT2JqZWN0LiR7c2VhcmNoTGFuZ30nOiA0LFxuICAgICAgICAgICAgICAgICAgJ3Jlc291cmNlQWJzdHJhY3RPYmplY3QuJHtzZWFyY2hMYW5nfSc6IDMsXG4gICAgICAgICAgICAgICAgICB0YWc6IDIsXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZUlkZW50aWZpZXI6IDEsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG5cbiAgICAgICAgICBtdXN0X25vdDogdGhpcy5tdXN0Tm90RmlsdGVycygpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIF9zb3VyY2U6IFsncmVzb3VyY2VUaXRsZU9iamVjdCcsICd1dWlkJ10sXG4gICAgICBmcm9tOiAwLFxuICAgICAgc2l6ZTogMjAsXG4gICAgfVxuICB9XG5cbiAgY29tYmluZVF1ZXJ5R3JvdXBzKHF1ZXJ5R3JvdXBzKSB7XG4gICAgcmV0dXJuIHF1ZXJ5R3JvdXBzID8gcXVlcnlHcm91cHMuam9pbignIEFORCAnKS50cmltKCkgOiAnJ1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY2V0cyBzdGF0ZSBpcyBhbiBvYmplY3QgbGlrZSB0aGlzOlxuICAgKlxuICAgKiB7XG4gICAqICAgJ3RhZyc6IHtcbiAgICogICAgICd3b3JsZCc6IHRydWUsXG4gICAqICAgICAndmVjdG9yJzogdHJ1ZVxuICAgKiAgIH0sXG4gICAqICAgJ2F2YWlsYWJsZUluU2VydmljZScgOiB7XG4gICAqICAgICAnYXZhaWxhYmxlSW5WaWV3U2VydmljZSc6ICcrbGlua1Byb3RvY29sOlxcL09HQzpXTVMuKlxcLydcbiAgICogICB9LFxuICAgKiAgICdyZXNvdXJjZVR5cGUnOiB7XG4gICAqICAgICAnc2VydmljZSc6IHtcbiAgICogICAgICAgJ3NlcnZpY2VUeXBlJzoge1xuICAgKiAgICAgICAgICdPR0M6V01TJzogdHJ1ZVxuICAgKiAgICAgICAgICdPR0M6V0ZTJzogZmFsc2VcbiAgICogICAgICAgfVxuICAgKiAgICAgfSxcbiAgICogICAgICdkb3dubG9hZCc6IHtcbiAgICogICAgICAgJ3NlcnZpY2VUeXBlJzoge1xuICAgKiAgICAgICB9XG4gICAqICAgICB9LFxuICAgKiAgICAgJ2RhdGFzZXQnOiB0cnVlXG4gICAqICAgfVxuICAgKiB9XG4gICAqL1xuICAvLyBGSVhNRTogdGhpcyBpcyBub3QgdXNlZCBhbnltb3JlXG4gIHN0YXRlRmlsdGVyc1RvUXVlcnlTdHJpbmcoZmFjZXRzU3RhdGUpIHtcbiAgICBjb25zdCBxdWVyeSA9IFtdXG4gICAgZm9yIChjb25zdCBpbmRleEtleSBpbiBmYWNldHNTdGF0ZSkge1xuICAgICAgaWYgKGluZGV4S2V5IGluIGZhY2V0c1N0YXRlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5Q2h1bmsgPSB0aGlzLnBhcnNlU3RhdGVOb2RlKFxuICAgICAgICAgIGluZGV4S2V5LFxuICAgICAgICAgIGZhY2V0c1N0YXRlW2luZGV4S2V5XSxcbiAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKVxuICAgICAgICBpZiAocXVlcnlDaHVuaykge1xuICAgICAgICAgIHF1ZXJ5LnB1c2gocXVlcnlDaHVuaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb21iaW5lUXVlcnlHcm91cHMocXVlcnkpXG4gIH1cblxuICAvLyBGSVhNRTogdGhpcyBpcyBub3QgdXNlZCBhbnltb3JlXG4gIHByaXZhdGUgcGFyc2VTdGF0ZU5vZGUobm9kZU5hbWUsIG5vZGUsIGluZGV4S2V5KSB7XG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gJydcbiAgICBpZiAobm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHAgaW4gbm9kZSkge1xuICAgICAgICAvLyBuZXN0aW5nXG4gICAgICAgIGlmIChub2RlW3BdICYmIHR5cGVvZiBub2RlW3BdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IG5leHRMdmxLZXkgPSBPYmplY3Qua2V5cyhub2RlW3BdKVswXVxuICAgICAgICAgIGNvbnN0IG5leHRMdmxTdGF0ZSA9IG5vZGVbcF1bbmV4dEx2bEtleV1cbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobmV4dEx2bFN0YXRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZENodW5rcyA9IFtub2RlTmFtZSArICc6JyArICdcIicgKyBwICsgJ1wiJ11cbiAgICAgICAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5wYXJzZVN0YXRlTm9kZShcbiAgICAgICAgICAgICAgbmV4dEx2bEtleSxcbiAgICAgICAgICAgICAgbmV4dEx2bFN0YXRlLFxuICAgICAgICAgICAgICBuZXh0THZsS2V5XG4gICAgICAgICAgICApLnRyaW0oKVxuICAgICAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICAgIG5lc3RlZENodW5rcy5wdXNoKGNodW5rKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2h1bmtzLnB1c2goJygnICsgbmVzdGVkQ2h1bmtzLmpvaW4oJyBBTkQgJykgKyAnKScpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5wYXJzZVN0YXRlTm9kZShwLCBub2RlW3BdLCBub2RlTmFtZSkudHJpbSgpXG4gICAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaHVua3MgJiYgY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICBxdWVyeVN0cmluZyArPSAnKCdcbiAgICAgICAgcXVlcnlTdHJpbmcgKz0gY2h1bmtzLmpvaW4oJyAnKVxuICAgICAgICBxdWVyeVN0cmluZyArPSAnKSdcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gbm9kZVxuICAgIH0gZWxzZSBpZiAobm9kZSA9PT0gdHJ1ZSkge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gaW5kZXhLZXkgKyAnOlwiJyArIG5vZGVOYW1lICsgJ1wiJ1xuICAgIH0gZWxzZSBpZiAobm9kZSA9PT0gZmFsc2UpIHtcbiAgICAgIHF1ZXJ5U3RyaW5nICs9ICctJyArIGluZGV4S2V5ICsgJzpcIicgKyBub2RlTmFtZSArICdcIidcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nXG4gIH1cblxuICBwcml2YXRlIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKHF1ZXJ5c3RyaW5nKSB7XG4gICAgcmV0dXJuIHF1ZXJ5c3RyaW5nLnJlcGxhY2UoXG4gICAgICAvKFxcK3wtfFxcL3wmJnxcXHxcXHx8IXxcXHt8XFx9fFxcW3xcXF1cXF58fnxcXD98OnxcXFxcezF9fFxcKHxcXCkpL2csXG4gICAgICAnXFxcXCQxJ1xuICAgIClcbiAgfVxuXG4gIGJ1aWxkQWdncmVnYXRpb25zUGF5bG9hZChhZ2dyZWdhdGlvbnM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IGFueSB7XG4gICAgY29uc3QgbWFwVG9FU0FnZ3JlZ2F0aW9uID0gKGFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvblBhcmFtcykgPT4ge1xuICAgICAgc3dpdGNoIChhZ2dyZWdhdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2ZpbHRlcnMnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICAgIGZpbHRlcnM6IE9iamVjdC5rZXlzKGFnZ3JlZ2F0aW9uLmZpbHRlcnMpLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGFnZ3JlZ2F0aW9uLmZpbHRlcnNbY3Vycl1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgIFtjdXJyXTogdGhpcy5maWx0ZXJzVG9RdWVyeShmaWx0ZXIpWzBdLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3Rlcm1zJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGVybXM6IHtcbiAgICAgICAgICAgICAgc2l6ZTogYWdncmVnYXRpb24ubGltaXQsXG4gICAgICAgICAgICAgIGZpZWxkOiBhZ2dyZWdhdGlvbi5maWVsZCxcbiAgICAgICAgICAgICAgb3JkZXI6IHtcbiAgICAgICAgICAgICAgICBbYF8ke2FnZ3JlZ2F0aW9uLnNvcnRbMV19YF06IGFnZ3JlZ2F0aW9uLnNvcnRbMF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnaGlzdG9ncmFtJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGlzdG9ncmFtOiB7XG4gICAgICAgICAgICAgIGZpZWxkOiBhZ2dyZWdhdGlvbi5maWVsZCxcbiAgICAgICAgICAgICAgaW50ZXJ2YWw6IGFnZ3JlZ2F0aW9uLmludGVydmFsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhZ2dyZWdhdGlvbnMpLnJlZHVjZShcbiAgICAgIChwcmV2LCBjdXJyKSA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbY3Vycl06IG1hcFRvRVNBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbnNbY3Vycl0pLFxuICAgICAgfSksXG4gICAgICB7fVxuICAgIClcbiAgfVxuXG4gIHBhcnNlQWdncmVnYXRpb25SZXN1bHQoXG4gICAgcmVzdWx0OiBBZ2dyZWdhdGlvblJlc3VsdCxcbiAgICByZXF1ZXN0UGFyYW06IEFnZ3JlZ2F0aW9uUGFyYW1zXG4gICk6IEFnZ3JlZ2F0aW9uIHtcbiAgICBzd2l0Y2ggKHJlcXVlc3RQYXJhbS50eXBlKSB7XG4gICAgICBjYXNlICdmaWx0ZXJzJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBidWNrZXRzOiBPYmplY3Qua2V5cyhcbiAgICAgICAgICAgIChyZXN1bHQgYXMgRmlsdGVyc0FnZ3JlZ2F0aW9uUmVzdWx0KS5idWNrZXRzXG4gICAgICAgICAgKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gKHJlc3VsdCBhcyBGaWx0ZXJzQWdncmVnYXRpb25SZXN1bHQpLmJ1Y2tldHNba2V5XVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdGVybToga2V5LFxuICAgICAgICAgICAgICBjb3VudDogYnVja2V0LmRvY19jb3VudCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAndGVybXMnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJ1Y2tldHM6IChyZXN1bHQgYXMgVGVybXNBZ2dyZWdhdGlvblJlc3VsdCkuYnVja2V0cy5tYXAoKGJ1Y2tldCkgPT4gKHtcbiAgICAgICAgICAgIHRlcm06IGJ1Y2tldC5rZXksXG4gICAgICAgICAgICBjb3VudDogYnVja2V0LmRvY19jb3VudCxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2hpc3RvZ3JhbSc6IHtcbiAgICAgICAgY29uc3QgaGlzdG9ncmFtUmVzdWx0ID0gcmVzdWx0IGFzIEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uUmVzdWx0XG4gICAgICAgIGxldCBidWNrZXRzID0gQXJyYXkuaXNBcnJheShoaXN0b2dyYW1SZXN1bHQuYnVja2V0cylcbiAgICAgICAgICA/IGhpc3RvZ3JhbVJlc3VsdC5idWNrZXRzXG4gICAgICAgICAgOiBPYmplY3Qua2V5cyhoaXN0b2dyYW1SZXN1bHQuYnVja2V0cykubWFwKFxuICAgICAgICAgICAgICAoa2V5KSA9PiBoaXN0b2dyYW1SZXN1bHQuYnVja2V0c1trZXldXG4gICAgICAgICAgICApXG4gICAgICAgIGJ1Y2tldHMgPSBidWNrZXRzLm1hcCgoYnVja2V0LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICBsb3dWYWx1ZTogYnVja2V0LmtleSxcbiAgICAgICAgICBoaWdoVmFsdWU6IGJ1Y2tldHNbaW5kZXggKyAxXT8ua2V5LCAvLyB0aGlzIHdpbGwgcmV0dXJuIHVuZGVmaW5lZCBvbiB0aGUgbGFzdCBlbGVtZW50ICh3aGljaCB3ZSByZW1vdmUgbGF0ZXIpXG4gICAgICAgICAgY291bnQ6IGJ1Y2tldC5kb2NfY291bnQsXG4gICAgICAgIH0pKVxuICAgICAgICBidWNrZXRzLnBvcCgpIC8vIHNlZSBhYm92ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJ1Y2tldHMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
507
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxhc3RpY3NlYXJjaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvcmVwb3NpdG9yeS9zcmMvbGliL2duNC9lbGFzdGljc2VhcmNoL2VsYXN0aWNzZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFNUQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixpQkFBaUIsR0FFbEIsTUFBTSxZQUFZLENBQUE7QUFXbkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFXM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7OztBQVE1RCxNQUFNLE9BQU8sb0JBQW9CO0lBTS9CLFlBQ1UsV0FBd0IsRUFDZSxZQUFvQjtRQUQzRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNlLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBUHJFLHNEQUFzRDtRQUN0RCxtR0FBbUc7UUFDM0Ysa0JBQWEsR0FBMkIsRUFBRSxDQUFBO1FBQzFDLFVBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQTtJQUtsQyxDQUFDO0lBRUosb0JBQW9CLENBQ2xCLGVBQW9CLEVBQUUsRUFDdEIsSUFBSSxHQUFHLENBQUMsRUFDUixJQUFJLEdBQUcsQ0FBQyxFQUNSLFNBQXNCLElBQUksRUFDMUIsZ0JBQStCLElBQUksRUFDbkMsZ0JBQStCLEVBQUUsRUFDakMsZ0JBQStCLEVBQUUsRUFDakMsS0FBZ0IsRUFDaEIsUUFBbUI7UUFFbkIsTUFBTSxPQUFPLEdBQUc7WUFDZCxZQUFZO1lBQ1osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJLEVB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RSx5RUFBeUU7b0JBQzdHLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUztpQkFDeEIsQ0FBQyxDQUFDLENBQUE7Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFBLENBQUMsWUFBWTtnQkFDMUIsT0FBTztvQkFDTCxPQUFPO2lCQUNSLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7K0dBaGtCVSxvQkFBb0IsNkNBUVQsaUJBQWlCO21IQVI1QixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBU0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnZ2VvanNvbidcbmltcG9ydCB7XG4gIEVTX1FVRVJZX0ZJRUxEU19QUklPUklUWSxcbiAgRVNfU09VUkNFX1NVTU1BUlksXG4gIEVzUXVlcnlGaWVsZHNQcmlvcml0eVR5cGUsXG59IGZyb20gJy4vY29uc3RhbnQnXG5pbXBvcnQge1xuICBBZ2dyZWdhdGlvbixcbiAgQWdncmVnYXRpb25QYXJhbXMsXG4gIEFnZ3JlZ2F0aW9uc1BhcmFtcyxcbiAgRmllbGRGaWx0ZXIsXG4gIEZpZWxkRmlsdGVycyxcbiAgRmlsdGVyUXVlcnksXG4gIEZpbHRlcnNBZ2dyZWdhdGlvblBhcmFtcyxcbiAgU29ydEJ5RmllbGQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3NlYXJjaCdcbmltcG9ydCB7IE1FVEFEQVRBX0xBTkdVQUdFIH0gZnJvbSAnLi4vLi4vbWV0YWRhdGEtbGFuZ3VhZ2UnXG5pbXBvcnQge1xuICBBZ2dyZWdhdGlvblJlc3VsdCxcbiAgRXNTZWFyY2hQYXJhbXMsXG4gIEZpbHRlcnNBZ2dyZWdhdGlvblJlc3VsdCxcbiAgSGlzdG9ncmFtQWdncmVnYXRpb25SZXN1bHQsXG4gIFJlcXVlc3RGaWVsZHMsXG4gIFNlYXJjaEZpbHRlcnMsXG4gIFNvcnRQYXJhbXMsXG4gIFRlcm1zQWdncmVnYXRpb25SZXN1bHQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMnXG5pbXBvcnQgeyBMYW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9pMThuL3NyYydcbmltcG9ydCB7IGZvcm1hdERhdGUsIGlzRGF0ZVJhbmdlIH0gZnJvbSAnLi9kYXRlLXJhbmdlLnV0aWxzJ1xuaW1wb3J0IHsgQ2F0YWxvZ1JlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcblxuZXhwb3J0IHR5cGUgRGF0ZVJhbmdlID0geyBzdGFydD86IERhdGU7IGVuZD86IERhdGUgfVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRWxhc3RpY3NlYXJjaFNlcnZpY2Uge1xuICAvLyBydW50aW1lIGZpZWxkcyBhcmUgY29tcHV0ZWQgdXNpbmcgYSBQYWlubGVzcyBzY3JpcHRcbiAgLy8gc2VlOiBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2VsYXN0aWNzZWFyY2gvcmVmZXJlbmNlL2N1cnJlbnQvcnVudGltZS1tYXBwaW5nLWZpZWxkcy5odG1sXG4gIHByaXZhdGUgcnVudGltZUZpZWxkczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4gIHByaXZhdGUgbGFuZzMgPSB0aGlzLmxhbmdTZXJ2aWNlLmlzbzNcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1FVEFEQVRBX0xBTkdVQUdFKSBwcml2YXRlIG1ldGFkYXRhTGFuZzogc3RyaW5nXG4gICkge31cblxuICBnZXRTZWFyY2hSZXF1ZXN0Qm9keShcbiAgICBhZ2dyZWdhdGlvbnM6IGFueSA9IHt9LFxuICAgIHNpemUgPSAwLFxuICAgIGZyb20gPSAwLFxuICAgIHNvcnRCeTogU29ydEJ5RmllbGQgPSBudWxsLFxuICAgIHJlcXVlc3RGaWVsZHM6IFJlcXVlc3RGaWVsZHMgPSBudWxsLFxuICAgIHNlYXJjaEZpbHRlcnM6IFNlYXJjaEZpbHRlcnMgPSB7fSxcbiAgICBjb25maWdGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJzID0ge30sXG4gICAgdXVpZHM/OiBzdHJpbmdbXSxcbiAgICBnZW9tZXRyeT86IEdlb21ldHJ5XG4gICk6IEVzU2VhcmNoUGFyYW1zIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYWdncmVnYXRpb25zLFxuICAgICAgZnJvbSxcbiAgICAgIHNpemUsXG4gICAgICBzb3J0OiB0aGlzLmJ1aWxkUGF5bG9hZFNvcnQoc29ydEJ5KSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmJ1aWxkUGF5bG9hZFF1ZXJ5KFxuICAgICAgICBzZWFyY2hGaWx0ZXJzLFxuICAgICAgICBjb25maWdGaWx0ZXJzLFxuICAgICAgICB1dWlkcyxcbiAgICAgICAgZ2VvbWV0cnlcbiAgICAgICksXG4gICAgICAuLi4oc2l6ZSA+IDAgPyB7IHRyYWNrX3RvdGFsX2hpdHM6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihyZXF1ZXN0RmllbGRzICYmIHsgX3NvdXJjZTogcmVxdWVzdEZpZWxkcyB9KSxcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzUnVudGltZUZpZWxkcyhwYXlsb2FkKVxuICAgIHJldHVybiBwYXlsb2FkXG4gIH1cblxuICAvLyBwYXlsb2FkIG9iamVjdCB3aWxsIGJlIG11dGF0ZWRcbiAgcHJpdmF0ZSBwcm9jZXNzUnVudGltZUZpZWxkcyhwYXlsb2FkOiBFc1NlYXJjaFBhcmFtcyk6IEVzU2VhcmNoUGFyYW1zIHtcbiAgICBjb25zdCBhZGRNYXBwaW5nID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXBheWxvYWQucnVudGltZV9tYXBwaW5ncykgcGF5bG9hZC5ydW50aW1lX21hcHBpbmdzID0ge31cbiAgICAgIHBheWxvYWQucnVudGltZV9tYXBwaW5nc1tmaWVsZE5hbWVdID0ge1xuICAgICAgICB0eXBlOiAna2V5d29yZCcsXG4gICAgICAgIHNjcmlwdDogdGhpcy5ydW50aW1lRmllbGRzW2ZpZWxkTmFtZV0sXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGxvb2tGb3JGaWVsZCA9IChub2RlOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgICBub2RlLmZvckVhY2gobG9va0ZvckZpZWxkKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgICAgaWYgKCdmaWVsZCcgaW4gbm9kZSAmJiB0eXBlb2Ygbm9kZS5maWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKG5vZGUuZmllbGQgaW4gdGhpcy5ydW50aW1lRmllbGRzKSB7XG4gICAgICAgICAgYWRkTWFwcGluZyhub2RlLmZpZWxkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHJ1bnRpbWVGaWVsZCBpbiB0aGlzLnJ1bnRpbWVGaWVsZHMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJ1bnRpbWVGaWVsZCBpbiBub2RlICYmXG4gICAgICAgICAgKG5vZGVbcnVudGltZUZpZWxkXSA9PT0gJ2FzYycgfHwgbm9kZVtydW50aW1lRmllbGRdID09PSAnZGVzYycpXG4gICAgICAgICkge1xuICAgICAgICAgIGFkZE1hcHBpbmcocnVudGltZUZpZWxkKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAncXVlcnknIGluIG5vZGUgJiZcbiAgICAgICAgICB0eXBlb2Ygbm9kZS5xdWVyeSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBub2RlLnF1ZXJ5LmluZGV4T2YocnVudGltZUZpZWxkICsgJzonKSA+IC0xXG4gICAgICAgICkge1xuICAgICAgICAgIGFkZE1hcHBpbmcocnVudGltZUZpZWxkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBub2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZVtrZXldID09PSAnb2JqZWN0JykgbG9va0ZvckZpZWxkKG5vZGVba2V5XSlcbiAgICAgIH1cbiAgICB9XG4gICAgbG9va0ZvckZpZWxkKHBheWxvYWQuYWdncmVnYXRpb25zKVxuICAgIGxvb2tGb3JGaWVsZChwYXlsb2FkLnNvcnQpXG4gICAgbG9va0ZvckZpZWxkKHBheWxvYWQucXVlcnkpXG4gICAgcmV0dXJuIHBheWxvYWRcbiAgfVxuXG4gIHJlZ2lzdGVyUnVudGltZUZpZWxkKGZpZWxkTmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJ1bnRpbWVGaWVsZHNbZmllbGROYW1lXSA9IGV4cHJlc3Npb25cbiAgfVxuXG4gIGdldE1ldGFkYXRhQnlJZHNQYXlsb2FkKHV1aWRzOiBzdHJpbmdbXSk6IEVzU2VhcmNoUGFyYW1zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgaWRzOiB7XG4gICAgICAgICAgdmFsdWVzOiB1dWlkcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgZ2V0UmVsYXRlZFJlY29yZFBheWxvYWQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHNpemUgPSA2LFxuICAgIF9zb3VyY2UgPSBbLi4uRVNfU09VUkNFX1NVTU1BUlksICdhbGxLZXl3b3JkcycsICdjcmVhdGVEYXRlJ11cbiAgKTogRXNTZWFyY2hQYXJhbXMge1xuICAgIHJldHVybiB7XG4gICAgICBxdWVyeToge1xuICAgICAgICBib29sOiB7XG4gICAgICAgICAgbXVzdDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtb3JlX2xpa2VfdGhpczoge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICAgICAgJ3Jlc291cmNlVGl0bGVPYmplY3QuZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgICAncmVzb3VyY2VBYnN0cmFjdE9iamVjdC5kZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICdhbGxLZXl3b3JkcycsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBsaWtlOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRvYzoge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlVGl0bGVPYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlY29yZC50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQWJzdHJhY3RPYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJlY29yZC5hYnN0cmFjdCxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGFsbEtleXdvcmRzOiByZWNvcmQua2V5d29yZHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXdvcmQpID0+IGtleXdvcmQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIG1pbl90ZXJtX2ZyZXE6IDEsXG4gICAgICAgICAgICAgICAgbWF4X3F1ZXJ5X3Rlcm1zOiAxMixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRlcm1zOiB7XG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZTogWyduJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXJtczoge1xuICAgICAgICAgICAgICAgIGRyYWZ0OiBbJ24nLCAnZSddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG11c3Rfbm90OiBbeyB3aWxkY2FyZDogeyB1dWlkOiByZWNvcmQudW5pcXVlSWRlbnRpZmllciB9IH1dLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNpemUsXG4gICAgICBfc291cmNlLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXlsb2FkU29ydChzb3J0Qnk6IFNvcnRCeUZpZWxkKTogU29ydFBhcmFtcyB7XG4gICAgaWYgKHNvcnRCeSA9PT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGZpZWxkcyA9IEFycmF5LmlzQXJyYXkoc29ydEJ5WzBdKSA/IHNvcnRCeSA6IFtzb3J0QnldXG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoKGZpZWxkKSA9PiAoeyBbZmllbGRbMV1dOiBmaWVsZFswXSB9KSlcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0TGFuZ0luUXVlcnlTdHJpbmdGaWVsZHMoXG4gICAgcXVlcnlGaWVsZHNQcmlvcml0eTogRXNRdWVyeUZpZWxkc1ByaW9yaXR5VHlwZVxuICApIHtcbiAgICBjb25zdCBxdWVyeUxhbmcgPSB0aGlzLmdldFF1ZXJ5TGFuZygpXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHF1ZXJ5RmllbGRzUHJpb3JpdHkpLnJlZHVjZSgocXVlcnksIGZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBtdWx0aUxhbmdSZWdFeHAgPSAvXFwkXFx7c2VhcmNoTGFuZ1xcfS9nXG4gICAgICBjb25zdCBpc011bHRpbGFuZ0ZpZWxkID0gbXVsdGlMYW5nUmVnRXhwLnRlc3QoZmllbGQpXG4gICAgICBjb25zdCBmaWVsZFByaW9yaXR5ID0gcXVlcnlGaWVsZHNQcmlvcml0eVtmaWVsZF1cbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLnF1ZXJ5LFxuICAgICAgICAuLi4odGhpcy5pc0N1cnJlbnRTZWFyY2hMYW5nKCkgJiYgaXNNdWx0aWxhbmdGaWVsZFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBgJHtmaWVsZC5yZXBsYWNlKG11bHRpTGFuZ1JlZ0V4cCwgcXVlcnlMYW5nKX1eJHtcbiAgICAgICAgICAgICAgICBmaWVsZFByaW9yaXR5ICsgMTBcbiAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgIGZpZWxkLnJlcGxhY2UobXVsdGlMYW5nUmVnRXhwLCAnKicpICtcbiAgICAgICAgICAgICAgICAoZmllbGRQcmlvcml0eSA+IDEgPyBgXiR7ZmllbGRQcmlvcml0eX1gIDogJycpLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBmaWVsZC5yZXBsYWNlKG11bHRpTGFuZ1JlZ0V4cCwgcXVlcnlMYW5nKSArXG4gICAgICAgICAgICAgICAgKGZpZWxkUHJpb3JpdHkgPiAxID8gYF4ke2ZpZWxkUHJpb3JpdHl9YCA6ICcnKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgXVxuICAgIH0sIFtdKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeUxhbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tZXRhZGF0YUxhbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3VycmVudFNlYXJjaExhbmcoKVxuICAgICAgICA/IGBsYW5nJHt0aGlzLmxhbmczfWBcbiAgICAgICAgOiBgbGFuZyR7dGhpcy5tZXRhZGF0YUxhbmd9YFxuICAgIH0gZWxzZSByZXR1cm4gJyonXG4gIH1cbiAgcHJpdmF0ZSBpc0N1cnJlbnRTZWFyY2hMYW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhTGFuZyA9PT0gJ2N1cnJlbnQnXG4gIH1cblxuICBwcml2YXRlIGZpbHRlcnNUb1F1ZXJ5KFxuICAgIGZpbHRlcnM6IEZpZWxkRmlsdGVycyB8IEZpbHRlcnNBZ2dyZWdhdGlvblBhcmFtcyB8IHN0cmluZ1xuICApOiBGaWx0ZXJRdWVyeSB7XG4gICAgY29uc3QgYWRkUXVvdGUgPSAoa2V5OiBzdHJpbmcpID0+ICgvXlxcLy4rXFwvJC8udGVzdChrZXkpID8ga2V5IDogYFwiJHtrZXl9XCJgKVxuICAgIGNvbnN0IG1ha2VRdWVyeSA9IChmaWx0ZXI6IEZpZWxkRmlsdGVyKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZmlsdGVyXG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVyKVxuICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyW2tleV0gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRRdW90ZShrZXkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgLSR7YWRkUXVvdGUoa2V5KX1gXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcgT1IgJylcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPVxuICAgICAgdHlwZW9mIGZpbHRlcnMgPT09ICdzdHJpbmcnXG4gICAgICAgID8gZmlsdGVyc1xuICAgICAgICA6IE9iamVjdC5rZXlzKGZpbHRlcnMpXG4gICAgICAgICAgICAuZmlsdGVyKChmaWVsZG5hbWUpID0+ICFpc0RhdGVSYW5nZShmaWx0ZXJzW2ZpZWxkbmFtZV0pKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKGZpZWxkbmFtZSkgPT5cbiAgICAgICAgICAgICAgICBmaWx0ZXJzW2ZpZWxkbmFtZV0gJiZcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShmaWx0ZXJzW2ZpZWxkbmFtZV0pICE9PSAne30nXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAoZmllbGRuYW1lKSA9PiBgJHtmaWVsZG5hbWV9Oigke21ha2VRdWVyeShmaWx0ZXJzW2ZpZWxkbmFtZV0pfSlgXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignIEFORCAnKVxuICAgIGNvbnN0IHF1ZXJ5UmFuZ2UgPSBPYmplY3QuZW50cmllcyhmaWx0ZXJzKVxuICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiBpc0RhdGVSYW5nZSh2YWx1ZSkpXG4gICAgICAubWFwKChbc2VhcmNoRmllbGQsIGRhdGVSYW5nZV0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWFyY2hGaWVsZCxcbiAgICAgICAgICBkYXRlUmFuZ2UsXG4gICAgICAgIH0gYXMge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzdHJpbmdcbiAgICAgICAgICBkYXRlUmFuZ2U6IERhdGVSYW5nZVxuICAgICAgICB9XG4gICAgICB9KVswXVxuICAgIGNvbnN0IHF1ZXJ5UGFydHMgPSBbXG4gICAgICBxdWVyeVN0cmluZyAmJiB7XG4gICAgICAgIHF1ZXJ5X3N0cmluZzoge1xuICAgICAgICAgIHF1ZXJ5OiBxdWVyeVN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBxdWVyeVJhbmdlICYmXG4gICAgICAgIHF1ZXJ5UmFuZ2UuZGF0ZVJhbmdlICYmIHtcbiAgICAgICAgICByYW5nZToge1xuICAgICAgICAgICAgW3F1ZXJ5UmFuZ2Uuc2VhcmNoRmllbGRdOiB7XG4gICAgICAgICAgICAgIC4uLihxdWVyeVJhbmdlLmRhdGVSYW5nZS5zdGFydCAmJiB7XG4gICAgICAgICAgICAgICAgZ3RlOiBmb3JtYXREYXRlKHF1ZXJ5UmFuZ2UuZGF0ZVJhbmdlLnN0YXJ0KSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLihxdWVyeVJhbmdlLmRhdGVSYW5nZS5lbmQgJiYge1xuICAgICAgICAgICAgICAgIGx0ZTogZm9ybWF0RGF0ZShxdWVyeVJhbmdlLmRhdGVSYW5nZS5lbmQpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZm9ybWF0OiAneXl5eS1NTS1kZCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXS5maWx0ZXIoQm9vbGVhbilcbiAgICByZXR1cm4gcXVlcnlQYXJ0cy5sZW5ndGggPiAwID8gKHF1ZXJ5UGFydHMgYXMgRmlsdGVyUXVlcnkpIDogdW5kZWZpbmVkXG4gIH1cblxuICBwcml2YXRlIG11c3ROb3RGaWx0ZXJzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHF1ZXJ5X3N0cmluZzoge1xuICAgICAgICAgIHF1ZXJ5OlxuICAgICAgICAgICAgJ3Jlc291cmNlVHlwZTpmZWF0dXJlQ2F0YWxvZyBBTkQgIXJlc291cmNlVHlwZTpkYXRhc2V0IEFORCAhY2xfbGV2ZWwua2V5OmRhdGFzZXQnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdXG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGF5bG9hZFF1ZXJ5KFxuICAgIHsgYW55LCAuLi5maWVsZFNlYXJjaEZpbHRlcnMgfTogU2VhcmNoRmlsdGVycyxcbiAgICBjb25maWdGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJzLFxuICAgIHV1aWRzPzogc3RyaW5nW10sXG4gICAgZ2VvbWV0cnk/OiBHZW9tZXRyeVxuICApIHtcbiAgICBjb25zdCBtdXN0ID0gW10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuICAgIGNvbnN0IG11c3Rfbm90ID0gdGhpcy5tdXN0Tm90RmlsdGVycygpXG4gICAgY29uc3Qgc2hvdWxkID0gW10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuICAgIGNvbnN0IGZpbHRlciA9IFt0aGlzLnF1ZXJ5RmlsdGVyT25WYWx1ZXMoJ2lzVGVtcGxhdGUnLCAnbicpXSBhcyBSZWNvcmQ8XG4gICAgICBzdHJpbmcsXG4gICAgICB1bmtub3duXG4gICAgPltdXG5cbiAgICBpZiAoYW55KSB7XG4gICAgICBtdXN0LnB1c2goe1xuICAgICAgICBxdWVyeV9zdHJpbmc6IHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5lc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyhhbnkpLFxuICAgICAgICAgIGRlZmF1bHRfb3BlcmF0b3I6ICdBTkQnLFxuICAgICAgICAgIGZpZWxkczogdGhpcy5pbmplY3RMYW5nSW5RdWVyeVN0cmluZ0ZpZWxkcyhFU19RVUVSWV9GSUVMRFNfUFJJT1JJVFkpLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgcXVlcnlGaWx0ZXJzID0gdGhpcy5maWx0ZXJzVG9RdWVyeShmaWVsZFNlYXJjaEZpbHRlcnMpXG4gICAgaWYgKHF1ZXJ5RmlsdGVycykge1xuICAgICAgZmlsdGVyLnB1c2goLi4ucXVlcnlGaWx0ZXJzKVxuICAgIH1cbiAgICBpZiAodXVpZHMpIHtcbiAgICAgIGZpbHRlci5wdXNoKHtcbiAgICAgICAgaWRzOiB7XG4gICAgICAgICAgdmFsdWVzOiB1dWlkcyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChnZW9tZXRyeSkge1xuICAgICAgc2hvdWxkLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICBnZW9fc2hhcGU6IHtcbiAgICAgICAgICAgIGdlb206IHtcbiAgICAgICAgICAgICAgc2hhcGU6IGdlb21ldHJ5LFxuICAgICAgICAgICAgICByZWxhdGlvbjogJ3dpdGhpbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9vc3Q6IDEwLjAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGdlb19zaGFwZToge1xuICAgICAgICAgICAgZ2VvbToge1xuICAgICAgICAgICAgICBzaGFwZTogZ2VvbWV0cnksXG4gICAgICAgICAgICAgIHJlbGF0aW9uOiAnaW50ZXJzZWN0cycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9vc3Q6IDcuMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJvb2w6IHtcbiAgICAgICAgbXVzdCxcbiAgICAgICAgbXVzdF9ub3QsXG4gICAgICAgIHNob3VsZCxcbiAgICAgICAgZmlsdGVyLFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICBidWlsZE1vcmVPbkFnZ3JlZ2F0aW9uUGF5bG9hZChcbiAgICBhZ2dyZWdhdGlvbnM6IGFueSxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBzZWFyY2hGaWx0ZXJzOiBTZWFyY2hGaWx0ZXJzLFxuICAgIGNvbmZpZ0ZpbHRlcnM6IFNlYXJjaEZpbHRlcnNcbiAgKTogRXNTZWFyY2hQYXJhbXMge1xuICAgIHJldHVybiB7XG4gICAgICBhZ2dyZWdhdGlvbnM6IHsgW2tleV06IGFnZ3JlZ2F0aW9uc1trZXldIH0sXG4gICAgICBzaXplOiAwLFxuICAgICAgcXVlcnk6IHRoaXMuYnVpbGRQYXlsb2FkUXVlcnkoc2VhcmNoRmlsdGVycywgY29uZmlnRmlsdGVycyksXG4gICAgfVxuICB9XG5cbiAgcXVlcnlGaWx0ZXJPblZhbHVlcyhrZXksIHZhbHVlcykge1xuICAgIHJldHVybiAhdmFsdWVzIHx8IHZhbHVlcy5sZW5ndGggPD0gMFxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgdGVybXM6IHtcbiAgICAgICAgICAgIFtrZXldOiBbLi4udmFsdWVzXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gIH1cblxuICBidWlsZEF1dG9jb21wbGV0ZVBheWxvYWQocXVlcnk6IHN0cmluZyk6IEVzU2VhcmNoUGFyYW1zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgYm9vbDoge1xuICAgICAgICAgIG11c3Q6IFtcbiAgICAgICAgICAgIHRoaXMucXVlcnlGaWx0ZXJPblZhbHVlcygnaXNUZW1wbGF0ZScsICduJyksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG11bHRpX21hdGNoOiB7XG4gICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xfcHJlZml4JyxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHRoaXMuaW5qZWN0TGFuZ0luUXVlcnlTdHJpbmdGaWVsZHMoe1xuICAgICAgICAgICAgICAgICAgJ3Jlc291cmNlVGl0bGVPYmplY3QuJHtzZWFyY2hMYW5nfSc6IDQsXG4gICAgICAgICAgICAgICAgICAncmVzb3VyY2VBYnN0cmFjdE9iamVjdC4ke3NlYXJjaExhbmd9JzogMyxcbiAgICAgICAgICAgICAgICAgIHRhZzogMixcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlSWRlbnRpZmllcjogMSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcblxuICAgICAgICAgIG11c3Rfbm90OiB0aGlzLm11c3ROb3RGaWx0ZXJzKCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgX3NvdXJjZTogWydyZXNvdXJjZVRpdGxlT2JqZWN0JywgJ3V1aWQnLCAncmVzb3VyY2VUeXBlJ10sXG4gICAgICBmcm9tOiAwLFxuICAgICAgc2l6ZTogMjAsXG4gICAgfVxuICB9XG5cbiAgY29tYmluZVF1ZXJ5R3JvdXBzKHF1ZXJ5R3JvdXBzKSB7XG4gICAgcmV0dXJuIHF1ZXJ5R3JvdXBzID8gcXVlcnlHcm91cHMuam9pbignIEFORCAnKS50cmltKCkgOiAnJ1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY2V0cyBzdGF0ZSBpcyBhbiBvYmplY3QgbGlrZSB0aGlzOlxuICAgKlxuICAgKiB7XG4gICAqICAgJ3RhZyc6IHtcbiAgICogICAgICd3b3JsZCc6IHRydWUsXG4gICAqICAgICAndmVjdG9yJzogdHJ1ZVxuICAgKiAgIH0sXG4gICAqICAgJ2F2YWlsYWJsZUluU2VydmljZScgOiB7XG4gICAqICAgICAnYXZhaWxhYmxlSW5WaWV3U2VydmljZSc6ICcrbGlua1Byb3RvY29sOlxcL09HQzpXTVMuKlxcLydcbiAgICogICB9LFxuICAgKiAgICdyZXNvdXJjZVR5cGUnOiB7XG4gICAqICAgICAnc2VydmljZSc6IHtcbiAgICogICAgICAgJ3NlcnZpY2VUeXBlJzoge1xuICAgKiAgICAgICAgICdPR0M6V01TJzogdHJ1ZVxuICAgKiAgICAgICAgICdPR0M6V0ZTJzogZmFsc2VcbiAgICogICAgICAgfVxuICAgKiAgICAgfSxcbiAgICogICAgICdkb3dubG9hZCc6IHtcbiAgICogICAgICAgJ3NlcnZpY2VUeXBlJzoge1xuICAgKiAgICAgICB9XG4gICAqICAgICB9LFxuICAgKiAgICAgJ2RhdGFzZXQnOiB0cnVlXG4gICAqICAgfVxuICAgKiB9XG4gICAqL1xuICAvLyBGSVhNRTogdGhpcyBpcyBub3QgdXNlZCBhbnltb3JlXG4gIHN0YXRlRmlsdGVyc1RvUXVlcnlTdHJpbmcoZmFjZXRzU3RhdGUpIHtcbiAgICBjb25zdCBxdWVyeSA9IFtdXG4gICAgZm9yIChjb25zdCBpbmRleEtleSBpbiBmYWNldHNTdGF0ZSkge1xuICAgICAgaWYgKGluZGV4S2V5IGluIGZhY2V0c1N0YXRlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5Q2h1bmsgPSB0aGlzLnBhcnNlU3RhdGVOb2RlKFxuICAgICAgICAgIGluZGV4S2V5LFxuICAgICAgICAgIGZhY2V0c1N0YXRlW2luZGV4S2V5XSxcbiAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKVxuICAgICAgICBpZiAocXVlcnlDaHVuaykge1xuICAgICAgICAgIHF1ZXJ5LnB1c2gocXVlcnlDaHVuaylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb21iaW5lUXVlcnlHcm91cHMocXVlcnkpXG4gIH1cblxuICAvLyBGSVhNRTogdGhpcyBpcyBub3QgdXNlZCBhbnltb3JlXG4gIHByaXZhdGUgcGFyc2VTdGF0ZU5vZGUobm9kZU5hbWUsIG5vZGUsIGluZGV4S2V5KSB7XG4gICAgbGV0IHF1ZXJ5U3RyaW5nID0gJydcbiAgICBpZiAobm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHAgaW4gbm9kZSkge1xuICAgICAgICAvLyBuZXN0aW5nXG4gICAgICAgIGlmIChub2RlW3BdICYmIHR5cGVvZiBub2RlW3BdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IG5leHRMdmxLZXkgPSBPYmplY3Qua2V5cyhub2RlW3BdKVswXVxuICAgICAgICAgIGNvbnN0IG5leHRMdmxTdGF0ZSA9IG5vZGVbcF1bbmV4dEx2bEtleV1cbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobmV4dEx2bFN0YXRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZENodW5rcyA9IFtub2RlTmFtZSArICc6JyArICdcIicgKyBwICsgJ1wiJ11cbiAgICAgICAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5wYXJzZVN0YXRlTm9kZShcbiAgICAgICAgICAgICAgbmV4dEx2bEtleSxcbiAgICAgICAgICAgICAgbmV4dEx2bFN0YXRlLFxuICAgICAgICAgICAgICBuZXh0THZsS2V5XG4gICAgICAgICAgICApLnRyaW0oKVxuICAgICAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICAgIG5lc3RlZENodW5rcy5wdXNoKGNodW5rKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2h1bmtzLnB1c2goJygnICsgbmVzdGVkQ2h1bmtzLmpvaW4oJyBBTkQgJykgKyAnKScpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5wYXJzZVN0YXRlTm9kZShwLCBub2RlW3BdLCBub2RlTmFtZSkudHJpbSgpXG4gICAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaHVua3MgJiYgY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICBxdWVyeVN0cmluZyArPSAnKCdcbiAgICAgICAgcXVlcnlTdHJpbmcgKz0gY2h1bmtzLmpvaW4oJyAnKVxuICAgICAgICBxdWVyeVN0cmluZyArPSAnKSdcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gbm9kZVxuICAgIH0gZWxzZSBpZiAobm9kZSA9PT0gdHJ1ZSkge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gaW5kZXhLZXkgKyAnOlwiJyArIG5vZGVOYW1lICsgJ1wiJ1xuICAgIH0gZWxzZSBpZiAobm9kZSA9PT0gZmFsc2UpIHtcbiAgICAgIHF1ZXJ5U3RyaW5nICs9ICctJyArIGluZGV4S2V5ICsgJzpcIicgKyBub2RlTmFtZSArICdcIidcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nXG4gIH1cblxuICBwcml2YXRlIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKHF1ZXJ5c3RyaW5nKSB7XG4gICAgcmV0dXJuIHF1ZXJ5c3RyaW5nLnJlcGxhY2UoXG4gICAgICAvKFxcK3wtfFxcL3wmJnxcXHxcXHx8IXxcXHt8XFx9fFxcW3xcXF1cXF58fnxcXD98OnxcXFxcezF9fFxcKHxcXCkpL2csXG4gICAgICAnXFxcXCQxJ1xuICAgIClcbiAgfVxuXG4gIGJ1aWxkQWdncmVnYXRpb25zUGF5bG9hZChhZ2dyZWdhdGlvbnM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IGFueSB7XG4gICAgY29uc3QgbWFwVG9FU0FnZ3JlZ2F0aW9uID0gKGFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvblBhcmFtcykgPT4ge1xuICAgICAgc3dpdGNoIChhZ2dyZWdhdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2ZpbHRlcnMnOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICAgIGZpbHRlcnM6IE9iamVjdC5rZXlzKGFnZ3JlZ2F0aW9uLmZpbHRlcnMpLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGFnZ3JlZ2F0aW9uLmZpbHRlcnNbY3Vycl1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgIFtjdXJyXTogdGhpcy5maWx0ZXJzVG9RdWVyeShmaWx0ZXIpWzBdLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3Rlcm1zJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGVybXM6IHtcbiAgICAgICAgICAgICAgc2l6ZTogYWdncmVnYXRpb24ubGltaXQsXG4gICAgICAgICAgICAgIGZpZWxkOiBhZ2dyZWdhdGlvbi5maWVsZCxcbiAgICAgICAgICAgICAgb3JkZXI6IHtcbiAgICAgICAgICAgICAgICBbYF8ke2FnZ3JlZ2F0aW9uLnNvcnRbMV19YF06IGFnZ3JlZ2F0aW9uLnNvcnRbMF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnaGlzdG9ncmFtJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGlzdG9ncmFtOiB7XG4gICAgICAgICAgICAgIGZpZWxkOiBhZ2dyZWdhdGlvbi5maWVsZCxcbiAgICAgICAgICAgICAgaW50ZXJ2YWw6IGFnZ3JlZ2F0aW9uLmludGVydmFsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhZ2dyZWdhdGlvbnMpLnJlZHVjZShcbiAgICAgIChwcmV2LCBjdXJyKSA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbY3Vycl06IG1hcFRvRVNBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbnNbY3Vycl0pLFxuICAgICAgfSksXG4gICAgICB7fVxuICAgIClcbiAgfVxuXG4gIHBhcnNlQWdncmVnYXRpb25SZXN1bHQoXG4gICAgcmVzdWx0OiBBZ2dyZWdhdGlvblJlc3VsdCxcbiAgICByZXF1ZXN0UGFyYW06IEFnZ3JlZ2F0aW9uUGFyYW1zXG4gICk6IEFnZ3JlZ2F0aW9uIHtcbiAgICBzd2l0Y2ggKHJlcXVlc3RQYXJhbS50eXBlKSB7XG4gICAgICBjYXNlICdmaWx0ZXJzJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBidWNrZXRzOiBPYmplY3Qua2V5cyhcbiAgICAgICAgICAgIChyZXN1bHQgYXMgRmlsdGVyc0FnZ3JlZ2F0aW9uUmVzdWx0KS5idWNrZXRzXG4gICAgICAgICAgKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gKHJlc3VsdCBhcyBGaWx0ZXJzQWdncmVnYXRpb25SZXN1bHQpLmJ1Y2tldHNba2V5XVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdGVybToga2V5LFxuICAgICAgICAgICAgICBjb3VudDogYnVja2V0LmRvY19jb3VudCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAndGVybXMnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJ1Y2tldHM6IChyZXN1bHQgYXMgVGVybXNBZ2dyZWdhdGlvblJlc3VsdCkuYnVja2V0cy5tYXAoKGJ1Y2tldCkgPT4gKHtcbiAgICAgICAgICAgIHRlcm06IGJ1Y2tldC5rZXksXG4gICAgICAgICAgICBjb3VudDogYnVja2V0LmRvY19jb3VudCxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2hpc3RvZ3JhbSc6IHtcbiAgICAgICAgY29uc3QgaGlzdG9ncmFtUmVzdWx0ID0gcmVzdWx0IGFzIEhpc3RvZ3JhbUFnZ3JlZ2F0aW9uUmVzdWx0XG4gICAgICAgIGxldCBidWNrZXRzID0gQXJyYXkuaXNBcnJheShoaXN0b2dyYW1SZXN1bHQuYnVja2V0cylcbiAgICAgICAgICA/IGhpc3RvZ3JhbVJlc3VsdC5idWNrZXRzXG4gICAgICAgICAgOiBPYmplY3Qua2V5cyhoaXN0b2dyYW1SZXN1bHQuYnVja2V0cykubWFwKFxuICAgICAgICAgICAgICAoa2V5KSA9PiBoaXN0b2dyYW1SZXN1bHQuYnVja2V0c1trZXldXG4gICAgICAgICAgICApXG4gICAgICAgIGJ1Y2tldHMgPSBidWNrZXRzLm1hcCgoYnVja2V0LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICBsb3dWYWx1ZTogYnVja2V0LmtleSxcbiAgICAgICAgICBoaWdoVmFsdWU6IGJ1Y2tldHNbaW5kZXggKyAxXT8ua2V5LCAvLyB0aGlzIHdpbGwgcmV0dXJuIHVuZGVmaW5lZCBvbiB0aGUgbGFzdCBlbGVtZW50ICh3aGljaCB3ZSByZW1vdmUgbGF0ZXIpXG4gICAgICAgICAgY291bnQ6IGJ1Y2tldC5kb2NfY291bnQsXG4gICAgICAgIH0pKVxuICAgICAgICBidWNrZXRzLnBvcCgpIC8vIHNlZSBhYm92ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJ1Y2tldHMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -3,27 +3,32 @@ import { Injectable } from '@angular/core';
3
3
  import { assertValidXml, findConverterForDocument, Gn4Converter, Iso19139Converter, } from '../../../../../../libs/api/metadata-converter/src';
4
4
  import { PublicationVersionError } from '../../../../../../libs/common/domain/src/lib/model/error';
5
5
  import { PlatformServiceInterface } from '../../../../../../libs/common/domain/src/lib/platform.service.interface';
6
- import { RecordsApiService, SearchApiService, } from '../../../../../../libs/data-access/gn4/src';
6
+ import { LanguagesApiService, RecordsApiService, SearchApiService, } from '../../../../../../libs/data-access/gn4/src';
7
+ import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src';
7
8
  import { combineLatest, exhaustMap, forkJoin, from, of, Subject, switchMap, throwError, } from 'rxjs';
8
9
  import { catchError, map, tap } from 'rxjs/operators';
9
10
  import { lt } from 'semver';
10
11
  import { ElasticsearchService } from './elasticsearch';
12
+ import { Gn4SettingsService } from './settings/gn4-settings.service';
11
13
  import * as i0 from "@angular/core";
12
14
  import * as i1 from "@angular/common/http";
13
15
  import * as i2 from "../../../../../../libs/data-access/gn4/src";
14
16
  import * as i3 from "./elasticsearch";
15
17
  import * as i4 from "../../../../../../libs/api/metadata-converter/src";
16
18
  import * as i5 from "../../../../../../libs/common/domain/src/lib/platform.service.interface";
19
+ import * as i6 from "./settings/gn4-settings.service";
17
20
  const minPublicationApiVersion = '4.2.5';
18
21
  const TEMPORARY_ID_PREFIX = 'TEMP-ID-';
19
22
  export class Gn4Repository {
20
- constructor(httpClient, gn4SearchApi, gn4SearchHelper, gn4Mapper, gn4RecordsApi, platformService) {
23
+ constructor(httpClient, gn4SearchApi, gn4SearchHelper, gn4Mapper, gn4RecordsApi, platformService, gn4LanguagesApi, settingsService) {
21
24
  this.httpClient = httpClient;
22
25
  this.gn4SearchApi = gn4SearchApi;
23
26
  this.gn4SearchHelper = gn4SearchHelper;
24
27
  this.gn4Mapper = gn4Mapper;
25
28
  this.gn4RecordsApi = gn4RecordsApi;
26
29
  this.platformService = platformService;
30
+ this.gn4LanguagesApi = gn4LanguagesApi;
31
+ this.settingsService = settingsService;
27
32
  this._draftsChanged = new Subject();
28
33
  this.draftsChanged$ = this._draftsChanged.asObservable();
29
34
  }
@@ -45,19 +50,37 @@ export class Gn4Repository {
45
50
  }
46
51
  getRecord(uniqueIdentifier) {
47
52
  return this.gn4SearchApi
48
- .search('bucket', ['fcats'], JSON.stringify(this.gn4SearchHelper.getMetadataByIdPayload(uniqueIdentifier)))
53
+ .search('bucket', ['fcats', 'hassources'], JSON.stringify(this.gn4SearchHelper.getMetadataByIdsPayload([uniqueIdentifier])))
49
54
  .pipe(map((results) => results.hits.hits[0]), switchMap((record) => record ? this.gn4Mapper.readRecord(record) : of(null)));
50
55
  }
56
+ getMultipleRecords(uniqueIdentifiers) {
57
+ return this.gn4SearchApi
58
+ .search('bucket', undefined, JSON.stringify(this.gn4SearchHelper.getMetadataByIdsPayload(uniqueIdentifiers)))
59
+ .pipe(map((results) => results.hits.hits), switchMap((records) => records && records.length > 0
60
+ ? this.gn4Mapper.readRecords(records)
61
+ : of(null)));
62
+ }
51
63
  mapEmbeddedFeatureCatalog(featureTypes) {
52
64
  return {
53
65
  featureTypes: featureTypes.map((featureType) => ({
54
66
  name: featureType.typeName || '',
55
67
  definition: featureType.definition || '',
56
68
  attributes: Array.isArray(featureType.attributeTable)
57
- ? featureType.attributeTable.map((attr) => ({
58
- name: attr.name,
59
- title: attr.definition,
60
- }))
69
+ ? featureType.attributeTable.map((attr) => {
70
+ const values = attr.values
71
+ ?.filter((v) => v.code || v.label)
72
+ .map((v) => ({
73
+ code: v.code,
74
+ label: v.label,
75
+ }));
76
+ return {
77
+ name: attr.name,
78
+ code: attr.code,
79
+ definition: attr.definition,
80
+ type: attr.type,
81
+ ...(values?.length > 0 ? { values } : {}),
82
+ };
83
+ })
61
84
  : [],
62
85
  })),
63
86
  };
@@ -65,7 +88,8 @@ export class Gn4Repository {
65
88
  getFeatureCatalog(record, visited = new Set() // prevent looping
66
89
  ) {
67
90
  if (record.extras?.['featureTypes'] &&
68
- Array.isArray(record.extras['featureTypes'])) {
91
+ Array.isArray(record.extras['featureTypes']) &&
92
+ record.extras['featureTypes'].length > 0) {
69
93
  return of(this.mapEmbeddedFeatureCatalog(record.extras['featureTypes']));
70
94
  }
71
95
  const featureCatalogIdentifier = record.extras['featureCatalogIdentifier'];
@@ -80,6 +104,20 @@ export class Gn4Repository {
80
104
  .search('bucket', null, JSON.stringify(this.gn4SearchHelper.getRelatedRecordPayload(similarTo, 3)))
81
105
  .pipe(switchMap((results) => this.gn4Mapper.readRecords(results.hits.hits)));
82
106
  }
107
+ getSources(record) {
108
+ const sourcesIdentifiers = record.extras?.['sourcesIdentifiers'];
109
+ if (sourcesIdentifiers && sourcesIdentifiers.length > 0) {
110
+ return this.getMultipleRecords(sourcesIdentifiers);
111
+ }
112
+ return of(null);
113
+ }
114
+ getSourceOf(record) {
115
+ const sourceOfIdentifiers = record.extras?.['sourceOfIdentifiers'];
116
+ if (sourceOfIdentifiers && sourceOfIdentifiers.length > 0) {
117
+ return this.getMultipleRecords(sourceOfIdentifiers);
118
+ }
119
+ return of(null);
120
+ }
83
121
  aggregate(params) {
84
122
  // if aggregations are empty, return an empty object right away
85
123
  if (Object.keys(params).length === 0)
@@ -105,11 +143,29 @@ export class Gn4Repository {
105
143
  ? this.getRecord(uniqueIdentifier).pipe(map((record) => record.extras['isPublishedToAll']))
106
144
  : of(true);
107
145
  }
108
- canEditRecord(uniqueIdentifier) {
109
- return this.getRecord(uniqueIdentifier).pipe(map((record) => {
110
- return record.extras['edit'];
146
+ canDuplicate(record) {
147
+ return record.kind === 'dataset';
148
+ }
149
+ canDelete(record) {
150
+ return this.settingsService.allowEditHarvested$.pipe(map((allowEditHarvested) => {
151
+ return (record.extras['edit'] &&
152
+ (!record.extras['isHarvested'] || allowEditHarvested));
111
153
  }));
112
154
  }
155
+ canEdit(record, allowEditHarvested) {
156
+ return (record.kind === 'dataset' &&
157
+ record.extras['edit'] &&
158
+ (!record.extras['isHarvested'] || allowEditHarvested));
159
+ }
160
+ canEditRecord(uniqueIdentifier) {
161
+ return combineLatest([
162
+ this.getRecord(uniqueIdentifier),
163
+ this.settingsService.allowEditHarvested$,
164
+ ]).pipe(map(([record, allowEditHarvested]) => record ? this.canEdit(record, allowEditHarvested) : false));
165
+ }
166
+ canEditIndexedRecord(record) {
167
+ return this.settingsService.allowEditHarvested$.pipe(map((allowEditHarvested) => this.canEdit(record, allowEditHarvested)));
168
+ }
113
169
  openRecordForEdition(uniqueIdentifier) {
114
170
  const draft$ = of(this.getRecordFromLocalStorage(uniqueIdentifier));
115
171
  const recordAsXml$ = this.getRecordAsXml(uniqueIdentifier);
@@ -152,8 +208,8 @@ export class Gn4Repository {
152
208
  const converter = findConverterForDocument(fetchedRecordAsXml);
153
209
  const record = await converter.readRecord(fetchedRecordAsXml);
154
210
  record.title = `${record.title} (Copy)`;
155
- await converter.writeRecord(record, fetchedRecordAsXml);
156
- return this.saveRecord(record, '', false);
211
+ const recordAsXml = await converter.writeRecord(record, fetchedRecordAsXml);
212
+ return this.saveRecord(record, recordAsXml, false);
157
213
  }), exhaustMap((uuidObservable) => uuidObservable), catchError((error) => {
158
214
  return throwError(() => error);
159
215
  }));
@@ -224,6 +280,13 @@ export class Gn4Repository {
224
280
  }));
225
281
  }));
226
282
  }
283
+ getApplicationLanguages() {
284
+ return this.gn4LanguagesApi
285
+ .getApplicationLanguages()
286
+ .pipe(map((languages) => languages
287
+ .map((lang) => LANG_3_TO_2_MAPPER[lang.id ?? ''])
288
+ .filter((code) => !!code)));
289
+ }
227
290
  getRecordAsXml(uniqueIdentifier) {
228
291
  return this.gn4RecordsApi
229
292
  .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
@@ -264,10 +327,10 @@ export class Gn4Repository {
264
327
  removeRecordFromLocalStorage(recordId) {
265
328
  window.localStorage.removeItem(this.getLocalStorageKeyForRecord(recordId));
266
329
  }
267
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, deps: [{ token: i1.HttpClient }, { token: i2.SearchApiService }, { token: i3.ElasticsearchService }, { token: i4.Gn4Converter }, { token: i2.RecordsApiService }, { token: i5.PlatformServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, deps: [{ token: i1.HttpClient }, { token: i2.SearchApiService }, { token: i3.ElasticsearchService }, { token: i4.Gn4Converter }, { token: i2.RecordsApiService }, { token: i5.PlatformServiceInterface }, { token: i2.LanguagesApiService }, { token: i6.Gn4SettingsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
268
331
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository }); }
269
332
  }
270
333
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, decorators: [{
271
334
  type: Injectable
272
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SearchApiService }, { type: i3.ElasticsearchService }, { type: i4.Gn4Converter }, { type: i2.RecordsApiService }, { type: i5.PlatformServiceInterface }] });
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2duNC1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBRVosaUJBQWlCLEdBQ2xCLE1BQU0sbURBQW1ELENBQUE7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUE7QUFlbEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUE7QUFFbEgsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FFakIsTUFBTSw0Q0FBNEMsQ0FBQTtBQUNuRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixRQUFRLEVBQ1IsSUFBSSxFQUVKLEVBQUUsRUFDRixPQUFPLEVBQ1AsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQTtBQUNiLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUE7Ozs7Ozs7QUFFdEQsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUE7QUFFeEMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUE7QUFLdEMsTUFBTSxPQUFPLGFBQWE7SUFJeEIsWUFDVSxVQUFzQixFQUN0QixZQUE4QixFQUM5QixlQUFxQyxFQUNyQyxTQUF1QixFQUN2QixhQUFnQyxFQUNoQyxlQUF5QztRQUx6QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBc0I7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQTBCO1FBVG5ELG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtRQUNwQyxtQkFBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUE7SUFTaEQsQ0FBQztJQUVKLE1BQU0sQ0FBQyxFQUNMLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxJQUFJLEVBQ0osU0FBUyxFQUNULGNBQWMsR0FDRDtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVk7YUFDckIsTUFBTSxDQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FDWixJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUN2QyxFQUFFLEVBQ0YsS0FBSyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsQ0FDZixDQUNGLENBQ0Y7YUFDQSxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsT0FBeUIsRUFBRSxFQUFFLENBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQztZQUNyQyxPQUFPO1NBQ1IsQ0FBQyxDQUFDLENBQ0osQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFxQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZO2FBQ3JCLE1BQU0sQ0FDTCxlQUFlLEVBQ2YsSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDYixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQzFDLEVBQUUsRUFDRixDQUFDLEVBQ0QsQ0FBQyxFQUNELFNBQVMsRUFDVCxTQUFTLEVBQ1QsT0FBTyxDQUNSO1lBQ0QsZ0JBQWdCLEVBQUUsSUFBSTtTQUN2QixDQUFDLENBQ0g7YUFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBeUIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0UsQ0FBQztJQUVELFNBQVMsQ0FBQyxnQkFBd0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsWUFBWTthQUNyQixNQUFNLENBQ0wsUUFBUSxFQUNSLENBQUMsT0FBTyxDQUFDLEVBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FDWixJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQzlELENBQ0Y7YUFDQSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsT0FBeUIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEQsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUN0RCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8seUJBQXlCLENBQy9CLFlBQXVDO1FBRXZDLE9BQU87WUFDTCxZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRTtnQkFDaEMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksRUFBRTtnQkFDeEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztvQkFDbkQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUN4QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVO3FCQUN2QixDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLEVBQUU7YUFDUCxDQUFDLENBQUM7U0FDSixDQUFBO0lBQ0gsQ0FBQztJQUNELGlCQUFpQixDQUNmLE1BQXFCLEVBQ3JCLFVBQXVCLElBQUksR0FBRyxFQUFFLENBQUMsa0JBQWtCOztRQUVuRCxJQUNFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUM7WUFDL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQzVDLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDMUUsQ0FBQztRQUVELE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDNUMsMEJBQTBCLENBQ2pCLENBQUE7UUFDWCxJQUFJLHdCQUF3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7WUFDdkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQzVELENBQ0YsQ0FBQTtRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBd0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsWUFBWTthQUNyQixNQUFNLENBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUMzRCxDQUNGO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM5QyxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQTBCO1FBQ2xDLCtEQUErRDtRQUMvRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUVuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzFFLE9BQU8sSUFBSSxDQUFDLFlBQVk7YUFDckIsTUFBTSxDQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ3hFO2FBQ0EsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQTBCLEVBQUUsRUFBRSxDQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQ3ZDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNmLEdBQUcsSUFBSTtZQUNQLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FDakQsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUNiO1NBQ0YsQ0FBQyxFQUNGLEVBQUUsQ0FDSCxDQUNGLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZO2FBQ3JCLE1BQU0sQ0FDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNyRTthQUNBLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxPQUF5QixFQUFFLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDO1lBQ3JDLE9BQU87U0FDUixDQUFDLENBQUMsQ0FDSixDQUNGLENBQUE7SUFDTCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsZ0JBQXdCO1FBQ2pELE9BQU8sZ0JBQWdCO1lBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUNuQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQVksQ0FBQyxDQUM5RDtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDZCxDQUFDO0lBRUQsYUFBYSxDQUFDLGdCQUF3QjtRQUNwQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQzFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBWSxDQUFBO1FBQ3pDLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLGdCQUF3QjtRQUV4QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtRQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFMUQsT0FBTyxhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9DLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxJQUFJLFdBQVcsQ0FBQTtZQUNoQyxNQUFNLGNBQWMsR0FBRyxXQUFXLEtBQUssSUFBSSxDQUFBO1lBQzNDLE9BQU8sd0JBQXdCLENBQUMsR0FBRyxDQUFDO2lCQUNqQyxVQUFVLENBQUMsR0FBRyxDQUFDO2lCQUNmLElBQUksQ0FDSCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1QsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBcUMsQ0FDcEUsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQ3RCLGdCQUF3QjtRQUV4QixPQUFPLElBQUksQ0FBQyxhQUFhO2FBQ3RCLE1BQU0sQ0FDTCxnQkFBZ0IsRUFDaEIsR0FBRyxFQUNILFVBQVUsRUFDVixFQUFFLEVBQ0YsS0FBSyxFQUNMLFNBQVMsRUFDVCxJQUFJLEVBQ0osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMO1lBQ0UsZ0JBQWdCLEVBQUUsa0JBQWtCO1lBQ3BDLHVCQUF1QixFQUFFLGdDQUFnQztTQUMxRCxDQUNGO2FBQ0EsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDOUMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQ1Qsd0JBQXdCLENBQUMsR0FBRyxDQUFDO2lCQUMxQixVQUFVLENBQUMsR0FBRyxDQUFDO2lCQUNmLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBa0MsQ0FBQTtZQUM3RCxDQUFDLENBQUMsQ0FDTCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNMLENBQUM7SUFFRCxVQUFVLENBQ1IsTUFBcUIsRUFDckIscUJBQThCLEVBQzlCLFlBQVksR0FBRyxJQUFJO1FBRW5CLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQzlDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxJQUFJLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzVDLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLEVBQ3pFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUN2QixVQUFVLEVBQ1YsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsQ0FDVixDQUNGLEVBQ0QsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN6RCxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ25ELENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsaUJBQXlCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUN4RCxVQUFVLENBQUMsS0FBSyxFQUFFLGtCQUEwQixFQUFFLEVBQUU7WUFDOUMsTUFBTSxTQUFTLEdBQUcsd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUU3RCxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFBO1lBQ3ZDLE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtZQUV2RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUMzQyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxjQUFrQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFDbEUsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2hDLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLGdCQUF3QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDMUQsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUE7SUFDOUMsQ0FBQztJQUVELGlCQUFpQixDQUNmLE1BQXFCLEVBQ3JCLHFCQUE4QjtRQUU5QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxJQUFJLENBQ2xFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLGdCQUF3QjtRQUN2QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVCLENBQUM7SUFFRCxjQUFjLENBQUMsZ0JBQXdCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFBO0lBQ2xFLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsWUFBWTtRQUNWLE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDOUIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUM7YUFDdkQsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM5QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQTtRQUNwQyxPQUFPLElBQUksQ0FDVCxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMxRCxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDeEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDbEMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUM7YUFDdkQsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM5QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDM0MsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUVELDBCQUEwQixDQUFDLFdBQTBCO1FBQ25ELE9BQU8sRUFBRSxDQUFDO1lBQ1IsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtZQUN4QyxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7U0FDNUQsQ0FBQyxDQUFDLElBQUksQ0FDTCxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQ3BDLElBQUksU0FBUyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUNqRCxDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2IsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDaEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxXQUFXLENBQUMsZ0JBQWdCLENBQzFELENBQUE7b0JBQ0QsT0FBTyxjQUFjLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQTtnQkFDOUMsQ0FBQyxDQUFDLENBQ0g7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7YUFDN0MsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksWUFBWSxFQUFFLGFBQWEsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO29CQUNyRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDO3dCQUM3QyxFQUFFLFFBQVEsRUFBRTt3QkFDWixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDZCxPQUFPO3dCQUNMLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQzdCLElBQUksRUFBRSxZQUFZLENBQUMsYUFBYTtxQkFDakMsQ0FBQTtnQkFDSCxDQUFDO2dCQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQTtZQUM3QyxDQUFDLENBQUMsQ0FDSCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsZ0JBQXdCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLGFBQWE7YUFDdEIsV0FBVyxDQUNWLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULEVBQUUsZ0JBQWdCLEVBQUUsMEJBQStDLEVBQUUsQ0FBQywyREFBMkQ7U0FDbEk7YUFDQSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ2hDLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUN0QyxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQzFELENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsTUFBcUIsRUFDckIscUJBQThCO1FBRTlCLDRFQUE0RTtRQUM1RSxNQUFNLFNBQVMsR0FBRyxxQkFBcUI7WUFDckMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDO1lBQ2pELENBQUMsQ0FBQyxJQUFJLGlCQUFpQixFQUFFLENBQUE7UUFDM0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsaUJBQXlCO1FBRXpCLElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUE7UUFDL0IsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFBO1FBQzVCLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSwwQkFBMEIsQ0FBQyxDQUFBO1FBRTNELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsR0FBRyxDQUFTLGlCQUFpQixFQUFFO1lBQzlCLFlBQVksRUFBTyxhQUFhO1lBQ2hDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRSxNQUFNO1NBQ2hCLENBQUM7YUFDRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDdEIsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBRS9CLE9BQU8sZUFBZSxDQUFBO1FBQ3hCLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDTCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsUUFBZ0I7UUFDbEQsT0FBTyx1QkFBdUIsUUFBUSxFQUFFLENBQUEsQ0FBQyxzREFBc0Q7SUFDakcsQ0FBQztJQUVPLHdCQUF3QixDQUFDLFdBQXdCLEVBQUUsUUFBZ0I7UUFDekUsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3pCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsRUFDMUMsV0FBVyxDQUNaLENBQUE7SUFDSCxDQUFDO0lBRU8seUJBQXlCLENBQUMsUUFBZ0I7UUFDaEQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDaEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUMzQyxDQUFBO0lBQ0gsQ0FBQztJQUVPLDRCQUE0QixDQUFDLFFBQWdCO1FBQ25ELE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7K0dBcGVVLGFBQWE7bUhBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEh0dHBDbGllbnQsXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwSGVhZGVycyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIGFzc2VydFZhbGlkWG1sLFxuICBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQsXG4gIEduNENvbnZlcnRlcixcbiAgR240U2VhcmNoUmVzdWx0cyxcbiAgSXNvMTkxMzlDb252ZXJ0ZXIsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMnXG5pbXBvcnQgeyBQdWJsaWNhdGlvblZlcnNpb25FcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL2Vycm9yJ1xuaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgRGF0YXNldEZlYXR1cmVUeXBlLFxuICBEYXRhc2V0RmVhdHVyZUNhdGFsb2csXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9ucyxcbiAgQWdncmVnYXRpb25zUGFyYW1zLFxuICBGaWVsZEZpbHRlcnMsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3NlYXJjaCdcbmltcG9ydCB7XG4gIFNlYXJjaFBhcmFtcyxcbiAgU2VhcmNoUmVzdWx0cyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvc2VhcmNoL3NlYXJjaC5tb2RlbCdcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL3BsYXRmb3JtLnNlcnZpY2UuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgUmVjb3Jkc1JlcG9zaXRvcnlJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9yZXBvc2l0b3J5L3JlY29yZHMtcmVwb3NpdG9yeS5pbnRlcmZhY2UnXG5pbXBvcnQge1xuICBSZWNvcmRzQXBpU2VydmljZSxcbiAgU2VhcmNoQXBpU2VydmljZSxcbiAgRmVhdHVyZVJlc3BvbnNlQXBpTW9kZWwsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3MvZ240L3NyYydcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIGV4aGF1c3RNYXAsXG4gIGZvcmtKb2luLFxuICBmcm9tLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IGx0IH0gZnJvbSAnc2VtdmVyJ1xuaW1wb3J0IHsgRWxhc3RpY3NlYXJjaFNlcnZpY2UgfSBmcm9tICcuL2VsYXN0aWNzZWFyY2gnXG5cbmNvbnN0IG1pblB1YmxpY2F0aW9uQXBpVmVyc2lvbiA9ICc0LjIuNSdcblxuY29uc3QgVEVNUE9SQVJZX0lEX1BSRUZJWCA9ICdURU1QLUlELSdcblxuZXhwb3J0IHR5cGUgUmVjb3JkQXNYbWwgPSBzdHJpbmdcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEduNFJlcG9zaXRvcnkgaW1wbGVtZW50cyBSZWNvcmRzUmVwb3NpdG9yeUludGVyZmFjZSB7XG4gIF9kcmFmdHNDaGFuZ2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuICBkcmFmdHNDaGFuZ2VkJCA9IHRoaXMuX2RyYWZ0c0NoYW5nZWQuYXNPYnNlcnZhYmxlKClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hBcGk6IFNlYXJjaEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hIZWxwZXI6IEVsYXN0aWNzZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ240TWFwcGVyOiBHbjRDb252ZXJ0ZXIsXG4gICAgcHJpdmF0ZSBnbjRSZWNvcmRzQXBpOiBSZWNvcmRzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlXG4gICkge31cblxuICBzZWFyY2goe1xuICAgIGZpbHRlcnMsXG4gICAgZmllbGRzLFxuICAgIG9mZnNldCxcbiAgICBsaW1pdCxcbiAgICBzb3J0LFxuICAgIGZpbHRlcklkcyxcbiAgICBmaWx0ZXJHZW9tZXRyeSxcbiAgfTogU2VhcmNoUGFyYW1zKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHRzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0U2VhcmNoUmVxdWVzdEJvZHkoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWx0ZXJJZHMsXG4gICAgICAgICAgICBmaWx0ZXJHZW9tZXRyeVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cykudGhlbigocmVjb3JkcykgPT4gKHtcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDAsXG4gICAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBnZXRNYXRjaGVzQ291bnQoZmlsdGVyczogRmllbGRGaWx0ZXJzKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdyZWNvcmRzLWNvdW50JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLnRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgICApLFxuICAgICAgICAgIHRyYWNrX3RvdGFsX2hpdHM6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShtYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+IHJlc3VsdHMuaGl0cy50b3RhbD8udmFsdWUgfHwgMCkpXG4gIH1cblxuICBnZXRSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIFsnZmNhdHMnXSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0TWV0YWRhdGFCeUlkUGF5bG9hZCh1bmlxdWVJZGVudGlmaWVyKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMuaGl0c1swXSksXG4gICAgICAgIHN3aXRjaE1hcCgocmVjb3JkKSA9PlxuICAgICAgICAgIHJlY29yZCA/IHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmQocmVjb3JkKSA6IG9mKG51bGwpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgbWFwRW1iZWRkZWRGZWF0dXJlQ2F0YWxvZyhcbiAgICBmZWF0dXJlVHlwZXM6IEFycmF5PERhdGFzZXRGZWF0dXJlVHlwZT5cbiAgKTogRGF0YXNldEZlYXR1cmVDYXRhbG9nIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmVhdHVyZVR5cGVzOiBmZWF0dXJlVHlwZXMubWFwKChmZWF0dXJlVHlwZSkgPT4gKHtcbiAgICAgICAgbmFtZTogZmVhdHVyZVR5cGUudHlwZU5hbWUgfHwgJycsXG4gICAgICAgIGRlZmluaXRpb246IGZlYXR1cmVUeXBlLmRlZmluaXRpb24gfHwgJycsXG4gICAgICAgIGF0dHJpYnV0ZXM6IEFycmF5LmlzQXJyYXkoZmVhdHVyZVR5cGUuYXR0cmlidXRlVGFibGUpXG4gICAgICAgICAgPyBmZWF0dXJlVHlwZS5hdHRyaWJ1dGVUYWJsZS5tYXAoKGF0dHIpID0+ICh7XG4gICAgICAgICAgICAgIG5hbWU6IGF0dHIubmFtZSxcbiAgICAgICAgICAgICAgdGl0bGU6IGF0dHIuZGVmaW5pdGlvbixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogW10sXG4gICAgICB9KSksXG4gICAgfVxuICB9XG4gIGdldEZlYXR1cmVDYXRhbG9nKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICB2aXNpdGVkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKSAvLyBwcmV2ZW50IGxvb3BpbmdcbiAgKTogT2JzZXJ2YWJsZTxEYXRhc2V0RmVhdHVyZUNhdGFsb2cgfCBudWxsPiB7XG4gICAgaWYgKFxuICAgICAgcmVjb3JkLmV4dHJhcz8uWydmZWF0dXJlVHlwZXMnXSAmJlxuICAgICAgQXJyYXkuaXNBcnJheShyZWNvcmQuZXh0cmFzWydmZWF0dXJlVHlwZXMnXSlcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih0aGlzLm1hcEVtYmVkZGVkRmVhdHVyZUNhdGFsb2cocmVjb3JkLmV4dHJhc1snZmVhdHVyZVR5cGVzJ10pKVxuICAgIH1cblxuICAgIGNvbnN0IGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllciA9IHJlY29yZC5leHRyYXNbXG4gICAgICAnZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyJ1xuICAgIF0gYXMgc3RyaW5nXG4gICAgaWYgKGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllciAmJiAhdmlzaXRlZC5oYXMoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKSkge1xuICAgICAgdmlzaXRlZC5hZGQoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkKGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllcikucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgcmVjb3JkID8gdGhpcy5nZXRGZWF0dXJlQ2F0YWxvZyhyZWNvcmQsIHZpc2l0ZWQpIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKVxuICB9XG5cbiAgZ2V0U2ltaWxhclJlY29yZHMoc2ltaWxhclRvOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRSZWxhdGVkUmVjb3JkUGF5bG9hZChzaW1pbGFyVG8sIDMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGFnZ3JlZ2F0ZShwYXJhbXM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IE9ic2VydmFibGU8QWdncmVnYXRpb25zPiB7XG4gICAgLy8gaWYgYWdncmVnYXRpb25zIGFyZSBlbXB0eSwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCByaWdodCBhd2F5XG4gICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKSByZXR1cm4gb2Yoe30pXG5cbiAgICBjb25zdCBhZ2dyZWdhdGlvbnMgPSB0aGlzLmduNFNlYXJjaEhlbHBlci5idWlsZEFnZ3JlZ2F0aW9uc1BheWxvYWQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KGFnZ3JlZ2F0aW9ucykpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZS5hZ2dyZWdhdGlvbnMpLnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3Vycl06IHRoaXMuZ240U2VhcmNoSGVscGVyLnBhcnNlQWdncmVnYXRpb25SZXN1bHQoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuYWdncmVnYXRpb25zW2N1cnJdLFxuICAgICAgICAgICAgICAgIHBhcmFtc1tjdXJyXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZnV6enlTZWFyY2gocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0cz4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ240U2VhcmNoSGVscGVyLmJ1aWxkQXV0b2NvbXBsZXRlUGF5bG9hZChxdWVyeSkpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PlxuICAgICAgICAgIHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmRzKHJlc3VsdHMuaGl0cy5oaXRzKS50aGVuKChyZWNvcmRzKSA9PiAoe1xuICAgICAgICAgICAgY291bnQ6IHJlc3VsdHMuaGl0cy50b3RhbD8udmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJlY29yZHMsXG4gICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGdldFJlY29yZFB1YmxpY2F0aW9uU3RhdHVzKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB1bmlxdWVJZGVudGlmaWVyXG4gICAgICA/IHRoaXMuZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXIpLnBpcGUoXG4gICAgICAgICAgbWFwKChyZWNvcmQpID0+IHJlY29yZC5leHRyYXNbJ2lzUHVibGlzaGVkVG9BbGwnXSBhcyBib29sZWFuKVxuICAgICAgICApXG4gICAgICA6IG9mKHRydWUpXG4gIH1cblxuICBjYW5FZGl0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmdldFJlY29yZCh1bmlxdWVJZGVudGlmaWVyKS5waXBlKFxuICAgICAgbWFwKChyZWNvcmQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC5leHRyYXNbJ2VkaXQnXSBhcyBib29sZWFuXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIG9wZW5SZWNvcmRGb3JFZGl0aW9uKFxuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGJvb2xlYW5dIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0JCA9IG9mKHRoaXMuZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKSlcbiAgICBjb25zdCByZWNvcmRBc1htbCQgPSB0aGlzLmdldFJlY29yZEFzWG1sKHVuaXF1ZUlkZW50aWZpZXIpXG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbZHJhZnQkLCByZWNvcmRBc1htbCRdKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChbZHJhZnQsIHJlY29yZEFzWG1sXSkgPT4ge1xuICAgICAgICBjb25zdCB4bWwgPSBkcmFmdCA/PyByZWNvcmRBc1htbFxuICAgICAgICBjb25zdCBpc1NhdmVkQWxyZWFkeSA9IHJlY29yZEFzWG1sICE9PSBudWxsXG4gICAgICAgIHJldHVybiBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoeG1sKVxuICAgICAgICAgIC5yZWFkUmVjb3JkKHhtbClcbiAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgIChyZWNvcmQpID0+XG4gICAgICAgICAgICAgIFtyZWNvcmQsIHhtbCwgaXNTYXZlZEFscmVhZHldIGFzIFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGJvb2xlYW5dXG4gICAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBvcGVuUmVjb3JkRm9yRHVwbGljYXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgdHJ1ZV0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240UmVjb3Jkc0FwaVxuICAgICAgLmNyZWF0ZShcbiAgICAgICAgdW5pcXVlSWRlbnRpZmllcixcbiAgICAgICAgJzInLFxuICAgICAgICAnTUVUQURBVEEnLFxuICAgICAgICAnJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgJ2JvZHknLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBIZWFkZXJBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCcsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHVuaXF1ZUlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWNvcmRBc1htbCh1bmlxdWVJZGVudGlmaWVyKVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCh4bWwpID0+IHtcbiAgICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCh4bWwpXG4gICAgICAgICAgICAgIC5yZWFkUmVjb3JkKHhtbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbcmVjb3JkLCB4bWwsIHRydWVdIGFzIFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIHRydWVdXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgc2F2ZVJlY29yZChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nLFxuICAgIHB1Ymxpc2hUb0FsbCA9IHRydWVcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZ2V0QXBpVmVyc2lvbigpLnBpcGUoXG4gICAgICBtYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgaWYgKGx0KHZlcnNpb24sIG1pblB1YmxpY2F0aW9uQXBpVmVyc2lvbikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUHVibGljYXRpb25WZXJzaW9uRXJyb3IodmVyc2lvbilcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zZXJpYWxpemVSZWNvcmRUb1htbChyZWNvcmQsIHJlZmVyZW5jZVJlY29yZFNvdXJjZSkpLFxuICAgICAgc3dpdGNoTWFwKChyZWNvcmRYbWwpID0+XG4gICAgICAgIHRoaXMuZ240UmVjb3Jkc0FwaS5pbnNlcnQoXG4gICAgICAgICAgJ01FVEFEQVRBJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBwdWJsaXNoVG9BbGwsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICdPVkVSV1JJVEUnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICdfbm9uZV8nLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHJlY29yZFhtbFxuICAgICAgICApXG4gICAgICApLFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUlkID0gT2JqZWN0LmtleXMocmVzcG9uc2UubWV0YWRhdGFJbmZvcylbMF1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm1ldGFkYXRhSW5mb3NbbWV0YWRhdGFJZF1bMF0udXVpZFxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBkdXBsaWNhdGVFeHRlcm5hbFJlY29yZChyZWNvcmREb3dubG9hZFVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRFeHRlcm5hbFJlY29yZEFzWG1sKHJlY29yZERvd25sb2FkVXJsKS5waXBlKFxuICAgICAgZXhoYXVzdE1hcChhc3luYyAoZmV0Y2hlZFJlY29yZEFzWG1sOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVyID0gZmluZENvbnZlcnRlckZvckRvY3VtZW50KGZldGNoZWRSZWNvcmRBc1htbClcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXdhaXQgY29udmVydGVyLnJlYWRSZWNvcmQoZmV0Y2hlZFJlY29yZEFzWG1sKVxuXG4gICAgICAgIHJlY29yZC50aXRsZSA9IGAke3JlY29yZC50aXRsZX0gKENvcHkpYFxuICAgICAgICBhd2FpdCBjb252ZXJ0ZXIud3JpdGVSZWNvcmQocmVjb3JkLCBmZXRjaGVkUmVjb3JkQXNYbWwpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZVJlY29yZChyZWNvcmQsICcnLCBmYWxzZSlcbiAgICAgIH0pLFxuICAgICAgZXhoYXVzdE1hcCgodXVpZE9ic2VydmFibGU6IE9ic2VydmFibGU8c3RyaW5nPikgPT4gdXVpZE9ic2VydmFibGUpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBkZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240UmVjb3Jkc0FwaS5kZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcilcbiAgfVxuXG4gIGdlbmVyYXRlVGVtcG9yYXJ5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7VEVNUE9SQVJZX0lEX1BSRUZJWH0ke0RhdGUubm93KCl9YFxuICB9XG5cbiAgc2F2ZVJlY29yZEFzRHJhZnQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY29yZFRvWG1sKHJlY29yZCwgcmVmZXJlbmNlUmVjb3JkU291cmNlKS5waXBlKFxuICAgICAgdGFwKChyZWNvcmRYbWwpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlUmVjb3JkVG9Mb2NhbFN0b3JhZ2UocmVjb3JkWG1sLCByZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgICAgICAgdGhpcy5fZHJhZnRzQ2hhbmdlZC5uZXh0KClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgY2xlYXJSZWNvcmREcmFmdCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZVJlY29yZEZyb21Mb2NhbFN0b3JhZ2UodW5pcXVlSWRlbnRpZmllcilcbiAgICB0aGlzLl9kcmFmdHNDaGFuZ2VkLm5leHQoKVxuICB9XG5cbiAgcmVjb3JkSGFzRHJhZnQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKSAhPT0gbnVsbFxuICB9XG5cbiAgLy8gZ2VuZXJhdGVkIGJ5IGNvcGlsb3RcbiAgZ2V0QWxsRHJhZnRzKCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPiB7XG4gICAgY29uc3QgaXRlbXMgPSB7IC4uLndpbmRvdy5sb2NhbFN0b3JhZ2UgfVxuICAgIGNvbnN0IGRyYWZ0cyA9IE9iamVjdC5rZXlzKGl0ZW1zKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aCgnZ2VvbmV0d29yay11aS1kcmFmdC0nKSlcbiAgICAgIC5tYXAoKGtleSkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpXG4gICAgICAuZmlsdGVyKChkcmFmdCkgPT4gZHJhZnQgIT09IG51bGwpXG4gICAgcmV0dXJuIGZyb20oXG4gICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgZHJhZnRzLm1hcCgoZHJhZnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gZmluZENvbnZlcnRlckZvckRvY3VtZW50KGRyYWZ0KS5yZWFkUmVjb3JkKGRyYWZ0KVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGdldERyYWZ0c0NvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgY29uc3QgaXRlbXMgPSB7IC4uLndpbmRvdy5sb2NhbFN0b3JhZ2UgfVxuICAgIGNvbnN0IGRyYWZ0Q291bnQgPSBPYmplY3Qua2V5cyhpdGVtcylcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2dlb25ldHdvcmstdWktZHJhZnQtJykpXG4gICAgICAubWFwKChrZXkpID0+IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKVxuICAgICAgLmZpbHRlcigoZHJhZnQpID0+IGRyYWZ0ICE9PSBudWxsKS5sZW5ndGhcbiAgICByZXR1cm4gb2YoZHJhZnRDb3VudClcbiAgfVxuXG4gIGhhc1JlY29yZENoYW5nZWRTaW5jZURyYWZ0KGxvY2FsUmVjb3JkOiBDYXRhbG9nUmVjb3JkKSB7XG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGlzVW5zYXZlZDogIWxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICBoYXNEcmFmdDogdGhpcy5yZWNvcmRIYXNEcmFmdChsb2NhbFJlY29yZC51bmlxdWVJZGVudGlmaWVyKSxcbiAgICB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh7IGlzVW5zYXZlZCwgaGFzRHJhZnQgfSkgPT4ge1xuICAgICAgICBpZiAoaXNVbnNhdmVkIHx8ICFoYXNEcmFmdCkge1xuICAgICAgICAgIHJldHVybiBvZih7IHVzZXI6IHVuZGVmaW5lZCwgZGF0ZTogdW5kZWZpbmVkIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtcbiAgICAgICAgICB0aGlzLmdldEFsbERyYWZ0cygpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGRyYWZ0cykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1JlY29yZCA9IGRyYWZ0cy5maW5kKFxuICAgICAgICAgICAgICAgIChkcmFmdCkgPT5cbiAgICAgICAgICAgICAgICAgIGRyYWZ0LnVuaXF1ZUlkZW50aWZpZXIgPT09IGxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hpbmdSZWNvcmQ/LnJlY29yZFVwZGF0ZWQgfHwgbnVsbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuZ2V0UmVjb3JkKGxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpLFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW2RyYWZ0UmVjb3JkVXBkYXRlZCwgcmVjZW50UmVjb3JkXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlY2VudFJlY29yZD8ucmVjb3JkVXBkYXRlZCA+IGRyYWZ0UmVjb3JkVXBkYXRlZCkge1xuICAgICAgICAgICAgICBjb25zdCB1c2VyID0gcmVjZW50UmVjb3JkLmV4dHJhcz8uWydvd25lckluZm8nXVxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgID8uc3BsaXQoJ3wnKVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVzZXI6IGAke3VzZXJbMl19ICR7dXNlclsxXX1gLFxuICAgICAgICAgICAgICAgIGRhdGU6IHJlY2VudFJlY29yZC5yZWNvcmRVcGRhdGVkLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyB1c2VyOiB1bmRlZmluZWQsIGRhdGU6IHVuZGVmaW5lZCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFJlY29yZEFzWG1sKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFJlY29yZHNBcGlcbiAgICAgIC5nZXRSZWNvcmRBcyhcbiAgICAgICAgdW5pcXVlSWRlbnRpZmllcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCcsXG4gICAgICAgICdyZXNwb25zZScsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBodHRwSGVhZGVyQWNjZXB0OiAndGV4dC94bWwsYXBwbGljYXRpb24veG1sJyBhcyAnYXBwbGljYXRpb24veG1sJyB9IC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlc3BvbnNlIGlzIHBhcnNlZCBhcyB0ZXh0XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT5cbiAgICAgICAgICBlcnJvci5zdGF0dXMgPT09IDQwNCA/IG9mKG51bGwpIDogdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVSZWNvcmRUb1htbChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgLy8gaWYgdGhlcmUncyBhIHJlZmVyZW5jZSByZWNvcmQsIHVzZSB0aGF0IHN0YW5kYXJkOyBvdGhlcndpc2UsIHVzZSBpc28xOTEzOVxuICAgIGNvbnN0IGNvbnZlcnRlciA9IHJlZmVyZW5jZVJlY29yZFNvdXJjZVxuICAgICAgPyBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQocmVmZXJlbmNlUmVjb3JkU291cmNlKVxuICAgICAgOiBuZXcgSXNvMTkxMzlDb252ZXJ0ZXIoKVxuICAgIHJldHVybiBmcm9tKGNvbnZlcnRlci53cml0ZVJlY29yZChyZWNvcmQsIHJlZmVyZW5jZVJlY29yZFNvdXJjZSkpXG4gIH1cblxuICBwcml2YXRlIGdldEV4dGVybmFsUmVjb3JkQXNYbWwoXG4gICAgcmVjb3JkRG93bmxvYWRVcmw6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICBjb25zdCByZXNwb25zZVR5cGVfID0gJ3RleHQnXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAndGV4dC94bWwsYXBwbGljYXRpb24veG1sJylcblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQ8c3RyaW5nPihyZWNvcmREb3dubG9hZFVybCwge1xuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlY29yZEFzWG1sRmlsZSkgPT4ge1xuICAgICAgICAgIGFzc2VydFZhbGlkWG1sKHJlY29yZEFzWG1sRmlsZSlcblxuICAgICAgICAgIHJldHVybiByZWNvcmRBc1htbEZpbGVcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlS2V5Rm9yUmVjb3JkKHJlY29yZElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgZ2VvbmV0d29yay11aS1kcmFmdC0ke3JlY29yZElkfWAgLy8gTmV2ZXIgY2hhbmdlIHRoaXMgcHJlZml4IGFzIGl0IGlzIGEgYnJlYWtpbmcgY2hhbmdlXG4gIH1cblxuICBwcml2YXRlIHNhdmVSZWNvcmRUb0xvY2FsU3RvcmFnZShyZWNvcmRBc1htbDogUmVjb3JkQXNYbWwsIHJlY29yZElkOiBzdHJpbmcpIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICB0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZCksXG4gICAgICByZWNvcmRBc1htbFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZShyZWNvcmRJZDogc3RyaW5nKTogUmVjb3JkQXNYbWwge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXG4gICAgICB0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZClcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZEZyb21Mb2NhbFN0b3JhZ2UocmVjb3JkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZCkpXG4gIH1cbn1cbiJdfQ==
335
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SearchApiService }, { type: i3.ElasticsearchService }, { type: i4.Gn4Converter }, { type: i2.RecordsApiService }, { type: i5.PlatformServiceInterface }, { type: i2.LanguagesApiService }, { type: i6.Gn4SettingsService }] });
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2duNC1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBRVosaUJBQWlCLEdBQ2xCLE1BQU0sbURBQW1ELENBQUE7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUE7QUFlbEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUE7QUFFbEgsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sNENBQTRDLENBQUE7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFDekUsT0FBTyxFQUNMLGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFFSixFQUFFLEVBQ0YsT0FBTyxFQUNQLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUE7QUFDYixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBOzs7Ozs7OztBQUVwRSxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQTtBQUV4QyxNQUFN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LE1BQU0sQ0FBQTtRQUM1QixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsMEJBQTBCLENBQUMsQ0FBQTtRQUUzRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLEdBQUcsQ0FBUyxpQkFBaUIsRUFBRTtZQUM5QixZQUFZLEVBQU8sYUFBYTtZQUNoQyxPQUFPLEVBQUUsT0FBTztZQUNoQixPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUFDO2FBQ0QsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ3RCLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUUvQixPQUFPLGVBQWUsQ0FBQTtRQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQixDQUFDLFFBQWdCO1FBQ2xELE9BQU8sdUJBQXVCLFFBQVEsRUFBRSxDQUFBLENBQUMsc0RBQXNEO0lBQ2pHLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxXQUF3QixFQUFFLFFBQWdCO1FBQ3pFLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QixJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLEVBQzFDLFdBQVcsQ0FDWixDQUFBO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUFDLFFBQWdCO1FBQ2hELE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ2hDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FDM0MsQ0FBQTtJQUNILENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxRQUFnQjtRQUNuRCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUM1RSxDQUFDOytHQXhrQlUsYUFBYTttSEFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgYXNzZXJ0VmFsaWRYbWwsXG4gIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCxcbiAgR240Q29udmVydGVyLFxuICBHbjRTZWFyY2hSZXN1bHRzLFxuICBJc28xOTEzOUNvbnZlcnRlcixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYydcbmltcG9ydCB7IFB1YmxpY2F0aW9uVmVyc2lvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvZXJyb3InXG5pbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBEYXRhc2V0RmVhdHVyZUNhdGFsb2csXG4gIERhdGFzZXRGZWF0dXJlVHlwZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb25zLFxuICBBZ2dyZWdhdGlvbnNQYXJhbXMsXG4gIEZpZWxkRmlsdGVycyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvc2VhcmNoJ1xuaW1wb3J0IHtcbiAgU2VhcmNoUGFyYW1zLFxuICBTZWFyY2hSZXN1bHRzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gvc2VhcmNoLm1vZGVsJ1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcGxhdGZvcm0uc2VydmljZS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBSZWNvcmRzUmVwb3NpdG9yeUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL3JlcG9zaXRvcnkvcmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZSdcbmltcG9ydCB7XG4gIExhbmd1YWdlc0FwaVNlcnZpY2UsXG4gIFJlY29yZHNBcGlTZXJ2aWNlLFxuICBTZWFyY2hBcGlTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL2duNC9zcmMnXG5pbXBvcnQgeyBMQU5HXzNfVE9fMl9NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5pbXBvcnQge1xuICBjb21iaW5lTGF0ZXN0LFxuICBleGhhdXN0TWFwLFxuICBmb3JrSm9pbixcbiAgZnJvbSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBsdCB9IGZyb20gJ3NlbXZlcidcbmltcG9ydCB7IEVsYXN0aWNzZWFyY2hTZXJ2aWNlIH0gZnJvbSAnLi9lbGFzdGljc2VhcmNoJ1xuaW1wb3J0IHsgR240U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi9zZXR0aW5ncy9nbjQtc2V0dGluZ3Muc2VydmljZSdcblxuY29uc3QgbWluUHVibGljYXRpb25BcGlWZXJzaW9uID0gJzQuMi41J1xuXG5jb25zdCBURU1QT1JBUllfSURfUFJFRklYID0gJ1RFTVAtSUQtJ1xuXG5leHBvcnQgdHlwZSBSZWNvcmRBc1htbCA9IHN0cmluZ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR240UmVwb3NpdG9yeSBpbXBsZW1lbnRzIFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIHtcbiAgX2RyYWZ0c0NoYW5nZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpXG4gIGRyYWZ0c0NoYW5nZWQkID0gdGhpcy5fZHJhZnRzQ2hhbmdlZC5hc09ic2VydmFibGUoKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGduNFNlYXJjaEFwaTogU2VhcmNoQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGduNFNlYXJjaEhlbHBlcjogRWxhc3RpY3NlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbjRNYXBwZXI6IEduNENvbnZlcnRlcixcbiAgICBwcml2YXRlIGduNFJlY29yZHNBcGk6IFJlY29yZHNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm1TZXJ2aWNlOiBQbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBnbjRMYW5ndWFnZXNBcGk6IExhbmd1YWdlc0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IEduNFNldHRpbmdzU2VydmljZVxuICApIHt9XG5cbiAgc2VhcmNoKHtcbiAgICBmaWx0ZXJzLFxuICAgIGZpZWxkcyxcbiAgICBvZmZzZXQsXG4gICAgbGltaXQsXG4gICAgc29ydCxcbiAgICBmaWx0ZXJJZHMsXG4gICAgZmlsdGVyR2VvbWV0cnksXG4gIH06IFNlYXJjaFBhcmFtcyk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0cz4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsdGVySWRzLFxuICAgICAgICAgICAgZmlsdGVyR2VvbWV0cnlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpLnRoZW4oKHJlY29yZHMpID0+ICh7XG4gICAgICAgICAgICBjb3VudDogcmVzdWx0cy5oaXRzLnRvdGFsPy52YWx1ZSB8fCAwLFxuICAgICAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0TWF0Y2hlc0NvdW50KGZpbHRlcnM6IEZpZWxkRmlsdGVycyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAncmVjb3Jkcy1jb3VudCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAuLi50aGlzLmduNFNlYXJjaEhlbHBlci5nZXRTZWFyY2hSZXF1ZXN0Qm9keShcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0cmFja190b3RhbF9oaXRzOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDApKVxuICB9XG5cbiAgZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBbJ2ZjYXRzJywgJ2hhc3NvdXJjZXMnXSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0TWV0YWRhdGFCeUlkc1BheWxvYWQoW3VuaXF1ZUlkZW50aWZpZXJdKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMuaGl0c1swXSksXG4gICAgICAgIHN3aXRjaE1hcCgocmVjb3JkKSA9PlxuICAgICAgICAgIHJlY29yZCA/IHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmQocmVjb3JkKSA6IG9mKG51bGwpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGdldE11bHRpcGxlUmVjb3JkcyhcbiAgICB1bmlxdWVJZGVudGlmaWVyczogc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRNZXRhZGF0YUJ5SWRzUGF5bG9hZCh1bmlxdWVJZGVudGlmaWVycylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT4gcmVzdWx0cy5oaXRzLmhpdHMpLFxuICAgICAgICBzd2l0Y2hNYXAoKHJlY29yZHMpID0+XG4gICAgICAgICAgcmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVjb3JkcylcbiAgICAgICAgICAgIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBFbWJlZGRlZEZlYXR1cmVDYXRhbG9nKFxuICAgIGZlYXR1cmVUeXBlczogQXJyYXk8RGF0YXNldEZlYXR1cmVUeXBlPlxuICApOiBEYXRhc2V0RmVhdHVyZUNhdGFsb2cge1xuICAgIHJldHVybiB7XG4gICAgICBmZWF0dXJlVHlwZXM6IGZlYXR1cmVUeXBlcy5tYXAoKGZlYXR1cmVUeXBlKSA9PiAoe1xuICAgICAgICBuYW1lOiBmZWF0dXJlVHlwZS50eXBlTmFtZSB8fCAnJyxcbiAgICAgICAgZGVmaW5pdGlvbjogZmVhdHVyZVR5cGUuZGVmaW5pdGlvbiB8fCAnJyxcbiAgICAgICAgYXR0cmlidXRlczogQXJyYXkuaXNBcnJheShmZWF0dXJlVHlwZS5hdHRyaWJ1dGVUYWJsZSlcbiAgICAgICAgICA/IGZlYXR1cmVUeXBlLmF0dHJpYnV0ZVRhYmxlLm1hcCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhdHRyLnZhbHVlc1xuICAgICAgICAgICAgICAgID8uZmlsdGVyKCh2KSA9PiB2LmNvZGUgfHwgdi5sYWJlbClcbiAgICAgICAgICAgICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgY29kZTogdi5jb2RlLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHYubGFiZWwsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXR0ci5uYW1lLFxuICAgICAgICAgICAgICAgIGNvZGU6IGF0dHIuY29kZSxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBhdHRyLmRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgdHlwZTogYXR0ci50eXBlLFxuICAgICAgICAgICAgICAgIC4uLih2YWx1ZXM/Lmxlbmd0aCA+IDAgPyB7IHZhbHVlcyB9IDoge30pLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogW10sXG4gICAgICB9KSksXG4gICAgfVxuICB9XG4gIGdldEZlYXR1cmVDYXRhbG9nKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICB2aXNpdGVkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKSAvLyBwcmV2ZW50IGxvb3BpbmdcbiAgKTogT2JzZXJ2YWJsZTxEYXRhc2V0RmVhdHVyZUNhdGFsb2cgfCBudWxsPiB7XG4gICAgaWYgKFxuICAgICAgcmVjb3JkLmV4dHJhcz8uWydmZWF0dXJlVHlwZXMnXSAmJlxuICAgICAgQXJyYXkuaXNBcnJheShyZWNvcmQuZXh0cmFzWydmZWF0dXJlVHlwZXMnXSkgJiZcbiAgICAgIHJlY29yZC5leHRyYXNbJ2ZlYXR1cmVUeXBlcyddLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih0aGlzLm1hcEVtYmVkZGVkRmVhdHVyZUNhdGFsb2cocmVjb3JkLmV4dHJhc1snZmVhdHVyZVR5cGVzJ10pKVxuICAgIH1cblxuICAgIGNvbnN0IGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllciA9IHJlY29yZC5leHRyYXNbXG4gICAgICAnZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyJ1xuICAgIF0gYXMgc3RyaW5nXG4gICAgaWYgKGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllciAmJiAhdmlzaXRlZC5oYXMoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKSkge1xuICAgICAgdmlzaXRlZC5hZGQoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkKGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllcikucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgcmVjb3JkID8gdGhpcy5nZXRGZWF0dXJlQ2F0YWxvZyhyZWNvcmQsIHZpc2l0ZWQpIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKVxuICB9XG5cbiAgZ2V0U2ltaWxhclJlY29yZHMoc2ltaWxhclRvOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRSZWxhdGVkUmVjb3JkUGF5bG9hZChzaW1pbGFyVG8sIDMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGdldFNvdXJjZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICBjb25zdCBzb3VyY2VzSWRlbnRpZmllcnMgPSByZWNvcmQuZXh0cmFzPy5bJ3NvdXJjZXNJZGVudGlmaWVycyddIGFzIHN0cmluZ1tdXG4gICAgaWYgKHNvdXJjZXNJZGVudGlmaWVycyAmJiBzb3VyY2VzSWRlbnRpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TXVsdGlwbGVSZWNvcmRzKHNvdXJjZXNJZGVudGlmaWVycylcbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpXG4gIH1cblxuICBnZXRTb3VyY2VPZihyZWNvcmQ6IENhdGFsb2dSZWNvcmQpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT4ge1xuICAgIGNvbnN0IHNvdXJjZU9mSWRlbnRpZmllcnMgPSByZWNvcmQuZXh0cmFzPy5bXG4gICAgICAnc291cmNlT2ZJZGVudGlmaWVycydcbiAgICBdIGFzIHN0cmluZ1tdXG4gICAgaWYgKHNvdXJjZU9mSWRlbnRpZmllcnMgJiYgc291cmNlT2ZJZGVudGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNdWx0aXBsZVJlY29yZHMoc291cmNlT2ZJZGVudGlmaWVycylcbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpXG4gIH1cblxuICBhZ2dyZWdhdGUocGFyYW1zOiBBZ2dyZWdhdGlvbnNQYXJhbXMpOiBPYnNlcnZhYmxlPEFnZ3JlZ2F0aW9ucz4ge1xuICAgIC8vIGlmIGFnZ3JlZ2F0aW9ucyBhcmUgZW1wdHksIHJldHVybiBhbiBlbXB0eSBvYmplY3QgcmlnaHQgYXdheVxuICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG9mKHt9KVxuXG4gICAgY29uc3QgYWdncmVnYXRpb25zID0gdGhpcy5nbjRTZWFyY2hIZWxwZXIuYnVpbGRBZ2dyZWdhdGlvbnNQYXlsb2FkKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRTZWFyY2hSZXF1ZXN0Qm9keShhZ2dyZWdhdGlvbnMpKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgT2JqZWN0LmtleXMocmVzcG9uc2UuYWdncmVnYXRpb25zKS5yZWR1Y2UoXG4gICAgICAgICAgICAocHJldiwgY3VycikgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJdOiB0aGlzLmduNFNlYXJjaEhlbHBlci5wYXJzZUFnZ3JlZ2F0aW9uUmVzdWx0KFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmFnZ3JlZ2F0aW9uc1tjdXJyXSxcbiAgICAgICAgICAgICAgICBwYXJhbXNbY3Vycl1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGZ1enp5U2VhcmNoKHF1ZXJ5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdHM+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmduNFNlYXJjaEhlbHBlci5idWlsZEF1dG9jb21wbGV0ZVBheWxvYWQocXVlcnkpKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cykudGhlbigocmVjb3JkcykgPT4gKHtcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDAsXG4gICAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBnZXRSZWNvcmRQdWJsaWNhdGlvblN0YXR1cyh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdW5pcXVlSWRlbnRpZmllclxuICAgICAgPyB0aGlzLmdldFJlY29yZCh1bmlxdWVJZGVudGlmaWVyKS5waXBlKFxuICAgICAgICAgIG1hcCgocmVjb3JkKSA9PiByZWNvcmQuZXh0cmFzWydpc1B1Ymxpc2hlZFRvQWxsJ10gYXMgYm9vbGVhbilcbiAgICAgICAgKVxuICAgICAgOiBvZih0cnVlKVxuICB9XG5cbiAgY2FuRHVwbGljYXRlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnXG4gIH1cblxuICBjYW5EZWxldGUocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFsbG93RWRpdEhhcnZlc3RlZCQucGlwZShcbiAgICAgIG1hcCgoYWxsb3dFZGl0SGFydmVzdGVkKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVjb3JkLmV4dHJhc1snZWRpdCddICYmXG4gICAgICAgICAgKCFyZWNvcmQuZXh0cmFzWydpc0hhcnZlc3RlZCddIHx8IGFsbG93RWRpdEhhcnZlc3RlZClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGNhbkVkaXQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCBhbGxvd0VkaXRIYXJ2ZXN0ZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgcmVjb3JkLmtpbmQgPT09ICdkYXRhc2V0JyAmJlxuICAgICAgcmVjb3JkLmV4dHJhc1snZWRpdCddICYmXG4gICAgICAoIXJlY29yZC5leHRyYXNbJ2lzSGFydmVzdGVkJ10gfHwgYWxsb3dFZGl0SGFydmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIGNhbkVkaXRSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5nZXRSZWNvcmQodW5pcXVlSWRlbnRpZmllciksXG4gICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5hbGxvd0VkaXRIYXJ2ZXN0ZWQkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtyZWNvcmQsIGFsbG93RWRpdEhhcnZlc3RlZF0pID0+XG4gICAgICAgIHJlY29yZCA/IHRoaXMuY2FuRWRpdChyZWNvcmQsIGFsbG93RWRpdEhhcnZlc3RlZCkgOiBmYWxzZVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGNhbkVkaXRJbmRleGVkUmVjb3JkKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzU2VydmljZS5hbGxvd0VkaXRIYXJ2ZXN0ZWQkLnBpcGUoXG4gICAgICBtYXAoKGFsbG93RWRpdEhhcnZlc3RlZCkgPT4gdGhpcy5jYW5FZGl0KHJlY29yZCwgYWxsb3dFZGl0SGFydmVzdGVkKSlcbiAgICApXG4gIH1cblxuICBvcGVuUmVjb3JkRm9yRWRpdGlvbihcbiAgICB1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCBib29sZWFuXSB8IG51bGw+IHtcbiAgICBjb25zdCBkcmFmdCQgPSBvZih0aGlzLmdldFJlY29yZEZyb21Mb2NhbFN0b3JhZ2UodW5pcXVlSWRlbnRpZmllcikpXG4gICAgY29uc3QgcmVjb3JkQXNYbWwkID0gdGhpcy5nZXRSZWNvcmRBc1htbCh1bmlxdWVJZGVudGlmaWVyKVxuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW2RyYWZ0JCwgcmVjb3JkQXNYbWwkXSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoW2RyYWZ0LCByZWNvcmRBc1htbF0pID0+IHtcbiAgICAgICAgY29uc3QgeG1sID0gZHJhZnQgPz8gcmVjb3JkQXNYbWxcbiAgICAgICAgY29uc3QgaXNTYXZlZEFscmVhZHkgPSByZWNvcmRBc1htbCAhPT0gbnVsbFxuICAgICAgICByZXR1cm4gZmluZENvbnZlcnRlckZvckRvY3VtZW50KHhtbClcbiAgICAgICAgICAucmVhZFJlY29yZCh4bWwpXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAocmVjb3JkKSA9PlxuICAgICAgICAgICAgICBbcmVjb3JkLCB4bWwsIGlzU2F2ZWRBbHJlYWR5XSBhcyBbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCBib29sZWFuXVxuICAgICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgb3BlblJlY29yZEZvckR1cGxpY2F0aW9uKFxuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIHRydWVdIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFJlY29yZHNBcGlcbiAgICAgIC5jcmVhdGUoXG4gICAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICAgICcyJyxcbiAgICAgICAgJ01FVEFEQVRBJyxcbiAgICAgICAgJycsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRydWUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICdib2R5JyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwSGVhZGVyQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh1bmlxdWVJZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkQXNYbWwodW5pcXVlSWRlbnRpZmllcilcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoeG1sKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoeG1sKVxuICAgICAgICAgICAgICAucmVhZFJlY29yZCh4bWwpXG4gICAgICAgICAgICAgIC50aGVuKChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3JlY29yZCwgeG1sLCB0cnVlXSBhcyBbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCB0cnVlXVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIHNhdmVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZyxcbiAgICBwdWJsaXNoVG9BbGwgPSB0cnVlXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMucGxhdGZvcm1TZXJ2aWNlLmdldEFwaVZlcnNpb24oKS5waXBlKFxuICAgICAgbWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgIGlmIChsdCh2ZXJzaW9uLCBtaW5QdWJsaWNhdGlvbkFwaVZlcnNpb24pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFB1YmxpY2F0aW9uVmVyc2lvbkVycm9yKHZlcnNpb24pXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc2VyaWFsaXplUmVjb3JkVG9YbWwocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpKSxcbiAgICAgIHN3aXRjaE1hcCgocmVjb3JkWG1sKSA9PlxuICAgICAgICB0aGlzLmduNFJlY29yZHNBcGkuaW5zZXJ0KFxuICAgICAgICAgICdNRVRBREFUQScsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcHVibGlzaFRvQWxsLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAnT1ZFUldSSVRFJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAnX25vbmVfJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICByZWNvcmRYbWxcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFJZCA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLm1ldGFkYXRhSW5mb3MpWzBdXG4gICAgICAgIHJldHVybiByZXNwb25zZS5tZXRhZGF0YUluZm9zW21ldGFkYXRhSWRdWzBdLnV1aWRcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZHVwbGljYXRlRXh0ZXJuYWxSZWNvcmQocmVjb3JkRG93bmxvYWRVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RXh0ZXJuYWxSZWNvcmRBc1htbChyZWNvcmREb3dubG9hZFVybCkucGlwZShcbiAgICAgIGV4aGF1c3RNYXAoYXN5bmMgKGZldGNoZWRSZWNvcmRBc1htbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudChmZXRjaGVkUmVjb3JkQXNYbWwpXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGNvbnZlcnRlci5yZWFkUmVjb3JkKGZldGNoZWRSZWNvcmRBc1htbClcblxuICAgICAgICByZWNvcmQudGl0bGUgPSBgJHtyZWNvcmQudGl0bGV9IChDb3B5KWBcbiAgICAgICAgY29uc3QgcmVjb3JkQXNYbWwgPSBhd2FpdCBjb252ZXJ0ZXIud3JpdGVSZWNvcmQoXG4gICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgIGZldGNoZWRSZWNvcmRBc1htbFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZVJlY29yZChyZWNvcmQsIHJlY29yZEFzWG1sLCBmYWxzZSlcbiAgICAgIH0pLFxuICAgICAgZXhoYXVzdE1hcCgodXVpZE9ic2VydmFibGU6IE9ic2VydmFibGU8c3RyaW5nPikgPT4gdXVpZE9ic2VydmFibGUpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBkZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240UmVjb3Jkc0FwaS5kZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcilcbiAgfVxuXG4gIGdlbmVyYXRlVGVtcG9yYXJ5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7VEVNUE9SQVJZX0lEX1BSRUZJWH0ke0RhdGUubm93KCl9YFxuICB9XG5cbiAgc2F2ZVJlY29yZEFzRHJhZnQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY29yZFRvWG1sKHJlY29yZCwgcmVmZXJlbmNlUmVjb3JkU291cmNlKS5waXBlKFxuICAgICAgdGFwKChyZWNvcmRYbWwpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlUmVjb3JkVG9Mb2NhbFN0b3JhZ2UocmVjb3JkWG1sLCByZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgICAgICAgdGhpcy5fZHJhZnRzQ2hhbmdlZC5uZXh0KClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgY2xlYXJSZWNvcmREcmFmdCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZVJlY29yZEZyb21Mb2NhbFN0b3JhZ2UodW5pcXVlSWRlbnRpZmllcilcbiAgICB0aGlzLl9kcmFmdHNDaGFuZ2VkLm5leHQoKVxuICB9XG5cbiAgcmVjb3JkSGFzRHJhZnQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKSAhPT0gbnVsbFxuICB9XG5cbiAgLy8gZ2VuZXJhdGVkIGJ5IGNvcGlsb3RcbiAgZ2V0QWxsRHJhZnRzKCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPiB7XG4gICAgY29uc3QgaXRlbXMgPSB7IC4uLndpbmRvdy5sb2NhbFN0b3JhZ2UgfVxuICAgIGNvbnN0IGRyYWZ0cyA9IE9iamVjdC5rZXlzKGl0ZW1zKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aCgnZ2VvbmV0d29yay11aS1kcmFmdC0nKSlcbiAgICAgIC5tYXAoKGtleSkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpXG4gICAgICAuZmlsdGVyKChkcmFmdCkgPT4gZHJhZnQgIT09IG51bGwpXG4gICAgcmV0dXJuIGZyb20oXG4gICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgZHJhZnRzLm1hcCgoZHJhZnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gZmluZENvbnZlcnRlckZvckRvY3VtZW50KGRyYWZ0KS5yZWFkUmVjb3JkKGRyYWZ0KVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGdldERyYWZ0c0NvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgY29uc3QgaXRlbXMgPSB7IC4uLndpbmRvdy5sb2NhbFN0b3JhZ2UgfVxuICAgIGNvbnN0IGRyYWZ0Q291bnQgPSBPYmplY3Qua2V5cyhpdGVtcylcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2dlb25ldHdvcmstdWktZHJhZnQtJykpXG4gICAgICAubWFwKChrZXkpID0+IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKVxuICAgICAgLmZpbHRlcigoZHJhZnQpID0+IGRyYWZ0ICE9PSBudWxsKS5sZW5ndGhcbiAgICByZXR1cm4gb2YoZHJhZnRDb3VudClcbiAgfVxuXG4gIGhhc1JlY29yZENoYW5nZWRTaW5jZURyYWZ0KGxvY2FsUmVjb3JkOiBDYXRhbG9nUmVjb3JkKSB7XG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGlzVW5zYXZlZDogIWxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICBoYXNEcmFmdDogdGhpcy5yZWNvcmRIYXNEcmFmdChsb2NhbFJlY29yZC51bmlxdWVJZGVudGlmaWVyKSxcbiAgICB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh7IGlzVW5zYXZlZCwgaGFzRHJhZnQgfSkgPT4ge1xuICAgICAgICBpZiAoaXNVbnNhdmVkIHx8ICFoYXNEcmFmdCkge1xuICAgICAgICAgIHJldHVybiBvZih7IHVzZXI6IHVuZGVmaW5lZCwgZGF0ZTogdW5kZWZpbmVkIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtcbiAgICAgICAgICB0aGlzLmdldEFsbERyYWZ0cygpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGRyYWZ0cykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1JlY29yZCA9IGRyYWZ0cy5maW5kKFxuICAgICAgICAgICAgICAgIChkcmFmdCkgPT5cbiAgICAgICAgICAgICAgICAgIGRyYWZ0LnVuaXF1ZUlkZW50aWZpZXIgPT09IGxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hpbmdSZWNvcmQ/LnJlY29yZFVwZGF0ZWQgfHwgbnVsbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuZ2V0UmVjb3JkKGxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpLFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW2RyYWZ0UmVjb3JkVXBkYXRlZCwgcmVjZW50UmVjb3JkXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlY2VudFJlY29yZD8ucmVjb3JkVXBkYXRlZCA+IGRyYWZ0UmVjb3JkVXBkYXRlZCkge1xuICAgICAgICAgICAgICBjb25zdCB1c2VyID0gcmVjZW50UmVjb3JkLmV4dHJhcz8uWydvd25lckluZm8nXVxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgID8uc3BsaXQoJ3wnKVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVzZXI6IGAke3VzZXJbMl19ICR7dXNlclsxXX1gLFxuICAgICAgICAgICAgICAgIGRhdGU6IHJlY2VudFJlY29yZC5yZWNvcmRVcGRhdGVkLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyB1c2VyOiB1bmRlZmluZWQsIGRhdGU6IHVuZGVmaW5lZCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRBcHBsaWNhdGlvbkxhbmd1YWdlcygpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240TGFuZ3VhZ2VzQXBpXG4gICAgICAuZ2V0QXBwbGljYXRpb25MYW5ndWFnZXMoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGFuZ3VhZ2VzKSA9PlxuICAgICAgICAgIGxhbmd1YWdlc1xuICAgICAgICAgICAgLm1hcCgobGFuZykgPT4gTEFOR18zX1RPXzJfTUFQUEVSW2xhbmcuaWQgPz8gJyddKVxuICAgICAgICAgICAgLmZpbHRlcigoY29kZSk6IGNvZGUgaXMgc3RyaW5nID0+ICEhY29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWNvcmRBc1htbCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRSZWNvcmRzQXBpXG4gICAgICAuZ2V0UmVjb3JkQXMoXG4gICAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICdhcHBsaWNhdGlvbi94bWwnLFxuICAgICAgICAncmVzcG9uc2UnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgaHR0cEhlYWRlckFjY2VwdDogJ3RleHQveG1sLGFwcGxpY2F0aW9uL3htbCcgYXMgJ2FwcGxpY2F0aW9uL3htbCcgfSAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXNwb25zZSBpcyBwYXJzZWQgYXMgdGV4dFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzID09PSA0MDQgPyBvZihudWxsKSA6IHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplUmVjb3JkVG9YbWwoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIC8vIGlmIHRoZXJlJ3MgYSByZWZlcmVuY2UgcmVjb3JkLCB1c2UgdGhhdCBzdGFuZGFyZDsgb3RoZXJ3aXNlLCB1c2UgaXNvMTkxMzlcbiAgICBjb25zdCBjb252ZXJ0ZXIgPSByZWZlcmVuY2VSZWNvcmRTb3VyY2VcbiAgICAgID8gZmluZENvbnZlcnRlckZvckRvY3VtZW50KHJlZmVyZW5jZVJlY29yZFNvdXJjZSlcbiAgICAgIDogbmV3IElzbzE5MTM5Q29udmVydGVyKClcbiAgICByZXR1cm4gZnJvbShjb252ZXJ0ZXIud3JpdGVSZWNvcmQocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRlcm5hbFJlY29yZEFzWG1sKFxuICAgIHJlY29yZERvd25sb2FkVXJsOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgY29uc3QgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0J1xuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ3RleHQveG1sLGFwcGxpY2F0aW9uL3htbCcpXG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PHN0cmluZz4ocmVjb3JkRG93bmxvYWRVcmwsIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZWNvcmRBc1htbEZpbGUpID0+IHtcbiAgICAgICAgICBhc3NlcnRWYWxpZFhtbChyZWNvcmRBc1htbEZpbGUpXG5cbiAgICAgICAgICByZXR1cm4gcmVjb3JkQXNYbWxGaWxlXG4gICAgICAgIH0pXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGdlb25ldHdvcmstdWktZHJhZnQtJHtyZWNvcmRJZH1gIC8vIE5ldmVyIGNoYW5nZSB0aGlzIHByZWZpeCBhcyBpdCBpcyBhIGJyZWFraW5nIGNoYW5nZVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUmVjb3JkVG9Mb2NhbFN0b3JhZ2UocmVjb3JkQXNYbWw6IFJlY29yZEFzWG1sLCByZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgdGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpLFxuICAgICAgcmVjb3JkQXNYbWxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFJlY29yZEZyb21Mb2NhbFN0b3JhZ2UocmVjb3JkSWQ6IHN0cmluZyk6IFJlY29yZEFzWG1sIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgdGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHJlY29yZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpKVxuICB9XG59XG4iXX0=