@carto/kepler.gl 0.0.16 → 0.0.19
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/actions.js +1 -1
- package/cloud-providers.js +1 -1
- package/components.js +1 -1
- package/constants.js +1 -1
- package/dist/actions/action-wrapper.js +2 -2
- package/dist/actions/actions.js +2 -2
- package/dist/actions/identity-actions.js +2 -2
- package/dist/actions/index.js +1 -1
- package/dist/actions/map-state-actions.js +2 -2
- package/dist/actions/map-style-actions.js +2 -2
- package/dist/actions/provider-actions.js +2 -2
- package/dist/actions/ui-state-actions.js +2 -2
- package/dist/actions/vis-state-actions.js +2 -2
- package/dist/cloud-providers/index.js +1 -1
- package/dist/cloud-providers/provider.js +2 -2
- package/dist/components/bottom-widget.js +1 -1
- package/dist/components/common/action-panel.js +1 -1
- package/dist/components/common/animation-control/animation-control.js +1 -1
- package/dist/components/common/animation-control/animation-controller.js +1 -1
- package/dist/components/common/animation-control/animation-speed-slider.js +1 -1
- package/dist/components/common/animation-control/floating-time-display.js +1 -1
- package/dist/components/common/animation-control/playback-controls.js +1 -1
- package/dist/components/common/animation-control/speed-control.js +1 -1
- package/dist/components/common/checkbox.js +2 -2
- package/dist/components/common/color-legend.js +1 -1
- package/dist/components/common/data-table/button.js +1 -1
- package/dist/components/common/data-table/canvas.js +1 -1
- package/dist/components/common/data-table/cell-size.js +1 -1
- package/dist/components/common/data-table/grid.js +1 -1
- package/dist/components/common/data-table/index.js +1 -1
- package/dist/components/common/data-table/option-dropdown.js +1 -1
- package/dist/components/common/dataset-label.js +1 -1
- package/dist/components/common/error-boundary.js +1 -1
- package/dist/components/common/field-selector.js +1 -1
- package/dist/components/common/field-token.js +1 -1
- package/dist/components/common/file-uploader/file-drop.js +1 -1
- package/dist/components/common/file-uploader/file-upload-progress.js +1 -1
- package/dist/components/common/file-uploader/file-upload.js +1 -1
- package/dist/components/common/file-uploader/upload-button.js +1 -1
- package/dist/components/common/histogram-plot.js +1 -1
- package/dist/components/common/icons/add.js +1 -1
- package/dist/components/common/icons/anchor_window.js +2 -2
- package/dist/components/common/icons/arrow-down-alt.js +1 -1
- package/dist/components/common/icons/arrow-down-solid .js +1 -1
- package/dist/components/common/icons/arrow-down.js +1 -1
- package/dist/components/common/icons/arrow-left.js +1 -1
- package/dist/components/common/icons/arrow-right.js +1 -1
- package/dist/components/common/icons/arrow-up-alt.js +1 -1
- package/dist/components/common/icons/arrow-up-solid.js +1 -1
- package/dist/components/common/icons/arrow-up.js +1 -1
- package/dist/components/common/icons/base.js +1 -1
- package/dist/components/common/icons/bug.js +1 -1
- package/dist/components/common/icons/cancel.js +1 -1
- package/dist/components/common/icons/checkmark.js +1 -1
- package/dist/components/common/icons/clipboard.js +1 -1
- package/dist/components/common/icons/clock.js +1 -1
- package/dist/components/common/icons/close.js +1 -1
- package/dist/components/common/icons/code-alt.js +1 -1
- package/dist/components/common/icons/copy.js +1 -1
- package/dist/components/common/icons/crosshairs.js +1 -1
- package/dist/components/common/icons/cube-3d.js +1 -1
- package/dist/components/common/icons/cursor-click.js +1 -1
- package/dist/components/common/icons/data-table.js +1 -1
- package/dist/components/common/icons/db.js +1 -1
- package/dist/components/common/icons/delete.js +1 -1
- package/dist/components/common/icons/docs.js +1 -1
- package/dist/components/common/icons/drag-n-drop.js +1 -1
- package/dist/components/common/icons/draw-polygon.js +1 -1
- package/dist/components/common/icons/email.js +1 -1
- package/dist/components/common/icons/expand.js +1 -1
- package/dist/components/common/icons/eye-seen.js +1 -1
- package/dist/components/common/icons/eye-unseen.js +1 -1
- package/dist/components/common/icons/file-type.js +1 -1
- package/dist/components/common/icons/file.js +1 -1
- package/dist/components/common/icons/files.js +1 -1
- package/dist/components/common/icons/filter-funnel.js +1 -1
- package/dist/components/common/icons/free-window.js +2 -2
- package/dist/components/common/icons/gear.js +1 -1
- package/dist/components/common/icons/hash.js +1 -1
- package/dist/components/common/icons/histogram.js +1 -1
- package/dist/components/common/icons/index.js +1 -1
- package/dist/components/common/icons/info.js +1 -1
- package/dist/components/common/icons/layers.js +1 -1
- package/dist/components/common/icons/left-arrow.js +1 -1
- package/dist/components/common/icons/legend.js +1 -1
- package/dist/components/common/icons/line-chart.js +1 -1
- package/dist/components/common/icons/login.js +1 -1
- package/dist/components/common/icons/logout.js +1 -1
- package/dist/components/common/icons/map-icon.js +1 -1
- package/dist/components/common/icons/map.js +1 -1
- package/dist/components/common/icons/messages.js +1 -1
- package/dist/components/common/icons/minus.js +1 -1
- package/dist/components/common/icons/pause.js +1 -1
- package/dist/components/common/icons/picture.js +1 -1
- package/dist/components/common/icons/pin.js +1 -1
- package/dist/components/common/icons/play.js +1 -1
- package/dist/components/common/icons/polygon.js +1 -1
- package/dist/components/common/icons/rectangle.js +1 -1
- package/dist/components/common/icons/reduce.js +1 -1
- package/dist/components/common/icons/reset.js +1 -1
- package/dist/components/common/icons/rocket.js +1 -1
- package/dist/components/common/icons/save.js +1 -1
- package/dist/components/common/icons/save2.js +1 -1
- package/dist/components/common/icons/search.js +1 -1
- package/dist/components/common/icons/settings.js +1 -1
- package/dist/components/common/icons/share.js +1 -1
- package/dist/components/common/icons/split.js +1 -1
- package/dist/components/common/icons/square-select.js +1 -1
- package/dist/components/common/icons/swap-horizontal.js +1 -1
- package/dist/components/common/icons/table.js +1 -1
- package/dist/components/common/icons/trash.js +1 -1
- package/dist/components/common/icons/upload.js +1 -1
- package/dist/components/common/icons/vert-dots.js +1 -1
- package/dist/components/common/icons/vert-three-dots.js +1 -1
- package/dist/components/common/icons/warning.js +1 -1
- package/dist/components/common/image-preview.js +1 -1
- package/dist/components/common/info-helper.js +4 -3
- package/dist/components/common/item-selector/accessor.js +2 -2
- package/dist/components/common/item-selector/chickleted-input.js +1 -1
- package/dist/components/common/item-selector/dropdown-list.js +1 -1
- package/dist/components/common/item-selector/item-selector.js +1 -1
- package/dist/components/common/item-selector/typeahead.js +1 -1
- package/dist/components/common/line-chart.js +1 -1
- package/dist/components/common/loading-spinner.js +1 -1
- package/dist/components/common/logo.js +1 -1
- package/dist/components/common/map-layer-selector.js +1 -1
- package/dist/components/common/modal.js +1 -1
- package/dist/components/common/portaled.js +1 -1
- package/dist/components/common/progress-bar.js +1 -1
- package/dist/components/common/range-brush.js +1 -1
- package/dist/components/common/range-plot.js +1 -1
- package/dist/components/common/range-slider.js +1 -1
- package/dist/components/common/slider/mouse-event.js +2 -2
- package/dist/components/common/slider/slider-bar-handle.js +1 -1
- package/dist/components/common/slider/slider-handle.js +1 -1
- package/dist/components/common/slider/slider.js +1 -1
- package/dist/components/common/styled-components.js +1 -1
- package/dist/components/common/switch.js +1 -1
- package/dist/components/common/time-range-slider-time-title.js +1 -1
- package/dist/components/common/time-range-slider.js +1 -1
- package/dist/components/common/time-slider-marker.js +1 -1
- package/dist/components/common/toolbar-item.js +1 -1
- package/dist/components/common/toolbar.js +1 -1
- package/dist/components/common/vertical-toolbar.js +1 -1
- package/dist/components/container.js +1 -1
- package/dist/components/context.js +2 -2
- package/dist/components/editor/constants.js +2 -2
- package/dist/components/editor/editor.js +1 -1
- package/dist/components/editor/feature-action-panel.js +1 -1
- package/dist/components/editor/feature-styles.js +1 -1
- package/dist/components/editor/handle-style.js +1 -1
- package/dist/components/filters/components.js +1 -1
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +2 -2
- package/dist/components/filters/filter-panels/multi-select-filter-panel.js +2 -2
- package/dist/components/filters/filter-panels/new-filter-panel.js +2 -2
- package/dist/components/filters/filter-panels/polygon-filter-panel.js +2 -2
- package/dist/components/filters/filter-panels/range-filter-panel.js +2 -2
- package/dist/components/filters/filter-panels/single-select-filter-panel.js +2 -2
- package/dist/components/filters/filter-panels/time-range-filter-panel.js +2 -2
- package/dist/components/filters/index.js +1 -1
- package/dist/components/filters/multi-select-filter.js +2 -2
- package/dist/components/filters/polygon-filter.js +2 -2
- package/dist/components/filters/range-filter.js +2 -2
- package/dist/components/filters/single-select-filter.js +2 -2
- package/dist/components/filters/time-range-filter.js +2 -2
- package/dist/components/filters/time-widget.js +1 -1
- package/dist/components/geocoder/geocoder.js +1 -1
- package/dist/components/geocoder-panel.js +1 -1
- package/dist/components/index.js +2 -2
- package/dist/components/injector.js +1 -1
- package/dist/components/kepler-gl.js +9 -5
- package/dist/components/map/coordinate-info.js +2 -2
- package/dist/components/map/layer-hover-info.js +1 -1
- package/dist/components/map/layer-selector-panel.js +2 -2
- package/dist/components/map/locale-panel.js +2 -2
- package/dist/components/map/map-control-panel.js +1 -1
- package/dist/components/map/map-control-toolbar.js +1 -1
- package/dist/components/map/map-control-tooltip.js +2 -2
- package/dist/components/map/map-control.js +1 -1
- package/dist/components/map/map-draw-panel.js +2 -2
- package/dist/components/map/map-legend-panel.js +2 -2
- package/dist/components/map/map-legend.js +1 -1
- package/dist/components/map/map-popover.js +1 -1
- package/dist/components/map/split-map-button.js +2 -2
- package/dist/components/map/toggle-3d-button.js +2 -2
- package/dist/components/map-container.js +27 -4
- package/dist/components/maps-layout.js +1 -1
- package/dist/components/modal-container.js +1 -1
- package/dist/components/modals/add-map-style-modal.js +1 -1
- package/dist/components/modals/cloud-tile.js +1 -1
- package/dist/components/modals/data-table-modal.js +1 -1
- package/dist/components/modals/delete-data-modal.js +1 -1
- package/dist/components/modals/error-display.js +2 -2
- package/dist/components/modals/export-data-modal.js +1 -1
- package/dist/components/modals/export-image-modal.js +1 -1
- package/dist/components/modals/export-map-modal/components.js +1 -1
- package/dist/components/modals/export-map-modal/export-html-map.js +1 -1
- package/dist/components/modals/export-map-modal/export-json-map.js +1 -1
- package/dist/components/modals/export-map-modal/export-map-modal.js +2 -2
- package/dist/components/modals/image-modal-container.js +2 -2
- package/dist/components/modals/load-data-modal.js +1 -1
- package/dist/components/modals/load-storage-map.js +1 -1
- package/dist/components/modals/loading-dialog.js +1 -1
- package/dist/components/modals/modal-dialog.js +2 -2
- package/dist/components/modals/modal-tabs.js +1 -1
- package/dist/components/modals/overwrite-map-modal.js +1 -1
- package/dist/components/modals/provider-modal-container.js +1 -1
- package/dist/components/modals/save-map-modal.js +1 -1
- package/dist/components/modals/share-map-modal.js +1 -1
- package/dist/components/modals/status-panel.js +1 -1
- package/dist/components/modals/storage-map-viewer.js +1 -1
- package/dist/components/notification-panel/notification-item.js +1 -1
- package/dist/components/notification-panel.js +1 -1
- package/dist/components/plot-container.js +5 -3
- package/dist/components/side-panel/cloud-storage-dropdown.js +2 -2
- package/dist/components/side-panel/common/dataset-info.js +1 -1
- package/dist/components/side-panel/common/dataset-tag.js +1 -1
- package/dist/components/side-panel/common/dataset-title.js +1 -1
- package/dist/components/side-panel/common/source-data-catalog.js +1 -1
- package/dist/components/side-panel/common/source-data-selector.js +1 -1
- package/dist/components/side-panel/custom-panel.js +2 -2
- package/dist/components/side-panel/filter-manager.js +2 -2
- package/dist/components/side-panel/filter-panel/filter-panel-header.js +1 -1
- package/dist/components/side-panel/filter-panel/filter-panel.js +1 -1
- package/dist/components/side-panel/interaction-manager.js +2 -2
- package/dist/components/side-panel/interaction-panel/brush-config.js +1 -1
- package/dist/components/side-panel/interaction-panel/interaction-panel.js +1 -1
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +1 -1
- package/dist/components/side-panel/interaction-panel/tooltip-config.js +1 -1
- package/dist/components/side-panel/layer-manager.js +1 -1
- package/dist/components/side-panel/layer-panel/color-palette.js +1 -1
- package/dist/components/side-panel/layer-panel/color-range-selector.js +1 -1
- package/dist/components/side-panel/layer-panel/color-selector.js +1 -1
- package/dist/components/side-panel/layer-panel/column-selector.js +1 -1
- package/dist/components/side-panel/layer-panel/custom-palette.js +1 -1
- package/dist/components/side-panel/layer-panel/custom-picker.js +1 -1
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +2 -2
- package/dist/components/side-panel/layer-panel/layer-column-config.js +1 -1
- package/dist/components/side-panel/layer-panel/layer-config-group.js +21 -5
- package/dist/components/side-panel/layer-panel/layer-configurator.js +10 -4
- package/dist/components/side-panel/layer-panel/layer-panel-header.js +1 -1
- package/dist/components/side-panel/layer-panel/layer-panel.js +1 -1
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +1 -1
- package/dist/components/side-panel/layer-panel/layer-type-list-item.js +1 -1
- package/dist/components/side-panel/layer-panel/layer-type-selector.js +1 -1
- package/dist/components/side-panel/layer-panel/single-color-palette.js +1 -1
- package/dist/components/side-panel/layer-panel/text-label-panel.js +1 -1
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +1 -1
- package/dist/components/side-panel/layer-panel/vis-config-slider.js +2 -2
- package/dist/components/side-panel/layer-panel/vis-config-switch.js +2 -1
- package/dist/components/side-panel/map-manager.js +1 -1
- package/dist/components/side-panel/map-style-panel/map-layer-selector.js +1 -1
- package/dist/components/side-panel/map-style-panel/map-style-selector.js +1 -1
- package/dist/components/side-panel/panel-dropdown.js +1 -1
- package/dist/components/side-panel/panel-header-action.js +1 -1
- package/dist/components/side-panel/panel-header.js +1 -1
- package/dist/components/side-panel/panel-tab.js +1 -1
- package/dist/components/side-panel/panel-title.js +1 -1
- package/dist/components/side-panel/panel-toggle.js +1 -1
- package/dist/components/side-panel/side-bar.js +1 -1
- package/dist/components/side-panel.js +1 -1
- package/dist/connect/keplergl-connect.js +2 -2
- package/dist/connect/with-local-selector.js +1 -1
- package/dist/constants/action-types.js +2 -2
- package/dist/constants/color-palette.js +2 -2
- package/dist/constants/color-ranges.js +1 -1
- package/dist/constants/custom-color-ranges.js +2 -2
- package/dist/constants/default-settings.js +5 -3
- package/dist/constants/index.js +1 -1
- package/dist/constants/keyevent.js +2 -2
- package/dist/constants/tooltip.js +2 -2
- package/dist/constants/user-feedbacks.js +2 -2
- package/dist/constants/user-guides.js +2 -2
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +1 -1
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +2 -2
- package/dist/deckgl-layers/cluster-layer/cluster-layer.js +7 -4
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +1 -1
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +1 -1
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +1 -1
- package/dist/deckgl-layers/layer-utils/cluster-utils.js +2 -2
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +1 -1
- package/dist/deckgl-layers/layer-utils/shader-utils.js +2 -2
- package/dist/deckgl-layers/line-layer/line-layer.js +1 -1
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +1 -1
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +1 -1
- package/dist/index.js +1 -1
- package/dist/layers/aggregation-layer.js +6 -3
- package/dist/layers/arc-layer/arc-layer-icon.js +1 -1
- package/dist/layers/arc-layer/arc-layer.js +1 -1
- package/dist/layers/base-layer.js +9 -5
- package/dist/layers/cluster-layer/cluster-layer-icon.js +1 -1
- package/dist/layers/cluster-layer/cluster-layer.js +1 -1
- package/dist/layers/default-layer-icon.js +1 -1
- package/dist/layers/geojson-layer/geojson-layer-icon.js +1 -1
- package/dist/layers/geojson-layer/geojson-layer.js +1 -1
- package/dist/layers/geojson-layer/geojson-utils.js +1 -1
- package/dist/layers/grid-layer/grid-layer-icon.js +1 -1
- package/dist/layers/grid-layer/grid-layer.js +1 -1
- package/dist/layers/grid-layer/grid-utils.js +2 -2
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +1 -1
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +1 -1
- package/dist/layers/h3-hexagon-layer/h3-utils.js +2 -2
- package/dist/layers/heatmap-layer/heatmap-layer-icon.js +1 -1
- package/dist/layers/heatmap-layer/heatmap-layer.js +1 -1
- package/dist/layers/hexagon-layer/hexagon-layer-icon.js +1 -1
- package/dist/layers/hexagon-layer/hexagon-layer.js +1 -1
- package/dist/layers/hexagon-layer/hexagon-utils.js +2 -2
- package/dist/layers/icon-layer/icon-info-modal.js +1 -1
- package/dist/layers/icon-layer/icon-layer-icon.js +1 -1
- package/dist/layers/icon-layer/icon-layer.js +1 -1
- package/dist/layers/index.js +1 -1
- package/dist/layers/layer-factory.js +2 -2
- package/dist/layers/layer-text-label.js +2 -2
- package/dist/layers/layer-update.js +2 -2
- package/dist/layers/line-layer/line-layer-icon.js +1 -1
- package/dist/layers/line-layer/line-layer.js +1 -1
- package/dist/layers/mapbox-utils.js +1 -1
- package/dist/layers/mapboxgl-layer.js +1 -1
- package/dist/layers/point-layer/point-layer-icon.js +1 -1
- package/dist/layers/point-layer/point-layer.js +1 -1
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +1 -1
- package/dist/layers/s2-geometry-layer/s2-layer-icon.js +1 -1
- package/dist/layers/s2-geometry-layer/s2-utils.js +2 -2
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +1 -1
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +1 -1
- package/dist/layers/scenegraph-layer/scenegraph-layer.js +1 -1
- package/dist/layers/trip-layer/trip-info-modal.js +1 -1
- package/dist/layers/trip-layer/trip-layer-icon.js +1 -1
- package/dist/layers/trip-layer/trip-layer.js +1 -1
- package/dist/layers/trip-layer/trip-utils.js +2 -2
- package/dist/layers/types.js +2 -2
- package/dist/localization/ca.js +1 -1
- package/dist/localization/cn.js +1 -1
- package/dist/localization/en.js +3 -2
- package/dist/localization/es.js +1 -1
- package/dist/localization/fi.js +1 -1
- package/dist/localization/formatted-message.js +2 -2
- package/dist/localization/index.js +1 -1
- package/dist/localization/ja.js +1 -1
- package/dist/localization/locales.js +2 -2
- package/dist/localization/pt.js +1 -1
- package/dist/localization/ru.js +1 -1
- package/dist/middleware/index.js +2 -2
- package/dist/processors/data-processor.js +1 -1
- package/dist/processors/file-handler.js +1 -1
- package/dist/processors/index.js +1 -1
- package/dist/reducers/combined-updaters.js +1 -1
- package/dist/reducers/composer-helpers.js +1 -1
- package/dist/reducers/composers.js +1 -1
- package/dist/reducers/core.js +2 -2
- package/dist/reducers/index.js +1 -1
- package/dist/reducers/map-state-updaters.js +1 -1
- package/dist/reducers/map-state.js +1 -1
- package/dist/reducers/map-style-updaters.js +1 -1
- package/dist/reducers/map-style.js +1 -1
- package/dist/reducers/provider-state-updaters.js +1 -1
- package/dist/reducers/provider-state.js +1 -1
- package/dist/reducers/root.js +1 -1
- package/dist/reducers/ui-state-updaters.js +1 -1
- package/dist/reducers/ui-state.js +1 -1
- package/dist/reducers/vis-state-merger.js +1 -1
- package/dist/reducers/vis-state-selectors.js +2 -2
- package/dist/reducers/vis-state-updaters.js +1 -1
- package/dist/reducers/vis-state.js +1 -1
- package/dist/schemas/dataset-schema.js +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/map-state-schema.js +1 -1
- package/dist/schemas/map-style-schema.js +1 -1
- package/dist/schemas/schema-manager.js +1 -1
- package/dist/schemas/schema-utils.js +2 -2
- package/dist/schemas/schema.js +1 -1
- package/dist/schemas/versions.js +2 -2
- package/dist/schemas/vis-state-schema.js +1 -1
- package/dist/styles/base.js +1 -1
- package/dist/styles/index.js +1 -1
- package/dist/styles/media-breakpoints.js +1 -1
- package/dist/tasks/tasks.js +2 -2
- package/dist/templates/export-map-html.js +2 -2
- package/dist/utils/aggregate-utils.js +1 -1
- package/dist/utils/color-utils.js +2 -2
- package/dist/utils/data-scale-utils.js +2 -2
- package/dist/utils/data-utils.js +1 -1
- package/dist/utils/dataset-utils.js +1 -1
- package/dist/utils/dom-to-image.js +2 -2
- package/dist/utils/dom-utils.js +2 -2
- package/dist/utils/export-utils.js +1 -1
- package/dist/utils/filter-utils.js +1 -1
- package/dist/utils/gl-utils.js +1 -1
- package/dist/utils/gpu-filter-utils.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/interaction-utils.js +2 -2
- package/dist/utils/layer-utils.js +18 -3
- package/dist/utils/locale-utils.js +1 -1
- package/dist/utils/map-info-utils.js +2 -2
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +1 -1
- package/dist/utils/map-style-utils/mapbox-utils.js +2 -2
- package/dist/utils/mapbox-utils.js +2 -2
- package/dist/utils/notifications-utils.js +1 -1
- package/dist/utils/observe-dimensions.js +1 -1
- package/dist/utils/projection-utils.js +2 -2
- package/dist/utils/searcher-utils.js +2 -2
- package/dist/utils/split-map-utils.js +1 -1
- package/dist/utils/table-utils/data-container-utils.js +1 -1
- package/dist/utils/table-utils/data-row.js +2 -2
- package/dist/utils/table-utils/index.js +1 -1
- package/dist/utils/table-utils/indexed-data-container.js +1 -1
- package/dist/utils/table-utils/kepler-table.js +1 -1
- package/dist/utils/table-utils/row-data-container.js +1 -1
- package/dist/utils/utils.js +1 -1
- package/layers.js +1 -1
- package/localization.js +1 -1
- package/middleware.js +1 -1
- package/package.json +14 -14
- package/processors.js +1 -1
- package/reducers.js +1 -1
- package/schemas.js +1 -1
- package/src/actions/action-wrapper.js +1 -1
- package/src/actions/actions.js +1 -1
- package/src/actions/identity-actions.js +1 -1
- package/src/actions/index.js +1 -1
- package/src/actions/map-state-actions.js +1 -1
- package/src/actions/map-style-actions.js +1 -1
- package/src/actions/provider-actions.js +1 -1
- package/src/actions/ui-state-actions.js +1 -1
- package/src/actions/vis-state-actions.js +1 -1
- package/src/cloud-providers/index.js +1 -1
- package/src/cloud-providers/provider.js +1 -1
- package/src/components/bottom-widget.js +1 -1
- package/src/components/common/action-panel.js +1 -1
- package/src/components/common/animation-control/animation-control.js +1 -1
- package/src/components/common/animation-control/animation-controller.js +1 -1
- package/src/components/common/animation-control/animation-speed-slider.js +1 -1
- package/src/components/common/animation-control/floating-time-display.js +1 -1
- package/src/components/common/animation-control/playback-controls.js +1 -1
- package/src/components/common/animation-control/speed-control.js +1 -1
- package/src/components/common/checkbox.js +6 -2
- package/src/components/common/color-legend.js +1 -1
- package/src/components/common/data-table/button.js +1 -1
- package/src/components/common/data-table/canvas.js +1 -1
- package/src/components/common/data-table/cell-size.js +1 -1
- package/src/components/common/data-table/grid.js +1 -1
- package/src/components/common/data-table/index.js +1 -1
- package/src/components/common/data-table/option-dropdown.js +1 -1
- package/src/components/common/dataset-label.js +1 -1
- package/src/components/common/error-boundary.js +1 -1
- package/src/components/common/field-selector.js +1 -1
- package/src/components/common/field-token.js +1 -1
- package/src/components/common/file-uploader/file-drop.js +1 -1
- package/src/components/common/file-uploader/file-upload-progress.js +1 -1
- package/src/components/common/file-uploader/file-upload.js +1 -1
- package/src/components/common/file-uploader/upload-button.js +1 -1
- package/src/components/common/histogram-plot.js +1 -1
- package/src/components/common/icons/add.js +1 -1
- package/src/components/common/icons/anchor_window.js +1 -1
- package/src/components/common/icons/arrow-down-alt.js +1 -1
- package/src/components/common/icons/arrow-down-solid .js +1 -1
- package/src/components/common/icons/arrow-down.js +1 -1
- package/src/components/common/icons/arrow-left.js +1 -1
- package/src/components/common/icons/arrow-right.js +1 -1
- package/src/components/common/icons/arrow-up-alt.js +1 -1
- package/src/components/common/icons/arrow-up-solid.js +1 -1
- package/src/components/common/icons/arrow-up.js +1 -1
- package/src/components/common/icons/base.js +1 -1
- package/src/components/common/icons/bug.js +1 -1
- package/src/components/common/icons/cancel.js +1 -1
- package/src/components/common/icons/checkmark.js +1 -1
- package/src/components/common/icons/clipboard.js +1 -1
- package/src/components/common/icons/clock.js +1 -1
- package/src/components/common/icons/close.js +1 -1
- package/src/components/common/icons/code-alt.js +1 -1
- package/src/components/common/icons/copy.js +1 -1
- package/src/components/common/icons/crosshairs.js +1 -1
- package/src/components/common/icons/cube-3d.js +1 -1
- package/src/components/common/icons/cursor-click.js +1 -1
- package/src/components/common/icons/data-table.js +1 -1
- package/src/components/common/icons/db.js +1 -1
- package/src/components/common/icons/delete.js +1 -1
- package/src/components/common/icons/docs.js +1 -1
- package/src/components/common/icons/drag-n-drop.js +1 -1
- package/src/components/common/icons/draw-polygon.js +1 -1
- package/src/components/common/icons/email.js +1 -1
- package/src/components/common/icons/expand.js +1 -1
- package/src/components/common/icons/eye-seen.js +1 -1
- package/src/components/common/icons/eye-unseen.js +1 -1
- package/src/components/common/icons/file-type.js +1 -1
- package/src/components/common/icons/file.js +1 -1
- package/src/components/common/icons/files.js +1 -1
- package/src/components/common/icons/filter-funnel.js +1 -1
- package/src/components/common/icons/free-window.js +1 -1
- package/src/components/common/icons/gear.js +1 -1
- package/src/components/common/icons/hash.js +1 -1
- package/src/components/common/icons/histogram.js +1 -1
- package/src/components/common/icons/index.js +1 -1
- package/src/components/common/icons/info.js +1 -1
- package/src/components/common/icons/layers.js +1 -1
- package/src/components/common/icons/left-arrow.js +1 -1
- package/src/components/common/icons/legend.js +1 -1
- package/src/components/common/icons/line-chart.js +1 -1
- package/src/components/common/icons/login.js +1 -1
- package/src/components/common/icons/logout.js +1 -1
- package/src/components/common/icons/map-icon.js +1 -1
- package/src/components/common/icons/map.js +1 -1
- package/src/components/common/icons/messages.js +1 -1
- package/src/components/common/icons/minus.js +1 -1
- package/src/components/common/icons/pause.js +1 -1
- package/src/components/common/icons/picture.js +1 -1
- package/src/components/common/icons/pin.js +1 -1
- package/src/components/common/icons/play.js +1 -1
- package/src/components/common/icons/polygon.js +1 -1
- package/src/components/common/icons/rectangle.js +1 -1
- package/src/components/common/icons/reduce.js +1 -1
- package/src/components/common/icons/reset.js +1 -1
- package/src/components/common/icons/rocket.js +1 -1
- package/src/components/common/icons/save.js +1 -1
- package/src/components/common/icons/save2.js +1 -1
- package/src/components/common/icons/search.js +1 -1
- package/src/components/common/icons/settings.js +1 -1
- package/src/components/common/icons/share.js +1 -1
- package/src/components/common/icons/split.js +1 -1
- package/src/components/common/icons/square-select.js +1 -1
- package/src/components/common/icons/swap-horizontal.js +1 -1
- package/src/components/common/icons/table.js +1 -1
- package/src/components/common/icons/trash.js +1 -1
- package/src/components/common/icons/upload.js +1 -1
- package/src/components/common/icons/vert-dots.js +1 -1
- package/src/components/common/icons/vert-three-dots.js +1 -1
- package/src/components/common/icons/warning.js +1 -1
- package/src/components/common/image-preview.js +1 -1
- package/src/components/common/info-helper.js +3 -3
- package/src/components/common/item-selector/accessor.js +1 -1
- package/src/components/common/item-selector/chickleted-input.js +1 -1
- package/src/components/common/item-selector/dropdown-list.js +1 -1
- package/src/components/common/item-selector/item-selector.js +1 -1
- package/src/components/common/item-selector/typeahead.js +1 -1
- package/src/components/common/line-chart.js +1 -1
- package/src/components/common/loading-spinner.js +1 -1
- package/src/components/common/logo.js +1 -1
- package/src/components/common/map-layer-selector.js +1 -1
- package/src/components/common/modal.js +1 -1
- package/src/components/common/portaled.js +1 -1
- package/src/components/common/progress-bar.js +1 -1
- package/src/components/common/range-brush.js +1 -1
- package/src/components/common/range-plot.js +1 -1
- package/src/components/common/range-slider.js +1 -1
- package/src/components/common/slider/mouse-event.js +1 -1
- package/src/components/common/slider/slider-bar-handle.js +1 -1
- package/src/components/common/slider/slider-handle.js +1 -1
- package/src/components/common/slider/slider.js +1 -1
- package/src/components/common/styled-components.js +1 -1
- package/src/components/common/switch.js +1 -1
- package/src/components/common/time-range-slider-time-title.js +1 -1
- package/src/components/common/time-range-slider.js +1 -1
- package/src/components/common/time-slider-marker.js +1 -1
- package/src/components/common/toolbar-item.js +1 -1
- package/src/components/common/toolbar.js +1 -1
- package/src/components/common/vertical-toolbar.js +1 -1
- package/src/components/container.js +1 -1
- package/src/components/context.js +1 -1
- package/src/components/editor/constants.js +1 -1
- package/src/components/editor/editor.js +1 -1
- package/src/components/editor/feature-action-panel.js +1 -1
- package/src/components/editor/feature-styles.js +1 -1
- package/src/components/editor/handle-style.js +1 -1
- package/src/components/filters/components.js +1 -1
- package/src/components/filters/filter-panels/filter-panel-with-field-select.js +1 -1
- package/src/components/filters/filter-panels/multi-select-filter-panel.js +1 -1
- package/src/components/filters/filter-panels/new-filter-panel.js +1 -1
- package/src/components/filters/filter-panels/polygon-filter-panel.js +1 -1
- package/src/components/filters/filter-panels/range-filter-panel.js +1 -1
- package/src/components/filters/filter-panels/single-select-filter-panel.js +1 -1
- package/src/components/filters/filter-panels/time-range-filter-panel.js +1 -1
- package/src/components/filters/index.js +1 -1
- package/src/components/filters/multi-select-filter.js +1 -1
- package/src/components/filters/polygon-filter.js +1 -1
- package/src/components/filters/range-filter.js +1 -1
- package/src/components/filters/single-select-filter.js +1 -1
- package/src/components/filters/time-range-filter.js +1 -1
- package/src/components/filters/time-widget.js +1 -1
- package/src/components/geocoder/geocoder.js +1 -1
- package/src/components/geocoder-panel.js +1 -1
- package/src/components/index.js +1 -1
- package/src/components/injector.js +1 -1
- package/src/components/kepler-gl.d.ts +1 -0
- package/src/components/kepler-gl.js +16 -4
- package/src/components/map/coordinate-info.js +1 -1
- package/src/components/map/layer-hover-info.js +1 -1
- package/src/components/map/layer-selector-panel.js +1 -1
- package/src/components/map/locale-panel.js +1 -1
- package/src/components/map/map-control-panel.js +1 -1
- package/src/components/map/map-control-toolbar.js +1 -1
- package/src/components/map/map-control-tooltip.js +1 -1
- package/src/components/map/map-control.js +1 -1
- package/src/components/map/map-draw-panel.js +1 -1
- package/src/components/map/map-legend-panel.js +1 -1
- package/src/components/map/map-legend.js +1 -1
- package/src/components/map/map-popover.js +1 -1
- package/src/components/map/split-map-button.js +1 -1
- package/src/components/map/toggle-3d-button.js +1 -1
- package/src/components/map-container.js +21 -3
- package/src/components/maps-layout.js +1 -1
- package/src/components/modal-container.js +1 -1
- package/src/components/modals/add-map-style-modal.js +1 -1
- package/src/components/modals/cloud-tile.js +1 -1
- package/src/components/modals/data-table-modal.js +1 -1
- package/src/components/modals/delete-data-modal.js +1 -1
- package/src/components/modals/error-display.js +1 -1
- package/src/components/modals/export-data-modal.js +1 -1
- package/src/components/modals/export-image-modal.js +1 -1
- package/src/components/modals/export-map-modal/components.js +1 -1
- package/src/components/modals/export-map-modal/export-html-map.js +1 -1
- package/src/components/modals/export-map-modal/export-json-map.js +1 -1
- package/src/components/modals/export-map-modal/export-map-modal.js +1 -1
- package/src/components/modals/image-modal-container.js +1 -1
- package/src/components/modals/load-data-modal.js +1 -1
- package/src/components/modals/load-storage-map.js +1 -1
- package/src/components/modals/loading-dialog.js +1 -1
- package/src/components/modals/modal-dialog.js +1 -1
- package/src/components/modals/modal-tabs.js +1 -1
- package/src/components/modals/overwrite-map-modal.js +1 -1
- package/src/components/modals/provider-modal-container.js +1 -1
- package/src/components/modals/save-map-modal.js +1 -1
- package/src/components/modals/share-map-modal.js +1 -1
- package/src/components/modals/status-panel.js +1 -1
- package/src/components/modals/storage-map-viewer.js +1 -1
- package/src/components/notification-panel/notification-item.js +1 -1
- package/src/components/notification-panel.js +1 -1
- package/src/components/plot-container.js +4 -3
- package/src/components/side-panel/cloud-storage-dropdown.js +1 -1
- package/src/components/side-panel/common/dataset-info.js +1 -1
- package/src/components/side-panel/common/dataset-tag.js +1 -1
- package/src/components/side-panel/common/dataset-title.js +1 -1
- package/src/components/side-panel/common/source-data-catalog.js +1 -1
- package/src/components/side-panel/common/source-data-selector.js +1 -1
- package/src/components/side-panel/custom-panel.js +1 -1
- package/src/components/side-panel/filter-manager.js +1 -1
- package/src/components/side-panel/filter-panel/filter-panel-header.js +1 -1
- package/src/components/side-panel/filter-panel/filter-panel.js +1 -1
- package/src/components/side-panel/interaction-manager.js +1 -1
- package/src/components/side-panel/interaction-panel/brush-config.js +1 -1
- package/src/components/side-panel/interaction-panel/interaction-panel.js +1 -1
- package/src/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +1 -1
- package/src/components/side-panel/interaction-panel/tooltip-config.js +1 -1
- package/src/components/side-panel/layer-manager.js +1 -1
- package/src/components/side-panel/layer-panel/color-palette.js +1 -1
- package/src/components/side-panel/layer-panel/color-range-selector.js +1 -1
- package/src/components/side-panel/layer-panel/color-selector.js +1 -1
- package/src/components/side-panel/layer-panel/column-selector.js +1 -1
- package/src/components/side-panel/layer-panel/custom-palette.js +1 -1
- package/src/components/side-panel/layer-panel/custom-picker.js +1 -1
- package/src/components/side-panel/layer-panel/dimension-scale-selector.js +1 -1
- package/src/components/side-panel/layer-panel/layer-column-config.js +1 -1
- package/src/components/side-panel/layer-panel/layer-config-group.js +20 -6
- package/src/components/side-panel/layer-panel/layer-configurator.js +10 -1
- package/src/components/side-panel/layer-panel/layer-panel-header.js +1 -1
- package/src/components/side-panel/layer-panel/layer-panel.js +1 -1
- package/src/components/side-panel/layer-panel/layer-type-dropdown-list.js +1 -1
- package/src/components/side-panel/layer-panel/layer-type-list-item.js +1 -1
- package/src/components/side-panel/layer-panel/layer-type-selector.js +1 -1
- package/src/components/side-panel/layer-panel/single-color-palette.js +1 -1
- package/src/components/side-panel/layer-panel/text-label-panel.js +1 -1
- package/src/components/side-panel/layer-panel/vis-config-by-field-selector.js +1 -1
- package/src/components/side-panel/layer-panel/vis-config-slider.js +1 -1
- package/src/components/side-panel/layer-panel/vis-config-switch.js +2 -1
- package/src/components/side-panel/map-manager.js +1 -1
- package/src/components/side-panel/map-style-panel/map-layer-selector.js +1 -1
- package/src/components/side-panel/map-style-panel/map-style-selector.js +1 -1
- package/src/components/side-panel/panel-dropdown.js +1 -1
- package/src/components/side-panel/panel-header-action.js +1 -1
- package/src/components/side-panel/panel-header.js +1 -1
- package/src/components/side-panel/panel-tab.js +1 -1
- package/src/components/side-panel/panel-title.js +1 -1
- package/src/components/side-panel/panel-toggle.js +1 -1
- package/src/components/side-panel/side-bar.js +1 -1
- package/src/components/side-panel.js +1 -1
- package/src/connect/keplergl-connect.js +1 -1
- package/src/connect/with-local-selector.js +1 -1
- package/src/constants/action-types.js +1 -1
- package/src/constants/color-palette.js +1 -1
- package/src/constants/color-ranges.js +1 -1
- package/src/constants/custom-color-ranges.js +1 -1
- package/src/constants/default-settings.js +3 -1
- package/src/constants/index.js +1 -1
- package/src/constants/keyevent.js +1 -1
- package/src/constants/tooltip.js +1 -1
- package/src/constants/user-feedbacks.js +1 -1
- package/src/constants/user-guides.js +1 -1
- package/src/deckgl-layers/3d-building-layer/3d-building-layer.js +1 -1
- package/src/deckgl-layers/3d-building-layer/3d-building-utils.js +1 -1
- package/src/deckgl-layers/cluster-layer/cluster-layer.js +6 -2
- package/src/deckgl-layers/column-layer/enhanced-column-layer.js +1 -1
- package/src/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +1 -1
- package/src/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +1 -1
- package/src/deckgl-layers/layer-utils/cluster-utils.js +1 -1
- package/src/deckgl-layers/layer-utils/cpu-aggregator.js +1 -1
- package/src/deckgl-layers/layer-utils/shader-utils.js +1 -1
- package/src/deckgl-layers/line-layer/line-layer.js +1 -1
- package/src/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +1 -1
- package/src/deckgl-layers/svg-icon-layer/svg-icon-layer.js +1 -1
- package/src/index.js +1 -1
- package/src/layers/aggregation-layer.js +6 -2
- package/src/layers/arc-layer/arc-layer-icon.js +1 -1
- package/src/layers/arc-layer/arc-layer.js +1 -1
- package/src/layers/base-layer.js +7 -4
- package/src/layers/cluster-layer/cluster-layer-icon.js +1 -1
- package/src/layers/cluster-layer/cluster-layer.js +1 -1
- package/src/layers/default-layer-icon.js +1 -1
- package/src/layers/geojson-layer/geojson-layer-icon.js +1 -1
- package/src/layers/geojson-layer/geojson-layer.js +1 -1
- package/src/layers/geojson-layer/geojson-utils.js +1 -1
- package/src/layers/grid-layer/grid-layer-icon.js +1 -1
- package/src/layers/grid-layer/grid-layer.js +1 -1
- package/src/layers/grid-layer/grid-utils.js +1 -1
- package/src/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +1 -1
- package/src/layers/h3-hexagon-layer/h3-hexagon-layer.js +1 -1
- package/src/layers/h3-hexagon-layer/h3-utils.js +1 -1
- package/src/layers/heatmap-layer/heatmap-layer-icon.js +1 -1
- package/src/layers/heatmap-layer/heatmap-layer.js +1 -1
- package/src/layers/hexagon-layer/hexagon-layer-icon.js +1 -1
- package/src/layers/hexagon-layer/hexagon-layer.js +1 -1
- package/src/layers/hexagon-layer/hexagon-utils.js +1 -1
- package/src/layers/icon-layer/icon-info-modal.js +1 -1
- package/src/layers/icon-layer/icon-layer-icon.js +1 -1
- package/src/layers/icon-layer/icon-layer.js +1 -1
- package/src/layers/index.js +1 -1
- package/src/layers/layer-factory.js +1 -1
- package/src/layers/layer-text-label.js +1 -1
- package/src/layers/layer-update.js +1 -1
- package/src/layers/line-layer/line-layer-icon.js +1 -1
- package/src/layers/line-layer/line-layer.js +1 -1
- package/src/layers/mapbox-utils.js +1 -1
- package/src/layers/mapboxgl-layer.js +1 -1
- package/src/layers/point-layer/point-layer-icon.js +1 -1
- package/src/layers/point-layer/point-layer.js +1 -1
- package/src/layers/s2-geometry-layer/s2-geometry-layer.js +1 -1
- package/src/layers/s2-geometry-layer/s2-layer-icon.js +1 -1
- package/src/layers/s2-geometry-layer/s2-utils.js +1 -1
- package/src/layers/scenegraph-layer/scenegraph-info-modal.js +1 -1
- package/src/layers/scenegraph-layer/scenegraph-layer-icon.js +1 -1
- package/src/layers/scenegraph-layer/scenegraph-layer.js +1 -1
- package/src/layers/trip-layer/trip-info-modal.js +1 -1
- package/src/layers/trip-layer/trip-layer-icon.js +1 -1
- package/src/layers/trip-layer/trip-layer.js +1 -1
- package/src/layers/trip-layer/trip-utils.js +1 -1
- package/src/layers/types.js +1 -1
- package/src/localization/ca.js +1 -1
- package/src/localization/cn.js +1 -1
- package/src/localization/en.js +3 -2
- package/src/localization/es.js +1 -1
- package/src/localization/fi.js +1 -1
- package/src/localization/formatted-message.js +1 -1
- package/src/localization/index.js +1 -1
- package/src/localization/ja.js +1 -1
- package/src/localization/locales.js +1 -1
- package/src/localization/pt.js +1 -1
- package/src/localization/ru.js +1 -1
- package/src/middleware/index.js +1 -1
- package/src/processors/data-processor.js +1 -1
- package/src/processors/file-handler.js +1 -1
- package/src/processors/index.js +1 -1
- package/src/reducers/combined-updaters.js +1 -1
- package/src/reducers/composer-helpers.js +1 -1
- package/src/reducers/composers.js +1 -1
- package/src/reducers/core.js +1 -1
- package/src/reducers/index.js +1 -1
- package/src/reducers/map-state-updaters.js +1 -1
- package/src/reducers/map-state.js +1 -1
- package/src/reducers/map-style-updaters.js +1 -1
- package/src/reducers/map-style.js +1 -1
- package/src/reducers/provider-state-updaters.js +1 -1
- package/src/reducers/provider-state.js +1 -1
- package/src/reducers/root.js +1 -1
- package/src/reducers/ui-state-updaters.js +1 -1
- package/src/reducers/ui-state.js +1 -1
- package/src/reducers/vis-state-merger.js +1 -1
- package/src/reducers/vis-state-selectors.js +1 -1
- package/src/reducers/vis-state-updaters.js +1 -1
- package/src/reducers/vis-state.js +1 -1
- package/src/schemas/dataset-schema.js +1 -1
- package/src/schemas/index.js +1 -1
- package/src/schemas/map-state-schema.js +1 -1
- package/src/schemas/map-style-schema.js +1 -1
- package/src/schemas/schema-manager.js +1 -1
- package/src/schemas/schema-utils.js +1 -1
- package/src/schemas/schema.js +1 -1
- package/src/schemas/versions.js +1 -1
- package/src/schemas/vis-state-schema.js +1 -1
- package/src/styles/base.js +1 -1
- package/src/styles/index.js +1 -1
- package/src/styles/media-breakpoints.js +1 -1
- package/src/tasks/tasks.js +1 -1
- package/src/templates/export-map-html.js +1 -1
- package/src/utils/aggregate-utils.js +1 -1
- package/src/utils/color-utils.js +1 -1
- package/src/utils/data-scale-utils.js +1 -1
- package/src/utils/data-utils.js +1 -1
- package/src/utils/dataset-utils.js +1 -1
- package/src/utils/dom-to-image.js +1 -1
- package/src/utils/dom-utils.js +1 -1
- package/src/utils/export-utils.js +1 -1
- package/src/utils/filter-utils.js +1 -1
- package/src/utils/gl-utils.js +1 -1
- package/src/utils/gpu-filter-utils.js +1 -1
- package/src/utils/index.js +1 -1
- package/src/utils/interaction-utils.js +1 -1
- package/src/utils/layer-utils.d.ts +8 -0
- package/src/utils/layer-utils.js +17 -4
- package/src/utils/locale-utils.js +1 -1
- package/src/utils/map-info-utils.js +1 -1
- package/src/utils/map-style-utils/mapbox-gl-style-editor.js +1 -1
- package/src/utils/map-style-utils/mapbox-utils.js +1 -1
- package/src/utils/mapbox-utils.js +1 -1
- package/src/utils/notifications-utils.js +1 -1
- package/src/utils/observe-dimensions.js +1 -1
- package/src/utils/projection-utils.js +1 -1
- package/src/utils/searcher-utils.js +1 -1
- package/src/utils/split-map-utils.js +1 -1
- package/src/utils/table-utils/data-container-utils.js +1 -1
- package/src/utils/table-utils/data-row.js +1 -1
- package/src/utils/table-utils/index.js +1 -1
- package/src/utils/table-utils/indexed-data-container.js +1 -1
- package/src/utils/table-utils/kepler-table.js +1 -1
- package/src/utils/table-utils/row-data-container.js +1 -1
- package/src/utils/utils.js +1 -1
- package/styles.js +1 -1
- package/umd/keplergl.min.js +180 -181
|
@@ -21,7 +21,7 @@ var _userFeedbacks = require("../constants/user-feedbacks");
|
|
|
21
21
|
|
|
22
22
|
var _domUtils = require("./dom-utils");
|
|
23
23
|
|
|
24
|
-
// Copyright (c)
|
|
24
|
+
// Copyright (c) 2022 Uber Technologies, Inc.
|
|
25
25
|
//
|
|
26
26
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
27
27
|
// of this software and associated documentation files (the "Software"), to deal
|
|
@@ -549,4 +549,4 @@ function newImages() {
|
|
|
549
549
|
|
|
550
550
|
var _default = domtoimage;
|
|
551
551
|
exports["default"] = _default;
|
|
552
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb20tdG8taW1hZ2UuanMiXSwibmFtZXMiOlsiaW5saW5lciIsIm5ld0lubGluZXIiLCJmb250RmFjZXMiLCJuZXdGb250RmFjZXMiLCJpbWFnZXMiLCJuZXdJbWFnZXMiLCJkZWZhdWx0T3B0aW9ucyIsImltYWdlUGxhY2Vob2xkZXIiLCJ1bmRlZmluZWQiLCJjYWNoZUJ1c3QiLCJkb210b2ltYWdlIiwidG9TdmciLCJ0b1BuZyIsInRvSnBlZyIsInRvQmxvYiIsInRvUGl4ZWxEYXRhIiwiaW1wbCIsIm9wdGlvbnMiLCJub2RlIiwiY29weU9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJuZCIsImNsb25lTm9kZSIsImZpbHRlciIsImVtYmVkRm9udHMiLCJpbmxpbmVJbWFnZXMiLCJhcHBseU9wdGlvbnMiLCJjbG9uZSIsIm1ha2VTdmdEYXRhVXJpIiwid2lkdGgiLCJoZWlnaHQiLCJiZ2NvbG9yIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BlcnR5IiwiZHJhdyIsImNhbnZhcyIsImdldENvbnRleHQiLCJnZXRJbWFnZURhdGEiLCJkYXRhIiwidG9EYXRhVVJMIiwicXVhbGl0eSIsImNhbnZhc1RvQmxvYiIsImRvbU5vZGUiLCJtYWtlSW1hZ2UiLCJpbWFnZSIsIm5ld0NhbnZhcyIsImRyYXdJbWFnZSIsImROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsIndpbmRvdyIsIkhUTUxDYW52YXNFbGVtZW50IiwiY2xvbmVDaGlsZHJlbkluT3JkZXIiLCJwYXJlbnQiLCJhcnJDaGlsZHJlbiIsImZsdCIsImRvbmUiLCJjaGlsZCIsImNoaWxkQ2xvbmUiLCJhcHBlbmRDaGlsZCIsIm9yaWdpbmFsIiwiY2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwicmVzb2x2ZUFsbCIsImNzc1RleHQiLCJzdHlsZU5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImlubGluZUFsbCIsInNldEF0dHJpYnV0ZSIsInNlcmlhbGl6ZWRTdHJpbmciLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJ4aHRtbCIsImZvcmVpZ25PYmplY3QiLCJzdmdTdHIiLCJVUkxfUkVHRVgiLCJzaG91bGRQcm9jZXNzIiwicmVhZFVybHMiLCJpbmxpbmUiLCJzdHJpbmciLCJzZWFyY2giLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwidXJsIiwidXJsQXNSZWdleCIsInVybDAiLCJSZWdFeHAiLCJiYXNlVXJsIiwiZ2V0IiwidWwiLCJkYXRhVXJsIiwicmVwbGFjZSIsInVybHMiLCJzdHIiLCJyZWFkQWxsIiwid2ViRm9udHMiLCJhbGwiLCJtYXAiLCJ3ZWJGb250IiwiY3NzU3RyaW5ncyIsImpvaW4iLCJzdHlsZVNoZWV0cyIsImxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJjc3NSdWxlcyIsInJ1bGUiLCJ0eXBlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNoZWV0IiwiaHJlZiIsImNhY2hlIiwiaW5jbHVkZXMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJ0ZXh0Iiwic2V0QmFzZUhyZWYiLCJ0b1N0eWxlU2hlZXQiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsIklNQUdFX0VYUE9SVF9FUlJPUlMiLCJzdHlsZVNoZWV0IiwibG9nIiwiYmFzZSIsInNwbGl0IiwicG9wIiwiYWRkQmFzZUhyZWZUb1VybCIsInAxIiwidGVzdCIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJjb25jYXQiLCJ1cmwxIiwidXJsMiIsInVybDMiLCJpIiwibCIsImRvYyIsImltcGxlbWVudGF0aW9uIiwiY3JlYXRlSFRNTERvY3VtZW50Iiwic3R5bGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJib2R5IiwiZSIsImJpbmQiLCJ3ZWJGb250UnVsZSIsInBhcmVudFN0eWxlU2hlZXQiLCJzcmMiLCJuZXdJbWFnZSIsImVsZW1lbnQiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwiRWxlbWVudCIsImlubGluZUJhY2tncm91bmQiLCJIVE1MSW1hZ2VFbGVtZW50IiwiYmFja2dyb3VuZCIsImlubGluZWQiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5UHJpb3JpdHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBeUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQTlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXlCQSxJQUFNQSxPQUFPLEdBQUdDLFVBQVUsRUFBMUI7QUFDQSxJQUFNQyxTQUFTLEdBQUdDLFlBQVksRUFBOUI7QUFDQSxJQUFNQyxNQUFNLEdBQUdDLFNBQVMsRUFBeEIsQyxDQUNBOztBQUNBLElBQU1DLGNBQWMsR0FBRztBQUNyQjtBQUNBQyxFQUFBQSxnQkFBZ0IsRUFBRUMsU0FGRztBQUdyQjtBQUNBQyxFQUFBQSxTQUFTLEVBQUU7QUFKVSxDQUF2QjtBQU9BLElBQU1DLFVBQVUsR0FBRztBQUNqQkMsRUFBQUEsS0FBSyxFQUFMQSxLQURpQjtBQUVqQkMsRUFBQUEsS0FBSyxFQUFMQSxLQUZpQjtBQUdqQkMsRUFBQUEsTUFBTSxFQUFOQSxNQUhpQjtBQUlqQkMsRUFBQUEsTUFBTSxFQUFOQSxNQUppQjtBQUtqQkMsRUFBQUEsV0FBVyxFQUFYQSxXQUxpQjtBQU1qQkMsRUFBQUEsSUFBSSxFQUFFO0FBQ0pkLElBQUFBLFNBQVMsRUFBVEEsU0FESTtBQUVKRSxJQUFBQSxNQUFNLEVBQU5BLE1BRkk7QUFHSkosSUFBQUEsT0FBTyxFQUFQQSxPQUhJO0FBSUppQixJQUFBQSxPQUFPLEVBQUU7QUFKTDtBQU5XLENBQW5CO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFNBQVNOLEtBQVQsQ0FBZU8sSUFBZixFQUFxQkQsT0FBckIsRUFBOEI7QUFDNUJBLEVBQUFBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLEVBQXJCO0FBQ0FFLEVBQUFBLFdBQVcsQ0FBQ0YsT0FBRCxDQUFYO0FBQ0EsU0FBT0csT0FBTyxDQUFDQyxPQUFSLENBQWdCSCxJQUFoQixFQUNKSSxJQURJLENBQ0MsVUFBQUMsRUFBRTtBQUFBLFdBQUlDLFNBQVMsQ0FBQ0QsRUFBRCxFQUFLTixPQUFPLENBQUNRLE1BQWIsRUFBcUIsSUFBckIsQ0FBYjtBQUFBLEdBREgsRUFFSkgsSUFGSSxDQUVDSSxVQUZELEVBR0pKLElBSEksQ0FHQ0ssWUFIRCxFQUlKTCxJQUpJLENBSUNNLFlBSkQsRUFLSk4sSUFMSSxDQUtDLFVBQUFPLEtBQUs7QUFBQSxXQUNUQyxjQUFjLENBQUNELEtBQUQsRUFBUVosT0FBTyxDQUFDYyxLQUFSLElBQWlCLHdCQUFTYixJQUFULENBQXpCLEVBQXlDRCxPQUFPLENBQUNlLE1BQVIsSUFBa0IseUJBQVVkLElBQVYsQ0FBM0QsQ0FETDtBQUFBLEdBTE4sQ0FBUDs7QUFTQSxXQUFTVSxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUMzQixRQUFJWixPQUFPLENBQUNnQixPQUFaLEVBQXFCSixLQUFLLENBQUNLLEtBQU4sQ0FBWUMsZUFBWixHQUE4QmxCLE9BQU8sQ0FBQ2dCLE9BQXRDO0FBRXJCLFFBQUloQixPQUFPLENBQUNjLEtBQVosRUFBbUJGLEtBQUssQ0FBQ0ssS0FBTixDQUFZSCxLQUFaLGFBQXVCZCxPQUFPLENBQUNjLEtBQS9CO0FBQ25CLFFBQUlkLE9BQU8sQ0FBQ2UsTUFBWixFQUFvQkgsS0FBSyxDQUFDSyxLQUFOLENBQVlGLE1BQVosYUFBd0JmLE9BQU8sQ0FBQ2UsTUFBaEM7QUFFcEIsUUFBSWYsT0FBTyxDQUFDaUIsS0FBWixFQUNFRSxNQUFNLENBQUNDLElBQVAsQ0FBWXBCLE9BQU8sQ0FBQ2lCLEtBQXBCLEVBQTJCSSxPQUEzQixDQUFtQyxVQUFBQyxRQUFRLEVBQUk7QUFDN0NWLE1BQUFBLEtBQUssQ0FBQ0ssS0FBTixDQUFZSyxRQUFaLElBQXdCdEIsT0FBTyxDQUFDaUIsS0FBUixDQUFjSyxRQUFkLENBQXhCO0FBQ0QsS0FGRDtBQUlGLFdBQU9WLEtBQVA7QUFDRDtBQUNGO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU2QsV0FBVCxDQUFxQkcsSUFBckIsRUFBMkJELE9BQTNCLEVBQW9DO0FBQ2xDLFNBQU91QixJQUFJLENBQUN0QixJQUFELEVBQU9ELE9BQU8sSUFBSSxFQUFsQixDQUFKLENBQTBCSyxJQUExQixDQUNMLFVBQUFtQixNQUFNO0FBQUEsV0FBSUEsTUFBTSxDQUFDQyxVQUFQLENBQWtCLElBQWxCLEVBQXdCQyxZQUF4QixDQUFxQyxDQUFyQyxFQUF3QyxDQUF4QyxFQUEyQyx3QkFBU3pCLElBQVQsQ0FBM0MsRUFBMkQseUJBQVVBLElBQVYsQ0FBM0QsRUFBNEUwQixJQUFoRjtBQUFBLEdBREQsQ0FBUDtBQUdEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU2hDLEtBQVQsQ0FBZU0sSUFBZixFQUFxQkQsT0FBckIsRUFBOEI7QUFDNUIsU0FBT3VCLElBQUksQ0FBQ3RCLElBQUQsRUFBT0QsT0FBTyxJQUFJLEVBQWxCLENBQUosQ0FBMEJLLElBQTFCLENBQStCLFVBQUFtQixNQUFNO0FBQUEsV0FBSUEsTUFBTSxDQUFDSSxTQUFQLEVBQUo7QUFBQSxHQUFyQyxDQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTaEMsTUFBVCxDQUFnQkssSUFBaEIsRUFBc0JELE9BQXRCLEVBQStCO0FBQzdCQSxFQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUNBLFNBQU91QixJQUFJLENBQUN0QixJQUFELEVBQU9ELE9BQVAsQ0FBSixDQUFvQkssSUFBcEIsQ0FBeUIsVUFBQW1CLE1BQU07QUFBQSxXQUFJQSxNQUFNLENBQUNJLFNBQVAsQ0FBaUIsWUFBakIsRUFBK0I1QixPQUFPLENBQUM2QixPQUFSLElBQW1CLEdBQWxELENBQUo7QUFBQSxHQUEvQixDQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTaEMsTUFBVCxDQUFnQkksSUFBaEIsRUFBc0JELE9BQXRCLEVBQStCO0FBQzdCLFNBQU91QixJQUFJLENBQUN0QixJQUFELEVBQU9ELE9BQU8sSUFBSSxFQUFsQixDQUFKLENBQTBCSyxJQUExQixDQUErQnlCLHNCQUEvQixDQUFQO0FBQ0Q7O0FBRUQsU0FBUzVCLFdBQVQsQ0FBcUJGLE9BQXJCLEVBQThCO0FBQzVCO0FBQ0EsTUFBSSxPQUFPQSxPQUFPLENBQUNWLGdCQUFmLEtBQW9DLFdBQXhDLEVBQXFEO0FBQ25ERyxJQUFBQSxVQUFVLENBQUNNLElBQVgsQ0FBZ0JDLE9BQWhCLENBQXdCVixnQkFBeEIsR0FBMkNELGNBQWMsQ0FBQ0MsZ0JBQTFEO0FBQ0QsR0FGRCxNQUVPO0FBQ0xHLElBQUFBLFVBQVUsQ0FBQ00sSUFBWCxDQUFnQkMsT0FBaEIsQ0FBd0JWLGdCQUF4QixHQUEyQ1UsT0FBTyxDQUFDVixnQkFBbkQ7QUFDRDs7QUFFRCxNQUFJLE9BQU9VLE9BQU8sQ0FBQ1IsU0FBZixLQUE2QixXQUFqQyxFQUE4QztBQUM1Q0MsSUFBQUEsVUFBVSxDQUFDTSxJQUFYLENBQWdCQyxPQUFoQixDQUF3QlIsU0FBeEIsR0FBb0NILGNBQWMsQ0FBQ0csU0FBbkQ7QUFDRCxHQUZELE1BRU87QUFDTEMsSUFBQUEsVUFBVSxDQUFDTSxJQUFYLENBQWdCQyxPQUFoQixDQUF3QlIsU0FBeEIsR0FBb0NRLE9BQU8sQ0FBQ1IsU0FBNUM7QUFDRDtBQUNGOztBQUVELFNBQVMrQixJQUFULENBQWNRLE9BQWQsRUFBdUIvQixPQUF2QixFQUFnQztBQUM5QixTQUFPTixLQUFLLENBQUNxQyxPQUFELEVBQVUvQixPQUFWLENBQUwsQ0FDSkssSUFESSxDQUNDMkIsbUJBREQsRUFFSjNCLElBRkksQ0FFQyxxQkFBTSxHQUFOLENBRkQsRUFHSkEsSUFISSxDQUdDLFVBQUE0QixLQUFLLEVBQUk7QUFDYixRQUFNVCxNQUFNLEdBQUdVLFNBQVMsQ0FBQ0gsT0FBRCxDQUF4QjtBQUNBUCxJQUFBQSxNQUFNLENBQUNDLFVBQVAsQ0FBa0IsSUFBbEIsRUFBd0JVLFNBQXhCLENBQWtDRixLQUFsQyxFQUF5QyxDQUF6QyxFQUE0QyxDQUE1QztBQUNBLFdBQU9ULE1BQVA7QUFDRCxHQVBJLENBQVA7O0FBU0EsV0FBU1UsU0FBVCxDQUFtQkUsS0FBbkIsRUFBMEI7QUFDeEIsUUFBTVosTUFBTSxHQUFHYSxxQkFBU0MsYUFBVCxDQUF1QixRQUF2QixDQUFmOztBQUNBZCxJQUFBQSxNQUFNLENBQUNWLEtBQVAsR0FBZWQsT0FBTyxDQUFDYyxLQUFSLElBQWlCLHdCQUFTc0IsS0FBVCxDQUFoQztBQUNBWixJQUFBQSxNQUFNLENBQUNULE1BQVAsR0FBZ0JmLE9BQU8sQ0FBQ2UsTUFBUixJQUFrQix5QkFBVXFCLEtBQVYsQ0FBbEM7O0FBRUEsUUFBSXBDLE9BQU8sQ0FBQ2dCLE9BQVosRUFBcUI7QUFDbkIsVUFBTXVCLEdBQUcsR0FBR2YsTUFBTSxDQUFDQyxVQUFQLENBQWtCLElBQWxCLENBQVo7QUFDQWMsTUFBQUEsR0FBRyxDQUFDQyxTQUFKLEdBQWdCeEMsT0FBTyxDQUFDZ0IsT0FBeEI7QUFDQXVCLE1BQUFBLEdBQUcsQ0FBQ0UsUUFBSixDQUFhLENBQWIsRUFBZ0IsQ0FBaEIsRUFBbUJqQixNQUFNLENBQUNWLEtBQTFCLEVBQWlDVSxNQUFNLENBQUNULE1BQXhDO0FBQ0Q7O0FBRUQsV0FBT1MsTUFBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU2pCLFNBQVQsQ0FBbUJOLElBQW5CLEVBQXlCTyxNQUF6QixFQUFpQ2tDLElBQWpDLEVBQXVDO0FBQ3JDLE1BQUksQ0FBQ0EsSUFBRCxJQUFTbEMsTUFBVCxJQUFtQixDQUFDQSxNQUFNLENBQUNQLElBQUQsQ0FBOUIsRUFBc0M7QUFDcEMsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDRDs7QUFFRCxTQUFPRCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JILElBQWhCLEVBQ0pJLElBREksQ0FDQ3NDLFlBREQsRUFFSnRDLElBRkksQ0FFQyxVQUFBTyxLQUFLO0FBQUEsV0FBSWdDLGFBQWEsQ0FBQzNDLElBQUQsRUFBT1csS0FBUCxFQUFjSixNQUFkLENBQWpCO0FBQUEsR0FGTixFQUdKSCxJQUhJLENBR0MsVUFBQU8sS0FBSztBQUFBLFdBQUksNEJBQWFYLElBQWIsRUFBbUJXLEtBQW5CLENBQUo7QUFBQSxHQUhOLENBQVA7O0FBS0EsV0FBUytCLFlBQVQsQ0FBc0JyQyxFQUF0QixFQUEwQjtBQUN4QixRQUFJQSxFQUFFLFlBQVl1QyxtQkFBT0MsaUJBQXpCLEVBQTRDO0FBQzFDLGFBQU8seUJBQVV4QyxFQUFFLENBQUNzQixTQUFILEVBQVYsQ0FBUDtBQUNEOztBQUNELFdBQU90QixFQUFFLENBQUNDLFNBQUgsQ0FBYSxLQUFiLENBQVA7QUFDRDs7QUFFRCxXQUFTd0Msb0JBQVQsQ0FBOEJDLE1BQTlCLEVBQXNDQyxXQUF0QyxFQUFtREMsR0FBbkQsRUFBd0Q7QUFDdEQsUUFBSUMsSUFBSSxHQUFHaEQsT0FBTyxDQUFDQyxPQUFSLEVBQVg7QUFDQTZDLElBQUFBLFdBQVcsQ0FBQzVCLE9BQVosQ0FBb0IsVUFBQStCLEtBQUssRUFBSTtBQUMzQkQsTUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQ1I5QyxJQURJLENBQ0M7QUFBQSxlQUFNRSxTQUFTLENBQUM2QyxLQUFELEVBQVFGLEdBQVIsQ0FBZjtBQUFBLE9BREQsRUFFSjdDLElBRkksQ0FFQyxVQUFBZ0QsVUFBVSxFQUFJO0FBQ2xCLFlBQUlBLFVBQUosRUFBZ0I7QUFDZEwsVUFBQUEsTUFBTSxDQUFDTSxXQUFQLENBQW1CRCxVQUFuQjtBQUNEO0FBQ0YsT0FOSSxDQUFQO0FBT0QsS0FSRDtBQVNBLFdBQU9GLElBQVA7QUFDRDs7QUFFRCxXQUFTUCxhQUFULENBQXVCVyxRQUF2QixFQUFpQzNDLEtBQWpDLEVBQXdDc0MsR0FBeEMsRUFBNkM7QUFDM0MsUUFBTU0sUUFBUSxHQUFHRCxRQUFRLENBQUNFLFVBQTFCOztBQUNBLFFBQUlELFFBQVEsQ0FBQ0UsTUFBVCxLQUFvQixDQUF4QixFQUEyQjtBQUN6QixhQUFPdkQsT0FBTyxDQUFDQyxPQUFSLENBQWdCUSxLQUFoQixDQUFQO0FBQ0Q7O0FBRUQsV0FBT21DLG9CQUFvQixDQUFDbkMsS0FBRCxFQUFRLHVCQUFRNEMsUUFBUixDQUFSLEVBQTJCTixHQUEzQixDQUFwQixDQUFvRDdDLElBQXBELENBQXlEO0FBQUEsYUFBTU8sS0FBTjtBQUFBLEtBQXpELENBQVA7QUFDRDtBQUNGOztBQUVELFNBQVNILFVBQVQsQ0FBb0JSLElBQXBCLEVBQTBCO0FBQ3hCLFNBQU9oQixTQUFTLENBQUMwRSxVQUFWLEdBQXVCdEQsSUFBdkIsQ0FBNEIsVUFBQXVELE9BQU8sRUFBSTtBQUM1QyxRQUFNQyxTQUFTLEdBQUd4QixxQkFBU0MsYUFBVCxDQUF1QixPQUF2QixDQUFsQjs7QUFDQXJDLElBQUFBLElBQUksQ0FBQ3FELFdBQUwsQ0FBaUJPLFNBQWpCO0FBQ0FBLElBQUFBLFNBQVMsQ0FBQ1AsV0FBVixDQUFzQmpCLHFCQUFTeUIsY0FBVCxDQUF3QkYsT0FBeEIsQ0FBdEI7QUFDQSxXQUFPM0QsSUFBUDtBQUNELEdBTE0sQ0FBUDtBQU1EOztBQUVELFNBQVNTLFlBQVQsQ0FBc0JULElBQXRCLEVBQTRCO0FBQzFCLFNBQU9kLE1BQU0sQ0FBQzRFLFNBQVAsQ0FBaUI5RCxJQUFqQixFQUF1QkksSUFBdkIsQ0FBNEI7QUFBQSxXQUFNSixJQUFOO0FBQUEsR0FBNUIsQ0FBUDtBQUNEOztBQUVELFNBQVNZLGNBQVQsQ0FBd0JaLElBQXhCLEVBQThCYSxLQUE5QixFQUFxQ0MsTUFBckMsRUFBNkM7QUFDM0MsU0FBT1osT0FBTyxDQUFDQyxPQUFSLENBQWdCSCxJQUFoQixFQUFzQkksSUFBdEIsQ0FBMkIsVUFBQUMsRUFBRSxFQUFJO0FBQ3RDQSxJQUFBQSxFQUFFLENBQUMwRCxZQUFILENBQWdCLE9BQWhCLEVBQXlCLDhCQUF6QjtBQUNBLFFBQU1DLGdCQUFnQixHQUFHLElBQUlwQixtQkFBT3FCLGFBQVgsR0FBMkJDLGlCQUEzQixDQUE2QzdELEVBQTdDLENBQXpCO0FBRUEsUUFBTThELEtBQUssR0FBRywyQkFBWUgsZ0JBQVosQ0FBZDtBQUNBLFFBQU1JLGFBQWEsMkVBQTRERCxLQUE1RCxxQkFBbkI7QUFDQSxRQUFNRSxNQUFNLCtEQUFxRHhELEtBQXJELHlCQUF1RUMsTUFBdkUsZ0JBQWtGc0QsYUFBbEYsV0FBWixDQU5zQyxDQVF0QztBQUNBO0FBQ0E7QUFDQTs7QUFDQSxXQUFPLGdDQUFpQkMsTUFBakIsQ0FBUDtBQUNELEdBYk0sQ0FBUDtBQWNEOztBQUVELFNBQVN0RixVQUFULEdBQXNCO0FBQ3BCLE1BQU11RixTQUFTLEdBQUcsNkJBQWxCO0FBRUEsU0FBTztBQUNMUixJQUFBQSxTQUFTLEVBQVRBLFNBREs7QUFFTFMsSUFBQUEsYUFBYSxFQUFiQSxhQUZLO0FBR0x6RSxJQUFBQSxJQUFJLEVBQUU7QUFDSjBFLE1BQUFBLFFBQVEsRUFBUkEsUUFESTtBQUVKQyxNQUFBQSxNQUFNLEVBQU5BO0FBRkk7QUFIRCxHQUFQOztBQVNBLFdBQVNGLGFBQVQsQ0FBdUJHLE1BQXZCLEVBQStCO0FBQzdCLFdBQU9BLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjTCxTQUFkLE1BQTZCLENBQUMsQ0FBckM7QUFDRDs7QUFFRCxXQUFTRSxRQUFULENBQWtCRSxNQUFsQixFQUEwQjtBQUN4QixRQUFNRSxNQUFNLEdBQUcsRUFBZjtBQUNBLFFBQUlDLEtBQUo7O0FBQ0EsV0FBTyxDQUFDQSxLQUFLLEdBQUdQLFNBQVMsQ0FBQ1EsSUFBVixDQUFlSixNQUFmLENBQVQsTUFBcUMsSUFBNUMsRUFBa0Q7QUFDaERFLE1BQUFBLE1BQU0sQ0FBQ0csSUFBUCxDQUFZRixLQUFLLENBQUMsQ0FBRCxDQUFqQjtBQUNEOztBQUNELFdBQU9ELE1BQU0sQ0FBQ3JFLE1BQVAsQ0FBYyxVQUFBeUUsR0FBRyxFQUFJO0FBQzFCLGFBQU8sQ0FBQyx5QkFBVUEsR0FBVixDQUFSO0FBQ0QsS0FGTSxDQUFQO0FBR0Q7O0FBRUQsV0FBU0MsVUFBVCxDQUFvQkMsSUFBcEIsRUFBMEI7QUFDeEIsV0FBTyxJQUFJQyxNQUFKLDBCQUE2QixzQkFBT0QsSUFBUCxDQUE3QixtQkFBeUQsR0FBekQsQ0FBUDtBQUNEOztBQUVELFdBQVNULE1BQVQsQ0FBZ0JDLE1BQWhCLEVBQXdCTSxHQUF4QixFQUE2QkksT0FBN0IsRUFBc0NDLEdBQXRDLEVBQTJDO0FBQ3pDLFdBQU9uRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0I2RSxHQUFoQixFQUNKNUUsSUFESSxDQUNDLFVBQUFrRixFQUFFO0FBQUEsYUFBS0YsT0FBTyxHQUFHLDBCQUFXRSxFQUFYLEVBQWVGLE9BQWYsQ0FBSCxHQUE2QkUsRUFBekM7QUFBQSxLQURILEVBRUpsRixJQUZJLENBRUMsVUFBQWtGLEVBQUU7QUFBQSxhQUFLLE9BQU9ELEdBQVAsS0FBZSxVQUFmLEdBQTRCQSxHQUFHLENBQUNDLEVBQUQsQ0FBL0IsR0FBc0MsNEJBQWFBLEVBQWIsRUFBaUI5RixVQUFVLENBQUNNLElBQVgsQ0FBZ0JDLE9BQWpDLENBQTNDO0FBQUEsS0FGSCxFQUdKSyxJQUhJLENBR0MsVUFBQXNCLElBQUk7QUFBQSxhQUFJLHlCQUFVQSxJQUFWLEVBQWdCLHdCQUFTc0QsR0FBVCxDQUFoQixDQUFKO0FBQUEsS0FITCxFQUlKNUUsSUFKSSxDQUlDLFVBQUFtRixPQUFPO0FBQUEsYUFBSWIsTUFBTSxDQUFDYyxPQUFQLENBQWVQLFVBQVUsQ0FBQ0QsR0FBRCxDQUF6QixjQUFxQ08sT0FBckMsUUFBSjtBQUFBLEtBSlIsQ0FBUDtBQUtEOztBQUVELFdBQVN6QixTQUFULENBQW1CWSxNQUFuQixFQUEyQlUsT0FBM0IsRUFBb0NDLEdBQXBDLEVBQXlDO0FBQ3ZDLFFBQUksQ0FBQ2QsYUFBYSxDQUFDRyxNQUFELENBQWQsSUFBMEIsOEJBQWVBLE1BQWYsQ0FBOUIsRUFBc0Q7QUFDcEQsYUFBT3hFLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQnVFLE1BQWhCLENBQVA7QUFDRDs7QUFDRCxXQUFPeEUsT0FBTyxDQUFDQyxPQUFSLENBQWdCdUUsTUFBaEIsRUFDSnRFLElBREksQ0FDQ29FLFFBREQsRUFFSnBFLElBRkksQ0FFQyxVQUFBcUYsSUFBSSxFQUFJO0FBQ1osVUFBSXZDLElBQUksR0FBR2hELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQnVFLE1BQWhCLENBQVg7QUFDQWUsTUFBQUEsSUFBSSxDQUFDckUsT0FBTCxDQUFhLFVBQUE0RCxHQUFHLEVBQUk7QUFDbEI5QixRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQzlDLElBQUwsQ0FBVSxVQUFBc0YsR0FBRztBQUFBLGlCQUFJakIsTUFBTSxDQUFDaUIsR0FBRCxFQUFNVixHQUFOLEVBQVdJLE9BQVgsRUFBb0JDLEdBQXBCLENBQVY7QUFBQSxTQUFiLENBQVA7QUFDRCxPQUZEO0FBR0EsYUFBT25DLElBQVA7QUFDRCxLQVJJLENBQVA7QUFTRDtBQUNGOztBQUVELFNBQVNqRSxZQUFULEdBQXdCO0FBQ3RCLFNBQU87QUFDTHlFLElBQUFBLFVBQVUsRUFBVkEsVUFESztBQUVMNUQsSUFBQUEsSUFBSSxFQUFFO0FBQUM2RixNQUFBQSxPQUFPLEVBQVBBO0FBQUQ7QUFGRCxHQUFQOztBQUtBLFdBQVNqQyxVQUFULEdBQXNCO0FBQ3BCLFdBQU9pQyxPQUFPLEdBQ1h2RixJQURJLENBQ0MsVUFBQXdGLFFBQVEsRUFBSTtBQUNoQixhQUFPMUYsT0FBTyxDQUFDMkYsR0FBUixDQUFZRCxRQUFRLENBQUNFLEdBQVQsQ0FBYSxVQUFBQyxPQUFPO0FBQUEsZUFBSUEsT0FBTyxDQUFDNUYsT0FBUixFQUFKO0FBQUEsT0FBcEIsQ0FBWixDQUFQO0FBQ0QsS0FISSxFQUlKQyxJQUpJLENBSUMsVUFBQTRGLFVBQVU7QUFBQSxhQUFJQSxVQUFVLENBQUNDLElBQVgsQ0FBZ0IsSUFBaEIsQ0FBSjtBQUFBLEtBSlgsQ0FBUDtBQUtEOztBQUVELFdBQVNOLE9BQVQsR0FBbUI7QUFDakIsV0FBT3pGLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQix1QkFBUWlDLHFCQUFTOEQsV0FBakIsQ0FBaEIsRUFDSjlGLElBREksQ0FDQytGLHVCQURELEVBRUovRixJQUZJLENBRUNnRyxXQUZELEVBR0poRyxJQUhJLENBR0NpRyxrQkFIRCxFQUlKakcsSUFKSSxDQUlDLFVBQUFrRyxLQUFLO0FBQUEsYUFBSUEsS0FBSyxDQUFDUixHQUFOLENBQVVTLFVBQVYsQ0FBSjtBQUFBLEtBSk4sQ0FBUDs7QUFNQSxhQUFTRixrQkFBVCxDQUE0QkcsUUFBNUIsRUFBc0M7QUFDcEMsYUFBT0EsUUFBUSxDQUNaakcsTUFESSxDQUNHLFVBQUFrRyxJQUFJO0FBQUEsZUFBSUEsSUFBSSxDQUFDQyxJQUFMLEtBQWM5RCxtQkFBTytELE9BQVAsQ0FBZUMsY0FBakM7QUFBQSxPQURQLEVBRUpyRyxNQUZJLENBRUcsVUFBQWtHLElBQUk7QUFBQSxlQUFJM0gsT0FBTyxDQUFDeUYsYUFBUixDQUFzQmtDLElBQUksQ0FBQ3pGLEtBQUwsQ0FBVzZGLGdCQUFYLENBQTRCLEtBQTVCLENBQXRCLENBQUo7QUFBQSxPQUZQLENBQVA7QUFHRDs7QUFFRCxhQUFTVix1QkFBVCxDQUFpQ0QsV0FBakMsRUFBOEM7QUFDNUMsYUFBT2hHLE9BQU8sQ0FBQzJGLEdBQVIsQ0FDTEssV0FBVyxDQUFDSixHQUFaLENBQWdCLFVBQUFnQixLQUFLLEVBQUk7QUFDdkIsWUFBSUEsS0FBSyxDQUFDQyxJQUFWLEVBQWdCO0FBQ2Q7QUFDQTtBQUNBLGNBQU1DLEtBQUssR0FBR0YsS0FBSyxDQUFDQyxJQUFOLENBQVdFLFFBQVgsQ0FBb0IsWUFBcEIsSUFBb0MsVUFBcEMsR0FBaUQsU0FBL0Q7QUFDQSxpQkFBT3JFLG1CQUNKc0UsS0FESSxDQUNFSixLQUFLLENBQUNDLElBRFIsRUFDYztBQUFDSSxZQUFBQSxXQUFXLEVBQUUsTUFBZDtBQUFzQkgsWUFBQUEsS0FBSyxFQUFMQTtBQUF0QixXQURkLEVBRUo1RyxJQUZJLENBRUMsVUFBQWdILFFBQVE7QUFBQSxtQkFBSUEsUUFBUSxDQUFDQyxJQUFULEVBQUo7QUFBQSxXQUZULEVBR0pqSCxJQUhJLENBR0NrSCxXQUFXLENBQUNSLEtBQUssQ0FBQ0MsSUFBUCxDQUhaLEVBSUozRyxJQUpJLENBSUNtSCxZQUpELFdBS0UsVUFBQUMsR0FBRyxFQUFJO0FBQ1o7QUFDQTtBQUNBO0FBQ0FDLGdDQUFRQyxJQUFSLENBQWFDLG1DQUFvQkMsVUFBakMsRUFBNkNkLEtBQUssQ0FBQ0MsSUFBbkQ7O0FBQ0FVLGdDQUFRSSxHQUFSLENBQVlMLEdBQVo7O0FBQ0E7QUFDRCxXQVpJLENBQVA7QUFhRDs7QUFDRCxlQUFPdEgsT0FBTyxDQUFDQyxPQUFSLENBQWdCMkcsS0FBaEIsQ0FBUDtBQUNELE9BcEJELENBREssQ0FBUDs7QUF3QkEsZUFBU1EsV0FBVCxDQUFxQlEsSUFBckIsRUFBMkI7QUFDekJBLFFBQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDQyxLQUFMLENBQVcsR0FBWCxDQUFQO0FBQ0FELFFBQUFBLElBQUksQ0FBQ0UsR0FBTDtBQUNBRixRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQzdCLElBQUwsQ0FBVSxHQUFWLENBQVA7O0FBRUEsaUJBQVNnQyxnQkFBVCxDQUEwQnBELEtBQTFCLEVBQWlDcUQsRUFBakMsRUFBcUM7QUFDbkMsY0FBTWxELEdBQUcsR0FBRyxTQUFTbUQsSUFBVCxDQUFjRCxFQUFkLElBQW9CQSxFQUFwQixHQUF5QkUsbUJBQW1CLENBQUNOLElBQUQsRUFBT0ksRUFBUCxDQUF4RDtBQUNBLGdDQUFlbEQsR0FBZjtBQUNELFNBUndCLENBVXpCOzs7QUFDQSxpQkFBU29ELG1CQUFULENBQTZCcEQsR0FBN0IsRUFBa0NxRCxNQUFsQyxFQUEwQztBQUN4QyxjQUFNQyxJQUFJLEdBQUd0RCxHQUFHLENBQUMrQyxLQUFKLENBQVUsR0FBVixDQUFiO0FBQ0EsY0FBTVEsSUFBSSxHQUFHRixNQUFNLENBQUNOLEtBQVAsQ0FBYSxHQUFiLENBQWI7QUFDQSxjQUFNUyxJQUFJLEdBQUcsRUFBYjs7QUFDQSxlQUFLLElBQUlDLENBQUMsR0FBRyxDQUFSLEVBQVdDLENBQUMsR0FBR0osSUFBSSxDQUFDN0UsTUFBekIsRUFBaUNnRixDQUFDLEdBQUdDLENBQXJDLEVBQXdDRCxDQUFDLEVBQXpDLEVBQTZDO0FBQzNDLGdCQUFJSCxJQUFJLENBQUNHLENBQUQsQ0FBSixLQUFZLElBQWhCLEVBQXNCO0FBQ3BCRCxjQUFBQSxJQUFJLENBQUNSLEdBQUw7QUFDRCxhQUZELE1BRU8sSUFBSU0sSUFBSSxDQUFDRyxDQUFELENBQUosS0FBWSxHQUFoQixFQUFxQjtBQUMxQkQsY0FBQUEsSUFBSSxDQUFDekQsSUFBTCxDQUFVdUQsSUFBSSxDQUFDRyxDQUFELENBQWQ7QUFDRDtBQUNGOztBQUNELGVBQUssSUFBSUEsRUFBQyxHQUFHLENBQVIsRUFBV0MsRUFBQyxHQUFHSCxJQUFJLENBQUM5RSxNQUF6QixFQUFpQ2dGLEVBQUMsR0FBR0MsRUFBckMsRUFBd0NELEVBQUMsRUFBekMsRUFBNkM7QUFDM0MsZ0JBQUlGLElBQUksQ0FBQ0UsRUFBRCxDQUFKLEtBQVksSUFBaEIsRUFBc0I7QUFDcEJELGNBQUFBLElBQUksQ0FBQ1IsR0FBTDtBQUNELGFBRkQsTUFFTyxJQUFJTyxJQUFJLENBQUNFLEVBQUQsQ0FBSixLQUFZLEdBQWhCLEVBQXFCO0FBQzFCRCxjQUFBQSxJQUFJLENBQUN6RCxJQUFMLENBQVV3RCxJQUFJLENBQUNFLEVBQUQsQ0FBZDtBQUNEO0FBQ0Y7O0FBQ0QsaUJBQU9ELElBQUksQ0FBQ3ZDLElBQUwsQ0FBVSxHQUFWLENBQVA7QUFDRDs7QUFFRCxlQUFPLFVBQUFvQixJQUFJLEVBQUk7QUFDYixpQkFBTyw4QkFBZUEsSUFBZixJQUNIQSxJQURHLEdBRUhBLElBQUksQ0FBQzdCLE9BQUwsQ0FBYSw2QkFBYixFQUE0Q3lDLGdCQUE1QyxDQUZKO0FBR0QsU0FKRDtBQUtEOztBQUVELGVBQVNWLFlBQVQsQ0FBc0JGLElBQXRCLEVBQTRCO0FBQzFCLFlBQU1zQixHQUFHLEdBQUd2RyxxQkFBU3dHLGNBQVQsQ0FBd0JDLGtCQUF4QixDQUEyQyxFQUEzQyxDQUFaOztBQUNBLFlBQU1DLFlBQVksR0FBRzFHLHFCQUFTQyxhQUFULENBQXVCLE9BQXZCLENBQXJCOztBQUVBeUcsUUFBQUEsWUFBWSxDQUFDQyxXQUFiLEdBQTJCMUIsSUFBM0I7QUFDQXNCLFFBQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTM0YsV0FBVCxDQUFxQnlGLFlBQXJCO0FBRUEsZUFBT0EsWUFBWSxDQUFDaEMsS0FBcEI7QUFDRDtBQUNGOztBQUVELGFBQVNWLFdBQVQsQ0FBcUJGLFdBQXJCLEVBQWtDO0FBQ2hDLFVBQU1NLFFBQVEsR0FBRyxFQUFqQjtBQUNBTixNQUFBQSxXQUFXLENBQUM5RSxPQUFaLENBQW9CLFVBQUEwRixLQUFLLEVBQUk7QUFDM0I7QUFDQSxZQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBQ0QsWUFBSVIsS0FBSjs7QUFDQSxZQUFJO0FBQ0ZBLFVBQUFBLEtBQUssR0FBR1EsS0FBSyxDQUFDUixLQUFOLElBQWVRLEtBQUssQ0FBQ04sUUFBN0I7QUFDRCxTQUZELENBRUUsT0FBT3lDLENBQVAsRUFBVTtBQUNWeEIsOEJBQVFJLEdBQVIseUNBQTZDZixLQUFLLENBQUNDLElBQW5ELEdBQTJEa0MsQ0FBM0Q7O0FBQ0E7QUFDRDs7QUFFRCxZQUFJM0MsS0FBSyxJQUFJLHlCQUFPQSxLQUFQLE1BQWlCLFFBQTlCLEVBQXdDO0FBQ3RDLGNBQUk7QUFDRixtQ0FBUUEsS0FBSyxJQUFJLEVBQWpCLEVBQXFCbEYsT0FBckIsQ0FBNkJvRixRQUFRLENBQUN6QixJQUFULENBQWNtRSxJQUFkLENBQW1CMUMsUUFBbkIsQ0FBN0I7QUFDRCxXQUZELENBRUUsT0FBT3lDLENBQVAsRUFBVTtBQUNWeEIsZ0NBQVFJLEdBQVIsOENBQWtEZixLQUFLLENBQUNDLElBQXhELEdBQWdFa0MsQ0FBaEU7O0FBQ0E7QUFDRDtBQUNGLFNBUEQsTUFPTztBQUNMeEIsOEJBQVFJLEdBQVIsQ0FBWSxtQ0FBWjs7QUFDQTtBQUNEO0FBQ0YsT0F4QkQ7QUEwQkEsYUFBT3JCLFFBQVA7QUFDRDs7QUFFRCxhQUFTRCxVQUFULENBQW9CNEMsV0FBcEIsRUFBaUM7QUFDL0IsYUFBTztBQUNMaEosUUFBQUEsT0FBTyxFQUFFLG1CQUFNO0FBQ2IsY0FBTWlGLE9BQU8sR0FBRyxDQUFDK0QsV0FBVyxDQUFDQyxnQkFBWixJQUFnQyxFQUFqQyxFQUFxQ3JDLElBQXJEO0FBQ0EsaUJBQU9qSSxPQUFPLENBQUNnRixTQUFSLENBQWtCcUYsV0FBVyxDQUFDeEYsT0FBOUIsRUFBdUN5QixPQUF2QyxDQUFQO0FBQ0QsU0FKSTtBQUtMaUUsUUFBQUEsR0FBRyxFQUFFO0FBQUEsaUJBQU1GLFdBQVcsQ0FBQ25JLEtBQVosQ0FBa0I2RixnQkFBbEIsQ0FBbUMsS0FBbkMsQ0FBTjtBQUFBO0FBTEEsT0FBUDtBQU9EO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTMUgsU0FBVCxHQUFxQjtBQUNuQixTQUFPO0FBQ0wyRSxJQUFBQSxTQUFTLEVBQVRBLFNBREs7QUFFTGhFLElBQUFBLElBQUksRUFBRTtBQUNKd0osTUFBQUEsUUFBUSxFQUFSQTtBQURJO0FBRkQsR0FBUDs7QUFPQSxXQUFTQSxRQUFULENBQWtCQyxPQUFsQixFQUEyQjtBQUN6QixhQUFTOUUsTUFBVCxDQUFnQlksR0FBaEIsRUFBcUI7QUFDbkIsVUFBSSx5QkFBVWtFLE9BQU8sQ0FBQ0YsR0FBbEIsQ0FBSixFQUE0QjtBQUMxQixlQUFPbkosT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDRDs7QUFDRCxhQUFPRCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JvSixPQUFPLENBQUNGLEdBQXhCLEVBQ0pqSixJQURJLENBQ0MsVUFBQWtGLEVBQUU7QUFBQSxlQUNOLE9BQU9ELEdBQVAsS0FBZSxVQUFmLEdBQTRCQSxHQUFHLENBQUNDLEVBQUQsQ0FBL0IsR0FBc0MsNEJBQWFBLEVBQWIsRUFBaUI5RixVQUFVLENBQUNNLElBQVgsQ0FBZ0JDLE9BQWpDLENBRGhDO0FBQUEsT0FESCxFQUlKSyxJQUpJLENBSUMsVUFBQXNCLElBQUk7QUFBQSxlQUFJLHlCQUFVQSxJQUFWLEVBQWdCLHdCQUFTNkgsT0FBTyxDQUFDRixHQUFqQixDQUFoQixDQUFKO0FBQUEsT0FKTCxFQUtKakosSUFMSSxDQU1ILFVBQUFtRixPQUFPO0FBQUEsZUFDTCxJQUFJckYsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVXFKLE1BQVYsRUFBcUI7QUFDL0JELFVBQUFBLE9BQU8sQ0FBQ0UsTUFBUixHQUFpQnRKLE9BQWpCO0FBQ0FvSixVQUFBQSxPQUFPLENBQUNHLE9BQVIsR0FBa0JGLE1BQWxCO0FBQ0FELFVBQUFBLE9BQU8sQ0FBQ0YsR0FBUixHQUFjOUQsT0FBZDtBQUNELFNBSkQsQ0FESztBQUFBLE9BTkosQ0FBUDtBQWFEOztBQUVELFdBQU87QUFDTGQsTUFBQUEsTUFBTSxFQUFOQTtBQURLLEtBQVA7QUFHRDs7QUFFRCxXQUFTWCxTQUFULENBQW1COUQsSUFBbkIsRUFBeUI7QUFDdkIsUUFBSSxFQUFFQSxJQUFJLFlBQVkySixPQUFsQixDQUFKLEVBQWdDO0FBQzlCLGFBQU96SixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JILElBQWhCLENBQVA7QUFDRDs7QUFFRCxXQUFPNEosZ0JBQWdCLENBQUM1SixJQUFELENBQWhCLENBQXVCSSxJQUF2QixDQUE0QixZQUFNO0FBQ3ZDLFVBQUlKLElBQUksWUFBWTZKLGdCQUFwQixFQUFzQztBQUNwQyxlQUFPUCxRQUFRLENBQUN0SixJQUFELENBQVIsQ0FBZXlFLE1BQWYsRUFBUDtBQUNEOztBQUNELGFBQU92RSxPQUFPLENBQUMyRixHQUFSLENBQVksdUJBQVE3RixJQUFJLENBQUN3RCxVQUFiLEVBQXlCc0MsR0FBekIsQ0FBNkIsVUFBQTNDLEtBQUs7QUFBQSxlQUFJVyxTQUFTLENBQUNYLEtBQUQsQ0FBYjtBQUFBLE9BQWxDLENBQVosQ0FBUDtBQUNELEtBTE0sQ0FBUDs7QUFPQSxhQUFTeUcsZ0JBQVQsQ0FBMEJ2SixFQUExQixFQUE4QjtBQUM1QixVQUFNeUosVUFBVSxHQUFHekosRUFBRSxDQUFDVyxLQUFILENBQVM2RixnQkFBVCxDQUEwQixZQUExQixDQUFuQjs7QUFFQSxVQUFJLENBQUNpRCxVQUFMLEVBQWlCO0FBQ2YsZUFBTzVKLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsRUFBaEIsQ0FBUDtBQUNEOztBQUVELGFBQU92QixPQUFPLENBQ1hnRixTQURJLENBQ01nRyxVQUROLEVBRUoxSixJQUZJLENBRUMsVUFBQTJKLE9BQU8sRUFBSTtBQUNmMUosUUFBQUEsRUFBRSxDQUFDVyxLQUFILENBQVNnSixXQUFULENBQXFCLFlBQXJCLEVBQW1DRCxPQUFuQyxFQUE0QzFKLEVBQUUsQ0FBQ1csS0FBSCxDQUFTaUosbUJBQVQsQ0FBNkIsWUFBN0IsQ0FBNUM7QUFDRCxPQUpJLEVBS0o3SixJQUxJLENBS0M7QUFBQSxlQUFNQyxFQUFOO0FBQUEsT0FMRCxDQUFQO0FBTUQ7QUFDRjtBQUNGOztlQUVjYixVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIxIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLyoqXG4gKiBUaGlzIGZpbGUgaXMgY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3RzYXllbi9kb20tdG8taW1hZ2VcbiAqIE1vZGlmaWVkIGJ5IGhlc2hhbjAxMzEgdG8gYWxsb3cgbG9hZGluZyBleHRlcm5hbCBzdHlsZXNoZWV0cyBhbmQgaW5saW5lIHdlYmZvbnRzXG4gKi9cblxuaW1wb3J0IHdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBkb2N1bWVudCBmcm9tICdnbG9iYWwvZG9jdW1lbnQnO1xuaW1wb3J0IGNvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHN2Z1RvTWluaURhdGFVUkkgZnJvbSAnbWluaS1zdmctZGF0YS11cmknO1xuaW1wb3J0IHtJTUFHRV9FWFBPUlRfRVJST1JTfSBmcm9tICdjb25zdGFudHMvdXNlci1mZWVkYmFja3MnO1xuaW1wb3J0IHtcbiAgY2FudmFzVG9CbG9iLFxuICBlc2NhcGUsXG4gIGVzY2FwZVhodG1sLFxuICBkZWxheSxcbiAgcHJvY2Vzc0Nsb25lLFxuICBhc0FycmF5LFxuICBtYWtlSW1hZ2UsXG4gIG1pbWVUeXBlLFxuICBkYXRhQXNVcmwsXG4gIGlzRGF0YVVybCxcbiAgaXNTcmNBc0RhdGFVcmwsXG4gIHJlc29sdmVVcmwsXG4gIGdldFdpZHRoLFxuICBnZXRIZWlnaHQsXG4gIGdldEFuZEVuY29kZVxufSBmcm9tICcuL2RvbS11dGlscyc7XG5cbmNvbnN0IGlubGluZXIgPSBuZXdJbmxpbmVyKCk7XG5jb25zdCBmb250RmFjZXMgPSBuZXdGb250RmFjZXMoKTtcbmNvbnN0IGltYWdlcyA9IG5ld0ltYWdlcygpO1xuLy8gRGVmYXVsdCBpbXBsIG9wdGlvbnNcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAvLyBEZWZhdWx0IGlzIHRvIGZhaWwgb24gZXJyb3IsIG5vIHBsYWNlaG9sZGVyXG4gIGltYWdlUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgLy8gRGVmYXVsdCBjYWNoZSBidXN0IGlzIGZhbHNlLCBpdCB3aWxsIHVzZSB0aGUgY2FjaGVcbiAgY2FjaGVCdXN0OiBmYWxzZVxufTtcblxuY29uc3QgZG9tdG9pbWFnZSA9IHtcbiAgdG9TdmcsXG4gIHRvUG5nLFxuICB0b0pwZWcsXG4gIHRvQmxvYixcbiAgdG9QaXhlbERhdGEsXG4gIGltcGw6IHtcbiAgICBmb250RmFjZXMsXG4gICAgaW1hZ2VzLFxuICAgIGlubGluZXIsXG4gICAgb3B0aW9uczoge31cbiAgfVxufTtcblxuLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIFNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwYXNzZWQgbm9kZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dFxuICAgKiAgICAgICAgICAoZXhjbHVkaW5nIG5vZGUgbWVhbnMgZXhjbHVkaW5nIGl0J3MgY2hpbGRyZW4gYXMgd2VsbCkuIE5vdCBjYWxsZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmJnY29sb3JdIC0gY29sb3IgZm9yIHRoZSBiYWNrZ3JvdW5kLCBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlLlxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMud2lkdGhdIC0gd2lkdGggdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIC0gaGVpZ2h0IHRvIGJlIGFwcGxpZWQgdG8gbm9kZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc3R5bGVdIC0gYW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIG5vZGUncyBzdHlsZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMucXVhbGl0eV0gLSBhIE51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5IChhcHBsaWNhYmxlIHRvIEpQRUcgb25seSksXG4gICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDEuMC5cbiAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyXSAtIGRhdGFVUkwgdG8gdXNlIGFzIGEgcGxhY2Vob2xkZXIgZm9yIGZhaWxlZCBpbWFnZXMsIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGZhaWwgZmFzdCBvbiBpbWFnZXMgd2UgY2FuJ3QgZmV0Y2hcbiAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuY2FjaGVCdXN0XSAtIHNldCB0byB0cnVlIHRvIGNhY2hlIGJ1c3QgYnkgYXBwZW5kaW5nIHRoZSB0aW1lIHRvIHRoZSByZXF1ZXN0IHVybFxuICAgICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFNWRyBpbWFnZSBkYXRhIFVSTFxuICAgICogKi9cbmZ1bmN0aW9uIHRvU3ZnKG5vZGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGNvcHlPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgLnRoZW4obmQgPT4gY2xvbmVOb2RlKG5kLCBvcHRpb25zLmZpbHRlciwgdHJ1ZSkpXG4gICAgLnRoZW4oZW1iZWRGb250cylcbiAgICAudGhlbihpbmxpbmVJbWFnZXMpXG4gICAgLnRoZW4oYXBwbHlPcHRpb25zKVxuICAgIC50aGVuKGNsb25lID0+XG4gICAgICBtYWtlU3ZnRGF0YVVyaShjbG9uZSwgb3B0aW9ucy53aWR0aCB8fCBnZXRXaWR0aChub2RlKSwgb3B0aW9ucy5oZWlnaHQgfHwgZ2V0SGVpZ2h0KG5vZGUpKVxuICAgICk7XG5cbiAgZnVuY3Rpb24gYXBwbHlPcHRpb25zKGNsb25lKSB7XG4gICAgaWYgKG9wdGlvbnMuYmdjb2xvcikgY2xvbmUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iZ2NvbG9yO1xuXG4gICAgaWYgKG9wdGlvbnMud2lkdGgpIGNsb25lLnN0eWxlLndpZHRoID0gYCR7b3B0aW9ucy53aWR0aH1weGA7XG4gICAgaWYgKG9wdGlvbnMuaGVpZ2h0KSBjbG9uZS5zdHlsZS5oZWlnaHQgPSBgJHtvcHRpb25zLmhlaWdodH1weGA7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZSlcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMuc3R5bGUpLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICBjbG9uZS5zdHlsZVtwcm9wZXJ0eV0gPSBvcHRpb25zLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBVaW50OEFycmF5IGNvbnRhaW5pbmcgUkdCQSBwaXhlbCBkYXRhLlxuICogKi9cbmZ1bmN0aW9uIHRvUGl4ZWxEYXRhKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihcbiAgICBjYW52YXMgPT4gY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIGdldFdpZHRoKG5vZGUpLCBnZXRIZWlnaHQobm9kZSkpLmRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBkYXRhIFVSTFxuICogKi9cbmZ1bmN0aW9uIHRvUG5nKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihjYW52YXMgPT4gY2FudmFzLnRvRGF0YVVSTCgpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIEpQRUcgaW1hZ2UgZGF0YSBVUkxcbiAqICovXG5mdW5jdGlvbiB0b0pwZWcobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucykudGhlbihjYW52YXMgPT4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIG9wdGlvbnMucXVhbGl0eSB8fCAxLjApKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBibG9iXG4gKiAqL1xuZnVuY3Rpb24gdG9CbG9iKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihjYW52YXNUb0Jsb2IpO1xufVxuXG5mdW5jdGlvbiBjb3B5T3B0aW9ucyhvcHRpb25zKSB7XG4gIC8vIENvcHkgb3B0aW9ucyB0byBpbXBsIG9wdGlvbnMgZm9yIHVzZSBpbiBpbXBsXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyID09PSAndW5kZWZpbmVkJykge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPSBkZWZhdWx0T3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyO1xuICB9IGVsc2Uge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXI7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMuY2FjaGVCdXN0ID09PSAndW5kZWZpbmVkJykge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmNhY2hlQnVzdCA9IGRlZmF1bHRPcHRpb25zLmNhY2hlQnVzdDtcbiAgfSBlbHNlIHtcbiAgICBkb210b2ltYWdlLmltcGwub3B0aW9ucy5jYWNoZUJ1c3QgPSBvcHRpb25zLmNhY2hlQnVzdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmF3KGRvbU5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvU3ZnKGRvbU5vZGUsIG9wdGlvbnMpXG4gICAgLnRoZW4obWFrZUltYWdlKVxuICAgIC50aGVuKGRlbGF5KDEwMCkpXG4gICAgLnRoZW4oaW1hZ2UgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gbmV3Q2FudmFzKGRvbU5vZGUpO1xuICAgICAgY2FudmFzLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcbiAgICAgIHJldHVybiBjYW52YXM7XG4gICAgfSk7XG5cbiAgZnVuY3Rpb24gbmV3Q2FudmFzKGROb2RlKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLndpZHRoID0gb3B0aW9ucy53aWR0aCB8fCBnZXRXaWR0aChkTm9kZSk7XG4gICAgY2FudmFzLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0IHx8IGdldEhlaWdodChkTm9kZSk7XG5cbiAgICBpZiAob3B0aW9ucy5iZ2NvbG9yKSB7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJnY29sb3I7XG4gICAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lTm9kZShub2RlLCBmaWx0ZXIsIHJvb3QpIHtcbiAgaWYgKCFyb290ICYmIGZpbHRlciAmJiAhZmlsdGVyKG5vZGUpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKVxuICAgIC50aGVuKG1ha2VOb2RlQ29weSlcbiAgICAudGhlbihjbG9uZSA9PiBjbG9uZUNoaWxkcmVuKG5vZGUsIGNsb25lLCBmaWx0ZXIpKVxuICAgIC50aGVuKGNsb25lID0+IHByb2Nlc3NDbG9uZShub2RlLCBjbG9uZSkpO1xuXG4gIGZ1bmN0aW9uIG1ha2VOb2RlQ29weShuZCkge1xuICAgIGlmIChuZCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCkge1xuICAgICAgcmV0dXJuIG1ha2VJbWFnZShuZC50b0RhdGFVUkwoKSk7XG4gICAgfVxuICAgIHJldHVybiBuZC5jbG9uZU5vZGUoZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbkluT3JkZXIocGFyZW50LCBhcnJDaGlsZHJlbiwgZmx0KSB7XG4gICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBhcnJDaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGRvbmUgPSBkb25lXG4gICAgICAgIC50aGVuKCgpID0+IGNsb25lTm9kZShjaGlsZCwgZmx0KSlcbiAgICAgICAgLnRoZW4oY2hpbGRDbG9uZSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkQ2xvbmUpIHtcbiAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjaGlsZENsb25lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbihvcmlnaW5hbCwgY2xvbmUsIGZsdCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gb3JpZ2luYWwuY2hpbGROb2RlcztcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsb25lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVDaGlsZHJlbkluT3JkZXIoY2xvbmUsIGFzQXJyYXkoY2hpbGRyZW4pLCBmbHQpLnRoZW4oKCkgPT4gY2xvbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtYmVkRm9udHMobm9kZSkge1xuICByZXR1cm4gZm9udEZhY2VzLnJlc29sdmVBbGwoKS50aGVuKGNzc1RleHQgPT4ge1xuICAgIGNvbnN0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgbm9kZS5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3NUZXh0KSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbmxpbmVJbWFnZXMobm9kZSkge1xuICByZXR1cm4gaW1hZ2VzLmlubGluZUFsbChub2RlKS50aGVuKCgpID0+IG5vZGUpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3ZnRGF0YVVyaShub2RlLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSkudGhlbihuZCA9PiB7XG4gICAgbmQuc2V0QXR0cmlidXRlKCd4bWxucycsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFN0cmluZyA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKG5kKTtcblxuICAgIGNvbnN0IHhodG1sID0gZXNjYXBlWGh0bWwoc2VyaWFsaXplZFN0cmluZyk7XG4gICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IGA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPiR7eGh0bWx9PC9mb3JlaWduT2JqZWN0PmA7XG4gICAgY29uc3Qgc3ZnU3RyID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIke2hlaWdodH1cIj4ke2ZvcmVpZ25PYmplY3R9PC9zdmc+YDtcblxuICAgIC8vIE9wdGltaXppbmcgU1ZHcyBpbiBkYXRhIFVSSXNcbiAgICAvLyBzZWUgaHR0cHM6Ly9jb2RlcGVuLmlvL3RpZ3QvcG9zdC9vcHRpbWl6aW5nLXN2Z3MtaW4tZGF0YS11cmlzXG4gICAgLy8gdGhlIGJlc3Qgd2F5IG9mIGVuY29kaW5nIFNWRyBpbiBhIGRhdGE6IFVSSSBpcyBkYXRhOmltYWdlL3N2Zyt4bWwsW2FjdHVhbCBkYXRhXS5cbiAgICAvLyBXZSBkb27igJl0IG5lZWQgdGhlIDtjaGFyc2V0PXV0Zi04IHBhcmFtZXRlciBiZWNhdXNlIHRoZSBnaXZlbiBTVkcgaXMgQVNDSUkuXG4gICAgcmV0dXJuIHN2Z1RvTWluaURhdGFVUkkoc3ZnU3RyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5ld0lubGluZXIoKSB7XG4gIGNvbnN0IFVSTF9SRUdFWCA9IC91cmxcXChbJ1wiXT8oW14nXCJdKz8pWydcIl0/XFwpL2c7XG5cbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgc2hvdWxkUHJvY2VzcyxcbiAgICBpbXBsOiB7XG4gICAgICByZWFkVXJscyxcbiAgICAgIGlubGluZVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzaG91bGRQcm9jZXNzKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcuc2VhcmNoKFVSTF9SRUdFWCkgIT09IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFVybHMoc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSBVUkxfUkVHRVguZXhlYyhzdHJpbmcpKSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0LnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmZpbHRlcih1cmwgPT4ge1xuICAgICAgcmV0dXJuICFpc0RhdGFVcmwodXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVybEFzUmVnZXgodXJsMCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAodXJsXFxcXChbXFwnXCJdPykoJHtlc2NhcGUodXJsMCl9KShbXFwnXCJdP1xcXFwpKWAsICdnJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmUoc3RyaW5nLCB1cmwsIGJhc2VVcmwsIGdldCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXJsKVxuICAgICAgLnRoZW4odWwgPT4gKGJhc2VVcmwgPyByZXNvbHZlVXJsKHVsLCBiYXNlVXJsKSA6IHVsKSlcbiAgICAgIC50aGVuKHVsID0+ICh0eXBlb2YgZ2V0ID09PSAnZnVuY3Rpb24nID8gZ2V0KHVsKSA6IGdldEFuZEVuY29kZSh1bCwgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMpKSlcbiAgICAgIC50aGVuKGRhdGEgPT4gZGF0YUFzVXJsKGRhdGEsIG1pbWVUeXBlKHVybCkpKVxuICAgICAgLnRoZW4oZGF0YVVybCA9PiBzdHJpbmcucmVwbGFjZSh1cmxBc1JlZ2V4KHVybCksIGAkMSR7ZGF0YVVybH0kM2ApKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlubGluZUFsbChzdHJpbmcsIGJhc2VVcmwsIGdldCkge1xuICAgIGlmICghc2hvdWxkUHJvY2VzcyhzdHJpbmcpIHx8IGlzU3JjQXNEYXRhVXJsKHN0cmluZykpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdHJpbmcpXG4gICAgICAudGhlbihyZWFkVXJscylcbiAgICAgIC50aGVuKHVybHMgPT4ge1xuICAgICAgICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZShzdHJpbmcpO1xuICAgICAgICB1cmxzLmZvckVhY2godXJsID0+IHtcbiAgICAgICAgICBkb25lID0gZG9uZS50aGVuKHN0ciA9PiBpbmxpbmUoc3RyLCB1cmwsIGJhc2VVcmwsIGdldCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbmU7XG4gICAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXdGb250RmFjZXMoKSB7XG4gIHJldHVybiB7XG4gICAgcmVzb2x2ZUFsbCxcbiAgICBpbXBsOiB7cmVhZEFsbH1cbiAgfTtcblxuICBmdW5jdGlvbiByZXNvbHZlQWxsKCkge1xuICAgIHJldHVybiByZWFkQWxsKClcbiAgICAgIC50aGVuKHdlYkZvbnRzID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHdlYkZvbnRzLm1hcCh3ZWJGb250ID0+IHdlYkZvbnQucmVzb2x2ZSgpKSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oY3NzU3RyaW5ncyA9PiBjc3NTdHJpbmdzLmpvaW4oJ1xcbicpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBbGwoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhc0FycmF5KGRvY3VtZW50LnN0eWxlU2hlZXRzKSlcbiAgICAgIC50aGVuKGxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzKVxuICAgICAgLnRoZW4oZ2V0Q3NzUnVsZXMpXG4gICAgICAudGhlbihzZWxlY3RXZWJGb250UnVsZXMpXG4gICAgICAudGhlbihydWxlcyA9PiBydWxlcy5tYXAobmV3V2ViRm9udCkpO1xuXG4gICAgZnVuY3Rpb24gc2VsZWN0V2ViRm9udFJ1bGVzKGNzc1J1bGVzKSB7XG4gICAgICByZXR1cm4gY3NzUnVsZXNcbiAgICAgICAgLmZpbHRlcihydWxlID0+IHJ1bGUudHlwZSA9PT0gd2luZG93LkNTU1J1bGUuRk9OVF9GQUNFX1JVTEUpXG4gICAgICAgIC5maWx0ZXIocnVsZSA9PiBpbmxpbmVyLnNob3VsZFByb2Nlc3MocnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzKHN0eWxlU2hlZXRzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgIHN0eWxlU2hlZXRzLm1hcChzaGVldCA9PiB7XG4gICAgICAgICAgaWYgKHNoZWV0LmhyZWYpIHtcbiAgICAgICAgICAgIC8vIGNsb3VkZm9udCBkb2Vzbid0IGhhdmUgYWxsb3cgb3JpZ2luIGhlYWRlciBwcm9wZXJseSBzZXRcbiAgICAgICAgICAgIC8vIGVycm9yIHJlc3BvbnNlIHdpbGwgcmVtYWluIGluIGNhY2hlXG4gICAgICAgICAgICBjb25zdCBjYWNoZSA9IHNoZWV0LmhyZWYuaW5jbHVkZXMoJ3ViZXItZm9udHMnKSA/ICduby1jYWNoZScgOiAnZGVmYXVsdCc7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93XG4gICAgICAgICAgICAgIC5mZXRjaChzaGVldC5ocmVmLCB7Y3JlZGVudGlhbHM6ICdvbWl0JywgY2FjaGV9KVxuICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS50ZXh0KCkpXG4gICAgICAgICAgICAgIC50aGVuKHNldEJhc2VIcmVmKHNoZWV0LmhyZWYpKVxuICAgICAgICAgICAgICAudGhlbih0b1N0eWxlU2hlZXQpXG4gICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhbnkgZXJyb3IgdGhhdCBvY2N1cnJlZCBpbiBhbnkgb2YgdGhlIHByZXZpb3VzXG4gICAgICAgICAgICAgICAgLy8gcHJvbWlzZXMgaW4gdGhlIGNoYWluLiBzdHlsZXNoZWV0IGZhaWxlZCB0byBsb2FkIHNob3VsZCBub3Qgc3RvcFxuICAgICAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzLCBoZW5jZSByZXN1bHQgaW4gb25seSBhIHdhcm5pbmcsIGluc3RlYWQgb2YgcmVqZWN0XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKElNQUdFX0VYUE9SVF9FUlJPUlMuc3R5bGVTaGVldCwgc2hlZXQuaHJlZik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNoZWV0KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGZ1bmN0aW9uIHNldEJhc2VIcmVmKGJhc2UpIHtcbiAgICAgICAgYmFzZSA9IGJhc2Uuc3BsaXQoJy8nKTtcbiAgICAgICAgYmFzZS5wb3AoKTtcbiAgICAgICAgYmFzZSA9IGJhc2Uuam9pbignLycpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZEJhc2VIcmVmVG9VcmwobWF0Y2gsIHAxKSB7XG4gICAgICAgICAgY29uc3QgdXJsID0gL15odHRwL2kudGVzdChwMSkgPyBwMSA6IGNvbmNhdEFuZFJlc29sdmVVcmwoYmFzZSwgcDEpO1xuICAgICAgICAgIHJldHVybiBgdXJsKCcke3VybH0nKWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3VyY2U6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NzYyMzEvMzc4Njg1NlxuICAgICAgICBmdW5jdGlvbiBjb25jYXRBbmRSZXNvbHZlVXJsKHVybCwgY29uY2F0KSB7XG4gICAgICAgICAgY29uc3QgdXJsMSA9IHVybC5zcGxpdCgnLycpO1xuICAgICAgICAgIGNvbnN0IHVybDIgPSBjb25jYXQuc3BsaXQoJy8nKTtcbiAgICAgICAgICBjb25zdCB1cmwzID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB1cmwxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKHVybDFbaV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgdXJsMy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsMVtpXSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgIHVybDMucHVzaCh1cmwxW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB1cmwyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKHVybDJbaV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgdXJsMy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsMltpXSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgIHVybDMucHVzaCh1cmwyW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVybDMuam9pbignLycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHQgPT4ge1xuICAgICAgICAgIHJldHVybiBpc1NyY0FzRGF0YVVybCh0ZXh0KVxuICAgICAgICAgICAgPyB0ZXh0XG4gICAgICAgICAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdG9TdHlsZVNoZWV0KHRleHQpIHtcbiAgICAgICAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCcnKTtcbiAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblxuICAgICAgICBzdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuXG4gICAgICAgIHJldHVybiBzdHlsZUVsZW1lbnQuc2hlZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q3NzUnVsZXMoc3R5bGVTaGVldHMpIHtcbiAgICAgIGNvbnN0IGNzc1J1bGVzID0gW107XG4gICAgICBzdHlsZVNoZWV0cy5mb3JFYWNoKHNoZWV0ID0+IHtcbiAgICAgICAgLy8gdHJ5Li4uY2F0Y2ggYmVjYXVzZSBicm93c2VyIG1heSBub3QgYWJsZSB0byBlbnVtZXJhdGUgcnVsZXMgZm9yIGNyb3NzLWRvbWFpbiBzaGVldHNcbiAgICAgICAgaWYgKCFzaGVldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcnVsZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAnQ2FuJ3QgcmVhZCB0aGUgY3NzIHJ1bGVzIG9mOiAke3NoZWV0LmhyZWZ9YCwgZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bGVzICYmIHR5cGVvZiBydWxlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXNBcnJheShydWxlcyB8fCBbXSkuZm9yRWFjaChjc3NSdWxlcy5wdXNoLmJpbmQoY3NzUnVsZXMpKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3Igd2hpbGUgcmVhZGluZyBDU1MgcnVsZXMgZnJvbSAke3NoZWV0LmhyZWZ9YCwgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRDc3NSdWxlcyBjYW4gbm90IGZpbmQgY3NzUnVsZXMnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3NzUnVsZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV3V2ViRm9udCh3ZWJGb250UnVsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSAod2ViRm9udFJ1bGUucGFyZW50U3R5bGVTaGVldCB8fCB7fSkuaHJlZjtcbiAgICAgICAgICByZXR1cm4gaW5saW5lci5pbmxpbmVBbGwod2ViRm9udFJ1bGUuY3NzVGV4dCwgYmFzZVVybCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNyYzogKCkgPT4gd2ViRm9udFJ1bGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnc3JjJylcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5ld0ltYWdlcygpIHtcbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgaW1wbDoge1xuICAgICAgbmV3SW1hZ2VcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gbmV3SW1hZ2UoZWxlbWVudCkge1xuICAgIGZ1bmN0aW9uIGlubGluZShnZXQpIHtcbiAgICAgIGlmIChpc0RhdGFVcmwoZWxlbWVudC5zcmMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZWxlbWVudC5zcmMpXG4gICAgICAgIC50aGVuKHVsID0+XG4gICAgICAgICAgdHlwZW9mIGdldCA9PT0gJ2Z1bmN0aW9uJyA/IGdldCh1bCkgOiBnZXRBbmRFbmNvZGUodWwsIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zKVxuICAgICAgICApXG4gICAgICAgIC50aGVuKGRhdGEgPT4gZGF0YUFzVXJsKGRhdGEsIG1pbWVUeXBlKGVsZW1lbnQuc3JjKSkpXG4gICAgICAgIC50aGVuKFxuICAgICAgICAgIGRhdGFVcmwgPT5cbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgZWxlbWVudC5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICBlbGVtZW50Lm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlubGluZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVBbGwobm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5saW5lQmFja2dyb3VuZChub2RlKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3SW1hZ2Uobm9kZSkuaW5saW5lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYXNBcnJheShub2RlLmNoaWxkTm9kZXMpLm1hcChjaGlsZCA9PiBpbmxpbmVBbGwoY2hpbGQpKSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBpbmxpbmVCYWNrZ3JvdW5kKG5kKSB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZCcpO1xuXG4gICAgICBpZiAoIWJhY2tncm91bmQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmxpbmVyXG4gICAgICAgIC5pbmxpbmVBbGwoYmFja2dyb3VuZClcbiAgICAgICAgLnRoZW4oaW5saW5lZCA9PiB7XG4gICAgICAgICAgbmQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQnLCBpbmxpbmVkLCBuZC5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KCdiYWNrZ3JvdW5kJykpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiBuZCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRvbXRvaW1hZ2U7XG4iXX0=
|
|
552
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb20tdG8taW1hZ2UuanMiXSwibmFtZXMiOlsiaW5saW5lciIsIm5ld0lubGluZXIiLCJmb250RmFjZXMiLCJuZXdGb250RmFjZXMiLCJpbWFnZXMiLCJuZXdJbWFnZXMiLCJkZWZhdWx0T3B0aW9ucyIsImltYWdlUGxhY2Vob2xkZXIiLCJ1bmRlZmluZWQiLCJjYWNoZUJ1c3QiLCJkb210b2ltYWdlIiwidG9TdmciLCJ0b1BuZyIsInRvSnBlZyIsInRvQmxvYiIsInRvUGl4ZWxEYXRhIiwiaW1wbCIsIm9wdGlvbnMiLCJub2RlIiwiY29weU9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJuZCIsImNsb25lTm9kZSIsImZpbHRlciIsImVtYmVkRm9udHMiLCJpbmxpbmVJbWFnZXMiLCJhcHBseU9wdGlvbnMiLCJjbG9uZSIsIm1ha2VTdmdEYXRhVXJpIiwid2lkdGgiLCJoZWlnaHQiLCJiZ2NvbG9yIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BlcnR5IiwiZHJhdyIsImNhbnZhcyIsImdldENvbnRleHQiLCJnZXRJbWFnZURhdGEiLCJkYXRhIiwidG9EYXRhVVJMIiwicXVhbGl0eSIsImNhbnZhc1RvQmxvYiIsImRvbU5vZGUiLCJtYWtlSW1hZ2UiLCJpbWFnZSIsIm5ld0NhbnZhcyIsImRyYXdJbWFnZSIsImROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsIndpbmRvdyIsIkhUTUxDYW52YXNFbGVtZW50IiwiY2xvbmVDaGlsZHJlbkluT3JkZXIiLCJwYXJlbnQiLCJhcnJDaGlsZHJlbiIsImZsdCIsImRvbmUiLCJjaGlsZCIsImNoaWxkQ2xvbmUiLCJhcHBlbmRDaGlsZCIsIm9yaWdpbmFsIiwiY2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwicmVzb2x2ZUFsbCIsImNzc1RleHQiLCJzdHlsZU5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImlubGluZUFsbCIsInNldEF0dHJpYnV0ZSIsInNlcmlhbGl6ZWRTdHJpbmciLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJ4aHRtbCIsImZvcmVpZ25PYmplY3QiLCJzdmdTdHIiLCJVUkxfUkVHRVgiLCJzaG91bGRQcm9jZXNzIiwicmVhZFVybHMiLCJpbmxpbmUiLCJzdHJpbmciLCJzZWFyY2giLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwidXJsIiwidXJsQXNSZWdleCIsInVybDAiLCJSZWdFeHAiLCJiYXNlVXJsIiwiZ2V0IiwidWwiLCJkYXRhVXJsIiwicmVwbGFjZSIsInVybHMiLCJzdHIiLCJyZWFkQWxsIiwid2ViRm9udHMiLCJhbGwiLCJtYXAiLCJ3ZWJGb250IiwiY3NzU3RyaW5ncyIsImpvaW4iLCJzdHlsZVNoZWV0cyIsImxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJjc3NSdWxlcyIsInJ1bGUiLCJ0eXBlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNoZWV0IiwiaHJlZiIsImNhY2hlIiwiaW5jbHVkZXMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJ0ZXh0Iiwic2V0QmFzZUhyZWYiLCJ0b1N0eWxlU2hlZXQiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsIklNQUdFX0VYUE9SVF9FUlJPUlMiLCJzdHlsZVNoZWV0IiwibG9nIiwiYmFzZSIsInNwbGl0IiwicG9wIiwiYWRkQmFzZUhyZWZUb1VybCIsInAxIiwidGVzdCIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJjb25jYXQiLCJ1cmwxIiwidXJsMiIsInVybDMiLCJpIiwibCIsImRvYyIsImltcGxlbWVudGF0aW9uIiwiY3JlYXRlSFRNTERvY3VtZW50Iiwic3R5bGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJib2R5IiwiZSIsImJpbmQiLCJ3ZWJGb250UnVsZSIsInBhcmVudFN0eWxlU2hlZXQiLCJzcmMiLCJuZXdJbWFnZSIsImVsZW1lbnQiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwiRWxlbWVudCIsImlubGluZUJhY2tncm91bmQiLCJIVE1MSW1hZ2VFbGVtZW50IiwiYmFja2dyb3VuZCIsImlubGluZWQiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5UHJpb3JpdHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBeUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQTlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXlCQSxJQUFNQSxPQUFPLEdBQUdDLFVBQVUsRUFBMUI7QUFDQSxJQUFNQyxTQUFTLEdBQUdDLFlBQVksRUFBOUI7QUFDQSxJQUFNQyxNQUFNLEdBQUdDLFNBQVMsRUFBeEIsQyxDQUNBOztBQUNBLElBQU1DLGNBQWMsR0FBRztBQUNyQjtBQUNBQyxFQUFBQSxnQkFBZ0IsRUFBRUMsU0FGRztBQUdyQjtBQUNBQyxFQUFBQSxTQUFTLEVBQUU7QUFKVSxDQUF2QjtBQU9BLElBQU1DLFVBQVUsR0FBRztBQUNqQkMsRUFBQUEsS0FBSyxFQUFMQSxLQURpQjtBQUVqQkMsRUFBQUEsS0FBSyxFQUFMQSxLQUZpQjtBQUdqQkMsRUFBQUEsTUFBTSxFQUFOQSxNQUhpQjtBQUlqQkMsRUFBQUEsTUFBTSxFQUFOQSxNQUppQjtBQUtqQkMsRUFBQUEsV0FBVyxFQUFYQSxXQUxpQjtBQU1qQkMsRUFBQUEsSUFBSSxFQUFFO0FBQ0pkLElBQUFBLFNBQVMsRUFBVEEsU0FESTtBQUVKRSxJQUFBQSxNQUFNLEVBQU5BLE1BRkk7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UDs7QUFPQSxhQUFTeUcsZ0JBQVQsQ0FBMEJ2SixFQUExQixFQUE4QjtBQUM1QixVQUFNeUosVUFBVSxHQUFHekosRUFBRSxDQUFDVyxLQUFILENBQVM2RixnQkFBVCxDQUEwQixZQUExQixDQUFuQjs7QUFFQSxVQUFJLENBQUNpRCxVQUFMLEVBQWlCO0FBQ2YsZUFBTzVKLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsRUFBaEIsQ0FBUDtBQUNEOztBQUVELGFBQU92QixPQUFPLENBQ1hnRixTQURJLENBQ01nRyxVQUROLEVBRUoxSixJQUZJLENBRUMsVUFBQTJKLE9BQU8sRUFBSTtBQUNmMUosUUFBQUEsRUFBRSxDQUFDVyxLQUFILENBQVNnSixXQUFULENBQXFCLFlBQXJCLEVBQW1DRCxPQUFuQyxFQUE0QzFKLEVBQUUsQ0FBQ1csS0FBSCxDQUFTaUosbUJBQVQsQ0FBNkIsWUFBN0IsQ0FBNUM7QUFDRCxPQUpJLEVBS0o3SixJQUxJLENBS0M7QUFBQSxlQUFNQyxFQUFOO0FBQUEsT0FMRCxDQUFQO0FBTUQ7QUFDRjtBQUNGOztlQUVjYixVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLyoqXG4gKiBUaGlzIGZpbGUgaXMgY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3RzYXllbi9kb20tdG8taW1hZ2VcbiAqIE1vZGlmaWVkIGJ5IGhlc2hhbjAxMzEgdG8gYWxsb3cgbG9hZGluZyBleHRlcm5hbCBzdHlsZXNoZWV0cyBhbmQgaW5saW5lIHdlYmZvbnRzXG4gKi9cblxuaW1wb3J0IHdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBkb2N1bWVudCBmcm9tICdnbG9iYWwvZG9jdW1lbnQnO1xuaW1wb3J0IGNvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHN2Z1RvTWluaURhdGFVUkkgZnJvbSAnbWluaS1zdmctZGF0YS11cmknO1xuaW1wb3J0IHtJTUFHRV9FWFBPUlRfRVJST1JTfSBmcm9tICdjb25zdGFudHMvdXNlci1mZWVkYmFja3MnO1xuaW1wb3J0IHtcbiAgY2FudmFzVG9CbG9iLFxuICBlc2NhcGUsXG4gIGVzY2FwZVhodG1sLFxuICBkZWxheSxcbiAgcHJvY2Vzc0Nsb25lLFxuICBhc0FycmF5LFxuICBtYWtlSW1hZ2UsXG4gIG1pbWVUeXBlLFxuICBkYXRhQXNVcmwsXG4gIGlzRGF0YVVybCxcbiAgaXNTcmNBc0RhdGFVcmwsXG4gIHJlc29sdmVVcmwsXG4gIGdldFdpZHRoLFxuICBnZXRIZWlnaHQsXG4gIGdldEFuZEVuY29kZVxufSBmcm9tICcuL2RvbS11dGlscyc7XG5cbmNvbnN0IGlubGluZXIgPSBuZXdJbmxpbmVyKCk7XG5jb25zdCBmb250RmFjZXMgPSBuZXdGb250RmFjZXMoKTtcbmNvbnN0IGltYWdlcyA9IG5ld0ltYWdlcygpO1xuLy8gRGVmYXVsdCBpbXBsIG9wdGlvbnNcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAvLyBEZWZhdWx0IGlzIHRvIGZhaWwgb24gZXJyb3IsIG5vIHBsYWNlaG9sZGVyXG4gIGltYWdlUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgLy8gRGVmYXVsdCBjYWNoZSBidXN0IGlzIGZhbHNlLCBpdCB3aWxsIHVzZSB0aGUgY2FjaGVcbiAgY2FjaGVCdXN0OiBmYWxzZVxufTtcblxuY29uc3QgZG9tdG9pbWFnZSA9IHtcbiAgdG9TdmcsXG4gIHRvUG5nLFxuICB0b0pwZWcsXG4gIHRvQmxvYixcbiAgdG9QaXhlbERhdGEsXG4gIGltcGw6IHtcbiAgICBmb250RmFjZXMsXG4gICAgaW1hZ2VzLFxuICAgIGlubGluZXIsXG4gICAgb3B0aW9uczoge31cbiAgfVxufTtcblxuLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIFNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwYXNzZWQgbm9kZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dFxuICAgKiAgICAgICAgICAoZXhjbHVkaW5nIG5vZGUgbWVhbnMgZXhjbHVkaW5nIGl0J3MgY2hpbGRyZW4gYXMgd2VsbCkuIE5vdCBjYWxsZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmJnY29sb3JdIC0gY29sb3IgZm9yIHRoZSBiYWNrZ3JvdW5kLCBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlLlxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMud2lkdGhdIC0gd2lkdGggdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIC0gaGVpZ2h0IHRvIGJlIGFwcGxpZWQgdG8gbm9kZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc3R5bGVdIC0gYW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIG5vZGUncyBzdHlsZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMucXVhbGl0eV0gLSBhIE51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5IChhcHBsaWNhYmxlIHRvIEpQRUcgb25seSksXG4gICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDEuMC5cbiAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyXSAtIGRhdGFVUkwgdG8gdXNlIGFzIGEgcGxhY2Vob2xkZXIgZm9yIGZhaWxlZCBpbWFnZXMsIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGZhaWwgZmFzdCBvbiBpbWFnZXMgd2UgY2FuJ3QgZmV0Y2hcbiAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuY2FjaGVCdXN0XSAtIHNldCB0byB0cnVlIHRvIGNhY2hlIGJ1c3QgYnkgYXBwZW5kaW5nIHRoZSB0aW1lIHRvIHRoZSByZXF1ZXN0IHVybFxuICAgICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFNWRyBpbWFnZSBkYXRhIFVSTFxuICAgICogKi9cbmZ1bmN0aW9uIHRvU3ZnKG5vZGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGNvcHlPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgLnRoZW4obmQgPT4gY2xvbmVOb2RlKG5kLCBvcHRpb25zLmZpbHRlciwgdHJ1ZSkpXG4gICAgLnRoZW4oZW1iZWRGb250cylcbiAgICAudGhlbihpbmxpbmVJbWFnZXMpXG4gICAgLnRoZW4oYXBwbHlPcHRpb25zKVxuICAgIC50aGVuKGNsb25lID0+XG4gICAgICBtYWtlU3ZnRGF0YVVyaShjbG9uZSwgb3B0aW9ucy53aWR0aCB8fCBnZXRXaWR0aChub2RlKSwgb3B0aW9ucy5oZWlnaHQgfHwgZ2V0SGVpZ2h0KG5vZGUpKVxuICAgICk7XG5cbiAgZnVuY3Rpb24gYXBwbHlPcHRpb25zKGNsb25lKSB7XG4gICAgaWYgKG9wdGlvbnMuYmdjb2xvcikgY2xvbmUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iZ2NvbG9yO1xuXG4gICAgaWYgKG9wdGlvbnMud2lkdGgpIGNsb25lLnN0eWxlLndpZHRoID0gYCR7b3B0aW9ucy53aWR0aH1weGA7XG4gICAgaWYgKG9wdGlvbnMuaGVpZ2h0KSBjbG9uZS5zdHlsZS5oZWlnaHQgPSBgJHtvcHRpb25zLmhlaWdodH1weGA7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZSlcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMuc3R5bGUpLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICBjbG9uZS5zdHlsZVtwcm9wZXJ0eV0gPSBvcHRpb25zLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBVaW50OEFycmF5IGNvbnRhaW5pbmcgUkdCQSBwaXhlbCBkYXRhLlxuICogKi9cbmZ1bmN0aW9uIHRvUGl4ZWxEYXRhKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihcbiAgICBjYW52YXMgPT4gY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIGdldFdpZHRoKG5vZGUpLCBnZXRIZWlnaHQobm9kZSkpLmRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBkYXRhIFVSTFxuICogKi9cbmZ1bmN0aW9uIHRvUG5nKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihjYW52YXMgPT4gY2FudmFzLnRvRGF0YVVSTCgpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIEpQRUcgaW1hZ2UgZGF0YSBVUkxcbiAqICovXG5mdW5jdGlvbiB0b0pwZWcobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucykudGhlbihjYW52YXMgPT4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIG9wdGlvbnMucXVhbGl0eSB8fCAxLjApKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBibG9iXG4gKiAqL1xuZnVuY3Rpb24gdG9CbG9iKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihjYW52YXNUb0Jsb2IpO1xufVxuXG5mdW5jdGlvbiBjb3B5T3B0aW9ucyhvcHRpb25zKSB7XG4gIC8vIENvcHkgb3B0aW9ucyB0byBpbXBsIG9wdGlvbnMgZm9yIHVzZSBpbiBpbXBsXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyID09PSAndW5kZWZpbmVkJykge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPSBkZWZhdWx0T3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyO1xuICB9IGVsc2Uge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXI7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMuY2FjaGVCdXN0ID09PSAndW5kZWZpbmVkJykge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmNhY2hlQnVzdCA9IGRlZmF1bHRPcHRpb25zLmNhY2hlQnVzdDtcbiAgfSBlbHNlIHtcbiAgICBkb210b2ltYWdlLmltcGwub3B0aW9ucy5jYWNoZUJ1c3QgPSBvcHRpb25zLmNhY2hlQnVzdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmF3KGRvbU5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvU3ZnKGRvbU5vZGUsIG9wdGlvbnMpXG4gICAgLnRoZW4obWFrZUltYWdlKVxuICAgIC50aGVuKGRlbGF5KDEwMCkpXG4gICAgLnRoZW4oaW1hZ2UgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gbmV3Q2FudmFzKGRvbU5vZGUpO1xuICAgICAgY2FudmFzLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcbiAgICAgIHJldHVybiBjYW52YXM7XG4gICAgfSk7XG5cbiAgZnVuY3Rpb24gbmV3Q2FudmFzKGROb2RlKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLndpZHRoID0gb3B0aW9ucy53aWR0aCB8fCBnZXRXaWR0aChkTm9kZSk7XG4gICAgY2FudmFzLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0IHx8IGdldEhlaWdodChkTm9kZSk7XG5cbiAgICBpZiAob3B0aW9ucy5iZ2NvbG9yKSB7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJnY29sb3I7XG4gICAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lTm9kZShub2RlLCBmaWx0ZXIsIHJvb3QpIHtcbiAgaWYgKCFyb290ICYmIGZpbHRlciAmJiAhZmlsdGVyKG5vZGUpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKVxuICAgIC50aGVuKG1ha2VOb2RlQ29weSlcbiAgICAudGhlbihjbG9uZSA9PiBjbG9uZUNoaWxkcmVuKG5vZGUsIGNsb25lLCBmaWx0ZXIpKVxuICAgIC50aGVuKGNsb25lID0+IHByb2Nlc3NDbG9uZShub2RlLCBjbG9uZSkpO1xuXG4gIGZ1bmN0aW9uIG1ha2VOb2RlQ29weShuZCkge1xuICAgIGlmIChuZCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCkge1xuICAgICAgcmV0dXJuIG1ha2VJbWFnZShuZC50b0RhdGFVUkwoKSk7XG4gICAgfVxuICAgIHJldHVybiBuZC5jbG9uZU5vZGUoZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbkluT3JkZXIocGFyZW50LCBhcnJDaGlsZHJlbiwgZmx0KSB7XG4gICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBhcnJDaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGRvbmUgPSBkb25lXG4gICAgICAgIC50aGVuKCgpID0+IGNsb25lTm9kZShjaGlsZCwgZmx0KSlcbiAgICAgICAgLnRoZW4oY2hpbGRDbG9uZSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkQ2xvbmUpIHtcbiAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjaGlsZENsb25lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbihvcmlnaW5hbCwgY2xvbmUsIGZsdCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gb3JpZ2luYWwuY2hpbGROb2RlcztcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsb25lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVDaGlsZHJlbkluT3JkZXIoY2xvbmUsIGFzQXJyYXkoY2hpbGRyZW4pLCBmbHQpLnRoZW4oKCkgPT4gY2xvbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtYmVkRm9udHMobm9kZSkge1xuICByZXR1cm4gZm9udEZhY2VzLnJlc29sdmVBbGwoKS50aGVuKGNzc1RleHQgPT4ge1xuICAgIGNvbnN0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgbm9kZS5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3NUZXh0KSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbmxpbmVJbWFnZXMobm9kZSkge1xuICByZXR1cm4gaW1hZ2VzLmlubGluZUFsbChub2RlKS50aGVuKCgpID0+IG5vZGUpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3ZnRGF0YVVyaShub2RlLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSkudGhlbihuZCA9PiB7XG4gICAgbmQuc2V0QXR0cmlidXRlKCd4bWxucycsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFN0cmluZyA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKG5kKTtcblxuICAgIGNvbnN0IHhodG1sID0gZXNjYXBlWGh0bWwoc2VyaWFsaXplZFN0cmluZyk7XG4gICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IGA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPiR7eGh0bWx9PC9mb3JlaWduT2JqZWN0PmA7XG4gICAgY29uc3Qgc3ZnU3RyID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIke2hlaWdodH1cIj4ke2ZvcmVpZ25PYmplY3R9PC9zdmc+YDtcblxuICAgIC8vIE9wdGltaXppbmcgU1ZHcyBpbiBkYXRhIFVSSXNcbiAgICAvLyBzZWUgaHR0cHM6Ly9jb2RlcGVuLmlvL3RpZ3QvcG9zdC9vcHRpbWl6aW5nLXN2Z3MtaW4tZGF0YS11cmlzXG4gICAgLy8gdGhlIGJlc3Qgd2F5IG9mIGVuY29kaW5nIFNWRyBpbiBhIGRhdGE6IFVSSSBpcyBkYXRhOmltYWdlL3N2Zyt4bWwsW2FjdHVhbCBkYXRhXS5cbiAgICAvLyBXZSBkb27igJl0IG5lZWQgdGhlIDtjaGFyc2V0PXV0Zi04IHBhcmFtZXRlciBiZWNhdXNlIHRoZSBnaXZlbiBTVkcgaXMgQVNDSUkuXG4gICAgcmV0dXJuIHN2Z1RvTWluaURhdGFVUkkoc3ZnU3RyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5ld0lubGluZXIoKSB7XG4gIGNvbnN0IFVSTF9SRUdFWCA9IC91cmxcXChbJ1wiXT8oW14nXCJdKz8pWydcIl0/XFwpL2c7XG5cbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgc2hvdWxkUHJvY2VzcyxcbiAgICBpbXBsOiB7XG4gICAgICByZWFkVXJscyxcbiAgICAgIGlubGluZVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzaG91bGRQcm9jZXNzKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcuc2VhcmNoKFVSTF9SRUdFWCkgIT09IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFVybHMoc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSBVUkxfUkVHRVguZXhlYyhzdHJpbmcpKSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0LnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmZpbHRlcih1cmwgPT4ge1xuICAgICAgcmV0dXJuICFpc0RhdGFVcmwodXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVybEFzUmVnZXgodXJsMCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAodXJsXFxcXChbXFwnXCJdPykoJHtlc2NhcGUodXJsMCl9KShbXFwnXCJdP1xcXFwpKWAsICdnJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmUoc3RyaW5nLCB1cmwsIGJhc2VVcmwsIGdldCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXJsKVxuICAgICAgLnRoZW4odWwgPT4gKGJhc2VVcmwgPyByZXNvbHZlVXJsKHVsLCBiYXNlVXJsKSA6IHVsKSlcbiAgICAgIC50aGVuKHVsID0+ICh0eXBlb2YgZ2V0ID09PSAnZnVuY3Rpb24nID8gZ2V0KHVsKSA6IGdldEFuZEVuY29kZSh1bCwgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMpKSlcbiAgICAgIC50aGVuKGRhdGEgPT4gZGF0YUFzVXJsKGRhdGEsIG1pbWVUeXBlKHVybCkpKVxuICAgICAgLnRoZW4oZGF0YVVybCA9PiBzdHJpbmcucmVwbGFjZSh1cmxBc1JlZ2V4KHVybCksIGAkMSR7ZGF0YVVybH0kM2ApKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlubGluZUFsbChzdHJpbmcsIGJhc2VVcmwsIGdldCkge1xuICAgIGlmICghc2hvdWxkUHJvY2VzcyhzdHJpbmcpIHx8IGlzU3JjQXNEYXRhVXJsKHN0cmluZykpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdHJpbmcpXG4gICAgICAudGhlbihyZWFkVXJscylcbiAgICAgIC50aGVuKHVybHMgPT4ge1xuICAgICAgICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZShzdHJpbmcpO1xuICAgICAgICB1cmxzLmZvckVhY2godXJsID0+IHtcbiAgICAgICAgICBkb25lID0gZG9uZS50aGVuKHN0ciA9PiBpbmxpbmUoc3RyLCB1cmwsIGJhc2VVcmwsIGdldCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbmU7XG4gICAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXdGb250RmFjZXMoKSB7XG4gIHJldHVybiB7XG4gICAgcmVzb2x2ZUFsbCxcbiAgICBpbXBsOiB7cmVhZEFsbH1cbiAgfTtcblxuICBmdW5jdGlvbiByZXNvbHZlQWxsKCkge1xuICAgIHJldHVybiByZWFkQWxsKClcbiAgICAgIC50aGVuKHdlYkZvbnRzID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHdlYkZvbnRzLm1hcCh3ZWJGb250ID0+IHdlYkZvbnQucmVzb2x2ZSgpKSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oY3NzU3RyaW5ncyA9PiBjc3NTdHJpbmdzLmpvaW4oJ1xcbicpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBbGwoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhc0FycmF5KGRvY3VtZW50LnN0eWxlU2hlZXRzKSlcbiAgICAgIC50aGVuKGxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzKVxuICAgICAgLnRoZW4oZ2V0Q3NzUnVsZXMpXG4gICAgICAudGhlbihzZWxlY3RXZWJGb250UnVsZXMpXG4gICAgICAudGhlbihydWxlcyA9PiBydWxlcy5tYXAobmV3V2ViRm9udCkpO1xuXG4gICAgZnVuY3Rpb24gc2VsZWN0V2ViRm9udFJ1bGVzKGNzc1J1bGVzKSB7XG4gICAgICByZXR1cm4gY3NzUnVsZXNcbiAgICAgICAgLmZpbHRlcihydWxlID0+IHJ1bGUudHlwZSA9PT0gd2luZG93LkNTU1J1bGUuRk9OVF9GQUNFX1JVTEUpXG4gICAgICAgIC5maWx0ZXIocnVsZSA9PiBpbmxpbmVyLnNob3VsZFByb2Nlc3MocnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzKHN0eWxlU2hlZXRzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgIHN0eWxlU2hlZXRzLm1hcChzaGVldCA9PiB7XG4gICAgICAgICAgaWYgKHNoZWV0LmhyZWYpIHtcbiAgICAgICAgICAgIC8vIGNsb3VkZm9udCBkb2Vzbid0IGhhdmUgYWxsb3cgb3JpZ2luIGhlYWRlciBwcm9wZXJseSBzZXRcbiAgICAgICAgICAgIC8vIGVycm9yIHJlc3BvbnNlIHdpbGwgcmVtYWluIGluIGNhY2hlXG4gICAgICAgICAgICBjb25zdCBjYWNoZSA9IHNoZWV0LmhyZWYuaW5jbHVkZXMoJ3ViZXItZm9udHMnKSA/ICduby1jYWNoZScgOiAnZGVmYXVsdCc7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93XG4gICAgICAgICAgICAgIC5mZXRjaChzaGVldC5ocmVmLCB7Y3JlZGVudGlhbHM6ICdvbWl0JywgY2FjaGV9KVxuICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS50ZXh0KCkpXG4gICAgICAgICAgICAgIC50aGVuKHNldEJhc2VIcmVmKHNoZWV0LmhyZWYpKVxuICAgICAgICAgICAgICAudGhlbih0b1N0eWxlU2hlZXQpXG4gICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhbnkgZXJyb3IgdGhhdCBvY2N1cnJlZCBpbiBhbnkgb2YgdGhlIHByZXZpb3VzXG4gICAgICAgICAgICAgICAgLy8gcHJvbWlzZXMgaW4gdGhlIGNoYWluLiBzdHlsZXNoZWV0IGZhaWxlZCB0byBsb2FkIHNob3VsZCBub3Qgc3RvcFxuICAgICAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzLCBoZW5jZSByZXN1bHQgaW4gb25seSBhIHdhcm5pbmcsIGluc3RlYWQgb2YgcmVqZWN0XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKElNQUdFX0VYUE9SVF9FUlJPUlMuc3R5bGVTaGVldCwgc2hlZXQuaHJlZik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNoZWV0KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGZ1bmN0aW9uIHNldEJhc2VIcmVmKGJhc2UpIHtcbiAgICAgICAgYmFzZSA9IGJhc2Uuc3BsaXQoJy8nKTtcbiAgICAgICAgYmFzZS5wb3AoKTtcbiAgICAgICAgYmFzZSA9IGJhc2Uuam9pbignLycpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZEJhc2VIcmVmVG9VcmwobWF0Y2gsIHAxKSB7XG4gICAgICAgICAgY29uc3QgdXJsID0gL15odHRwL2kudGVzdChwMSkgPyBwMSA6IGNvbmNhdEFuZFJlc29sdmVVcmwoYmFzZSwgcDEpO1xuICAgICAgICAgIHJldHVybiBgdXJsKCcke3VybH0nKWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3VyY2U6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NzYyMzEvMzc4Njg1NlxuICAgICAgICBmdW5jdGlvbiBjb25jYXRBbmRSZXNvbHZlVXJsKHVybCwgY29uY2F0KSB7XG4gICAgICAgICAgY29uc3QgdXJsMSA9IHVybC5zcGxpdCgnLycpO1xuICAgICAgICAgIGNvbnN0IHVybDIgPSBjb25jYXQuc3BsaXQoJy8nKTtcbiAgICAgICAgICBjb25zdCB1cmwzID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB1cmwxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKHVybDFbaV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgdXJsMy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsMVtpXSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgIHVybDMucHVzaCh1cmwxW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB1cmwyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKHVybDJbaV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgdXJsMy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsMltpXSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgIHVybDMucHVzaCh1cmwyW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVybDMuam9pbignLycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHQgPT4ge1xuICAgICAgICAgIHJldHVybiBpc1NyY0FzRGF0YVVybCh0ZXh0KVxuICAgICAgICAgICAgPyB0ZXh0XG4gICAgICAgICAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdG9TdHlsZVNoZWV0KHRleHQpIHtcbiAgICAgICAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCcnKTtcbiAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblxuICAgICAgICBzdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuXG4gICAgICAgIHJldHVybiBzdHlsZUVsZW1lbnQuc2hlZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q3NzUnVsZXMoc3R5bGVTaGVldHMpIHtcbiAgICAgIGNvbnN0IGNzc1J1bGVzID0gW107XG4gICAgICBzdHlsZVNoZWV0cy5mb3JFYWNoKHNoZWV0ID0+IHtcbiAgICAgICAgLy8gdHJ5Li4uY2F0Y2ggYmVjYXVzZSBicm93c2VyIG1heSBub3QgYWJsZSB0byBlbnVtZXJhdGUgcnVsZXMgZm9yIGNyb3NzLWRvbWFpbiBzaGVldHNcbiAgICAgICAgaWYgKCFzaGVldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcnVsZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAnQ2FuJ3QgcmVhZCB0aGUgY3NzIHJ1bGVzIG9mOiAke3NoZWV0LmhyZWZ9YCwgZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bGVzICYmIHR5cGVvZiBydWxlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXNBcnJheShydWxlcyB8fCBbXSkuZm9yRWFjaChjc3NSdWxlcy5wdXNoLmJpbmQoY3NzUnVsZXMpKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3Igd2hpbGUgcmVhZGluZyBDU1MgcnVsZXMgZnJvbSAke3NoZWV0LmhyZWZ9YCwgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRDc3NSdWxlcyBjYW4gbm90IGZpbmQgY3NzUnVsZXMnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3NzUnVsZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV3V2ViRm9udCh3ZWJGb250UnVsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSAod2ViRm9udFJ1bGUucGFyZW50U3R5bGVTaGVldCB8fCB7fSkuaHJlZjtcbiAgICAgICAgICByZXR1cm4gaW5saW5lci5pbmxpbmVBbGwod2ViRm9udFJ1bGUuY3NzVGV4dCwgYmFzZVVybCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNyYzogKCkgPT4gd2ViRm9udFJ1bGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnc3JjJylcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5ld0ltYWdlcygpIHtcbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgaW1wbDoge1xuICAgICAgbmV3SW1hZ2VcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gbmV3SW1hZ2UoZWxlbWVudCkge1xuICAgIGZ1bmN0aW9uIGlubGluZShnZXQpIHtcbiAgICAgIGlmIChpc0RhdGFVcmwoZWxlbWVudC5zcmMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZWxlbWVudC5zcmMpXG4gICAgICAgIC50aGVuKHVsID0+XG4gICAgICAgICAgdHlwZW9mIGdldCA9PT0gJ2Z1bmN0aW9uJyA/IGdldCh1bCkgOiBnZXRBbmRFbmNvZGUodWwsIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zKVxuICAgICAgICApXG4gICAgICAgIC50aGVuKGRhdGEgPT4gZGF0YUFzVXJsKGRhdGEsIG1pbWVUeXBlKGVsZW1lbnQuc3JjKSkpXG4gICAgICAgIC50aGVuKFxuICAgICAgICAgIGRhdGFVcmwgPT5cbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgZWxlbWVudC5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICBlbGVtZW50Lm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlubGluZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVBbGwobm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5saW5lQmFja2dyb3VuZChub2RlKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3SW1hZ2Uobm9kZSkuaW5saW5lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYXNBcnJheShub2RlLmNoaWxkTm9kZXMpLm1hcChjaGlsZCA9PiBpbmxpbmVBbGwoY2hpbGQpKSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBpbmxpbmVCYWNrZ3JvdW5kKG5kKSB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZCcpO1xuXG4gICAgICBpZiAoIWJhY2tncm91bmQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmxpbmVyXG4gICAgICAgIC5pbmxpbmVBbGwoYmFja2dyb3VuZClcbiAgICAgICAgLnRoZW4oaW5saW5lZCA9PiB7XG4gICAgICAgICAgbmQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQnLCBpbmxpbmVkLCBuZC5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KCdiYWNrZ3JvdW5kJykpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiBuZCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRvbXRvaW1hZ2U7XG4iXX0=
|
package/dist/utils/dom-utils.js
CHANGED
|
@@ -33,7 +33,7 @@ var _document = _interopRequireDefault(require("global/document"));
|
|
|
33
33
|
|
|
34
34
|
var _userFeedbacks = require("../constants/user-feedbacks");
|
|
35
35
|
|
|
36
|
-
// Copyright (c)
|
|
36
|
+
// Copyright (c) 2022 Uber Technologies, Inc.
|
|
37
37
|
//
|
|
38
38
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
39
39
|
// of this software and associated documentation files (the "Software"), to deal
|
|
@@ -422,4 +422,4 @@ function getAndEncode(url, options) {
|
|
|
422
422
|
}
|
|
423
423
|
});
|
|
424
424
|
}
|
|
425
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb20tdXRpbHMuanMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsImNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQXZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9PLFNBQVNBLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDQyxLQUFoQyxFQUF1QztBQUM1QyxNQUFJLEVBQUVBLEtBQUssWUFBWUMsbUJBQU9DLE9BQTFCLENBQUosRUFBd0M7QUFDdEMsV0FBT0YsS0FBUDtBQUNEOztBQUVELFdBQVNHLGNBQVQsQ0FBd0JDLFdBQXhCLEVBQXFDQyxXQUFyQyxFQUFrRDtBQUNoRCxRQUFNQyxZQUFZLEdBQUdDLE9BQU8sQ0FBQ0gsV0FBRCxDQUE1QjtBQUNBRSxJQUFBQSxZQUFZLENBQUNFLE9BQWIsQ0FBcUIsVUFBQUMsSUFBSSxFQUFJO0FBQzNCSixNQUFBQSxXQUFXLENBQUNLLFdBQVosQ0FDRUQsSUFERixFQUVFTCxXQUFXLENBQUNPLGdCQUFaLENBQTZCRixJQUE3QixDQUZGLEVBR0VMLFdBQVcsQ0FBQ1EsbUJBQVosQ0FBZ0NILElBQWhDLENBSEY7QUFLRCxLQU5EO0FBT0Q7O0FBRUQsV0FBU0ksU0FBVCxD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LFVBQVgsRUFBaEI7O0FBQ0FELE1BQUFBLE9BQU8sQ0FBQ0UsU0FBUixHQUFvQixZQUFNO0FBQ3hCLFlBQU01SSxPQUFPLEdBQUcwSSxPQUFPLENBQUNHLE1BQVIsQ0FBZXRELEtBQWYsQ0FBcUIsR0FBckIsRUFBMEIsQ0FBMUIsQ0FBaEI7QUFDQXBFLFFBQUFBLE9BQU8sQ0FBQ25CLE9BQUQsQ0FBUDtBQUNELE9BSEQ7O0FBSUEwSSxNQUFBQSxPQUFPLENBQUNJLGFBQVIsQ0FBc0JsQixPQUFPLENBQUNtQixRQUE5QjtBQUNEOztBQUVELGFBQVNkLE9BQVQsR0FBbUI7QUFDakIsVUFBSUksV0FBSixFQUFpQjtBQUNmbEgsUUFBQUEsT0FBTyxDQUFDa0gsV0FBRCxDQUFQO0FBQ0QsT0FGRCxNQUVPO0FBQ0xJLFFBQUFBLElBQUksc0JBQWVsQixPQUFmLGtEQUE4RHRFLEdBQTlELEVBQUo7QUFDRDtBQUNGOztBQUVELGFBQVN3RixJQUFULENBQWNoRyxPQUFkLEVBQXVCO0FBQ3JCRywwQkFBUW9HLEtBQVIsQ0FBY3ZHLE9BQWQ7O0FBQ0F0QixNQUFBQSxPQUFPLENBQUMsRUFBRCxDQUFQO0FBQ0Q7QUFDRixHQW5ETSxDQUFQO0FBb0REIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIxIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IGNvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBkb2N1bWVudCBmcm9tICdnbG9iYWwvZG9jdW1lbnQnO1xuaW1wb3J0IHtJTUFHRV9FWFBPUlRfRVJST1JTfSBmcm9tICdjb25zdGFudHMvdXNlci1mZWVkYmFja3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Nsb25lKG9yaWdpbmFsLCBjbG9uZSkge1xuICBpZiAoIShjbG9uZSBpbnN0YW5jZW9mIHdpbmRvdy5FbGVtZW50KSkge1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZVN0eWxlLCB0YXJnZXRTdHlsZSkge1xuICAgIGNvbnN0IHByb3BlcnR5S2V5cyA9IGFzQXJyYXkoc291cmNlU3R5bGUpO1xuICAgIHByb3BlcnR5S2V5cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgdGFyZ2V0U3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNvdXJjZVN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSksXG4gICAgICAgIHNvdXJjZVN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5U3R5bGUoc291cmNlLCB0YXJnZXQpIHtcbiAgICBpZiAoc291cmNlLmNzc1RleHQpIHtcbiAgICAgIHRhcmdldC5jc3NUZXh0ID0gc291cmNlLmNzc1RleHQ7XG4gICAgICAvLyBhZGQgYWRkaXRpb25hbCBjb3B5IG9mIGNvbXBvc2l0ZSBzdHlsZXNcbiAgICAgIGlmIChzb3VyY2UuZm9udCkge1xuICAgICAgICB0YXJnZXQuZm9udCA9IHNvdXJjZS5mb250O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVTdHlsZShvZywgY2xuKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9nKTtcbiAgICBjb3B5U3R5bGUob3JpZ2luYWxTdHlsZSwgY2xuLnN0eWxlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFBzZXVkb0VsZW1lbnRTdHlsZShjbG4sIGVsbSwgc3RsKSB7XG4gICAgY29uc3QgZm9ybWF0Q3NzVGV4dCA9IHN0bDEgPT4ge1xuICAgICAgY29uc3QgY250ID0gc3RsMS5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG4gICAgICByZXR1cm4gYCR7c3RsLmNzc1RleHR9IGNvbnRlbnQ6ICR7Y250fTtgO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRQcm9wZXJ0eSA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIGAke25hbWV9OiR7c3RsLmdldFByb3BlcnR5VmFsdWUobmFtZSl9JHtcbiAgICAgICAgc3RsLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkgPyAnICFpbXBvcnRhbnQnIDogJydcbiAgICAgIH1gO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRDc3NQcm9wZXJ0aWVzID0gc3RsMiA9PiB7XG4gICAgICByZXR1cm4gYCR7YXNBcnJheShzdGwyKVxuICAgICAgICAubWFwKGZvcm1hdFByb3BlcnR5KVxuICAgICAgICAuam9pbignOyAnKX07YDtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgLiR7Y2xufToke2VsbX1gO1xuICAgIGNvbnN0IGNzc1RleHQgPSBzdGwuY3NzVGV4dCA/IGZvcm1hdENzc1RleHQoc3RsKSA6IGZvcm1hdENzc1Byb3BlcnRpZXMoc3RsKTtcblxuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgJHtzZWxlY3Rvcn17JHtjc3NUZXh0fX1gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lUHNldWRvRWxlbWVudChvcmcsIGNsbiwgZWxlbWVudCkge1xuICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUob3JnLCBlbGVtZW50KTtcbiAgICBjb25zdCBjb250ZW50ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuXG4gICAgaWYgKGNvbnRlbnQgPT09ICcnIHx8IGNvbnRlbnQgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHVpZCgpO1xuICAgIGNsbi5jbGFzc05hbWUgPSBgJHtjbG4uY2xhc3NOYW1lfSAke2NsYXNzTmFtZX1gO1xuICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGZvcm1hdFBzZXVkb0VsZW1lbnRTdHlsZShjbGFzc05hbWUsIGVsZW1lbnQsIHN0eWxlKSk7XG4gICAgY2xuLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnRzKFtvZywgY2xuXSkge1xuICAgIFsnOmJlZm9yZScsICc6YWZ0ZXInXS5mb3JFYWNoKGVsZW1lbnQgPT4gY2xvbmVQc2V1ZG9FbGVtZW50KG9nLCBjbG4sIGVsZW1lbnQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlVc2VySW5wdXQoW29nLCBjbG5dKSB7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZXh0QXJlYUVsZW1lbnQpIGNsbi5pbm5lckhUTUwgPSBvZy52YWx1ZTtcbiAgICBpZiAob2cgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElucHV0RWxlbWVudCkgY2xuLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBvZy52YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmaXhTdmcoY2xuKSB7XG4gICAgaWYgKCEoY2xuIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQpKSByZXR1cm47XG4gICAgY2xuLnNldEF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKTtcblxuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdSZWN0RWxlbWVudCkpIHJldHVybjtcbiAgICBbJ3dpZHRoJywgJ2hlaWdodCddLmZvckVhY2goYXR0cmlidXRlID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2xuLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICBjbG4uc3R5bGUuc2V0UHJvcGVydHkoYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtvcmlnaW5hbCwgY2xvbmVdKVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lU3R5bGUob2csIGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNvcHlVc2VySW5wdXQoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBmaXhTdmcoY2xuKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiBjbG4pO1xufVxuXG4vKioqKlxuICogVVRJTFNcbiAqKioqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXkoYXJyYXlMaWtlKSB7XG4gIGNvbnN0IGFycmF5ID0gW107XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5TGlrZS5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIGFycmF5LnB1c2goYXJyYXlMaWtlW2ldKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm91clJhbmRvbUNoYXJzKCkge1xuICAvKiBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjI0ODcyMi8yNTE5MzczICovXG4gIHJldHVybiBgMDAwMCR7KChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMzYsIDQpKSA8PCAwKS50b1N0cmluZygzNil9YC5zbGljZSgtNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1aWQoKSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIGB1JHtmb3VyUmFuZG9tQ2hhcnMoKX0ke2luZGV4Kyt9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbWFnZSh1cmkpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IElNQUdFX0VYUE9SVF9FUlJPUlMuZGF0YVVyaTtcbiAgICAgIGNvbnNvbGUubG9nKHVyaSk7XG4gICAgICAvLyBlcnJvciBpcyBhbiBFdmVudCBPYmplY3RcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvb2JqX2V2ZW50LmFzcFxuICAgICAgcmVqZWN0KHtldmVudDogZXJyLCBtZXNzYWdlfSk7XG4gICAgfTtcbiAgICBpbWFnZS5zcmMgPSB1cmk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVXJsKHVybCkge1xuICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbWltZXMoKSB7XG4gIC8qXG4gICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICovXG4gIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICByZXR1cm4ge1xuICAgIHdvZmY6IFdPRkYsXG4gICAgd29mZjI6IFdPRkYsXG4gICAgdHRmOiAnYXBwbGljYXRpb24vZm9udC10cnVldHlwZScsXG4gICAgZW90OiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgIHBuZzogJ2ltYWdlL3BuZycsXG4gICAganBnOiBKUEVHLFxuICAgIGpwZWc6IEpQRUcsXG4gICAgZ2lmOiAnaW1hZ2UvZ2lmJyxcbiAgICB0aWZmOiAnaW1hZ2UvdGlmZicsXG4gICAgc3ZnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICBjb25zdCBleHRlbnNpb24gPSBwYXJzZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICByZXR1cm4gYGRhdGE6JHt0eXBlfTtiYXNlNjQsJHtjb250ZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gYXJnID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3JjQXNEYXRhVXJsKHRleHQpIHtcbiAgY29uc3QgREFUQV9VUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KGRhdGE6KShbXidcIl0rPylbJ1wiXT9cXCkvO1xuXG4gIHJldHVybiB0ZXh0LnNlYXJjaChEQVRBX1VSTF9SRUdFWCkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBjdlRvQmxvYihjYW52YXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IHdpbmRvdy5hdG9iKGNhbnZhcy50b0RhdGFVUkwoKS5zcGxpdCgnLCcpWzFdKTtcbiAgICBjb25zdCBsZW5ndGggPSBiaW5hcnlTdHJpbmcubGVuZ3RoO1xuICAgIGNvbnN0IGJpbmFyeUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIGJpbmFyeUFycmF5W2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cbiAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYihbYmluYXJ5QXJyYXldLCB7dHlwZTogJ2ltYWdlL3BuZyd9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FudmFzVG9CbG9iKGNhbnZhcykge1xuICBpZiAoY2FudmFzLnRvQmxvYilcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjYW52YXMudG9CbG9iKHJlc29sdmUpO1xuICAgIH0pO1xuXG4gIHJldHVybiBjdlRvQmxvYihjYW52YXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlWGh0bWwoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvIy9nLCAnJTIzJykucmVwbGFjZSgvXFxuL2csICclMEEnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdpZHRoKG5vZGUpIHtcbiAgY29uc3QgbGVmdEJvcmRlciA9IHB4KG5vZGUsICdib3JkZXItbGVmdC13aWR0aCcpO1xuICBjb25zdCByaWdodEJvcmRlciA9IHB4KG5vZGUsICdib3JkZXItcmlnaHQtd2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsV2lkdGggKyBsZWZ0Qm9yZGVyICsgcmlnaHRCb3JkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWlnaHQobm9kZSkge1xuICBjb25zdCB0b3BCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXRvcC13aWR0aCcpO1xuICBjb25zdCBib3R0b21Cb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWJvdHRvbS13aWR0aCcpO1xuICByZXR1cm4gbm9kZS5zY3JvbGxIZWlnaHQgKyB0b3BCb3JkZXIgKyBib3R0b21Cb3JkZXI7XG59XG5cbmZ1bmN0aW9uIHB4KG5vZGUsIHN0eWxlUHJvcGVydHkpIHtcbiAgY29uc3QgdmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKCdweCcsICcnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXJsKHVybCwgYmFzZVVybCkge1xuICBjb25zdCBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTtcbiAgY29uc3QgYmFzZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdiYXNlJyk7XG4gIGRvYy5oZWFkLmFwcGVuZENoaWxkKGJhc2UpO1xuICBjb25zdCBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gIGJhc2UuaHJlZiA9IGJhc2VVcmw7XG4gIGEuaHJlZiA9IHVybDtcbiAgcmV0dXJuIGEuaHJlZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFuZEVuY29kZSh1cmwsIG9wdGlvbnMpIHtcbiAgY29uc3QgVElNRU9VVCA9IDMwMDAwO1xuICBpZiAob3B0aW9ucy5jYWNoZUJ1c3QpIHtcbiAgICAvLyBDYWNoZSBieXBhc3Mgc28gd2UgZG9udCBoYXZlIENPUlMgaXNzdWVzIHdpdGggY2FjaGVkIGltYWdlc1xuICAgIC8vIFNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L1VzaW5nX1hNTEh0dHBSZXF1ZXN0I0J5cGFzc2luZ190aGVfY2FjaGVcbiAgICB1cmwgKz0gKC9cXD8vLnRlc3QodXJsKSA/ICcmJyA6ICc/JykgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBkb25lO1xuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gdGltZW91dDtcbiAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBUSU1FT1VUO1xuICAgIHJlcXVlc3Qub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgICByZXF1ZXN0LnNlbmQoKTtcblxuICAgIGxldCBwbGFjZWhvbGRlcjtcbiAgICBpZiAob3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyKSB7XG4gICAgICBjb25zdCBzcGxpdCA9IG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlci5zcGxpdCgvLC8pO1xuICAgICAgaWYgKHNwbGl0ICYmIHNwbGl0WzFdKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gc3BsaXRbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHJldHVybjtcblxuICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgcmVzb2x2ZShwbGFjZWhvbGRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFpbChgY2Fubm90IGZldGNoIHJlc291cmNlOiAke3VybH0sIHN0YXR1czogJHtyZXF1ZXN0LnN0YXR1c31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyB3aW5kb3cuRmlsZVJlYWRlcigpO1xuICAgICAgZW5jb2Rlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlbmNvZGVyLnJlc3VsdC5zcGxpdCgvLC8pWzFdO1xuICAgICAgICByZXNvbHZlKGNvbnRlbnQpO1xuICAgICAgfTtcbiAgICAgIGVuY29kZXIucmVhZEFzRGF0YVVSTChyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0aW1lb3V0KCkge1xuICAgICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFpbChgdGltZW91dCBvZiAke1RJTUVPVVR9bXMgb2NjdXJyZWQgd2hpbGUgZmV0Y2hpbmcgcmVzb3VyY2U6ICR7dXJsfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIHJlc29sdmUoJycpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
|
|
425
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb20tdXRpbHMuanMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsImNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQXZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9PLFNBQVNBLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDQyxLQUFoQyxFQUF1QztBQUM1QyxNQUFJLEVBQUVBLEtBQUssWUFBWUMsbUJBQU9DLE9BQTFCLENBQUosRUFBd0M7QUFDdEMsV0FBT0YsS0FBUDtBQUNEOztBQUVELFdBQVNHLGNBQVQsQ0FBd0JDLFdBQXhCLEVBQXFDQyxXQUFyQyxFQUFrRDtBQUNoRCxRQUFNQyxZQUFZLEdBQUdDLE9BQU8sQ0FBQ0gsV0FBRCxDQUE1QjtBQUNBRSxJQUFBQSxZQUFZLENBQUNFLE9BQWIsQ0FBcUIsVUFBQUMsSUFBSSxFQUFJO0FBQzNCSixNQUFBQSxXQUFXLENBQUNLLFdBQVosQ0FDRUQsSUFERixFQUVFTCxXQUFXLENBQUNPLGdCQUFaLENBQTZCRixJQUE3QixDQUZGLEVBR0VMLFdBQVcsQ0FBQ1EsbUJBQVosQ0FBZ0NILElBQWhDLENBSEY7QUFLRCxLQU5EO0FBT0Q7O0FBRUQsV0FBU0ksU0FBVCxD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LFVBQVgsRUFBaEI7O0FBQ0FELE1BQUFBLE9BQU8sQ0FBQ0UsU0FBUixHQUFvQixZQUFNO0FBQ3hCLFlBQU01SSxPQUFPLEdBQUcwSSxPQUFPLENBQUNHLE1BQVIsQ0FBZXRELEtBQWYsQ0FBcUIsR0FBckIsRUFBMEIsQ0FBMUIsQ0FBaEI7QUFDQXBFLFFBQUFBLE9BQU8sQ0FBQ25CLE9BQUQsQ0FBUDtBQUNELE9BSEQ7O0FBSUEwSSxNQUFBQSxPQUFPLENBQUNJLGFBQVIsQ0FBc0JsQixPQUFPLENBQUNtQixRQUE5QjtBQUNEOztBQUVELGFBQVNkLE9BQVQsR0FBbUI7QUFDakIsVUFBSUksV0FBSixFQUFpQjtBQUNmbEgsUUFBQUEsT0FBTyxDQUFDa0gsV0FBRCxDQUFQO0FBQ0QsT0FGRCxNQUVPO0FBQ0xJLFFBQUFBLElBQUksc0JBQWVsQixPQUFmLGtEQUE4RHRFLEdBQTlELEVBQUo7QUFDRDtBQUNGOztBQUVELGFBQVN3RixJQUFULENBQWNoRyxPQUFkLEVBQXVCO0FBQ3JCRywwQkFBUW9HLEtBQVIsQ0FBY3ZHLE9BQWQ7O0FBQ0F0QixNQUFBQSxPQUFPLENBQUMsRUFBRCxDQUFQO0FBQ0Q7QUFDRixHQW5ETSxDQUFQO0FBb0REIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IGNvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBkb2N1bWVudCBmcm9tICdnbG9iYWwvZG9jdW1lbnQnO1xuaW1wb3J0IHtJTUFHRV9FWFBPUlRfRVJST1JTfSBmcm9tICdjb25zdGFudHMvdXNlci1mZWVkYmFja3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Nsb25lKG9yaWdpbmFsLCBjbG9uZSkge1xuICBpZiAoIShjbG9uZSBpbnN0YW5jZW9mIHdpbmRvdy5FbGVtZW50KSkge1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZVN0eWxlLCB0YXJnZXRTdHlsZSkge1xuICAgIGNvbnN0IHByb3BlcnR5S2V5cyA9IGFzQXJyYXkoc291cmNlU3R5bGUpO1xuICAgIHByb3BlcnR5S2V5cy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgdGFyZ2V0U3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNvdXJjZVN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSksXG4gICAgICAgIHNvdXJjZVN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5U3R5bGUoc291cmNlLCB0YXJnZXQpIHtcbiAgICBpZiAoc291cmNlLmNzc1RleHQpIHtcbiAgICAgIHRhcmdldC5jc3NUZXh0ID0gc291cmNlLmNzc1RleHQ7XG4gICAgICAvLyBhZGQgYWRkaXRpb25hbCBjb3B5IG9mIGNvbXBvc2l0ZSBzdHlsZXNcbiAgICAgIGlmIChzb3VyY2UuZm9udCkge1xuICAgICAgICB0YXJnZXQuZm9udCA9IHNvdXJjZS5mb250O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVTdHlsZShvZywgY2xuKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9nKTtcbiAgICBjb3B5U3R5bGUob3JpZ2luYWxTdHlsZSwgY2xuLnN0eWxlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFBzZXVkb0VsZW1lbnRTdHlsZShjbG4sIGVsbSwgc3RsKSB7XG4gICAgY29uc3QgZm9ybWF0Q3NzVGV4dCA9IHN0bDEgPT4ge1xuICAgICAgY29uc3QgY250ID0gc3RsMS5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG4gICAgICByZXR1cm4gYCR7c3RsLmNzc1RleHR9IGNvbnRlbnQ6ICR7Y250fTtgO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRQcm9wZXJ0eSA9IG5hbWUgPT4ge1xuICAgICAgcmV0dXJuIGAke25hbWV9OiR7c3RsLmdldFByb3BlcnR5VmFsdWUobmFtZSl9JHtcbiAgICAgICAgc3RsLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkgPyAnICFpbXBvcnRhbnQnIDogJydcbiAgICAgIH1gO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRDc3NQcm9wZXJ0aWVzID0gc3RsMiA9PiB7XG4gICAgICByZXR1cm4gYCR7YXNBcnJheShzdGwyKVxuICAgICAgICAubWFwKGZvcm1hdFByb3BlcnR5KVxuICAgICAgICAuam9pbignOyAnKX07YDtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgLiR7Y2xufToke2VsbX1gO1xuICAgIGNvbnN0IGNzc1RleHQgPSBzdGwuY3NzVGV4dCA/IGZvcm1hdENzc1RleHQoc3RsKSA6IGZvcm1hdENzc1Byb3BlcnRpZXMoc3RsKTtcblxuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgJHtzZWxlY3Rvcn17JHtjc3NUZXh0fX1gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lUHNldWRvRWxlbWVudChvcmcsIGNsbiwgZWxlbWVudCkge1xuICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUob3JnLCBlbGVtZW50KTtcbiAgICBjb25zdCBjb250ZW50ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuXG4gICAgaWYgKGNvbnRlbnQgPT09ICcnIHx8IGNvbnRlbnQgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHVpZCgpO1xuICAgIGNsbi5jbGFzc05hbWUgPSBgJHtjbG4uY2xhc3NOYW1lfSAke2NsYXNzTmFtZX1gO1xuICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGZvcm1hdFBzZXVkb0VsZW1lbnRTdHlsZShjbGFzc05hbWUsIGVsZW1lbnQsIHN0eWxlKSk7XG4gICAgY2xuLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnRzKFtvZywgY2xuXSkge1xuICAgIFsnOmJlZm9yZScsICc6YWZ0ZXInXS5mb3JFYWNoKGVsZW1lbnQgPT4gY2xvbmVQc2V1ZG9FbGVtZW50KG9nLCBjbG4sIGVsZW1lbnQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlVc2VySW5wdXQoW29nLCBjbG5dKSB7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZXh0QXJlYUVsZW1lbnQpIGNsbi5pbm5lckhUTUwgPSBvZy52YWx1ZTtcbiAgICBpZiAob2cgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElucHV0RWxlbWVudCkgY2xuLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBvZy52YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmaXhTdmcoY2xuKSB7XG4gICAgaWYgKCEoY2xuIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQpKSByZXR1cm47XG4gICAgY2xuLnNldEF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKTtcblxuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdSZWN0RWxlbWVudCkpIHJldHVybjtcbiAgICBbJ3dpZHRoJywgJ2hlaWdodCddLmZvckVhY2goYXR0cmlidXRlID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2xuLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICBjbG4uc3R5bGUuc2V0UHJvcGVydHkoYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtvcmlnaW5hbCwgY2xvbmVdKVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lU3R5bGUob2csIGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNvcHlVc2VySW5wdXQoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBmaXhTdmcoY2xuKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiBjbG4pO1xufVxuXG4vKioqKlxuICogVVRJTFNcbiAqKioqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXkoYXJyYXlMaWtlKSB7XG4gIGNvbnN0IGFycmF5ID0gW107XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5TGlrZS5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIGFycmF5LnB1c2goYXJyYXlMaWtlW2ldKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm91clJhbmRvbUNoYXJzKCkge1xuICAvKiBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjI0ODcyMi8yNTE5MzczICovXG4gIHJldHVybiBgMDAwMCR7KChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMzYsIDQpKSA8PCAwKS50b1N0cmluZygzNil9YC5zbGljZSgtNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1aWQoKSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIGB1JHtmb3VyUmFuZG9tQ2hhcnMoKX0ke2luZGV4Kyt9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbWFnZSh1cmkpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IElNQUdFX0VYUE9SVF9FUlJPUlMuZGF0YVVyaTtcbiAgICAgIGNvbnNvbGUubG9nKHVyaSk7XG4gICAgICAvLyBlcnJvciBpcyBhbiBFdmVudCBPYmplY3RcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvb2JqX2V2ZW50LmFzcFxuICAgICAgcmVqZWN0KHtldmVudDogZXJyLCBtZXNzYWdlfSk7XG4gICAgfTtcbiAgICBpbWFnZS5zcmMgPSB1cmk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVXJsKHVybCkge1xuICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbWltZXMoKSB7XG4gIC8qXG4gICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICovXG4gIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICByZXR1cm4ge1xuICAgIHdvZmY6IFdPRkYsXG4gICAgd29mZjI6IFdPRkYsXG4gICAgdHRmOiAnYXBwbGljYXRpb24vZm9udC10cnVldHlwZScsXG4gICAgZW90OiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgIHBuZzogJ2ltYWdlL3BuZycsXG4gICAganBnOiBKUEVHLFxuICAgIGpwZWc6IEpQRUcsXG4gICAgZ2lmOiAnaW1hZ2UvZ2lmJyxcbiAgICB0aWZmOiAnaW1hZ2UvdGlmZicsXG4gICAgc3ZnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICBjb25zdCBleHRlbnNpb24gPSBwYXJzZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICByZXR1cm4gYGRhdGE6JHt0eXBlfTtiYXNlNjQsJHtjb250ZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gYXJnID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3JjQXNEYXRhVXJsKHRleHQpIHtcbiAgY29uc3QgREFUQV9VUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KGRhdGE6KShbXidcIl0rPylbJ1wiXT9cXCkvO1xuXG4gIHJldHVybiB0ZXh0LnNlYXJjaChEQVRBX1VSTF9SRUdFWCkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBjdlRvQmxvYihjYW52YXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IHdpbmRvdy5hdG9iKGNhbnZhcy50b0RhdGFVUkwoKS5zcGxpdCgnLCcpWzFdKTtcbiAgICBjb25zdCBsZW5ndGggPSBiaW5hcnlTdHJpbmcubGVuZ3RoO1xuICAgIGNvbnN0IGJpbmFyeUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIGJpbmFyeUFycmF5W2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cbiAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYihbYmluYXJ5QXJyYXldLCB7dHlwZTogJ2ltYWdlL3BuZyd9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FudmFzVG9CbG9iKGNhbnZhcykge1xuICBpZiAoY2FudmFzLnRvQmxvYilcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjYW52YXMudG9CbG9iKHJlc29sdmUpO1xuICAgIH0pO1xuXG4gIHJldHVybiBjdlRvQmxvYihjYW52YXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlWGh0bWwoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvIy9nLCAnJTIzJykucmVwbGFjZSgvXFxuL2csICclMEEnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdpZHRoKG5vZGUpIHtcbiAgY29uc3QgbGVmdEJvcmRlciA9IHB4KG5vZGUsICdib3JkZXItbGVmdC13aWR0aCcpO1xuICBjb25zdCByaWdodEJvcmRlciA9IHB4KG5vZGUsICdib3JkZXItcmlnaHQtd2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsV2lkdGggKyBsZWZ0Qm9yZGVyICsgcmlnaHRCb3JkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWlnaHQobm9kZSkge1xuICBjb25zdCB0b3BCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXRvcC13aWR0aCcpO1xuICBjb25zdCBib3R0b21Cb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWJvdHRvbS13aWR0aCcpO1xuICByZXR1cm4gbm9kZS5zY3JvbGxIZWlnaHQgKyB0b3BCb3JkZXIgKyBib3R0b21Cb3JkZXI7XG59XG5cbmZ1bmN0aW9uIHB4KG5vZGUsIHN0eWxlUHJvcGVydHkpIHtcbiAgY29uc3QgdmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKCdweCcsICcnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXJsKHVybCwgYmFzZVVybCkge1xuICBjb25zdCBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTtcbiAgY29uc3QgYmFzZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdiYXNlJyk7XG4gIGRvYy5oZWFkLmFwcGVuZENoaWxkKGJhc2UpO1xuICBjb25zdCBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gIGJhc2UuaHJlZiA9IGJhc2VVcmw7XG4gIGEuaHJlZiA9IHVybDtcbiAgcmV0dXJuIGEuaHJlZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFuZEVuY29kZSh1cmwsIG9wdGlvbnMpIHtcbiAgY29uc3QgVElNRU9VVCA9IDMwMDAwO1xuICBpZiAob3B0aW9ucy5jYWNoZUJ1c3QpIHtcbiAgICAvLyBDYWNoZSBieXBhc3Mgc28gd2UgZG9udCBoYXZlIENPUlMgaXNzdWVzIHdpdGggY2FjaGVkIGltYWdlc1xuICAgIC8vIFNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L1VzaW5nX1hNTEh0dHBSZXF1ZXN0I0J5cGFzc2luZ190aGVfY2FjaGVcbiAgICB1cmwgKz0gKC9cXD8vLnRlc3QodXJsKSA/ICcmJyA6ICc/JykgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBkb25lO1xuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gdGltZW91dDtcbiAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBUSU1FT1VUO1xuICAgIHJlcXVlc3Qub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgICByZXF1ZXN0LnNlbmQoKTtcblxuICAgIGxldCBwbGFjZWhvbGRlcjtcbiAgICBpZiAob3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyKSB7XG4gICAgICBjb25zdCBzcGxpdCA9IG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlci5zcGxpdCgvLC8pO1xuICAgICAgaWYgKHNwbGl0ICYmIHNwbGl0WzFdKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gc3BsaXRbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHJldHVybjtcblxuICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgcmVzb2x2ZShwbGFjZWhvbGRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFpbChgY2Fubm90IGZldGNoIHJlc291cmNlOiAke3VybH0sIHN0YXR1czogJHtyZXF1ZXN0LnN0YXR1c31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyB3aW5kb3cuRmlsZVJlYWRlcigpO1xuICAgICAgZW5jb2Rlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlbmNvZGVyLnJlc3VsdC5zcGxpdCgvLC8pWzFdO1xuICAgICAgICByZXNvbHZlKGNvbnRlbnQpO1xuICAgICAgfTtcbiAgICAgIGVuY29kZXIucmVhZEFzRGF0YVVSTChyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0aW1lb3V0KCkge1xuICAgICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFpbChgdGltZW91dCBvZiAke1RJTUVPVVR9bXMgb2NjdXJyZWQgd2hpbGUgZmV0Y2hpbmcgcmVzb3VyY2U6ICR7dXJsfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIHJlc29sdmUoJycpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
|
|
@@ -294,4 +294,4 @@ var exporters = {
|
|
|
294
294
|
};
|
|
295
295
|
var _default = exporters;
|
|
296
296
|
exports["default"] = _default;
|
|
297
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9leHBvcnQtdXRpbHMuanMiXSwibmFtZXMiOlsiREVGQVVMVF9JTUFHRV9OQU1FIiwiREVGQVVMVF9IVE1MX05BTUUiLCJERUZBVUxUX0pTT05fTkFNRSIsIkRFRkFVTFRfREFUQV9OQU1FIiwiREVGQVVMVF9FWFBPUlRfSlNPTl9TRVRUSU5HUyIsImhhc0RhdGEiLCJkZWZhdWx0UmVzb2x1dGlvbiIsIkVYUE9SVF9JTUdfUkVTT0xVVElPTl9PUFRJT05TIiwiZmluZCIsIm9wIiwiaWQiLCJSRVNPTFVUSU9OUyIsIk9ORV9YIiwiZGVmYXVsdFJhdGlvIiwiRVhQT1JUX0lNR19SQVRJT19PUFRJT05TIiwiRVhQT1JUX0lNR19SQVRJT1MiLCJGT1VSX0JZX1RIUkVFIiwiaXNNU0VkZ2UiLCJ3aW5kb3ciLCJCb29sZWFuIiwibmF2aWdhdG9yIiwibXNTYXZlT3JPcGVuQmxvYiIsImdldFNjYWxlRnJvbUltYWdlU2l6ZSIsImltYWdlVyIsImltYWdlSCIsIm1hcFciLCJtYXBIIiwic29tZSIsImQiLCJiYXNlIiwibWFwQmFzZSIsImNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSIsInJhdGlvIiwicmVzb2x1dGlvbiIsInJhdGlvSXRlbSIsInJlc29sdXRpb25JdGVtIiwiZ2V0U2l6ZSIsInNjYWxlZFdpZHRoIiwid2lkdGgiLCJzY2FsZWRIZWlnaHQiLCJoZWlnaHQiLCJDVVNUT00iLCJzY2FsZSIsImNvbnZlcnRUb1BuZyIsInNvdXJjZUVsZW0iLCJvcHRpb25zIiwiZG9tdG9pbWFnZSIsInRvUG5nIiwiZGF0YVVSSXRvQmxvYiIsImRhdGFVUkkiLCJiaW5hcnkiLCJzcGxpdCIsIm1pbWVTdHJpbmciLCJhYiIsIkFycmF5QnVmZmVyIiwibGVuZ3RoIiwiaWEiLCJVaW50OEFycmF5IiwiaSIsImNoYXJDb2RlQXQiLCJCbG9iIiwidHlwZSIsImRvd25sb2FkRmlsZSIsImZpbGVCbG9iIiwiZmlsZU5hbWUiLCJ1cmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImV4cG9ydEltYWdlIiwic3RhdGUiLCJmaWxlbmFtZSIsImltYWdlRGF0YVVyaSIsInVpU3RhdGUiLCJmaWxlIiwiZXhwb3J0VG9Kc29uU3RyaW5nIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJlIiwiZGVzY3JpcHRpb24iLCJnZXRNYXBKU09OIiwic2NoZW1hIiwidmlzU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtYXBUb1NhdmUiLCJzYXZlIiwidGl0bGUiLCJleHBvcnRKc29uIiwibWFwIiwiYXBwTmFtZSIsImV4cG9ydEh0bWwiLCJ1c2VyTWFwYm94VG9rZW4iLCJleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiIsIm1vZGUiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsImV4cG9ydERhdGEiLCJvcHRpb24iLCJkYXRhc2V0cyIsInNlbGVjdGVkRGF0YXNldCIsImRhdGFUeXBlIiwiZmlsdGVyZWQiLCJzZWxlY3RlZERhdGFzZXRzIiwiT2JqZWN0IiwidmFsdWVzIiwiZm9yRWFjaCIsInNlbGVjdGVkRGF0YSIsImRhdGFDb250YWluZXIiLCJmaWVsZHMiLCJsYWJlbCIsImZpbHRlcmVkSWR4Q1BVIiwidG9FeHBvcnQiLCJFWFBPUlRfREFUQV9UWVBFIiwiQ1NWIiwiY3N2IiwiZXhwb3J0TWFwIiwidGh1bWJuYWlsIiwiZXhwb3J0ZXJzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkE7O0FBQ0E7O0FBQ0E7O0FBT0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNPLElBQU1BLGtCQUFrQixHQUFHLGVBQTNCOztBQUNBLElBQU1DLGlCQUFpQixHQUFHLGdCQUExQjs7QUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxnQkFBMUI7O0FBQ0EsSUFBTUMsaUJBQWlCLEdBQUcsV0FBMUI7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sSUFBTUMsNEJBQTRCLEdBQUc7QUFDMUNDLEVBQUFBLE9BQU8sRUFBRTtBQURpQyxDQUFyQzs7O0FBSVAsSUFBTUMsaUJBQWlCLEdBQUdDLCtDQUE4QkMsSUFBOUIsQ0FBbUMsVUFBQUMsRUFBRTtBQUFBLFNBQUlBLEVBQUUsQ0FBQ0MsRUFBSCxLQUFVQyw2QkFBWUMsS0FBMUI7QUFBQSxDQUFyQyxDQUExQjs7QUFFQSxJQUFNQyxZQUFZLEdBQUdDLDBDQUF5Qk4sSUFBekIsQ0FBOEIsVUFBQUMsRUFBRTtBQUFBLFNBQUlBLEVBQUUsQ0FBQ0MsRUFBSCxLQUFVSyxtQ0FBa0JDLGFBQWhDO0FBQUEsQ0FBaEMsQ0FBckI7O0FBRU8sU0FBU0MsUUFBVCxDQUFrQkMsTUFBbEIsRUFBMEI7QUFDL0IsU0FBT0MsT0FBTyxDQUFDRCxNQUFNLENBQUNFLFNBQVAsSUFBb0JGLE1BQU0sQ0FBQ0UsU0FBUCxDQUFpQkMsZ0JBQXRDLENBQWQ7QUFDRDs7QUFFTSxTQUFTQyxxQkFBVCxHQUEyRTtBQUFBLE1BQTVDQyxNQUE0Qyx1RUFBbkMsQ0FBbUM7QUFBQSxNQUFoQ0MsTUFBZ0MsdUVBQXZCLENBQXVCO0FBQUEsTUFBcEJDLElBQW9CLHVFQUFiLENBQWE7QUFBQSxNQUFWQyxJQUFVLHVFQUFILENBQUc7O0FBQ2hGLE1BQUksQ0FBQ0gsTUFBRCxFQUFTQyxNQUFULEVBQWlCQyxJQUFqQixFQUF1QkMsSUFBdkIsRUFBNkJDLElBQTdCLENBQWtDLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFDLElBQUksQ0FBVDtBQUFBLEdBQW5DLENBQUosRUFBb0Q7QUFDbEQsV0FBTyxDQUFQO0FBQ0Q7O0FBRUQsTUFBTUMsSUFBSSxHQUFHTixNQUFNLEdBQUdDLE1BQVQsR0FBa0IsQ0FBbEIsR0FBc0JELE1BQXRCLEdBQStCQyxNQUE1QztBQUNBLE1BQU1NLE9BQU8sR0FBR1AsTUFBTSxHQUFHQyxNQUFULEdBQWtCLENBQWxCLEdBQXNCQyxJQUF0QixHQUE2QkMsSUFBN0M7QUFDQSxTQUFPRyxJQUFJLEdBQUdDLE9BQWQ7QUFDRDs7QUFFTSxTQUFTQyx3QkFBVCxPQUFtRTtBQUFBLE1BQWhDTixJQUFnQyxRQUFoQ0EsSUFBZ0M7QUFBQSxNQUExQkMsSUFBMEIsUUFBMUJBLElBQTBCO0FBQUEsTUFBcEJNLEtBQW9CLFFBQXBCQSxLQUFvQjtBQUFBLE1BQWJDLFVBQWEsUUFBYkEsVUFBYTs7QUFDeEUsTUFBSVIsSUFBSSxJQUFJLENBQVIsSUFBYUMsSUFBSSxJQUFJLENBQXpCLEVBQTRCO0FBQzFCLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQU1RLFNBQVMsR0FBR3BCLDBDQUF5Qk4sSUFBekIsQ0FBOEIsVUFBQUMsRUFBRTtBQUFBLFdBQUlBLEVBQUUsQ0FBQ0MsRUFBSCxLQUFVc0IsS0FBZDtBQUFBLEdBQWhDLEtBQXdEbkIsWUFBMUU7QUFFQSxNQUFNc0IsY0FBYyxHQUNsQjVCLCtDQUE4QkMsSUFBOUIsQ0FBbUMsVUFBQUMsRUFBRTtBQUFBLFdBQUlBLEVBQUUsQ0FBQ0MsRUFBSCxLQUFVdUIsVUFBZDtBQUFBLEdBQXJDLEtBQWtFM0IsaUJBRHBFOztBQVB3RSw4QkFVckI2QixjQUFjLENBQUNDLE9BQWYsQ0FBdUJYLElBQXZCLEVBQTZCQyxJQUE3QixDQVZxQjtBQUFBLE1BVTFEVyxXQVYwRCx5QkFVakVDLEtBVmlFO0FBQUEsTUFVckNDLFlBVnFDLHlCQVU3Q0MsTUFWNkM7O0FBQUEsMkJBWWhDTixTQUFTLENBQUNFLE9BQVYsQ0FBa0JDLFdBQWxCLEVBQStCRSxZQUEvQixDQVpnQztBQUFBLE1BWTFEaEIsTUFaMEQsc0JBWWpFZSxLQVppRTtBQUFBLE1BWTFDZCxNQVowQyxzQkFZbERnQixNQVprRDs7QUFBQSxjQWN4RE4sU0FBUyxDQUFDeEIsRUFBVixLQUFpQkssbUNBQWtCMEIsTUFBbkMsR0FBNEMsRUFBNUMsR0FBaUROLGNBZE87QUFBQSxNQWNqRU8sS0FkaUUsU0FjakVBLEtBZGlFOztBQWdCeEUsU0FBTztBQUNMQSxJQUFBQSxLQUFLLEVBQUxBLEtBREs7QUFFTG5CLElBQUFBLE1BQU0sRUFBTkEsTUFGSztBQUdMQyxJQUFBQSxNQUFNLEVBQU5BO0FBSEssR0FBUDtBQUtEOztBQUVNLFNBQVNtQixZQUFULENBQXNCQyxVQUF0QixFQUFrQ0MsT0FBbEMsRUFBMkM7QUFDaEQsU0FBT0MsdUJBQVdDLEtBQVgsQ0FBaUJILFVBQWpCLEVBQTZCQyxPQUE3QixDQUFQO0FBQ0Q7O0FBRU0sU0FBU0csYUFBVCxDQUF1QkMsT0FBdkIsRUFBZ0M7QUFDckMsTUFBTUMsTUFBTSxHQUFHLGtCQUFLRCxPQUFPLENBQUNFLEtBQVIsQ0FBYyxHQUFkLEVBQW1CLENBQW5CLENBQUwsQ0FBZixDQURxQyxDQUdyQzs7QUFDQSxNQUFNQyxVQUFVLEdBQUdILE9BQU8sQ0FDdkJFLEtBRGdCLENBQ1YsR0FEVSxFQUNMLENBREssRUFFaEJBLEtBRmdCLENBRVYsR0FGVSxFQUVMLENBRkssRUFHaEJBLEtBSGdCLENBR1YsR0FIVSxFQUdMLENBSEssQ0FBbkIsQ0FKcUMsQ0FTckM7O0FBQ0EsTUFBTUUsRUFBRSxHQUFHLElBQUlDLG1CQUFKLENBQWdCSixNQUFNLENBQUNLLE1BQXZCLENBQVgsQ0FWcUMsQ0FZckM7O0FBQ0EsTUFBTUMsRUFBRSxHQUFHLElBQUlDLGtCQUFKLENBQWVKLEVBQWYsQ0FBWDs7QUFFQSxPQUFLLElBQUlLLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdSLE1BQU0sQ0FBQ0ssTUFBM0IsRUFBbUNHLENBQUMsRUFBcEMsRUFBd0M7QUFDdENGLElBQUFBLEVBQUUsQ0FBQ0UsQ0FBRCxDQUFGLEdBQVFSLE1BQU0sQ0FBQ1MsVUFBUCxDQUFrQkQsQ0FBbEIsQ0FBUjtBQUNEOztBQUVELFNBQU8sSUFBSUUsWUFBSixDQUFTLENBQUNQLEVBQUQsQ0FBVCxFQUFlO0FBQUNRLElBQUFBLElBQUksRUFBRVQ7QUFBUCxHQUFmLENBQVA7QUFDRDs7QUFFTSxTQUFTVSxZQUFULENBQXNCQyxRQUF0QixFQUFnQ0MsUUFBaEMsRUFBMEM7QUFDL0MsTUFBSS9DLFFBQVEsQ0FBQ0MsTUFBRCxDQUFaLEVBQXNCO0FBQ3BCQSxJQUFBQSxNQUFNLENBQUNFLFNBQVAsQ0FBaUJDLGdCQUFqQixDQUFrQzBDLFFBQWxDLEVBQTRDQyxRQUE1QztBQUNELEdBRkQsTUFFTztBQUNMLFFBQU1DLEdBQUcsR0FBR0MsWUFBSUMsZUFBSixDQUFvQkosUUFBcEIsQ0FBWjs7QUFFQSxRQUFNSyxJQUFJLEdBQUdDLGlCQUFTQyxhQUFULENBQXVCLEdBQXZCLENBQWI7O0FBQ0FGLElBQUFBLElBQUksQ0FBQ0csWUFBTCxDQUFrQixNQUFsQixFQUEwQk4sR0FBMUI7QUFDQUcsSUFBQUEsSUFBSSxDQUFDRyxZQUFMLENBQWtCLFVBQWxCLEVBQThCUCxRQUE5Qjs7QUFFQUsscUJBQVNHLElBQVQsQ0FBY0MsV0FBZCxDQUEwQkwsSUFBMUI7O0FBQ0FBLElBQUFBLElBQUksQ0FBQ00sS0FBTDs7QUFDQUwscUJBQVNHLElBQVQsQ0FBY0csV0FBZCxDQUEwQlAsSUFBMUI7O0FBQ0FGLGdCQUFJVSxlQUFKLENBQW9CWCxHQUFwQjtBQUNEO0FBQ0Y7O0FBRU0sU0FBU1ksV0FBVCxDQUFxQkMsS0FBckIsRUFBMkQ7QUFBQSxNQUEvQkMsUUFBK0IsdUVBQXBCL0Usa0JBQW9CO0FBQUEsTUFDekRnRixZQUR5RCxHQUN6Q0YsS0FBSyxDQUFDRyxPQUFOLENBQWNKLFdBRDJCLENBQ3pERyxZQUR5RDs7QUFFaEUsTUFBSUEsWUFBSixFQUFrQjtBQUNoQixRQUFNRSxJQUFJLEdBQUdsQyxhQUFhLENBQUNnQyxZQUFELENBQTFCO0FBQ0FsQixJQUFBQSxZQUFZLENBQUNvQixJQUFELEVBQU9ILFFBQVAsQ0FBWjtBQUNEO0FBQ0Y7O0FBRU0sU0FBU0ksa0JBQVQsQ0FBNEJDLElBQTVCLEVBQWtDO0FBQ3ZDLE1BQUk7QUFDRixXQUFPQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUYsSUFBZixDQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9HLENBQVAsRUFBVTtBQUNWLFdBQU9BLENBQUMsQ0FBQ0MsV0FBVDtBQUNEO0FBQ0Y7O0FBRU0sU0FBU0MsVUFBVCxDQUFvQlgsS0FBcEIsRUFBbUU7QUFBQSxNQUF4Q2pDLE9BQXdDLHVFQUE5QnpDLDRCQUE4QjtBQUFBLE1BQ2pFQyxPQURpRSxHQUN0RHdDLE9BRHNELENBQ2pFeEMsT0FEaUU7QUFFeEUsTUFBTXFGLE1BQU0sR0FBR1osS0FBSyxDQUFDYSxRQUFOLENBQWVELE1BQTlCOztBQUVBLE1BQUksQ0FBQ3JGLE9BQUwsRUFBYztBQUNaLFdBQU9xRixNQUFNLENBQUNFLGVBQVAsQ0FBdUJkLEtBQXZCLENBQVA7QUFDRDs7QUFFRCxNQUFJZSxTQUFTLEdBQUdILE1BQU0sQ0FBQ0ksSUFBUCxDQUFZaEIsS0FBWixDQUFoQixDQVJ3RSxDQVN4RTs7QUFDQSxNQUFNaUIsS0FBSyxHQUFHLHdCQUFJRixTQUFKLEVBQWUsQ0FBQyxNQUFELEVBQVMsT0FBVCxDQUFmLENBQWQ7O0FBQ0EsTUFBSSxDQUFDRSxLQUFELElBQVUsQ0FBQ0EsS0FBSyxDQUFDeEMsTUFBckIsRUFBNkI7QUFDM0JzQyxJQUFBQSxTQUFTLEdBQUcsZ0JBQUksQ0FBQyxNQUFELEVBQVMsT0FBVCxDQUFKLHFCQUFtQywyQkFBZSxDQUFmLENBQW5DLEdBQXdEQSxTQUF4RCxDQUFaO0FBQ0Q7O0FBQ0QsU0FBT0EsU0FBUDtBQUNEOztBQUVNLFNBQVNHLFVBQVQsQ0FBb0JsQixLQUFwQixFQUF5QztBQUFBLE1BQWRqQyxPQUFjLHVFQUFKLEVBQUk7QUFDOUMsTUFBTW9ELEdBQUcsR0FBR1IsVUFBVSxDQUFDWCxLQUFELEVBQVFqQyxPQUFSLENBQXRCO0FBRUEsTUFBTWtCLFFBQVEsR0FBRyxJQUFJSCxZQUFKLENBQVMsQ0FBQ3VCLGtCQUFrQixDQUFDYyxHQUFELENBQW5CLENBQVQsRUFBb0M7QUFBQ3BDLElBQUFBLElBQUksRUFBRTtBQUFQLEdBQXBDLENBQWpCO0FBQ0EsTUFBTUcsUUFBUSxHQUFHYyxLQUFLLENBQUNvQixPQUFOLGFBQW1CcEIsS0FBSyxDQUFDb0IsT0FBekIsYUFBMENoRyxpQkFBM0Q7QUFDQTRELEVBQUFBLFlBQVksQ0FBQ0MsUUFBRCxFQUFXQyxRQUFYLENBQVo7QUFDRDs7QUFFTSxTQUFTbUMsVUFBVCxDQUFvQnJCLEtBQXBCLEVBQTJCakMsT0FBM0IsRUFBb0M7QUFBQSxNQUNsQ3VELGVBRGtDLEdBQ2dCdkQsT0FEaEIsQ0FDbEN1RCxlQURrQztBQUFBLE1BQ2pCQyx1QkFEaUIsR0FDZ0J4RCxPQURoQixDQUNqQndELHVCQURpQjtBQUFBLE1BQ1FDLElBRFIsR0FDZ0J6RCxPQURoQixDQUNReUQsSUFEUjs7QUFHekMsTUFBTWxCLElBQUksbUNBQ0xLLFVBQVUsQ0FBQ1gsS0FBRCxDQURMO0FBRVJ5QixJQUFBQSxvQkFBb0IsRUFDbEIsQ0FBQ0gsZUFBZSxJQUFJLEVBQXBCLE1BQTRCLEVBQTVCLEdBQWlDQSxlQUFqQyxHQUFtREMsdUJBSDdDO0FBSVJDLElBQUFBLElBQUksRUFBSkE7QUFKUSxJQUFWOztBQU9BLE1BQU12QyxRQUFRLEdBQUcsSUFBSUgsWUFBSixDQUFTLENBQUMsb0NBQWdCd0IsSUFBaEIsQ0FBRCxDQUFULEVBQWtDO0FBQUN2QixJQUFBQSxJQUFJLEVBQUU7QUFBUCxHQUFsQyxDQUFqQjtBQUNBQyxFQUFBQSxZQUFZLENBQUNDLFFBQUQsRUFBV2UsS0FBSyxDQUFDb0IsT0FBTixhQUFtQnBCLEtBQUssQ0FBQ29CLE9BQXpCLGFBQTBDakcsaUJBQXJELENBQVo7QUFDRDs7QUFFTSxTQUFTdUcsVUFBVCxDQUFvQjFCLEtBQXBCLEVBQTJCMkIsTUFBM0IsRUFBbUM7QUFBQSxNQUNqQ2QsUUFEaUMsR0FDWmIsS0FEWSxDQUNqQ2EsUUFEaUM7QUFBQSxNQUN2Qk8sT0FEdUIsR0FDWnBCLEtBRFksQ0FDdkJvQixPQUR1QjtBQUFBLE1BRWpDUSxRQUZpQyxHQUVyQmYsUUFGcUIsQ0FFakNlLFFBRmlDO0FBQUEsTUFHakNDLGVBSGlDLEdBR01GLE1BSE4sQ0FHakNFLGVBSGlDO0FBQUEsTUFHaEJDLFFBSGdCLEdBR01ILE1BSE4sQ0FHaEJHLFFBSGdCO0FBQUEsTUFHTkMsUUFITSxHQUdNSixNQUhOLENBR05JLFFBSE0sRUFJeEM7O0FBQ0EsTUFBTTlCLFFBQVEsR0FBR21CLE9BQU8sR0FBR0EsT0FBSCxHQUFhL0YsaUJBQXJDO0FBQ0EsTUFBTTJHLGdCQUFnQixHQUFHSixRQUFRLENBQUNDLGVBQUQsQ0FBUixHQUNyQixDQUFDRCxRQUFRLENBQUNDLGVBQUQsQ0FBVCxDQURxQixHQUVyQkksTUFBTSxDQUFDQyxNQUFQLENBQWNOLFFBQWQsQ0FGSjs7QUFHQSxNQUFJLENBQUNJLGdCQUFnQixDQUFDdkQsTUFBdEIsRUFBOEI7QUFDNUI7QUFDQTtBQUNEOztBQUVEdUQsRUFBQUEsZ0JBQWdCLENBQUNHLE9BQWpCLENBQXlCLFVBQUFDLFlBQVksRUFBSTtBQUFBLFFBQ2hDQyxhQURnQyxHQUNxQkQsWUFEckIsQ0FDaENDLGFBRGdDO0FBQUEsUUFDakJDLE1BRGlCLEdBQ3FCRixZQURyQixDQUNqQkUsTUFEaUI7QUFBQSxRQUNUQyxLQURTLEdBQ3FCSCxZQURyQixDQUNURyxLQURTO0FBQUEsZ0NBQ3FCSCxZQURyQixDQUNGSSxjQURFO0FBQUEsUUFDRkEsY0FERSxzQ0FDZSxFQURmO0FBRXZDLFFBQU1DLFFBQVEsR0FBR1YsUUFBUSxHQUNyQixvREFBMkJNLGFBQTNCLEVBQTBDRyxjQUExQyxDQURxQixHQUVyQkgsYUFGSixDQUZ1QyxDQU12Qzs7QUFDQSxZQUFRUCxRQUFSO0FBQ0UsV0FBS1ksa0NBQWlCQyxHQUF0QjtBQUEyQjtBQUN6QixjQUFNQyxHQUFHLEdBQUcsOEJBQVVILFFBQVYsRUFBb0JILE1BQXBCLENBQVo7QUFFQSxjQUFNckQsUUFBUSxHQUFHLElBQUlILFlBQUosQ0FBUyxDQUFDOEQsR0FBRCxDQUFULEVBQWdCO0FBQUM3RCxZQUFBQSxJQUFJLEVBQUU7QUFBUCxXQUFoQixDQUFqQjtBQUNBQyxVQUFBQSxZQUFZLENBQUNDLFFBQUQsWUFBY2dCLFFBQWQsY0FBMEJzQyxLQUExQixVQUFaO0FBQ0E7QUFDRDtBQUNEOztBQUNBO0FBQ0U7QUFWSjtBQVlELEdBbkJEO0FBb0JEOztBQUVNLFNBQVNNLFNBQVQsQ0FBbUI3QyxLQUFuQixFQUEwQjJCLE1BQTFCLEVBQWtDO0FBQUEsTUFDaEN6QixZQURnQyxHQUNoQkYsS0FBSyxDQUFDRyxPQUFOLENBQWNKLFdBREUsQ0FDaENHLFlBRGdDO0FBRXZDLE1BQU00QyxTQUFTLEdBQUc1QyxZQUFZLEdBQUdoQyxhQUFhLENBQUNnQyxZQUFELENBQWhCLEdBQWlDLElBQS9EO0FBQ0EsTUFBTWEsU0FBUyxHQUFHSixVQUFVLENBQUNYLEtBQUQsRUFBUTJCLE1BQVIsQ0FBNUI7QUFFQSxTQUFPO0FBQ0xSLElBQUFBLEdBQUcsRUFBRUosU0FEQTtBQUVMK0IsSUFBQUEsU0FBUyxFQUFUQTtBQUZLLEdBQVA7QUFJRDs7QUFFRCxJQUFNQyxTQUFTLEdBQUc7QUFDaEJoRCxFQUFBQSxXQUFXLEVBQVhBLFdBRGdCO0FBRWhCbUIsRUFBQUEsVUFBVSxFQUFWQSxVQUZnQjtBQUdoQkcsRUFBQUEsVUFBVSxFQUFWQSxVQUhnQjtBQUloQkssRUFBQUEsVUFBVSxFQUFWQTtBQUpnQixDQUFsQjtlQU9lcUIsUyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgZG9tdG9pbWFnZSBmcm9tICd1dGlscy9kb20tdG8taW1hZ2UnO1xuaW1wb3J0IHtCbG9iLCBVUkwsIGF0b2IsIFVpbnQ4QXJyYXksIEFycmF5QnVmZmVyLCBkb2N1bWVudH0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge1xuICBFWFBPUlRfSU1HX1JFU09MVVRJT05fT1BUSU9OUyxcbiAgRVhQT1JUX0lNR19SQVRJT19PUFRJT05TLFxuICBSRVNPTFVUSU9OUyxcbiAgRVhQT1JUX0lNR19SQVRJT1MsXG4gIEVYUE9SVF9EQVRBX1RZUEVcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtleHBvcnRNYXBUb0hUTUx9IGZyb20gJ3RlbXBsYXRlcy9leHBvcnQtbWFwLWh0bWwnO1xuaW1wb3J0IHtmb3JtYXRDc3Z9IGZyb20gJ3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCB7c2V0LCBnZW5lcmF0ZUhhc2hJZH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2NyZWF0ZUluZGV4ZWREYXRhQ29udGFpbmVyfSBmcm9tICcuL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLXV0aWxzJztcblxuLyoqXG4gKiBEZWZhdWx0IGZpbGUgbmFtZXNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU1BR0VfTkFNRSA9ICdrZXBsZXIuZ2wucG5nJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hUTUxfTkFNRSA9ICdrZXBsZXIuZ2wuaHRtbCc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9KU09OX05BTUUgPSAna2VwbGVyLmdsLmpzb24nO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfREFUQV9OQU1FID0gJ2tlcGxlci5nbCc7XG5cbi8qKlxuICogRGVmYXVsdCBqc29uIGV4cG9ydCBzZXR0aW5nc1xuICogQHR5cGUge3toYXNEYXRhOiBib29sZWFufX1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0pTT05fU0VUVElOR1MgPSB7XG4gIGhhc0RhdGE6IHRydWVcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXNvbHV0aW9uID0gRVhQT1JUX0lNR19SRVNPTFVUSU9OX09QVElPTlMuZmluZChvcCA9PiBvcC5pZCA9PT0gUkVTT0xVVElPTlMuT05FX1gpO1xuXG5jb25zdCBkZWZhdWx0UmF0aW8gPSBFWFBPUlRfSU1HX1JBVElPX09QVElPTlMuZmluZChvcCA9PiBvcC5pZCA9PT0gRVhQT1JUX0lNR19SQVRJT1MuRk9VUl9CWV9USFJFRSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01TRWRnZSh3aW5kb3cpIHtcbiAgcmV0dXJuIEJvb2xlYW4od2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVGcm9tSW1hZ2VTaXplKGltYWdlVyA9IDAsIGltYWdlSCA9IDAsIG1hcFcgPSAwLCBtYXBIID0gMCkge1xuICBpZiAoW2ltYWdlVywgaW1hZ2VILCBtYXBXLCBtYXBIXS5zb21lKGQgPT4gZCA8PSAwKSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IGltYWdlVyAvIGltYWdlSCA+IDEgPyBpbWFnZVcgOiBpbWFnZUg7XG4gIGNvbnN0IG1hcEJhc2UgPSBpbWFnZVcgLyBpbWFnZUggPiAxID8gbWFwVyA6IG1hcEg7XG4gIHJldHVybiBiYXNlIC8gbWFwQmFzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSh7bWFwVywgbWFwSCwgcmF0aW8sIHJlc29sdXRpb259KSB7XG4gIGlmIChtYXBXIDw9IDAgfHwgbWFwSCA8PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByYXRpb0l0ZW0gPSBFWFBPUlRfSU1HX1JBVElPX09QVElPTlMuZmluZChvcCA9PiBvcC5pZCA9PT0gcmF0aW8pIHx8IGRlZmF1bHRSYXRpbztcblxuICBjb25zdCByZXNvbHV0aW9uSXRlbSA9XG4gICAgRVhQT1JUX0lNR19SRVNPTFVUSU9OX09QVElPTlMuZmluZChvcCA9PiBvcC5pZCA9PT0gcmVzb2x1dGlvbikgfHwgZGVmYXVsdFJlc29sdXRpb247XG5cbiAgY29uc3Qge3dpZHRoOiBzY2FsZWRXaWR0aCwgaGVpZ2h0OiBzY2FsZWRIZWlnaHR9ID0gcmVzb2x1dGlvbkl0ZW0uZ2V0U2l6ZShtYXBXLCBtYXBIKTtcblxuICBjb25zdCB7d2lkdGg6IGltYWdlVywgaGVpZ2h0OiBpbWFnZUh9ID0gcmF0aW9JdGVtLmdldFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7XG5cbiAgY29uc3Qge3NjYWxlfSA9IHJhdGlvSXRlbS5pZCA9PT0gRVhQT1JUX0lNR19SQVRJT1MuQ1VTVE9NID8ge30gOiByZXNvbHV0aW9uSXRlbTtcblxuICByZXR1cm4ge1xuICAgIHNjYWxlLFxuICAgIGltYWdlVyxcbiAgICBpbWFnZUhcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb1BuZyhzb3VyY2VFbGVtLCBvcHRpb25zKSB7XG4gIHJldHVybiBkb210b2ltYWdlLnRvUG5nKHNvdXJjZUVsZW0sIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0YVVSSXRvQmxvYihkYXRhVVJJKSB7XG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YVVSSS5zcGxpdCgnLCcpWzFdKTtcblxuICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gIGNvbnN0IG1pbWVTdHJpbmcgPSBkYXRhVVJJXG4gICAgLnNwbGl0KCcsJylbMF1cbiAgICAuc3BsaXQoJzonKVsxXVxuICAgIC5zcGxpdCgnOycpWzBdO1xuXG4gIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJpbmFyeS5sZW5ndGgpO1xuXG4gIC8vIGNyZWF0ZSBhIHZpZXcgaW50byB0aGUgYnVmZmVyXG4gIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWFbaV0gPSBiaW5hcnkuY2hhckNvZGVBdChpKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgQmxvYihbYWJdLCB7dHlwZTogbWltZVN0cmluZ30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRGaWxlKGZpbGVCbG9iLCBmaWxlTmFtZSkge1xuICBpZiAoaXNNU0VkZ2Uod2luZG93KSkge1xuICAgIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihmaWxlQmxvYiwgZmlsZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZUJsb2IpO1xuXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUpO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICBsaW5rLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydEltYWdlKHN0YXRlLCBmaWxlbmFtZSA9IERFRkFVTFRfSU1BR0VfTkFNRSkge1xuICBjb25zdCB7aW1hZ2VEYXRhVXJpfSA9IHN0YXRlLnVpU3RhdGUuZXhwb3J0SW1hZ2U7XG4gIGlmIChpbWFnZURhdGFVcmkpIHtcbiAgICBjb25zdCBmaWxlID0gZGF0YVVSSXRvQmxvYihpbWFnZURhdGFVcmkpO1xuICAgIGRvd25sb2FkRmlsZShmaWxlLCBmaWxlbmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFRvSnNvblN0cmluZyhkYXRhKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGUuZGVzY3JpcHRpb247XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcEpTT04oc3RhdGUsIG9wdGlvbnMgPSBERUZBVUxUX0VYUE9SVF9KU09OX1NFVFRJTkdTKSB7XG4gIGNvbnN0IHtoYXNEYXRhfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNjaGVtYSA9IHN0YXRlLnZpc1N0YXRlLnNjaGVtYTtcblxuICBpZiAoIWhhc0RhdGEpIHtcbiAgICByZXR1cm4gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZShzdGF0ZSk7XG4gIH1cblxuICBsZXQgbWFwVG9TYXZlID0gc2NoZW1hLnNhdmUoc3RhdGUpO1xuICAvLyBhZGQgZmlsZSBuYW1lIGlmIHRpdGxlIGlzIG5vdCBwcm92aWRlZFxuICBjb25zdCB0aXRsZSA9IGdldChtYXBUb1NhdmUsIFsnaW5mbycsICd0aXRsZSddKTtcbiAgaWYgKCF0aXRsZSB8fCAhdGl0bGUubGVuZ3RoKSB7XG4gICAgbWFwVG9TYXZlID0gc2V0KFsnaW5mbycsICd0aXRsZSddLCBga2VwbGVyZ2xfJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLCBtYXBUb1NhdmUpO1xuICB9XG4gIHJldHVybiBtYXBUb1NhdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRKc29uKHN0YXRlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgbWFwID0gZ2V0TWFwSlNPTihzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgZmlsZUJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9Kc29uU3RyaW5nKG1hcCldLCB7dHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nfSk7XG4gIGNvbnN0IGZpbGVOYW1lID0gc3RhdGUuYXBwTmFtZSA/IGAke3N0YXRlLmFwcE5hbWV9Lmpzb25gIDogREVGQVVMVF9KU09OX05BTUU7XG4gIGRvd25sb2FkRmlsZShmaWxlQmxvYiwgZmlsZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0SHRtbChzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7dXNlck1hcGJveFRva2VuLCBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiwgbW9kZX0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgLi4uZ2V0TWFwSlNPTihzdGF0ZSksXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW46XG4gICAgICAodXNlck1hcGJveFRva2VuIHx8ICcnKSAhPT0gJycgPyB1c2VyTWFwYm94VG9rZW4gOiBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbixcbiAgICBtb2RlXG4gIH07XG5cbiAgY29uc3QgZmlsZUJsb2IgPSBuZXcgQmxvYihbZXhwb3J0TWFwVG9IVE1MKGRhdGEpXSwge3R5cGU6ICd0ZXh0L2h0bWwnfSk7XG4gIGRvd25sb2FkRmlsZShmaWxlQmxvYiwgc3RhdGUuYXBwTmFtZSA/IGAke3N0YXRlLmFwcE5hbWV9Lmh0bWxgIDogREVGQVVMVF9IVE1MX05BTUUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0RGF0YShzdGF0ZSwgb3B0aW9uKSB7XG4gIGNvbnN0IHt2aXNTdGF0ZSwgYXBwTmFtZX0gPSBzdGF0ZTtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHZpc1N0YXRlO1xuICBjb25zdCB7c2VsZWN0ZWREYXRhc2V0LCBkYXRhVHlwZSwgZmlsdGVyZWR9ID0gb3B0aW9uO1xuICAvLyBnZXQgdGhlIHNlbGVjdGVkIGRhdGFcbiAgY29uc3QgZmlsZW5hbWUgPSBhcHBOYW1lID8gYXBwTmFtZSA6IERFRkFVTFRfREFUQV9OQU1FO1xuICBjb25zdCBzZWxlY3RlZERhdGFzZXRzID0gZGF0YXNldHNbc2VsZWN0ZWREYXRhc2V0XVxuICAgID8gW2RhdGFzZXRzW3NlbGVjdGVkRGF0YXNldF1dXG4gICAgOiBPYmplY3QudmFsdWVzKGRhdGFzZXRzKTtcbiAgaWYgKCFzZWxlY3RlZERhdGFzZXRzLmxlbmd0aCkge1xuICAgIC8vIGVycm9yOiBzZWxlY3RlZCBkYXRhc2V0IG5vdCBmb3VuZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzZWxlY3RlZERhdGFzZXRzLmZvckVhY2goc2VsZWN0ZWREYXRhID0+IHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmllbGRzLCBsYWJlbCwgZmlsdGVyZWRJZHhDUFUgPSBbXX0gPSBzZWxlY3RlZERhdGE7XG4gICAgY29uc3QgdG9FeHBvcnQgPSBmaWx0ZXJlZFxuICAgICAgPyBjcmVhdGVJbmRleGVkRGF0YUNvbnRhaW5lcihkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZElkeENQVSlcbiAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIC8vIHN0YXJ0IHRvIGV4cG9ydCBkYXRhIGFjY29yZGluZyB0byBzZWxlY3RlZCBkYXRhIHR5cGVcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICBjYXNlIEVYUE9SVF9EQVRBX1RZUEUuQ1NWOiB7XG4gICAgICAgIGNvbnN0IGNzdiA9IGZvcm1hdENzdih0b0V4cG9ydCwgZmllbGRzKTtcblxuICAgICAgICBjb25zdCBmaWxlQmxvYiA9IG5ldyBCbG9iKFtjc3ZdLCB7dHlwZTogJ3RleHQvY3N2J30pO1xuICAgICAgICBkb3dubG9hZEZpbGUoZmlsZUJsb2IsIGAke2ZpbGVuYW1lfV8ke2xhYmVsfS5jc3ZgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBzdXBwb3J0IG1vcmUgZmlsZSB0eXBlcy5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRNYXAoc3RhdGUsIG9wdGlvbikge1xuICBjb25zdCB7aW1hZ2VEYXRhVXJpfSA9IHN0YXRlLnVpU3RhdGUuZXhwb3J0SW1hZ2U7XG4gIGNvbnN0IHRodW1ibmFpbCA9IGltYWdlRGF0YVVyaSA/IGRhdGFVUkl0b0Jsb2IoaW1hZ2VEYXRhVXJpKSA6IG51bGw7XG4gIGNvbnN0IG1hcFRvU2F2ZSA9IGdldE1hcEpTT04oc3RhdGUsIG9wdGlvbik7XG5cbiAgcmV0dXJuIHtcbiAgICBtYXA6IG1hcFRvU2F2ZSxcbiAgICB0aHVtYm5haWxcbiAgfTtcbn1cblxuY29uc3QgZXhwb3J0ZXJzID0ge1xuICBleHBvcnRJbWFnZSxcbiAgZXhwb3J0SnNvbixcbiAgZXhwb3J0SHRtbCxcbiAgZXhwb3J0RGF0YVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0ZXJzO1xuIl19
|
|
297
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9leHBvcnQtdXRpbHMuanMiXSwibmFtZXMiOlsiREVGQVVMVF9JTUFHRV9OQU1FIiwiREVGQVVMVF9IVE1MX05BTUUiLCJERUZBVUxUX0pTT05fTkFNRSIsIkRFRkFVTFRfREFUQV9OQU1FIiwiREVGQVVMVF9FWFBPUlRfSlNPTl9TRVRUSU5HUyIsImhhc0RhdGEiLCJkZWZhdWx0UmVzb2x1dGlvbiIsIkVYUE9SVF9JTUdfUkVTT0xVVElPTl9PUFRJT05TIiwiZmluZCIsIm9wIiwiaWQiLCJSRVNPTFVUSU9OUyIsIk9ORV9YIiwiZGVmYXVsdFJhdGlvIiwiRVhQT1JUX0lNR19SQVRJT19PUFRJT05TIiwiRVhQT1JUX0lNR19SQVRJT1MiLCJGT1VSX0JZX1RIUkVFIiwiaXNNU0VkZ2UiLCJ3aW5kb3ciLCJCb29sZWFuIiwibmF2aWdhdG9yIiwibXNTYXZlT3JPcGVuQmxvYiIsImdldFNjYWxlRnJvbUltYWdlU2l6ZSIsImltYWdlVyIsImltYWdlSCIsIm1hcFciLCJtYXBIIiwic29tZSIsImQiLCJiYXNlIiwibWFwQmFzZSIsImNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSIsInJhdGlvIiwicmVzb2x1dGlvbiIsInJhdGlvSXRlbSIsInJlc29sdXRpb25JdGVtIiwiZ2V0U2l6ZSIsInNjYWxlZFdpZHRoIiwid2lkdGgiLCJzY2FsZWRIZWlnaHQiLCJoZWlnaHQiLCJDVVNUT00iLCJzY2FsZSIsImNvbnZlcnRUb1BuZyIsInNvdXJjZUVsZW0iLCJvcHRpb25zIiwiZG9tdG9pbWFnZSIsInRvUG5nIiwiZGF0YVVSSXRvQmxvYiIsImRhdGFVUkkiLCJiaW5hcnkiLCJzcGxpdCIsIm1pbWVTdHJpbmciLCJhYiIsIkFycmF5QnVmZmVyIiwibGVuZ3RoIiwiaWEiLCJVaW50OEFycmF5IiwiaSIsImNoYXJDb2RlQXQiLCJCbG9iIiwidHlwZSIsImRvd25sb2FkRmlsZSIsImZpbGVCbG9iIiwiZmlsZU5hbWUiLCJ1cmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImV4cG9ydEltYWdlIiwic3RhdGUiLCJmaWxlbmFtZSIsImltYWdlRGF0YVVyaSIsInVpU3RhdGUiLCJmaWxlIiwiZXhwb3J0VG9Kc29uU3RyaW5nIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJlIiwiZGVzY3JpcHRpb24iLCJnZXRNYXBKU09OIiwic2NoZW1hIiwidmlzU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtYXBUb1NhdmUiLCJzYXZlIiwidGl0bGUiLCJleHBvcnRKc29uIiwibWFwIiwiYXBwTmFtZSIsImV4cG9ydEh0bWwiLCJ1c2VyTWFwYm94VG9rZW4iLCJleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiIsIm1vZGUiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsImV4cG9ydERhdGEiLCJvcHRpb24iLCJkYXRhc2V0cyIsInNlbGVjdGVkRGF0YXNldCIsImRhdGFUeXBlIiwiZmlsdGVyZWQiLCJzZWxlY3RlZERhdGFzZXRzIiwiT2JqZWN0IiwidmFsdWVzIiwiZm9yRWFjaCIsInNlbGVjdGVkRGF0YSIsImRhdGFDb250YWluZXIiLCJmaWVsZHMiLCJsYWJlbCIsImZpbHRlcmVkSWR4Q1BVIiwidG9FeHBvcnQiLCJFWFBPUlRfREFUQV9UWVBFIiwiQ1NWIiwiY3N2IiwiZXhwb3J0TWFwIiwidGh1bWJuYWlsIiwiZXhwb3J0ZXJzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkE7O0FBQ0E7O0FBQ0E7O0FBT0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNPLElBQU1BLGtCQUFrQixHQUFHLGVBQTNCOztBQUNBLElBQU1DLGlCQUFpQixHQUFHLGdCQUExQjs7QUFDQSxJQUFNQyxpQkFBaUIsR0FBRyxn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Q0U7QUFWSjtBQVlELEdBbkJEO0FBb0JEOztBQUVNLFNBQVNNLFNBQVQsQ0FBbUI3QyxLQUFuQixFQUEwQjJCLE1BQTFCLEVBQWtDO0FBQUEsTUFDaEN6QixZQURnQyxHQUNoQkYsS0FBSyxDQUFDRyxPQUFOLENBQWNKLFdBREUsQ0FDaENHLFlBRGdDO0FBRXZDLE1BQU00QyxTQUFTLEdBQUc1QyxZQUFZLEdBQUdoQyxhQUFhLENBQUNnQyxZQUFELENBQWhCLEdBQWlDLElBQS9EO0FBQ0EsTUFBTWEsU0FBUyxHQUFHSixVQUFVLENBQUNYLEtBQUQsRUFBUTJCLE1BQVIsQ0FBNUI7QUFFQSxTQUFPO0FBQ0xSLElBQUFBLEdBQUcsRUFBRUosU0FEQTtBQUVMK0IsSUFBQUEsU0FBUyxFQUFUQTtBQUZLLEdBQVA7QUFJRDs7QUFFRCxJQUFNQyxTQUFTLEdBQUc7QUFDaEJoRCxFQUFBQSxXQUFXLEVBQVhBLFdBRGdCO0FBRWhCbUIsRUFBQUEsVUFBVSxFQUFWQSxVQUZnQjtBQUdoQkcsRUFBQUEsVUFBVSxFQUFWQSxVQUhnQjtBQUloQkssRUFBQUEsVUFBVSxFQUFWQTtBQUpnQixDQUFsQjtlQU9lcUIsUyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgZG9tdG9pbWFnZSBmcm9tICd1dGlscy9kb20tdG8taW1hZ2UnO1xuaW1wb3J0IHtCbG9iLCBVUkwsIGF0b2IsIFVpbnQ4QXJyYXksIEFycmF5QnVmZmVyLCBkb2N1bWVudH0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge1xuICBFWFBPUlRfSU1HX1JFU09MVVRJT05fT1BUSU9OUyxcbiAgRVhQT1JUX0lNR19SQVRJT19PUFRJT05TLFxuICBSRVNPTFVUSU9OUyxcbiAgRVhQT1JUX0lNR19SQVRJT1MsXG4gIEVYUE9SVF9EQVRBX1RZUEVcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtleHBvcnRNYXBUb0hUTUx9IGZyb20gJ3RlbXBsYXRlcy9leHBvcnQtbWFwLWh0bWwnO1xuaW1wb3J0IHtmb3JtYXRDc3Z9IGZyb20gJ3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCB7c2V0LCBnZW5lcmF0ZUhhc2hJZH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2NyZWF0ZUluZGV4ZWREYXRhQ29udGFpbmVyfSBmcm9tICcuL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLXV0aWxzJztcblxuLyoqXG4gKiBEZWZhdWx0IGZpbGUgbmFtZXNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU1BR0VfTkFNRSA9ICdrZXBsZXIuZ2wucG5nJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hUTUxfTkFNRSA9ICdrZXBsZXIuZ2wuaHRtbCc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9KU09OX05BTUUgPSAna2VwbGVyLmdsLmpzb24nO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfREFUQV9OQU1FID0gJ2tlcGxlci5nbCc7XG5cbi8qKlxuICogRGVmYXVsdCBqc29uIGV4cG9ydCBzZXR0aW5nc1xuICogQHR5cGUge3toYXNEYXRhOiBib29sZWFufX1cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0pTT05fU0VUVElOR1MgPSB7XG4gIGhhc0RhdGE6IHRydWVcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXNvbHV0aW9uID0gRVhQT1JUX0lNR19SRVNPTFVUSU9OX09QVElPTlMuZmluZChvcCA9PiBvcC5pZCA9PT0gUkVTT0xVVElPTlMuT05FX1gpO1xuXG5jb25zdCBkZWZhdWx0UmF0aW8gPSBFWFBPUlRfSU1HX1JBVElPX09QVElPTlMuZmluZChvcCA9PiBvcC5pZCA9PT0gRVhQT1JUX0lNR19SQVRJT1MuRk9VUl9CWV9USFJFRSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01TRWRnZSh3aW5kb3cpIHtcbiAgcmV0dXJuIEJvb2xlYW4od2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVGcm9tSW1hZ2VTaXplKGltYWdlVyA9IDAsIGltYWdlSCA9IDAsIG1hcFcgPSAwLCBtYXBIID0gMCkge1xuICBpZiAoW2ltYWdlVywgaW1hZ2VILCBtYXBXLCBtYXBIXS5zb21lKGQgPT4gZCA8PSAwKSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IGltYWdlVyAvIGltYWdlSCA+IDEgPyBpbWFnZVcgOiBpbWFnZUg7XG4gIGNvbnN0IG1hcEJhc2UgPSBpbWFnZVcgLyBpbWFnZUggPiAxID8gbWFwVyA6IG1hcEg7XG4gIHJldHVybiBiYXNlIC8gbWFwQmFzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSh7bWFwVywgbWFwSCwgcmF0aW8sIHJlc29sdXRpb259KSB7XG4gIGlmIChtYXBXIDw9IDAgfHwgbWFwSCA8PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByYXRpb0l0ZW0gPSBFWFBPUlRfSU1HX1JBVElPX09QVElPTlMuZmluZChvcCA9PiBvcC5pZCA9PT0gcmF0aW8pIHx8IGRlZmF1bHRSYXRpbztcblxuICBjb25zdCByZXNvbHV0aW9uSXRlbSA9XG4gICAgRVhQT1JUX0lNR19SRVNPTFVUSU9OX09QVElPTlMuZmluZChvcCA9PiBvcC5pZCA9PT0gcmVzb2x1dGlvbikgfHwgZGVmYXVsdFJlc29sdXRpb247XG5cbiAgY29uc3Qge3dpZHRoOiBzY2FsZWRXaWR0aCwgaGVpZ2h0OiBzY2FsZWRIZWlnaHR9ID0gcmVzb2x1dGlvbkl0ZW0uZ2V0U2l6ZShtYXBXLCBtYXBIKTtcblxuICBjb25zdCB7d2lkdGg6IGltYWdlVywgaGVpZ2h0OiBpbWFnZUh9ID0gcmF0aW9JdGVtLmdldFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7XG5cbiAgY29uc3Qge3NjYWxlfSA9IHJhdGlvSXRlbS5pZCA9PT0gRVhQT1JUX0lNR19SQVRJT1MuQ1VTVE9NID8ge30gOiByZXNvbHV0aW9uSXRlbTtcblxuICByZXR1cm4ge1xuICAgIHNjYWxlLFxuICAgIGltYWdlVyxcbiAgICBpbWFnZUhcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb1BuZyhzb3VyY2VFbGVtLCBvcHRpb25zKSB7XG4gIHJldHVybiBkb210b2ltYWdlLnRvUG5nKHNvdXJjZUVsZW0sIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0YVVSSXRvQmxvYihkYXRhVVJJKSB7XG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YVVSSS5zcGxpdCgnLCcpWzFdKTtcblxuICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gIGNvbnN0IG1pbWVTdHJpbmcgPSBkYXRhVVJJXG4gICAgLnNwbGl0KCcsJylbMF1cbiAgICAuc3BsaXQoJzonKVsxXVxuICAgIC5zcGxpdCgnOycpWzBdO1xuXG4gIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJpbmFyeS5sZW5ndGgpO1xuXG4gIC8vIGNyZWF0ZSBhIHZpZXcgaW50byB0aGUgYnVmZmVyXG4gIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWFbaV0gPSBiaW5hcnkuY2hhckNvZGVBdChpKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgQmxvYihbYWJdLCB7dHlwZTogbWltZVN0cmluZ30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRGaWxlKGZpbGVCbG9iLCBmaWxlTmFtZSkge1xuICBpZiAoaXNNU0VkZ2Uod2luZG93KSkge1xuICAgIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihmaWxlQmxvYiwgZmlsZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZUJsb2IpO1xuXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUpO1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICBsaW5rLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydEltYWdlKHN0YXRlLCBmaWxlbmFtZSA9IERFRkFVTFRfSU1BR0VfTkFNRSkge1xuICBjb25zdCB7aW1hZ2VEYXRhVXJpfSA9IHN0YXRlLnVpU3RhdGUuZXhwb3J0SW1hZ2U7XG4gIGlmIChpbWFnZURhdGFVcmkpIHtcbiAgICBjb25zdCBmaWxlID0gZGF0YVVSSXRvQmxvYihpbWFnZURhdGFVcmkpO1xuICAgIGRvd25sb2FkRmlsZShmaWxlLCBmaWxlbmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFRvSnNvblN0cmluZyhkYXRhKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGUuZGVzY3JpcHRpb247XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcEpTT04oc3RhdGUsIG9wdGlvbnMgPSBERUZBVUxUX0VYUE9SVF9KU09OX1NFVFRJTkdTKSB7XG4gIGNvbnN0IHtoYXNEYXRhfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNjaGVtYSA9IHN0YXRlLnZpc1N0YXRlLnNjaGVtYTtcblxuICBpZiAoIWhhc0RhdGEpIHtcbiAgICByZXR1cm4gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZShzdGF0ZSk7XG4gIH1cblxuICBsZXQgbWFwVG9TYXZlID0gc2NoZW1hLnNhdmUoc3RhdGUpO1xuICAvLyBhZGQgZmlsZSBuYW1lIGlmIHRpdGxlIGlzIG5vdCBwcm92aWRlZFxuICBjb25zdCB0aXRsZSA9IGdldChtYXBUb1NhdmUsIFsnaW5mbycsICd0aXRsZSddKTtcbiAgaWYgKCF0aXRsZSB8fCAhdGl0bGUubGVuZ3RoKSB7XG4gICAgbWFwVG9TYXZlID0gc2V0KFsnaW5mbycsICd0aXRsZSddLCBga2VwbGVyZ2xfJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLCBtYXBUb1NhdmUpO1xuICB9XG4gIHJldHVybiBtYXBUb1NhdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRKc29uKHN0YXRlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgbWFwID0gZ2V0TWFwSlNPTihzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgY29uc3QgZmlsZUJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9Kc29uU3RyaW5nKG1hcCldLCB7dHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nfSk7XG4gIGNvbnN0IGZpbGVOYW1lID0gc3RhdGUuYXBwTmFtZSA/IGAke3N0YXRlLmFwcE5hbWV9Lmpzb25gIDogREVGQVVMVF9KU09OX05BTUU7XG4gIGRvd25sb2FkRmlsZShmaWxlQmxvYiwgZmlsZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0SHRtbChzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7dXNlck1hcGJveFRva2VuLCBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiwgbW9kZX0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgLi4uZ2V0TWFwSlNPTihzdGF0ZSksXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW46XG4gICAgICAodXNlck1hcGJveFRva2VuIHx8ICcnKSAhPT0gJycgPyB1c2VyTWFwYm94VG9rZW4gOiBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbixcbiAgICBtb2RlXG4gIH07XG5cbiAgY29uc3QgZmlsZUJsb2IgPSBuZXcgQmxvYihbZXhwb3J0TWFwVG9IVE1MKGRhdGEpXSwge3R5cGU6ICd0ZXh0L2h0bWwnfSk7XG4gIGRvd25sb2FkRmlsZShmaWxlQmxvYiwgc3RhdGUuYXBwTmFtZSA/IGAke3N0YXRlLmFwcE5hbWV9Lmh0bWxgIDogREVGQVVMVF9IVE1MX05BTUUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0RGF0YShzdGF0ZSwgb3B0aW9uKSB7XG4gIGNvbnN0IHt2aXNTdGF0ZSwgYXBwTmFtZX0gPSBzdGF0ZTtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHZpc1N0YXRlO1xuICBjb25zdCB7c2VsZWN0ZWREYXRhc2V0LCBkYXRhVHlwZSwgZmlsdGVyZWR9ID0gb3B0aW9uO1xuICAvLyBnZXQgdGhlIHNlbGVjdGVkIGRhdGFcbiAgY29uc3QgZmlsZW5hbWUgPSBhcHBOYW1lID8gYXBwTmFtZSA6IERFRkFVTFRfREFUQV9OQU1FO1xuICBjb25zdCBzZWxlY3RlZERhdGFzZXRzID0gZGF0YXNldHNbc2VsZWN0ZWREYXRhc2V0XVxuICAgID8gW2RhdGFzZXRzW3NlbGVjdGVkRGF0YXNldF1dXG4gICAgOiBPYmplY3QudmFsdWVzKGRhdGFzZXRzKTtcbiAgaWYgKCFzZWxlY3RlZERhdGFzZXRzLmxlbmd0aCkge1xuICAgIC8vIGVycm9yOiBzZWxlY3RlZCBkYXRhc2V0IG5vdCBmb3VuZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzZWxlY3RlZERhdGFzZXRzLmZvckVhY2goc2VsZWN0ZWREYXRhID0+IHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmllbGRzLCBsYWJlbCwgZmlsdGVyZWRJZHhDUFUgPSBbXX0gPSBzZWxlY3RlZERhdGE7XG4gICAgY29uc3QgdG9FeHBvcnQgPSBmaWx0ZXJlZFxuICAgICAgPyBjcmVhdGVJbmRleGVkRGF0YUNvbnRhaW5lcihkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZElkeENQVSlcbiAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIC8vIHN0YXJ0IHRvIGV4cG9ydCBkYXRhIGFjY29yZGluZyB0byBzZWxlY3RlZCBkYXRhIHR5cGVcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICBjYXNlIEVYUE9SVF9EQVRBX1RZUEUuQ1NWOiB7XG4gICAgICAgIGNvbnN0IGNzdiA9IGZvcm1hdENzdih0b0V4cG9ydCwgZmllbGRzKTtcblxuICAgICAgICBjb25zdCBmaWxlQmxvYiA9IG5ldyBCbG9iKFtjc3ZdLCB7dHlwZTogJ3RleHQvY3N2J30pO1xuICAgICAgICBkb3dubG9hZEZpbGUoZmlsZUJsb2IsIGAke2ZpbGVuYW1lfV8ke2xhYmVsfS5jc3ZgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBzdXBwb3J0IG1vcmUgZmlsZSB0eXBlcy5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRNYXAoc3RhdGUsIG9wdGlvbikge1xuICBjb25zdCB7aW1hZ2VEYXRhVXJpfSA9IHN0YXRlLnVpU3RhdGUuZXhwb3J0SW1hZ2U7XG4gIGNvbnN0IHRodW1ibmFpbCA9IGltYWdlRGF0YVVyaSA/IGRhdGFVUkl0b0Jsb2IoaW1hZ2VEYXRhVXJpKSA6IG51bGw7XG4gIGNvbnN0IG1hcFRvU2F2ZSA9IGdldE1hcEpTT04oc3RhdGUsIG9wdGlvbik7XG5cbiAgcmV0dXJuIHtcbiAgICBtYXA6IG1hcFRvU2F2ZSxcbiAgICB0aHVtYm5haWxcbiAgfTtcbn1cblxuY29uc3QgZXhwb3J0ZXJzID0ge1xuICBleHBvcnRJbWFnZSxcbiAgZXhwb3J0SnNvbixcbiAgZXhwb3J0SHRtbCxcbiAgZXhwb3J0RGF0YVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0ZXJzO1xuIl19
|