@carto/kepler.gl 0.1.0-alpha.0 → 0.1.0-next.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/dist/actions/action-wrapper.d.ts +115 -115
- package/dist/actions/action-wrapper.js +190 -0
- package/dist/actions/actions.d.ts +195 -195
- package/dist/actions/actions.js +194 -0
- package/dist/actions/identity-actions.d.ts +61 -61
- package/dist/actions/identity-actions.js +101 -0
- package/dist/actions/index.d.ts +9 -9
- package/dist/actions/index.js +144 -0
- package/dist/actions/map-state-actions.d.ts +69 -69
- package/dist/actions/map-state-actions.js +106 -0
- package/dist/actions/map-style-actions.d.ts +146 -146
- package/dist/actions/map-style-actions.js +176 -0
- package/dist/actions/provider-actions.d.ts +153 -153
- package/dist/actions/provider-actions.js +144 -0
- package/dist/actions/ui-state-actions.d.ts +300 -300
- package/dist/actions/ui-state-actions.js +356 -0
- package/dist/actions/vis-state-actions.d.ts +821 -821
- package/dist/actions/vis-state-actions.js +900 -0
- package/dist/cloud-providers/index.d.ts +2 -2
- package/dist/cloud-providers/index.js +22 -0
- package/dist/cloud-providers/provider.d.ts +176 -176
- package/dist/cloud-providers/provider.js +346 -0
- package/dist/components/bottom-widget.d.ts +47 -47
- package/dist/components/bottom-widget.js +217 -0
- package/dist/components/common/action-panel.d.ts +27 -27
- package/dist/components/common/action-panel.js +133 -0
- package/dist/components/common/animation-control/animation-control.d.ts +24 -24
- package/dist/components/common/animation-control/animation-control.js +129 -0
- package/dist/components/common/animation-control/animation-controller.d.ts +16 -16
- package/dist/components/common/animation-control/animation-controller.js +270 -0
- package/dist/components/common/animation-control/animation-speed-slider.d.ts +12 -12
- package/dist/components/common/animation-control/animation-speed-slider.js +88 -0
- package/dist/components/common/animation-control/floating-time-display.d.ts +9 -9
- package/dist/components/common/animation-control/floating-time-display.js +149 -0
- package/dist/components/common/animation-control/playback-controls.d.ts +72 -72
- package/dist/components/common/animation-control/playback-controls.js +261 -0
- package/dist/components/common/animation-control/speed-control.d.ts +13 -13
- package/dist/components/common/animation-control/speed-control.js +70 -0
- package/dist/components/common/checkbox.d.ts +35 -35
- package/dist/components/common/checkbox.js +117 -0
- package/dist/components/common/color-legend.d.ts +43 -43
- package/dist/components/common/color-legend.js +205 -0
- package/dist/components/common/data-table/button.d.ts +8 -8
- package/dist/components/common/data-table/button.js +53 -0
- package/dist/components/common/data-table/canvas.d.ts +2 -2
- package/dist/components/common/data-table/canvas.js +43 -0
- package/dist/components/common/data-table/cell-size.d.ts +36 -36
- package/dist/components/common/data-table/cell-size.js +170 -0
- package/dist/components/common/data-table/grid.d.ts +7 -7
- package/dist/components/common/data-table/grid.js +90 -0
- package/dist/components/common/data-table/index.d.ts +143 -143
- package/dist/components/common/data-table/index.js +469 -0
- package/dist/components/common/data-table/option-dropdown.d.ts +14 -14
- package/dist/components/common/data-table/option-dropdown.js +99 -0
- package/dist/components/common/dataset-label.d.ts +10 -10
- package/dist/components/common/dataset-label.js +44 -0
- package/dist/components/common/error-boundary.d.ts +16 -16
- package/dist/components/common/error-boundary.js +76 -0
- package/dist/components/common/field-selector.d.ts +47 -47
- package/dist/components/common/field-selector.js +214 -0
- package/dist/components/common/field-token.d.ts +45 -45
- package/dist/components/common/field-token.js +47 -0
- package/dist/components/common/file-uploader/file-drop.d.ts +54 -54
- package/dist/components/common/file-uploader/file-drop.js +213 -0
- package/dist/components/common/file-uploader/file-upload-progress.d.ts +8 -8
- package/dist/components/common/file-uploader/file-upload-progress.js +103 -0
- package/dist/components/common/file-uploader/file-upload.d.ts +27 -27
- package/dist/components/common/file-uploader/file-upload.js +263 -0
- package/dist/components/common/file-uploader/upload-button.d.ts +8 -8
- package/dist/components/common/file-uploader/upload-button.js +76 -0
- package/dist/components/common/histogram-plot.d.ts +3 -3
- package/dist/components/common/histogram-plot.js +112 -0
- package/dist/components/common/icons/add.d.ts +9 -9
- package/dist/components/common/icons/add.js +58 -0
- package/dist/components/common/icons/anchor_window.d.ts +11 -11
- package/dist/components/common/icons/anchor_window.js +51 -0
- package/dist/components/common/icons/arrow-down-alt.d.ts +9 -9
- package/dist/components/common/icons/arrow-down-alt.js +58 -0
- package/dist/components/common/icons/arrow-down-solid.d.ts +9 -9
- package/dist/components/common/icons/arrow-down-solid.js +58 -0
- package/dist/components/common/icons/arrow-down.d.ts +9 -9
- package/dist/components/common/icons/arrow-down.js +58 -0
- package/dist/components/common/icons/arrow-left.d.ts +9 -9
- package/dist/components/common/icons/arrow-left.js +61 -0
- package/dist/components/common/icons/arrow-right.d.ts +9 -9
- package/dist/components/common/icons/arrow-right.js +58 -0
- package/dist/components/common/icons/arrow-up-alt.d.ts +9 -9
- package/dist/components/common/icons/arrow-up-alt.js +59 -0
- package/dist/components/common/icons/arrow-up-solid.d.ts +9 -9
- package/dist/components/common/icons/arrow-up-solid.js +58 -0
- package/dist/components/common/icons/arrow-up.d.ts +9 -9
- package/dist/components/common/icons/arrow-up.js +58 -0
- package/dist/components/common/icons/base.d.ts +29 -29
- package/dist/components/common/icons/base.js +94 -0
- package/dist/components/common/icons/bug.d.ts +9 -9
- package/dist/components/common/icons/bug.js +60 -0
- package/dist/components/common/icons/cancel.d.ts +9 -9
- package/dist/components/common/icons/cancel.js +58 -0
- package/dist/components/common/icons/checkmark.d.ts +10 -10
- package/dist/components/common/icons/checkmark.js +64 -0
- package/dist/components/common/icons/chevron-right.js +68 -0
- package/dist/components/common/icons/clipboard.d.ts +9 -9
- package/dist/components/common/icons/clipboard.js +59 -0
- package/dist/components/common/icons/clock.d.ts +9 -9
- package/dist/components/common/icons/clock.js +60 -0
- package/dist/components/common/icons/close.d.ts +9 -9
- package/dist/components/common/icons/close.js +63 -0
- package/dist/components/common/icons/code-alt.d.ts +9 -9
- package/dist/components/common/icons/code-alt.js +61 -0
- package/dist/components/common/icons/copy.d.ts +9 -9
- package/dist/components/common/icons/copy.js +63 -0
- package/dist/components/common/icons/crosshairs.d.ts +9 -9
- package/dist/components/common/icons/crosshairs.js +61 -0
- package/dist/components/common/icons/cube-3d.d.ts +9 -9
- package/dist/components/common/icons/cube-3d.js +62 -0
- package/dist/components/common/icons/cursor-click.d.ts +9 -9
- package/dist/components/common/icons/cursor-click.js +62 -0
- package/dist/components/common/icons/data-table.d.ts +10 -10
- package/dist/components/common/icons/data-table.js +59 -0
- package/dist/components/common/icons/db.d.ts +10 -10
- package/dist/components/common/icons/db.js +59 -0
- package/dist/components/common/icons/delete.d.ts +9 -9
- package/dist/components/common/icons/delete.js +60 -0
- package/dist/components/common/icons/docs.d.ts +9 -9
- package/dist/components/common/icons/docs.js +74 -0
- package/dist/components/common/icons/drag-n-drop.d.ts +9 -9
- package/dist/components/common/icons/drag-n-drop.js +60 -0
- package/dist/components/common/icons/draw-polygon.d.ts +10 -10
- package/dist/components/common/icons/draw-polygon.js +78 -0
- package/dist/components/common/icons/email.d.ts +9 -9
- package/dist/components/common/icons/email.js +62 -0
- package/dist/components/common/icons/expand.d.ts +9 -9
- package/dist/components/common/icons/expand.js +60 -0
- package/dist/components/common/icons/eye-seen.d.ts +9 -9
- package/dist/components/common/icons/eye-seen.js +60 -0
- package/dist/components/common/icons/eye-unseen.d.ts +9 -9
- package/dist/components/common/icons/eye-unseen.js +60 -0
- package/dist/components/common/icons/file-type.d.ts +8 -8
- package/dist/components/common/icons/file-type.js +52 -0
- package/dist/components/common/icons/file.d.ts +9 -9
- package/dist/components/common/icons/file.js +58 -0
- package/dist/components/common/icons/files.d.ts +9 -9
- package/dist/components/common/icons/files.js +58 -0
- package/dist/components/common/icons/filter-funnel.d.ts +9 -9
- package/dist/components/common/icons/filter-funnel.js +58 -0
- package/dist/components/common/icons/free-window.d.ts +11 -11
- package/dist/components/common/icons/free-window.js +51 -0
- package/dist/components/common/icons/gear.d.ts +9 -9
- package/dist/components/common/icons/gear.js +60 -0
- package/dist/components/common/icons/hash.d.ts +9 -9
- package/dist/components/common/icons/hash.js +58 -0
- package/dist/components/common/icons/histogram.d.ts +9 -9
- package/dist/components/common/icons/histogram.js +58 -0
- package/dist/components/common/icons/index.d.ts +78 -78
- package/dist/components/common/icons/index.js +551 -0
- package/dist/components/common/icons/info.d.ts +12 -12
- package/dist/components/common/icons/info.js +71 -0
- package/dist/components/common/icons/layers.d.ts +9 -9
- package/dist/components/common/icons/layers.js +58 -0
- package/dist/components/common/icons/left-arrow.d.ts +9 -9
- package/dist/components/common/icons/left-arrow.js +61 -0
- package/dist/components/common/icons/legend.d.ts +9 -9
- package/dist/components/common/icons/legend.js +58 -0
- package/dist/components/common/icons/line-chart.d.ts +9 -9
- package/dist/components/common/icons/line-chart.js +58 -0
- package/dist/components/common/icons/login.d.ts +9 -9
- package/dist/components/common/icons/login.js +61 -0
- package/dist/components/common/icons/logout.d.ts +9 -9
- package/dist/components/common/icons/logout.js +60 -0
- package/dist/components/common/icons/map-icon.d.ts +11 -11
- package/dist/components/common/icons/map-icon.js +65 -0
- package/dist/components/common/icons/map.d.ts +11 -11
- package/dist/components/common/icons/map.js +65 -0
- package/dist/components/common/icons/messages.d.ts +9 -9
- package/dist/components/common/icons/messages.js +58 -0
- package/dist/components/common/icons/minus.d.ts +9 -9
- package/dist/components/common/icons/minus.js +58 -0
- package/dist/components/common/icons/order-by-dataset.d.ts +12 -12
- package/dist/components/common/icons/order-by-dataset.js +51 -0
- package/dist/components/common/icons/order-by-list.d.ts +12 -12
- package/dist/components/common/icons/order-by-list.js +43 -0
- package/dist/components/common/icons/pause.d.ts +9 -9
- package/dist/components/common/icons/pause.js +58 -0
- package/dist/components/common/icons/picture.d.ts +9 -9
- package/dist/components/common/icons/picture.js +58 -0
- package/dist/components/common/icons/pin.d.ts +9 -9
- package/dist/components/common/icons/pin.js +62 -0
- package/dist/components/common/icons/play.d.ts +9 -9
- package/dist/components/common/icons/play.js +58 -0
- package/dist/components/common/icons/polygon.d.ts +10 -10
- package/dist/components/common/icons/polygon.js +80 -0
- package/dist/components/common/icons/rectangle.d.ts +10 -10
- package/dist/components/common/icons/rectangle.js +81 -0
- package/dist/components/common/icons/reduce.d.ts +9 -9
- package/dist/components/common/icons/reduce.js +61 -0
- package/dist/components/common/icons/reset.d.ts +9 -9
- package/dist/components/common/icons/reset.js +58 -0
- package/dist/components/common/icons/rocket.d.ts +9 -9
- package/dist/components/common/icons/rocket.js +58 -0
- package/dist/components/common/icons/save.d.ts +9 -9
- package/dist/components/common/icons/save.js +60 -0
- package/dist/components/common/icons/save2.d.ts +9 -9
- package/dist/components/common/icons/save2.js +64 -0
- package/dist/components/common/icons/search.d.ts +9 -9
- package/dist/components/common/icons/search.js +60 -0
- package/dist/components/common/icons/settings.d.ts +9 -9
- package/dist/components/common/icons/settings.js +60 -0
- package/dist/components/common/icons/share.d.ts +9 -9
- package/dist/components/common/icons/share.js +58 -0
- package/dist/components/common/icons/split.d.ts +9 -9
- package/dist/components/common/icons/split.js +86 -0
- package/dist/components/common/icons/square-select.d.ts +9 -9
- package/dist/components/common/icons/square-select.js +60 -0
- package/dist/components/common/icons/swap-horizontal.js +66 -0
- package/dist/components/common/icons/table.d.ts +9 -9
- package/dist/components/common/icons/table.js +58 -0
- package/dist/components/common/icons/trash.d.ts +9 -9
- package/dist/components/common/icons/trash.js +60 -0
- package/dist/components/common/icons/upload.d.ts +9 -9
- package/dist/components/common/icons/upload.js +58 -0
- package/dist/components/common/icons/vert-dots.d.ts +9 -9
- package/dist/components/common/icons/vert-dots.js +96 -0
- package/dist/components/common/icons/vert-three-dots.d.ts +9 -9
- package/dist/components/common/icons/vert-three-dots.js +71 -0
- package/dist/components/common/icons/warning.d.ts +10 -10
- package/dist/components/common/icons/warning.js +72 -0
- package/dist/components/common/image-preview.d.ts +15 -15
- package/dist/components/common/image-preview.js +79 -0
- package/dist/components/common/info-helper.d.ts +11 -11
- package/dist/components/common/info-helper.js +79 -0
- package/dist/components/common/item-selector/accessor.d.ts +7 -7
- package/dist/components/common/item-selector/accessor.js +54 -0
- package/dist/components/common/item-selector/chickleted-input.d.ts +21 -21
- package/dist/components/common/item-selector/chickleted-input.js +96 -0
- package/dist/components/common/item-selector/dropdown-list.d.ts +68 -68
- package/dist/components/common/item-selector/dropdown-list.js +279 -0
- package/dist/components/common/item-selector/item-selector-submenu.js +88 -0
- package/dist/components/common/item-selector/item-selector.d.ts +91 -91
- package/dist/components/common/item-selector/item-selector.js +282 -0
- package/dist/components/common/item-selector/typeahead.d.ts +115 -115
- package/dist/components/common/item-selector/typeahead.js +425 -0
- package/dist/components/common/line-chart.d.ts +34 -34
- package/dist/components/common/line-chart.js +127 -0
- package/dist/components/common/loading-spinner.d.ts +9 -9
- package/dist/components/common/loading-spinner.js +64 -0
- package/dist/components/common/logo.d.ts +8 -8
- package/dist/components/common/logo.js +85 -0
- package/dist/components/common/map-layer-selector.d.ts +13 -13
- package/dist/components/common/map-layer-selector.js +56 -0
- package/dist/components/common/modal.d.ts +49 -49
- package/dist/components/common/modal.js +165 -0
- package/dist/components/common/portaled.d.ts +527 -527
- package/dist/components/common/portaled.js +277 -0
- package/dist/components/common/progress-bar.d.ts +12 -12
- package/dist/components/common/progress-bar.js +64 -0
- package/dist/components/common/range-brush.d.ts +19 -19
- package/dist/components/common/range-brush.js +277 -0
- package/dist/components/common/range-plot.d.ts +35 -35
- package/dist/components/common/range-plot.js +130 -0
- package/dist/components/common/range-slider.d.ts +32 -32
- package/dist/components/common/range-slider.js +305 -0
- package/dist/components/common/slider/mouse-event.d.ts +27 -27
- package/dist/components/common/slider/mouse-event.js +115 -0
- package/dist/components/common/slider/slider-bar-handle.d.ts +29 -29
- package/dist/components/common/slider/slider-bar-handle.js +105 -0
- package/dist/components/common/slider/slider-handle.d.ts +33 -33
- package/dist/components/common/slider/slider-handle.js +151 -0
- package/dist/components/common/slider/slider.d.ts +70 -70
- package/dist/components/common/slider/slider.js +221 -0
- package/dist/components/common/styled-components.d.ts +119 -119
- package/dist/components/common/styled-components.js +300 -0
- package/dist/components/common/switch.d.ts +16 -16
- package/dist/components/common/switch.js +38 -0
- package/dist/components/common/time-range-slider-time-title.d.ts +9 -9
- package/dist/components/common/time-range-slider-time-title.js +79 -0
- package/dist/components/common/time-range-slider.d.ts +32 -32
- package/dist/components/common/time-range-slider.js +116 -0
- package/dist/components/common/time-slider-marker.d.ts +21 -21
- package/dist/components/common/time-slider-marker.js +136 -0
- package/dist/components/common/tippy-tooltip.d.ts +4 -4
- package/dist/components/common/tippy-tooltip.js +115 -0
- package/dist/components/common/toolbar-item.d.ts +14 -14
- package/dist/components/common/toolbar-item.js +75 -0
- package/dist/components/common/toolbar.d.ts +5 -5
- package/dist/components/common/toolbar.js +44 -0
- package/dist/components/common/vertical-toolbar.d.ts +3 -3
- package/dist/components/common/vertical-toolbar.js +33 -0
- package/dist/components/container.d.ts +39 -39
- package/dist/components/container.js +203 -0
- package/dist/components/context.d.ts +7 -7
- package/dist/components/context.js +38 -0
- package/dist/components/editor/constants.d.ts +17 -17
- package/dist/components/editor/constants.js +45 -0
- package/dist/components/editor/editor.d.ts +29 -29
- package/dist/components/editor/editor.js +226 -0
- package/dist/components/editor/feature-action-panel.d.ts +27 -27
- package/dist/components/editor/feature-action-panel.js +141 -0
- package/dist/components/editor/feature-styles.d.ts +24 -24
- package/dist/components/editor/feature-styles.js +67 -0
- package/dist/components/editor/handle-style.d.ts +38 -38
- package/dist/components/editor/handle-style.js +78 -0
- package/dist/components/filters/components.d.ts +1 -3
- package/dist/components/filters/components.js +31 -0
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.d.ts +10 -10
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +96 -0
- package/dist/components/filters/filter-panels/multi-select-filter-panel.d.ts +9 -9
- package/dist/components/filters/filter-panels/multi-select-filter-panel.js +66 -0
- package/dist/components/filters/filter-panels/new-filter-panel.d.ts +12 -12
- package/dist/components/filters/filter-panels/new-filter-panel.js +85 -0
- package/dist/components/filters/filter-panels/polygon-filter-panel.d.ts +9 -9
- package/dist/components/filters/filter-panels/polygon-filter-panel.js +85 -0
- package/dist/components/filters/filter-panels/range-filter-panel.d.ts +9 -9
- package/dist/components/filters/filter-panels/range-filter-panel.js +66 -0
- package/dist/components/filters/filter-panels/single-select-filter-panel.d.ts +9 -9
- package/dist/components/filters/filter-panels/single-select-filter-panel.js +66 -0
- package/dist/components/filters/filter-panels/time-range-filter-panel.d.ts +8 -8
- package/dist/components/filters/filter-panels/time-range-filter-panel.js +80 -0
- package/dist/components/filters/filter-panels/types.d.ts +36 -36
- package/dist/components/filters/filter-panels/types.js +6 -0
- package/dist/components/filters/index.d.ts +5 -5
- package/dist/components/filters/index.js +42 -0
- package/dist/components/filters/multi-select-filter.d.ts +3 -3
- package/dist/components/filters/multi-select-filter.js +48 -0
- package/dist/components/filters/polygon-filter.d.ts +4 -4
- package/dist/components/filters/polygon-filter.js +85 -0
- package/dist/components/filters/range-filter.d.ts +8 -8
- package/dist/components/filters/range-filter.js +48 -0
- package/dist/components/filters/single-select-filter.d.ts +3 -3
- package/dist/components/filters/single-select-filter.js +57 -0
- package/dist/components/filters/time-range-filter.d.ts +28 -28
- package/dist/components/filters/time-range-filter.js +75 -0
- package/dist/components/filters/time-widget.d.ts +14 -14
- package/dist/components/filters/time-widget.js +162 -0
- package/dist/components/filters/types.d.ts +53 -53
- package/dist/components/filters/types.js +6 -0
- package/dist/components/geocoder/geocoder.d.ts +33 -33
- package/dist/components/geocoder/geocoder.js +282 -0
- package/dist/components/geocoder-panel.d.ts +28 -28
- package/dist/components/geocoder-panel.js +192 -0
- package/dist/components/index.d.ts +165 -165
- package/dist/components/index.js +1474 -0
- package/dist/components/injector.d.ts +25 -25
- package/dist/components/injector.js +162 -0
- package/dist/components/kepler-gl.d.ts +302 -302
- package/dist/components/kepler-gl.js +487 -0
- package/dist/components/map/coordinate-info.d.ts +7 -7
- package/dist/components/map/coordinate-info.js +59 -0
- package/dist/components/map/layer-hover-info.d.ts +13 -13
- package/dist/components/map/layer-hover-info.js +167 -0
- package/dist/components/map/layer-selector-panel.d.ts +22 -22
- package/dist/components/map/layer-selector-panel.js +103 -0
- package/dist/components/map/locale-panel.d.ts +16 -16
- package/dist/components/map/locale-panel.js +103 -0
- package/dist/components/map/map-control-panel.d.ts +14 -14
- package/dist/components/map/map-control-panel.js +97 -0
- package/dist/components/map/map-control-toolbar.d.ts +2 -2
- package/dist/components/map/map-control-toolbar.js +35 -0
- package/dist/components/map/map-control-tooltip.d.ts +7 -7
- package/dist/components/map/map-control-tooltip.js +48 -0
- package/dist/components/map/map-control.d.ts +44 -44
- package/dist/components/map/map-control.js +79 -0
- package/dist/components/map/map-draw-panel.d.ts +21 -21
- package/dist/components/map/map-draw-panel.js +131 -0
- package/dist/components/map/map-legend-panel.d.ts +23 -23
- package/dist/components/map/map-legend-panel.js +152 -0
- package/dist/components/map/map-legend.d.ts +55 -55
- package/dist/components/map/map-legend.js +234 -0
- package/dist/components/map/map-popover.d.ts +37 -37
- package/dist/components/map/map-popover.js +191 -0
- package/dist/components/map/split-map-button.d.ts +19 -19
- package/dist/components/map/split-map-button.js +89 -0
- package/dist/components/map/toggle-3d-button.d.ts +16 -16
- package/dist/components/map/toggle-3d-button.js +79 -0
- package/dist/components/map-container.d.ts +58 -58
- package/dist/components/map-container.js +502 -0
- package/dist/components/maps-layout.d.ts +10 -10
- package/dist/components/maps-layout.js +57 -0
- package/dist/components/modal-container.d.ts +65 -65
- package/dist/components/modal-container.js +459 -0
- package/dist/components/modals/add-map-style-modal.d.ts +17 -17
- package/dist/components/modals/add-map-style-modal.js +250 -0
- package/dist/components/modals/cloud-tile.d.ts +15 -15
- package/dist/components/modals/cloud-tile.js +124 -0
- package/dist/components/modals/data-table-modal.d.ts +29 -29
- package/dist/components/modals/data-table-modal.js +223 -0
- package/dist/components/modals/delete-data-modal.d.ts +10 -10
- package/dist/components/modals/delete-data-modal.js +58 -0
- package/dist/components/modals/error-display.d.ts +6 -6
- package/dist/components/modals/error-display.js +44 -0
- package/dist/components/modals/export-data-modal.d.ts +25 -25
- package/dist/components/modals/export-data-modal.js +194 -0
- package/dist/components/modals/export-image-modal.d.ts +18 -18
- package/dist/components/modals/export-image-modal.js +139 -0
- package/dist/components/modals/export-map-modal/components.d.ts +8 -8
- package/dist/components/modals/export-map-modal/components.js +51 -0
- package/dist/components/modals/export-map-modal/export-html-map.d.ts +12 -12
- package/dist/components/modals/export-map-modal/export-html-map.js +140 -0
- package/dist/components/modals/export-map-modal/export-json-map.d.ts +9 -9
- package/dist/components/modals/export-map-modal/export-json-map.js +98 -0
- package/dist/components/modals/export-map-modal/export-map-modal.d.ts +27 -27
- package/dist/components/modals/export-map-modal/export-map-modal.js +101 -0
- package/dist/components/modals/image-modal-container.d.ts +18 -18
- package/dist/components/modals/image-modal-container.js +83 -0
- package/dist/components/modals/load-data-modal.d.ts +33 -33
- package/dist/components/modals/load-data-modal.js +93 -0
- package/dist/components/modals/load-storage-map.d.ts +26 -26
- package/dist/components/modals/load-storage-map.js +251 -0
- package/dist/components/modals/loading-dialog.d.ts +7 -7
- package/dist/components/modals/loading-dialog.js +54 -0
- package/dist/components/modals/modal-dialog.d.ts +2 -2
- package/dist/components/modals/modal-dialog.js +33 -0
- package/dist/components/modals/modal-tabs.d.ts +27 -27
- package/dist/components/modals/modal-tabs.js +99 -0
- package/dist/components/modals/overwrite-map-modal.d.ts +16 -16
- package/dist/components/modals/overwrite-map-modal.js +81 -0
- package/dist/components/modals/provider-modal-container.d.ts +23 -23
- package/dist/components/modals/provider-modal-container.js +79 -0
- package/dist/components/modals/save-map-modal.d.ts +29 -29
- package/dist/components/modals/save-map-modal.js +201 -0
- package/dist/components/modals/share-map-modal.d.ts +30 -30
- package/dist/components/modals/share-map-modal.js +188 -0
- package/dist/components/modals/status-panel.d.ts +13 -13
- package/dist/components/modals/status-panel.js +82 -0
- package/dist/components/modals/storage-map-viewer.d.ts +21 -21
- package/dist/components/modals/storage-map-viewer.js +115 -0
- package/dist/components/notification-panel/notification-item.d.ts +66 -66
- package/dist/components/notification-panel/notification-item.js +139 -0
- package/dist/components/notification-panel.d.ts +61 -61
- package/dist/components/notification-panel.js +74 -0
- package/dist/components/performance.d.ts +4 -4
- package/dist/components/performance.js +110 -0
- package/dist/components/plot-container.d.ts +24 -24
- package/dist/components/plot-container.js +240 -0
- package/dist/components/side-panel/cloud-storage-dropdown.d.ts +6 -6
- package/dist/components/side-panel/cloud-storage-dropdown.js +57 -0
- package/dist/components/side-panel/common/dataset-info.d.ts +3 -3
- package/dist/components/side-panel/common/dataset-info.js +50 -0
- package/dist/components/side-panel/common/dataset-tag.d.ts +3 -3
- package/dist/components/side-panel/common/dataset-tag.js +75 -0
- package/dist/components/side-panel/common/dataset-title.d.ts +8 -8
- package/dist/components/side-panel/common/dataset-title.js +185 -0
- package/dist/components/side-panel/common/source-data-catalog.d.ts +9 -9
- package/dist/components/side-panel/common/source-data-catalog.js +66 -0
- package/dist/components/side-panel/common/source-data-selector.d.ts +8 -8
- package/dist/components/side-panel/common/source-data-selector.js +119 -0
- package/dist/components/side-panel/common/types.d.ts +58 -58
- package/dist/components/side-panel/common/types.js +6 -0
- package/dist/components/side-panel/custom-panel.d.ts +9 -9
- package/dist/components/side-panel/custom-panel.js +56 -0
- package/dist/components/side-panel/filter-manager.d.ts +20 -20
- package/dist/components/side-panel/filter-manager.js +113 -0
- package/dist/components/side-panel/filter-panel/filter-panel-header.d.ts +21 -21
- package/dist/components/side-panel/filter-panel/filter-panel-header.js +67 -0
- package/dist/components/side-panel/filter-panel/filter-panel.d.ts +23 -23
- package/dist/components/side-panel/filter-panel/filter-panel.js +110 -0
- package/dist/components/side-panel/interaction-manager.d.ts +14 -14
- package/dist/components/side-panel/interaction-manager.js +51 -0
- package/dist/components/side-panel/interaction-panel/brush-config.d.ts +15 -15
- package/dist/components/side-panel/interaction-panel/brush-config.js +58 -0
- package/dist/components/side-panel/interaction-panel/interaction-panel.d.ts +19 -19
- package/dist/components/side-panel/interaction-panel/interaction-panel.js +137 -0
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +28 -28
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +204 -0
- package/dist/components/side-panel/interaction-panel/tooltip-config.d.ts +38 -38
- package/dist/components/side-panel/interaction-panel/tooltip-config.js +155 -0
- package/dist/components/side-panel/layer-manager.d.ts +46 -46
- package/dist/components/side-panel/layer-manager.js +185 -0
- package/dist/components/side-panel/layer-panel/add-layer-button.d.ts +10 -10
- package/dist/components/side-panel/layer-panel/add-layer-button.js +147 -0
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.d.ts +8 -8
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +38 -0
- package/dist/components/side-panel/layer-panel/color-palette.d.ts +13 -13
- package/dist/components/side-panel/layer-panel/color-palette.js +79 -0
- package/dist/components/side-panel/layer-panel/color-range-selector.d.ts +129 -129
- package/dist/components/side-panel/layer-panel/color-range-selector.js +329 -0
- package/dist/components/side-panel/layer-panel/color-selector.d.ts +101 -101
- package/dist/components/side-panel/layer-panel/color-selector.js +177 -0
- package/dist/components/side-panel/layer-panel/column-selector.d.ts +22 -22
- package/dist/components/side-panel/layer-panel/column-selector.js +66 -0
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.d.ts +6 -6
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +36 -0
- package/dist/components/side-panel/layer-panel/custom-palette.d.ts +38 -38
- package/dist/components/side-panel/layer-panel/custom-palette.js +278 -0
- package/dist/components/side-panel/layer-panel/custom-picker.d.ts +67 -67
- package/dist/components/side-panel/layer-panel/custom-picker.js +106 -0
- package/dist/components/side-panel/layer-panel/dataset-layer-group.d.ts +24 -24
- package/dist/components/side-panel/layer-panel/dataset-layer-group.js +81 -0
- package/dist/components/side-panel/layer-panel/dataset-layer-section.d.ts +25 -25
- package/dist/components/side-panel/layer-panel/dataset-layer-section.js +74 -0
- package/dist/components/side-panel/layer-panel/dataset-section.d.ts +26 -26
- package/dist/components/side-panel/layer-panel/dataset-section.js +91 -0
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.d.ts +10 -10
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +53 -0
- package/dist/components/side-panel/layer-panel/hex-column-config.d.ts +62 -62
- package/dist/components/side-panel/layer-panel/hex-column-config.js +74 -0
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.d.ts +8 -8
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +18 -0
- package/dist/components/side-panel/layer-panel/layer-column-config.d.ts +20 -20
- package/dist/components/side-panel/layer-panel/layer-column-config.js +86 -0
- package/dist/components/side-panel/layer-panel/layer-config-group.d.ts +37 -37
- package/dist/components/side-panel/layer-panel/layer-config-group.js +209 -0
- package/dist/components/side-panel/layer-panel/layer-configurator.d.ts +415 -415
- package/dist/components/side-panel/layer-panel/layer-configurator.js +977 -0
- package/dist/components/side-panel/layer-panel/layer-list.d.ts +20 -20
- package/dist/components/side-panel/layer-panel/layer-list.js +168 -0
- package/dist/components/side-panel/layer-panel/layer-panel-header.d.ts +43 -43
- package/dist/components/side-panel/layer-panel/layer-panel-header.js +194 -0
- package/dist/components/side-panel/layer-panel/layer-panel.d.ts +40 -40
- package/dist/components/side-panel/layer-panel/layer-panel.js +161 -0
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.d.ts +17 -17
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +95 -0
- package/dist/components/side-panel/layer-panel/layer-type-list-item.d.ts +11 -11
- package/dist/components/side-panel/layer-panel/layer-type-list-item.js +75 -0
- package/dist/components/side-panel/layer-panel/layer-type-selector.d.ts +23 -23
- package/dist/components/side-panel/layer-panel/layer-type-selector.js +87 -0
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.d.ts +23 -23
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +106 -0
- package/dist/components/side-panel/layer-panel/panel-view-list-toggle.d.ts +36 -36
- package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +116 -0
- package/dist/components/side-panel/layer-panel/single-color-palette.d.ts +12 -12
- package/dist/components/side-panel/layer-panel/single-color-palette.js +68 -0
- package/dist/components/side-panel/layer-panel/text-label-panel.d.ts +18 -18
- package/dist/components/side-panel/layer-panel/text-label-panel.js +157 -0
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.d.ts +35 -35
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +148 -0
- package/dist/components/side-panel/layer-panel/vis-config-slider.d.ts +20 -20
- package/dist/components/side-panel/layer-panel/vis-config-slider.js +177 -0
- package/dist/components/side-panel/layer-panel/vis-config-switch.d.ts +16 -16
- package/dist/components/side-panel/layer-panel/vis-config-switch.js +73 -0
- package/dist/components/side-panel/map-manager.d.ts +21 -21
- package/dist/components/side-panel/map-manager.js +133 -0
- package/dist/components/side-panel/map-style-panel/map-layer-selector.d.ts +19 -19
- package/dist/components/side-panel/map-style-panel/map-layer-selector.js +103 -0
- package/dist/components/side-panel/map-style-panel/map-style-selector.d.ts +16 -16
- package/dist/components/side-panel/map-style-panel/map-style-selector.js +80 -0
- package/dist/components/side-panel/panel-dropdown.d.ts +18 -18
- package/dist/components/side-panel/panel-dropdown.js +71 -0
- package/dist/components/side-panel/panel-header-action.d.ts +20 -20
- package/dist/components/side-panel/panel-header-action.js +103 -0
- package/dist/components/side-panel/panel-header.d.ts +78 -78
- package/dist/components/side-panel/panel-header.js +301 -0
- package/dist/components/side-panel/panel-tab.d.ts +20 -20
- package/dist/components/side-panel/panel-tab.js +72 -0
- package/dist/components/side-panel/panel-title.d.ts +4 -4
- package/dist/components/side-panel/panel-title.js +44 -0
- package/dist/components/side-panel/panel-toggle.d.ts +14 -14
- package/dist/components/side-panel/panel-toggle.js +65 -0
- package/dist/components/side-panel/side-bar.d.ts +76 -76
- package/dist/components/side-panel/side-bar.js +140 -0
- package/dist/components/side-panel.d.ts +134 -134
- package/dist/components/side-panel.js +235 -0
- package/dist/components/types.d.ts +44 -44
- package/dist/components/types.js +6 -0
- package/dist/connect/keplergl-connect.d.ts +5 -5
- package/dist/connect/keplergl-connect.js +59 -0
- package/dist/connect/with-local-selector.d.ts +6 -6
- package/dist/connect/with-local-selector.js +102 -0
- package/dist/constants/action-types.d.ts +111 -111
- package/dist/constants/action-types.js +184 -0
- package/dist/constants/color-palette.d.ts +491 -491
- package/dist/constants/color-palette.js +536 -0
- package/dist/constants/color-ranges.d.ts +24 -24
- package/dist/constants/color-ranges.js +83 -0
- package/dist/constants/custom-color-ranges.d.ts +37 -37
- package/dist/constants/custom-color-ranges.js +410 -0
- package/dist/constants/default-settings.d.ts +773 -773
- package/dist/constants/default-settings.js +832 -0
- package/dist/constants/index.d.ts +9 -9
- package/dist/constants/index.js +387 -0
- package/dist/constants/keyevent.d.ts +2 -2
- package/dist/constants/keyevent.js +43 -0
- package/dist/constants/tooltip.d.ts +165 -165
- package/dist/constants/tooltip.js +202 -0
- package/dist/constants/user-feedbacks.d.ts +5 -5
- package/dist/constants/user-feedbacks.js +32 -0
- package/dist/constants/user-guides.d.ts +9 -9
- package/dist/constants/user-guides.js +36 -0
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.d.ts +13 -13
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +92 -0
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.d.ts +7 -7
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +181 -0
- package/dist/deckgl-layers/3d-building-layer/types.d.ts +37 -0
- package/dist/deckgl-layers/3d-building-layer/types.js +6 -0
- package/dist/deckgl-layers/cluster-layer/cluster-layer.js +312 -0
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.d.ts +6 -6
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +75 -0
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.d.ts +13 -13
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +96 -0
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.d.ts +13 -13
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +96 -0
- package/dist/deckgl-layers/layer-utils/cluster-utils.js +107 -0
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.d.ts +91 -91
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +585 -0
- package/dist/deckgl-layers/layer-utils/shader-utils.d.ts +1 -1
- package/dist/deckgl-layers/layer-utils/shader-utils.js +46 -0
- package/dist/deckgl-layers/line-layer/line-layer.d.ts +12 -12
- package/dist/deckgl-layers/line-layer/line-layer.js +106 -0
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.d.ts +8 -8
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +80 -0
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.d.ts +18 -18
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +123 -0
- package/dist/index.d.ts +11 -11
- package/dist/index.js +179 -0
- package/dist/layers/aggregation-layer.d.ts +70 -70
- package/dist/layers/aggregation-layer.js +392 -0
- package/dist/layers/arc-layer/arc-layer-icon.d.ts +16 -16
- package/dist/layers/arc-layer/arc-layer-icon.js +76 -0
- package/dist/layers/arc-layer/arc-layer.d.ts +143 -143
- package/dist/layers/arc-layer/arc-layer.js +252 -0
- package/dist/layers/base-layer.d.ts +436 -436
- package/dist/layers/base-layer.js +1703 -0
- package/dist/layers/cluster-layer/cluster-layer-icon.d.ts +16 -16
- package/dist/layers/cluster-layer/cluster-layer-icon.js +79 -0
- package/dist/layers/cluster-layer/cluster-layer.d.ts +39 -39
- package/dist/layers/cluster-layer/cluster-layer.js +139 -0
- package/dist/layers/default-layer-icon.d.ts +14 -14
- package/dist/layers/default-layer-icon.js +86 -0
- package/dist/layers/geojson-layer/geojson-layer-icon.d.ts +15 -15
- package/dist/layers/geojson-layer/geojson-layer-icon.js +90 -0
- package/dist/layers/geojson-layer/geojson-layer.d.ts +227 -230
- package/dist/layers/geojson-layer/geojson-layer.js +423 -0
- package/dist/layers/geojson-layer/geojson-utils.d.ts +44 -44
- package/dist/layers/geojson-layer/geojson-utils.js +184 -0
- package/dist/layers/grid-layer/grid-layer-icon.d.ts +15 -15
- package/dist/layers/grid-layer/grid-layer-icon.js +135 -0
- package/dist/layers/grid-layer/grid-layer.d.ts +74 -74
- package/dist/layers/grid-layer/grid-layer.js +104 -0
- package/dist/layers/grid-layer/grid-utils.d.ts +24 -24
- package/dist/layers/grid-layer/grid-utils.js +59 -0
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.d.ts +16 -16
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +70 -0
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.d.ts +170 -170
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +321 -0
- package/dist/layers/h3-hexagon-layer/h3-utils.d.ts +20 -20
- package/dist/layers/h3-hexagon-layer/h3-utils.js +86 -0
- package/dist/layers/heatmap-layer/heatmap-layer-icon.d.ts +15 -15
- package/dist/layers/heatmap-layer/heatmap-layer-icon.js +87 -0
- package/dist/layers/heatmap-layer/heatmap-layer.d.ts +144 -144
- package/dist/layers/heatmap-layer/heatmap-layer.js +236 -0
- package/dist/layers/hexagon-layer/hexagon-layer-icon.d.ts +15 -15
- package/dist/layers/hexagon-layer/hexagon-layer-icon.js +99 -0
- package/dist/layers/hexagon-layer/hexagon-layer.d.ts +78 -78
- package/dist/layers/hexagon-layer/hexagon-layer.js +108 -0
- package/dist/layers/hexagon-layer/hexagon-utils.d.ts +7 -7
- package/dist/layers/hexagon-layer/hexagon-utils.js +62 -0
- package/dist/layers/icon-layer/icon-info-modal.d.ts +3 -3
- package/dist/layers/icon-layer/icon-info-modal.js +115 -0
- package/dist/layers/icon-layer/icon-layer-icon.d.ts +15 -15
- package/dist/layers/icon-layer/icon-layer-icon.js +72 -0
- package/dist/layers/icon-layer/icon-layer.d.ts +119 -119
- package/dist/layers/icon-layer/icon-layer.js +366 -0
- package/dist/layers/index.d.ts +53 -53
- package/dist/layers/index.js +105 -0
- package/dist/layers/layer-factory.d.ts +150 -150
- package/dist/layers/layer-factory.js +517 -0
- package/dist/layers/layer-text-label.d.ts +7 -7
- package/dist/layers/layer-text-label.js +60 -0
- package/dist/layers/layer-update.d.ts +9 -9
- package/dist/layers/layer-update.js +73 -0
- package/dist/layers/line-layer/line-layer-icon.d.ts +15 -15
- package/dist/layers/line-layer/line-layer-icon.js +78 -0
- package/dist/layers/line-layer/line-layer.d.ts +136 -136
- package/dist/layers/line-layer/line-layer.js +191 -0
- package/dist/layers/mapbox-utils.d.ts +57 -57
- package/dist/layers/mapbox-utils.js +186 -0
- package/dist/layers/mapboxgl-layer.d.ts +87 -87
- package/dist/layers/mapboxgl-layer.js +201 -0
- package/dist/layers/point-layer/point-layer-icon.d.ts +15 -15
- package/dist/layers/point-layer/point-layer-icon.js +93 -0
- package/dist/layers/point-layer/point-layer.d.ts +272 -272
- package/dist/layers/point-layer/point-layer.js +457 -0
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.d.ts +189 -189
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +306 -0
- package/dist/layers/s2-geometry-layer/s2-layer-icon.d.ts +15 -15
- package/dist/layers/s2-geometry-layer/s2-layer-icon.js +69 -0
- package/dist/layers/s2-geometry-layer/s2-utils.d.ts +7 -7
- package/dist/layers/s2-geometry-layer/s2-utils.js +51 -0
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.d.ts +3 -3
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +54 -0
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.d.ts +15 -15
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +150 -0
- package/dist/layers/scenegraph-layer/scenegraph-layer.d.ts +80 -80
- package/dist/layers/scenegraph-layer/scenegraph-layer.js +230 -0
- package/dist/layers/trip-layer/trip-info-modal.d.ts +3 -3
- package/dist/layers/trip-layer/trip-info-modal.js +59 -0
- package/dist/layers/trip-layer/trip-layer-icon.d.ts +15 -15
- package/dist/layers/trip-layer/trip-layer-icon.js +88 -0
- package/dist/layers/trip-layer/trip-layer.d.ts +157 -157
- package/dist/layers/trip-layer/trip-layer.js +369 -0
- package/dist/layers/trip-layer/trip-utils.d.ts +31 -31
- package/dist/layers/trip-layer/trip-utils.js +180 -0
- package/dist/layers/types.d.ts +15 -15
- package/dist/layers/types.js +44 -0
- package/dist/localization/formatted-message.d.ts +12 -12
- package/dist/localization/formatted-message.js +39 -0
- package/dist/localization/index.d.ts +5 -5
- package/dist/localization/index.js +54 -0
- package/dist/localization/locales.d.ts +27 -27
- package/dist/localization/locales.js +59 -0
- package/dist/localization/messages.d.ts +4 -4
- package/dist/localization/messages.js +37 -0
- package/dist/localization/translations/ca.d.ts +438 -438
- package/dist/localization/translations/ca.js +466 -0
- package/dist/localization/translations/cn.d.ts +441 -441
- package/dist/localization/translations/cn.js +469 -0
- package/dist/localization/translations/en.d.ts +466 -466
- package/dist/localization/translations/en.js +494 -0
- package/dist/localization/translations/es.d.ts +438 -438
- package/dist/localization/translations/es.js +466 -0
- package/dist/localization/translations/fi.d.ts +410 -410
- package/dist/localization/translations/fi.js +438 -0
- package/dist/localization/translations/ja.d.ts +439 -439
- package/dist/localization/translations/ja.js +467 -0
- package/dist/localization/translations/pt.d.ts +410 -410
- package/dist/localization/translations/pt.js +438 -0
- package/dist/localization/translations/ru.d.ts +447 -447
- package/dist/localization/translations/ru.js +475 -0
- package/dist/middleware/index.d.ts +8 -8
- package/dist/middleware/index.js +44 -0
- package/dist/processors/data-processor.d.ts +242 -242
- package/dist/processors/data-processor.js +721 -0
- package/dist/processors/file-handler.d.ts +28 -28
- package/dist/processors/file-handler.js +357 -0
- package/dist/processors/index.d.ts +3 -3
- package/dist/processors/index.js +39 -0
- package/dist/processors/types.d.ts +21 -21
- package/dist/processors/types.js +6 -0
- package/dist/reducers/combined-updaters.d.ts +52 -52
- package/dist/reducers/combined-updaters.js +180 -0
- package/dist/reducers/composer-helpers.d.ts +21 -21
- package/dist/reducers/composer-helpers.js +111 -0
- package/dist/reducers/composers.d.ts +12 -12
- package/dist/reducers/composers.js +40 -0
- package/dist/reducers/core.d.ts +65 -65
- package/dist/reducers/core.js +119 -0
- package/dist/reducers/index.d.ts +19 -19
- package/dist/reducers/index.js +137 -0
- package/dist/reducers/map-state-updaters.d.ts +96 -96
- package/dist/reducers/map-state-updaters.js +220 -0
- package/dist/reducers/map-state.d.ts +4 -4
- package/dist/reducers/map-state.js +52 -0
- package/dist/reducers/map-style-updaters.d.ts +204 -204
- package/dist/reducers/map-style-updaters.js +473 -0
- package/dist/reducers/map-style.d.ts +16 -16
- package/dist/reducers/map-style.js +51 -0
- package/dist/reducers/provider-state-updaters.d.ts +41 -41
- package/dist/reducers/provider-state-updaters.js +421 -0
- package/dist/reducers/provider-state.d.ts +4 -4
- package/dist/reducers/provider-state.js +53 -0
- package/dist/reducers/root.d.ts +24 -24
- package/dist/reducers/root.js +212 -0
- package/dist/reducers/types.d.ts +16 -16
- package/dist/reducers/types.js +6 -0
- package/dist/reducers/ui-state-updaters.d.ts +433 -433
- package/dist/reducers/ui-state-updaters.js +744 -0
- package/dist/reducers/ui-state.d.ts +3 -3
- package/dist/reducers/ui-state.js +54 -0
- package/dist/reducers/vis-state-merger.d.ts +110 -110
- package/dist/reducers/vis-state-merger.js +569 -0
- package/dist/reducers/vis-state-selectors.d.ts +10 -10
- package/dist/reducers/vis-state-selectors.js +47 -0
- package/dist/reducers/vis-state-updaters.d.ts +645 -645
- package/dist/reducers/vis-state-updaters.js +2102 -0
- package/dist/reducers/vis-state.d.ts +4 -4
- package/dist/reducers/vis-state.js +53 -0
- package/dist/schemas/dataset-schema.d.ts +17 -17
- package/dist/schemas/dataset-schema.js +166 -0
- package/dist/schemas/index.d.ts +8 -8
- package/dist/schemas/index.js +125 -0
- package/dist/schemas/map-state-schema.d.ts +23 -23
- package/dist/schemas/map-state-schema.js +53 -0
- package/dist/schemas/map-style-schema.d.ts +38 -38
- package/dist/schemas/map-style-schema.js +106 -0
- package/dist/schemas/schema-manager.d.ts +271 -271
- package/dist/schemas/schema-manager.js +246 -0
- package/dist/schemas/schema-utils.d.ts +11 -11
- package/dist/schemas/schema-utils.js +58 -0
- package/dist/schemas/schema.d.ts +37 -37
- package/dist/schemas/schema.js +119 -0
- package/dist/schemas/versions.d.ts +5 -5
- package/dist/schemas/versions.js +34 -0
- package/dist/schemas/vis-state-schema.d.ts +214 -214
- package/dist/schemas/vis-state-schema.js +886 -0
- package/dist/styles/base.d.ts +1530 -1530
- package/dist/styles/base.js +1301 -0
- package/dist/styles/index.d.ts +2 -2
- package/dist/styles/index.js +28 -0
- package/dist/styles/media-breakpoints.d.ts +13 -13
- package/dist/styles/media-breakpoints.js +70 -0
- package/dist/tasks/tasks.d.ts +15 -15
- package/dist/tasks/tasks.js +94 -0
- package/dist/templates/export-map-html.d.ts +9 -9
- package/dist/templates/export-map-html.js +42 -0
- package/dist/utils/aggregate-utils.d.ts +3 -3
- package/dist/utils/aggregate-utils.js +71 -0
- package/dist/utils/color-utils.d.ts +44 -44
- package/dist/utils/color-utils.js +144 -0
- package/dist/utils/custom-scales.js +22 -0
- package/dist/utils/data-scale-utils.d.ts +23 -23
- package/dist/utils/data-scale-utils.js +70 -0
- package/dist/utils/data-utils.d.ts +115 -115
- package/dist/utils/data-utils.js +441 -0
- package/dist/utils/dataset-utils.d.ts +38 -38
- package/dist/utils/dataset-utils.js +236 -0
- package/dist/utils/dom-to-image.d.ts +73 -73
- package/dist/utils/dom-to-image.js +479 -0
- package/dist/utils/dom-utils.d.ts +20 -20
- package/dist/utils/dom-utils.js +343 -0
- package/dist/utils/export-utils.d.ts +56 -56
- package/dist/utils/export-utils.js +266 -0
- package/dist/utils/filter-utils.d.ts +267 -267
- package/dist/utils/filter-utils.js +1081 -0
- package/dist/utils/gl-utils.d.ts +1 -1
- package/dist/utils/gl-utils.js +43 -0
- package/dist/utils/gpu-filter-utils.d.ts +28 -28
- package/dist/utils/gpu-filter-utils.js +241 -0
- package/dist/utils/index.d.ts +22 -22
- package/dist/utils/index.js +361 -0
- package/dist/utils/interaction-utils.d.ts +36 -36
- package/dist/utils/interaction-utils.js +170 -0
- package/dist/utils/layer-utils.d.ts +54 -54
- package/dist/utils/layer-utils.js +200 -0
- package/dist/utils/locale-utils.d.ts +2 -2
- package/dist/utils/locale-utils.js +56 -0
- package/dist/utils/map-info-utils.d.ts +1 -1
- package/dist/utils/map-info-utils.js +31 -0
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.d.ts +64 -64
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +213 -0
- package/dist/utils/map-style-utils/mapbox-utils.d.ts +3 -3
- package/dist/utils/map-style-utils/mapbox-utils.js +33 -0
- package/dist/utils/mapbox-utils.d.ts +7 -7
- package/dist/utils/mapbox-utils.js +36 -0
- package/dist/utils/notifications-utils.d.ts +54 -54
- package/dist/utils/notifications-utils.js +90 -0
- package/dist/utils/observe-dimensions.d.ts +15 -15
- package/dist/utils/observe-dimensions.js +142 -0
- package/dist/utils/projection-utils.d.ts +12 -12
- package/dist/utils/projection-utils.js +72 -0
- package/dist/utils/searcher-utils.d.ts +1 -1
- package/dist/utils/searcher-utils.js +42 -0
- package/dist/utils/split-map-utils.d.ts +29 -29
- package/dist/utils/split-map-utils.js +112 -0
- package/dist/utils/table-utils/data-container-interface.d.ts +115 -115
- package/dist/utils/table-utils/data-container-interface.js +6 -0
- package/dist/utils/table-utils/data-container-utils.d.ts +29 -29
- package/dist/utils/table-utils/data-container-utils.js +84 -0
- package/dist/utils/table-utils/data-row.d.ts +59 -59
- package/dist/utils/table-utils/data-row.js +124 -0
- package/dist/utils/table-utils/index.d.ts +1 -1
- package/dist/utils/table-utils/index.js +19 -0
- package/dist/utils/table-utils/indexed-data-container.d.ts +34 -34
- package/dist/utils/table-utils/indexed-data-container.js +228 -0
- package/dist/utils/table-utils/kepler-table.d.ts +168 -168
- package/dist/utils/table-utils/kepler-table.js +554 -0
- package/dist/utils/table-utils/row-data-container.d.ts +31 -31
- package/dist/utils/table-utils/row-data-container.js +220 -0
- package/dist/utils/utils.d.ts +98 -98
- package/dist/utils/utils.js +240 -0
- package/package.json +51 -33
- package/src/components/common/portaled.tsx +5 -9
- package/src/constants/action-types.ts +1 -1
- package/src/index.ts +1 -1
- package/src/middleware/index.ts +1 -1
- package/src/reducers/map-style-updaters.ts +1 -1
- package/src/reducers/provider-state-updaters.ts +1 -1
- package/src/reducers/root.ts +1 -1
- package/src/reducers/vis-state-updaters.ts +1 -1
- package/src/schemas/schema.ts +1 -1
- package/src/tasks/tasks.ts +1 -1
- package/dist/bundle.js +0 -54227
- package/dist/bundle.js.map +0 -1
- package/dist/deckgl-layers/layer-utils/cluster-utils.d.ts +0 -12
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.copyTable = copyTable;
|
|
8
|
+
exports.copyTableAndUpdate = copyTableAndUpdate;
|
|
9
|
+
exports["default"] = void 0;
|
|
10
|
+
exports.findPointFieldPairs = findPointFieldPairs;
|
|
11
|
+
exports.pinTableColumns = pinTableColumns;
|
|
12
|
+
exports.removeSuffixAndDelimiters = removeSuffixAndDelimiters;
|
|
13
|
+
exports.sortDatasetByColumn = sortDatasetByColumn;
|
|
14
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
18
|
+
var _console = require("global/console");
|
|
19
|
+
var _defaultSettings = require("../../constants/default-settings");
|
|
20
|
+
var _d3Array = require("d3-array");
|
|
21
|
+
var _utils = require("../utils");
|
|
22
|
+
var _gpuFilterUtils = require("../gpu-filter-utils");
|
|
23
|
+
var _filterUtils = require("../filter-utils");
|
|
24
|
+
var _dataUtils = require("../data-utils");
|
|
25
|
+
var _dataScaleUtils = require("../data-scale-utils");
|
|
26
|
+
var _dataContainerUtils = require("./data-container-utils");
|
|
27
|
+
var _colorUtils = require("../color-utils");
|
|
28
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
29
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
30
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
31
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
32
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // Copyright (c) 2022 Uber Technologies, Inc.
|
|
33
|
+
//
|
|
34
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
35
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
36
|
+
// in the Software without restriction, including without limitation the rights
|
|
37
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
38
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
39
|
+
// furnished to do so, subject to the following conditions:
|
|
40
|
+
//
|
|
41
|
+
// The above copyright notice and this permission notice shall be included in
|
|
42
|
+
// all copies or substantial portions of the Software.
|
|
43
|
+
//
|
|
44
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
45
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
46
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
47
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
48
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
49
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
50
|
+
// THE SOFTWARE.
|
|
51
|
+
// import {validateInputData} from 'processors/data-processor';
|
|
52
|
+
// Unique identifier of each field
|
|
53
|
+
var FID_KEY = 'name';
|
|
54
|
+
var KeplerTable = /*#__PURE__*/function () {
|
|
55
|
+
// fields and data
|
|
56
|
+
|
|
57
|
+
// table-injected metadata
|
|
58
|
+
|
|
59
|
+
// table-injected metadata
|
|
60
|
+
|
|
61
|
+
function KeplerTable(_ref) {
|
|
62
|
+
var _ref$info = _ref.info,
|
|
63
|
+
info = _ref$info === void 0 ? {} : _ref$info,
|
|
64
|
+
data = _ref.data,
|
|
65
|
+
color = _ref.color,
|
|
66
|
+
metadata = _ref.metadata,
|
|
67
|
+
supportedFilterTypes = _ref.supportedFilterTypes;
|
|
68
|
+
(0, _classCallCheck2["default"])(this, KeplerTable);
|
|
69
|
+
// TODO - what to do if validation fails? Can kepler handle exceptions?
|
|
70
|
+
// const validatedData = validateInputData(data);
|
|
71
|
+
// if (!validatedData) {
|
|
72
|
+
// return this;
|
|
73
|
+
// }
|
|
74
|
+
|
|
75
|
+
// @ts-expect-error
|
|
76
|
+
var dataContainer = (0, _dataContainerUtils.createDataContainer)(data.rows, {
|
|
77
|
+
fields: data.fields
|
|
78
|
+
});
|
|
79
|
+
var datasetInfo = _objectSpread({
|
|
80
|
+
id: (0, _utils.generateHashId)(4),
|
|
81
|
+
label: 'new dataset'
|
|
82
|
+
}, info || {});
|
|
83
|
+
var dataId = datasetInfo.id;
|
|
84
|
+
// @ts-expect-error
|
|
85
|
+
var fields = data.fields.map(function (f, i) {
|
|
86
|
+
return _objectSpread(_objectSpread({}, f), {}, {
|
|
87
|
+
fieldIdx: i,
|
|
88
|
+
id: f.name,
|
|
89
|
+
displayName: f.displayName || f.name,
|
|
90
|
+
valueAccessor: _dataUtils.maybeToDate.bind(null,
|
|
91
|
+
// is time
|
|
92
|
+
f.type === _defaultSettings.ALL_FIELD_TYPES.timestamp || f.type === _defaultSettings.ALL_FIELD_TYPES.date, i, f.format, dataContainer)
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
var allIndexes = dataContainer.getPlainIndex();
|
|
96
|
+
this.id = datasetInfo.id;
|
|
97
|
+
this.label = datasetInfo.label;
|
|
98
|
+
this.color = color;
|
|
99
|
+
this.metadata = _objectSpread(_objectSpread({}, metadata), {}, {
|
|
100
|
+
id: datasetInfo.id,
|
|
101
|
+
label: datasetInfo.label
|
|
102
|
+
});
|
|
103
|
+
this.dataContainer = dataContainer;
|
|
104
|
+
this.allIndexes = allIndexes;
|
|
105
|
+
this.filteredIndex = allIndexes;
|
|
106
|
+
this.filteredIndexForDomain = allIndexes;
|
|
107
|
+
this.fieldPairs = findPointFieldPairs(fields);
|
|
108
|
+
this.fields = fields;
|
|
109
|
+
this.gpuFilter = (0, _gpuFilterUtils.getGpuFilterProps)([], dataId, fields);
|
|
110
|
+
if (supportedFilterTypes) {
|
|
111
|
+
this.supportedFilterTypes = supportedFilterTypes;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Get field
|
|
117
|
+
* @param columnName
|
|
118
|
+
*/
|
|
119
|
+
return (0, _createClass2["default"])(KeplerTable, [{
|
|
120
|
+
key: "getColumnField",
|
|
121
|
+
value: function getColumnField(columnName) {
|
|
122
|
+
var field = this.fields.find(function (fd) {
|
|
123
|
+
return fd[FID_KEY] === columnName;
|
|
124
|
+
});
|
|
125
|
+
this._assetField(columnName, field);
|
|
126
|
+
return field;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Get fieldIdx
|
|
131
|
+
* @param columnName
|
|
132
|
+
*/
|
|
133
|
+
}, {
|
|
134
|
+
key: "getColumnFieldIdx",
|
|
135
|
+
value: function getColumnFieldIdx(columnName) {
|
|
136
|
+
var fieldIdx = this.fields.findIndex(function (fd) {
|
|
137
|
+
return fd[FID_KEY] === columnName;
|
|
138
|
+
});
|
|
139
|
+
this._assetField(columnName, Boolean(fieldIdx > -1));
|
|
140
|
+
return fieldIdx;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Get the value of a cell
|
|
145
|
+
*/
|
|
146
|
+
}, {
|
|
147
|
+
key: "getValue",
|
|
148
|
+
value: function getValue(columnName, rowIdx) {
|
|
149
|
+
var field = this.getColumnField(columnName);
|
|
150
|
+
return field ? field.valueAccessor({
|
|
151
|
+
index: rowIdx
|
|
152
|
+
}) : null;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Updates existing field with a new object
|
|
157
|
+
* @param fieldIdx
|
|
158
|
+
* @param newField
|
|
159
|
+
*/
|
|
160
|
+
}, {
|
|
161
|
+
key: "updateColumnField",
|
|
162
|
+
value: function updateColumnField(fieldIdx, newField) {
|
|
163
|
+
this.fields = Object.assign((0, _toConsumableArray2["default"])(this.fields), (0, _defineProperty2["default"])({}, fieldIdx, newField));
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Update dataset color by custom color
|
|
168
|
+
* @param newColor
|
|
169
|
+
*/
|
|
170
|
+
}, {
|
|
171
|
+
key: "updateTableColor",
|
|
172
|
+
value: function updateTableColor(newColor) {
|
|
173
|
+
this.color = newColor;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Save filterProps to field and retrieve it
|
|
178
|
+
* @param columnName
|
|
179
|
+
*/
|
|
180
|
+
}, {
|
|
181
|
+
key: "getColumnFilterProps",
|
|
182
|
+
value: function getColumnFilterProps(columnName) {
|
|
183
|
+
var fieldIdx = this.getColumnFieldIdx(columnName);
|
|
184
|
+
if (fieldIdx < 0) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
var field = this.fields[fieldIdx];
|
|
188
|
+
if (field.hasOwnProperty('filterProps')) {
|
|
189
|
+
return field.filterProps;
|
|
190
|
+
}
|
|
191
|
+
var fieldDomain = this.getColumnFilterDomain(field);
|
|
192
|
+
if (!fieldDomain) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
var filterProps = (0, _filterUtils.getFilterProps)(field, fieldDomain);
|
|
196
|
+
var newField = _objectSpread(_objectSpread({}, field), {}, {
|
|
197
|
+
filterProps: filterProps
|
|
198
|
+
});
|
|
199
|
+
this.updateColumnField(fieldIdx, newField);
|
|
200
|
+
return filterProps;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Apply filters to dataset, return the filtered dataset with updated `gpuFilter`, `filterRecord`, `filteredIndex`, `filteredIndexForDomain`
|
|
205
|
+
* @param filters
|
|
206
|
+
* @param layers
|
|
207
|
+
* @param opt
|
|
208
|
+
*/
|
|
209
|
+
}, {
|
|
210
|
+
key: "filterTable",
|
|
211
|
+
value: function filterTable(filters, layers, opt) {
|
|
212
|
+
var _this = this;
|
|
213
|
+
var dataContainer = this.dataContainer,
|
|
214
|
+
dataId = this.id,
|
|
215
|
+
oldFilterRecord = this.filterRecord,
|
|
216
|
+
fields = this.fields;
|
|
217
|
+
|
|
218
|
+
// if there is no filters
|
|
219
|
+
var filterRecord = (0, _filterUtils.getFilterRecord)(dataId, filters, opt || {});
|
|
220
|
+
this.filterRecord = filterRecord;
|
|
221
|
+
this.gpuFilter = (0, _gpuFilterUtils.getGpuFilterProps)(filters, dataId, fields);
|
|
222
|
+
|
|
223
|
+
// const newDataset = set(['filterRecord'], filterRecord, dataset);
|
|
224
|
+
|
|
225
|
+
if (!filters.length) {
|
|
226
|
+
this.filteredIndex = this.allIndexes;
|
|
227
|
+
this.filteredIndexForDomain = this.allIndexes;
|
|
228
|
+
return this;
|
|
229
|
+
}
|
|
230
|
+
this.changedFilters = (0, _filterUtils.diffFilters)(filterRecord, oldFilterRecord);
|
|
231
|
+
|
|
232
|
+
// generate 2 sets of filter result
|
|
233
|
+
// filteredIndex used to calculate layer data
|
|
234
|
+
// filteredIndexForDomain used to calculate layer Domain
|
|
235
|
+
var shouldCalDomain = Boolean(this.changedFilters.dynamicDomain);
|
|
236
|
+
var shouldCalIndex = Boolean(this.changedFilters.cpu);
|
|
237
|
+
var filterResult = {};
|
|
238
|
+
if (shouldCalDomain || shouldCalIndex) {
|
|
239
|
+
var dynamicDomainFilters = shouldCalDomain ? filterRecord.dynamicDomain : null;
|
|
240
|
+
var cpuFilters = shouldCalIndex ? filterRecord.cpu : null;
|
|
241
|
+
var filterFuncs = filters.reduce(function (acc, filter) {
|
|
242
|
+
var fieldIndex = (0, _gpuFilterUtils.getDatasetFieldIndexForFilter)(_this.id, filter);
|
|
243
|
+
var field = fieldIndex !== -1 ? fields[fieldIndex] : null;
|
|
244
|
+
return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, filter.id, (0, _filterUtils.getFilterFunction)(field, _this.id, filter, layers, dataContainer)));
|
|
245
|
+
}, {});
|
|
246
|
+
filterResult = (0, _filterUtils.filterDataByFilterTypes)({
|
|
247
|
+
dynamicDomainFilters: dynamicDomainFilters,
|
|
248
|
+
cpuFilters: cpuFilters,
|
|
249
|
+
filterFuncs: filterFuncs
|
|
250
|
+
}, dataContainer);
|
|
251
|
+
}
|
|
252
|
+
this.filteredIndex = filterResult.filteredIndex || this.filteredIndex;
|
|
253
|
+
this.filteredIndexForDomain = filterResult.filteredIndexForDomain || this.filteredIndexForDomain;
|
|
254
|
+
return this;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Apply filters to a dataset all on CPU, assign to `filteredIdxCPU`, `filterRecordCPU`
|
|
259
|
+
* @param filters
|
|
260
|
+
* @param layers
|
|
261
|
+
*/
|
|
262
|
+
}, {
|
|
263
|
+
key: "filterTableCPU",
|
|
264
|
+
value: function filterTableCPU(filters, layers) {
|
|
265
|
+
var opt = {
|
|
266
|
+
cpuOnly: true,
|
|
267
|
+
ignoreDomain: true
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
// no filter
|
|
271
|
+
if (!filters.length) {
|
|
272
|
+
this.filteredIdxCPU = this.allIndexes;
|
|
273
|
+
this.filterRecordCPU = (0, _filterUtils.getFilterRecord)(this.id, filters, opt);
|
|
274
|
+
return this;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// no gpu filter
|
|
278
|
+
if (!filters.find(function (f) {
|
|
279
|
+
return f.gpu;
|
|
280
|
+
})) {
|
|
281
|
+
this.filteredIdxCPU = this.filteredIndex;
|
|
282
|
+
this.filterRecordCPU = (0, _filterUtils.getFilterRecord)(this.id, filters, opt);
|
|
283
|
+
return this;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// make a copy for cpu filtering
|
|
287
|
+
var copied = copyTable(this);
|
|
288
|
+
copied.filterRecord = this.filterRecordCPU;
|
|
289
|
+
copied.filteredIndex = this.filteredIdxCPU || [];
|
|
290
|
+
var filtered = copied.filterTable(filters, layers, opt);
|
|
291
|
+
this.filteredIdxCPU = filtered.filteredIndex;
|
|
292
|
+
this.filterRecordCPU = filtered.filterRecord;
|
|
293
|
+
return this;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Calculate field domain based on field type and data
|
|
298
|
+
* for Filter
|
|
299
|
+
*/
|
|
300
|
+
}, {
|
|
301
|
+
key: "getColumnFilterDomain",
|
|
302
|
+
value: function getColumnFilterDomain(field) {
|
|
303
|
+
var dataContainer = this.dataContainer;
|
|
304
|
+
var valueAccessor = field.valueAccessor;
|
|
305
|
+
var domain;
|
|
306
|
+
switch (field.type) {
|
|
307
|
+
case _defaultSettings.ALL_FIELD_TYPES.real:
|
|
308
|
+
case _defaultSettings.ALL_FIELD_TYPES.integer:
|
|
309
|
+
// calculate domain and step
|
|
310
|
+
return (0, _filterUtils.getNumericFieldDomain)(dataContainer, valueAccessor);
|
|
311
|
+
case _defaultSettings.ALL_FIELD_TYPES["boolean"]:
|
|
312
|
+
return {
|
|
313
|
+
domain: [true, false]
|
|
314
|
+
};
|
|
315
|
+
case _defaultSettings.ALL_FIELD_TYPES.string:
|
|
316
|
+
case _defaultSettings.ALL_FIELD_TYPES.date:
|
|
317
|
+
domain = (0, _dataScaleUtils.getOrdinalDomain)(dataContainer, valueAccessor);
|
|
318
|
+
return {
|
|
319
|
+
domain: domain
|
|
320
|
+
};
|
|
321
|
+
case _defaultSettings.ALL_FIELD_TYPES.timestamp:
|
|
322
|
+
return (0, _filterUtils.getTimestampFieldDomain)(dataContainer, valueAccessor);
|
|
323
|
+
default:
|
|
324
|
+
return {
|
|
325
|
+
domain: (0, _dataScaleUtils.getOrdinalDomain)(dataContainer, valueAccessor)
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Get the domain of this column based on scale type
|
|
332
|
+
*/
|
|
333
|
+
}, {
|
|
334
|
+
key: "getColumnLayerDomain",
|
|
335
|
+
value: function getColumnLayerDomain(field, scaleType) {
|
|
336
|
+
var dataContainer = this.dataContainer,
|
|
337
|
+
filteredIndexForDomain = this.filteredIndexForDomain;
|
|
338
|
+
if (!_defaultSettings.SCALE_TYPES[scaleType]) {
|
|
339
|
+
_console.console.error("scale type ".concat(scaleType, " not supported"));
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
var valueAccessor = field.valueAccessor;
|
|
343
|
+
var indexValueAccessor = function indexValueAccessor(i) {
|
|
344
|
+
return valueAccessor({
|
|
345
|
+
index: i
|
|
346
|
+
});
|
|
347
|
+
};
|
|
348
|
+
var sortFunction = (0, _dataUtils.getSortingFunction)(field.type);
|
|
349
|
+
switch (scaleType) {
|
|
350
|
+
case _defaultSettings.SCALE_TYPES.ordinal:
|
|
351
|
+
case _defaultSettings.SCALE_TYPES.point:
|
|
352
|
+
// do not recalculate ordinal domain based on filtered data
|
|
353
|
+
// don't need to update ordinal domain every time
|
|
354
|
+
return (0, _dataScaleUtils.getOrdinalDomain)(dataContainer, valueAccessor);
|
|
355
|
+
case _defaultSettings.SCALE_TYPES.quantile:
|
|
356
|
+
return (0, _dataScaleUtils.getQuantileDomain)(filteredIndexForDomain, indexValueAccessor, sortFunction);
|
|
357
|
+
case _defaultSettings.SCALE_TYPES.log:
|
|
358
|
+
return (0, _dataScaleUtils.getLogDomain)(filteredIndexForDomain, indexValueAccessor);
|
|
359
|
+
case _defaultSettings.SCALE_TYPES.quantize:
|
|
360
|
+
case _defaultSettings.SCALE_TYPES.linear:
|
|
361
|
+
case _defaultSettings.SCALE_TYPES.sqrt:
|
|
362
|
+
default:
|
|
363
|
+
return (0, _dataScaleUtils.getLinearDomain)(filteredIndexForDomain, indexValueAccessor);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}, {
|
|
367
|
+
key: "calculateLegend",
|
|
368
|
+
value: function calculateLegend(leftField, rightField) {
|
|
369
|
+
var limitOfNumberOfLegendEntries = 20;
|
|
370
|
+
var leftValues = this.dataContainer.mapIndex(leftField.valueAccessor);
|
|
371
|
+
var rightValues = this.dataContainer.mapIndex(rightField.valueAccessor);
|
|
372
|
+
var pairing = leftValues.reduce(function (previous, current, idx) {
|
|
373
|
+
previous.push([current, rightValues[idx]]);
|
|
374
|
+
return previous;
|
|
375
|
+
}, []);
|
|
376
|
+
return (0, _dataUtils.uniqueSortedPairByFrequency)(pairing).map(function (row) {
|
|
377
|
+
return {
|
|
378
|
+
label: row.left,
|
|
379
|
+
color: (0, _colorUtils.checkColorOrFallback)(row.right)
|
|
380
|
+
};
|
|
381
|
+
}).slice(0, limitOfNumberOfLegendEntries + 1); // Limit to limitOfNumberOfLegendEntries + 1, then limit to limitOfNumberOfLegendEntries in LegendManagers
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Get a sample of rows to calculate layer boundaries
|
|
386
|
+
*/
|
|
387
|
+
// getSampleData(rows)
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Parse cell value based on column type and return a string representation
|
|
391
|
+
* Value the field value, type the field type
|
|
392
|
+
*/
|
|
393
|
+
// parseFieldValue(value, type)
|
|
394
|
+
|
|
395
|
+
// sortDatasetByColumn()
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Assert whether field exist
|
|
399
|
+
* @param fieldName
|
|
400
|
+
* @param condition
|
|
401
|
+
*/
|
|
402
|
+
}, {
|
|
403
|
+
key: "_assetField",
|
|
404
|
+
value: function _assetField(fieldName, condition) {
|
|
405
|
+
if (!condition) {
|
|
406
|
+
_console.console.error("".concat(fieldName, " doesnt exist in dataset ").concat(this.id));
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}]);
|
|
410
|
+
}(); // HELPER FUNCTIONS (MAINLY EXPORTED FOR TEST...)
|
|
411
|
+
function removeSuffixAndDelimiters(layerName, suffix) {
|
|
412
|
+
return layerName.replace(new RegExp(suffix, 'ig'), '').replace(/[_,.]+/g, ' ').trim();
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Find point fields pairs from fields
|
|
417
|
+
*
|
|
418
|
+
* @param fields
|
|
419
|
+
* @returns found point fields
|
|
420
|
+
*/
|
|
421
|
+
function findPointFieldPairs(fields) {
|
|
422
|
+
var allNames = fields.map(function (f) {
|
|
423
|
+
return f.name.toLowerCase();
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
// get list of all fields with matching suffixes
|
|
427
|
+
var acc = [];
|
|
428
|
+
var result = allNames.reduce(function (carry, fieldName, idx) {
|
|
429
|
+
// This search for pairs will early exit if found.
|
|
430
|
+
var _iterator = _createForOfIteratorHelper(_defaultSettings.TRIP_POINT_FIELDS),
|
|
431
|
+
_step;
|
|
432
|
+
try {
|
|
433
|
+
var _loop = function _loop() {
|
|
434
|
+
var suffixPair = _step.value;
|
|
435
|
+
// match first suffix```
|
|
436
|
+
if (fieldName.endsWith(suffixPair[0])) {
|
|
437
|
+
// match second suffix
|
|
438
|
+
var otherPattern = new RegExp("".concat(suffixPair[0], "$"));
|
|
439
|
+
var partner = fieldName.replace(otherPattern, suffixPair[1]);
|
|
440
|
+
var partnerIdx = allNames.findIndex(function (d) {
|
|
441
|
+
return d === partner;
|
|
442
|
+
});
|
|
443
|
+
if (partnerIdx > -1) {
|
|
444
|
+
var defaultName = removeSuffixAndDelimiters(fieldName, suffixPair[0]);
|
|
445
|
+
carry.push({
|
|
446
|
+
defaultName: defaultName,
|
|
447
|
+
pair: {
|
|
448
|
+
lat: {
|
|
449
|
+
fieldIdx: idx,
|
|
450
|
+
value: fields[idx].name
|
|
451
|
+
},
|
|
452
|
+
lng: {
|
|
453
|
+
fieldIdx: partnerIdx,
|
|
454
|
+
value: fields[partnerIdx].name
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
suffix: suffixPair
|
|
458
|
+
});
|
|
459
|
+
return {
|
|
460
|
+
v: carry
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
},
|
|
465
|
+
_ret;
|
|
466
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
467
|
+
_ret = _loop();
|
|
468
|
+
if (_ret) return _ret.v;
|
|
469
|
+
}
|
|
470
|
+
} catch (err) {
|
|
471
|
+
_iterator.e(err);
|
|
472
|
+
} finally {
|
|
473
|
+
_iterator.f();
|
|
474
|
+
}
|
|
475
|
+
return carry;
|
|
476
|
+
}, acc);
|
|
477
|
+
|
|
478
|
+
// prioritize the 'latitude'/'longitude' pair
|
|
479
|
+
result.sort(function (a, b) {
|
|
480
|
+
if (a.defaultName === '' && a.suffix[0] === 'latitude') return -1;
|
|
481
|
+
if (b.defaultName === '' && b.suffix[0] === 'latitude') return 1;
|
|
482
|
+
return 0;
|
|
483
|
+
});
|
|
484
|
+
return result;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
*
|
|
489
|
+
* @param dataset
|
|
490
|
+
* @param column
|
|
491
|
+
* @param mode
|
|
492
|
+
* @type
|
|
493
|
+
*/
|
|
494
|
+
function sortDatasetByColumn(dataset, column, mode) {
|
|
495
|
+
var allIndexes = dataset.allIndexes,
|
|
496
|
+
fields = dataset.fields,
|
|
497
|
+
dataContainer = dataset.dataContainer;
|
|
498
|
+
var fieldIndex = fields.findIndex(function (f) {
|
|
499
|
+
return f.name === column;
|
|
500
|
+
});
|
|
501
|
+
if (fieldIndex < 0) {
|
|
502
|
+
return dataset;
|
|
503
|
+
}
|
|
504
|
+
var sortBy = _defaultSettings.SORT_ORDER[mode || ''] || _defaultSettings.SORT_ORDER.ASCENDING;
|
|
505
|
+
if (sortBy === _defaultSettings.SORT_ORDER.UNSORT) {
|
|
506
|
+
dataset.sortColumn = {};
|
|
507
|
+
dataset.sortOrder = null;
|
|
508
|
+
return dataset;
|
|
509
|
+
}
|
|
510
|
+
var sortFunction = sortBy === _defaultSettings.SORT_ORDER.ASCENDING ? _d3Array.ascending : _d3Array.descending;
|
|
511
|
+
var sortOrder = allIndexes.slice().sort(function (a, b) {
|
|
512
|
+
return sortFunction(dataContainer.valueAt(a, fieldIndex), dataContainer.valueAt(b, fieldIndex));
|
|
513
|
+
});
|
|
514
|
+
dataset.sortColumn = (0, _defineProperty2["default"])({}, column, sortBy);
|
|
515
|
+
dataset.sortOrder = sortOrder;
|
|
516
|
+
return dataset;
|
|
517
|
+
}
|
|
518
|
+
function pinTableColumns(dataset, column) {
|
|
519
|
+
var field = dataset.getColumnField(column);
|
|
520
|
+
if (!field) {
|
|
521
|
+
return dataset;
|
|
522
|
+
}
|
|
523
|
+
var pinnedColumns;
|
|
524
|
+
if (Array.isArray(dataset.pinnedColumns) && dataset.pinnedColumns.includes(field.name)) {
|
|
525
|
+
// unpin it
|
|
526
|
+
pinnedColumns = dataset.pinnedColumns.filter(function (co) {
|
|
527
|
+
return co !== field.name;
|
|
528
|
+
});
|
|
529
|
+
} else {
|
|
530
|
+
pinnedColumns = (dataset.pinnedColumns || []).concat(field.name);
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// @ts-ignore
|
|
534
|
+
return copyTableAndUpdate(dataset, {
|
|
535
|
+
pinnedColumns: pinnedColumns
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
function copyTable(original) {
|
|
539
|
+
return Object.assign(Object.create(Object.getPrototypeOf(original)), original);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* @type
|
|
544
|
+
* @returns
|
|
545
|
+
*/
|
|
546
|
+
function copyTableAndUpdate(original) {
|
|
547
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
548
|
+
return Object.entries(options).reduce(function (acc, entry) {
|
|
549
|
+
acc[entry[0]] = entry[1];
|
|
550
|
+
return acc;
|
|
551
|
+
}, copyTable(original));
|
|
552
|
+
}
|
|
553
|
+
var _default = exports["default"] = KeplerTable;
|
|
554
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsInJlcXVpcmUiLCJfZGVmYXVsdFNldHRpbmdzIiwiX2QzQXJyYXkiLCJfdXRpbHMiLCJfZ3B1RmlsdGVyVXRpbHMiLCJfZmlsdGVyVXRpbHMiLCJfZGF0YVV0aWxzIiwiX2RhdGFTY2FsZVV0aWxzIiwiX2RhdGFDb250YWluZXJVdGlscyIsIl9jb2xvclV0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiRklEX0tFWSIsIktlcGxlclRhYmxlIiwiX3JlZiIsIl9yZWYkaW5mbyIsImluZm8iLCJkYXRhIiwiY29sb3IiLCJtZXRhZGF0YSIsInN1cHBvcnRlZEZpbHRlclR5cGVzIiwiX2NsYXNzQ2FsbENoZWNrMiIsImRhdGFDb250YWluZXIiLCJjcmVhdGVEYXRhQ29udGFpbmVyIiwicm93cyIsImZpZWxkcyIsImRhdGFzZXRJbmZvIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsImxhYmVsIiwiZGF0YUlkIiwibWFwIiwiaSIsImZpZWxkSWR4IiwiZGlzcGxheU5hbWUiLCJ2YWx1ZUFjY2Vzc29yIiwibWF5YmVUb0RhdGUiLCJiaW5kIiwidHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsImRhdGUiLCJmb3JtYXQiLCJhbGxJbmRleGVzIiwiZ2V0UGxhaW5JbmRleCIsImZpbHRlcmVkSW5kZXgiLCJmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIiwiZmllbGRQYWlycyIsImZpbmRQb2ludEZpZWxkUGFpcnMiLCJncHVGaWx0ZXIiLCJnZXRHcHVGaWx0ZXJQcm9wcyIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJnZXRDb2x1bW5GaWVsZCIsImNvbHVtbk5hbWUiLCJmaWVsZCIsImZpbmQiLCJmZCIsIl9hc3NldEZpZWxkIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJmaW5kSW5kZXgiLCJCb29sZWFuIiwiZ2V0VmFsdWUiLCJyb3dJZHgiLCJpbmRleCIsInVwZGF0ZUNvbHVtbkZpZWxkIiwibmV3RmllbGQiLCJhc3NpZ24iLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwidXBkYXRlVGFibGVDb2xvciIsIm5ld0NvbG9yIiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImZpbHRlclByb3BzIiwiZmllbGREb21haW4iLCJnZXRDb2x1bW5GaWx0ZXJEb21haW4iLCJnZXRGaWx0ZXJQcm9wcyIsImZpbHRlclRhYmxlIiwiZmlsdGVycyIsImxheWVycyIsIm9wdCIsIl90aGlzIiwib2xkRmlsdGVyUmVjb3JkIiwiZmlsdGVyUmVjb3JkIiwiZ2V0RmlsdGVyUmVjb3JkIiwiY2hhbmdlZEZpbHRlcnMiLCJkaWZmRmlsdGVycyIsInNob3VsZENhbERvbWFpbiIsImR5bmFtaWNEb21haW4iLCJzaG91bGRDYWxJbmRleCIsImNwdSIsImZpbHRlclJlc3VsdCIsImR5bmFtaWNEb21haW5GaWx0ZXJzIiwiY3B1RmlsdGVycyIsImZpbHRlckZ1bmNzIiwicmVkdWNlIiwiYWNjIiwiZmllbGRJbmRleCIsImdldERhdGFzZXRGaWVsZEluZGV4Rm9yRmlsdGVyIiwiZ2V0RmlsdGVyRnVuY3Rpb24iLCJmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyIsImZpbHRlclRhYmxlQ1BVIiwiY3B1T25seSIsImlnbm9yZURvbWFpbiIsImZpbHRlcmVkSWR4Q1BVIiwiZmlsdGVyUmVjb3JkQ1BVIiwiZ3B1IiwiY29waWVkIiwiY29weVRhYmxlIiwiZmlsdGVyZWQiLCJkb21haW4iLCJyZWFsIiwiaW50ZWdlciIsImdldE51bWVyaWNGaWVsZERvbWFpbiIsInN0cmluZyIsImdldE9yZGluYWxEb21haW4iLCJnZXRUaW1lc3RhbXBGaWVsZERvbWFpbiIsImdldENvbHVtbkxheWVyRG9tYWluIiwic2NhbGVUeXBlIiwiU0NBTEVfVFlQRVMiLCJDb25zb2xlIiwiZXJyb3IiLCJjb25jYXQiLCJpbmRleFZhbHVlQWNjZXNzb3IiLCJzb3J0RnVuY3Rpb24iLCJnZXRTb3J0aW5nRnVuY3Rpb24iLCJvcmRpbmFsIiwicG9pbnQiLCJxdWFudGlsZSIsImdldFF1YW50aWxlRG9tYWluIiwibG9nIiwiZ2V0TG9nRG9tYWluIiwicXVhbnRpemUiLCJsaW5lYXIiLCJzcXJ0IiwiZ2V0TGluZWFyRG9tYWluIiwiY2FsY3VsYXRlTGVnZW5kIiwibGVmdEZpZWxkIiwicmlnaHRGaWVsZCIsImxpbWl0T2ZOdW1iZXJPZkxlZ2VuZEVudHJpZXMiLCJsZWZ0VmFsdWVzIiwibWFwSW5kZXgiLCJyaWdodFZhbHVlcyIsInBhaXJpbmciLCJwcmV2aW91cyIsImN1cnJlbnQiLCJpZHgiLCJ1bmlxdWVTb3J0ZWRQYWlyQnlGcmVxdWVuY3kiLCJyb3ciLCJsZWZ0IiwiY2hlY2tDb2xvck9yRmFsbGJhY2siLCJyaWdodCIsImZpZWxkTmFtZSIsImNvbmRpdGlvbiIsInJlbW92ZVN1ZmZpeEFuZERlbGltaXRlcnMiLCJsYXllck5hbWUiLCJzdWZmaXgiLCJyZXBsYWNlIiwiUmVnRXhwIiwidHJpbSIsImFsbE5hbWVzIiwidG9Mb3dlckNhc2UiLCJyZXN1bHQiLCJjYXJyeSIsIl9pdGVyYXRvciIsIlRSSVBfUE9JTlRfRklFTERTIiwiX3N0ZXAiLCJfbG9vcCIsInN1ZmZpeFBhaXIiLCJlbmRzV2l0aCIsIm90aGVyUGF0dGVybiIsInBhcnRuZXIiLCJwYXJ0bmVySWR4IiwiZCIsImRlZmF1bHROYW1lIiwicGFpciIsImxhdCIsImxuZyIsInYiLCJfcmV0IiwiZXJyIiwic29ydCIsImIiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZGF0YXNldCIsImNvbHVtbiIsIm1vZGUiLCJzb3J0QnkiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwiVU5TT1JUIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsImFzY2VuZGluZyIsImRlc2NlbmRpbmciLCJ2YWx1ZUF0IiwicGluVGFibGVDb2x1bW5zIiwicGlubmVkQ29sdW1ucyIsImluY2x1ZGVzIiwiY28iLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJvcmlnaW5hbCIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwib3B0aW9ucyIsInVuZGVmaW5lZCIsImVudHJpZXMiLCJlbnRyeSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy90YWJsZS11dGlscy9rZXBsZXItdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC9jb25zb2xlJztcbmltcG9ydCB7VFJJUF9QT0lOVF9GSUVMRFMsIFNPUlRfT1JERVJ9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7YXNjZW5kaW5nLCBkZXNjZW5kaW5nfSBmcm9tICdkMy1hcnJheSc7XG5cbi8vIGltcG9ydCB7dmFsaWRhdGVJbnB1dERhdGF9IGZyb20gJ3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtnZXRHcHVGaWx0ZXJQcm9wcywgZ2V0RGF0YXNldEZpZWxkSW5kZXhGb3JGaWx0ZXJ9IGZyb20gJ3V0aWxzL2dwdS1maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsdGVyUHJvcHMsXG4gIGdldEZpbHRlclJlY29yZCxcbiAgZGlmZkZpbHRlcnMsXG4gIGdldEZpbHRlckZ1bmN0aW9uLFxuICBmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyxcbiAgZ2V0TnVtZXJpY0ZpZWxkRG9tYWluLFxuICBnZXRUaW1lc3RhbXBGaWVsZERvbWFpbixcbiAgRmlsdGVyUmVzdWx0XG59IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge21heWJlVG9EYXRlLCBnZXRTb3J0aW5nRnVuY3Rpb259IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0UXVhbnRpbGVEb21haW4sXG4gIGdldE9yZGluYWxEb21haW4sXG4gIGdldExvZ0RvbWFpbixcbiAgZ2V0TGluZWFyRG9tYWluXG59IGZyb20gJ3V0aWxzL2RhdGEtc2NhbGUtdXRpbHMnO1xuXG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFUywgU0NBTEVfVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuaW1wb3J0IHtjcmVhdGVEYXRhQ29udGFpbmVyfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLXV0aWxzJztcbmltcG9ydCB7dW5pcXVlU29ydGVkUGFpckJ5RnJlcXVlbmN5fSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCB7Y2hlY2tDb2xvck9yRmFsbGJhY2t9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcblxuaW1wb3J0IHtSR0JDb2xvcn0gZnJvbSAncmVkdWNlcnMvdHlwZXMnO1xuaW1wb3J0IHtMYXllcn0gZnJvbSAnbGF5ZXJzJztcbmltcG9ydCB7RmllbGREb21haW4sIEZpbHRlcn0gZnJvbSAncmVkdWNlcnMvdmlzLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZX0gZnJvbSAnLi9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnO1xuaW1wb3J0IHtQcm90b0RhdGFzZXR9IGZyb20gJ2FjdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBGaWVsZCA9IHtcbiAgYW5hbHl6ZXJUeXBlOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGZvcm1hdDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGZpZWxkSWR4OiBudW1iZXI7XG4gIHZhbHVlQWNjZXNzb3Iodjoge2luZGV4OiBudW1iZXJ9KTogYW55O1xuICBmaWx0ZXJQcm9wcz86IGFueTtcbiAgbWV0YWRhdGE/OiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBHcHVGaWx0ZXIgPSB7XG4gIGZpbHRlclJhbmdlOiBudW1iZXJbXVtdO1xuICBmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzOiBhbnk7XG4gIGZpbHRlclZhbHVlQWNjZXNzb3I6IChcbiAgICBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuICApID0+IChcbiAgICBnZXRJbmRleD86IChhbnkpID0+IG51bWJlcixcbiAgICBnZXREYXRhPzogKGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBkOiBhbnksIGZpZWxkSW5kZXg6IG51bWJlcikgPT4gYW55XG4gICkgPT4gKGQ6IGFueSkgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRmllbGRQYWlyID0ge1xuICBkZWZhdWx0TmFtZTogc3RyaW5nO1xuICBwYWlyOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgZmllbGRJZHg6IG51bWJlcjtcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgc3VmZml4OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlclJlY29yZCA9IHtcbiAgZHluYW1pY0RvbWFpbjogRmlsdGVyW107XG4gIGZpeGVkRG9tYWluOiBGaWx0ZXJbXTtcbiAgY3B1OiBGaWx0ZXJbXTtcbiAgZ3B1OiBGaWx0ZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckRhdGFzZXRPcHQgPSB7XG4gIC8vIG9ubHkgYWxsb3cgY3B1IGZpbHRlcmluZ1xuICBjcHVPbmx5PzogYm9vbGVhbjtcbiAgLy8gaWdub3JlIGZpbHRlciBmb3IgZG9tYWluIGNhbGN1bGF0aW9uXG4gIGlnbm9yZURvbWFpbj86IGJvb2xlYW47XG59O1xuXG4vLyBVbmlxdWUgaWRlbnRpZmllciBvZiBlYWNoIGZpZWxkXG5jb25zdCBGSURfS0VZID0gJ25hbWUnO1xuXG5jbGFzcyBLZXBsZXJUYWJsZSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgdHlwZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgY29sb3I6IFJHQkNvbG9yO1xuXG4gIC8vIGZpZWxkcyBhbmQgZGF0YVxuICBmaWVsZHM6IEZpZWxkW107XG5cbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZTtcblxuICBhbGxJbmRleGVzOiBudW1iZXJbXTtcbiAgZmlsdGVyZWRJbmRleDogbnVtYmVyW107XG4gIGZpbHRlcmVkSWR4Q1BVPzogbnVtYmVyW107XG4gIGZpbHRlcmVkSW5kZXhGb3JEb21haW46IG51bWJlcltdO1xuICBmaWVsZFBhaXJzOiBGaWVsZFBhaXJbXTtcbiAgZ3B1RmlsdGVyOiBHcHVGaWx0ZXI7XG4gIGZpbHRlclJlY29yZD86IEZpbHRlclJlY29yZDtcbiAgZmlsdGVyUmVjb3JkQ1BVPzogRmlsdGVyUmVjb3JkO1xuICBjaGFuZ2VkRmlsdGVycz86IGFueTtcblxuICAvLyB0YWJsZS1pbmplY3RlZCBtZXRhZGF0YVxuICBzb3J0Q29sdW1uPzoge1xuICAgIC8vIGNvbHVtbiBuYW1lOiBzb3J0ZWQgaWR4XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nOyAvLyBBU0NFTkRJTkcgfCBERVNDRU5ESU5HIHwgVU5TT1JUXG4gIH07XG4gIHNvcnRPcmRlcj86IG51bWJlcltdIHwgbnVsbDtcblxuICBwaW5uZWRDb2x1bW5zPzogc3RyaW5nW107XG4gIHN1cHBvcnRlZEZpbHRlclR5cGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgLy8gdGFibGUtaW5qZWN0ZWQgbWV0YWRhdGFcbiAgbWV0YWRhdGE6IG9iamVjdDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgaW5mbyA9IHt9LFxuICAgIGRhdGEsXG4gICAgY29sb3IsXG4gICAgbWV0YWRhdGEsXG4gICAgc3VwcG9ydGVkRmlsdGVyVHlwZXNcbiAgfToge1xuICAgIGluZm8/OiBQcm90b0RhdGFzZXRbJ2luZm8nXTtcbiAgICBkYXRhOiBQcm90b0RhdGFzZXRbJ2RhdGEnXTtcbiAgICBjb2xvcjogUkdCQ29sb3I7XG4gICAgbWV0YWRhdGE/OiBQcm90b0RhdGFzZXRbJ21ldGFkYXRhJ107XG4gICAgc3VwcG9ydGVkRmlsdGVyVHlwZXM/OiBQcm90b0RhdGFzZXRbJ3N1cHBvcnRlZEZpbHRlclR5cGVzJ107XG4gIH0pIHtcbiAgICAvLyBUT0RPIC0gd2hhdCB0byBkbyBpZiB2YWxpZGF0aW9uIGZhaWxzPyBDYW4ga2VwbGVyIGhhbmRsZSBleGNlcHRpb25zP1xuICAgIC8vIGNvbnN0IHZhbGlkYXRlZERhdGEgPSB2YWxpZGF0ZUlucHV0RGF0YShkYXRhKTtcbiAgICAvLyBpZiAoIXZhbGlkYXRlZERhdGEpIHtcbiAgICAvLyAgIHJldHVybiB0aGlzO1xuICAgIC8vIH1cblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBjb25zdCBkYXRhQ29udGFpbmVyID0gY3JlYXRlRGF0YUNvbnRhaW5lcihkYXRhLnJvd3MsIHtmaWVsZHM6IGRhdGEuZmllbGRzfSk7XG5cbiAgICBjb25zdCBkYXRhc2V0SW5mbyA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg0KSxcbiAgICAgIGxhYmVsOiAnbmV3IGRhdGFzZXQnLFxuICAgICAgLi4uKGluZm8gfHwge30pXG4gICAgfTtcbiAgICBjb25zdCBkYXRhSWQgPSBkYXRhc2V0SW5mby5pZDtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgY29uc3QgZmllbGRzOiBGaWVsZFtdID0gZGF0YS5maWVsZHMubWFwKChmLCBpKSA9PiAoe1xuICAgICAgLi4uZixcbiAgICAgIGZpZWxkSWR4OiBpLFxuICAgICAgaWQ6IGYubmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBmLmRpc3BsYXlOYW1lIHx8IGYubmFtZSxcbiAgICAgIHZhbHVlQWNjZXNzb3I6IG1heWJlVG9EYXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGlzIHRpbWVcbiAgICAgICAgZi50eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wIHx8IGYudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLmRhdGUsXG4gICAgICAgIGksXG4gICAgICAgIGYuZm9ybWF0LFxuICAgICAgICBkYXRhQ29udGFpbmVyXG4gICAgICApXG4gICAgfSkpO1xuXG4gICAgY29uc3QgYWxsSW5kZXhlcyA9IGRhdGFDb250YWluZXIuZ2V0UGxhaW5JbmRleCgpO1xuXG4gICAgdGhpcy5pZCA9IGRhdGFzZXRJbmZvLmlkO1xuICAgIHRoaXMubGFiZWwgPSBkYXRhc2V0SW5mby5sYWJlbDtcbiAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgdGhpcy5tZXRhZGF0YSA9IHtcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgaWQ6IGRhdGFzZXRJbmZvLmlkLFxuICAgICAgbGFiZWw6IGRhdGFzZXRJbmZvLmxhYmVsXG4gICAgfTtcblxuICAgIHRoaXMuZGF0YUNvbnRhaW5lciA9IGRhdGFDb250YWluZXI7XG4gICAgdGhpcy5hbGxJbmRleGVzID0gYWxsSW5kZXhlcztcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBhbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IGFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWVsZFBhaXJzID0gZmluZFBvaW50RmllbGRQYWlycyhmaWVsZHMpO1xuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgIHRoaXMuZ3B1RmlsdGVyID0gZ2V0R3B1RmlsdGVyUHJvcHMoW10sIGRhdGFJZCwgZmllbGRzKTtcbiAgICBpZiAoc3VwcG9ydGVkRmlsdGVyVHlwZXMpIHtcbiAgICAgIHRoaXMuc3VwcG9ydGVkRmlsdGVyVHlwZXMgPSBzdXBwb3J0ZWRGaWx0ZXJUeXBlcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpZWxkXG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWVsZChjb2x1bW5OYW1lOiBzdHJpbmcpOiBGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIGZpZWxkKTtcbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpZWxkSWR4XG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWVsZElkeChjb2x1bW5OYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gdGhpcy5maWVsZHMuZmluZEluZGV4KGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIEJvb2xlYW4oZmllbGRJZHggPiAtMSkpO1xuICAgIHJldHVybiBmaWVsZElkeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIGEgY2VsbFxuICAgKi9cbiAgZ2V0VmFsdWUoY29sdW1uTmFtZTogc3RyaW5nLCByb3dJZHg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmdldENvbHVtbkZpZWxkKGNvbHVtbk5hbWUpO1xuICAgIHJldHVybiBmaWVsZCA/IGZpZWxkLnZhbHVlQWNjZXNzb3Ioe2luZGV4OiByb3dJZHh9KSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBleGlzdGluZyBmaWVsZCB3aXRoIGEgbmV3IG9iamVjdFxuICAgKiBAcGFyYW0gZmllbGRJZHhcbiAgICogQHBhcmFtIG5ld0ZpZWxkXG4gICAqL1xuICB1cGRhdGVDb2x1bW5GaWVsZChmaWVsZElkeDogbnVtYmVyLCBuZXdGaWVsZDogRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkcyA9IE9iamVjdC5hc3NpZ24oWy4uLnRoaXMuZmllbGRzXSwge1tmaWVsZElkeF06IG5ld0ZpZWxkfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRhdGFzZXQgY29sb3IgYnkgY3VzdG9tIGNvbG9yXG4gICAqIEBwYXJhbSBuZXdDb2xvclxuICAgKi9cbiAgdXBkYXRlVGFibGVDb2xvcihuZXdDb2xvcjogUkdCQ29sb3IpOiB2b2lkIHtcbiAgICB0aGlzLmNvbG9yID0gbmV3Q29sb3I7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBmaWx0ZXJQcm9wcyB0byBmaWVsZCBhbmQgcmV0cmlldmUgaXRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkZpbHRlclByb3BzKGNvbHVtbk5hbWU6IHN0cmluZyk6IEZpZWxkWydmaWx0ZXJQcm9wcyddIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGRJZHggPSB0aGlzLmdldENvbHVtbkZpZWxkSWR4KGNvbHVtbk5hbWUpO1xuICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzW2ZpZWxkSWR4XTtcbiAgICBpZiAoZmllbGQuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclByb3BzJykpIHtcbiAgICAgIHJldHVybiBmaWVsZC5maWx0ZXJQcm9wcztcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZERvbWFpbiA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRG9tYWluKGZpZWxkKTtcbiAgICBpZiAoIWZpZWxkRG9tYWluKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJQcm9wcyA9IGdldEZpbHRlclByb3BzKGZpZWxkLCBmaWVsZERvbWFpbik7XG4gICAgY29uc3QgbmV3RmllbGQgPSB7XG4gICAgICAuLi5maWVsZCxcbiAgICAgIGZpbHRlclByb3BzXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlQ29sdW1uRmllbGQoZmllbGRJZHgsIG5ld0ZpZWxkKTtcblxuICAgIHJldHVybiBmaWx0ZXJQcm9wcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBmaWx0ZXJzIHRvIGRhdGFzZXQsIHJldHVybiB0aGUgZmlsdGVyZWQgZGF0YXNldCB3aXRoIHVwZGF0ZWQgYGdwdUZpbHRlcmAsIGBmaWx0ZXJSZWNvcmRgLCBgZmlsdGVyZWRJbmRleGAsIGBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluYFxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBAcGFyYW0gbGF5ZXJzXG4gICAqIEBwYXJhbSBvcHRcbiAgICovXG4gIGZpbHRlclRhYmxlKGZpbHRlcnM6IEZpbHRlcltdLCBsYXllcnM6IExheWVyW10sIG9wdD86IEZpbHRlckRhdGFzZXRPcHQpOiBLZXBsZXJUYWJsZSB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGlkOiBkYXRhSWQsIGZpbHRlclJlY29yZDogb2xkRmlsdGVyUmVjb3JkLCBmaWVsZHN9ID0gdGhpcztcblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZpbHRlcnNcbiAgICBjb25zdCBmaWx0ZXJSZWNvcmQgPSBnZXRGaWx0ZXJSZWNvcmQoZGF0YUlkLCBmaWx0ZXJzLCBvcHQgfHwge30pO1xuXG4gICAgdGhpcy5maWx0ZXJSZWNvcmQgPSBmaWx0ZXJSZWNvcmQ7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhmaWx0ZXJzLCBkYXRhSWQsIGZpZWxkcyk7XG5cbiAgICAvLyBjb25zdCBuZXdEYXRhc2V0ID0gc2V0KFsnZmlsdGVyUmVjb3JkJ10sIGZpbHRlclJlY29yZCwgZGF0YXNldCk7XG5cbiAgICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgICB0aGlzLmZpbHRlcmVkSW5kZXhGb3JEb21haW4gPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZWRGaWx0ZXJzID0gZGlmZkZpbHRlcnMoZmlsdGVyUmVjb3JkLCBvbGRGaWx0ZXJSZWNvcmQpO1xuXG4gICAgLy8gZ2VuZXJhdGUgMiBzZXRzIG9mIGZpbHRlciByZXN1bHRcbiAgICAvLyBmaWx0ZXJlZEluZGV4IHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIGRhdGFcbiAgICAvLyBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIERvbWFpblxuICAgIGNvbnN0IHNob3VsZENhbERvbWFpbiA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5keW5hbWljRG9tYWluKTtcbiAgICBjb25zdCBzaG91bGRDYWxJbmRleCA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5jcHUpO1xuXG4gICAgbGV0IGZpbHRlclJlc3VsdDogRmlsdGVyUmVzdWx0ID0ge307XG4gICAgaWYgKHNob3VsZENhbERvbWFpbiB8fCBzaG91bGRDYWxJbmRleCkge1xuICAgICAgY29uc3QgZHluYW1pY0RvbWFpbkZpbHRlcnMgPSBzaG91bGRDYWxEb21haW4gPyBmaWx0ZXJSZWNvcmQuZHluYW1pY0RvbWFpbiA6IG51bGw7XG4gICAgICBjb25zdCBjcHVGaWx0ZXJzID0gc2hvdWxkQ2FsSW5kZXggPyBmaWx0ZXJSZWNvcmQuY3B1IDogbnVsbDtcblxuICAgICAgY29uc3QgZmlsdGVyRnVuY3MgPSBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRJbmRleCA9IGdldERhdGFzZXRGaWVsZEluZGV4Rm9yRmlsdGVyKHRoaXMuaWQsIGZpbHRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRJbmRleCAhPT0gLTEgPyBmaWVsZHNbZmllbGRJbmRleF0gOiBudWxsO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgIFtmaWx0ZXIuaWRdOiBnZXRGaWx0ZXJGdW5jdGlvbihmaWVsZCwgdGhpcy5pZCwgZmlsdGVyLCBsYXllcnMsIGRhdGFDb250YWluZXIpXG4gICAgICAgIH07XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIGZpbHRlclJlc3VsdCA9IGZpbHRlckRhdGFCeUZpbHRlclR5cGVzKFxuICAgICAgICB7ZHluYW1pY0RvbWFpbkZpbHRlcnMsIGNwdUZpbHRlcnMsIGZpbHRlckZ1bmNzfSxcbiAgICAgICAgZGF0YUNvbnRhaW5lclxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBmaWx0ZXJSZXN1bHQuZmlsdGVyZWRJbmRleCB8fCB0aGlzLmZpbHRlcmVkSW5kZXg7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID1cbiAgICAgIGZpbHRlclJlc3VsdC5maWx0ZXJlZEluZGV4Rm9yRG9tYWluIHx8IHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGZpbHRlcnMgdG8gYSBkYXRhc2V0IGFsbCBvbiBDUFUsIGFzc2lnbiB0byBgZmlsdGVyZWRJZHhDUFVgLCBgZmlsdGVyUmVjb3JkQ1BVYFxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBAcGFyYW0gbGF5ZXJzXG4gICAqL1xuICBmaWx0ZXJUYWJsZUNQVShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMYXllcltdKTogS2VwbGVyVGFibGUge1xuICAgIGNvbnN0IG9wdCA9IHtcbiAgICAgIGNwdU9ubHk6IHRydWUsXG4gICAgICBpZ25vcmVEb21haW46IHRydWVcbiAgICB9O1xuXG4gICAgLy8gbm8gZmlsdGVyXG4gICAgaWYgKCFmaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IHRoaXMuYWxsSW5kZXhlcztcbiAgICAgIHRoaXMuZmlsdGVyUmVjb3JkQ1BVID0gZ2V0RmlsdGVyUmVjb3JkKHRoaXMuaWQsIGZpbHRlcnMsIG9wdCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBubyBncHUgZmlsdGVyXG4gICAgaWYgKCFmaWx0ZXJzLmZpbmQoZiA9PiBmLmdwdSkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJZHhDUFUgPSB0aGlzLmZpbHRlcmVkSW5kZXg7XG4gICAgICB0aGlzLmZpbHRlclJlY29yZENQVSA9IGdldEZpbHRlclJlY29yZCh0aGlzLmlkLCBmaWx0ZXJzLCBvcHQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBhIGNvcHkgZm9yIGNwdSBmaWx0ZXJpbmdcbiAgICBjb25zdCBjb3BpZWQgPSBjb3B5VGFibGUodGhpcyk7XG5cbiAgICBjb3BpZWQuZmlsdGVyUmVjb3JkID0gdGhpcy5maWx0ZXJSZWNvcmRDUFU7XG4gICAgY29waWVkLmZpbHRlcmVkSW5kZXggPSB0aGlzLmZpbHRlcmVkSWR4Q1BVIHx8IFtdO1xuXG4gICAgY29uc3QgZmlsdGVyZWQgPSBjb3BpZWQuZmlsdGVyVGFibGUoZmlsdGVycywgbGF5ZXJzLCBvcHQpO1xuXG4gICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IGZpbHRlcmVkLmZpbHRlcmVkSW5kZXg7XG4gICAgdGhpcy5maWx0ZXJSZWNvcmRDUFUgPSBmaWx0ZXJlZC5maWx0ZXJSZWNvcmQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgZmllbGQgZG9tYWluIGJhc2VkIG9uIGZpZWxkIHR5cGUgYW5kIGRhdGFcbiAgICogZm9yIEZpbHRlclxuICAgKi9cbiAgZ2V0Q29sdW1uRmlsdGVyRG9tYWluKGZpZWxkOiBGaWVsZCk6IEZpZWxkRG9tYWluIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSB0aGlzO1xuICAgIGNvbnN0IHt2YWx1ZUFjY2Vzc29yfSA9IGZpZWxkO1xuXG4gICAgbGV0IGRvbWFpbjtcblxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBkb21haW4gYW5kIHN0ZXBcbiAgICAgICAgcmV0dXJuIGdldE51bWVyaWNGaWVsZERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgICAgcmV0dXJuIHtkb21haW46IFt0cnVlLCBmYWxzZV19O1xuXG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgICBkb21haW4gPSBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuICAgICAgICByZXR1cm4ge2RvbWFpbn07XG5cbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgICAgcmV0dXJuIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge2RvbWFpbjogZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKX07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBHZXQgdGhlIGRvbWFpbiBvZiB0aGlzIGNvbHVtbiBiYXNlZCBvbiBzY2FsZSB0eXBlXG4gICAqL1xuICBnZXRDb2x1bW5MYXllckRvbWFpbihcbiAgICBmaWVsZDogRmllbGQsXG4gICAgc2NhbGVUeXBlOiBzdHJpbmdcbiAgKTogbnVtYmVyW10gfCBzdHJpbmdbXSB8IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleEZvckRvbWFpbn0gPSB0aGlzO1xuXG4gICAgaWYgKCFTQ0FMRV9UWVBFU1tzY2FsZVR5cGVdKSB7XG4gICAgICBDb25zb2xlLmVycm9yKGBzY2FsZSB0eXBlICR7c2NhbGVUeXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7dmFsdWVBY2Nlc3Nvcn0gPSBmaWVsZDtcbiAgICBjb25zdCBpbmRleFZhbHVlQWNjZXNzb3IgPSBpID0+IHZhbHVlQWNjZXNzb3Ioe2luZGV4OiBpfSk7XG4gICAgY29uc3Qgc29ydEZ1bmN0aW9uID0gZ2V0U29ydGluZ0Z1bmN0aW9uKGZpZWxkLnR5cGUpO1xuXG4gICAgc3dpdGNoIChzY2FsZVR5cGUpIHtcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMub3JkaW5hbDpcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMucG9pbnQ6XG4gICAgICAgIC8vIGRvIG5vdCByZWNhbGN1bGF0ZSBvcmRpbmFsIGRvbWFpbiBiYXNlZCBvbiBmaWx0ZXJlZCBkYXRhXG4gICAgICAgIC8vIGRvbid0IG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluIGV2ZXJ5IHRpbWVcbiAgICAgICAgcmV0dXJuIGdldE9yZGluYWxEb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMucXVhbnRpbGU6XG4gICAgICAgIHJldHVybiBnZXRRdWFudGlsZURvbWFpbihmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLCBpbmRleFZhbHVlQWNjZXNzb3IsIHNvcnRGdW5jdGlvbik7XG5cbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMubG9nOlxuICAgICAgICByZXR1cm4gZ2V0TG9nRG9tYWluKGZpbHRlcmVkSW5kZXhGb3JEb21haW4sIGluZGV4VmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMucXVhbnRpemU6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLmxpbmVhcjpcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMuc3FydDpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBnZXRMaW5lYXJEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yKTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVMZWdlbmQobGVmdEZpZWxkLCByaWdodEZpZWxkKSB7XG4gICAgY29uc3QgbGltaXRPZk51bWJlck9mTGVnZW5kRW50cmllcyA9IDIwO1xuICAgIGNvbnN0IGxlZnRWYWx1ZXMgPSB0aGlzLmRhdGFDb250YWluZXIubWFwSW5kZXgobGVmdEZpZWxkLnZhbHVlQWNjZXNzb3IpO1xuICAgIGNvbnN0IHJpZ2h0VmFsdWVzID0gdGhpcy5kYXRhQ29udGFpbmVyLm1hcEluZGV4KHJpZ2h0RmllbGQudmFsdWVBY2Nlc3Nvcik7XG5cbiAgICBjb25zdCBwYWlyaW5nID0gbGVmdFZhbHVlcy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50LCBpZHgpID0+IHtcbiAgICAgIHByZXZpb3VzLnB1c2goW2N1cnJlbnQsIHJpZ2h0VmFsdWVzW2lkeF1dKTtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gdW5pcXVlU29ydGVkUGFpckJ5RnJlcXVlbmN5KHBhaXJpbmcpXG4gICAgICAubWFwKHJvdyA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFiZWw6IHJvdy5sZWZ0LFxuICAgICAgICAgIGNvbG9yOiBjaGVja0NvbG9yT3JGYWxsYmFjayhyb3cucmlnaHQpXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLnNsaWNlKDAsIGxpbWl0T2ZOdW1iZXJPZkxlZ2VuZEVudHJpZXMgKyAxKTsgLy8gTGltaXQgdG8gbGltaXRPZk51bWJlck9mTGVnZW5kRW50cmllcyArIDEsIHRoZW4gbGltaXQgdG8gbGltaXRPZk51bWJlck9mTGVnZW5kRW50cmllcyBpbiBMZWdlbmRNYW5hZ2Vyc1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNhbXBsZSBvZiByb3dzIHRvIGNhbGN1bGF0ZSBsYXllciBib3VuZGFyaWVzXG4gICAqL1xuICAvLyBnZXRTYW1wbGVEYXRhKHJvd3MpXG5cbiAgLyoqXG4gICAqIFBhcnNlIGNlbGwgdmFsdWUgYmFzZWQgb24gY29sdW1uIHR5cGUgYW5kIHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBWYWx1ZSB0aGUgZmllbGQgdmFsdWUsIHR5cGUgdGhlIGZpZWxkIHR5cGVcbiAgICovXG4gIC8vIHBhcnNlRmllbGRWYWx1ZSh2YWx1ZSwgdHlwZSlcblxuICAvLyBzb3J0RGF0YXNldEJ5Q29sdW1uKClcblxuICAvKipcbiAgICogQXNzZXJ0IHdoZXRoZXIgZmllbGQgZXhpc3RcbiAgICogQHBhcmFtIGZpZWxkTmFtZVxuICAgKiBAcGFyYW0gY29uZGl0aW9uXG4gICAqL1xuICBfYXNzZXRGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgY29uZGl0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgQ29uc29sZS5lcnJvcihgJHtmaWVsZE5hbWV9IGRvZXNudCBleGlzdCBpbiBkYXRhc2V0ICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OUyAoTUFJTkxZIEVYUE9SVEVEIEZPUiBURVNULi4uKVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU3VmZml4QW5kRGVsaW1pdGVycyhsYXllck5hbWUsIHN1ZmZpeCkge1xuICByZXR1cm4gbGF5ZXJOYW1lXG4gICAgLnJlcGxhY2UobmV3IFJlZ0V4cChzdWZmaXgsICdpZycpLCAnJylcbiAgICAucmVwbGFjZSgvW18sLl0rL2csICcgJylcbiAgICAudHJpbSgpO1xufVxuXG4vKipcbiAqIEZpbmQgcG9pbnQgZmllbGRzIHBhaXJzIGZyb20gZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHJldHVybnMgZm91bmQgcG9pbnQgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUG9pbnRGaWVsZFBhaXJzKGZpZWxkczogRmllbGRbXSk6IEZpZWxkUGFpcltdIHtcbiAgY29uc3QgYWxsTmFtZXMgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gIC8vIGdldCBsaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCBtYXRjaGluZyBzdWZmaXhlc1xuICBjb25zdCBhY2M6IEZpZWxkUGFpcltdID0gW107XG4gIGNvbnN0IHJlc3VsdCA9IGFsbE5hbWVzLnJlZHVjZSgoY2FycnksIGZpZWxkTmFtZSwgaWR4KSA9PiB7XG4gICAgLy8gVGhpcyBzZWFyY2ggZm9yIHBhaXJzIHdpbGwgZWFybHkgZXhpdCBpZiBmb3VuZC5cbiAgICBmb3IgKGNvbnN0IHN1ZmZpeFBhaXIgb2YgVFJJUF9QT0lOVF9GSUVMRFMpIHtcbiAgICAgIC8vIG1hdGNoIGZpcnN0IHN1ZmZpeGBgYFxuICAgICAgaWYgKGZpZWxkTmFtZS5lbmRzV2l0aChzdWZmaXhQYWlyWzBdKSkge1xuICAgICAgICAvLyBtYXRjaCBzZWNvbmQgc3VmZml4XG4gICAgICAgIGNvbnN0IG90aGVyUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7c3VmZml4UGFpclswXX1cXCRgKTtcbiAgICAgICAgY29uc3QgcGFydG5lciA9IGZpZWxkTmFtZS5yZXBsYWNlKG90aGVyUGF0dGVybiwgc3VmZml4UGFpclsxXSk7XG5cbiAgICAgICAgY29uc3QgcGFydG5lcklkeCA9IGFsbE5hbWVzLmZpbmRJbmRleChkID0+IGQgPT09IHBhcnRuZXIpO1xuICAgICAgICBpZiAocGFydG5lcklkeCA+IC0xKSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdE5hbWUgPSByZW1vdmVTdWZmaXhBbmREZWxpbWl0ZXJzKGZpZWxkTmFtZSwgc3VmZml4UGFpclswXSk7XG5cbiAgICAgICAgICBjYXJyeS5wdXNoKHtcbiAgICAgICAgICAgIGRlZmF1bHROYW1lLFxuICAgICAgICAgICAgcGFpcjoge1xuICAgICAgICAgICAgICBsYXQ6IHtcbiAgICAgICAgICAgICAgICBmaWVsZElkeDogaWR4LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZHNbaWR4XS5uYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxuZzoge1xuICAgICAgICAgICAgICAgIGZpZWxkSWR4OiBwYXJ0bmVySWR4LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZHNbcGFydG5lcklkeF0ubmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VmZml4OiBzdWZmaXhQYWlyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGNhcnJ5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYXJyeTtcbiAgfSwgYWNjKTtcblxuICAvLyBwcmlvcml0aXplIHRoZSAnbGF0aXR1ZGUnLydsb25naXR1ZGUnIHBhaXJcbiAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS5kZWZhdWx0TmFtZSA9PT0gJycgJiYgYS5zdWZmaXhbMF0gPT09ICdsYXRpdHVkZScpIHJldHVybiAtMTtcbiAgICBpZiAoYi5kZWZhdWx0TmFtZSA9PT0gJycgJiYgYi5zdWZmaXhbMF0gPT09ICdsYXRpdHVkZScpIHJldHVybiAxO1xuICAgIHJldHVybiAwO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGNvbHVtblxuICogQHBhcmFtIG1vZGVcbiAqIEB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0RGF0YXNldEJ5Q29sdW1uKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgY29sdW1uOiBzdHJpbmcsXG4gIG1vZGU/OiBzdHJpbmdcbik6IEtlcGxlclRhYmxlIHtcbiAgY29uc3Qge2FsbEluZGV4ZXMsIGZpZWxkcywgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuICBjb25zdCBmaWVsZEluZGV4ID0gZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBjb25zdCBzb3J0QnkgPSBTT1JUX09SREVSW21vZGUgfHwgJyddIHx8IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuXG4gIGlmIChzb3J0QnkgPT09IFNPUlRfT1JERVIuVU5TT1JUKSB7XG4gICAgZGF0YXNldC5zb3J0Q29sdW1uID0ge307XG4gICAgZGF0YXNldC5zb3J0T3JkZXIgPSBudWxsO1xuXG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBjb25zdCBzb3J0RnVuY3Rpb24gPSBzb3J0QnkgPT09IFNPUlRfT1JERVIuQVNDRU5ESU5HID8gYXNjZW5kaW5nIDogZGVzY2VuZGluZztcbiAgY29uc3Qgc29ydE9yZGVyID0gYWxsSW5kZXhlc1xuICAgIC5zbGljZSgpXG4gICAgLnNvcnQoKGEsIGIpID0+XG4gICAgICBzb3J0RnVuY3Rpb24oZGF0YUNvbnRhaW5lci52YWx1ZUF0KGEsIGZpZWxkSW5kZXgpLCBkYXRhQ29udGFpbmVyLnZhbHVlQXQoYiwgZmllbGRJbmRleCkpXG4gICAgKTtcblxuICBkYXRhc2V0LnNvcnRDb2x1bW4gPSB7XG4gICAgW2NvbHVtbl06IHNvcnRCeVxuICB9O1xuICBkYXRhc2V0LnNvcnRPcmRlciA9IHNvcnRPcmRlcjtcblxuICByZXR1cm4gZGF0YXNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0OiBLZXBsZXJUYWJsZSwgY29sdW1uOiBzdHJpbmcpOiBLZXBsZXJUYWJsZSB7XG4gIGNvbnN0IGZpZWxkID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZChjb2x1bW4pO1xuICBpZiAoIWZpZWxkKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cblxuICBsZXQgcGlubmVkQ29sdW1ucztcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YXNldC5waW5uZWRDb2x1bW5zKSAmJiBkYXRhc2V0LnBpbm5lZENvbHVtbnMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcbiAgICAvLyB1bnBpbiBpdFxuICAgIHBpbm5lZENvbHVtbnMgPSBkYXRhc2V0LnBpbm5lZENvbHVtbnMuZmlsdGVyKGNvID0+IGNvICE9PSBmaWVsZC5uYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBwaW5uZWRDb2x1bW5zID0gKGRhdGFzZXQucGlubmVkQ29sdW1ucyB8fCBbXSkuY29uY2F0KGZpZWxkLm5hbWUpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtwaW5uZWRDb2x1bW5zfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlPFQgZXh0ZW5kcyB7fT4ob3JpZ2luYWw6IFQpOiBUIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKSwgb3JpZ2luYWwpO1xufVxuXG4vKipcbiAqIEB0eXBlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQW5kVXBkYXRlPFQgZXh0ZW5kcyB7fT4ob3JpZ2luYWw6IFQsIG9wdGlvbnM6IFBhcnRpYWw8VD4gPSB7fSk6IFQge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3B0aW9ucykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgYWNjW2VudHJ5WzBdXSA9IGVudHJ5WzFdO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIGNvcHlUYWJsZShvcmlnaW5hbCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBLZXBsZXJUYWJsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUdBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQVVBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQVAsT0FBQTtBQVNBLElBQUFRLG1CQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxXQUFBLEdBQUFULE9BQUE7QUFBdUQsU0FBQVUsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQs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
|