@carto/kepler.gl 0.0.76 → 0.0.78-0
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/README.md +652 -42
- package/dist/actions/action-wrapper.js +49 -21
- package/dist/actions/actions.js +30 -16
- package/dist/actions/identity-actions.js +28 -14
- package/dist/actions/index.js +24 -7
- package/dist/actions/map-state-actions.js +27 -12
- package/dist/actions/map-style-actions.js +69 -31
- package/dist/actions/provider-actions.js +81 -44
- package/dist/actions/ui-state-actions.js +166 -71
- package/dist/actions/vis-state-actions.js +78 -106
- package/dist/cloud-providers/index.js +8 -8
- package/dist/cloud-providers/provider.js +109 -63
- package/dist/components/bottom-widget.js +58 -53
- package/dist/components/common/action-panel.js +41 -44
- package/dist/components/common/animation-control/animation-control.js +44 -44
- package/dist/components/common/animation-control/animation-controller.js +109 -55
- package/dist/components/common/animation-control/animation-speed-slider.js +38 -29
- package/dist/components/common/animation-control/floating-time-display.js +73 -58
- package/dist/components/common/animation-control/playback-controls.js +81 -67
- package/dist/components/common/animation-control/speed-control.js +24 -26
- package/dist/components/common/checkbox.js +54 -49
- package/dist/components/common/color-legend.js +71 -51
- package/dist/components/common/data-table/button.js +23 -30
- package/dist/components/common/data-table/canvas.js +10 -21
- package/dist/components/common/data-table/cell-size.js +58 -54
- package/dist/components/common/data-table/grid.js +51 -35
- package/dist/components/common/data-table/index.js +150 -109
- package/dist/components/common/data-table/option-dropdown.js +33 -29
- package/dist/components/common/dataset-label.js +15 -23
- package/dist/components/common/error-boundary.js +30 -25
- package/dist/components/common/field-selector.js +67 -67
- package/dist/components/common/field-token.js +17 -22
- package/dist/components/common/file-uploader/file-drop.js +66 -46
- package/dist/components/common/file-uploader/file-upload-progress.js +32 -33
- package/dist/components/common/file-uploader/file-upload.js +91 -52
- package/dist/components/common/file-uploader/upload-button.js +56 -82
- package/dist/components/common/histogram-plot.js +37 -35
- package/dist/components/common/icons/add.js +26 -32
- package/dist/components/common/icons/anchor_window.js +8 -8
- package/dist/components/common/icons/arrow-down-alt.js +26 -32
- package/dist/components/common/icons/arrow-down-solid.js +58 -0
- package/dist/components/common/icons/arrow-down.js +26 -32
- package/dist/components/common/icons/arrow-left.js +26 -32
- package/dist/components/common/icons/arrow-right.js +26 -32
- package/dist/components/common/icons/arrow-up-alt.js +26 -32
- package/dist/components/common/icons/arrow-up-solid.js +26 -32
- package/dist/components/common/icons/arrow-up.js +26 -32
- package/dist/components/common/icons/base.js +42 -52
- package/dist/components/common/icons/bug.js +26 -32
- package/dist/components/common/icons/cancel.js +26 -32
- package/dist/components/common/icons/checkmark.js +27 -32
- package/dist/components/common/icons/chevron-right.js +27 -27
- package/dist/components/common/icons/clipboard.js +26 -32
- package/dist/components/common/icons/clock.js +26 -32
- package/dist/components/common/icons/close.js +26 -32
- package/dist/components/common/icons/code-alt.js +27 -32
- package/dist/components/common/icons/copy.js +27 -32
- package/dist/components/common/icons/crosshairs.js +27 -32
- package/dist/components/common/icons/cube-3d.js +26 -32
- package/dist/components/common/icons/cursor-click.js +26 -32
- package/dist/components/common/icons/data-table.js +26 -32
- package/dist/components/common/icons/db.js +26 -32
- package/dist/components/common/icons/delete.js +26 -31
- package/dist/components/common/icons/docs.js +26 -32
- package/dist/components/common/icons/drag-n-drop.js +26 -32
- package/dist/components/common/icons/draw-polygon.js +26 -35
- package/dist/components/common/icons/email.js +26 -32
- package/dist/components/common/icons/expand.js +26 -32
- package/dist/components/common/icons/eye-seen.js +26 -32
- package/dist/components/common/icons/eye-unseen.js +26 -32
- package/dist/components/common/icons/file-type.js +16 -23
- package/dist/components/common/icons/file.js +26 -32
- package/dist/components/common/icons/files.js +25 -29
- package/dist/components/common/icons/filter-funnel.js +26 -32
- package/dist/components/common/icons/free-window.js +8 -8
- package/dist/components/common/icons/gear.js +26 -32
- package/dist/components/common/icons/hash.js +26 -32
- package/dist/components/common/icons/histogram.js +24 -28
- package/dist/components/common/icons/index.js +154 -63
- package/dist/components/common/icons/info.js +27 -32
- package/dist/components/common/icons/layers.js +26 -32
- package/dist/components/common/icons/left-arrow.js +27 -32
- package/dist/components/common/icons/legend.js +26 -32
- package/dist/components/common/icons/line-chart.js +26 -31
- package/dist/components/common/icons/login.js +26 -31
- package/dist/components/common/icons/logout.js +26 -31
- package/dist/components/common/icons/map-icon.js +27 -33
- package/dist/components/common/icons/map.js +27 -33
- package/dist/components/common/icons/messages.js +26 -32
- package/dist/components/common/icons/minus.js +26 -32
- package/dist/components/common/icons/order-by-dataset.js +56 -0
- package/dist/components/common/icons/order-by-list.js +48 -0
- package/dist/components/common/icons/pause.js +26 -32
- package/dist/components/common/icons/picture.js +25 -29
- package/dist/components/common/icons/pin.js +35 -33
- package/dist/components/common/icons/play.js +26 -32
- package/dist/components/common/icons/polygon.js +26 -35
- package/dist/components/common/icons/rectangle.js +26 -35
- package/dist/components/common/icons/reduce.js +26 -32
- package/dist/components/common/icons/reset.js +26 -32
- package/dist/components/common/icons/rocket.js +26 -32
- package/dist/components/common/icons/save.js +26 -32
- package/dist/components/common/icons/save2.js +26 -32
- package/dist/components/common/icons/search.js +26 -32
- package/dist/components/common/icons/settings.js +26 -32
- package/dist/components/common/icons/share.js +26 -32
- package/dist/components/common/icons/split.js +26 -32
- package/dist/components/common/icons/square-select.js +26 -32
- package/dist/components/common/icons/swap-horizontal.js +28 -27
- package/dist/components/common/icons/table.js +26 -31
- package/dist/components/common/icons/trash.js +26 -32
- package/dist/components/common/icons/upload.js +26 -33
- package/dist/components/common/icons/vert-dots.js +26 -32
- package/dist/components/common/icons/vert-three-dots.js +26 -32
- package/dist/components/common/icons/warning.js +27 -32
- package/dist/components/common/image-preview.js +27 -35
- package/dist/components/common/info-helper.js +23 -32
- package/dist/components/common/item-selector/accessor.js +5 -3
- package/dist/components/common/item-selector/chickleted-input.js +42 -62
- package/dist/components/common/item-selector/dropdown-list.js +95 -72
- package/dist/components/common/item-selector/item-selector-submenu.js +38 -29
- package/dist/components/common/item-selector/item-selector.js +102 -89
- package/dist/components/common/item-selector/typeahead.js +118 -86
- package/dist/components/common/line-chart.js +44 -46
- package/dist/components/common/loading-spinner.js +23 -33
- package/dist/components/common/logo.js +24 -36
- package/dist/components/common/map-layer-selector.js +14 -22
- package/dist/components/common/modal.js +62 -50
- package/dist/components/common/portaled.js +109 -64
- package/dist/components/common/progress-bar.js +17 -28
- package/dist/components/common/range-brush.js +132 -84
- package/dist/components/common/range-plot.js +51 -60
- package/dist/components/common/range-slider.js +88 -76
- package/dist/components/common/slider/mouse-event.js +88 -52
- package/dist/components/common/slider/slider-bar-handle.js +40 -39
- package/dist/components/common/slider/slider-handle.js +49 -45
- package/dist/components/common/slider/slider.js +107 -104
- package/dist/components/common/styled-components.js +183 -69
- package/dist/components/common/switch.js +14 -37
- package/dist/components/common/time-range-slider-time-title.js +19 -24
- package/dist/components/common/time-range-slider.js +39 -61
- package/dist/components/common/time-slider-marker.js +41 -36
- package/dist/components/common/tippy-tooltip.js +115 -0
- package/dist/components/common/toolbar-item.js +23 -25
- package/dist/components/common/toolbar.js +10 -21
- package/dist/components/common/vertical-toolbar.js +10 -21
- package/dist/components/container.js +94 -66
- package/dist/components/context.js +10 -6
- package/dist/components/editor/constants.js +8 -6
- package/dist/components/editor/editor.js +77 -62
- package/dist/components/editor/feature-action-panel.js +50 -47
- package/dist/components/editor/feature-styles.js +42 -37
- package/dist/components/editor/handle-style.js +39 -37
- package/dist/components/filters/components.js +10 -21
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +27 -19
- package/dist/components/filters/filter-panels/multi-select-filter-panel.js +18 -18
- package/dist/components/filters/filter-panels/new-filter-panel.js +23 -19
- package/dist/components/filters/filter-panels/polygon-filter-panel.js +28 -21
- package/dist/components/filters/filter-panels/range-filter-panel.js +18 -18
- package/dist/components/filters/filter-panels/single-select-filter-panel.js +18 -18
- package/dist/components/filters/filter-panels/time-range-filter-panel.js +24 -19
- package/dist/components/filters/filter-panels/types.js +6 -0
- package/dist/components/filters/index.js +17 -11
- package/dist/components/filters/multi-select-filter.js +9 -3
- package/dist/components/filters/polygon-filter.js +19 -10
- package/dist/components/filters/range-filter.js +9 -4
- package/dist/components/filters/single-select-filter.js +9 -3
- package/dist/components/filters/time-range-filter.js +18 -7
- package/dist/components/filters/time-widget.js +51 -42
- package/dist/components/filters/types.js +6 -0
- package/dist/components/geocoder/geocoder.js +134 -100
- package/dist/components/geocoder-panel.js +79 -57
- package/dist/components/index.js +591 -356
- package/dist/components/injector.js +58 -42
- package/dist/components/kepler-gl.js +171 -91
- package/dist/components/map/coordinate-info.js +13 -4
- package/dist/components/map/layer-hover-info.js +46 -39
- package/dist/components/map/layer-selector-panel.js +30 -17
- package/dist/components/map/locale-panel.js +43 -23
- package/dist/components/map/map-control-panel.js +43 -30
- package/dist/components/map/map-control-toolbar.js +11 -21
- package/dist/components/map/map-control-tooltip.js +13 -6
- package/dist/components/map/map-control.js +28 -27
- package/dist/components/map/map-draw-panel.js +48 -23
- package/dist/components/map/map-legend-panel.js +138 -77
- package/dist/components/map/map-legend.js +82 -55
- package/dist/components/map/map-popover.js +58 -42
- package/dist/components/map/split-map-button.js +40 -25
- package/dist/components/map/toggle-3d-button.js +37 -22
- package/dist/components/map-container.js +164 -147
- package/dist/components/maps-layout.js +29 -25
- package/dist/components/modal-container.js +116 -91
- package/dist/components/modals/add-map-style-modal.js +66 -49
- package/dist/components/modals/cloud-tile.js +36 -36
- package/dist/components/modals/data-table-modal.js +96 -60
- package/dist/components/modals/delete-data-modal.js +20 -24
- package/dist/components/modals/error-display.js +10 -3
- package/dist/components/modals/export-data-modal.js +59 -57
- package/dist/components/modals/export-image-modal.js +28 -31
- package/dist/components/modals/export-map-modal/components.js +27 -27
- package/dist/components/modals/export-map-modal/export-html-map.js +27 -28
- package/dist/components/modals/export-map-modal/export-json-map.js +43 -30
- package/dist/components/modals/export-map-modal/export-map-modal.js +41 -34
- package/dist/components/modals/image-modal-container.js +19 -14
- package/dist/components/modals/load-data-modal.js +35 -31
- package/dist/components/modals/load-storage-map.js +79 -44
- package/dist/components/modals/loading-dialog.js +18 -24
- package/dist/components/modals/modal-dialog.js +7 -3
- package/dist/components/modals/modal-tabs.js +29 -29
- package/dist/components/modals/overwrite-map-modal.js +28 -29
- package/dist/components/modals/provider-modal-container.js +32 -35
- package/dist/components/modals/save-map-modal.js +51 -47
- package/dist/components/modals/share-map-modal.js +63 -55
- package/dist/components/modals/status-panel.js +25 -24
- package/dist/components/modals/storage-map-viewer.js +43 -38
- package/dist/components/notification-panel/notification-item.js +46 -41
- package/dist/components/notification-panel.js +32 -35
- package/dist/components/performance.js +36 -11
- package/dist/components/plot-container.js +76 -60
- package/dist/components/side-panel/cloud-storage-dropdown.js +10 -4
- package/dist/components/side-panel/common/dataset-info.js +13 -20
- package/dist/components/side-panel/common/dataset-tag.js +49 -31
- package/dist/components/side-panel/common/dataset-title.js +91 -44
- package/dist/components/side-panel/common/source-data-catalog.js +26 -28
- package/dist/components/side-panel/common/source-data-selector.js +51 -37
- package/dist/components/side-panel/common/types.js +6 -0
- package/dist/components/side-panel/custom-panel.js +9 -5
- package/dist/components/side-panel/filter-manager.js +32 -30
- package/dist/components/side-panel/filter-panel/filter-panel-header.js +29 -32
- package/dist/components/side-panel/filter-panel/filter-panel.js +58 -53
- package/dist/components/side-panel/interaction-manager.js +12 -5
- package/dist/components/side-panel/interaction-panel/brush-config.js +19 -23
- package/dist/components/side-panel/interaction-panel/interaction-panel.js +58 -41
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +83 -47
- package/dist/components/side-panel/interaction-panel/tooltip-config.js +46 -30
- package/dist/components/side-panel/layer-manager.js +132 -211
- package/dist/components/side-panel/layer-panel/add-layer-button.js +156 -0
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +11 -4
- package/dist/components/side-panel/layer-panel/color-palette.js +29 -41
- package/dist/components/side-panel/layer-panel/color-range-selector.js +164 -162
- package/dist/components/side-panel/layer-panel/color-selector.js +71 -60
- package/dist/components/side-panel/layer-panel/column-selector.js +27 -28
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +7 -3
- package/dist/components/side-panel/layer-panel/custom-palette.js +72 -48
- package/dist/components/side-panel/layer-panel/custom-picker.js +41 -40
- package/dist/components/side-panel/layer-panel/dataset-layer-group.js +87 -0
- package/dist/components/side-panel/layer-panel/dataset-layer-section.js +69 -0
- package/dist/components/side-panel/layer-panel/dataset-section.js +91 -0
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +16 -8
- package/dist/components/side-panel/layer-panel/hex-column-config.js +34 -12
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +10 -2
- package/dist/components/side-panel/layer-panel/layer-column-config.js +26 -42
- package/dist/components/side-panel/layer-panel/layer-config-group.js +86 -52
- package/dist/components/side-panel/layer-panel/layer-configurator.js +249 -158
- package/dist/components/side-panel/layer-panel/layer-list.js +168 -0
- package/dist/components/side-panel/layer-panel/layer-panel-header.js +70 -74
- package/dist/components/side-panel/layer-panel/layer-panel.js +58 -55
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +22 -28
- package/dist/components/side-panel/layer-panel/layer-type-list-item.js +18 -22
- package/dist/components/side-panel/layer-panel/layer-type-selector.js +30 -35
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +40 -35
- package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +123 -0
- package/dist/components/side-panel/layer-panel/single-color-palette.js +45 -77
- package/dist/components/side-panel/layer-panel/text-label-panel.js +45 -41
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +51 -60
- package/dist/components/side-panel/layer-panel/vis-config-slider.js +163 -52
- package/dist/components/side-panel/layer-panel/vis-config-switch.js +27 -38
- package/dist/components/side-panel/map-manager.js +45 -38
- package/dist/components/side-panel/map-style-panel/map-layer-selector.js +31 -28
- package/dist/components/side-panel/map-style-panel/map-style-selector.js +24 -26
- package/dist/components/side-panel/panel-dropdown.js +34 -34
- package/dist/components/side-panel/panel-header-action.js +43 -51
- package/dist/components/side-panel/panel-header.js +105 -78
- package/dist/components/side-panel/panel-tab.js +20 -24
- package/dist/components/side-panel/panel-title.js +17 -22
- package/dist/components/side-panel/panel-toggle.js +21 -33
- package/dist/components/side-panel/side-bar.js +53 -44
- package/dist/components/side-panel.js +79 -68
- package/dist/components/types.js +6 -0
- package/dist/connect/keplergl-connect.js +14 -5
- package/dist/connect/with-local-selector.js +38 -33
- package/dist/constants/action-types.js +14 -5
- package/dist/constants/color-palette.js +23 -12
- package/dist/constants/color-ranges.js +31 -32
- package/dist/constants/custom-color-ranges.js +14 -9
- package/dist/constants/default-settings.js +265 -162
- package/dist/constants/index.js +103 -95
- package/dist/constants/keyevent.js +7 -3
- package/dist/constants/tooltip.js +10 -7
- package/dist/constants/user-feedbacks.js +6 -5
- package/dist/constants/user-guides.js +20 -12
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +33 -30
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +43 -10
- package/dist/deckgl-layers/3d-building-layer/types.js +6 -0
- package/dist/deckgl-layers/cluster-layer/cluster-layer.js +75 -54
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +34 -31
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +38 -38
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +38 -38
- package/dist/deckgl-layers/layer-utils/cluster-utils.js +26 -12
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +152 -90
- package/dist/deckgl-layers/layer-utils/shader-utils.js +5 -1
- package/dist/deckgl-layers/line-layer/line-layer.js +40 -31
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +32 -27
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +42 -36
- package/dist/index.js +23 -4
- package/dist/layers/aggregation-layer.js +126 -76
- package/dist/layers/arc-layer/arc-layer-icon.js +27 -27
- package/dist/layers/arc-layer/arc-layer.js +85 -56
- package/dist/layers/base-layer.js +459 -288
- package/dist/layers/cluster-layer/cluster-layer-icon.js +27 -27
- package/dist/layers/cluster-layer/cluster-layer.js +45 -34
- package/dist/layers/default-layer-icon.js +27 -27
- package/dist/layers/geojson-layer/geojson-layer-icon.js +27 -27
- package/dist/layers/geojson-layer/geojson-layer.js +105 -60
- package/dist/layers/geojson-layer/geojson-utils.js +68 -39
- package/dist/layers/grid-layer/grid-layer-icon.js +27 -27
- package/dist/layers/grid-layer/grid-layer.js +42 -31
- package/dist/layers/grid-layer/grid-utils.js +15 -12
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +27 -27
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +92 -49
- package/dist/layers/h3-hexagon-layer/h3-utils.js +22 -11
- package/dist/layers/heatmap-layer/heatmap-layer-icon.js +27 -27
- package/dist/layers/heatmap-layer/heatmap-layer.js +81 -59
- package/dist/layers/hexagon-layer/hexagon-layer-icon.js +27 -27
- package/dist/layers/hexagon-layer/hexagon-layer.js +43 -31
- package/dist/layers/hexagon-layer/hexagon-utils.js +15 -3
- package/dist/layers/icon-layer/icon-info-modal.js +28 -24
- package/dist/layers/icon-layer/icon-layer-icon.js +27 -27
- package/dist/layers/icon-layer/icon-layer.js +115 -63
- package/dist/layers/index.js +39 -38
- package/dist/layers/layer-factory.js +83 -69
- package/dist/layers/layer-text-label.js +15 -9
- package/dist/layers/layer-update.js +21 -12
- package/dist/layers/line-layer/line-layer-icon.js +27 -27
- package/dist/layers/line-layer/line-layer.js +84 -63
- package/dist/layers/mapbox-utils.js +54 -48
- package/dist/layers/mapboxgl-layer.js +68 -45
- package/dist/layers/point-layer/point-layer-icon.js +27 -27
- package/dist/layers/point-layer/point-layer.js +100 -60
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +86 -45
- package/dist/layers/s2-geometry-layer/s2-layer-icon.js +27 -27
- package/dist/layers/s2-geometry-layer/s2-utils.js +18 -5
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +15 -21
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +27 -27
- package/dist/layers/scenegraph-layer/scenegraph-layer.js +85 -54
- package/dist/layers/trip-layer/trip-info-modal.js +16 -21
- package/dist/layers/trip-layer/trip-layer-icon.js +27 -27
- package/dist/layers/trip-layer/trip-layer.js +115 -58
- package/dist/layers/trip-layer/trip-utils.js +51 -28
- package/dist/layers/types.js +6 -3
- package/dist/localization/formatted-message.js +12 -8
- package/dist/localization/index.js +14 -8
- package/dist/localization/locales.js +12 -7
- package/dist/localization/messages.js +29 -0
- package/dist/localization/translations/ca.js +455 -0
- package/dist/localization/translations/cn.js +458 -0
- package/dist/localization/translations/en.js +483 -0
- package/dist/localization/translations/es.js +455 -0
- package/dist/localization/translations/fi.js +427 -0
- package/dist/localization/translations/ja.js +456 -0
- package/dist/localization/translations/pt.js +427 -0
- package/dist/localization/translations/ru.js +464 -0
- package/dist/middleware/index.js +5 -2
- package/dist/processors/data-processor.js +217 -149
- package/dist/processors/file-handler.js +284 -210
- package/dist/processors/index.js +25 -97
- package/dist/processors/types.js +6 -0
- package/dist/reducers/combined-updaters.js +48 -40
- package/dist/reducers/composer-helpers.js +34 -32
- package/dist/reducers/composers.js +12 -25
- package/dist/reducers/core.js +46 -19
- package/dist/reducers/index.js +52 -24
- package/dist/reducers/map-state-updaters.js +64 -61
- package/dist/reducers/map-state.js +26 -31
- package/dist/reducers/map-style-updaters.js +149 -116
- package/dist/reducers/map-style.js +26 -31
- package/dist/reducers/provider-state-updaters.js +151 -121
- package/dist/reducers/provider-state.js +25 -32
- package/dist/reducers/root.js +52 -45
- package/dist/reducers/types.js +6 -0
- package/dist/reducers/ui-state-updaters.js +231 -138
- package/dist/reducers/ui-state.js +27 -32
- package/dist/reducers/vis-state-merger.js +212 -143
- package/dist/reducers/vis-state-selectors.js +12 -5
- package/dist/reducers/vis-state-updaters.js +706 -490
- package/dist/reducers/vis-state.js +25 -32
- package/dist/schemas/dataset-schema.js +59 -39
- package/dist/schemas/index.js +45 -38
- package/dist/schemas/map-state-schema.js +24 -28
- package/dist/schemas/map-style-schema.js +48 -34
- package/dist/schemas/schema-manager.js +71 -46
- package/dist/schemas/schema-utils.js +15 -11
- package/dist/schemas/schema.js +37 -35
- package/dist/schemas/versions.js +9 -5
- package/dist/schemas/vis-state-schema.js +312 -112
- package/dist/styles/base.js +646 -367
- package/dist/styles/index.js +5 -1
- package/dist/styles/media-breakpoints.js +36 -27
- package/dist/tasks/tasks.js +50 -22
- package/dist/templates/export-map-html.js +6 -3
- package/dist/utils/aggregate-utils.js +27 -23
- package/dist/utils/color-utils.js +62 -44
- package/dist/utils/custom-scales.js +7 -1
- package/dist/utils/data-scale-utils.js +18 -14
- package/dist/utils/data-utils.js +148 -110
- package/dist/utils/dataset-utils.js +91 -75
- package/dist/utils/dom-to-image.js +97 -19
- package/dist/utils/dom-utils.js +116 -34
- package/dist/utils/export-utils.js +122 -81
- package/dist/utils/filter-utils.js +335 -242
- package/dist/utils/gl-utils.js +15 -26
- package/dist/utils/gpu-filter-utils.js +70 -61
- package/dist/utils/index.js +220 -64
- package/dist/utils/interaction-utils.js +52 -34
- package/dist/utils/layer-utils.js +65 -60
- package/dist/utils/locale-utils.js +21 -23
- package/dist/utils/map-info-utils.js +3 -2
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +85 -86
- package/dist/utils/map-style-utils/mapbox-utils.js +5 -3
- package/dist/utils/mapbox-utils.js +5 -2
- package/dist/utils/notifications-utils.js +42 -43
- package/dist/utils/observe-dimensions.js +44 -39
- package/dist/utils/projection-utils.js +20 -9
- package/dist/utils/searcher-utils.js +4 -1
- package/dist/utils/split-map-utils.js +34 -38
- package/dist/utils/table-utils/data-container-interface.js +6 -0
- package/dist/utils/table-utils/data-container-utils.js +36 -29
- package/dist/utils/table-utils/data-row.js +79 -7
- package/dist/utils/table-utils/index.js +2 -1
- package/dist/utils/table-utils/indexed-data-container.js +113 -81
- package/dist/utils/table-utils/kepler-table.js +200 -99
- package/dist/utils/table-utils/row-data-container.js +109 -74
- package/dist/utils/utils.js +94 -50
- package/package.json +71 -21
- package/src/actions/action-wrapper.ts +183 -0
- package/src/actions/actions.ts +260 -0
- package/src/actions/identity-actions.ts +116 -0
- package/src/actions/map-state-actions.ts +116 -0
- package/src/actions/map-style-actions.ts +243 -0
- package/src/actions/provider-actions.ts +218 -0
- package/src/actions/ui-state-actions.ts +490 -0
- package/src/actions/vis-state-actions.ts +1279 -0
- package/src/cloud-providers/index.ts +22 -0
- package/src/cloud-providers/provider.ts +277 -0
- package/src/components/bottom-widget.tsx +275 -0
- package/src/components/common/action-panel.tsx +207 -0
- package/src/components/common/animation-control/animation-control.tsx +157 -0
- package/src/components/common/animation-control/animation-controller.ts +249 -0
- package/src/components/common/animation-control/animation-speed-slider.tsx +86 -0
- package/src/components/common/animation-control/floating-time-display.tsx +209 -0
- package/src/components/common/animation-control/playback-controls.tsx +316 -0
- package/src/components/common/animation-control/speed-control.tsx +71 -0
- package/src/components/common/checkbox.tsx +137 -0
- package/src/components/common/color-legend.tsx +203 -0
- package/src/components/common/data-table/button.tsx +54 -0
- package/src/components/common/data-table/cell-size.ts +185 -0
- package/src/components/common/data-table/grid.tsx +57 -0
- package/src/components/common/data-table/index.tsx +693 -0
- package/src/components/common/data-table/option-dropdown.tsx +122 -0
- package/src/components/common/dataset-label.tsx +48 -0
- package/src/components/common/error-boundary.tsx +43 -0
- package/src/components/common/field-selector.tsx +237 -0
- package/src/components/common/field-token.tsx +60 -0
- package/src/components/common/file-uploader/file-drop.tsx +208 -0
- package/src/components/common/file-uploader/file-upload-progress.tsx +123 -0
- package/src/components/common/file-uploader/file-upload.tsx +319 -0
- package/src/components/common/file-uploader/upload-button.tsx +88 -0
- package/src/components/common/histogram-plot.tsx +125 -0
- package/src/components/common/icons/add.tsx +37 -0
- package/src/components/common/icons/anchor_window.tsx +49 -0
- package/src/components/common/icons/arrow-down-alt.tsx +37 -0
- package/src/components/common/icons/arrow-down-solid.tsx +37 -0
- package/src/components/common/icons/arrow-down.tsx +40 -0
- package/src/components/common/icons/arrow-left.tsx +42 -0
- package/src/components/common/icons/arrow-right.tsx +40 -0
- package/src/components/common/icons/arrow-up-alt.tsx +40 -0
- package/src/components/common/icons/arrow-up-solid.tsx +37 -0
- package/src/components/common/icons/arrow-up.tsx +40 -0
- package/src/components/common/icons/base.tsx +95 -0
- package/src/components/common/icons/bug.tsx +40 -0
- package/src/components/common/icons/cancel.tsx +37 -0
- package/src/components/common/icons/checkmark.tsx +39 -0
- package/src/components/common/icons/chevron-right.js +1 -1
- package/src/components/common/icons/clipboard.tsx +40 -0
- package/src/components/common/icons/clock.tsx +38 -0
- package/src/components/common/icons/close.tsx +43 -0
- package/src/components/common/icons/code-alt.tsx +37 -0
- package/src/components/common/icons/copy.tsx +38 -0
- package/src/components/common/icons/crosshairs.tsx +37 -0
- package/src/components/common/icons/cube-3d.tsx +39 -0
- package/src/components/common/icons/cursor-click.tsx +43 -0
- package/src/components/common/icons/data-table.tsx +40 -0
- package/src/components/common/icons/db.tsx +40 -0
- package/src/components/common/icons/delete.tsx +39 -0
- package/src/components/common/icons/docs.tsx +40 -0
- package/src/components/common/icons/drag-n-drop.tsx +38 -0
- package/src/components/common/icons/draw-polygon.tsx +51 -0
- package/src/components/common/icons/email.tsx +39 -0
- package/src/components/common/icons/expand.tsx +39 -0
- package/src/components/common/icons/eye-seen.tsx +38 -0
- package/src/components/common/icons/eye-unseen.tsx +38 -0
- package/src/components/common/icons/file-type.tsx +71 -0
- package/src/components/common/icons/file.tsx +37 -0
- package/src/components/common/icons/files.tsx +37 -0
- package/src/components/common/icons/filter-funnel.tsx +37 -0
- package/src/components/common/icons/free-window.tsx +48 -0
- package/src/components/common/icons/gear.tsx +40 -0
- package/src/components/common/icons/hash.tsx +37 -0
- package/src/components/common/icons/histogram.tsx +42 -0
- package/src/components/common/icons/index.tsx +98 -0
- package/src/components/common/icons/info.tsx +48 -0
- package/src/components/common/icons/layers.tsx +37 -0
- package/src/components/common/icons/left-arrow.tsx +37 -0
- package/src/components/common/icons/legend.tsx +37 -0
- package/src/components/common/icons/line-chart.tsx +40 -0
- package/src/components/common/icons/login.tsx +41 -0
- package/src/components/common/icons/logout.tsx +38 -0
- package/src/components/common/icons/map-icon.tsx +62 -0
- package/src/components/common/icons/map.tsx +62 -0
- package/src/components/common/icons/messages.tsx +37 -0
- package/src/components/common/icons/minus.tsx +39 -0
- package/src/components/common/icons/order-by-dataset.tsx +49 -0
- package/src/components/common/icons/order-by-list.tsx +39 -0
- package/src/components/common/icons/pause.tsx +37 -0
- package/src/components/common/icons/picture.tsx +37 -0
- package/src/components/common/icons/pin.tsx +42 -0
- package/src/components/common/icons/play.tsx +37 -0
- package/src/components/common/icons/polygon.tsx +65 -0
- package/src/components/common/icons/rectangle.tsx +66 -0
- package/src/components/common/icons/reduce.tsx +42 -0
- package/src/components/common/icons/reset.tsx +37 -0
- package/src/components/common/icons/rocket.tsx +37 -0
- package/src/components/common/icons/save.tsx +38 -0
- package/src/components/common/icons/save2.tsx +42 -0
- package/src/components/common/icons/search.tsx +38 -0
- package/src/components/common/icons/settings.tsx +39 -0
- package/src/components/common/icons/share.tsx +37 -0
- package/src/components/common/icons/split.tsx +57 -0
- package/src/components/common/icons/square-select.tsx +38 -0
- package/src/components/common/icons/swap-horizontal.js +1 -1
- package/src/components/common/icons/table.tsx +41 -0
- package/src/components/common/icons/trash.tsx +45 -0
- package/src/components/common/icons/upload.tsx +37 -0
- package/src/components/common/icons/vert-dots.tsx +44 -0
- package/src/components/common/icons/vert-three-dots.tsx +39 -0
- package/src/components/common/icons/warning.tsx +40 -0
- package/src/components/common/image-preview.tsx +118 -0
- package/src/components/common/info-helper.tsx +90 -0
- package/src/components/common/item-selector/accessor.ts +45 -0
- package/src/components/common/item-selector/chickleted-input.tsx +153 -0
- package/src/components/common/item-selector/dropdown-list.tsx +269 -0
- package/src/components/common/item-selector/item-selector-submenu.js +1 -1
- package/src/components/common/item-selector/item-selector.d.ts +24 -27
- package/src/components/common/item-selector/item-selector.tsx +372 -0
- package/src/components/common/item-selector/typeahead.tsx +533 -0
- package/src/components/common/line-chart.tsx +170 -0
- package/src/components/common/loading-spinner.tsx +75 -0
- package/src/components/common/logo.tsx +88 -0
- package/src/components/common/map-layer-selector.tsx +64 -0
- package/src/components/common/modal.tsx +238 -0
- package/src/components/common/portaled.tsx +312 -0
- package/src/components/common/progress-bar.tsx +74 -0
- package/src/components/common/range-brush.tsx +276 -0
- package/src/components/common/range-plot.tsx +145 -0
- package/src/components/common/range-slider.tsx +320 -0
- package/src/components/common/slider/mouse-event.ts +122 -0
- package/src/components/common/slider/slider-bar-handle.tsx +106 -0
- package/src/components/common/slider/slider-handle.tsx +210 -0
- package/src/components/common/slider/slider.tsx +234 -0
- package/src/components/common/styled-components.tsx +708 -0
- package/src/components/common/switch.tsx +47 -0
- package/src/components/common/time-range-slider-time-title.tsx +87 -0
- package/src/components/common/time-range-slider.tsx +171 -0
- package/src/components/common/time-slider-marker.tsx +187 -0
- package/src/components/common/tippy-tooltip.tsx +130 -0
- package/src/components/common/toolbar-item.tsx +99 -0
- package/src/components/common/toolbar.tsx +49 -0
- package/src/components/common/vertical-toolbar.tsx +35 -0
- package/src/components/container.d.ts +8 -0
- package/src/components/container.tsx +188 -0
- package/src/components/context.ts +32 -0
- package/src/components/editor/editor.tsx +231 -0
- package/src/components/editor/feature-action-panel.tsx +155 -0
- package/src/components/editor/feature-styles.ts +75 -0
- package/src/components/editor/handle-style.ts +89 -0
- package/src/components/filters/filter-panels/filter-panel-with-field-select.tsx +118 -0
- package/src/components/filters/filter-panels/multi-select-filter-panel.tsx +63 -0
- package/src/components/filters/filter-panels/new-filter-panel.tsx +100 -0
- package/src/components/filters/filter-panels/polygon-filter-panel.tsx +84 -0
- package/src/components/filters/filter-panels/range-filter-panel.tsx +63 -0
- package/src/components/filters/filter-panels/single-select-filter-panel.tsx +63 -0
- package/src/components/filters/filter-panels/time-range-filter-panel.tsx +92 -0
- package/src/components/filters/filter-panels/types.ts +39 -0
- package/src/components/filters/multi-select-filter.tsx +37 -0
- package/src/components/filters/polygon-filter.tsx +74 -0
- package/src/components/filters/range-filter.tsx +44 -0
- package/src/components/filters/single-select-filter.tsx +50 -0
- package/src/components/filters/time-range-filter.tsx +76 -0
- package/src/components/filters/time-widget.tsx +240 -0
- package/src/components/filters/types.ts +78 -0
- package/src/components/geocoder/geocoder.tsx +307 -0
- package/src/components/geocoder-panel.tsx +199 -0
- package/src/components/index.ts +262 -0
- package/src/components/injector.d.ts +33 -0
- package/src/components/injector.tsx +171 -0
- package/src/components/kepler-gl.d.ts +0 -2
- package/src/components/kepler-gl.tsx +579 -0
- package/src/components/map/coordinate-info.tsx +58 -0
- package/src/components/map/layer-hover-info.tsx +192 -0
- package/src/components/map/layer-selector-panel.tsx +121 -0
- package/src/components/map/locale-panel.tsx +110 -0
- package/src/components/map/map-control-panel.tsx +141 -0
- package/src/components/map/map-control-tooltip.tsx +45 -0
- package/src/components/map/map-control.tsx +138 -0
- package/src/components/map/map-draw-panel.tsx +145 -0
- package/src/components/map/map-legend-panel.tsx +167 -0
- package/src/components/map/map-legend.tsx +283 -0
- package/src/components/map/map-popover.tsx +266 -0
- package/src/components/map/split-map-button.tsx +98 -0
- package/src/components/map/toggle-3d-button.tsx +90 -0
- package/src/components/map-container.tsx +541 -0
- package/src/components/maps-layout.tsx +44 -0
- package/src/components/modal-container.tsx +556 -0
- package/src/components/modals/add-map-style-modal.tsx +303 -0
- package/src/components/modals/cloud-tile.tsx +181 -0
- package/src/components/modals/data-table-modal.tsx +241 -0
- package/src/components/modals/delete-data-modal.tsx +55 -0
- package/src/components/modals/error-display.tsx +43 -0
- package/src/components/modals/export-data-modal.tsx +201 -0
- package/src/components/modals/export-image-modal.tsx +155 -0
- package/src/components/modals/export-map-modal/export-html-map.tsx +164 -0
- package/src/components/modals/export-map-modal/export-json-map.tsx +112 -0
- package/src/components/modals/export-map-modal/export-map-modal.tsx +109 -0
- package/src/components/modals/image-modal-container.tsx +85 -0
- package/src/components/modals/load-data-modal.tsx +120 -0
- package/src/components/modals/load-storage-map.tsx +414 -0
- package/src/components/modals/loading-dialog.tsx +77 -0
- package/src/components/modals/modal-tabs.tsx +137 -0
- package/src/components/modals/overwrite-map-modal.tsx +113 -0
- package/src/components/modals/provider-modal-container.tsx +61 -0
- package/src/components/modals/save-map-modal.tsx +277 -0
- package/src/components/modals/share-map-modal.tsx +217 -0
- package/src/components/modals/status-panel.tsx +106 -0
- package/src/components/modals/storage-map-viewer.tsx +190 -0
- package/src/components/notification-panel/notification-item.tsx +143 -0
- package/src/components/notification-panel.tsx +75 -0
- package/src/components/plot-container.tsx +237 -0
- package/src/components/side-panel/common/dataset-info.tsx +46 -0
- package/src/components/side-panel/common/dataset-tag.tsx +86 -0
- package/src/components/side-panel/common/dataset-title.tsx +186 -0
- package/src/components/side-panel/common/source-data-catalog.tsx +67 -0
- package/src/components/side-panel/common/source-data-selector.tsx +90 -0
- package/src/components/side-panel/common/types.ts +76 -0
- package/src/components/side-panel/filter-manager.tsx +120 -0
- package/src/components/side-panel/filter-panel/filter-panel-header.tsx +96 -0
- package/src/components/side-panel/filter-panel/filter-panel.tsx +125 -0
- package/src/components/side-panel/interaction-manager.tsx +59 -0
- package/src/components/side-panel/interaction-panel/brush-config.tsx +58 -0
- package/src/components/side-panel/interaction-panel/interaction-panel.tsx +124 -0
- package/src/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.tsx +243 -0
- package/src/components/side-panel/interaction-panel/tooltip-config.tsx +238 -0
- package/src/components/side-panel/layer-manager.tsx +242 -0
- package/src/components/side-panel/layer-panel/add-layer-button.tsx +208 -0
- package/src/components/side-panel/layer-panel/color-dimension-scale-selector.js +1 -1
- package/src/components/side-panel/layer-panel/color-palette.tsx +98 -0
- package/src/components/side-panel/layer-panel/color-range-selector.tsx +377 -0
- package/src/components/side-panel/layer-panel/color-selector.tsx +200 -0
- package/src/components/side-panel/layer-panel/column-selector.tsx +102 -0
- package/src/components/side-panel/layer-panel/custom-markers-config-group.js +1 -1
- package/src/components/side-panel/layer-panel/custom-palette.tsx +297 -0
- package/src/components/side-panel/layer-panel/custom-picker.tsx +99 -0
- package/src/components/side-panel/layer-panel/dataset-layer-group.tsx +99 -0
- package/src/components/side-panel/layer-panel/dataset-layer-section.tsx +100 -0
- package/src/components/side-panel/layer-panel/dataset-section.tsx +125 -0
- package/src/components/side-panel/layer-panel/dimension-scale-selector.tsx +64 -0
- package/src/components/side-panel/layer-panel/layer-column-config.tsx +115 -0
- package/src/components/side-panel/layer-panel/layer-config-group.tsx +256 -0
- package/src/components/side-panel/layer-panel/layer-list.tsx +191 -0
- package/src/components/side-panel/layer-panel/layer-panel-header.tsx +272 -0
- package/src/components/side-panel/layer-panel/layer-panel.tsx +196 -0
- package/src/components/side-panel/layer-panel/layer-type-dropdown-list.tsx +118 -0
- package/src/components/side-panel/layer-panel/layer-type-list-item.tsx +92 -0
- package/src/components/side-panel/layer-panel/layer-type-selector.tsx +115 -0
- package/src/components/side-panel/layer-panel/layer-visibility-by-zoom.js +1 -1
- package/src/components/side-panel/layer-panel/panel-view-list-toggle.tsx +132 -0
- package/src/components/side-panel/layer-panel/single-color-palette.tsx +94 -0
- package/src/components/side-panel/layer-panel/text-label-panel.tsx +187 -0
- package/src/components/side-panel/layer-panel/vis-config-by-field-selector.tsx +179 -0
- package/src/components/side-panel/layer-panel/vis-config-slider.tsx +237 -0
- package/src/components/side-panel/layer-panel/vis-config-switch.tsx +86 -0
- package/src/components/side-panel/map-manager.tsx +123 -0
- package/src/components/side-panel/map-style-panel/map-layer-selector.tsx +145 -0
- package/src/components/side-panel/map-style-panel/map-style-selector.tsx +122 -0
- package/src/components/side-panel/panel-dropdown.tsx +53 -0
- package/src/components/side-panel/panel-header-action.tsx +114 -0
- package/src/components/side-panel/panel-header.tsx +386 -0
- package/src/components/side-panel/panel-tab.tsx +79 -0
- package/src/components/side-panel/panel-title.tsx +35 -0
- package/src/components/side-panel/panel-toggle.tsx +72 -0
- package/src/components/side-panel/side-bar.tsx +140 -0
- package/src/components/side-panel.tsx +261 -0
- package/src/components/types.ts +41 -0
- package/src/connect/keplergl-connect.ts +48 -0
- package/src/connect/with-local-selector.tsx +70 -0
- package/src/constants/action-types.ts +188 -0
- package/src/constants/color-ranges.ts +87 -0
- package/src/constants/default-settings.ts +1049 -0
- package/src/deckgl-layers/3d-building-layer/3d-building-layer.ts +57 -0
- package/src/deckgl-layers/3d-building-layer/3d-building-utils.ts +211 -0
- package/src/deckgl-layers/3d-building-layer/types.ts +29 -0
- package/src/deckgl-layers/column-layer/enhanced-column-layer.ts +63 -0
- package/src/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.ts +68 -0
- package/src/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.ts +68 -0
- package/src/deckgl-layers/layer-utils/cluster-utils.ts +78 -0
- package/src/deckgl-layers/layer-utils/cpu-aggregator.ts +672 -0
- package/src/deckgl-layers/layer-utils/shader-utils.ts +41 -0
- package/src/deckgl-layers/line-layer/line-layer.ts +126 -0
- package/src/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.ts +63 -0
- package/src/deckgl-layers/svg-icon-layer/svg-icon-layer.ts +96 -0
- package/src/index.d.ts +1 -0
- package/src/layers/aggregation-layer.ts +402 -0
- package/src/layers/arc-layer/arc-layer-icon.tsx +67 -0
- package/src/layers/arc-layer/arc-layer.ts +294 -0
- package/src/layers/base-layer.ts +1743 -0
- package/src/layers/cluster-layer/cluster-layer.ts +162 -0
- package/src/layers/geojson-layer/geojson-layer-icon.tsx +68 -0
- package/src/layers/geojson-layer/geojson-layer.ts +461 -0
- package/src/layers/geojson-layer/geojson-utils.ts +200 -0
- package/src/layers/grid-layer/grid-layer-icon.tsx +53 -0
- package/src/layers/grid-layer/grid-layer.ts +153 -0
- package/src/layers/grid-layer/grid-utils.ts +84 -0
- package/src/layers/h3-hexagon-layer/h3-hexagon-layer.ts +339 -0
- package/src/layers/h3-hexagon-layer/h3-utils.ts +67 -0
- package/src/layers/heatmap-layer/heatmap-layer.ts +255 -0
- package/src/layers/hexagon-layer/hexagon-layer.ts +156 -0
- package/src/layers/hexagon-layer/hexagon-utils.ts +64 -0
- package/src/layers/icon-layer/icon-info-modal.tsx +155 -0
- package/src/layers/icon-layer/icon-layer.ts +392 -0
- package/src/layers/index.ts +77 -0
- package/src/layers/layer-factory.ts +695 -0
- package/src/layers/layer-text-label.ts +62 -0
- package/src/layers/layer-update.ts +70 -0
- package/src/layers/line-layer/line-layer.ts +222 -0
- package/src/layers/mapbox-utils.ts +204 -0
- package/src/layers/mapboxgl-layer.ts +176 -0
- package/src/layers/point-layer/point-layer.ts +504 -0
- package/src/layers/s2-geometry-layer/s2-geometry-layer.ts +369 -0
- package/src/layers/s2-geometry-layer/s2-utils.ts +42 -0
- package/src/layers/scenegraph-layer/scenegraph-layer.ts +237 -0
- package/src/layers/trip-layer/trip-layer.ts +356 -0
- package/src/layers/trip-layer/trip-utils.ts +177 -0
- package/src/localization/formatted-message.tsx +42 -0
- package/src/localization/index.ts +29 -0
- package/src/localization/locales.ts +53 -0
- package/src/localization/messages.ts +40 -0
- package/src/localization/translations/ca.ts +476 -0
- package/src/localization/translations/cn.ts +477 -0
- package/src/localization/translations/en.ts +504 -0
- package/src/localization/translations/es.ts +477 -0
- package/src/localization/translations/fi.ts +448 -0
- package/src/localization/translations/ja.ts +477 -0
- package/src/localization/translations/pt.ts +449 -0
- package/src/localization/translations/ru.ts +488 -0
- package/src/middleware/index.ts +35 -0
- package/src/processors/data-processor.ts +723 -0
- package/src/processors/file-handler.ts +248 -0
- package/src/processors/index.ts +22 -0
- package/src/processors/types.ts +22 -0
- package/src/reducers/combined-updaters.ts +216 -0
- package/src/reducers/composer-helpers.ts +75 -0
- package/src/reducers/core.ts +111 -0
- package/src/reducers/index.ts +116 -0
- package/src/reducers/map-state-updaters.ts +271 -0
- package/src/reducers/map-state.ts +47 -0
- package/src/reducers/map-style-updaters.ts +640 -0
- package/src/reducers/map-style.ts +53 -0
- package/src/reducers/provider-state-updaters.ts +454 -0
- package/src/reducers/provider-state.ts +53 -0
- package/src/reducers/root.ts +231 -0
- package/src/reducers/types.ts +18 -0
- package/src/reducers/ui-state-updaters.ts +926 -0
- package/src/reducers/ui-state.ts +75 -0
- package/src/reducers/vis-state-merger.ts +627 -0
- package/src/reducers/vis-state-selectors.ts +37 -0
- package/src/reducers/vis-state-updaters.ts +2568 -0
- package/src/reducers/vis-state.ts +157 -0
- package/src/schemas/dataset-schema.ts +141 -0
- package/src/schemas/index.ts +52 -0
- package/src/schemas/schema-manager.ts +446 -0
- package/src/schemas/schema.ts +124 -0
- package/src/schemas/vis-state-schema.ts +761 -0
- package/src/styles/base.ts +1642 -0
- package/src/styles/media-breakpoints.ts +56 -0
- package/src/typedefs/deckgl.d.ts +25 -0
- package/src/utils/aggregate-utils.ts +71 -0
- package/src/utils/color-utils.ts +134 -0
- package/src/utils/data-scale-utils.ts +73 -0
- package/src/utils/data-utils.ts +459 -0
- package/src/utils/dataset-utils.ts +261 -0
- package/src/utils/dom-to-image.ts +533 -0
- package/src/utils/dom-utils.ts +354 -0
- package/src/utils/export-utils.ts +265 -0
- package/src/utils/filter-utils.ts +1185 -0
- package/src/utils/gl-utils.ts +40 -0
- package/src/utils/gpu-filter-utils.ts +249 -0
- package/src/utils/index.ts +69 -0
- package/src/utils/interaction-utils.ts +212 -0
- package/src/utils/layer-utils.ts +249 -0
- package/src/utils/map-style-utils/mapbox-gl-style-editor.ts +227 -0
- package/src/utils/notifications-utils.ts +89 -0
- package/src/utils/observe-dimensions.ts +127 -0
- package/src/utils/split-map-utils.ts +104 -0
- package/src/utils/table-utils/data-container-utils.ts +90 -0
- package/src/utils/table-utils/data-row.ts +110 -0
- package/src/utils/table-utils/indexed-data-container.ts +184 -0
- package/src/utils/table-utils/kepler-table.ts +639 -0
- package/src/utils/table-utils/row-data-container.ts +178 -0
- package/src/utils/utils.ts +228 -0
- package/dist/components/common/icons/arrow-down-solid .js +0 -64
- package/dist/localization/en.js +0 -494
- package/src/actions/action-wrapper.js +0 -183
- package/src/actions/actions.d.ts +0 -104
- package/src/actions/actions.js +0 -178
- package/src/actions/identity-actions.d.ts +0 -53
- package/src/actions/identity-actions.js +0 -83
- package/src/actions/index.d.ts +0 -23
- package/src/actions/map-state-actions.d.ts +0 -46
- package/src/actions/map-state-actions.js +0 -90
- package/src/actions/map-style-actions.d.ts +0 -116
- package/src/actions/map-style-actions.js +0 -135
- package/src/actions/provider-actions.d.ts +0 -203
- package/src/actions/provider-actions.js +0 -94
- package/src/actions/ui-state-actions.d.ts +0 -200
- package/src/actions/ui-state-actions.js +0 -272
- package/src/actions/vis-state-actions.d.ts +0 -502
- package/src/actions/vis-state-actions.js +0 -919
- package/src/cloud-providers/index.d.ts +0 -53
- package/src/cloud-providers/index.js +0 -21
- package/src/cloud-providers/provider.js +0 -233
- package/src/components/bottom-widget.d.ts +0 -33
- package/src/components/bottom-widget.js +0 -235
- package/src/components/common/action-panel.d.ts +0 -24
- package/src/components/common/action-panel.js +0 -177
- package/src/components/common/animation-control/animation-control.js +0 -155
- package/src/components/common/animation-control/animation-controller.js +0 -224
- package/src/components/common/animation-control/animation-speed-slider.js +0 -79
- package/src/components/common/animation-control/floating-time-display.js +0 -192
- package/src/components/common/animation-control/playback-controls.js +0 -278
- package/src/components/common/animation-control/speed-control.js +0 -71
- package/src/components/common/checkbox.js +0 -128
- package/src/components/common/color-legend.js +0 -198
- package/src/components/common/data-table/button.js +0 -47
- package/src/components/common/data-table/cell-size.js +0 -180
- package/src/components/common/data-table/grid.js +0 -55
- package/src/components/common/data-table/index.js +0 -620
- package/src/components/common/data-table/option-dropdown.js +0 -110
- package/src/components/common/dataset-label.js +0 -40
- package/src/components/common/error-boundary.js +0 -43
- package/src/components/common/field-selector.js +0 -233
- package/src/components/common/field-token.js +0 -56
- package/src/components/common/file-uploader/file-drop.d.ts +0 -19
- package/src/components/common/file-uploader/file-drop.js +0 -196
- package/src/components/common/file-uploader/file-upload-progress.d.ts +0 -11
- package/src/components/common/file-uploader/file-upload-progress.js +0 -110
- package/src/components/common/file-uploader/file-upload.d.ts +0 -22
- package/src/components/common/file-uploader/file-upload.js +0 -301
- package/src/components/common/file-uploader/upload-button.d.ts.wip +0 -11
- package/src/components/common/file-uploader/upload-button.js +0 -83
- package/src/components/common/histogram-plot.js +0 -102
- package/src/components/common/icons/add.js +0 -43
- package/src/components/common/icons/anchor_window.js +0 -53
- package/src/components/common/icons/arrow-down-alt.js +0 -43
- package/src/components/common/icons/arrow-down-solid .js +0 -43
- package/src/components/common/icons/arrow-down.js +0 -46
- package/src/components/common/icons/arrow-left.js +0 -48
- package/src/components/common/icons/arrow-right.js +0 -46
- package/src/components/common/icons/arrow-up-alt.js +0 -46
- package/src/components/common/icons/arrow-up-solid.js +0 -43
- package/src/components/common/icons/arrow-up.js +0 -46
- package/src/components/common/icons/base.js +0 -90
- package/src/components/common/icons/bug.js +0 -46
- package/src/components/common/icons/cancel.js +0 -43
- package/src/components/common/icons/checkmark.js +0 -45
- package/src/components/common/icons/clipboard.js +0 -46
- package/src/components/common/icons/clock.js +0 -44
- package/src/components/common/icons/close.js +0 -49
- package/src/components/common/icons/code-alt.js +0 -43
- package/src/components/common/icons/copy.js +0 -44
- package/src/components/common/icons/crosshairs.js +0 -43
- package/src/components/common/icons/cube-3d.js +0 -45
- package/src/components/common/icons/cursor-click.js +0 -49
- package/src/components/common/icons/data-table.js +0 -45
- package/src/components/common/icons/db.js +0 -45
- package/src/components/common/icons/delete.js +0 -44
- package/src/components/common/icons/docs.js +0 -46
- package/src/components/common/icons/drag-n-drop.js +0 -44
- package/src/components/common/icons/draw-polygon.js +0 -60
- package/src/components/common/icons/email.js +0 -45
- package/src/components/common/icons/expand.js +0 -45
- package/src/components/common/icons/eye-seen.js +0 -44
- package/src/components/common/icons/eye-unseen.js +0 -44
- package/src/components/common/icons/file-type.js +0 -57
- package/src/components/common/icons/file.js +0 -43
- package/src/components/common/icons/files.js +0 -42
- package/src/components/common/icons/filter-funnel.js +0 -43
- package/src/components/common/icons/free-window.js +0 -53
- package/src/components/common/icons/gear.js +0 -45
- package/src/components/common/icons/hash.js +0 -43
- package/src/components/common/icons/histogram.js +0 -47
- package/src/components/common/icons/index.js +0 -96
- package/src/components/common/icons/info.js +0 -54
- package/src/components/common/icons/layers.js +0 -43
- package/src/components/common/icons/left-arrow.js +0 -43
- package/src/components/common/icons/legend.js +0 -43
- package/src/components/common/icons/line-chart.js +0 -45
- package/src/components/common/icons/login.js +0 -46
- package/src/components/common/icons/logout.js +0 -43
- package/src/components/common/icons/map-icon.js +0 -69
- package/src/components/common/icons/map.js +0 -69
- package/src/components/common/icons/messages.js +0 -43
- package/src/components/common/icons/minus.js +0 -45
- package/src/components/common/icons/pause.js +0 -43
- package/src/components/common/icons/picture.js +0 -43
- package/src/components/common/icons/pin.js +0 -43
- package/src/components/common/icons/play.js +0 -43
- package/src/components/common/icons/polygon.js +0 -74
- package/src/components/common/icons/rectangle.js +0 -75
- package/src/components/common/icons/reduce.js +0 -48
- package/src/components/common/icons/reset.js +0 -43
- package/src/components/common/icons/rocket.js +0 -43
- package/src/components/common/icons/save.js +0 -44
- package/src/components/common/icons/save2.js +0 -47
- package/src/components/common/icons/search.js +0 -44
- package/src/components/common/icons/settings.js +0 -45
- package/src/components/common/icons/share.js +0 -43
- package/src/components/common/icons/split.js +0 -63
- package/src/components/common/icons/square-select.js +0 -44
- package/src/components/common/icons/table.js +0 -46
- package/src/components/common/icons/trash.js +0 -51
- package/src/components/common/icons/upload.js +0 -44
- package/src/components/common/icons/vert-dots.js +0 -50
- package/src/components/common/icons/vert-three-dots.js +0 -45
- package/src/components/common/icons/warning.js +0 -46
- package/src/components/common/image-preview.js +0 -111
- package/src/components/common/info-helper.js +0 -84
- package/src/components/common/item-selector/accessor.js +0 -45
- package/src/components/common/item-selector/chickleted-input.js +0 -143
- package/src/components/common/item-selector/dropdown-list.js +0 -258
- package/src/components/common/item-selector/item-selector.js +0 -360
- package/src/components/common/item-selector/typeahead.js +0 -507
- package/src/components/common/line-chart.js +0 -134
- package/src/components/common/loading-spinner.js +0 -64
- package/src/components/common/logo.js +0 -92
- package/src/components/common/map-layer-selector.d.ts +0 -10
- package/src/components/common/map-layer-selector.js +0 -54
- package/src/components/common/modal.js +0 -233
- package/src/components/common/portaled.js +0 -264
- package/src/components/common/progress-bar.d.ts +0 -13
- package/src/components/common/progress-bar.js +0 -49
- package/src/components/common/range-brush.js +0 -256
- package/src/components/common/range-plot.js +0 -139
- package/src/components/common/range-slider.js +0 -299
- package/src/components/common/slider/mouse-event.js +0 -97
- package/src/components/common/slider/slider-bar-handle.js +0 -97
- package/src/components/common/slider/slider-handle.js +0 -181
- package/src/components/common/slider/slider.js +0 -213
- package/src/components/common/styled-components.js +0 -657
- package/src/components/common/switch.js +0 -50
- package/src/components/common/time-range-slider-time-title.js +0 -76
- package/src/components/common/time-range-slider.js +0 -163
- package/src/components/common/time-slider-marker.js +0 -168
- package/src/components/common/toolbar-item.d.ts +0 -14
- package/src/components/common/toolbar-item.js +0 -83
- package/src/components/common/toolbar.js +0 -45
- package/src/components/common/vertical-toolbar.js +0 -35
- package/src/components/container.js +0 -173
- package/src/components/context.d.ts +0 -10
- package/src/components/context.js +0 -32
- package/src/components/editor/editor.js +0 -218
- package/src/components/editor/feature-action-panel.js +0 -143
- package/src/components/editor/feature-styles.js +0 -75
- package/src/components/editor/handle-style.js +0 -89
- package/src/components/filters/filter-panels/filter-panel-types.d.ts +0 -28
- package/src/components/filters/filter-panels/filter-panel-with-field-select.js +0 -124
- package/src/components/filters/filter-panels/multi-select-filter-panel.js +0 -75
- package/src/components/filters/filter-panels/new-filter-panel.js +0 -99
- package/src/components/filters/filter-panels/polygon-filter-panel.js +0 -96
- package/src/components/filters/filter-panels/range-filter-panel.js +0 -75
- package/src/components/filters/filter-panels/single-select-filter-panel.js +0 -75
- package/src/components/filters/filter-panels/time-range-filter-panel.js +0 -95
- package/src/components/filters/multi-select-filter.js +0 -36
- package/src/components/filters/polygon-filter.d.ts +0 -13
- package/src/components/filters/polygon-filter.js +0 -73
- package/src/components/filters/range-filter.js +0 -43
- package/src/components/filters/single-select-filter.js +0 -49
- package/src/components/filters/time-range-filter.js +0 -68
- package/src/components/filters/time-widget.js +0 -228
- package/src/components/geocoder/geocoder.d.ts +0 -33
- package/src/components/geocoder/geocoder.js +0 -272
- package/src/components/geocoder-panel.js +0 -191
- package/src/components/index.js +0 -247
- package/src/components/injector.js +0 -161
- package/src/components/kepler-gl.js +0 -525
- package/src/components/map/coordinate-info.js +0 -53
- package/src/components/map/layer-hover-info.d.ts +0 -12
- package/src/components/map/layer-hover-info.js +0 -185
- package/src/components/map/layer-selector-panel.d.ts +0 -16
- package/src/components/map/layer-selector-panel.js +0 -106
- package/src/components/map/locale-panel.d.ts +0 -12
- package/src/components/map/locale-panel.js +0 -91
- package/src/components/map/map-control-panel.d.ts +0 -11
- package/src/components/map/map-control-panel.js +0 -98
- package/src/components/map/map-control-tooltip.d.ts +0 -8
- package/src/components/map/map-control-tooltip.js +0 -40
- package/src/components/map/map-control.d.ts +0 -37
- package/src/components/map/map-control.js +0 -100
- package/src/components/map/map-draw-panel.d.ts +0 -16
- package/src/components/map/map-draw-panel.js +0 -125
- package/src/components/map/map-legend-panel.d.ts +0 -20
- package/src/components/map/map-legend-panel.js +0 -100
- package/src/components/map/map-legend.d.ts +0 -58
- package/src/components/map/map-legend.js +0 -228
- package/src/components/map/map-popover.d.ts +0 -28
- package/src/components/map/map-popover.js +0 -250
- package/src/components/map/split-map-button.d.ts +0 -19
- package/src/components/map/split-map-button.js +0 -82
- package/src/components/map/toggle-3d-button.d.ts +0 -16
- package/src/components/map/toggle-3d-button.js +0 -75
- package/src/components/map-container.d.ts +0 -18
- package/src/components/map-container.js +0 -502
- package/src/components/maps-layout.d.ts +0 -5
- package/src/components/maps-layout.js +0 -40
- package/src/components/modal-container.d.ts +0 -38
- package/src/components/modal-container.js +0 -545
- package/src/components/modals/add-map-style-modal.js +0 -301
- package/src/components/modals/cloud-tile.js +0 -147
- package/src/components/modals/data-table-modal.js +0 -217
- package/src/components/modals/delete-data-modal.js +0 -48
- package/src/components/modals/error-display.js +0 -39
- package/src/components/modals/export-data-modal.js +0 -193
- package/src/components/modals/export-image-modal.d.ts +0 -21
- package/src/components/modals/export-image-modal.js +0 -144
- package/src/components/modals/export-map-modal/export-html-map.d.ts +0 -21
- package/src/components/modals/export-map-modal/export-html-map.js +0 -145
- package/src/components/modals/export-map-modal/export-json-map.js +0 -100
- package/src/components/modals/export-map-modal/export-map-modal.js +0 -114
- package/src/components/modals/image-modal-container.d.ts +0 -13
- package/src/components/modals/image-modal-container.js +0 -76
- package/src/components/modals/load-data-modal.d.ts +0 -30
- package/src/components/modals/load-data-modal.js +0 -94
- package/src/components/modals/load-storage-map.js +0 -381
- package/src/components/modals/loading-dialog.js +0 -69
- package/src/components/modals/modal-tabs.js +0 -126
- package/src/components/modals/overwrite-map-modal.d.ts +0 -18
- package/src/components/modals/overwrite-map-modal.js +0 -97
- package/src/components/modals/provider-modal-container.d.ts +0 -12
- package/src/components/modals/provider-modal-container.js +0 -60
- package/src/components/modals/save-map-modal.d.ts +0 -32
- package/src/components/modals/save-map-modal.js +0 -244
- package/src/components/modals/share-map-modal.js +0 -208
- package/src/components/modals/status-panel.js +0 -95
- package/src/components/modals/storage-map-viewer.js +0 -177
- package/src/components/notification-panel/notification-item.js +0 -132
- package/src/components/notification-panel.js +0 -72
- package/src/components/plot-container.js +0 -228
- package/src/components/side-panel/common/dataset-info.js +0 -45
- package/src/components/side-panel/common/dataset-tag.js +0 -55
- package/src/components/side-panel/common/dataset-title.js +0 -146
- package/src/components/side-panel/common/source-data-catalog.js +0 -61
- package/src/components/side-panel/common/source-data-selector.js +0 -79
- package/src/components/side-panel/filter-manager.js +0 -105
- package/src/components/side-panel/filter-panel/filter-panel-header.js +0 -83
- package/src/components/side-panel/filter-panel/filter-panel.js +0 -126
- package/src/components/side-panel/interaction-manager.js +0 -46
- package/src/components/side-panel/interaction-panel/brush-config.js +0 -51
- package/src/components/side-panel/interaction-panel/interaction-panel.js +0 -115
- package/src/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +0 -199
- package/src/components/side-panel/interaction-panel/tooltip-config.js +0 -190
- package/src/components/side-panel/layer-manager.js +0 -290
- package/src/components/side-panel/layer-panel/color-palette.js +0 -90
- package/src/components/side-panel/layer-panel/color-range-selector.js +0 -353
- package/src/components/side-panel/layer-panel/color-selector.js +0 -196
- package/src/components/side-panel/layer-panel/column-selector.js +0 -70
- package/src/components/side-panel/layer-panel/custom-palette.js +0 -296
- package/src/components/side-panel/layer-panel/custom-picker.js +0 -88
- package/src/components/side-panel/layer-panel/dimension-scale-selector.js +0 -48
- package/src/components/side-panel/layer-panel/layer-column-config.js +0 -113
- package/src/components/side-panel/layer-panel/layer-config-group.js +0 -237
- package/src/components/side-panel/layer-panel/layer-panel-header.js +0 -236
- package/src/components/side-panel/layer-panel/layer-panel.js +0 -171
- package/src/components/side-panel/layer-panel/layer-type-dropdown-list.js +0 -105
- package/src/components/side-panel/layer-panel/layer-type-list-item.js +0 -83
- package/src/components/side-panel/layer-panel/layer-type-selector.js +0 -89
- package/src/components/side-panel/layer-panel/single-color-palette.js +0 -98
- package/src/components/side-panel/layer-panel/text-label-panel.js +0 -179
- package/src/components/side-panel/layer-panel/vis-config-by-field-selector.js +0 -163
- package/src/components/side-panel/layer-panel/vis-config-slider.js +0 -82
- package/src/components/side-panel/layer-panel/vis-config-switch.js +0 -87
- package/src/components/side-panel/map-manager.js +0 -114
- package/src/components/side-panel/map-style-panel/map-layer-selector.js +0 -128
- package/src/components/side-panel/map-style-panel/map-style-selector.js +0 -111
- package/src/components/side-panel/panel-dropdown.js +0 -53
- package/src/components/side-panel/panel-header-action.js +0 -106
- package/src/components/side-panel/panel-header.js +0 -321
- package/src/components/side-panel/panel-tab.js +0 -62
- package/src/components/side-panel/panel-title.js +0 -32
- package/src/components/side-panel/panel-toggle.js +0 -70
- package/src/components/side-panel/side-bar.js +0 -136
- package/src/components/side-panel.d.ts +0 -33
- package/src/components/side-panel.js +0 -253
- package/src/connect/keplergl-connect.js +0 -47
- package/src/connect/with-local-selector.d.ts +0 -11
- package/src/connect/with-local-selector.js +0 -67
- package/src/constants/action-types.d.ts +0 -135
- package/src/constants/action-types.js +0 -184
- package/src/constants/color-ranges.js +0 -72
- package/src/constants/default-settings.js +0 -994
- package/src/deckgl-layers/3d-building-layer/3d-building-layer.js +0 -56
- package/src/deckgl-layers/3d-building-layer/3d-building-utils.js +0 -192
- package/src/deckgl-layers/column-layer/enhanced-column-layer.js +0 -63
- package/src/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +0 -70
- package/src/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +0 -70
- package/src/deckgl-layers/layer-utils/cluster-utils.js +0 -76
- package/src/deckgl-layers/layer-utils/cpu-aggregator.js +0 -583
- package/src/deckgl-layers/layer-utils/shader-utils.js +0 -41
- package/src/deckgl-layers/line-layer/line-layer.js +0 -122
- package/src/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +0 -57
- package/src/deckgl-layers/svg-icon-layer/svg-icon-layer.js +0 -85
- package/src/layers/aggregation-layer.js +0 -356
- package/src/layers/arc-layer/arc-layer-icon.js +0 -67
- package/src/layers/arc-layer/arc-layer.js +0 -221
- package/src/layers/base-layer.js +0 -1545
- package/src/layers/cluster-layer/cluster-layer.js +0 -125
- package/src/layers/geojson-layer/geojson-layer-icon.js +0 -68
- package/src/layers/geojson-layer/geojson-layer.js +0 -344
- package/src/layers/geojson-layer/geojson-utils.js +0 -179
- package/src/layers/grid-layer/grid-layer-icon.js +0 -53
- package/src/layers/grid-layer/grid-layer.js +0 -95
- package/src/layers/grid-layer/grid-utils.js +0 -71
- package/src/layers/h3-hexagon-layer/h3-hexagon-layer.js +0 -264
- package/src/layers/h3-hexagon-layer/h3-utils.js +0 -65
- package/src/layers/heatmap-layer/heatmap-layer.js +0 -226
- package/src/layers/hexagon-layer/hexagon-layer.js +0 -95
- package/src/layers/hexagon-layer/hexagon-utils.js +0 -63
- package/src/layers/icon-layer/icon-info-modal.js +0 -155
- package/src/layers/icon-layer/icon-layer.js +0 -324
- package/src/layers/index.d.ts +0 -128
- package/src/layers/index.js +0 -72
- package/src/layers/layer-factory.d.ts +0 -149
- package/src/layers/layer-factory.js +0 -480
- package/src/layers/layer-text-label.js +0 -62
- package/src/layers/layer-update.js +0 -71
- package/src/layers/line-layer/line-layer.js +0 -161
- package/src/layers/mapbox-utils.js +0 -195
- package/src/layers/mapboxgl-layer.js +0 -154
- package/src/layers/point-layer/point-layer.js +0 -414
- package/src/layers/s2-geometry-layer/s2-geometry-layer.js +0 -265
- package/src/layers/s2-geometry-layer/s2-utils.js +0 -36
- package/src/layers/scenegraph-layer/scenegraph-layer.js +0 -182
- package/src/layers/trip-layer/trip-layer.js +0 -295
- package/src/layers/trip-layer/trip-utils.js +0 -169
- package/src/localization/en.js +0 -504
- package/src/localization/formatted-message.js +0 -33
- package/src/localization/index.js +0 -32
- package/src/localization/locales.js +0 -46
- package/src/middleware/index.js +0 -34
- package/src/processors/data-processor.d.ts +0 -57
- package/src/processors/data-processor.js +0 -684
- package/src/processors/file-handler.d.ts +0 -46
- package/src/processors/file-handler.js +0 -220
- package/src/processors/index.js +0 -44
- package/src/reducers/combined-updaters.d.ts +0 -26
- package/src/reducers/combined-updaters.js +0 -198
- package/src/reducers/composer-helpers.d.ts +0 -32
- package/src/reducers/composer-helpers.js +0 -70
- package/src/reducers/core.d.ts +0 -25
- package/src/reducers/core.js +0 -97
- package/src/reducers/index.d.ts +0 -118
- package/src/reducers/index.js +0 -53
- package/src/reducers/map-state-updaters.d.ts +0 -64
- package/src/reducers/map-state-updaters.js +0 -224
- package/src/reducers/map-state.js +0 -47
- package/src/reducers/map-style-updaters.d.ts +0 -76
- package/src/reducers/map-style-updaters.js +0 -541
- package/src/reducers/map-style.js +0 -53
- package/src/reducers/provider-state-updaters.d.ts +0 -88
- package/src/reducers/provider-state-updaters.js +0 -428
- package/src/reducers/provider-state.js +0 -53
- package/src/reducers/root.js +0 -230
- package/src/reducers/types.d.ts +0 -10
- package/src/reducers/ui-state-updaters.d.ts +0 -198
- package/src/reducers/ui-state-updaters.js +0 -766
- package/src/reducers/ui-state.js +0 -73
- package/src/reducers/vis-state-merger.d.ts +0 -78
- package/src/reducers/vis-state-merger.js +0 -557
- package/src/reducers/vis-state-selectors.js +0 -35
- package/src/reducers/vis-state-updaters.d.ts +0 -534
- package/src/reducers/vis-state-updaters.js +0 -2137
- package/src/reducers/vis-state.js +0 -155
- package/src/schemas/dataset-schema.js +0 -141
- package/src/schemas/index.d.ts +0 -24
- package/src/schemas/index.js +0 -42
- package/src/schemas/schema-manager.d.ts +0 -229
- package/src/schemas/schema-manager.js +0 -228
- package/src/schemas/schema.d.ts +0 -47
- package/src/schemas/schema.js +0 -90
- package/src/schemas/versions.d.ts +0 -23
- package/src/schemas/vis-state-schema.js +0 -754
- package/src/styles/base.js +0 -1620
- package/src/styles/media-breakpoints.js +0 -47
- package/src/typedefs/README.md +0 -3
- package/src/typedefs/deck.gl__core.d.ts +0 -64
- package/src/typedefs/deck.gl__mesh-layers.d.ts +0 -33
- package/src/utils/aggregate-utils.js +0 -71
- package/src/utils/color-utils.js +0 -115
- package/src/utils/data-scale-utils.d.ts +0 -26
- package/src/utils/data-scale-utils.js +0 -61
- package/src/utils/data-utils.d.ts +0 -46
- package/src/utils/data-utils.js +0 -447
- package/src/utils/dataset-utils.d.ts +0 -10
- package/src/utils/dataset-utils.js +0 -255
- package/src/utils/dom-to-image.js +0 -533
- package/src/utils/dom-utils.js +0 -354
- package/src/utils/export-utils.js +0 -247
- package/src/utils/filter-utils.d.ts +0 -192
- package/src/utils/filter-utils.js +0 -1114
- package/src/utils/gl-utils.js +0 -42
- package/src/utils/gpu-filter-utils.d.ts +0 -28
- package/src/utils/gpu-filter-utils.js +0 -253
- package/src/utils/index.d.ts +0 -5
- package/src/utils/index.js +0 -55
- package/src/utils/interaction-utils.d.ts +0 -36
- package/src/utils/interaction-utils.js +0 -185
- package/src/utils/layer-utils.d.ts +0 -78
- package/src/utils/layer-utils.js +0 -206
- package/src/utils/map-style-utils/mapbox-gl-style-editor.js +0 -201
- package/src/utils/notifications-utils.js +0 -83
- package/src/utils/observe-dimensions.d.ts +0 -18
- package/src/utils/observe-dimensions.js +0 -115
- package/src/utils/split-map-utils.js +0 -104
- package/src/utils/table-utils/data-container-utils.d.ts +0 -43
- package/src/utils/table-utils/data-container-utils.js +0 -61
- package/src/utils/table-utils/data-row.d.ts +0 -65
- package/src/utils/table-utils/data-row.js +0 -54
- package/src/utils/table-utils/index.d.ts +0 -1
- package/src/utils/table-utils/indexed-data-container.d.ts +0 -26
- package/src/utils/table-utils/indexed-data-container.js +0 -152
- package/src/utils/table-utils/kepler-table.d.ts +0 -114
- package/src/utils/table-utils/kepler-table.js +0 -508
- package/src/utils/table-utils/row-data-container.d.ts +0 -30
- package/src/utils/table-utils/row-data-container.js +0 -151
- package/src/utils/utils.js +0 -202
- /package/src/actions/{index.js → index.ts} +0 -0
- /package/src/components/common/data-table/{canvas.js → canvas.tsx} +0 -0
- /package/src/components/editor/{constants.js → constants.ts} +0 -0
- /package/src/components/filters/{components.js → components.ts} +0 -0
- /package/src/components/filters/{index.js → index.ts} +0 -0
- /package/src/components/map/{map-control-toolbar.js → map-control-toolbar.tsx} +0 -0
- /package/src/components/modals/export-map-modal/{components.js → components.tsx} +0 -0
- /package/src/components/modals/{modal-dialog.js → modal-dialog.tsx} +0 -0
- /package/src/components/side-panel/{cloud-storage-dropdown.js → cloud-storage-dropdown.tsx} +0 -0
- /package/src/components/side-panel/{custom-panel.js → custom-panel.tsx} +0 -0
- /package/src/components/side-panel/layer-panel/{layer-configurator.js → layer-configurator.tsx} +0 -0
- /package/src/constants/{color-palette.js → color-palette.ts} +0 -0
- /package/src/constants/{custom-color-ranges.js → custom-color-ranges.ts} +0 -0
- /package/src/constants/{index.js → index.ts} +0 -0
- /package/src/constants/{keyevent.js → keyevent.ts} +0 -0
- /package/src/constants/{tooltip.js → tooltip.ts} +0 -0
- /package/src/constants/{user-feedbacks.js → user-feedbacks.ts} +0 -0
- /package/src/constants/{user-guides.js → user-guides.ts} +0 -0
- /package/src/layers/cluster-layer/{cluster-layer-icon.js → cluster-layer-icon.tsx} +0 -0
- /package/src/layers/{default-layer-icon.js → default-layer-icon.tsx} +0 -0
- /package/src/layers/h3-hexagon-layer/{h3-hexagon-layer-icon.js → h3-hexagon-layer-icon.tsx} +0 -0
- /package/src/layers/heatmap-layer/{heatmap-layer-icon.js → heatmap-layer-icon.tsx} +0 -0
- /package/src/layers/hexagon-layer/{hexagon-layer-icon.js → hexagon-layer-icon.tsx} +0 -0
- /package/src/layers/icon-layer/{icon-layer-icon.js → icon-layer-icon.tsx} +0 -0
- /package/src/layers/line-layer/{line-layer-icon.js → line-layer-icon.tsx} +0 -0
- /package/src/layers/point-layer/{point-layer-icon.js → point-layer-icon.tsx} +0 -0
- /package/src/layers/s2-geometry-layer/{s2-layer-icon.js → s2-layer-icon.tsx} +0 -0
- /package/src/layers/scenegraph-layer/{scenegraph-info-modal.js → scenegraph-info-modal.tsx} +0 -0
- /package/src/layers/scenegraph-layer/{scenegraph-layer-icon.js → scenegraph-layer-icon.tsx} +0 -0
- /package/src/layers/trip-layer/{trip-info-modal.js → trip-info-modal.tsx} +0 -0
- /package/src/layers/trip-layer/{trip-layer-icon.js → trip-layer-icon.tsx} +0 -0
- /package/src/layers/{types.js → types.ts} +0 -0
- /package/src/reducers/{composers.js → composers.ts} +0 -0
- /package/src/schemas/{map-state-schema.js → map-state-schema.ts} +0 -0
- /package/src/schemas/{map-style-schema.js → map-style-schema.ts} +0 -0
- /package/src/schemas/{schema-utils.js → schema-utils.ts} +0 -0
- /package/src/schemas/{versions.js → versions.ts} +0 -0
- /package/src/styles/{index.js → index.ts} +0 -0
- /package/src/tasks/{tasks.js → tasks.ts} +0 -0
- /package/src/templates/{export-map-html.js → export-map-html.ts} +0 -0
- /package/src/utils/{locale-utils.js → locale-utils.ts} +0 -0
- /package/src/utils/{map-info-utils.js → map-info-utils.ts} +0 -0
- /package/src/utils/map-style-utils/{mapbox-utils.js → mapbox-utils.ts} +0 -0
- /package/src/utils/{mapbox-utils.js → mapbox-utils.ts} +0 -0
- /package/src/utils/{projection-utils.js → projection-utils.ts} +0 -0
- /package/src/utils/{searcher-utils.js → searcher-utils.ts} +0 -0
- /package/src/utils/table-utils/{data-container-interface.d.ts → data-container-interface.ts} +0 -0
- /package/src/utils/table-utils/{index.js → index.ts} +0 -0
|
@@ -1,56 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
|
-
exports.
|
|
8
|
+
exports["default"] = exports.visStateSchema = exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.propertiesV1 = exports.propertiesV0 = exports.filterPropsV1 = exports.SplitMapsSchema = exports.DimensionFieldSchema = exports.filterPropsV0 = exports.InteractionSchemaV1 = exports.FilterSchemaV0 = exports.LayerSchemaV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.dimensionPropsV0 = void 0;
|
|
9
|
+
|
|
8
10
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
|
+
|
|
9
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
10
14
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
+
|
|
11
16
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
-
|
|
13
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
17
|
+
|
|
14
18
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
19
|
+
|
|
15
20
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
+
|
|
22
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
+
|
|
24
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
+
|
|
16
26
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
-
|
|
27
|
+
|
|
28
|
+
var _lodash = _interopRequireDefault(require("lodash.pick"));
|
|
29
|
+
|
|
18
30
|
var _versions = require("./versions");
|
|
31
|
+
|
|
19
32
|
var _filterUtils = require("../utils/filter-utils");
|
|
33
|
+
|
|
20
34
|
var _layerFactory = require("../layers/layer-factory");
|
|
35
|
+
|
|
21
36
|
var _schema = _interopRequireDefault(require("./schema"));
|
|
22
|
-
|
|
37
|
+
|
|
38
|
+
var _lodash2 = _interopRequireDefault(require("lodash.clonedeep"));
|
|
39
|
+
|
|
23
40
|
var _dataUtils = require("../utils/data-utils");
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
function
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
//
|
|
36
|
-
// The above copyright notice and this permission notice shall be included in
|
|
37
|
-
// all copies or substantial portions of the Software.
|
|
38
|
-
//
|
|
39
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
40
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
41
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
42
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
43
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
44
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
45
|
-
// THE SOFTWARE.
|
|
41
|
+
|
|
42
|
+
var _visStateSchema;
|
|
43
|
+
|
|
44
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
45
|
+
|
|
46
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
47
|
+
|
|
48
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
49
|
+
|
|
50
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
51
|
+
|
|
46
52
|
/**
|
|
47
53
|
* V0 Schema
|
|
48
54
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
var dimensionPropsV0 = ['name', 'type'];
|
|
56
|
+
exports.dimensionPropsV0 = dimensionPropsV0;
|
|
51
57
|
|
|
52
58
|
// in v0 geojson there is only sizeField
|
|
53
|
-
|
|
54
59
|
// in v1 geojson
|
|
55
60
|
// stroke base on -> sizeField
|
|
56
61
|
// height based on -> heightField
|
|
@@ -58,41 +63,48 @@ var dimensionPropsV0 = exports.dimensionPropsV0 = ['name', 'type'];
|
|
|
58
63
|
// here we make our wiredst guess on which channel sizeField belongs to
|
|
59
64
|
function geojsonSizeFieldV0ToV1(config) {
|
|
60
65
|
var defaultRaiuds = 10;
|
|
61
|
-
var defaultRadiusRange = [0, 50];
|
|
66
|
+
var defaultRadiusRange = [0, 50]; // if extruded, sizeField is most likely used for height
|
|
62
67
|
|
|
63
|
-
// if extruded, sizeField is most likely used for height
|
|
64
68
|
if (config.visConfig.extruded) {
|
|
65
69
|
return 'heightField';
|
|
66
|
-
}
|
|
70
|
+
} // if show stroke enabled, sizeField is most likely used for stroke
|
|
71
|
+
|
|
67
72
|
|
|
68
|
-
// if show stroke enabled, sizeField is most likely used for stroke
|
|
69
73
|
if (config.visConfig.stroked) {
|
|
70
74
|
return 'sizeField';
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// if radius changed, or radius Range Changed, sizeField is most likely used for radius
|
|
75
|
+
} // if radius changed, or radius Range Changed, sizeField is most likely used for radius
|
|
74
76
|
// this is the most unreliable guess, that's why we put it in the end
|
|
77
|
+
|
|
78
|
+
|
|
75
79
|
if (config.visConfig.radius !== defaultRaiuds || config.visConfig.radiusRange.some(function (d, i) {
|
|
76
80
|
return d !== defaultRadiusRange[i];
|
|
77
81
|
})) {
|
|
78
82
|
return 'radiusField';
|
|
79
83
|
}
|
|
84
|
+
|
|
80
85
|
return 'sizeField';
|
|
81
|
-
}
|
|
86
|
+
} // convert v0 to v1 layer config
|
|
87
|
+
|
|
82
88
|
|
|
83
|
-
// convert v0 to v1 layer config
|
|
84
89
|
var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
|
|
85
90
|
(0, _inherits2["default"])(DimensionFieldSchemaV0, _Schema);
|
|
91
|
+
|
|
92
|
+
var _super = _createSuper(DimensionFieldSchemaV0);
|
|
93
|
+
|
|
86
94
|
function DimensionFieldSchemaV0() {
|
|
87
95
|
var _this;
|
|
96
|
+
|
|
88
97
|
(0, _classCallCheck2["default"])(this, DimensionFieldSchemaV0);
|
|
98
|
+
|
|
89
99
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
90
100
|
args[_key] = arguments[_key];
|
|
91
101
|
}
|
|
92
|
-
|
|
102
|
+
|
|
103
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
93
104
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "version", _versions.VERSIONS.v0);
|
|
94
105
|
return _this;
|
|
95
106
|
}
|
|
107
|
+
|
|
96
108
|
(0, _createClass2["default"])(DimensionFieldSchemaV0, [{
|
|
97
109
|
key: "save",
|
|
98
110
|
value: function save(field) {
|
|
@@ -103,13 +115,16 @@ var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
|
|
|
103
115
|
key: "load",
|
|
104
116
|
value: function load(field, parents, accumulated) {
|
|
105
117
|
var _parents$slice = parents.slice(-1),
|
|
106
|
-
|
|
107
|
-
|
|
118
|
+
_parents$slice2 = (0, _slicedToArray2["default"])(_parents$slice, 1),
|
|
119
|
+
config = _parents$slice2[0];
|
|
120
|
+
|
|
108
121
|
var fieldName = this.key;
|
|
122
|
+
|
|
109
123
|
if (config.type === 'geojson' && this.key === 'sizeField' && field) {
|
|
110
124
|
fieldName = geojsonSizeFieldV0ToV1(config);
|
|
111
|
-
}
|
|
112
|
-
|
|
125
|
+
} // fold into visualChannels to be load by VisualChannelSchemaV1
|
|
126
|
+
|
|
127
|
+
|
|
113
128
|
return {
|
|
114
129
|
visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, fieldName, field))
|
|
115
130
|
};
|
|
@@ -117,18 +132,26 @@ var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
|
|
|
117
132
|
}]);
|
|
118
133
|
return DimensionFieldSchemaV0;
|
|
119
134
|
}(_schema["default"]);
|
|
135
|
+
|
|
120
136
|
var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
|
|
121
137
|
(0, _inherits2["default"])(DimensionScaleSchemaV0, _Schema2);
|
|
138
|
+
|
|
139
|
+
var _super2 = _createSuper(DimensionScaleSchemaV0);
|
|
140
|
+
|
|
122
141
|
function DimensionScaleSchemaV0() {
|
|
123
142
|
var _this2;
|
|
143
|
+
|
|
124
144
|
(0, _classCallCheck2["default"])(this, DimensionScaleSchemaV0);
|
|
145
|
+
|
|
125
146
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
126
147
|
args[_key2] = arguments[_key2];
|
|
127
148
|
}
|
|
128
|
-
|
|
149
|
+
|
|
150
|
+
_this2 = _super2.call.apply(_super2, [this].concat(args));
|
|
129
151
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "version", _versions.VERSIONS.v0);
|
|
130
152
|
return _this2;
|
|
131
153
|
}
|
|
154
|
+
|
|
132
155
|
(0, _createClass2["default"])(DimensionScaleSchemaV0, [{
|
|
133
156
|
key: "save",
|
|
134
157
|
value: function save(scale) {
|
|
@@ -138,14 +161,16 @@ var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
|
|
|
138
161
|
key: "load",
|
|
139
162
|
value: function load(scale, parents, accumulated) {
|
|
140
163
|
var _parents$slice3 = parents.slice(-1),
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
164
|
+
_parents$slice4 = (0, _slicedToArray2["default"])(_parents$slice3, 1),
|
|
165
|
+
config = _parents$slice4[0]; // fold into visualChannels to be load by VisualChannelSchemaV1
|
|
166
|
+
|
|
167
|
+
|
|
144
168
|
if (this.key === 'sizeScale' && config.type === 'geojson') {
|
|
145
169
|
// sizeScale now split into radiusScale, heightScale
|
|
146
170
|
// no user customization, just use default
|
|
147
171
|
return {};
|
|
148
172
|
}
|
|
173
|
+
|
|
149
174
|
return {
|
|
150
175
|
visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, this.key, scale))
|
|
151
176
|
};
|
|
@@ -153,18 +178,27 @@ var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
|
|
|
153
178
|
}]);
|
|
154
179
|
return DimensionScaleSchemaV0;
|
|
155
180
|
}(_schema["default"]); // used to convert v0 to v1 layer config
|
|
181
|
+
|
|
182
|
+
|
|
156
183
|
var LayerConfigSchemaV0 = /*#__PURE__*/function (_Schema3) {
|
|
157
184
|
(0, _inherits2["default"])(LayerConfigSchemaV0, _Schema3);
|
|
185
|
+
|
|
186
|
+
var _super3 = _createSuper(LayerConfigSchemaV0);
|
|
187
|
+
|
|
158
188
|
function LayerConfigSchemaV0() {
|
|
159
189
|
var _this3;
|
|
190
|
+
|
|
160
191
|
(0, _classCallCheck2["default"])(this, LayerConfigSchemaV0);
|
|
192
|
+
|
|
161
193
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
162
194
|
args[_key3] = arguments[_key3];
|
|
163
195
|
}
|
|
164
|
-
|
|
196
|
+
|
|
197
|
+
_this3 = _super3.call.apply(_super3, [this].concat(args));
|
|
165
198
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "version", _versions.VERSIONS.v0);
|
|
166
199
|
return _this3;
|
|
167
200
|
}
|
|
201
|
+
|
|
168
202
|
(0, _createClass2["default"])(LayerConfigSchemaV0, [{
|
|
169
203
|
key: "load",
|
|
170
204
|
value: function load(saved, parents, accumulated) {
|
|
@@ -177,18 +211,27 @@ var LayerConfigSchemaV0 = /*#__PURE__*/function (_Schema3) {
|
|
|
177
211
|
return LayerConfigSchemaV0;
|
|
178
212
|
}(_schema["default"]); // used to convert v0 to v1 layer columns
|
|
179
213
|
// only return column value for each column
|
|
214
|
+
|
|
215
|
+
|
|
180
216
|
var LayerColumnsSchemaV0 = /*#__PURE__*/function (_Schema4) {
|
|
181
217
|
(0, _inherits2["default"])(LayerColumnsSchemaV0, _Schema4);
|
|
218
|
+
|
|
219
|
+
var _super4 = _createSuper(LayerColumnsSchemaV0);
|
|
220
|
+
|
|
182
221
|
function LayerColumnsSchemaV0() {
|
|
183
222
|
var _this4;
|
|
223
|
+
|
|
184
224
|
(0, _classCallCheck2["default"])(this, LayerColumnsSchemaV0);
|
|
225
|
+
|
|
185
226
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
186
227
|
args[_key4] = arguments[_key4];
|
|
187
228
|
}
|
|
188
|
-
|
|
229
|
+
|
|
230
|
+
_this4 = _super4.call.apply(_super4, [this].concat(args));
|
|
189
231
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this4), "version", _versions.VERSIONS.v0);
|
|
190
232
|
return _this4;
|
|
191
233
|
}
|
|
234
|
+
|
|
192
235
|
(0, _createClass2["default"])(LayerColumnsSchemaV0, [{
|
|
193
236
|
key: "load",
|
|
194
237
|
value: function load(saved, parents, accumulated) {
|
|
@@ -204,18 +247,27 @@ var LayerColumnsSchemaV0 = /*#__PURE__*/function (_Schema4) {
|
|
|
204
247
|
}]);
|
|
205
248
|
return LayerColumnsSchemaV0;
|
|
206
249
|
}(_schema["default"]); // used to convert v0 to v1 layer config.visConfig
|
|
250
|
+
|
|
251
|
+
|
|
207
252
|
var LayerConfigToVisConfigSchemaV0 = /*#__PURE__*/function (_Schema5) {
|
|
208
253
|
(0, _inherits2["default"])(LayerConfigToVisConfigSchemaV0, _Schema5);
|
|
254
|
+
|
|
255
|
+
var _super5 = _createSuper(LayerConfigToVisConfigSchemaV0);
|
|
256
|
+
|
|
209
257
|
function LayerConfigToVisConfigSchemaV0() {
|
|
210
258
|
var _this5;
|
|
259
|
+
|
|
211
260
|
(0, _classCallCheck2["default"])(this, LayerConfigToVisConfigSchemaV0);
|
|
261
|
+
|
|
212
262
|
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
|
213
263
|
args[_key5] = arguments[_key5];
|
|
214
264
|
}
|
|
215
|
-
|
|
265
|
+
|
|
266
|
+
_this5 = _super5.call.apply(_super5, [this].concat(args));
|
|
216
267
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this5), "version", _versions.VERSIONS.v0);
|
|
217
268
|
return _this5;
|
|
218
269
|
}
|
|
270
|
+
|
|
219
271
|
(0, _createClass2["default"])(LayerConfigToVisConfigSchemaV0, [{
|
|
220
272
|
key: "load",
|
|
221
273
|
value: function load(saved, parents, accumulated) {
|
|
@@ -230,31 +282,41 @@ var LayerConfigToVisConfigSchemaV0 = /*#__PURE__*/function (_Schema5) {
|
|
|
230
282
|
}]);
|
|
231
283
|
return LayerConfigToVisConfigSchemaV0;
|
|
232
284
|
}(_schema["default"]);
|
|
285
|
+
|
|
233
286
|
var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
|
|
234
287
|
(0, _inherits2["default"])(LayerVisConfigSchemaV0, _Schema6);
|
|
288
|
+
|
|
289
|
+
var _super6 = _createSuper(LayerVisConfigSchemaV0);
|
|
290
|
+
|
|
235
291
|
function LayerVisConfigSchemaV0() {
|
|
236
292
|
var _this6;
|
|
293
|
+
|
|
237
294
|
(0, _classCallCheck2["default"])(this, LayerVisConfigSchemaV0);
|
|
295
|
+
|
|
238
296
|
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
|
239
297
|
args[_key6] = arguments[_key6];
|
|
240
298
|
}
|
|
241
|
-
|
|
299
|
+
|
|
300
|
+
_this6 = _super6.call.apply(_super6, [this].concat(args));
|
|
242
301
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this6), "version", _versions.VERSIONS.v0);
|
|
243
302
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this6), "key", 'visConfig');
|
|
244
303
|
return _this6;
|
|
245
304
|
}
|
|
305
|
+
|
|
246
306
|
(0, _createClass2["default"])(LayerVisConfigSchemaV0, [{
|
|
247
307
|
key: "load",
|
|
248
308
|
value: function load(visConfig, parents, accumulator) {
|
|
249
309
|
var _parents$slice5 = parents.slice(-1),
|
|
250
|
-
|
|
251
|
-
|
|
310
|
+
_parents$slice6 = (0, _slicedToArray2["default"])(_parents$slice5, 1),
|
|
311
|
+
config = _parents$slice6[0];
|
|
312
|
+
|
|
252
313
|
var rename = {
|
|
253
314
|
geojson: {
|
|
254
315
|
extruded: 'enable3d',
|
|
255
316
|
elevationRange: 'heightRange'
|
|
256
317
|
}
|
|
257
318
|
};
|
|
319
|
+
|
|
258
320
|
if (config.type in rename) {
|
|
259
321
|
var propToRename = rename[config.type];
|
|
260
322
|
return {
|
|
@@ -265,6 +327,7 @@ var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
|
|
|
265
327
|
})
|
|
266
328
|
};
|
|
267
329
|
}
|
|
330
|
+
|
|
268
331
|
return {
|
|
269
332
|
config: _objectSpread(_objectSpread({}, accumulator.config || {}), {}, {
|
|
270
333
|
visConfig: visConfig
|
|
@@ -274,18 +337,26 @@ var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
|
|
|
274
337
|
}]);
|
|
275
338
|
return LayerVisConfigSchemaV0;
|
|
276
339
|
}(_schema["default"]);
|
|
340
|
+
|
|
277
341
|
var LayerConfigSchemaDeleteV0 = /*#__PURE__*/function (_Schema7) {
|
|
278
342
|
(0, _inherits2["default"])(LayerConfigSchemaDeleteV0, _Schema7);
|
|
343
|
+
|
|
344
|
+
var _super7 = _createSuper(LayerConfigSchemaDeleteV0);
|
|
345
|
+
|
|
279
346
|
function LayerConfigSchemaDeleteV0() {
|
|
280
347
|
var _this7;
|
|
348
|
+
|
|
281
349
|
(0, _classCallCheck2["default"])(this, LayerConfigSchemaDeleteV0);
|
|
350
|
+
|
|
282
351
|
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
|
|
283
352
|
args[_key7] = arguments[_key7];
|
|
284
353
|
}
|
|
285
|
-
|
|
354
|
+
|
|
355
|
+
_this7 = _super7.call.apply(_super7, [this].concat(args));
|
|
286
356
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this7), "version", _versions.VERSIONS.v0);
|
|
287
357
|
return _this7;
|
|
288
358
|
}
|
|
359
|
+
|
|
289
360
|
(0, _createClass2["default"])(LayerConfigSchemaDeleteV0, [{
|
|
290
361
|
key: "load",
|
|
291
362
|
value: function load(value) {
|
|
@@ -304,7 +375,9 @@ var LayerConfigSchemaDeleteV0 = /*#__PURE__*/function (_Schema7) {
|
|
|
304
375
|
* - enable3d, colorAggregation and sizeAggregation are moved into visConfig
|
|
305
376
|
* - GeojsonLayer - added height, radius specific properties
|
|
306
377
|
*/
|
|
307
|
-
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
var layerPropsV0 = {
|
|
308
381
|
id: null,
|
|
309
382
|
type: null,
|
|
310
383
|
// move into layer.config
|
|
@@ -361,16 +434,22 @@ var layerPropsV0 = exports.layerPropsV0 = {
|
|
|
361
434
|
// delete
|
|
362
435
|
isAggregated: new LayerConfigSchemaDeleteV0()
|
|
363
436
|
};
|
|
364
|
-
|
|
365
437
|
/**
|
|
366
438
|
* V1 Schema
|
|
367
439
|
*/
|
|
440
|
+
|
|
441
|
+
exports.layerPropsV0 = layerPropsV0;
|
|
442
|
+
|
|
368
443
|
var ColumnSchemaV1 = /*#__PURE__*/function (_Schema8) {
|
|
369
444
|
(0, _inherits2["default"])(ColumnSchemaV1, _Schema8);
|
|
445
|
+
|
|
446
|
+
var _super8 = _createSuper(ColumnSchemaV1);
|
|
447
|
+
|
|
370
448
|
function ColumnSchemaV1() {
|
|
371
449
|
(0, _classCallCheck2["default"])(this, ColumnSchemaV1);
|
|
372
|
-
return
|
|
450
|
+
return _super8.apply(this, arguments);
|
|
373
451
|
}
|
|
452
|
+
|
|
374
453
|
(0, _createClass2["default"])(ColumnSchemaV1, [{
|
|
375
454
|
key: "save",
|
|
376
455
|
value: function save(columns, state) {
|
|
@@ -390,18 +469,23 @@ var ColumnSchemaV1 = /*#__PURE__*/function (_Schema8) {
|
|
|
390
469
|
}]);
|
|
391
470
|
return ColumnSchemaV1;
|
|
392
471
|
}(_schema["default"]);
|
|
472
|
+
|
|
393
473
|
var TextLabelSchemaV1 = /*#__PURE__*/function (_Schema9) {
|
|
394
474
|
(0, _inherits2["default"])(TextLabelSchemaV1, _Schema9);
|
|
475
|
+
|
|
476
|
+
var _super9 = _createSuper(TextLabelSchemaV1);
|
|
477
|
+
|
|
395
478
|
function TextLabelSchemaV1() {
|
|
396
479
|
(0, _classCallCheck2["default"])(this, TextLabelSchemaV1);
|
|
397
|
-
return
|
|
480
|
+
return _super9.apply(this, arguments);
|
|
398
481
|
}
|
|
482
|
+
|
|
399
483
|
(0, _createClass2["default"])(TextLabelSchemaV1, [{
|
|
400
484
|
key: "save",
|
|
401
485
|
value: function save(textLabel) {
|
|
402
486
|
return (0, _defineProperty2["default"])({}, this.key, textLabel.map(function (tl) {
|
|
403
487
|
return _objectSpread(_objectSpread({}, tl), {}, {
|
|
404
|
-
field: tl.field ? (0,
|
|
488
|
+
field: tl.field ? (0, _lodash["default"])(tl.field, ['name', 'type']) : null
|
|
405
489
|
});
|
|
406
490
|
}));
|
|
407
491
|
}
|
|
@@ -415,14 +499,17 @@ var TextLabelSchemaV1 = /*#__PURE__*/function (_Schema9) {
|
|
|
415
499
|
}]);
|
|
416
500
|
return TextLabelSchemaV1;
|
|
417
501
|
}(_schema["default"]);
|
|
502
|
+
|
|
418
503
|
var visualChannelModificationV1 = {
|
|
419
504
|
geojson: function geojson(vc, parents, accumulator) {
|
|
420
505
|
var _parents$slice7 = parents.slice(-1),
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
// make our best guess if this geojson layer contains point
|
|
506
|
+
_parents$slice8 = (0, _slicedToArray2["default"])(_parents$slice7, 1),
|
|
507
|
+
layer = _parents$slice8[0];
|
|
508
|
+
|
|
509
|
+
var isOld = !vc.hasOwnProperty('strokeColorField'); // make our best guess if this geojson layer contains point
|
|
510
|
+
|
|
425
511
|
var isPoint = vc.radiusField || layer.config.visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
|
|
512
|
+
|
|
426
513
|
if (isOld && !isPoint && layer.config.visConfig.stroked) {
|
|
427
514
|
// if stroked is true, copy color config to stroke color config
|
|
428
515
|
return {
|
|
@@ -430,29 +517,37 @@ var visualChannelModificationV1 = {
|
|
|
430
517
|
strokeColorScale: vc.colorScale
|
|
431
518
|
};
|
|
432
519
|
}
|
|
520
|
+
|
|
433
521
|
return {};
|
|
434
522
|
}
|
|
435
523
|
};
|
|
436
524
|
/**
|
|
437
525
|
* V1: save [field]: {name, type}, [scale]: '' for each channel
|
|
438
526
|
*/
|
|
527
|
+
|
|
439
528
|
var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
|
|
440
529
|
(0, _inherits2["default"])(VisualChannelSchemaV1, _Schema10);
|
|
530
|
+
|
|
531
|
+
var _super10 = _createSuper(VisualChannelSchemaV1);
|
|
532
|
+
|
|
441
533
|
function VisualChannelSchemaV1() {
|
|
442
534
|
(0, _classCallCheck2["default"])(this, VisualChannelSchemaV1);
|
|
443
|
-
return
|
|
535
|
+
return _super10.apply(this, arguments);
|
|
444
536
|
}
|
|
537
|
+
|
|
445
538
|
(0, _createClass2["default"])(VisualChannelSchemaV1, [{
|
|
446
539
|
key: "save",
|
|
447
540
|
value: function save(visualChannels, parents) {
|
|
448
541
|
// only save field and scale of each channel
|
|
449
542
|
var _parents$slice9 = parents.slice(-1),
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
// save channel to null if didn't select any field
|
|
543
|
+
_parents$slice10 = (0, _slicedToArray2["default"])(_parents$slice9, 1),
|
|
544
|
+
layer = _parents$slice10[0];
|
|
545
|
+
|
|
546
|
+
return (0, _defineProperty2["default"])({}, this.key, Object.keys(visualChannels).reduce( // save channel to null if didn't select any field
|
|
454
547
|
function (accu, key) {
|
|
455
|
-
|
|
548
|
+
var _objectSpread8;
|
|
549
|
+
|
|
550
|
+
return _objectSpread(_objectSpread({}, accu), {}, (_objectSpread8 = {}, (0, _defineProperty2["default"])(_objectSpread8, visualChannels[key].field, layer.config[visualChannels[key].field] ? (0, _lodash["default"])(layer.config[visualChannels[key].field], ['name', 'type', 'colorColumn']) : null), (0, _defineProperty2["default"])(_objectSpread8, visualChannels[key].scale, layer.config[visualChannels[key].scale]), _objectSpread8));
|
|
456
551
|
}, {}));
|
|
457
552
|
}
|
|
458
553
|
}, {
|
|
@@ -460,8 +555,9 @@ var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
|
|
|
460
555
|
value: function load(vc, parents, accumulator) {
|
|
461
556
|
// fold channels into config
|
|
462
557
|
var _parents$slice11 = parents.slice(-1),
|
|
463
|
-
|
|
464
|
-
|
|
558
|
+
_parents$slice12 = (0, _slicedToArray2["default"])(_parents$slice11, 1),
|
|
559
|
+
layer = _parents$slice12[0];
|
|
560
|
+
|
|
465
561
|
var modified = visualChannelModificationV1[layer.type] ? visualChannelModificationV1[layer.type](vc, parents, accumulator) : {};
|
|
466
562
|
return _objectSpread(_objectSpread({}, accumulator), {}, {
|
|
467
563
|
config: _objectSpread(_objectSpread(_objectSpread({}, accumulator.config || {}), vc), modified)
|
|
@@ -473,12 +569,18 @@ var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
|
|
|
473
569
|
/**
|
|
474
570
|
* V1: save [channel]: [{ label, color }, ...] for legend
|
|
475
571
|
*/
|
|
572
|
+
|
|
573
|
+
|
|
476
574
|
var LegendSettingsV1 = /*#__PURE__*/function (_Schema11) {
|
|
477
575
|
(0, _inherits2["default"])(LegendSettingsV1, _Schema11);
|
|
576
|
+
|
|
577
|
+
var _super11 = _createSuper(LegendSettingsV1);
|
|
578
|
+
|
|
478
579
|
function LegendSettingsV1() {
|
|
479
580
|
(0, _classCallCheck2["default"])(this, LegendSettingsV1);
|
|
480
|
-
return
|
|
581
|
+
return _super11.apply(this, arguments);
|
|
481
582
|
}
|
|
583
|
+
|
|
482
584
|
(0, _createClass2["default"])(LegendSettingsV1, [{
|
|
483
585
|
key: "save",
|
|
484
586
|
value: function save(legendSettings, parents) {
|
|
@@ -495,17 +597,22 @@ var LegendSettingsV1 = /*#__PURE__*/function (_Schema11) {
|
|
|
495
597
|
}]);
|
|
496
598
|
return LegendSettingsV1;
|
|
497
599
|
}(_schema["default"]);
|
|
600
|
+
|
|
498
601
|
var visConfigModificationV1 = {
|
|
499
602
|
point: function point(visConfig, parents, accumulated) {
|
|
500
603
|
var modified = {};
|
|
604
|
+
|
|
501
605
|
var _parents$slice13 = parents.slice(-2, -1),
|
|
502
|
-
|
|
503
|
-
|
|
606
|
+
_parents$slice14 = (0, _slicedToArray2["default"])(_parents$slice13, 1),
|
|
607
|
+
layer = _parents$slice14[0];
|
|
608
|
+
|
|
504
609
|
var isOld = !visConfig.hasOwnProperty('filled') && !visConfig.strokeColor && !visConfig.strokeColorRange;
|
|
610
|
+
|
|
505
611
|
if (isOld) {
|
|
506
612
|
// color color & color range to stroke color
|
|
507
613
|
modified.strokeColor = layer.config.color;
|
|
508
|
-
modified.strokeColorRange = (0,
|
|
614
|
+
modified.strokeColorRange = (0, _lodash2["default"])(visConfig.colorRange);
|
|
615
|
+
|
|
509
616
|
if (visConfig.outline) {
|
|
510
617
|
// point layer now supports both outline and fill
|
|
511
618
|
// for older schema where filled has not been added to point layer
|
|
@@ -513,48 +620,63 @@ var visConfigModificationV1 = {
|
|
|
513
620
|
modified.filled = false;
|
|
514
621
|
}
|
|
515
622
|
}
|
|
623
|
+
|
|
516
624
|
return modified;
|
|
517
625
|
},
|
|
518
626
|
geojson: function geojson(visConfig, parents, accumulated) {
|
|
519
627
|
// is points?
|
|
520
628
|
var modified = {};
|
|
629
|
+
|
|
521
630
|
var _parents$slice15 = parents.slice(-2, -1),
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
// make our best guess if this geojson layer contains point
|
|
631
|
+
_parents$slice16 = (0, _slicedToArray2["default"])(_parents$slice15, 1),
|
|
632
|
+
layer = _parents$slice16[0];
|
|
633
|
+
|
|
634
|
+
var isOld = layer.visualChannels && !layer.visualChannels.hasOwnProperty('strokeColorField') && !visConfig.strokeColor && !visConfig.strokeColorRange; // make our best guess if this geojson layer contains point
|
|
635
|
+
|
|
526
636
|
var isPoint = layer.visualChannels && layer.visualChannels.radiusField || visConfig && visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
|
|
637
|
+
|
|
527
638
|
if (isOld) {
|
|
528
639
|
// color color & color range to stroke color
|
|
529
640
|
modified.strokeColor = layer.config.color;
|
|
530
|
-
modified.strokeColorRange = (0,
|
|
641
|
+
modified.strokeColorRange = (0, _lodash2["default"])(visConfig.colorRange);
|
|
642
|
+
|
|
531
643
|
if (isPoint) {
|
|
532
644
|
// if is point, set stroke to false
|
|
533
645
|
modified.filled = true;
|
|
534
646
|
modified.stroked = false;
|
|
535
647
|
}
|
|
536
648
|
}
|
|
649
|
+
|
|
537
650
|
return modified;
|
|
538
651
|
}
|
|
539
652
|
};
|
|
653
|
+
|
|
540
654
|
var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema12) {
|
|
541
655
|
(0, _inherits2["default"])(VisConfigSchemaV1, _Schema12);
|
|
656
|
+
|
|
657
|
+
var _super12 = _createSuper(VisConfigSchemaV1);
|
|
658
|
+
|
|
542
659
|
function VisConfigSchemaV1() {
|
|
543
660
|
var _this8;
|
|
661
|
+
|
|
544
662
|
(0, _classCallCheck2["default"])(this, VisConfigSchemaV1);
|
|
663
|
+
|
|
545
664
|
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
|
|
546
665
|
args[_key8] = arguments[_key8];
|
|
547
666
|
}
|
|
548
|
-
|
|
667
|
+
|
|
668
|
+
_this8 = _super12.call.apply(_super12, [this].concat(args));
|
|
549
669
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this8), "key", 'visConfig');
|
|
550
670
|
return _this8;
|
|
551
671
|
}
|
|
672
|
+
|
|
552
673
|
(0, _createClass2["default"])(VisConfigSchemaV1, [{
|
|
553
674
|
key: "load",
|
|
554
675
|
value: function load(visConfig, parents, accumulated) {
|
|
555
676
|
var _parents$slice17 = parents.slice(-2, -1),
|
|
556
|
-
|
|
557
|
-
|
|
677
|
+
_parents$slice18 = (0, _slicedToArray2["default"])(_parents$slice17, 1),
|
|
678
|
+
layer = _parents$slice18[0];
|
|
679
|
+
|
|
558
680
|
var modified = visConfigModificationV1[layer.type] ? visConfigModificationV1[layer.type](visConfig, parents, accumulated) : {};
|
|
559
681
|
return {
|
|
560
682
|
visConfig: _objectSpread(_objectSpread({}, visConfig), modified)
|
|
@@ -563,7 +685,8 @@ var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema12) {
|
|
|
563
685
|
}]);
|
|
564
686
|
return VisConfigSchemaV1;
|
|
565
687
|
}(_schema["default"]);
|
|
566
|
-
|
|
688
|
+
|
|
689
|
+
var layerPropsV1 = {
|
|
567
690
|
id: null,
|
|
568
691
|
type: null,
|
|
569
692
|
config: new _schema["default"]({
|
|
@@ -599,31 +722,44 @@ var layerPropsV1 = exports.layerPropsV1 = {
|
|
|
599
722
|
key: 'visualChannels'
|
|
600
723
|
})
|
|
601
724
|
};
|
|
602
|
-
|
|
725
|
+
exports.layerPropsV1 = layerPropsV1;
|
|
726
|
+
|
|
727
|
+
var LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
|
|
603
728
|
(0, _inherits2["default"])(LayerSchemaV0, _Schema13);
|
|
729
|
+
|
|
730
|
+
var _super13 = _createSuper(LayerSchemaV0);
|
|
731
|
+
|
|
604
732
|
function LayerSchemaV0() {
|
|
605
733
|
var _this9;
|
|
734
|
+
|
|
606
735
|
(0, _classCallCheck2["default"])(this, LayerSchemaV0);
|
|
736
|
+
|
|
607
737
|
for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
|
|
608
738
|
args[_key9] = arguments[_key9];
|
|
609
739
|
}
|
|
610
|
-
|
|
740
|
+
|
|
741
|
+
_this9 = _super13.call.apply(_super13, [this].concat(args));
|
|
611
742
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this9), "key", 'layers');
|
|
612
743
|
return _this9;
|
|
613
744
|
}
|
|
745
|
+
|
|
614
746
|
(0, _createClass2["default"])(LayerSchemaV0, [{
|
|
615
747
|
key: "save",
|
|
616
748
|
value: function save(layers, parents) {
|
|
617
749
|
var _this10 = this;
|
|
750
|
+
|
|
618
751
|
var _parents$slice19 = parents.slice(-1),
|
|
619
|
-
|
|
620
|
-
|
|
752
|
+
_parents$slice20 = (0, _slicedToArray2["default"])(_parents$slice19, 1),
|
|
753
|
+
visState = _parents$slice20[0];
|
|
754
|
+
|
|
621
755
|
return (0, _defineProperty2["default"])({}, this.key, visState.layerOrder.reduce(function (saved, index) {
|
|
622
756
|
// save layers according to their rendering order
|
|
623
757
|
var layer = layers[index];
|
|
758
|
+
|
|
624
759
|
if (layer.isValidToSave()) {
|
|
625
760
|
saved.push(_this10.savePropertiesOrApplySchema(layer).layers);
|
|
626
761
|
}
|
|
762
|
+
|
|
627
763
|
return saved;
|
|
628
764
|
}, []));
|
|
629
765
|
}
|
|
@@ -631,6 +767,7 @@ var LayerSchemaV0 = exports.LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
|
|
|
631
767
|
key: "load",
|
|
632
768
|
value: function load(layers) {
|
|
633
769
|
var _this11 = this;
|
|
770
|
+
|
|
634
771
|
return (0, _defineProperty2["default"])({}, this.key, layers.map(function (layer) {
|
|
635
772
|
return _this11.loadPropertiesOrApplySchema(layer, layers).layers;
|
|
636
773
|
}));
|
|
@@ -638,22 +775,33 @@ var LayerSchemaV0 = exports.LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
|
|
|
638
775
|
}]);
|
|
639
776
|
return LayerSchemaV0;
|
|
640
777
|
}(_schema["default"]);
|
|
641
|
-
|
|
778
|
+
|
|
779
|
+
exports.LayerSchemaV0 = LayerSchemaV0;
|
|
780
|
+
|
|
781
|
+
var FilterSchemaV0 = /*#__PURE__*/function (_Schema14) {
|
|
642
782
|
(0, _inherits2["default"])(FilterSchemaV0, _Schema14);
|
|
783
|
+
|
|
784
|
+
var _super14 = _createSuper(FilterSchemaV0);
|
|
785
|
+
|
|
643
786
|
function FilterSchemaV0() {
|
|
644
787
|
var _this12;
|
|
788
|
+
|
|
645
789
|
(0, _classCallCheck2["default"])(this, FilterSchemaV0);
|
|
790
|
+
|
|
646
791
|
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
|
|
647
792
|
args[_key10] = arguments[_key10];
|
|
648
793
|
}
|
|
649
|
-
|
|
794
|
+
|
|
795
|
+
_this12 = _super14.call.apply(_super14, [this].concat(args));
|
|
650
796
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this12), "key", 'filters');
|
|
651
797
|
return _this12;
|
|
652
798
|
}
|
|
799
|
+
|
|
653
800
|
(0, _createClass2["default"])(FilterSchemaV0, [{
|
|
654
801
|
key: "save",
|
|
655
802
|
value: function save(filters) {
|
|
656
803
|
var _this13 = this;
|
|
804
|
+
|
|
657
805
|
return {
|
|
658
806
|
filters: filters.filter(_filterUtils.isValidFilterValue).map(function (filter) {
|
|
659
807
|
return _this13.savePropertiesOrApplySchema(filter).filters;
|
|
@@ -670,19 +818,29 @@ var FilterSchemaV0 = exports.FilterSchemaV0 = /*#__PURE__*/function (_Schema14)
|
|
|
670
818
|
}]);
|
|
671
819
|
return FilterSchemaV0;
|
|
672
820
|
}(_schema["default"]);
|
|
821
|
+
|
|
822
|
+
exports.FilterSchemaV0 = FilterSchemaV0;
|
|
673
823
|
var interactionPropsV0 = ['tooltip', 'brush'];
|
|
824
|
+
|
|
674
825
|
var InteractionSchemaV0 = /*#__PURE__*/function (_Schema15) {
|
|
675
826
|
(0, _inherits2["default"])(InteractionSchemaV0, _Schema15);
|
|
827
|
+
|
|
828
|
+
var _super15 = _createSuper(InteractionSchemaV0);
|
|
829
|
+
|
|
676
830
|
function InteractionSchemaV0() {
|
|
677
831
|
var _this14;
|
|
832
|
+
|
|
678
833
|
(0, _classCallCheck2["default"])(this, InteractionSchemaV0);
|
|
834
|
+
|
|
679
835
|
for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
|
|
680
836
|
args[_key11] = arguments[_key11];
|
|
681
837
|
}
|
|
682
|
-
|
|
838
|
+
|
|
839
|
+
_this14 = _super15.call.apply(_super15, [this].concat(args));
|
|
683
840
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this14), "key", 'interactionConfig');
|
|
684
841
|
return _this14;
|
|
685
842
|
}
|
|
843
|
+
|
|
686
844
|
(0, _createClass2["default"])(InteractionSchemaV0, [{
|
|
687
845
|
key: "save",
|
|
688
846
|
value: function save(interactionConfig) {
|
|
@@ -704,19 +862,28 @@ var InteractionSchemaV0 = /*#__PURE__*/function (_Schema15) {
|
|
|
704
862
|
}]);
|
|
705
863
|
return InteractionSchemaV0;
|
|
706
864
|
}(_schema["default"]);
|
|
865
|
+
|
|
707
866
|
var interactionPropsV1 = [].concat(interactionPropsV0, ['geocoder', 'coordinate']);
|
|
708
|
-
|
|
867
|
+
|
|
868
|
+
var InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
|
|
709
869
|
(0, _inherits2["default"])(InteractionSchemaV1, _Schema16);
|
|
870
|
+
|
|
871
|
+
var _super16 = _createSuper(InteractionSchemaV1);
|
|
872
|
+
|
|
710
873
|
function InteractionSchemaV1() {
|
|
711
874
|
var _this15;
|
|
875
|
+
|
|
712
876
|
(0, _classCallCheck2["default"])(this, InteractionSchemaV1);
|
|
877
|
+
|
|
713
878
|
for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
|
|
714
879
|
args[_key12] = arguments[_key12];
|
|
715
880
|
}
|
|
716
|
-
|
|
881
|
+
|
|
882
|
+
_this15 = _super16.call.apply(_super16, [this].concat(args));
|
|
717
883
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this15), "key", 'interactionConfig');
|
|
718
884
|
return _this15;
|
|
719
885
|
}
|
|
886
|
+
|
|
720
887
|
(0, _createClass2["default"])(InteractionSchemaV1, [{
|
|
721
888
|
key: "save",
|
|
722
889
|
value: function save(interactionConfig) {
|
|
@@ -731,13 +898,16 @@ var InteractionSchemaV1 = exports.InteractionSchemaV1 = /*#__PURE__*/function (_
|
|
|
731
898
|
key: "load",
|
|
732
899
|
value: function load(interactionConfig) {
|
|
733
900
|
var _this16 = this;
|
|
901
|
+
|
|
734
902
|
var modifiedConfig = interactionConfig;
|
|
735
903
|
Object.keys(interactionConfig).forEach(function (configType) {
|
|
736
904
|
if (configType === 'tooltip') {
|
|
737
905
|
var fieldsToShow = modifiedConfig[configType].fieldsToShow;
|
|
906
|
+
|
|
738
907
|
if (!(0, _dataUtils.notNullorUndefined)(fieldsToShow)) {
|
|
739
908
|
return (0, _defineProperty2["default"])({}, _this16.key, modifiedConfig);
|
|
740
909
|
}
|
|
910
|
+
|
|
741
911
|
Object.keys(fieldsToShow).forEach(function (key) {
|
|
742
912
|
fieldsToShow[key] = fieldsToShow[key].map(function (fieldData) {
|
|
743
913
|
if (!fieldData.name) {
|
|
@@ -746,10 +916,12 @@ var InteractionSchemaV1 = exports.InteractionSchemaV1 = /*#__PURE__*/function (_
|
|
|
746
916
|
format: null
|
|
747
917
|
};
|
|
748
918
|
}
|
|
919
|
+
|
|
749
920
|
return fieldData;
|
|
750
921
|
});
|
|
751
922
|
});
|
|
752
923
|
}
|
|
924
|
+
|
|
753
925
|
return;
|
|
754
926
|
});
|
|
755
927
|
return (0, _defineProperty2["default"])({}, this.key, modifiedConfig);
|
|
@@ -757,7 +929,9 @@ var InteractionSchemaV1 = exports.InteractionSchemaV1 = /*#__PURE__*/function (_
|
|
|
757
929
|
}]);
|
|
758
930
|
return InteractionSchemaV1;
|
|
759
931
|
}(_schema["default"]);
|
|
760
|
-
|
|
932
|
+
|
|
933
|
+
exports.InteractionSchemaV1 = InteractionSchemaV1;
|
|
934
|
+
var filterPropsV0 = {
|
|
761
935
|
dataId: null,
|
|
762
936
|
id: null,
|
|
763
937
|
name: null,
|
|
@@ -765,12 +939,18 @@ var filterPropsV0 = exports.filterPropsV0 = {
|
|
|
765
939
|
value: null,
|
|
766
940
|
enlarged: null
|
|
767
941
|
};
|
|
768
|
-
|
|
942
|
+
exports.filterPropsV0 = filterPropsV0;
|
|
943
|
+
|
|
944
|
+
var DimensionFieldSchema = /*#__PURE__*/function (_Schema17) {
|
|
769
945
|
(0, _inherits2["default"])(DimensionFieldSchema, _Schema17);
|
|
946
|
+
|
|
947
|
+
var _super17 = _createSuper(DimensionFieldSchema);
|
|
948
|
+
|
|
770
949
|
function DimensionFieldSchema() {
|
|
771
950
|
(0, _classCallCheck2["default"])(this, DimensionFieldSchema);
|
|
772
|
-
return
|
|
951
|
+
return _super17.apply(this, arguments);
|
|
773
952
|
}
|
|
953
|
+
|
|
774
954
|
(0, _createClass2["default"])(DimensionFieldSchema, [{
|
|
775
955
|
key: "save",
|
|
776
956
|
value: function save(field) {
|
|
@@ -784,36 +964,46 @@ var DimensionFieldSchema = exports.DimensionFieldSchema = /*#__PURE__*/function
|
|
|
784
964
|
}]);
|
|
785
965
|
return DimensionFieldSchema;
|
|
786
966
|
}(_schema["default"]);
|
|
787
|
-
|
|
967
|
+
|
|
968
|
+
exports.DimensionFieldSchema = DimensionFieldSchema;
|
|
969
|
+
|
|
970
|
+
var SplitMapsSchema = /*#__PURE__*/function (_Schema18) {
|
|
788
971
|
(0, _inherits2["default"])(SplitMapsSchema, _Schema18);
|
|
972
|
+
|
|
973
|
+
var _super18 = _createSuper(SplitMapsSchema);
|
|
974
|
+
|
|
789
975
|
function SplitMapsSchema() {
|
|
790
976
|
(0, _classCallCheck2["default"])(this, SplitMapsSchema);
|
|
791
|
-
return
|
|
977
|
+
return _super18.apply(this, arguments);
|
|
792
978
|
}
|
|
979
|
+
|
|
793
980
|
(0, _createClass2["default"])(SplitMapsSchema, [{
|
|
794
981
|
key: "convertLayerSettings",
|
|
795
982
|
value: function convertLayerSettings(accu, _ref19) {
|
|
796
983
|
var _ref20 = (0, _slicedToArray2["default"])(_ref19, 2),
|
|
797
|
-
|
|
798
|
-
|
|
984
|
+
key = _ref20[0],
|
|
985
|
+
value = _ref20[1];
|
|
986
|
+
|
|
799
987
|
if (typeof value === 'boolean') {
|
|
800
988
|
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, value));
|
|
801
989
|
} else if (value && (0, _typeof2["default"])(value) === 'object' && value.isAvailable) {
|
|
802
990
|
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, Boolean(value.isVisible)));
|
|
803
991
|
}
|
|
992
|
+
|
|
804
993
|
return accu;
|
|
805
994
|
}
|
|
806
995
|
}, {
|
|
807
996
|
key: "load",
|
|
808
997
|
value: function load(splitMaps) {
|
|
809
998
|
var _this17 = this;
|
|
810
|
-
// previous splitMaps Schema {layers: {layerId: {isVisible, isAvailable}}}
|
|
811
999
|
|
|
1000
|
+
// previous splitMaps Schema {layers: {layerId: {isVisible, isAvailable}}}
|
|
812
1001
|
if (!Array.isArray(splitMaps) || !splitMaps.length) {
|
|
813
1002
|
return {
|
|
814
1003
|
splitMaps: []
|
|
815
1004
|
};
|
|
816
1005
|
}
|
|
1006
|
+
|
|
817
1007
|
return {
|
|
818
1008
|
splitMaps: splitMaps.map(function (settings) {
|
|
819
1009
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
@@ -825,7 +1015,10 @@ var SplitMapsSchema = exports.SplitMapsSchema = /*#__PURE__*/function (_Schema18
|
|
|
825
1015
|
}]);
|
|
826
1016
|
return SplitMapsSchema;
|
|
827
1017
|
}(_schema["default"]);
|
|
828
|
-
|
|
1018
|
+
|
|
1019
|
+
exports.SplitMapsSchema = SplitMapsSchema;
|
|
1020
|
+
|
|
1021
|
+
var filterPropsV1 = _objectSpread(_objectSpread({}, filterPropsV0), {}, {
|
|
829
1022
|
plotType: null,
|
|
830
1023
|
animationWindow: null,
|
|
831
1024
|
yAxis: new DimensionFieldSchema({
|
|
@@ -840,7 +1033,9 @@ var filterPropsV1 = exports.filterPropsV1 = _objectSpread(_objectSpread({}, filt
|
|
|
840
1033
|
layerId: null,
|
|
841
1034
|
speed: null
|
|
842
1035
|
});
|
|
843
|
-
|
|
1036
|
+
|
|
1037
|
+
exports.filterPropsV1 = filterPropsV1;
|
|
1038
|
+
var propertiesV0 = {
|
|
844
1039
|
filters: new FilterSchemaV0({
|
|
845
1040
|
version: _versions.VERSIONS.v0,
|
|
846
1041
|
properties: filterPropsV0
|
|
@@ -855,7 +1050,8 @@ var propertiesV0 = exports.propertiesV0 = {
|
|
|
855
1050
|
}),
|
|
856
1051
|
layerBlending: null
|
|
857
1052
|
};
|
|
858
|
-
|
|
1053
|
+
exports.propertiesV0 = propertiesV0;
|
|
1054
|
+
var propertiesV1 = {
|
|
859
1055
|
filters: new FilterSchemaV0({
|
|
860
1056
|
version: _versions.VERSIONS.v1,
|
|
861
1057
|
properties: filterPropsV1
|
|
@@ -882,25 +1078,29 @@ var propertiesV1 = exports.propertiesV1 = {
|
|
|
882
1078
|
key: 'animationConfig'
|
|
883
1079
|
})
|
|
884
1080
|
};
|
|
885
|
-
|
|
1081
|
+
exports.propertiesV1 = propertiesV1;
|
|
1082
|
+
var visStateSchemaV0 = new _schema["default"]({
|
|
886
1083
|
version: _versions.VERSIONS.v0,
|
|
887
1084
|
properties: propertiesV0,
|
|
888
1085
|
key: 'visState'
|
|
889
1086
|
});
|
|
890
|
-
|
|
1087
|
+
exports.visStateSchemaV0 = visStateSchemaV0;
|
|
1088
|
+
var visStateSchemaV1 = new _schema["default"]({
|
|
891
1089
|
version: _versions.VERSIONS.v1,
|
|
892
1090
|
properties: propertiesV1,
|
|
893
1091
|
key: 'visState'
|
|
894
1092
|
});
|
|
895
|
-
|
|
1093
|
+
exports.visStateSchemaV1 = visStateSchemaV1;
|
|
1094
|
+
var visStateSchema = (_visStateSchema = {}, (0, _defineProperty2["default"])(_visStateSchema, _versions.VERSIONS.v0, {
|
|
896
1095
|
save: function save(toSave) {
|
|
897
1096
|
return visStateSchemaV0.save(toSave);
|
|
898
1097
|
},
|
|
899
1098
|
load: function load(toLoad) {
|
|
900
1099
|
return visStateSchemaV1.load(visStateSchemaV0.load(toLoad).visState);
|
|
901
1100
|
}
|
|
902
|
-
}), _versions.VERSIONS.v1, visStateSchemaV1);
|
|
1101
|
+
}), (0, _defineProperty2["default"])(_visStateSchema, _versions.VERSIONS.v1, visStateSchemaV1), _visStateSchema); // test load v0
|
|
903
1102
|
|
|
904
|
-
|
|
905
|
-
var _default =
|
|
906
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGljayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3ZlcnNpb25zIiwiX2ZpbHRlclV0aWxzIiwiX2xheWVyRmFjdG9yeSIsIl9zY2hlbWEiLCJfY2xvbmVEZWVwIiwiX2RhdGFVdGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiZGltZW5zaW9uUHJvcHNWMCIsImV4cG9ydHMiLCJnZW9qc29uU2l6ZUZpZWxkVjBUb1YxIiwiY29uZmlnIiwiZGVmYXVsdFJhaXVkcyIsImRlZmF1bHRSYWRpdXNSYW5nZSIsInZpc0NvbmZpZyIsImV4dHJ1ZGVkIiwic3Ryb2tlZCIsInJhZGl1cyIsInJhZGl1c1JhbmdlIiwic29tZSIsImQiLCJpIiwiRGltZW5zaW9uRmllbGRTY2hlbWFWMCIsIl9TY2hlbWEiLCJfaW5oZXJpdHMyIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkMiIsIlZFUlNJT05TIiwidjAiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJzYXZlIiwiZmllbGQiLCJzYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJsb2FkIiwicGFyZW50cyIsImFjY3VtdWxhdGVkIiwiX3BhcmVudHMkc2xpY2UiLCJzbGljZSIsIl9wYXJlbnRzJHNsaWNlMiIsIl9zbGljZWRUb0FycmF5MiIsImZpZWxkTmFtZSIsInR5cGUiLCJ2aXN1YWxDaGFubmVscyIsIlNjaGVtYSIsIkRpbWVuc2lvblNjYWxlU2NoZW1hVjAiLCJfU2NoZW1hMiIsIl90aGlzMiIsIl9sZW4yIiwiX2tleTIiLCJzY2FsZSIsIl9wYXJlbnRzJHNsaWNlMyIsIl9wYXJlbnRzJHNsaWNlNCIsIkxheWVyQ29uZmlnU2NoZW1hVjAiLCJfU2NoZW1hMyIsIl90aGlzMyIsIl9sZW4zIiwiX2tleTMiLCJzYXZlZCIsIkxheWVyQ29sdW1uc1NjaGVtYVYwIiwiX1NjaGVtYTQiLCJfdGhpczQiLCJfbGVuNCIsIl9rZXk0IiwiY29sdW1ucyIsInJlZHVjZSIsImFjY3UiLCJMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAiLCJfU2NoZW1hNSIsIl90aGlzNSIsIl9sZW41IiwiX2tleTUiLCJhY2N1bXVsYXRlZENvbmZpZyIsIkxheWVyVmlzQ29uZmlnU2NoZW1hVjAiLCJfU2NoZW1hNiIsIl90aGlzNiIsIl9sZW42IiwiX2tleTYiLCJhY2N1bXVsYXRvciIsIl9wYXJlbnRzJHNsaWNlNSIsIl9wYXJlbnRzJHNsaWNlNiIsInJlbmFtZSIsImdlb2pzb24iLCJlbGV2YXRpb25SYW5nZSIsInByb3BUb1JlbmFtZSIsIkxheWVyQ29uZmlnU2NoZW1hRGVsZXRlVjAiLCJfU2NoZW1hNyIsIl90aGlzNyIsIl9sZW43IiwiX2tleTciLCJsYXllclByb3BzVjAiLCJpZCIsImRhdGFJZCIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Qnlab29tIiwiY29sb3JGaWVsZCIsInByb3BlcnRpZXMiLCJjb2xvclNjYWxlIiwic2l6ZUZpZWxkIiwic2l6ZVNjYWxlIiwiZW5hYmxlM2QiLCJjb2xvckFnZ3JlZ2F0aW9uIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiaXNBZ2dyZWdhdGVkIiwiQ29sdW1uU2NoZW1hVjEiLCJfU2NoZW1hOCIsInN0YXRlIiwiY2tleSIsIlRleHRMYWJlbFNjaGVtYVYxIiwiX1NjaGVtYTkiLCJ0ZXh0TGFiZWwiLCJtYXAiLCJ0bCIsInBpY2siLCJpc0FycmF5IiwidmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxIiwidmMiLCJfcGFyZW50cyRzbGljZTciLCJfcGFyZW50cyRzbGljZTgiLCJsYXllciIsImlzT2xkIiwiaGFzT3duUHJvcGVydHkiLCJpc1BvaW50IiwicmFkaXVzRmllbGQiLCJMQVlFUl9WSVNfQ09ORklHUyIsImRlZmF1bHRWYWx1ZSIsInN0cm9rZUNvbG9yRmllbGQiLCJzdHJva2VDb2xvclNjYWxlIiwiVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIiwiX1NjaGVtYTEwIiwiX3BhcmVudHMkc2xpY2U5IiwiX3BhcmVudHMkc2xpY2UxMCIsIl9wYXJlbnRzJHNsaWNlMTEiLCJfcGFyZW50cyRzbGljZTEyIiwibW9kaWZpZWQiLCJMZWdlbmRTZXR0aW5nc1YxIiwiX1NjaGVtYTExIiwibGVnZW5kU2V0dGluZ3MiLCJscyIsInZpc0NvbmZpZ01vZGlmaWNhdGlvblYxIiwicG9pbnQiLCJfcGFyZW50cyRzbGljZTEzIiwiX3BhcmVudHMkc2xpY2UxNCIsInN0cm9rZUNvbG9yIiwic3Ryb2tlQ29sb3JSYW5nZSIsImNsb25lRGVlcCIsImNvbG9yUmFuZ2UiLCJvdXRsaW5lIiwiZmlsbGVkIiwiX3BhcmVudHMkc2xpY2UxNSIsIl9wYXJlbnRzJHNsaWNlMTYiLCJWaXNDb25maWdTY2hlbWFWMSIsIl9TY2hlbWExMiIsIl90aGlzOCIsIl9sZW44IiwiX2tleTgiLCJfcGFyZW50cyRzbGljZTE3IiwiX3BhcmVudHMkc2xpY2UxOCIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImhpZ2hsaWdodENvbG9yIiwiTGF5ZXJTY2hlbWFWMCIsIl9TY2hlbWExMyIsIl90aGlzOSIsIl9sZW45IiwiX2tleTkiLCJsYXllcnMiLCJfdGhpczEwIiwiX3BhcmVudHMkc2xpY2UxOSIsIl9wYXJlbnRzJHNsaWNlMjAiLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJpbmRleCIsImlzVmFsaWRUb1NhdmUiLCJfdGhpczExIiwibG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwiRmlsdGVyU2NoZW1hVjAiLCJfU2NoZW1hMTQiLCJfdGhpczEyIiwiX2xlbjEwIiwiX2tleTEwIiwiZmlsdGVycyIsIl90aGlzMTMiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpbnRlcmFjdGlvblByb3BzVjAiLCJJbnRlcmFjdGlvblNjaGVtYVYwIiwiX1NjaGVtYTE1IiwiX3RoaXMxNCIsIl9sZW4xMSIsIl9rZXkxMSIsImludGVyYWN0aW9uQ29uZmlnIiwiZW5hYmxlZCIsImludGVyYWN0aW9uUHJvcHNWMSIsIkludGVyYWN0aW9uU2NoZW1hVjEiLCJfU2NoZW1hMTYiLCJfdGhpczE1IiwiX2xlbjEyIiwiX2tleTEyIiwiX3RoaXMxNiIsIm1vZGlmaWVkQ29uZmlnIiwiY29uZmlnVHlwZSIsImZpZWxkc1RvU2hvdyIsIm5vdE51bGxvclVuZGVmaW5lZCIsImZpZWxkRGF0YSIsIm5hbWUiLCJmb3JtYXQiLCJmaWx0ZXJQcm9wc1YwIiwiZW5sYXJnZWQiLCJEaW1lbnNpb25GaWVsZFNjaGVtYSIsIl9TY2hlbWExNyIsIlNwbGl0TWFwc1NjaGVtYSIsIl9TY2hlbWExOCIsImNvbnZlcnRMYXllclNldHRpbmdzIiwiX3JlZjE5IiwiX3JlZjIwIiwiX3R5cGVvZjIiLCJpc0F2YWlsYWJsZSIsInNwbGl0TWFwcyIsIl90aGlzMTciLCJzZXR0aW5ncyIsImVudHJpZXMiLCJmaWx0ZXJQcm9wc1YxIiwicGxvdFR5cGUiLCJhbmltYXRpb25XaW5kb3ciLCJ5QXhpcyIsImxheWVySWQiLCJzcGVlZCIsInByb3BlcnRpZXNWMCIsImxheWVyQmxlbmRpbmciLCJwcm9wZXJ0aWVzVjEiLCJhbmltYXRpb25Db25maWciLCJjdXJyZW50VGltZSIsInZpc1N0YXRlU2NoZW1hVjAiLCJ2aXNTdGF0ZVNjaGVtYVYxIiwidmlzU3RhdGVTY2hlbWEiLCJ0b1NhdmUiLCJ0b0xvYWQiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHtWRVJTSU9OU30gZnJvbSAnLi92ZXJzaW9ucyc7XG5pbXBvcnQge2lzVmFsaWRGaWx0ZXJWYWx1ZX0gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7TEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCBTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcblxuLyoqXG4gKiBWMCBTY2hlbWFcbiAqL1xuXG5leHBvcnQgY29uc3QgZGltZW5zaW9uUHJvcHNWMCA9IFsnbmFtZScsICd0eXBlJ107XG5cbi8vIGluIHYwIGdlb2pzb24gdGhlcmUgaXMgb25seSBzaXplRmllbGRcblxuLy8gaW4gdjEgZ2VvanNvblxuLy8gc3Ryb2tlIGJhc2Ugb24gLT4gc2l6ZUZpZWxkXG4vLyBoZWlnaHQgYmFzZWQgb24gLT4gaGVpZ2h0RmllbGRcbi8vIHJhZGl1cyBiYXNlZCBvbiAtPiByYWRpdXNGaWVsZFxuLy8gaGVyZSB3ZSBtYWtlIG91ciB3aXJlZHN0IGd1ZXNzIG9uIHdoaWNoIGNoYW5uZWwgc2l6ZUZpZWxkIGJlbG9uZ3MgdG9cbmZ1bmN0aW9uIGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKSB7XG4gIGNvbnN0IGRlZmF1bHRSYWl1ZHMgPSAxMDtcbiAgY29uc3QgZGVmYXVsdFJhZGl1c1JhbmdlID0gWzAsIDUwXTtcblxuICAvLyBpZiBleHRydWRlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIGhlaWdodFxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5leHRydWRlZCkge1xuICAgIHJldHVybiAnaGVpZ2h0RmllbGQnO1xuICB9XG5cbiAgLy8gaWYgc2hvdyBzdHJva2UgZW5hYmxlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIHN0cm9rZVxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkKSB7XG4gICAgcmV0dXJuICdzaXplRmllbGQnO1xuICB9XG5cbiAgLy8gaWYgcmFkaXVzIGNoYW5nZWQsIG9yIHJhZGl1cyBSYW5nZSBDaGFuZ2VkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgcmFkaXVzXG4gIC8vIHRoaXMgaXMgdGhlIG1vc3QgdW5yZWxpYWJsZSBndWVzcywgdGhhdCdzIHdoeSB3ZSBwdXQgaXQgaW4gdGhlIGVuZFxuICBpZiAoXG4gICAgY29uZmlnLnZpc0NvbmZpZy5yYWRpdXMgIT09IGRlZmF1bHRSYWl1ZHMgfHxcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1c1JhbmdlLnNvbWUoKGQsIGkpID0+IGQgIT09IGRlZmF1bHRSYWRpdXNSYW5nZVtpXSlcbiAgKSB7XG4gICAgcmV0dXJuICdyYWRpdXNGaWVsZCc7XG4gIH1cblxuICByZXR1cm4gJ3NpemVGaWVsZCc7XG59XG5cbi8vIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnXG5jbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBzYXZlKGZpZWxkKSB7XG4gICAgLy8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYW55bW9yZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCAhPT0gbnVsbCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBsZXQgZmllbGROYW1lID0gdGhpcy5rZXk7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicgJiYgdGhpcy5rZXkgPT09ICdzaXplRmllbGQnICYmIGZpZWxkKSB7XG4gICAgICBmaWVsZE5hbWUgPSBnZW9qc29uU2l6ZUZpZWxkVjBUb1YxKGNvbmZpZyk7XG4gICAgfVxuICAgIC8vIGZvbGQgaW50byB2aXN1YWxDaGFubmVscyB0byBiZSBsb2FkIGJ5IFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIERpbWVuc2lvblNjYWxlU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoc2NhbGUpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IHNjYWxlfTtcbiAgfVxuICBsb2FkKHNjYWxlLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgaWYgKHRoaXMua2V5ID09PSAnc2l6ZVNjYWxlJyAmJiBjb25maWcudHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAvLyBzaXplU2NhbGUgbm93IHNwbGl0IGludG8gcmFkaXVzU2NhbGUsIGhlaWdodFNjYWxlXG4gICAgICAvLyBubyB1c2VyIGN1c3RvbWl6YXRpb24sIGp1c3QgdXNlIGRlZmF1bHRcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsQ2hhbm5lbHM6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLnZpc3VhbENoYW5uZWxzIHx8IHt9KSxcbiAgICAgICAgW3RoaXMua2V5XTogc2NhbGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIExheWVyQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXlcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbHVtbnNcbi8vIG9ubHkgcmV0dXJuIGNvbHVtbiB2YWx1ZSBmb3IgZWFjaCBjb2x1bW5cbmNsYXNzIExheWVyQ29sdW1uc1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcua2V5LCBmbGF0dGVuIGNvbHVtbnNcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBjb2x1bW5zOiBPYmplY3Qua2V5cyhzYXZlZCkucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2tleV06IHNhdmVkW2tleV0udmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnLnZpc0NvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcudmlzQ29uZmlnXG4gICAgY29uc3QgYWNjdW11bGF0ZWRDb25maWcgPSBhY2N1bXVsYXRlZC5jb25maWcgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5hY2N1bXVsYXRlZENvbmZpZyxcbiAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdGVkQ29uZmlnLnZpc0NvbmZpZyB8fCB7fSksXG4gICAgICAgICAgW3RoaXMua2V5XTogc2F2ZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCByZW5hbWUgPSB7XG4gICAgICBnZW9qc29uOiB7XG4gICAgICAgIGV4dHJ1ZGVkOiAnZW5hYmxlM2QnLFxuICAgICAgICBlbGV2YXRpb25SYW5nZTogJ2hlaWdodFJhbmdlJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnR5cGUgaW4gcmVuYW1lKSB7XG4gICAgICBjb25zdCBwcm9wVG9SZW5hbWUgPSByZW5hbWVbY29uZmlnLnR5cGVdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgICAgdmlzQ29uZmlnOiBPYmplY3Qua2V5cyh2aXNDb25maWcpLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihwcm9wVG9SZW5hbWVba2V5XVxuICAgICAgICAgICAgICAgID8ge1twcm9wVG9SZW5hbWVba2V5XV06IHZpc0NvbmZpZ1trZXldfVxuICAgICAgICAgICAgICAgIDoge1trZXldOiB2aXNDb25maWdba2V5XX0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIHZpc0NvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZCh2YWx1ZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFYwIC0+IFYxIENoYW5nZXNcbiAqIC0gbGF5ZXIgaXMgbm93IGEgY2xhc3NcbiAqIC0gY29uZmlnIHNhdmVkIGluIGEgY29uZmlnIG9iamVjdFxuICogLSBpZCwgdHlwZSwgaXNBZ2dyZWdhdGVkIGlzIG91dHNpZGUgbGF5ZXIuY29uZmlnXG4gKiAtIHZpc3VhbENoYW5uZWxzIGlzIG91dHNpZGUgY29uZmlnLCBpdCBkZWZpbmVzIGF2YWlsYWJsZSB2aXN1YWwgY2hhbm5lbCBhbmRcbiAqICAgcHJvcGVydHkgbmFtZXMgZm9yIGZpZWxkLCBzY2FsZSwgZG9tYWluIGFuZCByYW5nZSBvZiBlYWNoIHZpc3VhbCBjaGFuZWwuXG4gKiAtIGVuYWJsZTNkLCBjb2xvckFnZ3JlZ2F0aW9uIGFuZCBzaXplQWdncmVnYXRpb24gYXJlIG1vdmVkIGludG8gdmlzQ29uZmlnXG4gKiAtIEdlb2pzb25MYXllciAtIGFkZGVkIGhlaWdodCwgcmFkaXVzIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YwID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIGRhdGFJZDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2RhdGFJZCd9KSxcbiAgbGFiZWw6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdsYWJlbCd9KSxcbiAgY29sb3I6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdjb2xvcid9KSxcbiAgaXNWaXNpYmxlOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnaXNWaXNpYmxlJ30pLFxuICBoaWRkZW46IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdoaWRkZW4nfSksXG4gIHZpc2liaWxpdHlCeVpvb206IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICd2aXNpYmlsaXR5Qnlab29tJ30pLFxuXG4gIC8vIGNvbnZlcnQgdmlzQ29uZmlnXG4gIHZpc0NvbmZpZzogbmV3IExheWVyVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc0NvbmZpZyd9KSxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIC8vIGZsYXR0ZW5cbiAgY29sdW1uczogbmV3IExheWVyQ29sdW1uc1NjaGVtYVYwKCksXG5cbiAgLy8gc2F2ZSBpbnRvIHZpc3VhbENoYW5uZWxzXG4gIGNvbG9yRmllbGQ6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwKHtcbiAgICBwcm9wZXJ0aWVzOiBkaW1lbnNpb25Qcm9wc1YwLFxuICAgIGtleTogJ2NvbG9yRmllbGQnXG4gIH0pLFxuICBjb2xvclNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JTY2FsZSdcbiAgfSksXG4gIHNpemVGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnc2l6ZUZpZWxkJ1xuICB9KSxcbiAgc2l6ZVNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnc2l6ZVNjYWxlJ1xuICB9KSxcblxuICAvLyBtb3ZlIGludG8gY29uZmlnLnZpc0NvbmZpZ1xuICBlbmFibGUzZDogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnZW5hYmxlM2QnfSksXG4gIGNvbG9yQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe1xuICAgIGtleTogJ2NvbG9yQWdncmVnYXRpb24nXG4gIH0pLFxuICBzaXplQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3NpemVBZ2dyZWdhdGlvbid9KSxcblxuICAvLyBkZWxldGVcbiAgaXNBZ2dyZWdhdGVkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCgpXG59O1xuXG4vKipcbiAqIFYxIFNjaGVtYVxuICovXG5jbGFzcyBDb2x1bW5TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoY29sdW1ucywgc3RhdGUpIHtcbiAgICAvLyBzdGFydGluZyBmcm9tIHYxLCBvbmx5IHNhdmUgY29sdW1uIHZhbHVlXG4gICAgLy8gZmllbGRJZHggd2lsbCBiZSBjYWxjdWxhdGVkIGR1cmluZyBtZXJnZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhjb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCBja2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2NrZXldOiBjb2x1bW5zW2NrZXldLnZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGNvbHVtbnMpIHtcbiAgICByZXR1cm4ge2NvbHVtbnN9O1xuICB9XG59XG5cbmNsYXNzIFRleHRMYWJlbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdGV4dExhYmVsLm1hcCh0bCA9PiAoe1xuICAgICAgICAuLi50bCxcbiAgICAgICAgZmllbGQ6IHRsLmZpZWxkID8gcGljayh0bC5maWVsZCwgWyduYW1lJywgJ3R5cGUnXSkgOiBudWxsXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZCh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge3RleHRMYWJlbDogQXJyYXkuaXNBcnJheSh0ZXh0TGFiZWwpID8gdGV4dExhYmVsIDogW3RleHRMYWJlbF19O1xuICB9XG59XG5cbmNvbnN0IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSA9IHtcbiAgZ2VvanNvbjogKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikgPT4ge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCBpc09sZCA9ICF2Yy5oYXNPd25Qcm9wZXJ0eSgnc3Ryb2tlQ29sb3JGaWVsZCcpO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICB2Yy5yYWRpdXNGaWVsZCB8fCBsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gTEFZRVJfVklTX0NPTkZJR1MucmFkaXVzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChpc09sZCAmJiAhaXNQb2ludCAmJiBsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICAgIC8vIGlmIHN0cm9rZWQgaXMgdHJ1ZSwgY29weSBjb2xvciBjb25maWcgdG8gc3Ryb2tlIGNvbG9yIGNvbmZpZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogdmMuY29sb3JGaWVsZCxcbiAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdmMuY29sb3JTY2FsZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuLyoqXG4gKiBWMTogc2F2ZSBbZmllbGRdOiB7bmFtZSwgdHlwZX0sIFtzY2FsZV06ICcnIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuY2xhc3MgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh2aXN1YWxDaGFubmVscywgcGFyZW50cykge1xuICAgIC8vIG9ubHkgc2F2ZSBmaWVsZCBhbmQgc2NhbGUgb2YgZWFjaCBjaGFubmVsXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyh2aXN1YWxDaGFubmVscykucmVkdWNlKFxuICAgICAgICAvLyAgc2F2ZSBjaGFubmVsIHRvIG51bGwgaWYgZGlkbid0IHNlbGVjdCBhbnkgZmllbGRcbiAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgICAgICA/IHBpY2sobGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLCBbJ25hbWUnLCAndHlwZScsICdjb2xvckNvbHVtbiddKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLnNjYWxlXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cbiAgbG9hZCh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICAvLyBmb2xkIGNoYW5uZWxzIGludG8gY29uZmlnXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICAuLi52YyxcbiAgICAgICAgLi4ubW9kaWZpZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4vKipcbiAqIFYxOiBzYXZlIFtjaGFubmVsXTogW3sgbGFiZWwsIGNvbG9yIH0sIC4uLl0gZm9yIGxlZ2VuZFxuICovXG5jbGFzcyBMZWdlbmRTZXR0aW5nc1YxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShsZWdlbmRTZXR0aW5ncywgcGFyZW50cykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhsZWdlbmRTZXR0aW5ncykucmVkdWNlKChhY2N1LCBrZXkpID0+IHtcbiAgICAgICAgYWNjdVtrZXldID0gbGVnZW5kU2V0dGluZ3Nba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCB7fSlcbiAgICB9O1xuICB9XG4gIGxvYWQobHMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgW3RoaXMua2V5XTogbHNcbiAgICB9O1xuICB9XG59XG5jb25zdCB2aXNDb25maWdNb2RpZmljYXRpb25WMSA9IHtcbiAgcG9pbnQ6ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgICF2aXNDb25maWcuaGFzT3duUHJvcGVydHkoJ2ZpbGxlZCcpICYmICF2aXNDb25maWcuc3Ryb2tlQ29sb3IgJiYgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIGlmIChpc09sZCkge1xuICAgICAgLy8gY29sb3IgY29sb3IgJiBjb2xvciByYW5nZSB0byBzdHJva2UgY29sb3JcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yID0gbGF5ZXIuY29uZmlnLmNvbG9yO1xuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3JSYW5nZSA9IGNsb25lRGVlcCh2aXNDb25maWcuY29sb3JSYW5nZSk7XG4gICAgICBpZiAodmlzQ29uZmlnLm91dGxpbmUpIHtcbiAgICAgICAgLy8gcG9pbnQgbGF5ZXIgbm93IHN1cHBvcnRzIGJvdGggb3V0bGluZSBhbmQgZmlsbFxuICAgICAgICAvLyBmb3Igb2xkZXIgc2NoZW1hIHdoZXJlIGZpbGxlZCBoYXMgbm90IGJlZW4gYWRkZWQgdG8gcG9pbnQgbGF5ZXJcbiAgICAgICAgLy8gc2V0IGl0IHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZDtcbiAgfSxcbiAgZ2VvanNvbjogKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpID0+IHtcbiAgICAvLyBpcyBwb2ludHM/XG4gICAgY29uc3QgbW9kaWZpZWQgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgIGxheWVyLnZpc3VhbENoYW5uZWxzICYmXG4gICAgICAhbGF5ZXIudmlzdWFsQ2hhbm5lbHMuaGFzT3duUHJvcGVydHkoJ3N0cm9rZUNvbG9yRmllbGQnKSAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICAobGF5ZXIudmlzdWFsQ2hhbm5lbHMgJiYgbGF5ZXIudmlzdWFsQ2hhbm5lbHMucmFkaXVzRmllbGQpIHx8XG4gICAgICAodmlzQ29uZmlnICYmIHZpc0NvbmZpZy5yYWRpdXMgIT09IExBWUVSX1ZJU19DT05GSUdTLnJhZGl1cy5kZWZhdWx0VmFsdWUpO1xuXG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmIChpc1BvaW50KSB7XG4gICAgICAgIC8vIGlmIGlzIHBvaW50LCBzZXQgc3Ryb2tlIHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IHRydWU7XG4gICAgICAgIG1vZGlmaWVkLnN0cm9rZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH1cbn07XG5cbmNsYXNzIFZpc0NvbmZpZ1NjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBtb2RpZmllZCA9IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAuLi52aXNDb25maWcsXG4gICAgICAgIC4uLm1vZGlmaWVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YxID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgY29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICdjb25maWcnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGRhdGFJZDogbnVsbCxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgY29sb3I6IG51bGwsXG4gICAgICBoaWdobGlnaHRDb2xvcjogbnVsbCxcbiAgICAgIGNvbHVtbnM6IG5ldyBDb2x1bW5TY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICdjb2x1bW5zJ1xuICAgICAgfSksXG4gICAgICBpc1Zpc2libGU6IG51bGwsXG4gICAgICB2aXNDb25maWc6IG5ldyBWaXNDb25maWdTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gICAgICB9KSxcbiAgICAgIGhpZGRlbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IG51bGwsXG4gICAgICB0ZXh0TGFiZWw6IG5ldyBUZXh0TGFiZWxTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICd0ZXh0TGFiZWwnXG4gICAgICB9KVxuICAgIH1cbiAgfSksXG4gIGxlZ2VuZFNldHRpbmdzOiBuZXcgTGVnZW5kU2V0dGluZ3NWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAnbGVnZW5kU2V0dGluZ3MnXG4gIH0pLFxuICB2aXN1YWxDaGFubmVsczogbmV3IFZpc3VhbENoYW5uZWxTY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAndmlzdWFsQ2hhbm5lbHMnXG4gIH0pXG59O1xuXG5leHBvcnQgY2xhc3MgTGF5ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdsYXllcnMnO1xuXG4gIHNhdmUobGF5ZXJzLCBwYXJlbnRzKSB7XG4gICAgY29uc3QgW3Zpc1N0YXRlXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IHZpc1N0YXRlLmxheWVyT3JkZXIucmVkdWNlKChzYXZlZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gc2F2ZSBsYXllcnMgYWNjb3JkaW5nIHRvIHRoZWlyIHJlbmRlcmluZyBvcmRlclxuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpbmRleF07XG4gICAgICAgIGlmIChsYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgICAgICBzYXZlZC5wdXNoKHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyKS5sYXllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH0sIFtdKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGxheWVycykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBsYXllcnMubWFwKGxheWVyID0+IHRoaXMubG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyLCBsYXllcnMpLmxheWVycylcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdmaWx0ZXJzJztcbiAgc2F2ZShmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnNcbiAgICAgICAgLmZpbHRlcihpc1ZhbGlkRmlsdGVyVmFsdWUpXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpbHRlcikuZmlsdGVycylcbiAgICB9O1xuICB9XG4gIGxvYWQoZmlsdGVycykge1xuICAgIHJldHVybiB7ZmlsdGVyc307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YwID0gWyd0b29sdGlwJywgJ2JydXNoJ107XG5cbmNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4uKGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZCA/IHtba2V5XTogaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWd9IDoge30pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBjb252ZXJ0IHYwIC0+IHYxXG4gICAgLy8gcmV0dXJuIGVuYWJsZWQ6IGZhbHNlIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZ1trZXldIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oaW50ZXJhY3Rpb25Db25maWdba2V5XSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YxID0gWy4uLmludGVyYWN0aW9uUHJvcHNWMCwgJ2dlb2NvZGVyJywgJ2Nvb3JkaW5hdGUnXTtcblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBzYXZlIGNvbmZpZyBldmVuIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICBjb25zdCBtb2RpZmllZENvbmZpZyA9IGludGVyYWN0aW9uQ29uZmlnO1xuICAgIE9iamVjdC5rZXlzKGludGVyYWN0aW9uQ29uZmlnKS5mb3JFYWNoKGNvbmZpZ1R5cGUgPT4ge1xuICAgICAgaWYgKGNvbmZpZ1R5cGUgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1Nob3cgPSBtb2RpZmllZENvbmZpZ1tjb25maWdUeXBlXS5maWVsZHNUb1Nob3c7XG4gICAgICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGZpZWxkc1RvU2hvdykpIHtcbiAgICAgICAgICByZXR1cm4ge1t0aGlzLmtleV06IG1vZGlmaWVkQ29uZmlnfTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNUb1Nob3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3dba2V5XSA9IGZpZWxkc1RvU2hvd1trZXldLm1hcChmaWVsZERhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZERhdGEubmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkRGF0YSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IG51bGxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWVsZERhdGE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHJldHVybiB7W3RoaXMua2V5XTogbW9kaWZpZWRDb25maWd9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJQcm9wc1YwID0ge1xuICBkYXRhSWQ6IG51bGwsXG4gIGlkOiBudWxsLFxuICBuYW1lOiBudWxsLFxuICB0eXBlOiBudWxsLFxuICB2YWx1ZTogbnVsbCxcbiAgZW5sYXJnZWQ6IG51bGxcbn07XG5cbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoZmllbGQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogZmllbGQgPyB0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShmaWVsZClbdGhpcy5rZXldIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBsb2FkKGZpZWxkKSB7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBmaWVsZH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNwbGl0TWFwc1NjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIGNvbnZlcnRMYXllclNldHRpbmdzKGFjY3UsIFtrZXksIHZhbHVlXSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IHZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IEJvb2xlYW4odmFsdWUuaXNWaXNpYmxlKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH1cblxuICBsb2FkKHNwbGl0TWFwcykge1xuICAgIC8vIHByZXZpb3VzIHNwbGl0TWFwcyBTY2hlbWEge2xheWVyczoge2xheWVySWQ6IHtpc1Zpc2libGUsIGlzQXZhaWxhYmxlfX19XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3BsaXRNYXBzKSB8fCAhc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtzcGxpdE1hcHM6IFtdfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKHNldHRpbmdzID0+ICh7XG4gICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICBsYXllcnM6IE9iamVjdC5lbnRyaWVzKHNldHRpbmdzLmxheWVycyB8fCB7fSkucmVkdWNlKHRoaXMuY29udmVydExheWVyU2V0dGluZ3MsIHt9KVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyUHJvcHNWMSA9IHtcbiAgLi4uZmlsdGVyUHJvcHNWMCxcbiAgcGxvdFR5cGU6IG51bGwsXG4gIGFuaW1hdGlvbldpbmRvdzogbnVsbCxcbiAgeUF4aXM6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAneUF4aXMnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG5hbWU6IG51bGwsXG4gICAgICB0eXBlOiBudWxsXG4gICAgfVxuICB9KSxcblxuICAvLyBwb2x5Z29uIGZpbHRlciBwcm9wZXJ0aWVzXG4gIGxheWVySWQ6IG51bGwsXG4gIHNwZWVkOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydGllc1YwID0ge1xuICBmaWx0ZXJzOiBuZXcgRmlsdGVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGZpbHRlclByb3BzVjBcbiAgfSksXG4gIGxheWVyczogbmV3IExheWVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGxheWVyUHJvcHNWMFxuICB9KSxcbiAgaW50ZXJhY3Rpb25Db25maWc6IG5ldyBJbnRlcmFjdGlvblNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBpbnRlcmFjdGlvblByb3BzVjBcbiAgfSksXG4gIGxheWVyQmxlbmRpbmc6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjEgPSB7XG4gIGZpbHRlcnM6IG5ldyBGaWx0ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogZmlsdGVyUHJvcHNWMVxuICB9KSxcbiAgbGF5ZXJzOiBuZXcgTGF5ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogbGF5ZXJQcm9wc1YxXG4gIH0pLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogbmV3IEludGVyYWN0aW9uU2NoZW1hVjEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGludGVyYWN0aW9uUHJvcHNWMVxuICB9KSxcbiAgbGF5ZXJCbGVuZGluZzogbnVsbCxcbiAgc3BsaXRNYXBzOiBuZXcgU3BsaXRNYXBzU2NoZW1hKHtcbiAgICBrZXk6ICdzcGxpdE1hcHMnLFxuICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gIH0pLFxuICBhbmltYXRpb25Db25maWc6IG5ldyBTY2hlbWEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGN1cnJlbnRUaW1lOiBudWxsLFxuICAgICAgc3BlZWQ6IG51bGxcbiAgICB9LFxuICAgIGtleTogJ2FuaW1hdGlvbkNvbmZpZydcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYVYwID0gbmV3IFNjaGVtYSh7XG4gIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjAsXG4gIGtleTogJ3Zpc1N0YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYVYxID0gbmV3IFNjaGVtYSh7XG4gIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjEsXG4gIGtleTogJ3Zpc1N0YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCB2aXNTdGF0ZVNjaGVtYSA9IHtcbiAgW1ZFUlNJT05TLnYwXToge1xuICAgIHNhdmU6IHRvU2F2ZSA9PiB2aXNTdGF0ZVNjaGVtYVYwLnNhdmUodG9TYXZlKSxcbiAgICBsb2FkOiB0b0xvYWQgPT4gdmlzU3RhdGVTY2hlbWFWMS5sb2FkKHZpc1N0YXRlU2NoZW1hVjAubG9hZCh0b0xvYWQpLnZpc1N0YXRlKVxuICB9LFxuICBbVkVSU0lPTlMudjFdOiB2aXNTdGF0ZVNjaGVtYVYxXG59O1xuXG4vLyB0ZXN0IGxvYWQgdjBcbmV4cG9ydCBkZWZhdWx0IHZpc1N0YXRlU2NoZW1hO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGFB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
|
|
1103
|
+
exports.visStateSchema = visStateSchema;
|
|
1104
|
+
var _default = visStateSchema;
|
|
1105
|
+
exports["default"] = _default;
|
|
1106
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEudHMiXSwibmFtZXMiOlsiZGltZW5zaW9uUHJvcHNWMCIsImdlb2pzb25TaXplRmllbGRWMFRvVjEiLCJjb25maWciLCJkZWZhdWx0UmFpdWRzIiwiZGVmYXVsdFJhZGl1c1JhbmdlIiwidmlzQ29uZmlnIiwiZXh0cnVkZWQiLCJzdHJva2VkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzb21lIiwiZCIsImkiLCJEaW1lbnNpb25GaWVsZFNjaGVtYVYwIiwiVkVSU0lPTlMiLCJ2MCIsImZpZWxkIiwia2V5Iiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwicGFyZW50cyIsImFjY3VtdWxhdGVkIiwic2xpY2UiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwic2NhbGUiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwic2F2ZWQiLCJMYXllckNvbHVtbnNTY2hlbWFWMCIsImNvbHVtbnMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjdSIsInZhbHVlIiwiTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0ZWRDb25maWciLCJMYXllclZpc0NvbmZpZ1NjaGVtYVYwIiwiYWNjdW11bGF0b3IiLCJyZW5hbWUiLCJnZW9qc29uIiwiZWxldmF0aW9uUmFuZ2UiLCJwcm9wVG9SZW5hbWUiLCJMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIiwibGF5ZXJQcm9wc1YwIiwiaWQiLCJkYXRhSWQiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwidmlzaWJpbGl0eUJ5Wm9vbSIsImNvbG9yRmllbGQiLCJwcm9wZXJ0aWVzIiwiY29sb3JTY2FsZSIsInNpemVGaWVsZCIsInNpemVTY2FsZSIsImVuYWJsZTNkIiwiY29sb3JBZ2dyZWdhdGlvbiIsInNpemVBZ2dyZWdhdGlvbiIsImlzQWdncmVnYXRlZCIsIkNvbHVtblNjaGVtYVYxIiwic3RhdGUiLCJja2V5IiwiVGV4dExhYmVsU2NoZW1hVjEiLCJ0ZXh0TGFiZWwiLCJtYXAiLCJ0bCIsIkFycmF5IiwiaXNBcnJheSIsInZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSIsInZjIiwibGF5ZXIiLCJpc09sZCIsImhhc093blByb3BlcnR5IiwiaXNQb2ludCIsInJhZGl1c0ZpZWxkIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JTY2FsZSIsIlZpc3VhbENoYW5uZWxTY2hlbWFWMSIsIm1vZGlmaWVkIiwiTGVnZW5kU2V0dGluZ3NWMSIsImxlZ2VuZFNldHRpbmdzIiwibHMiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInBvaW50Iiwic3Ryb2tlQ29sb3IiLCJzdHJva2VDb2xvclJhbmdlIiwiY29sb3JSYW5nZSIsIm91dGxpbmUiLCJmaWxsZWQiLCJWaXNDb25maWdTY2hlbWFWMSIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImhpZ2hsaWdodENvbG9yIiwiTGF5ZXJTY2hlbWFWMCIsImxheWVycyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsImluZGV4IiwiaXNWYWxpZFRvU2F2ZSIsInB1c2giLCJsb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJGaWx0ZXJTY2hlbWFWMCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpbnRlcmFjdGlvblByb3BzVjAiLCJJbnRlcmFjdGlvblNjaGVtYVYwIiwiaW50ZXJhY3Rpb25Db25maWciLCJlbmFibGVkIiwiQm9vbGVhbiIsImludGVyYWN0aW9uUHJvcHNWMSIsIkludGVyYWN0aW9uU2NoZW1hVjEiLCJtb2RpZmllZENvbmZpZyIsImZvckVhY2giLCJjb25maWdUeXBlIiwiZmllbGRzVG9TaG93IiwiZmllbGREYXRhIiwibmFtZSIsImZvcm1hdCIsImZpbHRlclByb3BzVjAiLCJlbmxhcmdlZCIsIkRpbWVuc2lvbkZpZWxkU2NoZW1hIiwiU3BsaXRNYXBzU2NoZW1hIiwiaXNBdmFpbGFibGUiLCJzcGxpdE1hcHMiLCJsZW5ndGgiLCJzZXR0aW5ncyIsImVudHJpZXMiLCJjb252ZXJ0TGF5ZXJTZXR0aW5ncyIsImZpbHRlclByb3BzVjEiLCJwbG90VHlwZSIsImFuaW1hdGlvbldpbmRvdyIsInlBeGlzIiwibGF5ZXJJZCIsInNwZWVkIiwicHJvcGVydGllc1YwIiwibGF5ZXJCbGVuZGluZyIsInByb3BlcnRpZXNWMSIsImFuaW1hdGlvbkNvbmZpZyIsImN1cnJlbnRUaW1lIiwidmlzU3RhdGVTY2hlbWFWMCIsInZpc1N0YXRlU2NoZW1hVjEiLCJ2aXNTdGF0ZVNjaGVtYSIsInNhdmUiLCJ0b1NhdmUiLCJsb2FkIiwidG9Mb2FkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUVPLElBQU1BLGdCQUFnQixHQUFHLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBekI7OztBQVNQO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLHNCQUFULENBQWdDQyxNQUFoQyxFQUF3QztBQUN0QyxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUFDLENBQUQsRUFBSSxFQUFKLENBQTNCLENBRnNDLENBSXRDOztBQUNBLE1BQUlGLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkMsUUFBckIsRUFBK0I7QUFDN0IsV0FBTyxhQUFQO0FBQ0QsR0FQcUMsQ0FTdEM7OztBQUNBLE1BQUlKLE1BQU0sQ0FBQ0csU0FBUCxDQUFpQkUsT0FBckIsRUFBOEI7QUFDNUIsV0FBTyxXQUFQO0FBQ0QsR0FacUMsQ0FjdEM7QUFDQTs7O0FBQ0EsTUFDRUwsTUFBTSxDQUFDRyxTQUFQLENBQWlCRyxNQUFqQixLQUE0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QUFHLElBQUkxSCxrQkFBSixDQUFXO0FBQ3pDd0UsRUFBQUEsT0FBTyxFQUFFbkYsbUJBQVNDLEVBRHVCO0FBRXpDd0MsRUFBQUEsVUFBVSxFQUFFdUYsWUFGNkI7QUFHekM3SCxFQUFBQSxHQUFHLEVBQUU7QUFIb0MsQ0FBWCxDQUF6Qjs7QUFNQSxJQUFNbUksZ0JBQWdCLEdBQUcsSUFBSTNILGtCQUFKLENBQVc7QUFDekN3RSxFQUFBQSxPQUFPLEVBQUVuRixtQkFBU29GLEVBRHVCO0FBRXpDM0MsRUFBQUEsVUFBVSxFQUFFeUYsWUFGNkI7QUFHekMvSCxFQUFBQSxHQUFHLEVBQUU7QUFIb0MsQ0FBWCxDQUF6Qjs7QUFNQSxJQUFNb0ksY0FBYyw0RUFDeEJ2SSxtQkFBU0MsRUFEZSxFQUNWO0FBQ2J1SSxFQUFBQSxJQUFJLEVBQUUsY0FBQUMsTUFBTTtBQUFBLFdBQUlKLGdCQUFnQixDQUFDRyxJQUFqQixDQUFzQkMsTUFBdEIsQ0FBSjtBQUFBLEdBREM7QUFFYkMsRUFBQUEsSUFBSSxFQUFFLGNBQUFDLE1BQU07QUFBQSxXQUFJTCxnQkFBZ0IsQ0FBQ0ksSUFBakIsQ0FBc0JMLGdCQUFnQixDQUFDSyxJQUFqQixDQUFzQkMsTUFBdEIsRUFBOEJuRCxRQUFwRCxDQUFKO0FBQUE7QUFGQyxDQURVLHFEQUt4QnhGLG1CQUFTb0YsRUFMZSxFQUtWa0QsZ0JBTFUsbUJBQXBCLEMsQ0FRUDs7O2VBQ2VDLGMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gucGljayc7XG5pbXBvcnQge1ZFUlNJT05TfSBmcm9tICcuL3ZlcnNpb25zJztcbmltcG9ydCB7aXNWYWxpZEZpbHRlclZhbHVlfSBmcm9tICd1dGlscy9maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHtMQVlFUl9WSVNfQ09ORklHU30gZnJvbSAnbGF5ZXJzL2xheWVyLWZhY3RvcnknO1xuaW1wb3J0IFNjaGVtYSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC5jbG9uZWRlZXAnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuXG4vKipcbiAqIFYwIFNjaGVtYVxuICovXG5cbmV4cG9ydCBjb25zdCBkaW1lbnNpb25Qcm9wc1YwID0gWyduYW1lJywgJ3R5cGUnXTtcblxuZXhwb3J0IHR5cGUgbW9kaWZpZWRUeXBlID0ge1xuICBzdHJva2VDb2xvcj86IGFueTtcbiAgc3Ryb2tlQ29sb3JSYW5nZT86IGFueTtcbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgc3Ryb2tlZD86IGJvb2xlYW47XG59O1xuXG4vLyBpbiB2MCBnZW9qc29uIHRoZXJlIGlzIG9ubHkgc2l6ZUZpZWxkXG5cbi8vIGluIHYxIGdlb2pzb25cbi8vIHN0cm9rZSBiYXNlIG9uIC0+IHNpemVGaWVsZFxuLy8gaGVpZ2h0IGJhc2VkIG9uIC0+IGhlaWdodEZpZWxkXG4vLyByYWRpdXMgYmFzZWQgb24gLT4gcmFkaXVzRmllbGRcbi8vIGhlcmUgd2UgbWFrZSBvdXIgd2lyZWRzdCBndWVzcyBvbiB3aGljaCBjaGFubmVsIHNpemVGaWVsZCBiZWxvbmdzIHRvXG5mdW5jdGlvbiBnZW9qc29uU2l6ZUZpZWxkVjBUb1YxKGNvbmZpZykge1xuICBjb25zdCBkZWZhdWx0UmFpdWRzID0gMTA7XG4gIGNvbnN0IGRlZmF1bHRSYWRpdXNSYW5nZSA9IFswLCA1MF07XG5cbiAgLy8gaWYgZXh0cnVkZWQsIHNpemVGaWVsZCBpcyBtb3N0IGxpa2VseSB1c2VkIGZvciBoZWlnaHRcbiAgaWYgKGNvbmZpZy52aXNDb25maWcuZXh0cnVkZWQpIHtcbiAgICByZXR1cm4gJ2hlaWdodEZpZWxkJztcbiAgfVxuXG4gIC8vIGlmIHNob3cgc3Ryb2tlIGVuYWJsZWQsIHNpemVGaWVsZCBpcyBtb3N0IGxpa2VseSB1c2VkIGZvciBzdHJva2VcbiAgaWYgKGNvbmZpZy52aXNDb25maWcuc3Ryb2tlZCkge1xuICAgIHJldHVybiAnc2l6ZUZpZWxkJztcbiAgfVxuXG4gIC8vIGlmIHJhZGl1cyBjaGFuZ2VkLCBvciByYWRpdXMgUmFuZ2UgQ2hhbmdlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIHJhZGl1c1xuICAvLyB0aGlzIGlzIHRoZSBtb3N0IHVucmVsaWFibGUgZ3Vlc3MsIHRoYXQncyB3aHkgd2UgcHV0IGl0IGluIHRoZSBlbmRcbiAgaWYgKFxuICAgIGNvbmZpZy52aXNDb25maWcucmFkaXVzICE9PSBkZWZhdWx0UmFpdWRzIHx8XG4gICAgY29uZmlnLnZpc0NvbmZpZy5yYWRpdXNSYW5nZS5zb21lKChkLCBpKSA9PiBkICE9PSBkZWZhdWx0UmFkaXVzUmFuZ2VbaV0pXG4gICkge1xuICAgIHJldHVybiAncmFkaXVzRmllbGQnO1xuICB9XG5cbiAgcmV0dXJuICdzaXplRmllbGQnO1xufVxuXG4vLyBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbmZpZ1xuY2xhc3MgRGltZW5zaW9uRmllbGRTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgc2F2ZShmaWVsZCkge1xuICAgIC8vIHNob3VsZCBub3QgYmUgY2FsbGVkIGFueW1vcmVcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogZmllbGQgIT09IG51bGwgPyB0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShmaWVsZClbdGhpcy5rZXldIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBsb2FkKGZpZWxkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgbGV0IGZpZWxkTmFtZSA9IHRoaXMua2V5O1xuICAgIGlmIChjb25maWcudHlwZSA9PT0gJ2dlb2pzb24nICYmIHRoaXMua2V5ID09PSAnc2l6ZUZpZWxkJyAmJiBmaWVsZCkge1xuICAgICAgZmllbGROYW1lID0gZ2VvanNvblNpemVGaWVsZFYwVG9WMShjb25maWcpO1xuICAgIH1cbiAgICAvLyBmb2xkIGludG8gdmlzdWFsQ2hhbm5lbHMgdG8gYmUgbG9hZCBieSBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsQ2hhbm5lbHM6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLnZpc3VhbENoYW5uZWxzIHx8IHt9KSxcbiAgICAgICAgW2ZpZWxkTmFtZV06IGZpZWxkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBEaW1lbnNpb25TY2FsZVNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBzYXZlKHNjYWxlKSB7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBzY2FsZX07XG4gIH1cbiAgbG9hZChzY2FsZSwgcGFyZW50cywgYWNjdW11bGF0ZWQpIHtcbiAgICBjb25zdCBbY29uZmlnXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIC8vIGZvbGQgaW50byB2aXN1YWxDaGFubmVscyB0byBiZSBsb2FkIGJ5IFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICAgIGlmICh0aGlzLmtleSA9PT0gJ3NpemVTY2FsZScgJiYgY29uZmlnLnR5cGUgPT09ICdnZW9qc29uJykge1xuICAgICAgLy8gc2l6ZVNjYWxlIG5vdyBzcGxpdCBpbnRvIHJhZGl1c1NjYWxlLCBoZWlnaHRTY2FsZVxuICAgICAgLy8gbm8gdXNlciBjdXN0b21pemF0aW9uLCBqdXN0IHVzZSBkZWZhdWx0XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc3VhbENoYW5uZWxzOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC52aXN1YWxDaGFubmVscyB8fCB7fSksXG4gICAgICAgIFt0aGlzLmtleV06IHNjYWxlXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnXG5jbGFzcyBMYXllckNvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcua2V5XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQuY29uZmlnIHx8IHt9KSxcbiAgICAgICAgW3RoaXMua2V5XTogc2F2ZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb2x1bW5zXG4vLyBvbmx5IHJldHVybiBjb2x1bW4gdmFsdWUgZm9yIGVhY2ggY29sdW1uXG5jbGFzcyBMYXllckNvbHVtbnNTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZChzYXZlZCwgcGFyZW50cywgYWNjdW11bGF0ZWQpIHtcbiAgICAvLyBmb2xkIHYwIGxheWVyIHByb3BlcnR5IGludG8gY29uZmlnLmtleSwgZmxhdHRlbiBjb2x1bW5zXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQuY29uZmlnIHx8IHt9KSxcbiAgICAgICAgY29sdW1uczogT2JqZWN0LmtleXMoc2F2ZWQpLnJlZHVjZShcbiAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgIFtrZXldOiBzYXZlZFtrZXldLnZhbHVlXG4gICAgICAgICAgfSksXG4gICAgICAgICAge31cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbmZpZy52aXNDb25maWdcbmNsYXNzIExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZChzYXZlZCwgcGFyZW50cywgYWNjdW11bGF0ZWQpIHtcbiAgICAvLyBmb2xkIHYwIGxheWVyIHByb3BlcnR5IGludG8gY29uZmlnLnZpc0NvbmZpZ1xuICAgIGNvbnN0IGFjY3VtdWxhdGVkQ29uZmlnID0gYWNjdW11bGF0ZWQuY29uZmlnIHx8IHt9O1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uYWNjdW11bGF0ZWRDb25maWcsXG4gICAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAgIC4uLihhY2N1bXVsYXRlZENvbmZpZy52aXNDb25maWcgfHwge30pLFxuICAgICAgICAgIFt0aGlzLmtleV06IHNhdmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIExheWVyVmlzQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGtleSA9ICd2aXNDb25maWcnO1xuXG4gIGxvYWQodmlzQ29uZmlnLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgY29uc3QgcmVuYW1lID0ge1xuICAgICAgZ2VvanNvbjoge1xuICAgICAgICBleHRydWRlZDogJ2VuYWJsZTNkJyxcbiAgICAgICAgZWxldmF0aW9uUmFuZ2U6ICdoZWlnaHRSYW5nZSdcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZy50eXBlIGluIHJlbmFtZSkge1xuICAgICAgY29uc3QgcHJvcFRvUmVuYW1lID0gcmVuYW1lW2NvbmZpZy50eXBlXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICAgIHZpc0NvbmZpZzogT2JqZWN0LmtleXModmlzQ29uZmlnKS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi4ocHJvcFRvUmVuYW1lW2tleV1cbiAgICAgICAgICAgICAgICA/IHtbcHJvcFRvUmVuYW1lW2tleV1dOiB2aXNDb25maWdba2V5XX1cbiAgICAgICAgICAgICAgICA6IHtba2V5XTogdmlzQ29uZmlnW2tleV19KVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICB2aXNDb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIExheWVyQ29uZmlnU2NoZW1hRGVsZXRlVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQodmFsdWUpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBWMCAtPiBWMSBDaGFuZ2VzXG4gKiAtIGxheWVyIGlzIG5vdyBhIGNsYXNzXG4gKiAtIGNvbmZpZyBzYXZlZCBpbiBhIGNvbmZpZyBvYmplY3RcbiAqIC0gaWQsIHR5cGUsIGlzQWdncmVnYXRlZCBpcyBvdXRzaWRlIGxheWVyLmNvbmZpZ1xuICogLSB2aXN1YWxDaGFubmVscyBpcyBvdXRzaWRlIGNvbmZpZywgaXQgZGVmaW5lcyBhdmFpbGFibGUgdmlzdWFsIGNoYW5uZWwgYW5kXG4gKiAgIHByb3BlcnR5IG5hbWVzIGZvciBmaWVsZCwgc2NhbGUsIGRvbWFpbiBhbmQgcmFuZ2Ugb2YgZWFjaCB2aXN1YWwgY2hhbmVsLlxuICogLSBlbmFibGUzZCwgY29sb3JBZ2dyZWdhdGlvbiBhbmQgc2l6ZUFnZ3JlZ2F0aW9uIGFyZSBtb3ZlZCBpbnRvIHZpc0NvbmZpZ1xuICogLSBHZW9qc29uTGF5ZXIgLSBhZGRlZCBoZWlnaHQsIHJhZGl1cyBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cblxuZXhwb3J0IGNvbnN0IGxheWVyUHJvcHNWMCA9IHtcbiAgaWQ6IG51bGwsXG4gIHR5cGU6IG51bGwsXG5cbiAgLy8gbW92ZSBpbnRvIGxheWVyLmNvbmZpZ1xuICBkYXRhSWQ6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdkYXRhSWQnfSksXG4gIGxhYmVsOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnbGFiZWwnfSksXG4gIGNvbG9yOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnY29sb3InfSksXG4gIGlzVmlzaWJsZTogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2lzVmlzaWJsZSd9KSxcbiAgaGlkZGVuOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnaGlkZGVuJ30pLFxuICB2aXNpYmlsaXR5Qnlab29tOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAndmlzaWJpbGl0eUJ5Wm9vbSd9KSxcblxuICAvLyBjb252ZXJ0IHZpc0NvbmZpZ1xuICB2aXNDb25maWc6IG5ldyBMYXllclZpc0NvbmZpZ1NjaGVtYVYwKHtrZXk6ICd2aXNDb25maWcnfSksXG5cbiAgLy8gbW92ZSBpbnRvIGxheWVyLmNvbmZpZ1xuICAvLyBmbGF0dGVuXG4gIGNvbHVtbnM6IG5ldyBMYXllckNvbHVtbnNTY2hlbWFWMCgpLFxuXG4gIC8vIHNhdmUgaW50byB2aXN1YWxDaGFubmVsc1xuICBjb2xvckZpZWxkOiBuZXcgRGltZW5zaW9uRmllbGRTY2hlbWFWMCh7XG4gICAgcHJvcGVydGllczogZGltZW5zaW9uUHJvcHNWMCxcbiAgICBrZXk6ICdjb2xvckZpZWxkJ1xuICB9KSxcbiAgY29sb3JTY2FsZTogbmV3IERpbWVuc2lvblNjYWxlU2NoZW1hVjAoe1xuICAgIGtleTogJ2NvbG9yU2NhbGUnXG4gIH0pLFxuICBzaXplRmllbGQ6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwKHtcbiAgICBwcm9wZXJ0aWVzOiBkaW1lbnNpb25Qcm9wc1YwLFxuICAgIGtleTogJ3NpemVGaWVsZCdcbiAgfSksXG4gIHNpemVTY2FsZTogbmV3IERpbWVuc2lvblNjYWxlU2NoZW1hVjAoe1xuICAgIGtleTogJ3NpemVTY2FsZSdcbiAgfSksXG5cbiAgLy8gbW92ZSBpbnRvIGNvbmZpZy52aXNDb25maWdcbiAgZW5hYmxlM2Q6IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ2VuYWJsZTNkJ30pLFxuICBjb2xvckFnZ3JlZ2F0aW9uOiBuZXcgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwKHtcbiAgICBrZXk6ICdjb2xvckFnZ3JlZ2F0aW9uJ1xuICB9KSxcbiAgc2l6ZUFnZ3JlZ2F0aW9uOiBuZXcgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwKHtrZXk6ICdzaXplQWdncmVnYXRpb24nfSksXG5cbiAgLy8gZGVsZXRlXG4gIGlzQWdncmVnYXRlZDogbmV3IExheWVyQ29uZmlnU2NoZW1hRGVsZXRlVjAoKVxufTtcblxuLyoqXG4gKiBWMSBTY2hlbWFcbiAqL1xuY2xhc3MgQ29sdW1uU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKGNvbHVtbnMsIHN0YXRlKSB7XG4gICAgLy8gc3RhcnRpbmcgZnJvbSB2MSwgb25seSBzYXZlIGNvbHVtbiB2YWx1ZVxuICAgIC8vIGZpZWxkSWR4IHdpbGwgYmUgY2FsY3VsYXRlZCBkdXJpbmcgbWVyZ2VcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogT2JqZWN0LmtleXMoY29sdW1ucykucmVkdWNlKFxuICAgICAgICAoYWNjdSwgY2tleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFtja2V5XTogY29sdW1uc1tja2V5XS52YWx1ZVxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgbG9hZChjb2x1bW5zKSB7XG4gICAgcmV0dXJuIHtjb2x1bW5zfTtcbiAgfVxufVxuXG5jbGFzcyBUZXh0TGFiZWxTY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUodGV4dExhYmVsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IHRleHRMYWJlbC5tYXAodGwgPT4gKHtcbiAgICAgICAgLi4udGwsXG4gICAgICAgIGZpZWxkOiB0bC5maWVsZCA/IHBpY2sodGwuZmllbGQsIFsnbmFtZScsICd0eXBlJ10pIDogbnVsbFxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQodGV4dExhYmVsKSB7XG4gICAgcmV0dXJuIHt0ZXh0TGFiZWw6IEFycmF5LmlzQXJyYXkodGV4dExhYmVsKSA/IHRleHRMYWJlbCA6IFt0ZXh0TGFiZWxdfTtcbiAgfVxufVxuXG5jb25zdCB2aXN1YWxDaGFubmVsTW9kaWZpY2F0aW9uVjEgPSB7XG4gIGdlb2pzb246ICh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpID0+IHtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgY29uc3QgaXNPbGQgPSAhdmMuaGFzT3duUHJvcGVydHkoJ3N0cm9rZUNvbG9yRmllbGQnKTtcbiAgICAvLyBtYWtlIG91ciBiZXN0IGd1ZXNzIGlmIHRoaXMgZ2VvanNvbiBsYXllciBjb250YWlucyBwb2ludFxuICAgIGNvbnN0IGlzUG9pbnQgPVxuICAgICAgdmMucmFkaXVzRmllbGQgfHwgbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5yYWRpdXMgIT09IExBWUVSX1ZJU19DT05GSUdTLnJhZGl1cy5kZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoaXNPbGQgJiYgIWlzUG9pbnQgJiYgbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkKSB7XG4gICAgICAvLyBpZiBzdHJva2VkIGlzIHRydWUsIGNvcHkgY29sb3IgY29uZmlnIHRvIHN0cm9rZSBjb2xvciBjb25maWdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0cm9rZUNvbG9yRmllbGQ6IHZjLmNvbG9yRmllbGQsXG4gICAgICAgIHN0cm9rZUNvbG9yU2NhbGU6IHZjLmNvbG9yU2NhbGVcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxufTtcbi8qKlxuICogVjE6IHNhdmUgW2ZpZWxkXToge25hbWUsIHR5cGV9LCBbc2NhbGVdOiAnJyBmb3IgZWFjaCBjaGFubmVsXG4gKi9cbmNsYXNzIFZpc3VhbENoYW5uZWxTY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUodmlzdWFsQ2hhbm5lbHMsIHBhcmVudHMpIHtcbiAgICAvLyBvbmx5IHNhdmUgZmllbGQgYW5kIHNjYWxlIG9mIGVhY2ggY2hhbm5lbFxuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogT2JqZWN0LmtleXModmlzdWFsQ2hhbm5lbHMpLnJlZHVjZShcbiAgICAgICAgLy8gIHNhdmUgY2hhbm5lbCB0byBudWxsIGlmIGRpZG4ndCBzZWxlY3QgYW55IGZpZWxkXG4gICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICBbdmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF06IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXVxuICAgICAgICAgICAgPyBwaWNrKGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXSwgWyduYW1lJywgJ3R5cGUnLCAnY29sb3JDb2x1bW4nXSlcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBbdmlzdWFsQ2hhbm5lbHNba2V5XS5zY2FsZV06IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsc1trZXldLnNjYWxlXVxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9O1xuICB9XG4gIGxvYWQodmMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgLy8gZm9sZCBjaGFubmVscyBpbnRvIGNvbmZpZ1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCBtb2RpZmllZCA9IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMVtsYXllci50eXBlXVxuICAgICAgPyB2aXN1YWxDaGFubmVsTW9kaWZpY2F0aW9uVjFbbGF5ZXIudHlwZV0odmMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKVxuICAgICAgOiB7fTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hY2N1bXVsYXRvcixcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi4oYWNjdW11bGF0b3IuY29uZmlnIHx8IHt9KSxcbiAgICAgICAgLi4udmMsXG4gICAgICAgIC4uLm1vZGlmaWVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBWMTogc2F2ZSBbY2hhbm5lbF06IFt7IGxhYmVsLCBjb2xvciB9LCAuLi5dIGZvciBsZWdlbmRcbiAqL1xuY2xhc3MgTGVnZW5kU2V0dGluZ3NWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUobGVnZW5kU2V0dGluZ3MsIHBhcmVudHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogT2JqZWN0LmtleXMobGVnZW5kU2V0dGluZ3MpLnJlZHVjZSgoYWNjdSwga2V5KSA9PiB7XG4gICAgICAgIGFjY3Vba2V5XSA9IGxlZ2VuZFNldHRpbmdzW2tleV07XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfSwge30pXG4gICAgfTtcbiAgfVxuICBsb2FkKGxzLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5hY2N1bXVsYXRvcixcbiAgICAgIFt0aGlzLmtleV06IGxzXG4gICAgfTtcbiAgfVxufVxuY29uc3QgdmlzQ29uZmlnTW9kaWZpY2F0aW9uVjEgPSB7XG4gIHBvaW50OiAodmlzQ29uZmlnLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkgPT4ge1xuICAgIGNvbnN0IG1vZGlmaWVkOiBtb2RpZmllZFR5cGUgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgICF2aXNDb25maWcuaGFzT3duUHJvcGVydHkoJ2ZpbGxlZCcpICYmICF2aXNDb25maWcuc3Ryb2tlQ29sb3IgJiYgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIGlmIChpc09sZCkge1xuICAgICAgLy8gY29sb3IgY29sb3IgJiBjb2xvciByYW5nZSB0byBzdHJva2UgY29sb3JcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yID0gbGF5ZXIuY29uZmlnLmNvbG9yO1xuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3JSYW5nZSA9IGNsb25lRGVlcCh2aXNDb25maWcuY29sb3JSYW5nZSk7XG4gICAgICBpZiAodmlzQ29uZmlnLm91dGxpbmUpIHtcbiAgICAgICAgLy8gcG9pbnQgbGF5ZXIgbm93IHN1cHBvcnRzIGJvdGggb3V0bGluZSBhbmQgZmlsbFxuICAgICAgICAvLyBmb3Igb2xkZXIgc2NoZW1hIHdoZXJlIGZpbGxlZCBoYXMgbm90IGJlZW4gYWRkZWQgdG8gcG9pbnQgbGF5ZXJcbiAgICAgICAgLy8gc2V0IGl0IHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZDtcbiAgfSxcbiAgZ2VvanNvbjogKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpID0+IHtcbiAgICAvLyBpcyBwb2ludHM/XG4gICAgY29uc3QgbW9kaWZpZWQ6IG1vZGlmaWVkVHlwZSA9IHt9O1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0yLCAtMSk7XG4gICAgY29uc3QgaXNPbGQgPVxuICAgICAgbGF5ZXIudmlzdWFsQ2hhbm5lbHMgJiZcbiAgICAgICFsYXllci52aXN1YWxDaGFubmVscy5oYXNPd25Qcm9wZXJ0eSgnc3Ryb2tlQ29sb3JGaWVsZCcpICYmXG4gICAgICAhdmlzQ29uZmlnLnN0cm9rZUNvbG9yICYmXG4gICAgICAhdmlzQ29uZmlnLnN0cm9rZUNvbG9yUmFuZ2U7XG4gICAgLy8gbWFrZSBvdXIgYmVzdCBndWVzcyBpZiB0aGlzIGdlb2pzb24gbGF5ZXIgY29udGFpbnMgcG9pbnRcbiAgICBjb25zdCBpc1BvaW50ID1cbiAgICAgIChsYXllci52aXN1YWxDaGFubmVscyAmJiBsYXllci52aXN1YWxDaGFubmVscy5yYWRpdXNGaWVsZCkgfHxcbiAgICAgICh2aXNDb25maWcgJiYgdmlzQ29uZmlnLnJhZGl1cyAhPT0gTEFZRVJfVklTX0NPTkZJR1MucmFkaXVzLmRlZmF1bHRWYWx1ZSk7XG5cbiAgICBpZiAoaXNPbGQpIHtcbiAgICAgIC8vIGNvbG9yIGNvbG9yICYgY29sb3IgcmFuZ2UgdG8gc3Ryb2tlIGNvbG9yXG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvciA9IGxheWVyLmNvbmZpZy5jb2xvcjtcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yUmFuZ2UgPSBjbG9uZURlZXAodmlzQ29uZmlnLmNvbG9yUmFuZ2UpO1xuICAgICAgaWYgKGlzUG9pbnQpIHtcbiAgICAgICAgLy8gaWYgaXMgcG9pbnQsIHNldCBzdHJva2UgdG8gZmFsc2VcbiAgICAgICAgbW9kaWZpZWQuZmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgbW9kaWZpZWQuc3Ryb2tlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RpZmllZDtcbiAgfVxufTtcblxuY2xhc3MgVmlzQ29uZmlnU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAndmlzQ29uZmlnJztcblxuICBsb2FkKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpIHtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdmlzQ29uZmlnTW9kaWZpY2F0aW9uVjFbbGF5ZXIudHlwZV1cbiAgICAgID8gdmlzQ29uZmlnTW9kaWZpY2F0aW9uVjFbbGF5ZXIudHlwZV0odmlzQ29uZmlnLCBwYXJlbnRzLCBhY2N1bXVsYXRlZClcbiAgICAgIDoge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgIC4uLnZpc0NvbmZpZyxcbiAgICAgICAgLi4ubW9kaWZpZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBsYXllclByb3BzVjEgPSB7XG4gIGlkOiBudWxsLFxuICB0eXBlOiBudWxsLFxuICBjb25maWc6IG5ldyBTY2hlbWEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIGtleTogJ2NvbmZpZycsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgZGF0YUlkOiBudWxsLFxuICAgICAgbGFiZWw6IG51bGwsXG4gICAgICBjb2xvcjogbnVsbCxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiBudWxsLFxuICAgICAgY29sdW1uczogbmV3IENvbHVtblNjaGVtYVYxKHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgICAgIGtleTogJ2NvbHVtbnMnXG4gICAgICB9KSxcbiAgICAgIGlzVmlzaWJsZTogbnVsbCxcbiAgICAgIHZpc0NvbmZpZzogbmV3IFZpc0NvbmZpZ1NjaGVtYVYxKHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTlMudjFcbiAgICAgIH0pLFxuICAgICAgaGlkZGVuOiBudWxsLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbTogbnVsbCxcbiAgICAgIHRleHRMYWJlbDogbmV3IFRleHRMYWJlbFNjaGVtYVYxKHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgICAgIGtleTogJ3RleHRMYWJlbCdcbiAgICAgIH0pXG4gICAgfVxuICB9KSxcbiAgbGVnZW5kU2V0dGluZ3M6IG5ldyBMZWdlbmRTZXR0aW5nc1YxKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICdsZWdlbmRTZXR0aW5ncydcbiAgfSksXG4gIHZpc3VhbENoYW5uZWxzOiBuZXcgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICd2aXN1YWxDaGFubmVscydcbiAgfSlcbn07XG5cbmV4cG9ydCBjbGFzcyBMYXllclNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2xheWVycyc7XG5cbiAgc2F2ZShsYXllcnMsIHBhcmVudHMpIHtcbiAgICBjb25zdCBbdmlzU3RhdGVdID0gcGFyZW50cy5zbGljZSgtMSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdmlzU3RhdGUubGF5ZXJPcmRlci5yZWR1Y2UoKHNhdmVkLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBzYXZlIGxheWVycyBhY2NvcmRpbmcgdG8gdGhlaXIgcmVuZGVyaW5nIG9yZGVyXG4gICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW2luZGV4XTtcbiAgICAgICAgaWYgKGxheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgICAgIHNhdmVkLnB1c2godGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEobGF5ZXIpLmxheWVycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhdmVkO1xuICAgICAgfSwgW10pXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQobGF5ZXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IGxheWVycy5tYXAobGF5ZXIgPT4gdGhpcy5sb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEobGF5ZXIsIGxheWVycykubGF5ZXJzKVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpbHRlclNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2ZpbHRlcnMnO1xuICBzYXZlKGZpbHRlcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyczogZmlsdGVyc1xuICAgICAgICAuZmlsdGVyKGlzVmFsaWRGaWx0ZXJWYWx1ZSlcbiAgICAgICAgLm1hcChmaWx0ZXIgPT4gdGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEoZmlsdGVyKS5maWx0ZXJzKVxuICAgIH07XG4gIH1cbiAgbG9hZChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHtmaWx0ZXJzfTtcbiAgfVxufVxuXG5jb25zdCBpbnRlcmFjdGlvblByb3BzVjAgPSBbJ3Rvb2x0aXAnLCAnYnJ1c2gnXTtcblxuY2xhc3MgSW50ZXJhY3Rpb25TY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdpbnRlcmFjdGlvbkNvbmZpZyc7XG5cbiAgc2F2ZShpbnRlcmFjdGlvbkNvbmZpZykge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi4oaW50ZXJhY3Rpb25Db25maWdba2V5XS5lbmFibGVkID8ge1trZXldOiBpbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZ30gOiB7fSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbiAgbG9hZChpbnRlcmFjdGlvbkNvbmZpZykge1xuICAgIC8vIGNvbnZlcnQgdjAgLT4gdjFcbiAgICAvLyByZXR1cm4gZW5hYmxlZDogZmFsc2UgaWYgZGlzYWJsZWQsXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wZXJ0aWVzKVxuICAgICAgPyB7XG4gICAgICAgICAgW3RoaXMua2V5XTogdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgICAgLi4uKGludGVyYWN0aW9uQ29uZmlnW2tleV0gfHwge30pLFxuICAgICAgICAgICAgICAgICAgZW5hYmxlZDogQm9vbGVhbihpbnRlcmFjdGlvbkNvbmZpZ1trZXldKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgfVxufVxuXG5jb25zdCBpbnRlcmFjdGlvblByb3BzVjEgPSBbLi4uaW50ZXJhY3Rpb25Qcm9wc1YwLCAnZ2VvY29kZXInLCAnY29vcmRpbmF0ZSddO1xuXG5leHBvcnQgY2xhc3MgSW50ZXJhY3Rpb25TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdpbnRlcmFjdGlvbkNvbmZpZyc7XG5cbiAgc2F2ZShpbnRlcmFjdGlvbkNvbmZpZykge1xuICAgIC8vIHNhdmUgY29uZmlnIGV2ZW4gaWYgZGlzYWJsZWQsXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wZXJ0aWVzKVxuICAgICAgPyB7XG4gICAgICAgICAgW3RoaXMua2V5XTogdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWcsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogaW50ZXJhY3Rpb25Db25maWdba2V5XS5lbmFibGVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbiAgbG9hZChpbnRlcmFjdGlvbkNvbmZpZykge1xuICAgIGNvbnN0IG1vZGlmaWVkQ29uZmlnID0gaW50ZXJhY3Rpb25Db25maWc7XG4gICAgT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Db25maWcpLmZvckVhY2goY29uZmlnVHlwZSA9PiB7XG4gICAgICBpZiAoY29uZmlnVHlwZSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkc1RvU2hvdyA9IG1vZGlmaWVkQ29uZmlnW2NvbmZpZ1R5cGVdLmZpZWxkc1RvU2hvdztcbiAgICAgICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQoZmllbGRzVG9TaG93KSkge1xuICAgICAgICAgIHJldHVybiB7W3RoaXMua2V5XTogbW9kaWZpZWRDb25maWd9O1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkc1RvU2hvdykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpZWxkc1RvU2hvd1trZXldID0gZmllbGRzVG9TaG93W2tleV0ubWFwKGZpZWxkRGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpZWxkRGF0YS5uYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmllbGREYXRhLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogbnVsbFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkRGF0YTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBtb2RpZmllZENvbmZpZ307XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlclByb3BzVjAgPSB7XG4gIGRhdGFJZDogbnVsbCxcbiAgaWQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxuICBlbmxhcmdlZDogbnVsbFxufTtcblxuZXhwb3J0IGNsYXNzIERpbWVuc2lvbkZpZWxkU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShmaWVsZCkge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IGZpZWxkfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3BsaXRNYXBzU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgY29udmVydExheWVyU2V0dGluZ3MoYWNjdSwgW2tleSwgdmFsdWVdKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogQm9vbGVhbih2YWx1ZS5pc1Zpc2libGUpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfVxuXG4gIGxvYWQoc3BsaXRNYXBzKSB7XG4gICAgLy8gcHJldmlvdXMgc3BsaXRNYXBzIFNjaGVtYSB7bGF5ZXJzOiB7bGF5ZXJJZDoge2lzVmlzaWJsZSwgaXNBdmFpbGFibGV9fX1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzcGxpdE1hcHMpIHx8ICFzcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge3NwbGl0TWFwczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4gKHtcbiAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgIGxheWVyczogT2JqZWN0LmVudHJpZXMoc2V0dGluZ3MubGF5ZXJzIHx8IHt9KS5yZWR1Y2UodGhpcy5jb252ZXJ0TGF5ZXJTZXR0aW5ncywge30pXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJQcm9wc1YxID0ge1xuICAuLi5maWx0ZXJQcm9wc1YwLFxuICBwbG90VHlwZTogbnVsbCxcbiAgYW5pbWF0aW9uV2luZG93OiBudWxsLFxuICB5QXhpczogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICd5QXhpcycsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgbmFtZTogbnVsbCxcbiAgICAgIHR5cGU6IG51bGxcbiAgICB9XG4gIH0pLFxuXG4gIC8vIHBvbHlnb24gZmlsdGVyIHByb3BlcnRpZXNcbiAgbGF5ZXJJZDogbnVsbCxcbiAgc3BlZWQ6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjAgPSB7XG4gIGZpbHRlcnM6IG5ldyBGaWx0ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogZmlsdGVyUHJvcHNWMFxuICB9KSxcbiAgbGF5ZXJzOiBuZXcgTGF5ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogbGF5ZXJQcm9wc1YwXG4gIH0pLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogbmV3IEludGVyYWN0aW9uU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGludGVyYWN0aW9uUHJvcHNWMFxuICB9KSxcbiAgbGF5ZXJCbGVuZGluZzogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnRpZXNWMSA9IHtcbiAgZmlsdGVyczogbmV3IEZpbHRlclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBmaWx0ZXJQcm9wc1YxXG4gIH0pLFxuICBsYXllcnM6IG5ldyBMYXllclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBsYXllclByb3BzVjFcbiAgfSksXG4gIGludGVyYWN0aW9uQ29uZmlnOiBuZXcgSW50ZXJhY3Rpb25TY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogaW50ZXJhY3Rpb25Qcm9wc1YxXG4gIH0pLFxuICBsYXllckJsZW5kaW5nOiBudWxsLFxuICBzcGxpdE1hcHM6IG5ldyBTcGxpdE1hcHNTY2hlbWEoe1xuICAgIGtleTogJ3NwbGl0TWFwcycsXG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjFcbiAgfSksXG4gIGFuaW1hdGlvbkNvbmZpZzogbmV3IFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgY3VycmVudFRpbWU6IG51bGwsXG4gICAgICBzcGVlZDogbnVsbFxuICAgIH0sXG4gICAga2V5OiAnYW5pbWF0aW9uQ29uZmlnJ1xuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hVjAgPSBuZXcgU2NoZW1hKHtcbiAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMCxcbiAga2V5OiAndmlzU3RhdGUnXG59KTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hVjEgPSBuZXcgU2NoZW1hKHtcbiAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMSxcbiAga2V5OiAndmlzU3RhdGUnXG59KTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hID0ge1xuICBbVkVSU0lPTlMudjBdOiB7XG4gICAgc2F2ZTogdG9TYXZlID0+IHZpc1N0YXRlU2NoZW1hVjAuc2F2ZSh0b1NhdmUpLFxuICAgIGxvYWQ6IHRvTG9hZCA9PiB2aXNTdGF0ZVNjaGVtYVYxLmxvYWQodmlzU3RhdGVTY2hlbWFWMC5sb2FkKHRvTG9hZCkudmlzU3RhdGUpXG4gIH0sXG4gIFtWRVJTSU9OUy52MV06IHZpc1N0YXRlU2NoZW1hVjFcbn07XG5cbi8vIHRlc3QgbG9hZCB2MFxuZXhwb3J0IGRlZmF1bHQgdmlzU3RhdGVTY2hlbWE7XG4iXX0=
|