@igo2/geo 16.3.0 → 17.0.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +30 -14
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +35 -17
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +18 -11
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +8 -62
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +49 -20
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +22 -10
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +32 -16
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +8 -71
- package/esm2022/lib/catalog/catalog-library/index.mjs +9 -0
- package/esm2022/lib/catalog/catalog.module.mjs +9 -37
- package/esm2022/lib/catalog/index.mjs +7 -1
- package/esm2022/lib/catalog/shared/catalog.service.mjs +16 -9
- package/esm2022/lib/catalog/shared/index.mjs +1 -1
- package/esm2022/lib/datasource/index.mjs +1 -1
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +5 -5
- package/esm2022/lib/datasource/shared/datasource.service.mjs +11 -13
- package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +5 -5
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/index.mjs +1 -1
- package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +6 -6
- package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
- package/esm2022/lib/datasource/utils/tilegrid.mjs +1 -1
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +28 -13
- package/esm2022/lib/directions/directions-buttons/index.mjs +1 -1
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +44 -19
- package/esm2022/lib/directions/directions-inputs/index.mjs +1 -1
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +36 -16
- package/esm2022/lib/directions/directions-results/index.mjs +1 -1
- package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +2 -2
- package/esm2022/lib/directions/directions-sources/index.mjs +1 -1
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +7 -7
- package/esm2022/lib/directions/directions.component.mjs +20 -12
- package/esm2022/lib/directions/directions.module.mjs +17 -70
- package/esm2022/lib/directions/index.mjs +1 -1
- package/esm2022/lib/directions/shared/directions-source.service.mjs +1 -1
- package/esm2022/lib/directions/shared/directions.enum.mjs +1 -1
- package/esm2022/lib/directions/shared/directions.service.mjs +13 -9
- package/esm2022/lib/directions/shared/directions.utils.mjs +1 -1
- package/esm2022/lib/directions/shared/index.mjs +1 -1
- package/esm2022/lib/download/download-button/download-button.component.mjs +21 -11
- package/esm2022/lib/download/download-button/index.mjs +1 -1
- package/esm2022/lib/download/download.module.mjs +10 -27
- package/esm2022/lib/download/index.mjs +1 -1
- package/esm2022/lib/download/shared/download.interface.mjs +1 -1
- package/esm2022/lib/download/shared/download.service.mjs +7 -7
- package/esm2022/lib/download/shared/index.mjs +1 -1
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +21 -10
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +41 -18
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +19 -9
- package/esm2022/lib/draw/draw/draw.component.mjs +54 -24
- package/esm2022/lib/draw/draw/draw.module.mjs +7 -104
- package/esm2022/lib/draw/drawingTool.module.mjs +8 -7
- package/esm2022/lib/draw/index.mjs +1 -1
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +7 -7
- package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
- package/esm2022/lib/draw/shared/index.mjs +1 -1
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +28 -13
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +8 -7
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +8 -27
- package/esm2022/lib/feature/feature-details/index.mjs +9 -0
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +8 -8
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +8 -11
- package/esm2022/lib/feature/feature.module.mjs +9 -10
- package/esm2022/lib/feature/index.mjs +8 -2
- package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
- package/esm2022/lib/feature/shared/feature.enums.mjs +1 -1
- package/esm2022/lib/feature/shared/feature.utils.mjs +1 -1
- package/esm2022/lib/feature/shared/store.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/index.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/loading.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/search.mjs +4 -4
- package/esm2022/lib/feature/shared/strategies/selection.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
- package/esm2022/lib/filter/filter.module.mjs +47 -177
- package/esm2022/lib/filter/index.mjs +36 -1
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +29 -15
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +46 -20
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +54 -23
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +13 -10
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +45 -18
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +18 -12
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +42 -18
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +8 -7
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +21 -12
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +6 -5
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +5 -5
- package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +5 -5
- package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +9 -7
- package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
- package/esm2022/lib/filter/shared/time-filter.service.mjs +5 -5
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +66 -28
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +34 -17
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +34 -15
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +28 -14
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +47 -20
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +31 -13
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +8 -7
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +16 -10
- package/esm2022/lib/geo.module.mjs +5 -43
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +7 -7
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +33 -16
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +8 -43
- package/esm2022/lib/geometry/geometry-form-field/index.mjs +9 -0
- package/esm2022/lib/geometry/geometry.module.mjs +9 -10
- package/esm2022/lib/geometry/index.mjs +2 -3
- package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/index.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
- package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
- package/esm2022/lib/geometry/shared/index.mjs +1 -1
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +20 -10
- package/esm2022/lib/import-export/export-button/index.mjs +1 -1
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +56 -22
- package/esm2022/lib/import-export/import-export/index.mjs +1 -1
- package/esm2022/lib/import-export/import-export.module.mjs +10 -81
- package/esm2022/lib/import-export/index.mjs +9 -1
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +13 -10
- package/esm2022/lib/import-export/shared/export.errors.mjs +1 -1
- package/esm2022/lib/import-export/shared/export.service.mjs +7 -7
- package/esm2022/lib/import-export/shared/export.utils.mjs +1 -1
- package/esm2022/lib/import-export/shared/import.service.mjs +7 -7
- package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2022/lib/import-export/shared/index.mjs +1 -1
- package/esm2022/lib/layer/index.mjs +19 -1
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +35 -16
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +43 -17
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +13 -11
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +8 -7
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +28 -13
- package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +10 -9
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +48 -18
- package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +33 -14
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +5 -5
- package/esm2022/lib/layer/layer.module.mjs +16 -93
- package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2022/lib/layer/shared/layer.service.mjs +8 -8
- package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/index.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +21 -11
- package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
- package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
- package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
- package/esm2022/lib/layer/utils/tile-watcher.mjs +1 -1
- package/esm2022/lib/layer/utils/vector-watcher.mjs +1 -1
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +27 -14
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +8 -8
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +24 -13
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +15 -11
- package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +1 -1
- package/esm2022/lib/map/home-extent-button/index.mjs +1 -1
- package/esm2022/lib/map/index.mjs +32 -1
- package/esm2022/lib/map/info-section/info-section.component.mjs +7 -7
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +8 -8
- package/esm2022/lib/map/map-center/map-center.component.mjs +6 -6
- package/esm2022/lib/map/map.module.mjs +36 -66
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +23 -13
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +21 -11
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +23 -11
- package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/index.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +10 -9
- package/esm2022/lib/map/shared/index.mjs +1 -1
- package/esm2022/lib/map/shared/linkedLayers.utils.mjs +1 -1
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +10 -9
- package/esm2022/lib/map/shared/map.interface.mjs +1 -1
- package/esm2022/lib/map/shared/map.mjs +1 -1
- package/esm2022/lib/map/shared/map.service.mjs +5 -5
- package/esm2022/lib/map/shared/map.utils.mjs +1 -1
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +11 -8
- package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
- package/esm2022/lib/map/shared/projection.service.mjs +7 -7
- package/esm2022/lib/map/shared/projection.utils.mjs +1 -1
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +6 -6
- package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +23 -13
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +13 -9
- package/esm2022/lib/measure/index.mjs +2 -3
- package/esm2022/lib/measure/measure.module.mjs +8 -5
- package/esm2022/lib/measure/measurer/index.mjs +6 -0
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +6 -5
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +18 -11
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +27 -13
- package/esm2022/lib/measure/measurer/measurer.component.mjs +40 -20
- package/esm2022/lib/measure/measurer/measurer.module.mjs +7 -69
- package/esm2022/lib/measure/shared/index.mjs +1 -1
- package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2022/lib/metadata/index.mjs +6 -1
- package/esm2022/lib/metadata/metadata-button/index.mjs +1 -1
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +35 -18
- package/esm2022/lib/metadata/metadata.module.mjs +10 -31
- package/esm2022/lib/metadata/shared/index.mjs +1 -1
- package/esm2022/lib/metadata/shared/metadata.service.mjs +5 -5
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +7 -7
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +8 -10
- package/esm2022/lib/offline/geoDB/index.mjs +1 -1
- package/esm2022/lib/offline/index.mjs +1 -1
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +5 -5
- package/esm2022/lib/offline/shared/geo-network.service.mjs +7 -7
- package/esm2022/lib/offline/shared/index.mjs +1 -1
- package/esm2022/lib/overlay/index.mjs +1 -1
- package/esm2022/lib/overlay/overlay.module.mjs +10 -8
- package/esm2022/lib/overlay/shared/index.mjs +1 -1
- package/esm2022/lib/overlay/shared/overlay.directive.mjs +8 -7
- package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
- package/esm2022/lib/overlay/shared/overlay.service.mjs +5 -5
- package/esm2022/lib/print/index.mjs +1 -1
- package/esm2022/lib/print/print/print.component.mjs +7 -7
- package/esm2022/lib/print/print-form/index.mjs +1 -1
- package/esm2022/lib/print/print-form/print-form.component.mjs +36 -16
- package/esm2022/lib/print/print.module.mjs +10 -54
- package/esm2022/lib/print/shared/index.mjs +1 -1
- package/esm2022/lib/print/shared/print.service.mjs +18 -12
- package/esm2022/lib/query/index.mjs +1 -1
- package/esm2022/lib/query/query.module.mjs +7 -8
- package/esm2022/lib/query/shared/index.mjs +1 -1
- package/esm2022/lib/query/shared/query-search-source.mjs +6 -6
- package/esm2022/lib/query/shared/query-search-source.providers.mjs +2 -2
- package/esm2022/lib/query/shared/query.directive.mjs +8 -7
- package/esm2022/lib/query/shared/query.enums.mjs +1 -1
- package/esm2022/lib/query/shared/query.service.mjs +8 -10
- package/esm2022/lib/search/index.mjs +14 -5
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +38 -18
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +8 -61
- package/esm2022/lib/search/search-results/index.mjs +10 -0
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +44 -19
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +30 -16
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +22 -12
- package/esm2022/lib/search/search-results/search-results.component.mjs +26 -14
- package/esm2022/lib/search/search-results/search-results.module.mjs +8 -91
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +27 -12
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +8 -44
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +40 -15
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +7 -47
- package/esm2022/lib/search/search.module.mjs +10 -13
- package/esm2022/lib/search/shared/index.mjs +1 -1
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +10 -9
- package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
- package/esm2022/lib/search/shared/search.service.mjs +7 -7
- package/esm2022/lib/search/shared/search.utils.mjs +1 -1
- package/esm2022/lib/search/shared/sources/cadastre.mjs +12 -9
- package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/coordinates.mjs +15 -13
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/icherche.mjs +20 -18
- package/esm2022/lib/search/shared/sources/icherche.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/ilayer.mjs +14 -12
- package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/nominatim.mjs +8 -8
- package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +3 -2
- package/esm2022/lib/search/shared/sources/source.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +15 -13
- package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/workspace.mjs +11 -10
- package/esm2022/lib/search/shared/sources/workspace.providers.mjs +4 -2
- package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
- package/esm2022/lib/style/shared/datasource/index.mjs +1 -1
- package/esm2022/lib/style/shared/feature/feature-style.mjs +1 -1
- package/esm2022/lib/style/shared/feature/index.mjs +1 -1
- package/esm2022/lib/style/shared/overlay/index.mjs +1 -1
- package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
- package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
- package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
- package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
- package/esm2022/lib/style/shared/vector/index.mjs +1 -1
- package/esm2022/lib/style/style-list/index.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.interface.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.module.mjs +5 -5
- package/esm2022/lib/style/style-list/style-list.service.mjs +5 -5
- package/esm2022/lib/style/style-modal/drawing/index.mjs +1 -1
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +40 -17
- package/esm2022/lib/style/style-modal/index.mjs +1 -1
- package/esm2022/lib/style/style-modal/layer/index.mjs +1 -1
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +28 -14
- package/esm2022/lib/style/style-modal/layer-button/index.mjs +1 -1
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +13 -9
- package/esm2022/lib/style/style-modal/shared/index.mjs +1 -1
- package/esm2022/lib/style/style-service/draw-style.service.mjs +5 -5
- package/esm2022/lib/style/style-service/index.mjs +1 -1
- package/esm2022/lib/style/style-service/style.service.mjs +4 -4
- package/esm2022/lib/style/style.module.mjs +12 -57
- package/esm2022/lib/toast/index.mjs +1 -1
- package/esm2022/lib/toast/toast.component.mjs +19 -11
- package/esm2022/lib/toast/toast.module.mjs +10 -30
- package/esm2022/lib/utils/id-generator.mjs +1 -1
- package/esm2022/lib/utils/index.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/index.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +7 -7
- package/esm2022/lib/wkt/index.mjs +1 -1
- package/esm2022/lib/wkt/shared/index.mjs +1 -1
- package/esm2022/lib/wkt/shared/wkt.service.mjs +5 -5
- package/esm2022/lib/wkt/wkt.module.mjs +8 -5
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +11 -10
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +8 -24
- package/esm2022/lib/workspace/index.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +15 -11
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +12 -10
- package/esm2022/lib/workspace/shared/index.mjs +1 -1
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +12 -10
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +10 -8
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -2
- package/esm2022/lib/workspace/widgets/index.mjs +1 -1
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +7 -7
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +8 -13
- package/esm2022/lib/workspace/widgets/widgets.mjs +1 -1
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +7 -6
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +8 -10
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +7 -6
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +8 -10
- package/esm2022/lib/workspace/workspace.module.mjs +10 -35
- package/esm2022/public_api.mjs +11 -12
- package/fesm2022/igo2-geo.mjs +34474 -34608
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +2 -14
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +3 -2
- package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
- package/lib/catalog/catalog-library/catalog-library.component.d.ts +3 -2
- package/lib/catalog/catalog-library/catalog-library.module.d.ts +3 -18
- package/lib/catalog/catalog-library/index.d.ts +5 -0
- package/lib/catalog/catalog.module.d.ts +6 -9
- package/lib/catalog/index.d.ts +2 -0
- package/lib/catalog/shared/catalog.service.d.ts +3 -1
- package/lib/datasource/shared/datasource.service.d.ts +4 -5
- package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
- package/lib/directions/directions-buttons/directions-buttons.component.d.ts +4 -2
- package/lib/directions/directions-inputs/directions-inputs.component.d.ts +2 -2
- package/lib/directions/directions-results/directions-results.component.d.ts +2 -2
- package/lib/directions/directions-sources/directions-source.provider.d.ts +1 -1
- package/lib/directions/directions-sources/osrm-directions-source.d.ts +1 -1
- package/lib/directions/directions.component.d.ts +2 -2
- package/lib/directions/directions.module.d.ts +9 -20
- package/lib/directions/shared/directions.service.d.ts +3 -1
- package/lib/directions/shared/directions.utils.d.ts +1 -1
- package/lib/download/download-button/download-button.component.d.ts +1 -1
- package/lib/download/download.module.d.ts +4 -6
- package/lib/download/shared/download.service.d.ts +1 -1
- package/lib/draw/draw/draw-layer-popup.component.d.ts +1 -1
- package/lib/draw/draw/draw-popup.component.d.ts +5 -5
- package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
- package/lib/draw/draw/draw.component.d.ts +2 -2
- package/lib/draw/draw/draw.module.d.ts +2 -25
- package/lib/draw/drawingTool.module.d.ts +3 -0
- package/lib/draw/shared/draw-icon.service.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.component.d.ts +7 -4
- package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.module.d.ts +2 -6
- package/lib/feature/feature-details/index.d.ts +5 -0
- package/lib/feature/feature-form/feature-form.component.d.ts +2 -2
- package/lib/feature/feature-form/feature-form.module.d.ts +2 -4
- package/lib/feature/feature.module.d.ts +6 -4
- package/lib/feature/index.d.ts +3 -1
- package/lib/filter/filter.module.d.ts +4 -28
- package/lib/filter/index.d.ts +16 -0
- package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +3 -3
- package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +3 -3
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +4 -4
- package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +2 -2
- package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +3 -3
- package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +3 -3
- package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
- package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +3 -3
- package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
- package/lib/filter/shared/spatial-filter.service.d.ts +2 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +6 -5
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +2 -2
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +1 -1
- package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
- package/lib/filter/time-filter-form/time-filter-form.component.d.ts +3 -3
- package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
- package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
- package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
- package/lib/geo.module.d.ts +14 -24
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +2 -10
- package/lib/geometry/geometry-form-field/index.d.ts +5 -0
- package/lib/geometry/geometry.module.d.ts +5 -3
- package/lib/geometry/index.d.ts +1 -2
- package/lib/import-export/export-button/export-button.component.d.ts +1 -1
- package/lib/import-export/import-export/import-export.component.d.ts +5 -2
- package/lib/import-export/import-export.module.d.ts +4 -15
- package/lib/import-export/index.d.ts +4 -0
- package/lib/import-export/shared/drop-geo-file.directive.d.ts +3 -2
- package/lib/import-export/shared/export.service.d.ts +1 -1
- package/lib/import-export/shared/export.utils.d.ts +1 -1
- package/lib/import-export/shared/import.service.d.ts +1 -1
- package/lib/import-export/shared/import.utils.d.ts +1 -1
- package/lib/layer/index.d.ts +8 -0
- package/lib/layer/layer-item/layer-item.component.d.ts +2 -2
- package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -2
- package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +2 -2
- package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
- package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
- package/lib/layer/layer-list/layer-list-binding.directive.d.ts +2 -2
- package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
- package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
- package/lib/layer/layer.module.d.ts +4 -18
- package/lib/layer/shared/layer.service.d.ts +1 -1
- package/lib/layer/shared/layers/image-layer.d.ts +1 -1
- package/lib/layer/shared/layers/layer.d.ts +1 -1
- package/lib/layer/shared/layers/layer.interface.d.ts +1 -1
- package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
- package/lib/layer/shared/layers/vector-layer.d.ts +1 -1
- package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
- package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
- package/lib/layer/utils/image-watcher.d.ts +1 -1
- package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +2 -2
- package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +2 -2
- package/lib/map/home-extent-button/home-extent-button.component.d.ts +2 -2
- package/lib/map/index.d.ts +14 -0
- package/lib/map/info-section/info-section.component.d.ts +1 -1
- package/lib/map/map-browser/map-browser.component.d.ts +2 -2
- package/lib/map/map-center/map-center.component.d.ts +1 -1
- package/lib/map/map.module.d.ts +4 -7
- package/lib/map/menu-button/menu-button.component.d.ts +2 -2
- package/lib/map/offline-button/offline-button.component.d.ts +2 -2
- package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
- package/lib/map/shared/controllers/geolocation.d.ts +2 -1
- package/lib/map/shared/hover-feature.directive.d.ts +2 -2
- package/lib/map/shared/map-pointer-position.directive.d.ts +2 -2
- package/lib/map/shared/map.d.ts +2 -1
- package/lib/map/shared/mapOffline.directive.d.ts +3 -2
- package/lib/map/shared/projection.service.d.ts +1 -1
- package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
- package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +2 -2
- package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
- package/lib/measure/index.d.ts +1 -2
- package/lib/measure/measure.module.d.ts +3 -0
- package/lib/measure/measurer/index.d.ts +5 -0
- package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
- package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
- package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
- package/lib/measure/measurer/measurer.component.d.ts +4 -4
- package/lib/measure/measurer/measurer.module.d.ts +3 -18
- package/lib/measure/shared/measure.utils.d.ts +1 -1
- package/lib/metadata/index.d.ts +2 -0
- package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
- package/lib/metadata/metadata.module.d.ts +4 -7
- package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
- package/lib/offline/geoDB/geoDB.service.d.ts +2 -3
- package/lib/offline/shared/geo-network.service.d.ts +1 -1
- package/lib/overlay/overlay.module.d.ts +4 -1
- package/lib/overlay/shared/overlay.directive.d.ts +1 -1
- package/lib/print/print/print.component.d.ts +1 -1
- package/lib/print/print-form/print-form.component.d.ts +2 -2
- package/lib/print/print.module.d.ts +4 -12
- package/lib/print/shared/print.service.d.ts +4 -1
- package/lib/query/query.module.d.ts +4 -4
- package/lib/query/shared/query-search-source.providers.d.ts +1 -1
- package/lib/query/shared/query.directive.d.ts +1 -1
- package/lib/query/shared/query.service.d.ts +2 -3
- package/lib/search/index.d.ts +6 -4
- package/lib/search/search-bar/search-bar.component.d.ts +2 -2
- package/lib/search/search-bar/search-bar.module.d.ts +2 -16
- package/lib/search/search-results/index.d.ts +6 -0
- package/lib/search/search-results/save-feature-dialog.component.d.ts +2 -2
- package/lib/search/search-results/search-results-add-button.component.d.ts +2 -2
- package/lib/search/search-results/search-results-item.component.d.ts +1 -1
- package/lib/search/search-results/search-results.component.d.ts +2 -2
- package/lib/search/search-results/search-results.module.d.ts +3 -21
- package/lib/search/search-selector/search-selector.component.d.ts +1 -1
- package/lib/search/search-selector/search-selector.module.d.ts +2 -11
- package/lib/search/search-settings/search-settings.component.d.ts +3 -2
- package/lib/search/search-settings/search-settings.module.d.ts +2 -12
- package/lib/search/search.module.d.ts +6 -7
- package/lib/search/shared/search-pointer-summary.directive.d.ts +2 -2
- package/lib/search/shared/search.service.d.ts +1 -1
- package/lib/search/shared/sources/cadastre.d.ts +2 -1
- package/lib/search/shared/sources/cadastre.providers.d.ts +4 -2
- package/lib/search/shared/sources/coordinates.d.ts +2 -1
- package/lib/search/shared/sources/coordinates.providers.d.ts +4 -2
- package/lib/search/shared/sources/icherche.d.ts +2 -1
- package/lib/search/shared/sources/icherche.providers.d.ts +5 -3
- package/lib/search/shared/sources/ilayer.d.ts +2 -1
- package/lib/search/shared/sources/ilayer.providers.d.ts +4 -2
- package/lib/search/shared/sources/nominatim.d.ts +1 -1
- package/lib/search/shared/sources/nominatim.providers.d.ts +3 -2
- package/lib/search/shared/sources/source.d.ts +1 -1
- package/lib/search/shared/sources/storedqueries.d.ts +2 -1
- package/lib/search/shared/sources/storedqueries.providers.d.ts +5 -3
- package/lib/search/shared/sources/workspace.d.ts +2 -1
- package/lib/search/shared/sources/workspace.providers.d.ts +4 -2
- package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +1 -1
- package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +1 -1
- package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +1 -1
- package/lib/style/style.module.d.ts +5 -16
- package/lib/toast/toast.component.d.ts +1 -1
- package/lib/toast/toast.module.d.ts +4 -6
- package/lib/utils/propertyTypeDetector/propertyTypeDetector.service.d.ts +1 -1
- package/lib/wkt/wkt.module.d.ts +3 -0
- package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +2 -2
- package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +2 -6
- package/lib/workspace/shared/edition-workspace.d.ts +1 -1
- package/lib/workspace/shared/edition-workspace.service.d.ts +3 -1
- package/lib/workspace/shared/feature-workspace.service.d.ts +2 -1
- package/lib/workspace/shared/wfs-workspace.service.d.ts +2 -1
- package/lib/workspace/shared/wms-workspace.service.d.ts +2 -1
- package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
- package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +2 -6
- package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +2 -3
- package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
- package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +2 -3
- package/lib/workspace/workspace.module.d.ts +5 -9
- package/locale/en.geo.json +3 -3
- package/locale/fr.geo.json +3 -3
- package/package.json +14 -12
- package/public_api.d.ts +10 -11
- package/src/geo-theme.scss +23 -23
- package/src/lib/filter/filter.theming.scss +13 -13
- package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
- package/src/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
- package/src/lib/layer/layer-item/layer-item.theme.scss +33 -33
- package/src/lib/layer/layer-legend/layer-legend.theming.scss +10 -10
- package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +34 -34
- package/src/lib/layer/layer.theming.scss +10 -10
- package/src/lib/map/map-browser/map-browser.theming.scss +46 -46
- package/src/lib/map/map.theming.scss +9 -9
- package/src/lib/map/menu-button/menu-button.theming.scss +20 -20
- package/src/lib/map/zoom-button/zoom-button.theming.scss +32 -32
- package/src/style/style.scss +1 -1
- package/esm2022/lib/datasource/datasource.module.mjs +0 -22
- package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +0 -40
- package/lib/datasource/datasource.module.d.ts +0 -8
- package/lib/search/search-bar/search-url-param.directive.d.ts +0 -13
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
|
-
import { ConfigService
|
|
3
|
+
import { ConfigService } from '@igo2/core/config';
|
|
4
|
+
import { LanguageService } from '@igo2/core/language';
|
|
5
|
+
import { MessageService } from '@igo2/core/message';
|
|
4
6
|
import { ObjectUtils, uuid } from '@igo2/utils';
|
|
5
7
|
import { EMPTY, of, zip } from 'rxjs';
|
|
6
8
|
import { catchError, map } from 'rxjs/operators';
|
|
@@ -13,8 +15,10 @@ import { CatalogItemType, TypeCatalog } from './catalog.enum';
|
|
|
13
15
|
import { ArcGISRestCatalog, BaselayersCatalog, CompositeCatalog, TileOrImageArcGISRestCatalog, WMSCatalog, WMTSCatalog } from './catalogs';
|
|
14
16
|
import * as i0 from "@angular/core";
|
|
15
17
|
import * as i1 from "@angular/common/http";
|
|
16
|
-
import * as i2 from "@igo2/core";
|
|
17
|
-
import * as i3 from "
|
|
18
|
+
import * as i2 from "@igo2/core/config";
|
|
19
|
+
import * as i3 from "@igo2/core/language";
|
|
20
|
+
import * as i4 from "@igo2/core/message";
|
|
21
|
+
import * as i5 from "../../datasource/shared/capabilities.service";
|
|
18
22
|
export class CatalogService {
|
|
19
23
|
http;
|
|
20
24
|
config;
|
|
@@ -112,6 +116,9 @@ export class CatalogService {
|
|
|
112
116
|
capabilitiesCapabilityLayer.Layer = finalLayers.filter((f) => f.Layer.length !== 0);
|
|
113
117
|
this.includeRecursiveItems(catalog, capabilitiesCapabilityLayer, items);
|
|
114
118
|
return items;
|
|
119
|
+
}), catchError(() => {
|
|
120
|
+
this.messageService.error('igo.geo.catalog.unavailable', 'igo.geo.catalog.unavailableTitle', undefined, { value: catalog.title });
|
|
121
|
+
return EMPTY;
|
|
115
122
|
}));
|
|
116
123
|
}
|
|
117
124
|
flattenWmsCapabilities(parent, level = 0, finalLayers, separator = ' / ') {
|
|
@@ -375,7 +382,7 @@ export class CatalogService {
|
|
|
375
382
|
title: itemListIn.Title,
|
|
376
383
|
address: catalog.id,
|
|
377
384
|
externalProvider: catalog.externalProvider || false,
|
|
378
|
-
sortDirection: catalog.sortDirection,
|
|
385
|
+
sortDirection: catalog.sortDirection, // propagate sortDirection
|
|
379
386
|
items: itemListIn.Layer.reduce((items, layer) => {
|
|
380
387
|
if (layer.Layer !== undefined) {
|
|
381
388
|
// recursive, check next level
|
|
@@ -664,15 +671,15 @@ export class CatalogService {
|
|
|
664
671
|
});
|
|
665
672
|
return layersQueryFormat;
|
|
666
673
|
}
|
|
667
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
668
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
674
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CatalogService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }, { token: i3.LanguageService }, { token: i4.MessageService }, { token: i5.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
675
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CatalogService, providedIn: 'root' });
|
|
669
676
|
}
|
|
670
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
677
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CatalogService, decorators: [{
|
|
671
678
|
type: Injectable,
|
|
672
679
|
args: [{
|
|
673
680
|
providedIn: 'root'
|
|
674
681
|
}]
|
|
675
|
-
}], ctorParameters:
|
|
682
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }, { type: i3.LanguageService }, { type: i4.MessageService }, { type: i5.CapabilitiesService }] });
|
|
676
683
|
class CatalogFactory {
|
|
677
684
|
static createInstanceCatalog(options, catalogService) {
|
|
678
685
|
let catalog;
|
|
@@ -700,4 +707,4 @@ class CatalogFactory {
|
|
|
700
707
|
return catalog;
|
|
701
708
|
}
|
|
702
709
|
}
|
|
703
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvY2F0YWxvZy9zaGFyZWQvY2F0YWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUVMLGdDQUFnQyxFQUNqQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBUW5GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUTlELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQiw0QkFBNEIsRUFDNUIsVUFBVSxFQUNWLFdBQVcsRUFDWixNQUFNLFlBQVksQ0FBQzs7Ozs7QUFLcEIsTUFBTSxPQUFPLGNBQWM7SUFFZjtJQUNBO0lBQ0E7SUFD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QUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBPYmplY3RVdGlscywgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyLFxyXG4gIEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzXHJcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvY2FwYWJpbGl0aWVzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENhcGFiaWxpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zUGFyYW1zLFxyXG4gIFdNVFNEYXRhU291cmNlT3B0aW9uc1xyXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzJztcclxuaW1wb3J0IHsgSW1hZ2VMYXllck9wdGlvbnMsIExheWVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZCc7XHJcbmltcG9ydCB7IGdldFJlc29sdXRpb25Gcm9tU2NhbGUgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC51dGlscyc7XHJcbmltcG9ydCB7IFF1ZXJ5Rm9ybWF0IH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmVudW1zJztcclxuaW1wb3J0IHsgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL2lkLWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IENhdGFsb2cgfSBmcm9tICcuL2NhdGFsb2cuYWJzdHJhY3QnO1xyXG5pbXBvcnQgeyBDYXRhbG9nSXRlbVR5cGUsIFR5cGVDYXRhbG9nIH0gZnJvbSAnLi9jYXRhbG9nLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIENhdGFsb2dJdGVtLFxyXG4gIENhdGFsb2dJdGVtR3JvdXAsXHJcbiAgQ2F0YWxvZ0l0ZW1MYXllcixcclxuICBDYXRhbG9nU2VydmljZU9wdGlvbnMsXHJcbiAgRm9yY2VkUHJvcGVydHlcclxufSBmcm9tICcuL2NhdGFsb2cuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBcmNHSVNSZXN0Q2F0YWxvZyxcclxuICBCYXNlbGF5ZXJzQ2F0YWxvZyxcclxuICBDb21wb3NpdGVDYXRhbG9nLFxyXG4gIFRpbGVPckltYWdlQXJjR0lTUmVzdENhdGFsb2csXHJcbiAgV01TQ2F0YWxvZyxcclxuICBXTVRTQ2F0YWxvZ1xyXG59IGZyb20gJy4vY2F0YWxvZ3MnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNhcGFiaWxpdGllc1NlcnZpY2U6IENhcGFiaWxpdGllc1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGxvYWRDYXRhbG9ncygpOiBPYnNlcnZhYmxlPENhdGFsb2dbXT4ge1xyXG4gICAgY29uc3QgY29udGV4dENvbmZpZyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnY29udGV4dCcpIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGNhdGFsb2dDb25maWc6IENhdGFsb2dTZXJ2aWNlT3B0aW9ucyA9XHJcbiAgICAgIHRoaXMuY29uZmlnLmdldENvbmZpZygnY2F0YWxvZycpIHx8IHt9O1xyXG4gICAgY29uc3QgYXBpVXJsID0gY2F0YWxvZ0NvbmZpZy51cmwgfHwgY29udGV4dENvbmZpZy51cmw7XHJcbiAgICBjb25zdCBjYXRhbG9nc0Zyb21Db25maWcgPSBjYXRhbG9nQ29uZmlnLnNvdXJjZXMgfHwgW107XHJcblxyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZXMkID0gW107XHJcblxyXG4gICAgaWYgKGFwaVVybCkge1xyXG4gICAgICBpZiAoY2F0YWxvZ0NvbmZpZy5iYXNlbGF5ZXJzKSB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uY2F0YWxvZy5iYXNlTGF5ZXJzJyk7XHJcbiAgICAgICAgY29uc3QgYmFzZUxheWVyc0NhdGFsb2cgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiAnY2F0YWxvZy5iYXNlbGF5ZXJzJyxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHVybDogYCR7YXBpVXJsfS9iYXNlbGF5ZXJzYCxcclxuICAgICAgICAgICAgdHlwZTogJ2Jhc2VsYXllcnMnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuICAgICAgICBvYnNlcnZhYmxlcyQucHVzaChvZihiYXNlTGF5ZXJzQ2F0YWxvZykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDYXRhbG9ncyBmcm9tIEFQSVxyXG4gICAgICBjb25zdCBjYXRhbG9nc0Zyb21BcGkkID0gdGhpcy5odHRwXHJcbiAgICAgICAgLmdldDxDYXRhbG9nW10+KGAke2FwaVVybH0vY2F0YWxvZ3NgKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbWFwKChjYXRhbG9ncykgPT5cclxuICAgICAgICAgICAgY2F0YWxvZ3MubWFwKChjOiBhbnkpID0+IE9iamVjdC5hc3NpZ24oYywgYy5vcHRpb25zKSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChfcmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBFTVBUWSlcclxuICAgICAgICApO1xyXG4gICAgICBvYnNlcnZhYmxlcyQucHVzaChjYXRhbG9nc0Zyb21BcGkkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYXRhbG9ncyBmcm9tIGNvbmZpZ1xyXG4gICAgaWYgKGNhdGFsb2dzRnJvbUNvbmZpZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9ic2VydmFibGVzJC5wdXNoKFxyXG4gICAgICAgIG9mKGNhdGFsb2dzRnJvbUNvbmZpZykucGlwZShcclxuICAgICAgICAgIG1hcCgoY2F0YWxvZ3M6IENhdGFsb2dbXSkgPT5cclxuICAgICAgICAgICAgY2F0YWxvZ3MubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFjLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjLmlkID0gdXVpZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gYztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHppcCguLi5vYnNlcnZhYmxlcyQpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2F0YWxvZ3M6IENhdGFsb2dbXVtdKSA9PiBbXS5jb25jYXQuYXBwbHkoW10sIGNhdGFsb2dzKSlcclxuICAgICkgYXMgT2JzZXJ2YWJsZTxDYXRhbG9nW10+O1xyXG4gIH1cclxuXHJcbiAgbG9hZENhdGFsb2dJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICBsZXQgbmV3Q2F0YWxvZzogQ2F0YWxvZztcclxuICAgIG5ld0NhdGFsb2cgPSBDYXRhbG9nRmFjdG9yeS5jcmVhdGVJbnN0YW5jZUNhdGFsb2coY2F0YWxvZywgdGhpcyk7XHJcbiAgICByZXR1cm4gbmV3Q2F0YWxvZy5jb2xsZWN0Q2F0YWxvZ0l0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0Jhc2VMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtR3JvdXBbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0Jhc2VMYXllcnNPcHRpb25zKGNhdGFsb2cpLnBpcGUoXHJcbiAgICAgIG1hcCgobGF5ZXJzT3B0aW9uczogTGF5ZXJPcHRpb25zW10pID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IGxheWVyc09wdGlvbnMubWFwKChsYXllck9wdGlvbnM6IExheWVyT3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhsYXllck9wdGlvbnMuc291cmNlT3B0aW9ucyksXHJcbiAgICAgICAgICAgIHRpdGxlOiBsYXllck9wdGlvbnMudGl0bGUsXHJcbiAgICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcclxuICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zOiBsYXllck9wdGlvbnNcclxuICAgICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW1MYXllcjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZDogJ2NhdGFsb2cuZ3JvdXAuYmFzZWxheWVycycsXHJcbiAgICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcclxuICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgICB0aXRsZTogY2F0YWxvZy50aXRsZSxcclxuICAgICAgICAgICAgaXRlbXNcclxuICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2F0YWxvZ0Jhc2VMYXllcnNPcHRpb25zKFxyXG4gICAgY2F0YWxvZzogQ2F0YWxvZ1xyXG4gICk6IE9ic2VydmFibGU8TGF5ZXJPcHRpb25zW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PExheWVyT3B0aW9uc1tdPihjYXRhbG9nLnVybCk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ1dNU0xheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxyXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbXM6IENhdGFsb2dJdGVtW10gPSBbXTtcclxuICAgICAgICBpZiAoIWNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuU2VydmljZSAmJlxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3QgJiZcclxuICAgICAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0Lmxlbmd0aFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY2F0YWxvZy5hYnN0cmFjdCA9IGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaW5hbExheWVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbldtc0NhcGFiaWxpdGllcyhcclxuICAgICAgICAgIGNhcGFiaWxpdGllcy5DYXBhYmlsaXR5LkxheWVyLFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIGZpbmFsTGF5ZXJzLFxyXG4gICAgICAgICAgY2F0YWxvZy5ncm91cFNlcGFyYXRvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLkNhcGFiaWxpdHkuTGF5ZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGNhcGFiaWxpdGllc0NhcGFiaWxpdHlMYXllci5MYXllciA9IGZpbmFsTGF5ZXJzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkxheWVyLmxlbmd0aCAhPT0gMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5pbmNsdWRlUmVjdXJzaXZlSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyLCBpdGVtcyk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZsYXR0ZW5XbXNDYXBhYmlsaXRpZXMocGFyZW50LCBsZXZlbCA9IDAsIGZpbmFsTGF5ZXJzLCBzZXBhcmF0b3IgPSAnIC8gJykge1xyXG4gICAgaWYgKCFmaW5hbExheWVycy5pbmNsdWRlcyhwYXJlbnQuVGl0bGUpKSB7XHJcbiAgICAgIGNvbnN0IG1vZGlmaWVkUGFyZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50KTtcclxuICAgICAgbW9kaWZpZWRQYXJlbnQuTGF5ZXIgPSBbXTtcclxuICAgICAgZmluYWxMYXllcnMucHVzaChtb2RpZmllZFBhcmVudCk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHBhcmVudC5MYXllcikge1xyXG4gICAgICBjb25zdCBtb2RpZmllZExheWVyID0gT2JqZWN0LmFzc2lnbih7fSwgbGF5ZXIpO1xyXG4gICAgICBpZiAobGV2ZWwgPiAwKSB7XHJcbiAgICAgICAgbW9kaWZpZWRMYXllci5UaXRsZSA9IHBhcmVudC5UaXRsZSArIHNlcGFyYXRvciArIGxheWVyLlRpdGxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsYXllci5MYXllcikge1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbldtc0NhcGFiaWxpdGllcyhcclxuICAgICAgICAgIG1vZGlmaWVkTGF5ZXIsXHJcbiAgICAgICAgICBsZXZlbCArIDEsXHJcbiAgICAgICAgICBmaW5hbExheWVycyxcclxuICAgICAgICAgIHNlcGFyYXRvclxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmluYWxMYXllcnMuZmluZCgoZmYpID0+IGZmLlRpdGxlID09PSBwYXJlbnQuVGl0bGUpLkxheWVyLnB1c2gobGF5ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ1dNVFNMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZykucGlwZShcclxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4gdGhpcy5nZXRXTVRTSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2FwYWJpbGl0aWVzOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcmNHSVNSRVNUSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0NvbXBvc2l0ZUxheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xyXG4gICAgY29uc3QgY29tcG9zaXRlQ2F0YWxvZyA9IChjYXRhbG9nIGFzIENvbXBvc2l0ZUNhdGFsb2cpLmNvbXBvc2l0ZTtcclxuXHJcbiAgICBjb25zdCBjYXRhbG9nc0Zyb21JbnN0YW5jZSA9IFtdIGFzIENhdGFsb2dbXTtcclxuICAgIGNvbXBvc2l0ZUNhdGFsb2cubWFwKChjb21wb25lbnQ6IENhdGFsb2cpID0+IHtcclxuICAgICAgY29tcG9uZW50LnNvcnREaXJlY3Rpb24gPSBjYXRhbG9nLnNvcnREaXJlY3Rpb247IC8vIHByb3BhZ2F0ZSBzb3J0RGlyZWN0aW9uIHdpdGggcGFyZW50IHZhbHVlXHJcbiAgICAgIGNhdGFsb2dzRnJvbUluc3RhbmNlLnB1c2goXHJcbiAgICAgICAgQ2F0YWxvZ0ZhY3RvcnkuY3JlYXRlSW5zdGFuY2VDYXRhbG9nKGNvbXBvbmVudCwgdGhpcylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGdldCBDYXRhbG9nSXRlbXMgZm9yIGVhY2ggb3JpZ2luYWwgQ2F0YWxvZy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBjb25zdCByZXF1ZXN0MSQgPSBbXTtcclxuICAgIGNhdGFsb2dzRnJvbUluc3RhbmNlLm1hcCgoY29tcG9uZW50OiBDYXRhbG9nKSA9PlxyXG4gICAgICByZXF1ZXN0MSQucHVzaChjb21wb25lbnQuY29sbGVjdENhdGFsb2dJdGVtcygpKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBpbnRlZ3JhdGUgaW1wb3NlZCBncm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IHJlcXVlc3QyJCA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGZsYXREZWVwTGF5ZXIoYXJyKSB7XHJcbiAgICAgIHJldHVybiBhcnIucmVkdWNlKFxyXG4gICAgICAgIChhY2MsIHZhbCkgPT5cclxuICAgICAgICAgIGFjYy5jb25jYXQoXHJcbiAgICAgICAgICAgIHZhbC50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuR3JvdXAgPyBmbGF0RGVlcExheWVyKHZhbC5pdGVtcykgOiB2YWxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvc2l0ZUNhdGFsb2cpLmZpbmQoKGspID0+IGNvbXBvc2l0ZUNhdGFsb2dba10uZ3JvdXBJbXBvc2UpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgcHVzaEltcG9zZUdyb3VwID0gKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYyA9IGNhdGFsb2dzRnJvbUluc3RhbmNlW2luZGV4XTtcclxuICAgICAgICBjb25zdCBvdXRHcm91cEltcG9zZSA9IE9iamVjdC5hc3NpZ24oe30sIGMuZ3JvdXBJbXBvc2UpO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLmFkZHJlc3MgPSBjLmlkO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLnR5cGUgPSBDYXRhbG9nSXRlbVR5cGUuR3JvdXA7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuZXh0ZXJuYWxQcm92aWRlciA9IGMuZXh0ZXJuYWxQcm92aWRlcjtcclxuICAgICAgICBpZiAob3V0R3JvdXBJbXBvc2Uuc29ydERpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID0gYy5zb3J0RGlyZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRHcm91cEltcG9zZS5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBmbGF0TGF5ZXIgPSBmbGF0RGVlcExheWVyKGl0ZW0pO1xyXG4gICAgICAgIGZsYXRMYXllci5tYXAoXHJcbiAgICAgICAgICAodikgPT4gKHYuYWRkcmVzcyA9IGAke291dEdyb3VwSW1wb3NlLmFkZHJlc3N9LiR7b3V0R3JvdXBJbXBvc2UuaWR9YClcclxuICAgICAgICApO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLml0ZW1zID0gZmxhdExheWVyO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0R3JvdXBJbXBvc2U7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXF1ZXN0MiQgPSByZXF1ZXN0MSQubWFwKChvYnMsIGlkeCkgPT5cclxuICAgICAgICBvYnMucGlwZShcclxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+XHJcbiAgICAgICAgICAgIGNvbXBvc2l0ZUNhdGFsb2dbaWR4XS5ncm91cEltcG9zZVxyXG4gICAgICAgICAgICAgID8gcHVzaEltcG9zZUdyb3VwKGl0ZW1zLCBpZHgpXHJcbiAgICAgICAgICAgICAgOiBpdGVtc1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlcXVlc3QyJCA9IHJlcXVlc3QxJDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25jYXQgR3JvdXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGNvbnN0IHJlcXVlc3QzJCA9IHppcCguLi5yZXF1ZXN0MiQpLnBpcGUoXHJcbiAgICAgIG1hcChcclxuICAgICAgICAob3V0cHV0OiBDYXRhbG9nSXRlbVtdKSA9PiBbXS5jb25jYXQoLi4ub3V0cHV0KSAvLyBbXS5jb25jYXQuYXBwbHkoW10sIHJlc3VsdDFcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBtZXJnZSBHcm91cCAoZmlyc3QgbGV2ZWwgb25seSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGNvbnN0IGdyb3VwQnlHcm91cElkID0gKGRhdGEsIGtleUZuKSA9PlxyXG4gICAgICBkYXRhLnJlZHVjZSgoYWNjLCBncm91cCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBrZXlGbihncm91cCk7XHJcbiAgICAgICAgY29uc3QgaW5kID0gYWNjLmZpbmQoKHgpID0+IHguaWQgPT09IGdyb3VwSWQpO1xyXG5cclxuICAgICAgICBpZiAoIWluZCkge1xyXG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gZ3JvdXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGl4ID0gYWNjLmluZGV4T2YoaW5kKTtcclxuICAgICAgICAgIGlmIChhY2NbaXhdLmFkZHJlc3Muc3BsaXQoJ3wnKS5pbmRleE9mKGdyb3VwLmFkZHJlc3MpID09PSAtMSkge1xyXG4gICAgICAgICAgICBhY2NbaXhdLmFkZHJlc3MgPSBgJHthY2NbaXhdLmFkZHJlc3N9fCR7Z3JvdXAuYWRkcmVzc31gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWNjW2l4XS5pdGVtcy5wdXNoKC4uLmdyb3VwLml0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgW10pO1xyXG5cclxuICAgIC8vIG1lcmdlIExheWVyIGZvciBlYWNoIExldmVsIChjYXRhbG9nLCBncm91cChyZWN1cnNpdmUpKVxyXG4gICAgY29uc3QgcmVjdXJzaXZlR3JvdXBCeUxheWVyQWRkcmVzcyA9IChpdGVtcywga2V5Rm4pID0+XHJcbiAgICAgIGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtLCBpZHgsIGFycikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxheWVyVGl0bGUgPSBrZXlGbihpdGVtKTtcclxuICAgICAgICBjb25zdCBvdXRJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllcikge1xyXG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgc2FtZSBhZGRyZXNzID0+IHJlc3VsdDogb25seSBvbmUgaXRlbSBpcyBrZXB0XHJcblxyXG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgYWRkcmVzcyBkaWZmXHJcbiAgICAgICAgICBjb25zdCBpbmRpY2VzTWF0Y2hUaXRsZSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgaW5kaWNlc01hdGNoTmV3TWV0YWRhdGFVcmwgPSBbXTsgLy8gbWV0YWRhdGFcclxuICAgICAgICAgIGNvbnN0IGRpZmZBZGRyZXNzID0gYXJyLmZpbHRlcigoeCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYkluZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoeC50aXRsZSA9PT0gbGF5ZXJUaXRsZSAmJiB4LnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllcikge1xyXG4gICAgICAgICAgICAgIGlmIChpICE9PSBpZHggJiYgeC5hZGRyZXNzICE9PSBpdGVtLmFkZHJlc3MpIHtcclxuICAgICAgICAgICAgICAgIGJJbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpbmRpY2VzTWF0Y2hUaXRsZS5wdXNoKGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBiSW5kO1xyXG4gICAgICAgICAgfSk7IC8vICQmIGkgIT09IGlkeFxyXG5cclxuICAgICAgICAgIGlmIChkaWZmQWRkcmVzcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBuUG9zaXRpb24gPSBpbmRpY2VzTWF0Y2hUaXRsZS5maW5kSW5kZXgoKHgpID0+IHggPT09IGlkeCkgKyAxO1xyXG4gICAgICAgICAgICBvdXRJdGVtLnRpdGxlID0gYCR7aXRlbS50aXRsZX0gKCR7blBvc2l0aW9ufSlgOyAvLyBzb3VyY2U6ICR7aXRlbS5hZGRyZXNzLnNwbGl0KCcuJylbMF19XHJcbiAgICAgICAgICAgIG5Qb3NpdGlvbiA9XHJcbiAgICAgICAgICAgICAgaW5kaWNlc01hdGNoTmV3TWV0YWRhdGFVcmwuZmluZEluZGV4KCh4KSA9PiB4ID09PSBpZHgpICsgMTtcclxuICAgICAgICAgICAgb3V0SXRlbS5uZXdNZXRhZGF0YVVybCA9IGAke2l0ZW0ubmV3TWV0YWRhdGFVcmx9ICgke25Qb3NpdGlvbn0pYDsgLy8gc291cmNlOiAke2l0ZW0uYWRkcmVzcy5zcGxpdCgnLicpWzBdfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGV4aXN0ID0gYWNjLmZpbmQoXHJcbiAgICAgICAgICAgICh4KSA9PiB4LnRpdGxlID09PSBvdXRJdGVtLnRpdGxlICYmIHgudHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSBvdXRJdGVtO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuR3JvdXApIHtcclxuICAgICAgICAgIG91dEl0ZW0uaXRlbXMgPSByZWN1cnNpdmVHcm91cEJ5TGF5ZXJBZGRyZXNzKFxyXG4gICAgICAgICAgICBpdGVtLml0ZW1zLFxyXG4gICAgICAgICAgICAobGF5ZXIpID0+IGxheWVyLnRpdGxlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gb3V0SXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sIFtdKTtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0NCQgPSByZXF1ZXN0MyQucGlwZShcclxuICAgICAgbWFwKChvdXRwdXQpID0+IGdyb3VwQnlHcm91cElkKG91dHB1dCwgKGdyb3VwKSA9PiBncm91cC5pZCkpLFxyXG4gICAgICBtYXAoKG91dHB1dCkgPT4gW10uY29uY2F0KC4uLm91dHB1dCkpLFxyXG4gICAgICBtYXAoKGRhdGEpID0+IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoZGF0YSwgKGxheWVyKSA9PiBsYXllci50aXRsZSkpXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiByZXF1ZXN0NCQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbY2F0YWxvZy50eXBlIGFzIHN0cmluZ107XHJcbiAgICByZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXNTZXJ2aWNlXHJcbiAgICAgIC5nZXRDYXBhYmlsaXRpZXMoc1R5cGUgYXMgYW55LCBjYXRhbG9nLnVybCwgY2F0YWxvZy52ZXJzaW9uKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBjYXRhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgICAgPyAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlJ1xyXG4gICAgICAgICAgICAgIDogJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxyXG4gICAgICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlVGl0bGUnLFxyXG4gICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNhdGFsb2cudGl0bGUgPyB7IHZhbHVlOiBjYXRhbG9nLnRpdGxlIH0gOiB1bmRlZmluZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICBsYXllck5hbWVGcm9tQ2F0YWxvZzogc3RyaW5nLFxyXG4gICAgZm9yY2VkUHJvcGVydGllczogRm9yY2VkUHJvcGVydHlbXVxyXG4gICk6IEZvcmNlZFByb3BlcnR5IHtcclxuICAgIGlmICghZm9yY2VkUHJvcGVydGllcyB8fCBmb3JjZWRQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXR1cm5Qcm9wZXJ0eTogRm9yY2VkUHJvcGVydHkgPSB7XHJcbiAgICAgIGxheWVyTmFtZTogbGF5ZXJOYW1lRnJvbUNhdGFsb2csXHJcbiAgICAgIHRpdGxlOiB1bmRlZmluZWQsXHJcbiAgICAgIG1ldGFkYXRhVXJsOiB1bmRlZmluZWQsXHJcbiAgICAgIG1ldGFkYXRhQWJzdHJhY3Q6IHVuZGVmaW5lZCxcclxuICAgICAgbWV0YWRhdGFBYnN0cmFjdEFsbDogdW5kZWZpbmVkLFxyXG4gICAgICBtZXRhZGF0YVVybEFsbDogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG4gICAgLy9wcm9jZXNzIHdpbGRjYXJkIGJlZm9yZVxyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSAqIHdpbGRjYXJkXHJcbiAgICBjb25zdCBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzID0gZm9yY2VkUHJvcGVydGllcy5maW5kKFxyXG4gICAgICAoZikgPT4gZi5sYXllck5hbWUgPT09ICcqJ1xyXG4gICAgKTtcclxuICAgIGlmIChmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzKSB7XHJcbiAgICAgIC8vIG1ldGFkYXRhQWJzdHJhY3RBbGxcclxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFBYnN0cmFjdEFsbCkge1xyXG4gICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3RBbGwgPVxyXG4gICAgICAgICAgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YUFic3RyYWN0QWxsO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIG1ldGFkYXRhVXJsQWxsXHJcbiAgICAgIGlmIChmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhVXJsQWxsKSB7XHJcbiAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFVcmxBbGwgPVxyXG4gICAgICAgICAgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YVVybEFsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yY2VkUHJvcGVydGllcy5tYXAoKGZvcmNlZFByb3BlcnR5KSA9PiB7XHJcbiAgICAgIC8vIGlmIG1hdGNoIGZvdW5kXHJcbiAgICAgIGlmIChsYXllck5hbWVGcm9tQ2F0YWxvZyA9PT0gZm9yY2VkUHJvcGVydHkubGF5ZXJOYW1lKSB7XHJcbiAgICAgICAgLy8gdGl0bGVcclxuICAgICAgICBpZiAoZm9yY2VkUHJvcGVydHkudGl0bGUpIHtcclxuICAgICAgICAgIHJldHVyblByb3BlcnR5LnRpdGxlID0gZm9yY2VkUHJvcGVydHkudGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ldGFkYXRhVXJsXHJcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YVVybCA9IGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtZXRhZGF0YUFic3RyYWN0XHJcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3QpIHtcclxuICAgICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3QgPSBmb3JjZWRQcm9wZXJ0eS5tZXRhZGF0YUFic3RyYWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuUHJvcGVydHk7XHJcbiAgfVxyXG5cclxuICAvLy8gV01TXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUNhdGFsb2dJdGVtTGF5ZXIobGF5ZXIsIGlkUGFyZW50LCBsYXllcnNRdWVyeUZvcm1hdCwgY2F0YWxvZykge1xyXG4gICAgY29uc3QgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID0gdGhpcy5yZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcclxuICAgICAgbGF5ZXIuTmFtZSxcclxuICAgICAgbGF5ZXJzUXVlcnlGb3JtYXRcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbGVnZW5kT3B0aW9ucyA9XHJcbiAgICAgIGNhdGFsb2cuc2hvd0xlZ2VuZCAmJiBsYXllci5TdHlsZVxyXG4gICAgICAgID8gdGhpcy5jYXBhYmlsaXRpZXNTZXJ2aWNlLmdldFN0eWxlKGxheWVyLlN0eWxlKVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGNhdGFsb2cucXVlcnlQYXJhbXMsIHtcclxuICAgICAgTEFZRVJTOiBsYXllci5OYW1lLFxyXG4gICAgICBWRVJTSU9OOiBjYXRhbG9nLnZlcnNpb25cclxuICAgIH0gYXMgV01TRGF0YVNvdXJjZU9wdGlvbnNQYXJhbXMpO1xyXG5cclxuICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICB0eXBlOiAnd21zJyxcclxuICAgICAgdXJsOiBjYXRhbG9nLnVybCxcclxuICAgICAgY3Jvc3NPcmlnaW46IGNhdGFsb2cuc2V0Q3Jvc3NPcmlnaW5Bbm9ueW1vdXMgPyAnYW5vbnltb3VzJyA6IHVuZGVmaW5lZCxcclxuICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCxcclxuICAgICAgcXVlcnlIdG1sVGFyZ2V0OlxyXG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTCB8fFxyXG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTEdNTDJcclxuICAgICAgICAgID8gJ2lmcmFtZSdcclxuICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxyXG4gICAgICBjYXRhbG9nLnNvdXJjZU9wdGlvbnMsXHJcbiAgICAgIHsgcGFyYW1zIH1cclxuICAgICkgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgcHJvcGVydGllc1RvRm9yY2UgPSB0aGlzLmNvbXB1dGVGb3JjZWRQcm9wZXJ0aWVzKFxyXG4gICAgICBsYXllci5OYW1lLFxyXG4gICAgICBjYXRhbG9nLmZvcmNlZFByb3BlcnRpZXNcclxuICAgICk7XHJcbiAgICBsZXQgYmFzZUFic3RyYWN0O1xyXG4gICAgbGV0IGV4dGVybiA9IHRydWU7XHJcbiAgICBpZiAobGF5ZXIuQWJzdHJhY3QpIHtcclxuICAgICAgYmFzZUFic3RyYWN0ID0gbGF5ZXIuQWJzdHJhY3Q7XHJcbiAgICB9IGVsc2UgaWYgKCFsYXllci5BYnN0cmFjdCAmJiBjYXRhbG9nLmFic3RyYWN0KSB7XHJcbiAgICAgIGJhc2VBYnN0cmFjdCA9IGNhdGFsb2cuYWJzdHJhY3Q7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXllck9ubGluZVJlc291cmNlID1cclxuICAgICAgbGF5ZXI/LkRhdGFVUkwgJiYgbGF5ZXI/LkRhdGFVUkwubGVuZ3RoID4gMFxyXG4gICAgICAgID8gbGF5ZXI/LkRhdGFVUkxbMF0uT25saW5lUmVzb3VyY2VcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICBsZXQgbWV0YWRhdGFVcmwgPVxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHxcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsIHx8XHJcbiAgICAgIGxheWVyT25saW5lUmVzb3VyY2U7XHJcbiAgICBsZXQgbWV0YWRhdGFBYnN0cmFjdCA9XHJcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgIGJhc2VBYnN0cmFjdDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcclxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxyXG4gICAgICAocHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcclxuICAgICkge1xyXG4gICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgJiZcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXHJcbiAgICApIHtcclxuICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGF5ZXJQcmVwYXJlID0ge1xyXG4gICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxyXG4gICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXHJcbiAgICAgIHRpdGxlOiBwcm9wZXJ0aWVzVG9Gb3JjZT8udGl0bGUgPyBwcm9wZXJ0aWVzVG9Gb3JjZS50aXRsZSA6IGxheWVyLlRpdGxlLFxyXG4gICAgICBhZGRyZXNzOiBpZFBhcmVudCxcclxuICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyIHx8IGZhbHNlLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgbWF4UmVzb2x1dGlvbjogZ2V0UmVzb2x1dGlvbkZyb21TY2FsZShsYXllci5NYXhTY2FsZURlbm9taW5hdG9yKSxcclxuICAgICAgICBtaW5SZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1pblNjYWxlRGVub21pbmF0b3IpLFxyXG4gICAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxyXG4gICAgICAgICAgZXh0ZXJuLFxyXG4gICAgICAgICAgYWJzdHJhY3Q6IG1ldGFkYXRhQWJzdHJhY3QsXHJcbiAgICAgICAgICB0eXBlOiBiYXNlU291cmNlT3B0aW9ucy50eXBlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsZWdlbmRPcHRpb25zLFxyXG4gICAgICAgIHRvb2x0aXA6IHsgdHlwZTogY2F0YWxvZy50b29sdGlwVHlwZSB9LFxyXG4gICAgICAgIHNvdXJjZU9wdGlvbnNcclxuICAgICAgfVxyXG4gICAgfSBhcyBDYXRhbG9nSXRlbTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKGxheWVyUHJlcGFyZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVDYXRhbG9nSXRlbUdyb3VwKFxyXG4gICAgaXRlbUxpc3RJbixcclxuICAgIHJlZ2V4ZXMsXHJcbiAgICBpZEdyb3VwLFxyXG4gICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICBjYXRhbG9nXHJcbiAgKSB7XHJcbiAgICBjb25zdCBncm91cFByZXBhcmUgPSB7XHJcbiAgICAgIGlkOiBpZEdyb3VwLFxyXG4gICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgIHRpdGxlOiBpdGVtTGlzdEluLlRpdGxlLFxyXG4gICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxyXG4gICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIgfHwgZmFsc2UsXHJcbiAgICAgIHNvcnREaXJlY3Rpb246IGNhdGFsb2cuc29ydERpcmVjdGlvbiwgLy8gcHJvcGFnYXRlIHNvcnREaXJlY3Rpb25cclxuICAgICAgaXRlbXM6IGl0ZW1MaXN0SW4uTGF5ZXIucmVkdWNlKChpdGVtczogQ2F0YWxvZ0l0ZW1bXSwgbGF5ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChsYXllci5MYXllciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAvLyByZWN1cnNpdmUsIGNoZWNrIG5leHQgbGV2ZWxcclxuICAgICAgICAgIGNvbnN0IGlkR3JvdXBJdGVtTmV4dExldmVsID1cclxuICAgICAgICAgICAgaWRHcm91cCArIGAuZ3JvdXAuJHtsYXllci5OYW1lIHx8IGxheWVyLkxheWVyWzBdLk5hbWV9YDtcclxuICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbTogQ2F0YWxvZ0l0ZW1Hcm91cCA9IHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXHJcbiAgICAgICAgICAgIGxheWVyLFxyXG4gICAgICAgICAgICByZWdleGVzLFxyXG4gICAgICAgICAgICBpZEdyb3VwSXRlbU5leHRMZXZlbCxcclxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaXRlbXMucHVzaChncm91cEl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLk5hbWUsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtOiBDYXRhbG9nSXRlbUxheWVyPEltYWdlTGF5ZXJPcHRpb25zPiA9XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtTGF5ZXIoXHJcbiAgICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgICAgaWRHcm91cCxcclxuICAgICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgICAgICBjYXRhbG9nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaXRlbXMucHVzaChsYXllckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgIH0sIFtdKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBncm91cFByZXBhcmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluY2x1ZGVSZWN1cnNpdmVJdGVtcyhcclxuICAgIGNhdGFsb2c6IENhdGFsb2csXHJcbiAgICBpdGVtTGlzdEluOiBhbnksXHJcbiAgICBpdGVtc1ByZXBhcmU6IENhdGFsb2dJdGVtW10sXHJcbiAgICBsb29wTGV2ZWw6IG51bWJlciA9IDBcclxuICApIHtcclxuICAgIC8vIERpZyBhbGwgbGV2ZWxzIHVudGlsIGxhc3QgbGV2ZWwgKGxheWVyIG9iamVjdCBhcmUgbm90IGRlZmluZWQgb24gbGFzdCBsZXZlbClcclxuICAgIGNvbnN0IHJlZ2V4ZXMgPSAoY2F0YWxvZy5yZWdGaWx0ZXJzIHx8IFtdKS5tYXAoXHJcbiAgICAgIChwYXR0ZXJuOiBzdHJpbmcpID0+IG5ldyBSZWdFeHAocGF0dGVybilcclxuICAgICk7XHJcbiAgICBpZiAoIWl0ZW1MaXN0SW4uTGF5ZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtTGlzdEluLkxheWVyKSB7XHJcbiAgICAgIGlmIChpdGVtLkxheWVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyByZWN1cnNpdmUsIGNoZWNrIG5leHQgbGV2ZWxcclxuICAgICAgICB0aGlzLmluY2x1ZGVSZWN1cnNpdmVJdGVtcyhjYXRhbG9nLCBpdGVtLCBpdGVtc1ByZXBhcmUsIGxvb3BMZXZlbCArIDEpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdCA9IHRoaXMuZmluZENhdGFsb2dJbmZvRm9ybWF0KGNhdGFsb2cpO1xyXG5cclxuICAgICAgLy8gZ3JvdXAod2l0aCBsYXllcnMpIGFuZCBsYXllcih3aXRob3V0IGdyb3VwKSBsZXZlbCAxXHJcbiAgICAgIGlmIChsb29wTGV2ZWwgIT09IDApIHtcclxuICAgICAgICAvLyBUT0RPOiBTbGljZSB0aGF0IGludG8gbXVsdGlwbGUgbWV0aG9kc1xyXG4gICAgICAgIC8vIERlZmluZSBvYmplY3Qgb2YgZ3JvdXAgbGF5ZXJcclxuICAgICAgICBjb25zdCBpZEdyb3VwSXRlbSA9IGBjYXRhbG9nLmdyb3VwLiR7aXRlbUxpc3RJbi5OYW1lIHx8IGl0ZW0uTmFtZX1gO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwSXRlbSA9IHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXHJcbiAgICAgICAgICBpdGVtTGlzdEluLFxyXG4gICAgICAgICAgcmVnZXhlcyxcclxuICAgICAgICAgIGlkR3JvdXBJdGVtLFxyXG4gICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICBjYXRhbG9nXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGdyb3VwSXRlbS5pdGVtcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgIGl0ZW1zUHJlcGFyZS5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCcmVhayB0aGUgZ3JvdXAgKGRvbid0IGFkZCBhIGdyb3VwIG9mIGxheWVyIGZvciBlYWNoIG9mIHRoZWlyIGxheWVyISlcclxuICAgICAgICBicmVhaztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsYXllciB3aXRob3V0IGdyb3VwXHJcbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhpdGVtLk5hbWUsIHJlZ2V4ZXMpICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcclxuICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgY2F0YWxvZy5pZCxcclxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChsYXllckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIFdNVFNcclxuXHJcbiAgcHJpdmF0ZSBnZXRXTVRTSXRlbXMoXHJcbiAgICBjYXRhbG9nLFxyXG4gICAgY2FwYWJpbGl0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgKTogQ2F0YWxvZ0l0ZW1MYXllcltdIHtcclxuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheWVycyA9IGNhcGFiaWxpdGllcy5Db250ZW50cy5MYXllcjtcclxuICAgIGNvbnN0IHJlZ2V4ZXMgPSAoY2F0YWxvZy5yZWdGaWx0ZXJzIHx8IFtdKS5tYXAoXHJcbiAgICAgIChwYXR0ZXJuOiBzdHJpbmcpID0+IG5ldyBSZWdFeHAocGF0dGVybilcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uICYmXHJcbiAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlSWRlbnRpZmljYXRpb24uQWJzdHJhY3QgJiZcclxuICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2VJZGVudGlmaWNhdGlvbi5BYnN0cmFjdC5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICBjYXRhbG9nLmFic3RyYWN0ID0gY2FwYWJpbGl0aWVzLlNlcnZpY2VJZGVudGlmaWNhdGlvbi5BYnN0cmFjdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXJzXHJcbiAgICAgIC5tYXAoKGxheWVyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICAgICAgICBsYXllci5UaXRsZSxcclxuICAgICAgICAgIGNhdGFsb2cuZm9yY2VkUHJvcGVydGllc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGV4dGVybiA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBtZXRhZGF0YVVybCA9XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHwgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsO1xyXG4gICAgICAgIGxldCBtZXRhZGF0YUFic3RyYWN0ID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbCB8fFxyXG4gICAgICAgICAgY2F0YWxvZy5hYnN0cmFjdDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxyXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxyXG4gICAgICAgICAgKHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0ICYmXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhsYXllci5JZGVudGlmaWVyLCByZWdleGVzKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGNhdGFsb2cucXVlcnlQYXJhbXMsIHtcclxuICAgICAgICAgIHZlcnNpb246ICcxLjAuMCdcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBiYXNlU291cmNlT3B0aW9ucyA9IHtcclxuICAgICAgICAgIHR5cGU6ICd3bXRzJyxcclxuICAgICAgICAgIHVybDogY2F0YWxvZy51cmwsXHJcbiAgICAgICAgICBjcm9zc09yaWdpbjogY2F0YWxvZy5zZXRDcm9zc09yaWdpbkFub255bW91c1xyXG4gICAgICAgICAgICA/ICdhbm9ueW1vdXMnXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLklkZW50aWZpZXIsXHJcbiAgICAgICAgICBtYXRyaXhTZXQ6IGNhdGFsb2cubWF0cml4U2V0LFxyXG4gICAgICAgICAgb3B0aW9uc0Zyb21DYXBhYmlsaXRpZXM6IHRydWUsXHJcbiAgICAgICAgICByZXF1ZXN0RW5jb2Rpbmc6IGNhdGFsb2cucmVxdWVzdEVuY29kaW5nIHx8ICdLVlAnLFxyXG4gICAgICAgICAgc3R5bGU6ICdkZWZhdWx0J1xyXG4gICAgICAgIH0gYXMgV01UU0RhdGFTb3VyY2VPcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICBiYXNlU291cmNlT3B0aW9ucyxcclxuICAgICAgICAgIGNhdGFsb2cuc291cmNlT3B0aW9ucyxcclxuICAgICAgICAgIHsgcGFyYW1zIH1cclxuICAgICAgICApIGFzIFdNVFNEYXRhU291cmNlT3B0aW9ucztcclxuXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZCh7XHJcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxyXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxyXG4gICAgICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZVxyXG4gICAgICAgICAgICA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlXHJcbiAgICAgICAgICAgIDogbGF5ZXIuVGl0bGUsXHJcbiAgICAgICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxyXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBzb3VyY2VPcHRpb25zLFxyXG4gICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgIHVybDogbWV0YWRhdGFVcmwsXHJcbiAgICAgICAgICAgICAgZXh0ZXJuLFxyXG4gICAgICAgICAgICAgIGFic3RyYWN0OiBtZXRhZGF0YUFic3RyYWN0LFxyXG4gICAgICAgICAgICAgIHR5cGU6IGJhc2VTb3VyY2VPcHRpb25zLnR5cGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBcmNHSVNSRVNUSXRlbXMoXHJcbiAgICBjYXRhbG9nOiBDYXRhbG9nLFxyXG4gICAgY2FwYWJpbGl0aWVzXHJcbiAgKTogQ2F0YWxvZ0l0ZW1MYXllcltdIHtcclxuICAgIGlmICghY2FwYWJpbGl0aWVzIHx8ICFjYXBhYmlsaXRpZXMubGF5ZXJzKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxyXG4gICAgICAgICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGVUaXRsZSdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JvdXBzOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJbXSA9ICFjYXBhYmlsaXRpZXMubGF5ZXJzXHJcbiAgICAgID8gW11cclxuICAgICAgOiBjYXBhYmlsaXRpZXMubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnN1YkxheWVySWRzKTtcclxuICAgIGNvbnN0IGxheWVyczogQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyW10gPSAhY2FwYWJpbGl0aWVzLmxheWVyc1xyXG4gICAgICA/IFtdXHJcbiAgICAgIDogY2FwYWJpbGl0aWVzLmxheWVycy5maWx0ZXIoXHJcbiAgICAgICAgICAobGF5ZXIpID0+XHJcbiAgICAgICAgICAgICFsYXllci50eXBlIHx8XHJcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzLkZlYXR1cmVMYXllciB8fFxyXG4gICAgICAgICAgICBsYXllci50eXBlID09PSBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJUeXBlcy5SYXN0ZXJMYXllclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcclxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgYWJzdHJhY3Q7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNhcGFiaWxpdGllcy5zZXJ2aWNlRGVzY3JpcHRpb24gJiZcclxuICAgICAgY2FwYWJpbGl0aWVzLnNlcnZpY2VEZXNjcmlwdGlvbi5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICBjb25zdCByZWdleCA9IC8oPChbXj5dKyk+KS9naTtcclxuICAgICAgYWJzdHJhY3QgPSBjYXBhYmlsaXRpZXMuc2VydmljZURlc2NyaXB0aW9uLnJlcGxhY2UocmVnZXgsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpdGVtczogQ2F0YWxvZ0l0ZW1MYXllcltdID0gbGF5ZXJzXHJcbiAgICAgIC5tYXAoKGxheWVyOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXIpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICAgICAgICBsYXllci5uYW1lLFxyXG4gICAgICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcclxuICAgICAgICBsZXQgZXh0ZXJuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgbGV0IG1ldGFkYXRhVXJsID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fCBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGw7XHJcbiAgICAgICAgbGV0IG1ldGFkYXRhQWJzdHJhY3QgPVxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgICAgICBiYXNlQWJzdHJhY3Q7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcclxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgJiZcclxuICAgICAgICAgIChwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCAmJlxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlc3RMYXllclJlZ2V4ZXMobGF5ZXIuaWQudG9TdHJpbmcoKSwgcmVnZXhlcykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBiYXNlU291cmNlT3B0aW9uczogQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zICZcclxuICAgICAgICAgIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICAgICAgdHlwZTogVHlwZUNhdGFsb2dbY2F0YWxvZy50eXBlXSBhcyBhbnksXHJcbiAgICAgICAgICB1cmw6IGNhdGFsb2cudXJsLFxyXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBxdWVyeWFibGU6IHRydWUsXHJcbiAgICAgICAgICBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQuRVNSSUpTT04sXHJcbiAgICAgICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc291cmNlT3B0aW9uczogQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICBjYXRhbG9nLnNvdXJjZU9wdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQoe1xyXG4gICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhzb3VyY2VPcHRpb25zKSxcclxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcclxuICAgICAgICAgIHRpdGxlOiBwcm9wZXJ0aWVzVG9Gb3JjZT8udGl0bGVcclxuICAgICAgICAgICAgPyBwcm9wZXJ0aWVzVG9Gb3JjZS50aXRsZVxyXG4gICAgICAgICAgICA6IGxheWVyLm5hbWUsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICAgIG1pblJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIubWF4U2NhbGUpLFxyXG4gICAgICAgICAgICBtYXhSZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLm1pblNjYWxlKSxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxyXG4gICAgICAgICAgICAgIGV4dGVybixcclxuICAgICAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcclxuICAgICAgICAgICAgICB0eXBlOiBjYXRhbG9nLnR5cGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgY29uc3QgZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3QgZ3JvdXBlZEl0ZW1zOiBDYXRhbG9nSXRlbUxheWVyW10gPSBncm91cHNcclxuICAgICAgLm1hcCgoZ3JvdXApID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3B0aW9uczogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXHJcbiAgICAgICAgICBpZDogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXHJcbiAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBjYXRhbG9nLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB0aXRsZTogZ3JvdXAubmFtZSxcclxuICAgICAgICAgIGl0ZW1zOiBpdGVtc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3ViTGF5ZXJJZHNTdHIgPSBncm91cC5zdWJMYXllcklkcy5tYXAoKHIpID0+IHIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkxheWVySWRzU3RyLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgKGkub3B0aW9ucy5zb3VyY2VPcHRpb25zIGFzIEFyY0dJU1Jlc3REYXRhU291cmNlT3B0aW9ucykubGF5ZXJcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAubWFwKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzLnB1c2goaS5pZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGksIHtcclxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGBjYXRhbG9nLmdyb3VwLiR7Z3JvdXAubmFtZX1gXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigoZykgPT4gZy5pdGVtcy5sZW5ndGgpO1xyXG5cclxuICAgIGlmIChncm91cHMpIHtcclxuICAgICAgY29uc3QgVGl0bGVPcklkID0gY2F0YWxvZy50aXRsZSB8fCBjYXRhbG9nLmlkO1xyXG4gICAgICBjb25zdCBub25IYW5kbGVkTGF5ZXJzID0gaXRlbXNcclxuICAgICAgICAuZmlsdGVyKChpKSA9PiAhZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzLmluY2x1ZGVzKGkuaWQpKVxyXG4gICAgICAgIC5tYXAoKGkpID0+XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBpLCB7XHJcbiAgICAgICAgICAgIGFkZHJlc3M6IGBjYXRhbG9nLmdyb3VwLiR7VGl0bGVPcklkfWBcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKG5vbkhhbmRsZWRMYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9uSGFuZGxlZEdyb3VwID0ge1xyXG4gICAgICAgICAgb3B0aW9uczogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtUaXRsZU9ySWR9YCxcclxuICAgICAgICAgIGlkOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gLFxyXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxyXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgdGl0bGU6IFRpdGxlT3JJZCxcclxuICAgICAgICAgIGl0ZW1zOiBub25IYW5kbGVkTGF5ZXJzXHJcbiAgICAgICAgfTtcclxuICAgICAgICBncm91cGVkSXRlbXMucHVzaChub25IYW5kbGVkR3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwcyA/IGdyb3VwZWRJdGVtcyA6IGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0ZXN0TGF5ZXJSZWdleGVzKGxheWVyTmFtZTogc3RyaW5nLCByZWdleGVzOiBSZWdFeHBbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlZ2V4ZXMuZmluZCgocmVnZXg6IFJlZ0V4cCkgPT4gcmVnZXgudGVzdChsYXllck5hbWUpKSAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcclxuICAgIGxheWVyTmFtZUZyb21DYXRhbG9nOiBzdHJpbmcsXHJcbiAgICBsYXllcnNRdWVyeUZvcm1hdDogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdXHJcbiAgKTogUXVlcnlGb3JtYXQge1xyXG4gICAgY29uc3QgY3VycmVudExheWVySW5mb0Zvcm1hdCA9IGxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoXHJcbiAgICAgIChmKSA9PiBmLmxheWVyID09PSBsYXllck5hbWVGcm9tQ2F0YWxvZ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGJhc2VJbmZvRm9ybWF0ID0gbGF5ZXJzUXVlcnlGb3JtYXQuZmluZCgoZikgPT4gZi5sYXllciA9PT0gJyonKTtcclxuICAgIGxldCBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQ7XHJcbiAgICBpZiAoY3VycmVudExheWVySW5mb0Zvcm1hdCkge1xyXG4gICAgICBxdWVyeUZvcm1hdCA9IGN1cnJlbnRMYXllckluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XHJcbiAgICB9IGVsc2UgaWYgKGJhc2VJbmZvRm9ybWF0KSB7XHJcbiAgICAgIHF1ZXJ5Rm9ybWF0ID0gYmFzZUluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDYXRhbG9nSW5mb0Zvcm1hdChcclxuICAgIGNhdGFsb2c6IENhdGFsb2dcclxuICApOiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W10ge1xyXG4gICAgY29uc3QgbGF5ZXJzUXVlcnlGb3JtYXQ6IHsgbGF5ZXI6IHN0cmluZzsgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0IH1bXSA9IFtdO1xyXG4gICAgaWYgKCFjYXRhbG9nLnF1ZXJ5Rm9ybWF0KSB7XHJcbiAgICAgIHJldHVybiBsYXllcnNRdWVyeUZvcm1hdDtcclxuICAgIH1cclxuICAgIE9iamVjdC5rZXlzKGNhdGFsb2cucXVlcnlGb3JtYXQpLmZvckVhY2goKGNvbmZpZ3VyZWRJbmZvRm9ybWF0KSA9PiB7XHJcbiAgICAgIGlmIChjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF0uZm9yRWFjaCgobGF5ZXJOYW1lKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFsYXllcnNRdWVyeUZvcm1hdC5maW5kKChzcGVjaWZpYykgPT4gc3BlY2lmaWMubGF5ZXIgPT09IGxheWVyTmFtZSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdC5wdXNoKHtcclxuICAgICAgICAgICAgICBsYXllcjogbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICAgIHF1ZXJ5Rm9ybWF0OiBjb25maWd1cmVkSW5mb0Zvcm1hdCBhcyBRdWVyeUZvcm1hdFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhbGF5ZXJzUXVlcnlGb3JtYXQuZmluZChcclxuICAgICAgICAgICAgKHNwZWNpZmljKSA9PlxyXG4gICAgICAgICAgICAgIHNwZWNpZmljLmxheWVyID09PSBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQucHVzaCh7XHJcbiAgICAgICAgICAgIGxheWVyOiBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XSxcclxuICAgICAgICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRJbmZvRm9ybWF0IGFzIFF1ZXJ5Rm9ybWF0XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGxheWVyc1F1ZXJ5Rm9ybWF0O1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgQ2F0YWxvZ0ZhY3Rvcnkge1xyXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW5zdGFuY2VDYXRhbG9nKFxyXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcclxuICAgIGNhdGFsb2dTZXJ2aWNlOiBDYXRhbG9nU2VydmljZVxyXG4gICk6IENhdGFsb2cge1xyXG4gICAgbGV0IGNhdGFsb2c6IENhdGFsb2c7XHJcbiAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY29tcG9zaXRlJykpIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBDb21wb3NpdGVDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmJhc2VsYXllcnNdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgQmFzZWxheWVyc0NhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dCYXNlTGF5ZXJJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmFyY2dpc3Jlc3RdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgQXJjR0lTUmVzdENhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dBcmNHSVNSZXN0SXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy50aWxlYXJjZ2lzcmVzdF0pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcclxuICAgICAgICBUeXBlQ2F0YWxvZy50aWxlYXJjZ2lzcmVzdFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmltYWdlYXJjZ2lzcmVzdF0pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcclxuICAgICAgICBUeXBlQ2F0YWxvZy5pbWFnZWFyY2dpc3Jlc3RcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy53bXRzXSkge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IFdNVFNDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nV01UU0xheWVySXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgV01TQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ1dNU0xheWVySXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2F0YWxvZztcclxuICB9XHJcbn1cclxuIl19
|
|
710
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvY2F0YWxvZy9zaGFyZWQvY2F0YWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBRUwsZ0NBQWdDLEVBQ2pDLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFRbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFROUQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLDRCQUE0QixFQUM1QixVQUFVLEVBQ1Ys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RSxDQUNyRCxjQUFjLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQ2pELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XHJcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XHJcbmltcG9ydCB7IE9iamVjdFV0aWxzLCB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIG9mLCB6aXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXIsXHJcbiAgQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyVHlwZXNcclxufSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2NhcGFiaWxpdGllcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMsXHJcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnMsXHJcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnNQYXJhbXMsXHJcbiAgV01UU0RhdGFTb3VyY2VPcHRpb25zXHJcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMnO1xyXG5pbXBvcnQgeyBJbWFnZUxheWVyT3B0aW9ucywgTGF5ZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkJztcclxuaW1wb3J0IHsgZ2V0UmVzb2x1dGlvbkZyb21TY2FsZSB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwLnV0aWxzJztcclxuaW1wb3J0IHsgUXVlcnlGb3JtYXQgfSBmcm9tICcuLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuZW51bXMnO1xyXG5pbXBvcnQgeyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3F1ZXJ5L3NoYXJlZC9xdWVyeS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcclxuaW1wb3J0IHsgQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5hYnN0cmFjdCc7XHJcbmltcG9ydCB7IENhdGFsb2dJdGVtVHlwZSwgVHlwZUNhdGFsb2cgfSBmcm9tICcuL2NhdGFsb2cuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQ2F0YWxvZ0l0ZW0sXHJcbiAgQ2F0YWxvZ0l0ZW1Hcm91cCxcclxuICBDYXRhbG9nSXRlbUxheWVyLFxyXG4gIENhdGFsb2dTZXJ2aWNlT3B0aW9ucyxcclxuICBGb3JjZWRQcm9wZXJ0eVxyXG59IGZyb20gJy4vY2F0YWxvZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFyY0dJU1Jlc3RDYXRhbG9nLFxyXG4gIEJhc2VsYXllcnNDYXRhbG9nLFxyXG4gIENvbXBvc2l0ZUNhdGFsb2csXHJcbiAgVGlsZU9ySW1hZ2VBcmNHSVNSZXN0Q2F0YWxvZyxcclxuICBXTVNDYXRhbG9nLFxyXG4gIFdNVFNDYXRhbG9nXHJcbn0gZnJvbSAnLi9jYXRhbG9ncyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXRhbG9nU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2FwYWJpbGl0aWVzU2VydmljZTogQ2FwYWJpbGl0aWVzU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbG9hZENhdGFsb2dzKCk6IE9ic2VydmFibGU8Q2F0YWxvZ1tdPiB7XHJcbiAgICBjb25zdCBjb250ZXh0Q29uZmlnID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdjb250ZXh0JykgfHwge307XHJcblxyXG4gICAgY29uc3QgY2F0YWxvZ0NvbmZpZzogQ2F0YWxvZ1NlcnZpY2VPcHRpb25zID1cclxuICAgICAgdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdjYXRhbG9nJykgfHwge307XHJcbiAgICBjb25zdCBhcGlVcmwgPSBjYXRhbG9nQ29uZmlnLnVybCB8fCBjb250ZXh0Q29uZmlnLnVybDtcclxuICAgIGNvbnN0IGNhdGFsb2dzRnJvbUNvbmZpZyA9IGNhdGFsb2dDb25maWcuc291cmNlcyB8fCBbXTtcclxuXHJcbiAgICBjb25zdCBvYnNlcnZhYmxlcyQgPSBbXTtcclxuXHJcbiAgICBpZiAoYXBpVXJsKSB7XHJcbiAgICAgIGlmIChjYXRhbG9nQ29uZmlnLmJhc2VsYXllcnMpIHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5jYXRhbG9nLmJhc2VMYXllcnMnKTtcclxuICAgICAgICBjb25zdCBiYXNlTGF5ZXJzQ2F0YWxvZyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWQ6ICdjYXRhbG9nLmJhc2VsYXllcnMnLFxyXG4gICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgdXJsOiBgJHthcGlVcmx9L2Jhc2VsYXllcnNgLFxyXG4gICAgICAgICAgICB0eXBlOiAnYmFzZWxheWVycydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIG9ic2VydmFibGVzJC5wdXNoKG9mKGJhc2VMYXllcnNDYXRhbG9nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENhdGFsb2dzIGZyb20gQVBJXHJcbiAgICAgIGNvbnN0IGNhdGFsb2dzRnJvbUFwaSQgPSB0aGlzLmh0dHBcclxuICAgICAgICAuZ2V0PENhdGFsb2dbXT4oYCR7YXBpVXJsfS9jYXRhbG9nc2ApXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKGNhdGFsb2dzKSA9PlxyXG4gICAgICAgICAgICBjYXRhbG9ncy5tYXAoKGM6IGFueSkgPT4gT2JqZWN0LmFzc2lnbihjLCBjLm9wdGlvbnMpKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKF9yZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IEVNUFRZKVxyXG4gICAgICAgICk7XHJcbiAgICAgIG9ic2VydmFibGVzJC5wdXNoKGNhdGFsb2dzRnJvbUFwaSQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhdGFsb2dzIGZyb20gY29uZmlnXHJcbiAgICBpZiAoY2F0YWxvZ3NGcm9tQ29uZmlnLmxlbmd0aCA+IDApIHtcclxuICAgICAgb2JzZXJ2YWJsZXMkLnB1c2goXHJcbiAgICAgICAgb2YoY2F0YWxvZ3NGcm9tQ29uZmlnKS5waXBlKFxyXG4gICAgICAgICAgbWFwKChjYXRhbG9nczogQ2F0YWxvZ1tdKSA9PlxyXG4gICAgICAgICAgICBjYXRhbG9ncy5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWMuaWQpIHtcclxuICAgICAgICAgICAgICAgIGMuaWQgPSB1dWlkKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBjO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gemlwKC4uLm9ic2VydmFibGVzJCkucGlwZShcclxuICAgICAgbWFwKChjYXRhbG9nczogQ2F0YWxvZ1tdW10pID0+IFtdLmNvbmNhdC5hcHBseShbXSwgY2F0YWxvZ3MpKVxyXG4gICAgKSBhcyBPYnNlcnZhYmxlPENhdGFsb2dbXT47XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0l0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIGxldCBuZXdDYXRhbG9nOiBDYXRhbG9nO1xyXG4gICAgbmV3Q2F0YWxvZyA9IENhdGFsb2dGYWN0b3J5LmNyZWF0ZUluc3RhbmNlQ2F0YWxvZyhjYXRhbG9nLCB0aGlzKTtcclxuICAgIHJldHVybiBuZXdDYXRhbG9nLmNvbGxlY3RDYXRhbG9nSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nQmFzZUxheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1Hcm91cFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQmFzZUxheWVyc09wdGlvbnMoY2F0YWxvZykucGlwZShcclxuICAgICAgbWFwKChsYXllcnNPcHRpb25zOiBMYXllck9wdGlvbnNbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbGF5ZXJzT3B0aW9ucy5tYXAoKGxheWVyT3B0aW9uczogTGF5ZXJPcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKGxheWVyT3B0aW9ucy5zb3VyY2VPcHRpb25zKSxcclxuICAgICAgICAgICAgdGl0bGU6IGxheWVyT3B0aW9ucy50aXRsZSxcclxuICAgICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxyXG4gICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IGxheWVyT3B0aW9uc1xyXG4gICAgICAgICAgfSBhcyBDYXRhbG9nSXRlbUxheWVyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiAnY2F0YWxvZy5ncm91cC5iYXNlbGF5ZXJzJyxcclxuICAgICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxyXG4gICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICAgIHRpdGxlOiBjYXRhbG9nLnRpdGxlLFxyXG4gICAgICAgICAgICBpdGVtc1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDYXRhbG9nQmFzZUxheWVyc09wdGlvbnMoXHJcbiAgICBjYXRhbG9nOiBDYXRhbG9nXHJcbiAgKTogT2JzZXJ2YWJsZTxMYXllck9wdGlvbnNbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TGF5ZXJPcHRpb25zW10+KGNhdGFsb2cudXJsKTtcclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nV01TTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2FwYWJpbGl0aWVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtczogQ2F0YWxvZ0l0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlICYmXHJcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuU2VydmljZS5BYnN0cmFjdCAmJlxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3QubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjYXRhbG9nLmFic3RyYWN0ID0gY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpbmFsTGF5ZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5mbGF0dGVuV21zQ2FwYWJpbGl0aWVzKFxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLkNhcGFiaWxpdHkuTGF5ZXIsXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgZmluYWxMYXllcnMsXHJcbiAgICAgICAgICBjYXRhbG9nLmdyb3VwU2VwYXJhdG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXNDYXBhYmlsaXR5TGF5ZXIgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuQ2FwYWJpbGl0eS5MYXllclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyLkxheWVyID0gZmluYWxMYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKGYpID0+IGYuTGF5ZXIubGVuZ3RoICE9PSAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmluY2x1ZGVSZWN1cnNpdmVJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXNDYXBhYmlsaXR5TGF5ZXIsIGl0ZW1zKTtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKCgpID0+IHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZScsXHJcbiAgICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlVGl0bGUnLFxyXG4gICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgeyB2YWx1ZTogY2F0YWxvZy50aXRsZSB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmxhdHRlbldtc0NhcGFiaWxpdGllcyhwYXJlbnQsIGxldmVsID0gMCwgZmluYWxMYXllcnMsIHNlcGFyYXRvciA9ICcgLyAnKSB7XHJcbiAgICBpZiAoIWZpbmFsTGF5ZXJzLmluY2x1ZGVzKHBhcmVudC5UaXRsZSkpIHtcclxuICAgICAgY29uc3QgbW9kaWZpZWRQYXJlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnQpO1xyXG4gICAgICBtb2RpZmllZFBhcmVudC5MYXllciA9IFtdO1xyXG4gICAgICBmaW5hbExheWVycy5wdXNoKG1vZGlmaWVkUGFyZW50KTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgcGFyZW50LkxheWVyKSB7XHJcbiAgICAgIGNvbnN0IG1vZGlmaWVkTGF5ZXIgPSBPYmplY3QuYXNzaWduKHt9LCBsYXllcik7XHJcbiAgICAgIGlmIChsZXZlbCA+IDApIHtcclxuICAgICAgICBtb2RpZmllZExheWVyLlRpdGxlID0gcGFyZW50LlRpdGxlICsgc2VwYXJhdG9yICsgbGF5ZXIuVGl0bGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxheWVyLkxheWVyKSB7XHJcbiAgICAgICAgdGhpcy5mbGF0dGVuV21zQ2FwYWJpbGl0aWVzKFxyXG4gICAgICAgICAgbW9kaWZpZWRMYXllcixcclxuICAgICAgICAgIGxldmVsICsgMSxcclxuICAgICAgICAgIGZpbmFsTGF5ZXJzLFxyXG4gICAgICAgICAgc2VwYXJhdG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaW5hbExheWVycy5maW5kKChmZikgPT4gZmYuVGl0bGUgPT09IHBhcmVudC5UaXRsZSkuTGF5ZXIucHVzaChsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nV01UU0xheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxyXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB0aGlzLmdldFdNVFNJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXMpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nQXJjR0lTUmVzdEl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZykucGlwZShcclxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFyY0dJU1JFU1RJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXMpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICBjb25zdCBjb21wb3NpdGVDYXRhbG9nID0gKGNhdGFsb2cgYXMgQ29tcG9zaXRlQ2F0YWxvZykuY29tcG9zaXRlO1xyXG5cclxuICAgIGNvbnN0IGNhdGFsb2dzRnJvbUluc3RhbmNlID0gW10gYXMgQ2F0YWxvZ1tdO1xyXG4gICAgY29tcG9zaXRlQ2F0YWxvZy5tYXAoKGNvbXBvbmVudDogQ2F0YWxvZykgPT4ge1xyXG4gICAgICBjb21wb25lbnQuc29ydERpcmVjdGlvbiA9IGNhdGFsb2cuc29ydERpcmVjdGlvbjsgLy8gcHJvcGFnYXRlIHNvcnREaXJlY3Rpb24gd2l0aCBwYXJlbnQgdmFsdWVcclxuICAgICAgY2F0YWxvZ3NGcm9tSW5zdGFuY2UucHVzaChcclxuICAgICAgICBDYXRhbG9nRmFjdG9yeS5jcmVhdGVJbnN0YW5jZUNhdGFsb2coY29tcG9uZW50LCB0aGlzKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZ2V0IENhdGFsb2dJdGVtcyBmb3IgZWFjaCBvcmlnaW5hbCBDYXRhbG9nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGNvbnN0IHJlcXVlc3QxJCA9IFtdO1xyXG4gICAgY2F0YWxvZ3NGcm9tSW5zdGFuY2UubWFwKChjb21wb25lbnQ6IENhdGFsb2cpID0+XHJcbiAgICAgIHJlcXVlc3QxJC5wdXNoKGNvbXBvbmVudC5jb2xsZWN0Q2F0YWxvZ0l0ZW1zKCkpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGludGVncmF0ZSBpbXBvc2VkIGdyb3VwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgcmVxdWVzdDIkID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gZmxhdERlZXBMYXllcihhcnIpIHtcclxuICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoXHJcbiAgICAgICAgKGFjYywgdmFsKSA9PlxyXG4gICAgICAgICAgYWNjLmNvbmNhdChcclxuICAgICAgICAgICAgdmFsLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5Hcm91cCA/IGZsYXREZWVwTGF5ZXIodmFsLml0ZW1zKSA6IHZhbFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgT2JqZWN0LmtleXMoY29tcG9zaXRlQ2F0YWxvZykuZmluZCgoaykgPT4gY29tcG9zaXRlQ2F0YWxvZ1trXS5ncm91cEltcG9zZSlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBwdXNoSW1wb3NlR3JvdXAgPSAoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBjID0gY2F0YWxvZ3NGcm9tSW5zdGFuY2VbaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IG91dEdyb3VwSW1wb3NlID0gT2JqZWN0LmFzc2lnbih7fSwgYy5ncm91cEltcG9zZSk7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuYWRkcmVzcyA9IGMuaWQ7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UudHlwZSA9IENhdGFsb2dJdGVtVHlwZS5Hcm91cDtcclxuICAgICAgICBvdXRHcm91cEltcG9zZS5leHRlcm5hbFByb3ZpZGVyID0gYy5leHRlcm5hbFByb3ZpZGVyO1xyXG4gICAgICAgIGlmIChvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIG91dEdyb3VwSW1wb3NlLnNvcnREaXJlY3Rpb24gPSBjLnNvcnREaXJlY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGZsYXRMYXllciA9IGZsYXREZWVwTGF5ZXIoaXRlbSk7XHJcbiAgICAgICAgZmxhdExheWVyLm1hcChcclxuICAgICAgICAgICh2KSA9PiAodi5hZGRyZXNzID0gYCR7b3V0R3JvdXBJbXBvc2UuYWRkcmVzc30uJHtvdXRHcm91cEltcG9zZS5pZH1gKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuaXRlbXMgPSBmbGF0TGF5ZXI7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRHcm91cEltcG9zZTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlcXVlc3QyJCA9IHJlcXVlc3QxJC5tYXAoKG9icywgaWR4KSA9PlxyXG4gICAgICAgIG9icy5waXBlKFxyXG4gICAgICAgICAgbWFwKChpdGVtcykgPT5cclxuICAgICAgICAgICAgY29tcG9zaXRlQ2F0YWxvZ1tpZHhdLmdyb3VwSW1wb3NlXHJcbiAgICAgICAgICAgICAgPyBwdXNoSW1wb3NlR3JvdXAoaXRlbXMsIGlkeClcclxuICAgICAgICAgICAgICA6IGl0ZW1zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdDIkID0gcmVxdWVzdDEkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbmNhdCBHcm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgY29uc3QgcmVxdWVzdDMkID0gemlwKC4uLnJlcXVlc3QyJCkucGlwZShcclxuICAgICAgbWFwKFxyXG4gICAgICAgIChvdXRwdXQ6IENhdGFsb2dJdGVtW10pID0+IFtdLmNvbmNhdCguLi5vdXRwdXQpIC8vIFtdLmNvbmNhdC5hcHBseShbXSwgcmVzdWx0MVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIC8vIG1lcmdlIEdyb3VwIChmaXJzdCBsZXZlbCBvbmx5KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgY29uc3QgZ3JvdXBCeUdyb3VwSWQgPSAoZGF0YSwga2V5Rm4pID0+XHJcbiAgICAgIGRhdGEucmVkdWNlKChhY2MsIGdyb3VwKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJZCA9IGtleUZuKGdyb3VwKTtcclxuICAgICAgICBjb25zdCBpbmQgPSBhY2MuZmluZCgoeCkgPT4geC5pZCA9PT0gZ3JvdXBJZCk7XHJcblxyXG4gICAgICAgIGlmICghaW5kKSB7XHJcbiAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSBncm91cDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaXggPSBhY2MuaW5kZXhPZihpbmQpO1xyXG4gICAgICAgICAgaWYgKGFjY1tpeF0uYWRkcmVzcy5zcGxpdCgnfCcpLmluZGV4T2YoZ3JvdXAuYWRkcmVzcykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGFjY1tpeF0uYWRkcmVzcyA9IGAke2FjY1tpeF0uYWRkcmVzc318JHtncm91cC5hZGRyZXNzfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhY2NbaXhdLml0ZW1zLnB1c2goLi4uZ3JvdXAuaXRlbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICB9LCBbXSk7XHJcblxyXG4gICAgLy8gbWVyZ2UgTGF5ZXIgZm9yIGVhY2ggTGV2ZWwgKGNhdGFsb2csIGdyb3VwKHJlY3Vyc2l2ZSkpXHJcbiAgICBjb25zdCByZWN1cnNpdmVHcm91cEJ5TGF5ZXJBZGRyZXNzID0gKGl0ZW1zLCBrZXlGbikgPT5cclxuICAgICAgaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0sIGlkeCwgYXJyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJUaXRsZSA9IGtleUZuKGl0ZW0pO1xyXG4gICAgICAgIGNvbnN0IG91dEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyKSB7XHJcbiAgICAgICAgICAvLyBzYW1lIHRpdGxlLCBzYW1lIGFkZHJlc3MgPT4gcmVzdWx0OiBvbmx5IG9uZSBpdGVtIGlzIGtlcHRcclxuXHJcbiAgICAgICAgICAvLyBzYW1lIHRpdGxlLCBhZGRyZXNzIGRpZmZcclxuICAgICAgICAgIGNvbnN0IGluZGljZXNNYXRjaFRpdGxlID0gW107XHJcbiAgICAgICAgICBjb25zdCBpbmRpY2VzTWF0Y2hOZXdNZXRhZGF0YVVybCA9IFtdOyAvLyBtZXRhZGF0YVxyXG4gICAgICAgICAgY29uc3QgZGlmZkFkZHJlc3MgPSBhcnIuZmlsdGVyKCh4LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBiSW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh4LnRpdGxlID09PSBsYXllclRpdGxlICYmIHgudHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGkgIT09IGlkeCAmJiB4LmFkZHJlc3MgIT09IGl0ZW0uYWRkcmVzcykge1xyXG4gICAgICAgICAgICAgICAgYkluZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGluZGljZXNNYXRjaFRpdGxlLnB1c2goaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGJJbmQ7XHJcbiAgICAgICAgICB9KTsgLy8gJCYgaSAhPT0gaWR4XHJcblxyXG4gICAgICAgICAgaWYgKGRpZmZBZGRyZXNzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5Qb3NpdGlvbiA9IGluZGljZXNNYXRjaFRpdGxlLmZpbmRJbmRleCgoeCkgPT4geCA9PT0gaWR4KSArIDE7XHJcbiAgICAgICAgICAgIG91dEl0ZW0udGl0bGUgPSBgJHtpdGVtLnRpdGxlfSAoJHtuUG9zaXRpb259KWA7IC8vIHNvdXJjZTogJHtpdGVtLmFkZHJlc3Muc3BsaXQoJy4nKVswXX1cclxuICAgICAgICAgICAgblBvc2l0aW9uID1cclxuICAgICAgICAgICAgICBpbmRpY2VzTWF0Y2hOZXdNZXRhZGF0YVVybC5maW5kSW5kZXgoKHgpID0+IHggPT09IGlkeCkgKyAxO1xyXG4gICAgICAgICAgICBvdXRJdGVtLm5ld01ldGFkYXRhVXJsID0gYCR7aXRlbS5uZXdNZXRhZGF0YVVybH0gKCR7blBvc2l0aW9ufSlgOyAvLyBzb3VyY2U6ICR7aXRlbS5hZGRyZXNzLnNwbGl0KCcuJylbMF19XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgZXhpc3QgPSBhY2MuZmluZChcclxuICAgICAgICAgICAgKHgpID0+IHgudGl0bGUgPT09IG91dEl0ZW0udGl0bGUgJiYgeC50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuTGF5ZXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IG91dEl0ZW07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5Hcm91cCkge1xyXG4gICAgICAgICAgb3V0SXRlbS5pdGVtcyA9IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoXHJcbiAgICAgICAgICAgIGl0ZW0uaXRlbXMsXHJcbiAgICAgICAgICAgIChsYXllcikgPT4gbGF5ZXIudGl0bGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSBvdXRJdGVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgW10pO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3Q0JCA9IHJlcXVlc3QzJC5waXBlKFxyXG4gICAgICBtYXAoKG91dHB1dCkgPT4gZ3JvdXBCeUdyb3VwSWQob3V0cHV0LCAoZ3JvdXApID0+IGdyb3VwLmlkKSksXHJcbiAgICAgIG1hcCgob3V0cHV0KSA9PiBbXS5jb25jYXQoLi4ub3V0cHV0KSksXHJcbiAgICAgIG1hcCgoZGF0YSkgPT4gcmVjdXJzaXZlR3JvdXBCeUxheWVyQWRkcmVzcyhkYXRhLCAobGF5ZXIpID0+IGxheWVyLnRpdGxlKSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHJlcXVlc3Q0JDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHNUeXBlOiBzdHJpbmcgPSBUeXBlQ2F0YWxvZ1tjYXRhbG9nLnR5cGUgYXMgc3RyaW5nXTtcclxuICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdGllc1NlcnZpY2VcclxuICAgICAgLmdldENhcGFiaWxpdGllcyhzVHlwZSBhcyBhbnksIGNhdGFsb2cudXJsLCBjYXRhbG9nLnZlcnNpb24pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGNhdGFsb2cudGl0bGVcclxuICAgICAgICAgICAgICA/ICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGUnXHJcbiAgICAgICAgICAgICAgOiAnaWdvLmdlby5jYXRhbG9nLnNvbWVVbmF2YWlsYWJsZScsXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGVUaXRsZScsXHJcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY2F0YWxvZy50aXRsZSA/IHsgdmFsdWU6IGNhdGFsb2cudGl0bGUgfSA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlRm9yY2VkUHJvcGVydGllcyhcclxuICAgIGxheWVyTmFtZUZyb21DYXRhbG9nOiBzdHJpbmcsXHJcbiAgICBmb3JjZWRQcm9wZXJ0aWVzOiBGb3JjZWRQcm9wZXJ0eVtdXHJcbiAgKTogRm9yY2VkUHJvcGVydHkge1xyXG4gICAgaWYgKCFmb3JjZWRQcm9wZXJ0aWVzIHx8IGZvcmNlZFByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldHVyblByb3BlcnR5OiBGb3JjZWRQcm9wZXJ0eSA9IHtcclxuICAgICAgbGF5ZXJOYW1lOiBsYXllck5hbWVGcm9tQ2F0YWxvZyxcclxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcclxuICAgICAgbWV0YWRhdGFVcmw6IHVuZGVmaW5lZCxcclxuICAgICAgbWV0YWRhdGFBYnN0cmFjdDogdW5kZWZpbmVkLFxyXG4gICAgICBtZXRhZGF0YUFic3RyYWN0QWxsOiB1bmRlZmluZWQsXHJcbiAgICAgIG1ldGFkYXRhVXJsQWxsOiB1bmRlZmluZWRcclxuICAgIH07XHJcbiAgICAvL3Byb2Nlc3Mgd2lsZGNhcmQgYmVmb3JlXHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhICogd2lsZGNhcmRcclxuICAgIGNvbnN0IGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMgPSBmb3JjZWRQcm9wZXJ0aWVzLmZpbmQoXHJcbiAgICAgIChmKSA9PiBmLmxheWVyTmFtZSA9PT0gJyonXHJcbiAgICApO1xyXG4gICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMpIHtcclxuICAgICAgLy8gbWV0YWRhdGFBYnN0cmFjdEFsbFxyXG4gICAgICBpZiAoZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YUFic3RyYWN0QWxsKSB7XHJcbiAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdEFsbCA9XHJcbiAgICAgICAgICBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhQWJzdHJhY3RBbGw7XHJcbiAgICAgIH1cclxuICAgICAgLy8gbWV0YWRhdGFVcmxBbGxcclxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFVcmxBbGwpIHtcclxuICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YVVybEFsbCA9XHJcbiAgICAgICAgICBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhVXJsQWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JjZWRQcm9wZXJ0aWVzLm1hcCgoZm9yY2VkUHJvcGVydHkpID0+IHtcclxuICAgICAgLy8gaWYgbWF0Y2ggZm91bmRcclxuICAgICAgaWYgKGxheWVyTmFtZUZyb21DYXRhbG9nID09PSBmb3JjZWRQcm9wZXJ0eS5sYXllck5hbWUpIHtcclxuICAgICAgICAvLyB0aXRsZVxyXG4gICAgICAgIGlmIChmb3JjZWRQcm9wZXJ0eS50aXRsZSkge1xyXG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkudGl0bGUgPSBmb3JjZWRQcm9wZXJ0eS50aXRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbWV0YWRhdGFVcmxcclxuICAgICAgICBpZiAoZm9yY2VkUHJvcGVydHkubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhVXJsID0gZm9yY2VkUHJvcGVydHkubWV0YWRhdGFVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ldGFkYXRhQWJzdHJhY3RcclxuICAgICAgICBpZiAoZm9yY2VkUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdCkge1xyXG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdCA9IGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5Qcm9wZXJ0eTtcclxuICB9XHJcblxyXG4gIC8vLyBXTVNcclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihsYXllciwgaWRQYXJlbnQsIGxheWVyc1F1ZXJ5Rm9ybWF0LCBjYXRhbG9nKSB7XHJcbiAgICBjb25zdCBjb25maWd1cmVkUXVlcnlGb3JtYXQgPSB0aGlzLnJldHJpZXZlTGF5ZXJJbmZvRm9ybWF0KFxyXG4gICAgICBsYXllci5OYW1lLFxyXG4gICAgICBsYXllcnNRdWVyeUZvcm1hdFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsZWdlbmRPcHRpb25zID1cclxuICAgICAgY2F0YWxvZy5zaG93TGVnZW5kICYmIGxheWVyLlN0eWxlXHJcbiAgICAgICAgPyB0aGlzLmNhcGFiaWxpdGllc1NlcnZpY2UuZ2V0U3R5bGUobGF5ZXIuU3R5bGUpXHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgY2F0YWxvZy5xdWVyeVBhcmFtcywge1xyXG4gICAgICBMQVlFUlM6IGxheWVyLk5hbWUsXHJcbiAgICAgIFZFUlNJT046IGNhdGFsb2cudmVyc2lvblxyXG4gICAgfSBhcyBXTVNEYXRhU291cmNlT3B0aW9uc1BhcmFtcyk7XHJcblxyXG4gICAgY29uc3QgYmFzZVNvdXJjZU9wdGlvbnMgPSB7XHJcbiAgICAgIHR5cGU6ICd3bXMnLFxyXG4gICAgICB1cmw6IGNhdGFsb2cudXJsLFxyXG4gICAgICBjcm9zc09yaWdpbjogY2F0YWxvZy5zZXRDcm9zc09yaWdpbkFub255bW91cyA/ICdhbm9ueW1vdXMnIDogdW5kZWZpbmVkLFxyXG4gICAgICBxdWVyeUZvcm1hdDogY29uZmlndXJlZFF1ZXJ5Rm9ybWF0LFxyXG4gICAgICBxdWVyeUh0bWxUYXJnZXQ6XHJcbiAgICAgICAgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID09PSBRdWVyeUZvcm1hdC5IVE1MIHx8XHJcbiAgICAgICAgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID09PSBRdWVyeUZvcm1hdC5IVE1MR01MMlxyXG4gICAgICAgICAgPyAnaWZyYW1lJ1xyXG4gICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgIG9wdGlvbnNGcm9tQ2FwYWJpbGl0aWVzOiB0cnVlXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXHJcbiAgICAgIGNhdGFsb2cuc291cmNlT3B0aW9ucyxcclxuICAgICAgeyBwYXJhbXMgfVxyXG4gICAgKSBhcyBXTVNEYXRhU291cmNlT3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICAgIGxheWVyLk5hbWUsXHJcbiAgICAgIGNhdGFsb2cuZm9yY2VkUHJvcGVydGllc1xyXG4gICAgKTtcclxuICAgIGxldCBiYXNlQWJzdHJhY3Q7XHJcbiAgICBsZXQgZXh0ZXJuID0gdHJ1ZTtcclxuICAgIGlmIChsYXllci5BYnN0cmFjdCkge1xyXG4gICAgICBiYXNlQWJzdHJhY3QgPSBsYXllci5BYnN0cmFjdDtcclxuICAgIH0gZWxzZSBpZiAoIWxheWVyLkFic3RyYWN0ICYmIGNhdGFsb2cuYWJzdHJhY3QpIHtcclxuICAgICAgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheWVyT25saW5lUmVzb3VyY2UgPVxyXG4gICAgICBsYXllcj8uRGF0YVVSTCAmJiBsYXllcj8uRGF0YVVSTC5sZW5ndGggPiAwXHJcbiAgICAgICAgPyBsYXllcj8uRGF0YVVSTFswXS5PbmxpbmVSZXNvdXJjZVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGxldCBtZXRhZGF0YVVybCA9XHJcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fFxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgfHxcclxuICAgICAgbGF5ZXJPbmxpbmVSZXNvdXJjZTtcclxuICAgIGxldCBtZXRhZGF0YUFic3RyYWN0ID1cclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwgfHxcclxuICAgICAgYmFzZUFic3RyYWN0O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxyXG4gICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsICYmXHJcbiAgICAgIChwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxyXG4gICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxyXG4gICAgKSB7XHJcbiAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCAmJlxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcclxuICAgICkge1xyXG4gICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllclByZXBhcmUgPSB7XHJcbiAgICAgIGlkOiBnZW5lcmF0ZUlkRnJvbVNvdXJjZU9wdGlvbnMoc291cmNlT3B0aW9ucyksXHJcbiAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcclxuICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZSA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlIDogbGF5ZXIuVGl0bGUsXHJcbiAgICAgIGFkZHJlc3M6IGlkUGFyZW50LFxyXG4gICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIgfHwgZmFsc2UsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBtYXhSZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1heFNjYWxlRGVub21pbmF0b3IpLFxyXG4gICAgICAgIG1pblJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIuTWluU2NhbGVEZW5vbWluYXRvciksXHJcbiAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgIHVybDogbWV0YWRhdGFVcmwsXHJcbiAgICAgICAgICBleHRlcm4sXHJcbiAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcclxuICAgICAgICAgIHR5cGU6IGJhc2VTb3VyY2VPcHRpb25zLnR5cGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxlZ2VuZE9wdGlvbnMsXHJcbiAgICAgICAgdG9vbHRpcDogeyB0eXBlOiBjYXRhbG9nLnRvb2x0aXBUeXBlIH0sXHJcbiAgICAgICAgc291cmNlT3B0aW9uc1xyXG4gICAgICB9XHJcbiAgICB9IGFzIENhdGFsb2dJdGVtO1xyXG5cclxuICAgIHJldHVybiBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQobGF5ZXJQcmVwYXJlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXHJcbiAgICBpdGVtTGlzdEluLFxyXG4gICAgcmVnZXhlcyxcclxuICAgIGlkR3JvdXAsXHJcbiAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgIGNhdGFsb2dcclxuICApIHtcclxuICAgIGNvbnN0IGdyb3VwUHJlcGFyZSA9IHtcclxuICAgICAgaWQ6IGlkR3JvdXAsXHJcbiAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcclxuICAgICAgdGl0bGU6IGl0ZW1MaXN0SW4uVGl0bGUsXHJcbiAgICAgIGFkZHJlc3M6IGNhdGFsb2cuaWQsXHJcbiAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlciB8fCBmYWxzZSxcclxuICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLCAvLyBwcm9wYWdhdGUgc29ydERpcmVjdGlvblxyXG4gICAgICBpdGVtczogaXRlbUxpc3RJbi5MYXllci5yZWR1Y2UoKGl0ZW1zOiBDYXRhbG9nSXRlbVtdLCBsYXllcjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGxheWVyLkxheWVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIC8vIHJlY3Vyc2l2ZSwgY2hlY2sgbmV4dCBsZXZlbFxyXG4gICAgICAgICAgY29uc3QgaWRHcm91cEl0ZW1OZXh0TGV2ZWwgPVxyXG4gICAgICAgICAgICBpZEdyb3VwICsgYC5ncm91cC4ke2xheWVyLk5hbWUgfHwgbGF5ZXIuTGF5ZXJbMF0uTmFtZX1gO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBJdGVtOiBDYXRhbG9nSXRlbUdyb3VwID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1Hcm91cChcclxuICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgIHJlZ2V4ZXMsXHJcbiAgICAgICAgICAgIGlkR3JvdXBJdGVtTmV4dExldmVsLFxyXG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgICAgY2F0YWxvZ1xyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRlc3RMYXllclJlZ2V4ZXMobGF5ZXIuTmFtZSwgcmVnZXhlcykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBsYXllckl0ZW06IENhdGFsb2dJdGVtTGF5ZXI8SW1hZ2VMYXllck9wdGlvbnM+ID1cclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcclxuICAgICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgICBpZEdyb3VwLFxyXG4gICAgICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LFxyXG4gICAgICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGxheWVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgICAgfSwgW10pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGdyb3VwUHJlcGFyZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKFxyXG4gICAgY2F0YWxvZzogQ2F0YWxvZyxcclxuICAgIGl0ZW1MaXN0SW46IGFueSxcclxuICAgIGl0ZW1zUHJlcGFyZTogQ2F0YWxvZ0l0ZW1bXSxcclxuICAgIGxvb3BMZXZlbDogbnVtYmVyID0gMFxyXG4gICkge1xyXG4gICAgLy8gRGlnIGFsbCBsZXZlbHMgdW50aWwgbGFzdCBsZXZlbCAobGF5ZXIgb2JqZWN0IGFyZSBub3QgZGVmaW5lZCBvbiBsYXN0IGxldmVsKVxyXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcclxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxyXG4gICAgKTtcclxuICAgIGlmICghaXRlbUxpc3RJbi5MYXllcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1MaXN0SW4uTGF5ZXIpIHtcclxuICAgICAgaWYgKGl0ZW0uTGF5ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSwgY2hlY2sgbmV4dCBsZXZlbFxyXG4gICAgICAgIHRoaXMuaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKGNhdGFsb2csIGl0ZW0sIGl0ZW1zUHJlcGFyZSwgbG9vcExldmVsICsgMSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGxheWVyc1F1ZXJ5Rm9ybWF0ID0gdGhpcy5maW5kQ2F0YWxvZ0luZm9Gb3JtYXQoY2F0YWxvZyk7XHJcblxyXG4gICAgICAvLyBncm91cCh3aXRoIGxheWVycykgYW5kIGxheWVyKHdpdGhvdXQgZ3JvdXApIGxldmVsIDFcclxuICAgICAgaWYgKGxvb3BMZXZlbCAhPT0gMCkge1xyXG4gICAgICAgIC8vIFRPRE86IFNsaWNlIHRoYXQgaW50byBtdWx0aXBsZSBtZXRob2RzXHJcbiAgICAgICAgLy8gRGVmaW5lIG9iamVjdCBvZiBncm91cCBsYXllclxyXG4gICAgICAgIGNvbnN0IGlkR3JvdXBJdGVtID0gYGNhdGFsb2cuZ3JvdXAuJHtpdGVtTGlzdEluLk5hbWUgfHwgaXRlbS5OYW1lfWA7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJdGVtID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1Hcm91cChcclxuICAgICAgICAgIGl0ZW1MaXN0SW4sXHJcbiAgICAgICAgICByZWdleGVzLFxyXG4gICAgICAgICAgaWRHcm91cEl0ZW0sXHJcbiAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXBJdGVtLml0ZW1zLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgaXRlbXNQcmVwYXJlLnB1c2goZ3JvdXBJdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJyZWFrIHRoZSBncm91cCAoZG9uJ3QgYWRkIGEgZ3JvdXAgb2YgbGF5ZXIgZm9yIGVhY2ggb2YgdGhlaXIgbGF5ZXIhKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxheWVyIHdpdGhvdXQgZ3JvdXBcclxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGl0ZW0uTmFtZSwgcmVnZXhlcykgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBjb25zdCBsYXllckl0ZW0gPSB0aGlzLnByZXBhcmVDYXRhbG9nSXRlbUxheWVyKFxyXG4gICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICBjYXRhbG9nLmlkLFxyXG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgICAgY2F0YWxvZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGl0ZW1zUHJlcGFyZS5wdXNoKGxheWVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gV01UU1xyXG5cclxuICBwcml2YXRlIGdldFdNVFNJdGVtcyhcclxuICAgIGNhdGFsb2csXHJcbiAgICBjYXBhYmlsaXRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH1cclxuICApOiBDYXRhbG9nSXRlbUxheWVyW10ge1xyXG4gICAgaWYgKCFjYXBhYmlsaXRpZXMpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGF5ZXJzID0gY2FwYWJpbGl0aWVzLkNvbnRlbnRzLkxheWVyO1xyXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcclxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlSWRlbnRpZmljYXRpb24gJiZcclxuICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2VJZGVudGlmaWNhdGlvbi5BYnN0cmFjdCAmJlxyXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0Lmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIGNhdGFsb2cuYWJzdHJhY3QgPSBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllcnNcclxuICAgICAgLm1hcCgobGF5ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0ZvcmNlID0gdGhpcy5jb21wdXRlRm9yY2VkUHJvcGVydGllcyhcclxuICAgICAgICAgIGxheWVyLlRpdGxlLFxyXG4gICAgICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgZXh0ZXJuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgbGV0IG1ldGFkYXRhVXJsID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fCBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGw7XHJcbiAgICAgICAgbGV0IG1ldGFkYXRhQWJzdHJhY3QgPVxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgICAgICBjYXRhbG9nLmFic3RyYWN0O1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsICYmXHJcbiAgICAgICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsICYmXHJcbiAgICAgICAgICAocHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgJiZcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLklkZW50aWZpZXIsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgY2F0YWxvZy5xdWVyeVBhcmFtcywge1xyXG4gICAgICAgICAgdmVyc2lvbjogJzEuMC4wJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3dtdHMnLFxyXG4gICAgICAgICAgdXJsOiBjYXRhbG9nLnVybCxcclxuICAgICAgICAgIGNyb3NzT3JpZ2luOiBjYXRhbG9nLnNldENyb3NzT3JpZ2luQW5vbnltb3VzXHJcbiAgICAgICAgICAgID8gJ2Fub255bW91cydcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBsYXllcjogbGF5ZXIuSWRlbnRpZmllcixcclxuICAgICAgICAgIG1hdHJpeFNldDogY2F0YWxvZy5tYXRyaXhTZXQsXHJcbiAgICAgICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZSxcclxuICAgICAgICAgIHJlcXVlc3RFbmNvZGluZzogY2F0YWxvZy5yZXF1ZXN0RW5jb2RpbmcgfHwgJ0tWUCcsXHJcbiAgICAgICAgICBzdHlsZTogJ2RlZmF1bHQnXHJcbiAgICAgICAgfSBhcyBXTVRTRGF0YVNvdXJjZU9wdGlvbnM7XHJcbiAgICAgICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICB7fSxcclxuICAgICAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxyXG4gICAgICAgICAgY2F0YWxvZy5zb3VyY2VPcHRpb25zLFxyXG4gICAgICAgICAgeyBwYXJhbXMgfVxyXG4gICAgICAgICkgYXMgV01UU0RhdGFTb3VyY2VPcHRpb25zO1xyXG5cclxuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKHtcclxuICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkRnJvbVNvdXJjZU9wdGlvbnMoc291cmNlT3B0aW9ucyksXHJcbiAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXHJcbiAgICAgICAgICB0aXRsZTogcHJvcGVydGllc1RvRm9yY2U/LnRpdGxlXHJcbiAgICAgICAgICAgID8gcHJvcGVydGllc1RvRm9yY2UudGl0bGVcclxuICAgICAgICAgICAgOiBsYXllci5UaXRsZSxcclxuICAgICAgICAgIGFkZHJlc3M6IGNhdGFsb2cuaWQsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgICAgICAgdXJsOiBtZXRhZGF0YVVybCxcclxuICAgICAgICAgICAgICBleHRlcm4sXHJcbiAgICAgICAgICAgICAgYWJzdHJhY3Q6IG1ldGFkYXRhQWJzdHJhY3QsXHJcbiAgICAgICAgICAgICAgdHlwZTogYmFzZVNvdXJjZU9wdGlvbnMudHlwZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBhcyBDYXRhbG9nSXRlbSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW06IENhdGFsb2dJdGVtTGF5ZXIgfCB1bmRlZmluZWQpID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFyY0dJU1JFU1RJdGVtcyhcclxuICAgIGNhdGFsb2c6IENhdGFsb2csXHJcbiAgICBjYXBhYmlsaXRpZXNcclxuICApOiBDYXRhbG9nSXRlbUxheWVyW10ge1xyXG4gICAgaWYgKCFjYXBhYmlsaXRpZXMgfHwgIWNhcGFiaWxpdGllcy5sYXllcnMpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcclxuICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnNvbWVVbmF2YWlsYWJsZScsXHJcbiAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZVRpdGxlJ1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBncm91cHM6IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllcltdID0gIWNhcGFiaWxpdGllcy5sYXllcnNcclxuICAgICAgPyBbXVxyXG4gICAgICA6IGNhcGFiaWxpdGllcy5sYXllcnMuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuc3ViTGF5ZXJJZHMpO1xyXG4gICAgY29uc3QgbGF5ZXJzOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJbXSA9ICFjYXBhYmlsaXRpZXMubGF5ZXJzXHJcbiAgICAgID8gW11cclxuICAgICAgOiBjYXBhYmlsaXRpZXMubGF5ZXJzLmZpbHRlcihcclxuICAgICAgICAgIChsYXllcikgPT5cclxuICAgICAgICAgICAgIWxheWVyLnR5cGUgfHxcclxuICAgICAgICAgICAgbGF5ZXIudHlwZSA9PT0gQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyVHlwZXMuRmVhdHVyZUxheWVyIHx8XHJcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzLlJhc3RlckxheWVyXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxyXG4gICAgICAocGF0dGVybjogc3RyaW5nKSA9PiBuZXcgUmVnRXhwKHBhdHRlcm4pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBhYnN0cmFjdDtcclxuICAgIGlmIChcclxuICAgICAgY2FwYWJpbGl0aWVzLnNlcnZpY2VEZXNjcmlwdGlvbiAmJlxyXG4gICAgICBjYXBhYmlsaXRpZXMuc2VydmljZURlc2NyaXB0aW9uLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHJlZ2V4ID0gLyg8KFtePl0rKT4pL2dpO1xyXG4gICAgICBhYnN0cmFjdCA9IGNhcGFiaWxpdGllcy5zZXJ2aWNlRGVzY3JpcHRpb24ucmVwbGFjZShyZWdleCwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGl0ZW1zOiBDYXRhbG9nSXRlbUxheWVyW10gPSBsYXllcnNcclxuICAgICAgLm1hcCgobGF5ZXI6IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0ZvcmNlID0gdGhpcy5jb21wdXRlRm9yY2VkUHJvcGVydGllcyhcclxuICAgICAgICAgIGxheWVyLm5hbWUsXHJcbiAgICAgICAgICBjYXRhbG9nLmZvcmNlZFByb3BlcnRpZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBiYXNlQWJzdHJhY3QgPSBjYXRhbG9nLmFic3RyYWN0O1xyXG4gICAgICAgIGxldCBleHRlcm4gPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgbWV0YWRhdGFVcmwgPVxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsIHx8IHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbDtcclxuICAgICAgICBsZXQgbWV0YWRhdGFBYnN0cmFjdCA9XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwgfHxcclxuICAgICAgICAgIGJhc2VBYnN0cmFjdDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxyXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxyXG4gICAgICAgICAgKHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0ICYmXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhsYXllci5pZC50b1N0cmluZygpLCByZWdleGVzKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zOiBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMgJlxyXG4gICAgICAgICAgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICB0eXBlOiBUeXBlQ2F0YWxvZ1tjYXRhbG9nLnR5cGVdIGFzIGFueSxcclxuICAgICAgICAgIHVybDogY2F0YWxvZy51cmwsXHJcbiAgICAgICAgICBsYXllcjogbGF5ZXIuaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgIHF1ZXJ5YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdC5FU1JJSlNPTixcclxuICAgICAgICAgIG9wdGlvbnNGcm9tQ2FwYWJpbGl0aWVzOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzb3VyY2VPcHRpb25zOiBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICBiYXNlU291cmNlT3B0aW9ucyxcclxuICAgICAgICAgIGNhdGFsb2cuc291cmNlT3B0aW9uc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZCh7XHJcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxyXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxyXG4gICAgICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZVxyXG4gICAgICAgICAgICA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlXHJcbiAgICAgICAgICAgIDogbGF5ZXIubmFtZSxcclxuICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlcixcclxuICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgc291cmNlT3B0aW9ucyxcclxuICAgICAgICAgICAgbWluUmVzb2x1dGlvbjogZ2V0UmVzb2x1dGlvbkZyb21TY2FsZShsYXllci5tYXhTY2FsZSksXHJcbiAgICAgICAgICAgIG1heFJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIubWluU2NhbGUpLFxyXG4gICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgIHVybDogbWV0YWRhdGFVcmwsXHJcbiAgICAgICAgICAgICAgZXh0ZXJuLFxyXG4gICAgICAgICAgICAgIGFic3RyYWN0OiBtZXRhZGF0YUFic3RyYWN0LFxyXG4gICAgICAgICAgICAgIHR5cGU6IGNhdGFsb2cudHlwZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBhcyBDYXRhbG9nSXRlbSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW06IENhdGFsb2dJdGVtTGF5ZXIgfCB1bmRlZmluZWQpID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XHJcbiAgICBjb25zdCBncm91cEhhbmRsZWRMYXllcnNJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBncm91cGVkSXRlbXM6IENhdGFsb2dJdGVtTGF5ZXJbXSA9IGdyb3Vwc1xyXG4gICAgICAubWFwKChncm91cCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBvcHRpb25zOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBhZGRyZXNzOiBgY2F0YWxvZy5ncm91cC4ke2dyb3VwLm5hbWV9YCxcclxuICAgICAgICAgIGlkOiBgY2F0YWxvZy5ncm91cC4ke2dyb3VwLm5hbWV9YCxcclxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcclxuICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlcixcclxuICAgICAgICAgIHNvcnREaXJlY3Rpb246IGNhdGFsb2cuc29ydERpcmVjdGlvbixcclxuICAgICAgICAgIHRpdGxlOiBncm91cC5uYW1lLFxyXG4gICAgICAgICAgaXRlbXM6IGl0ZW1zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBzdWJMYXllcklkc1N0ciA9IGdyb3VwLnN1YkxheWVySWRzLm1hcCgocikgPT4gci50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICByZXR1cm4gc3ViTGF5ZXJJZHNTdHIuaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAoaS5vcHRpb25zLnNvdXJjZU9wdGlvbnMgYXMgQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zKS5sYXllclxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5tYXAoKGkpID0+IHtcclxuICAgICAgICAgICAgICBncm91cEhhbmRsZWRMYXllcnNJZHMucHVzaChpLmlkKTtcclxuICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaSwge1xyXG4gICAgICAgICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWBcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9O1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChnKSA9PiBnLml0ZW1zLmxlbmd0aCk7XHJcblxyXG4gICAgaWYgKGdyb3Vwcykge1xyXG4gICAgICBjb25zdCBUaXRsZU9ySWQgPSBjYXRhbG9nLnRpdGxlIHx8IGNhdGFsb2cuaWQ7XHJcbiAgICAgIGNvbnN0IG5vbkhhbmRsZWRMYXllcnMgPSBpdGVtc1xyXG4gICAgICAgIC5maWx0ZXIoKGkpID0+ICFncm91cEhhbmRsZWRMYXllcnNJZHMuaW5jbHVkZXMoaS5pZCkpXHJcbiAgICAgICAgLm1hcCgoaSkgPT5cclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGksIHtcclxuICAgICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtUaXRsZU9ySWR9YFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICBpZiAobm9uSGFuZGxlZExheWVycy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBub25IYW5kbGVkR3JvdXAgPSB7XHJcbiAgICAgICAgICBvcHRpb25zOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBhZGRyZXNzOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gLFxyXG4gICAgICAgICAgaWQ6IGBjYXRhbG9nLmdyb3VwLiR7VGl0bGVPcklkfWAsXHJcbiAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBjYXRhbG9nLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB0aXRsZTogVGl0bGVPcklkLFxyXG4gICAgICAgICAgaXRlbXM6IG5vbkhhbmRsZWRMYXllcnNcclxuICAgICAgICB9O1xyXG4gICAgICAgIGdyb3VwZWRJdGVtcy5wdXNoKG5vbkhhbmRsZWRHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXBzID8gZ3JvdXBlZEl0ZW1zIDogaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRlc3RMYXllclJlZ2V4ZXMobGF5ZXJOYW1lOiBzdHJpbmcsIHJlZ2V4ZXM6IFJlZ0V4cFtdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAocmVnZXhlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVnZXhlcy5maW5kKChyZWdleDogUmVnRXhwKSA9PiByZWdleC50ZXN0KGxheWVyTmFtZSkpICE9PSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJldHJpZXZlTGF5ZXJJbmZvRm9ybWF0KFxyXG4gICAgbGF5ZXJOYW1lRnJvbUNhdGFsb2c6IHN0cmluZyxcclxuICAgIGxheWVyc1F1ZXJ5Rm9ybWF0OiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W11cclxuICApOiBRdWVyeUZvcm1hdCB7XHJcbiAgICBjb25zdCBjdXJyZW50TGF5ZXJJbmZvRm9ybWF0ID0gbGF5ZXJzUXVlcnlGb3JtYXQuZmluZChcclxuICAgICAgKGYpID0+IGYubGF5ZXIgPT09IGxheWVyTmFtZUZyb21DYXRhbG9nXHJcbiAgICApO1xyXG4gICAgY29uc3QgYmFzZUluZm9Gb3JtYXQgPSBsYXllcnNRdWVyeUZvcm1hdC5maW5kKChmKSA9PiBmLmxheWVyID09PSAnKicpO1xyXG4gICAgbGV0IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdDtcclxuICAgIGlmIChjdXJyZW50TGF5ZXJJbmZvRm9ybWF0KSB7XHJcbiAgICAgIHF1ZXJ5Rm9ybWF0ID0gY3VycmVudExheWVySW5mb0Zvcm1hdC5xdWVyeUZvcm1hdDtcclxuICAgIH0gZWxzZSBpZiAoYmFzZUluZm9Gb3JtYXQpIHtcclxuICAgICAgcXVlcnlGb3JtYXQgPSBiYXNlSW5mb0Zvcm1hdC5xdWVyeUZvcm1hdDtcclxuICAgIH1cclxuICAgIHJldHVybiBxdWVyeUZvcm1hdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZENhdGFsb2dJbmZvRm9ybWF0KFxyXG4gICAgY2F0YWxvZzogQ2F0YWxvZ1xyXG4gICk6IHsgbGF5ZXI6IHN0cmluZzsgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0IH1bXSB7XHJcbiAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdDogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdID0gW107XHJcbiAgICBpZiAoIWNhdGFsb2cucXVlcnlGb3JtYXQpIHtcclxuICAgICAgcmV0dXJuIGxheWVyc1F1ZXJ5Rm9ybWF0O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmtleXMoY2F0YWxvZy5xdWVyeUZvcm1hdCkuZm9yRWFjaCgoY29uZmlndXJlZEluZm9Gb3JtYXQpID0+IHtcclxuICAgICAgaWYgKGNhdGFsb2cucXVlcnlGb3JtYXRbY29uZmlndXJlZEluZm9Gb3JtYXRdIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XS5mb3JFYWNoKChsYXllck5hbWUpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIWxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoKHNwZWNpZmljKSA9PiBzcGVjaWZpYy5sYXllciA9PT0gbGF5ZXJOYW1lKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LnB1c2goe1xyXG4gICAgICAgICAgICAgIGxheWVyOiBsYXllck5hbWUsXHJcbiAgICAgICAgICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRJbmZvRm9ybWF0IGFzIFF1ZXJ5Rm9ybWF0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFsYXllcnNRdWVyeUZvcm1hdC5maW5kKFxyXG4gICAgICAgICAgICAoc3BlY2lmaWMpID0+XHJcbiAgICAgICAgICAgICAgc3BlY2lmaWMubGF5ZXIgPT09IGNhdGFsb2cucXVlcnlGb3JtYXRbY29uZmlndXJlZEluZm9Gb3JtYXRdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdC5wdXNoKHtcclxuICAgICAgICAgICAgbGF5ZXI6IGNhdGFsb2cucXVlcnlGb3JtYXRbY29uZmlndXJlZEluZm9Gb3JtYXRdLFxyXG4gICAgICAgICAgICBxdWVyeUZvcm1hdDogY29uZmlndXJlZEluZm9Gb3JtYXQgYXMgUXVlcnlGb3JtYXRcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbGF5ZXJzUXVlcnlGb3JtYXQ7XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBDYXRhbG9nRmFjdG9yeSB7XHJcbiAgcHVibGljIHN0YXRpYyBjcmVhdGVJbnN0YW5jZUNhdGFsb2coXHJcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxyXG4gICAgY2F0YWxvZ1NlcnZpY2U6IENhdGFsb2dTZXJ2aWNlXHJcbiAgKTogQ2F0YWxvZyB7XHJcbiAgICBsZXQgY2F0YWxvZzogQ2F0YWxvZztcclxuICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KCdjb21wb3NpdGUnKSkge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IENvbXBvc2l0ZUNhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dDb21wb3NpdGVMYXllckl0ZW1zKGNhdGFsb2cpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuYmFzZWxheWVyc10pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBCYXNlbGF5ZXJzQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0Jhc2VMYXllckl0ZW1zKGNhdGFsb2cpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuYXJjZ2lzcmVzdF0pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBBcmNHSVNSZXN0Q2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLnRpbGVhcmNnaXNyZXN0XSkge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IFRpbGVPckltYWdlQXJjR0lTUmVzdENhdGFsb2coXHJcbiAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQXJjR0lTUmVzdEl0ZW1zKGNhdGFsb2cpLFxyXG4gICAgICAgIFR5cGVDYXRhbG9nLnRpbGVhcmNnaXNyZXN0XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuaW1hZ2VhcmNnaXNyZXN0XSkge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IFRpbGVPckltYWdlQXJjR0lTUmVzdENhdGFsb2coXHJcbiAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQXJjR0lTUmVzdEl0ZW1zKGNhdGFsb2cpLFxyXG4gICAgICAgIFR5cGVDYXRhbG9nLmltYWdlYXJjZ2lzcmVzdFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLndtdHNdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgV01UU0NhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dXTVRTTGF5ZXJJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBXTVNDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nV01TTGF5ZXJJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXRhbG9nO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -2,4 +2,4 @@ export * from './catalog.service';
|
|
|
2
2
|
export * from './catalog.interface';
|
|
3
3
|
export * from './catalog.enum';
|
|
4
4
|
export * from './catalog.abstract';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9jYXRhbG9nL3NoYXJlZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jYXRhbG9nLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NhdGFsb2cuaW50ZXJmYWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9jYXRhbG9nLmVudW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL2NhdGFsb2cuYWJzdHJhY3QnO1xyXG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './shared';
|
|
2
2
|
export * from './utils';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kYXRhc291cmNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zaGFyZWQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcclxuIl19
|