@carto/kepler.gl 0.1.0-alpha.1 → 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 +61 -25
- package/src/index.ts +1 -1
- package/dist/bundle.js +0 -75163
- package/dist/bundle.js.map +0 -1
- package/dist/deckgl-layers/layer-utils/cluster-utils.d.ts +0 -12
|
@@ -0,0 +1,977 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.AggregationTypeSelector = void 0;
|
|
9
|
+
exports.ArcLayerColorSelectorFactory = ArcLayerColorSelectorFactory;
|
|
10
|
+
exports.ChannelByValueSelectorFactory = ChannelByValueSelectorFactory;
|
|
11
|
+
exports.HowToButton = void 0;
|
|
12
|
+
exports.LayerColorRangeSelectorFactory = LayerColorRangeSelectorFactory;
|
|
13
|
+
exports.LayerColorSelectorFactory = LayerColorSelectorFactory;
|
|
14
|
+
exports["default"] = LayerConfiguratorFactory;
|
|
15
|
+
exports.getVisConfiguratorProps = exports.getLayerFields = exports.getLayerDataset = exports.getLayerConfiguratorProps = exports.getLayerChannelConfigProps = void 0;
|
|
16
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
17
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
18
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
20
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
21
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
22
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
24
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
25
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
26
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
27
|
+
var _localization = require("../../../localization");
|
|
28
|
+
var _styledComponents2 = require("../../common/styled-components");
|
|
29
|
+
var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
|
|
30
|
+
var _visConfigByFieldSelector = _interopRequireDefault(require("./vis-config-by-field-selector"));
|
|
31
|
+
var _layerColumnConfig = _interopRequireDefault(require("./layer-column-config"));
|
|
32
|
+
var _layerTypeSelector = _interopRequireDefault(require("./layer-type-selector"));
|
|
33
|
+
var _layerVisibilityByZoom = _interopRequireDefault(require("./layer-visibility-by-zoom"));
|
|
34
|
+
var _dimensionScaleSelector = _interopRequireDefault(require("./dimension-scale-selector"));
|
|
35
|
+
var _sourceDataSelector = _interopRequireDefault(require("../common/source-data-selector"));
|
|
36
|
+
var _visConfigSwitch = _interopRequireDefault(require("./vis-config-switch"));
|
|
37
|
+
var _visConfigSlider = _interopRequireDefault(require("./vis-config-slider"));
|
|
38
|
+
var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
|
|
39
|
+
var _customMarkersConfigGroup = _interopRequireDefault(require("./custom-markers-config-group"));
|
|
40
|
+
var _textLabelPanel = _interopRequireDefault(require("./text-label-panel"));
|
|
41
|
+
var _utils = require("../../../utils/utils");
|
|
42
|
+
var _defaultSettings = require("../../../constants/default-settings");
|
|
43
|
+
var _types = require("../../../layers/types");
|
|
44
|
+
var _reactIntl = require("react-intl");
|
|
45
|
+
var _colorDimensionScaleSelector = _interopRequireDefault(require("./color-dimension-scale-selector"));
|
|
46
|
+
var _colorSelector = _interopRequireDefault(require("./color-selector"));
|
|
47
|
+
var _layerAggregationResolution = _interopRequireDefault(require("./layer-aggregation-resolution"));
|
|
48
|
+
var _colorRanges = require("../../../constants/color-ranges");
|
|
49
|
+
var _templateObject, _templateObject2, _templateObject3; // Copyright (c) 2022 Uber Technologies, Inc.
|
|
50
|
+
//
|
|
51
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
52
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
53
|
+
// in the Software without restriction, including without limitation the rights
|
|
54
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
55
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
56
|
+
// furnished to do so, subject to the following conditions:
|
|
57
|
+
//
|
|
58
|
+
// The above copyright notice and this permission notice shall be included in
|
|
59
|
+
// all copies or substantial portions of the Software.
|
|
60
|
+
//
|
|
61
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
62
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
63
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
64
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
65
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
66
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
67
|
+
// THE SOFTWARE.
|
|
68
|
+
/* eslint-disable complexity */
|
|
69
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
70
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
71
|
+
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; }
|
|
72
|
+
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; }
|
|
73
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
74
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
75
|
+
var StyledLayerConfigurator = _styledComponents["default"].div.attrs({
|
|
76
|
+
className: 'layer-panel__config'
|
|
77
|
+
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin-top: ", ";\n padding: ", ";\n border-left: ", " dashed\n ", ";\n"])), function (props) {
|
|
78
|
+
return props.theme.layerConfiguratorMargin;
|
|
79
|
+
}, function (props) {
|
|
80
|
+
return props.theme.layerConfiguratorPadding;
|
|
81
|
+
}, function (props) {
|
|
82
|
+
return props.theme.layerConfiguratorBorder;
|
|
83
|
+
}, function (props) {
|
|
84
|
+
return props.theme.layerConfiguratorBorderColor;
|
|
85
|
+
});
|
|
86
|
+
var StyledLayerVisualConfigurator = _styledComponents["default"].div.attrs({
|
|
87
|
+
className: 'layer-panel__config__visualC-config'
|
|
88
|
+
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
|
|
89
|
+
var getLayerFields = exports.getLayerFields = function getLayerFields(datasets, layer) {
|
|
90
|
+
return layer.config && datasets[layer.config.dataId] ? datasets[layer.config.dataId].fields : [];
|
|
91
|
+
};
|
|
92
|
+
var getLayerDataset = exports.getLayerDataset = function getLayerDataset(datasets, layer) {
|
|
93
|
+
return layer.config && datasets[layer.config.dataId] ? datasets[layer.config.dataId] : null;
|
|
94
|
+
};
|
|
95
|
+
var getLayerConfiguratorProps = exports.getLayerConfiguratorProps = function getLayerConfiguratorProps(props) {
|
|
96
|
+
return {
|
|
97
|
+
layer: props.layer,
|
|
98
|
+
disabled: Boolean(props.disabled),
|
|
99
|
+
fields: getLayerFields(props.datasets, props.layer),
|
|
100
|
+
onChange: props.updateLayerConfig,
|
|
101
|
+
setColorUI: props.updateLayerColorUI
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
var getVisConfiguratorProps = exports.getVisConfiguratorProps = function getVisConfiguratorProps(props) {
|
|
105
|
+
return {
|
|
106
|
+
layer: props.layer,
|
|
107
|
+
fields: getLayerFields(props.datasets, props.layer),
|
|
108
|
+
onChange: props.updateLayerVisConfig,
|
|
109
|
+
setColorUI: props.updateLayerColorUI
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
var getLayerChannelConfigProps = exports.getLayerChannelConfigProps = function getLayerChannelConfigProps(props) {
|
|
113
|
+
return {
|
|
114
|
+
layer: props.layer,
|
|
115
|
+
fields: getLayerFields(props.datasets, props.layer),
|
|
116
|
+
onChange: props.updateLayerVisualChannelConfig,
|
|
117
|
+
onChangeVisConfig: props.updateLayerVisConfig
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
LayerConfiguratorFactory.deps = [_sourceDataSelector["default"], _visConfigSlider["default"], _textLabelPanel["default"], _layerConfigGroup["default"], ChannelByValueSelectorFactory, _layerColumnConfig["default"], _layerTypeSelector["default"], _visConfigSwitch["default"], AggrScaleSelectorFactory, _layerVisibilityByZoom["default"], _layerAggregationResolution["default"], LayerColorSelectorFactory, LayerColorRangeSelectorFactory, ArcLayerColorSelectorFactory, _customMarkersConfigGroup["default"]];
|
|
121
|
+
function LayerConfiguratorFactory(SourceDataSelector, VisConfigSlider, TextLabelPanel, LayerConfigGroup, ChannelByValueSelector, LayerColumnConfig, LayerTypeSelector, VisConfigSwitch, AggrScaleSelector, LayerVisibilityByZoom, LayerAggregationResolution, LayerColorSelector, LayerColorRangeSelector, ArcLayerColorSelector, CustomMarkersConfigGroup) {
|
|
122
|
+
var LayerConfigurator = /*#__PURE__*/function (_Component) {
|
|
123
|
+
function LayerConfigurator() {
|
|
124
|
+
(0, _classCallCheck2["default"])(this, LayerConfigurator);
|
|
125
|
+
return _callSuper(this, LayerConfigurator, arguments);
|
|
126
|
+
}
|
|
127
|
+
(0, _inherits2["default"])(LayerConfigurator, _Component);
|
|
128
|
+
return (0, _createClass2["default"])(LayerConfigurator, [{
|
|
129
|
+
key: "_renderPointLayerConfig",
|
|
130
|
+
value: function _renderPointLayerConfig(props) {
|
|
131
|
+
return this._renderScatterplotLayerConfig(props);
|
|
132
|
+
}
|
|
133
|
+
}, {
|
|
134
|
+
key: "_renderIconLayerConfig",
|
|
135
|
+
value: function _renderIconLayerConfig(props) {
|
|
136
|
+
return this._renderScatterplotLayerConfig(props);
|
|
137
|
+
}
|
|
138
|
+
}, {
|
|
139
|
+
key: "_renderScatterplotLayerConfig",
|
|
140
|
+
value: function _renderScatterplotLayerConfig(_ref) {
|
|
141
|
+
var layer = _ref.layer,
|
|
142
|
+
visConfiguratorProps = _ref.visConfiguratorProps,
|
|
143
|
+
layerChannelConfigProps = _ref.layerChannelConfigProps,
|
|
144
|
+
layerConfiguratorProps = _ref.layerConfiguratorProps;
|
|
145
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled || {
|
|
146
|
+
label: 'layer.color'
|
|
147
|
+
}, visConfiguratorProps, {
|
|
148
|
+
collapsible: true
|
|
149
|
+
}), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
150
|
+
channel: layer.visualChannels.color
|
|
151
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), layer.type === _types.LAYER_TYPES.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.outline, visConfiguratorProps, {
|
|
152
|
+
collapsible: true,
|
|
153
|
+
disabled: Boolean(layer.config.visConfig.customMarkers)
|
|
154
|
+
}), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
155
|
+
channel: "strokeColor"
|
|
156
|
+
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
157
|
+
selectedColor: layer.config.visConfig.strokeColor,
|
|
158
|
+
property: "strokeColor"
|
|
159
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
160
|
+
channel: layer.visualChannels.strokeColor
|
|
161
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
162
|
+
disabled: !layer.config.visConfig.outline
|
|
163
|
+
})))) : null, layer.type === _types.LAYER_TYPES.point ? /*#__PURE__*/_react["default"].createElement(CustomMarkersConfigGroup, {
|
|
164
|
+
layer: layer,
|
|
165
|
+
visConfiguratorProps: visConfiguratorProps,
|
|
166
|
+
layerChannelConfigProps: layerChannelConfigProps
|
|
167
|
+
}) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
168
|
+
label: layer.config.visConfig.customMarkers ? 'layer.size' : 'layer.radius',
|
|
169
|
+
collapsible: true
|
|
170
|
+
}, !layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
|
|
171
|
+
label: false,
|
|
172
|
+
disabled: Boolean(layer.config.sizeField)
|
|
173
|
+
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
|
|
174
|
+
label: false,
|
|
175
|
+
disabled: !layer.config.sizeField
|
|
176
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
177
|
+
channel: layer.visualChannels.size
|
|
178
|
+
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(TextLabelPanel, {
|
|
179
|
+
fields: visConfiguratorProps.fields,
|
|
180
|
+
updateLayerTextLabel: this.props.updateLayerTextLabel,
|
|
181
|
+
textLabel: layer.config.textLabel,
|
|
182
|
+
colorPalette: visConfiguratorProps.colorPalette,
|
|
183
|
+
setColorPaletteUI: visConfiguratorProps.setColorPaletteUI
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
}, {
|
|
187
|
+
key: "_renderClusterLayerConfig",
|
|
188
|
+
value: function _renderClusterLayerConfig(_ref2) {
|
|
189
|
+
var layer = _ref2.layer,
|
|
190
|
+
visConfiguratorProps = _ref2.visConfiguratorProps,
|
|
191
|
+
layerConfiguratorProps = _ref2.layerConfiguratorProps,
|
|
192
|
+
layerChannelConfigProps = _ref2.layerChannelConfigProps;
|
|
193
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
194
|
+
label: 'layer.color',
|
|
195
|
+
collapsible: true
|
|
196
|
+
}, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
|
|
197
|
+
channel: layer.visualChannels.color,
|
|
198
|
+
onChangeVisConfig: layerChannelConfigProps.onChangeVisConfig
|
|
199
|
+
})), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
200
|
+
channel: layer.visualChannels.color
|
|
201
|
+
}, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
|
|
202
|
+
channel: layer.visualChannels.color
|
|
203
|
+
})) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
204
|
+
label: 'layer.radius',
|
|
205
|
+
collapsible: true
|
|
206
|
+
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.clusterRadius, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps)))));
|
|
207
|
+
}
|
|
208
|
+
}, {
|
|
209
|
+
key: "_renderHeatmapLayerConfig",
|
|
210
|
+
value: function _renderHeatmapLayerConfig(_ref3) {
|
|
211
|
+
var layer = _ref3.layer,
|
|
212
|
+
visConfiguratorProps = _ref3.visConfiguratorProps,
|
|
213
|
+
layerConfiguratorProps = _ref3.layerConfiguratorProps,
|
|
214
|
+
layerChannelConfigProps = _ref3.layerChannelConfigProps;
|
|
215
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
216
|
+
label: 'layer.color',
|
|
217
|
+
collapsible: true
|
|
218
|
+
}, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
219
|
+
label: 'layer.radius'
|
|
220
|
+
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
|
|
221
|
+
label: false
|
|
222
|
+
}))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
223
|
+
label: 'layer.weight'
|
|
224
|
+
}, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
225
|
+
channel: layer.visualChannels.weight
|
|
226
|
+
}, layerChannelConfigProps))));
|
|
227
|
+
}
|
|
228
|
+
}, {
|
|
229
|
+
key: "_renderGridLayerConfig",
|
|
230
|
+
value: function _renderGridLayerConfig(props) {
|
|
231
|
+
return this._renderAggregationLayerConfig(props);
|
|
232
|
+
}
|
|
233
|
+
}, {
|
|
234
|
+
key: "_renderHexagonLayerConfig",
|
|
235
|
+
value: function _renderHexagonLayerConfig(props) {
|
|
236
|
+
return this._renderAggregationLayerConfig(props);
|
|
237
|
+
}
|
|
238
|
+
}, {
|
|
239
|
+
key: "_renderAggregationLayerConfig",
|
|
240
|
+
value: function _renderAggregationLayerConfig(_ref4) {
|
|
241
|
+
var layer = _ref4.layer,
|
|
242
|
+
visConfiguratorProps = _ref4.visConfiguratorProps,
|
|
243
|
+
layerConfiguratorProps = _ref4.layerConfiguratorProps,
|
|
244
|
+
layerChannelConfigProps = _ref4.layerChannelConfigProps;
|
|
245
|
+
var config = layer.config;
|
|
246
|
+
var enable3d = config.visConfig.enable3d;
|
|
247
|
+
var elevationByDescription = 'layer.elevationByDescription';
|
|
248
|
+
var colorByDescription = 'layer.colorByDescription';
|
|
249
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
250
|
+
label: 'layer.color',
|
|
251
|
+
collapsible: true
|
|
252
|
+
}, /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
|
|
253
|
+
channel: layer.visualChannels.color,
|
|
254
|
+
onChangeVisConfig: layerChannelConfigProps.onChangeVisConfig
|
|
255
|
+
})), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
256
|
+
channel: layer.visualChannels.color
|
|
257
|
+
}, layerChannelConfigProps)), layer.visConfigSettings.colorAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.colorAggregation, layerChannelConfigProps, {
|
|
258
|
+
description: colorByDescription,
|
|
259
|
+
channel: layer.visualChannels.color
|
|
260
|
+
})) : null, layer.visConfigSettings.percentile && layer.visConfigSettings.percentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.percentile, visConfiguratorProps)) : null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
261
|
+
label: 'layer.radius',
|
|
262
|
+
collapsible: true
|
|
263
|
+
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.worldUnitSize, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps)))), layer.visConfigSettings.enable3d ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
|
|
264
|
+
collapsible: true
|
|
265
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
|
|
266
|
+
label: "layerVisConfigs.heightMultiplier"
|
|
267
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({}, layerChannelConfigProps, {
|
|
268
|
+
channel: layer.visualChannels.size,
|
|
269
|
+
description: elevationByDescription,
|
|
270
|
+
disabled: !enable3d
|
|
271
|
+
})), /*#__PURE__*/_react["default"].createElement(AggrScaleSelector, (0, _extends2["default"])({}, layerConfiguratorProps, {
|
|
272
|
+
channel: layer.visualChannels.size,
|
|
273
|
+
onChangeVisConfig: layerChannelConfigProps.onChangeVisConfig
|
|
274
|
+
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
275
|
+
label: "layerVisConfigs.heightRange"
|
|
276
|
+
})), layer.visConfigSettings.sizeAggregation.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(AggregationTypeSelector, (0, _extends2["default"])({}, layer.visConfigSettings.sizeAggregation, layerChannelConfigProps, {
|
|
277
|
+
channel: layer.visualChannels.size
|
|
278
|
+
})) : null, layer.visConfigSettings.elevationPercentile.condition(layer.config) ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationPercentile, visConfiguratorProps)) : null)) : null);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// TODO: Shan move these into layer class
|
|
282
|
+
}, {
|
|
283
|
+
key: "_renderHexagonIdLayerConfig",
|
|
284
|
+
value: function _renderHexagonIdLayerConfig(_ref5) {
|
|
285
|
+
var layer = _ref5.layer,
|
|
286
|
+
visConfiguratorProps = _ref5.visConfiguratorProps,
|
|
287
|
+
layerConfiguratorProps = _ref5.layerConfiguratorProps,
|
|
288
|
+
layerChannelConfigProps = _ref5.layerChannelConfigProps;
|
|
289
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
290
|
+
label: 'layer.color',
|
|
291
|
+
collapsible: true
|
|
292
|
+
}, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
293
|
+
channel: layer.visualChannels.color
|
|
294
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
295
|
+
label: 'layer.coverage',
|
|
296
|
+
collapsible: true
|
|
297
|
+
}, !layer.config.coverageField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverage, visConfiguratorProps, {
|
|
298
|
+
label: false
|
|
299
|
+
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.coverageRange, visConfiguratorProps, {
|
|
300
|
+
label: false
|
|
301
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
302
|
+
channel: layer.visualChannels.coverage
|
|
303
|
+
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.enable3d, visConfiguratorProps, {
|
|
304
|
+
collapsible: true
|
|
305
|
+
}), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
306
|
+
channel: layer.visualChannels.size
|
|
307
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
308
|
+
label: "layerVisConfigs.heightRange"
|
|
309
|
+
})))));
|
|
310
|
+
}
|
|
311
|
+
}, {
|
|
312
|
+
key: "_renderArcLayerConfig",
|
|
313
|
+
value: function _renderArcLayerConfig(args) {
|
|
314
|
+
return this._renderLineLayerConfig(args);
|
|
315
|
+
}
|
|
316
|
+
}, {
|
|
317
|
+
key: "_renderLineLayerConfig",
|
|
318
|
+
value: function _renderLineLayerConfig(_ref6) {
|
|
319
|
+
var layer = _ref6.layer,
|
|
320
|
+
visConfiguratorProps = _ref6.visConfiguratorProps,
|
|
321
|
+
layerConfiguratorProps = _ref6.layerConfiguratorProps,
|
|
322
|
+
layerChannelConfigProps = _ref6.layerChannelConfigProps;
|
|
323
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
324
|
+
label: 'layer.color',
|
|
325
|
+
collapsible: true
|
|
326
|
+
}, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(ArcLayerColorSelector, {
|
|
327
|
+
layer: layer,
|
|
328
|
+
setColorUI: layerConfiguratorProps.setColorUI,
|
|
329
|
+
onChangeConfig: layerConfiguratorProps.onChange,
|
|
330
|
+
onChangeVisConfig: visConfiguratorProps.onChange
|
|
331
|
+
}), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
332
|
+
channel: layer.visualChannels.sourceColor
|
|
333
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
334
|
+
label: 'layer.stroke',
|
|
335
|
+
collapsible: true
|
|
336
|
+
}, layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
337
|
+
disabled: !layer.config.sizeField,
|
|
338
|
+
label: false
|
|
339
|
+
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
340
|
+
label: false
|
|
341
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
342
|
+
channel: layer.visualChannels.size
|
|
343
|
+
}, layerChannelConfigProps)))), layer.visConfigSettings.elevationScale ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
344
|
+
label: "layerVisConfigs.elevationScale",
|
|
345
|
+
collapsible: true
|
|
346
|
+
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps))) : null);
|
|
347
|
+
}
|
|
348
|
+
}, {
|
|
349
|
+
key: "_renderTripLayerConfig",
|
|
350
|
+
value: function _renderTripLayerConfig(_ref7) {
|
|
351
|
+
var layer = _ref7.layer,
|
|
352
|
+
visConfiguratorProps = _ref7.visConfiguratorProps,
|
|
353
|
+
layerConfiguratorProps = _ref7.layerConfiguratorProps,
|
|
354
|
+
layerChannelConfigProps = _ref7.layerChannelConfigProps;
|
|
355
|
+
var _layer$meta$featureTy = layer.meta.featureTypes,
|
|
356
|
+
featureTypes = _layer$meta$featureTy === void 0 ? {} : _layer$meta$featureTy;
|
|
357
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
358
|
+
label: 'layer.color',
|
|
359
|
+
collapsible: true
|
|
360
|
+
}, layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
361
|
+
channel: layer.visualChannels.color
|
|
362
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
363
|
+
label: "layer.strokeWidth",
|
|
364
|
+
collapsible: true
|
|
365
|
+
}), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
366
|
+
label: false
|
|
367
|
+
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
368
|
+
label: false
|
|
369
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
370
|
+
channel: layer.visualChannels.size
|
|
371
|
+
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
|
|
372
|
+
label: "layer.trailLength",
|
|
373
|
+
description: "layer.trailLengthDescription"
|
|
374
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.trailLength, visConfiguratorProps, {
|
|
375
|
+
label: false
|
|
376
|
+
}))));
|
|
377
|
+
}
|
|
378
|
+
}, {
|
|
379
|
+
key: "_renderGeojsonLayerConfig",
|
|
380
|
+
value: function _renderGeojsonLayerConfig(_ref8) {
|
|
381
|
+
var layer = _ref8.layer,
|
|
382
|
+
visConfiguratorProps = _ref8.visConfiguratorProps,
|
|
383
|
+
layerConfiguratorProps = _ref8.layerConfiguratorProps,
|
|
384
|
+
layerChannelConfigProps = _ref8.layerChannelConfigProps;
|
|
385
|
+
var _layer$meta$featureTy2 = layer.meta.featureTypes,
|
|
386
|
+
featureTypes = _layer$meta$featureTy2 === void 0 ? {} : _layer$meta$featureTy2,
|
|
387
|
+
visConfig = layer.config.visConfig;
|
|
388
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, featureTypes.polygon || featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
|
|
389
|
+
label: "layer.fillColor",
|
|
390
|
+
collapsible: true
|
|
391
|
+
}), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
392
|
+
channel: layer.visualChannels.color
|
|
393
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
|
|
394
|
+
label: "layer.strokeColor",
|
|
395
|
+
collapsible: true
|
|
396
|
+
}), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
397
|
+
channel: "strokeColor"
|
|
398
|
+
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
399
|
+
selectedColor: layer.config.visConfig.strokeColor,
|
|
400
|
+
property: "strokeColor"
|
|
401
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
402
|
+
channel: layer.visualChannels.strokeColor
|
|
403
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.strokeOpacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, featureTypes.polygon ? layer.visConfigSettings.stroked : {}, {
|
|
404
|
+
label: "layer.strokeWidth",
|
|
405
|
+
collapsible: true
|
|
406
|
+
}), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
407
|
+
label: false
|
|
408
|
+
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
409
|
+
label: false
|
|
410
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
411
|
+
channel: layer.visualChannels.size
|
|
412
|
+
}, layerChannelConfigProps)))), featureTypes.polygon ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
|
|
413
|
+
disabled: !visConfig.filled,
|
|
414
|
+
collapsible: true
|
|
415
|
+
}), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
|
|
416
|
+
label: false
|
|
417
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
418
|
+
channel: layer.visualChannels.height
|
|
419
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))) : null, featureTypes.point ? /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
420
|
+
label: 'layer.radius',
|
|
421
|
+
collapsible: true
|
|
422
|
+
}, !layer.config.radiusField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radius, visConfiguratorProps, {
|
|
423
|
+
label: false,
|
|
424
|
+
disabled: Boolean(layer.config.radiusField)
|
|
425
|
+
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.radiusRange, visConfiguratorProps, {
|
|
426
|
+
label: false,
|
|
427
|
+
disabled: !layer.config.radiusField
|
|
428
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
429
|
+
channel: layer.visualChannels.radius
|
|
430
|
+
}, layerChannelConfigProps)))) : null);
|
|
431
|
+
}
|
|
432
|
+
}, {
|
|
433
|
+
key: "_render3DLayerConfig",
|
|
434
|
+
value: function _render3DLayerConfig(_ref9) {
|
|
435
|
+
var layer = _ref9.layer,
|
|
436
|
+
visConfiguratorProps = _ref9.visConfiguratorProps;
|
|
437
|
+
return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
438
|
+
label: 'layer.3DModel',
|
|
439
|
+
collapsible: true
|
|
440
|
+
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
|
|
441
|
+
type: "file",
|
|
442
|
+
accept: ".glb,.gltf",
|
|
443
|
+
onChange: function onChange(e) {
|
|
444
|
+
if (e.target.files && e.target.files[0]) {
|
|
445
|
+
var url = URL.createObjectURL(e.target.files[0]);
|
|
446
|
+
visConfiguratorProps.onChange({
|
|
447
|
+
scenegraph: url
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
})), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
452
|
+
label: 'layer.3DModelOptions',
|
|
453
|
+
collapsible: true
|
|
454
|
+
}, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeScale, visConfiguratorProps, {
|
|
455
|
+
disabled: false
|
|
456
|
+
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleX, visConfiguratorProps, {
|
|
457
|
+
disabled: false
|
|
458
|
+
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleY, visConfiguratorProps, {
|
|
459
|
+
disabled: false
|
|
460
|
+
})), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.angleZ, visConfiguratorProps, {
|
|
461
|
+
disabled: false
|
|
462
|
+
}))));
|
|
463
|
+
}
|
|
464
|
+
}, {
|
|
465
|
+
key: "_renderS2LayerConfig",
|
|
466
|
+
value: function _renderS2LayerConfig(_ref10) {
|
|
467
|
+
var layer = _ref10.layer,
|
|
468
|
+
visConfiguratorProps = _ref10.visConfiguratorProps,
|
|
469
|
+
layerConfiguratorProps = _ref10.layerConfiguratorProps,
|
|
470
|
+
layerChannelConfigProps = _ref10.layerChannelConfigProps;
|
|
471
|
+
var visConfig = layer.config.visConfig;
|
|
472
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerVisualConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filled, visConfiguratorProps, {
|
|
473
|
+
label: "layer.fillColor",
|
|
474
|
+
collapsible: true
|
|
475
|
+
}), layer.config.colorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, visConfiguratorProps) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, layerConfiguratorProps), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
476
|
+
channel: layer.visualChannels.color
|
|
477
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.stroked, visConfiguratorProps, {
|
|
478
|
+
label: "layer.strokeColor",
|
|
479
|
+
collapsible: true
|
|
480
|
+
}), layer.config.strokeColorField ? /*#__PURE__*/_react["default"].createElement(LayerColorRangeSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
481
|
+
channel: "strokeColor"
|
|
482
|
+
})) : /*#__PURE__*/_react["default"].createElement(LayerColorSelector, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
483
|
+
selectedColor: layer.config.visConfig.strokeColor,
|
|
484
|
+
property: "strokeColor"
|
|
485
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
486
|
+
channel: layer.visualChannels.strokeColor
|
|
487
|
+
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
|
|
488
|
+
label: "layer.strokeWidth",
|
|
489
|
+
collapsible: true
|
|
490
|
+
}), layer.config.sizeField ? /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sizeRange, visConfiguratorProps, {
|
|
491
|
+
label: false
|
|
492
|
+
})) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.thickness, visConfiguratorProps, {
|
|
493
|
+
label: false
|
|
494
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
495
|
+
channel: layer.visualChannels.size
|
|
496
|
+
}, layerChannelConfigProps)))), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enable3d, {
|
|
497
|
+
disabled: !visConfig.filled,
|
|
498
|
+
collapsible: true
|
|
499
|
+
}), /*#__PURE__*/_react["default"].createElement(ChannelByValueSelector, (0, _extends2["default"])({
|
|
500
|
+
channel: layer.visualChannels.height
|
|
501
|
+
}, layerChannelConfigProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.elevationScale, visConfiguratorProps, {
|
|
502
|
+
label: "layerVisConfigs.elevationScale"
|
|
503
|
+
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.heightRange, visConfiguratorProps, {
|
|
504
|
+
label: "layerVisConfigs.heightRange"
|
|
505
|
+
})), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.wireframe)))));
|
|
506
|
+
}
|
|
507
|
+
}, {
|
|
508
|
+
key: "render",
|
|
509
|
+
value: function render() {
|
|
510
|
+
var _this = this;
|
|
511
|
+
// @ts-expect-error
|
|
512
|
+
var _this$props = this.props,
|
|
513
|
+
layer = _this$props.layer,
|
|
514
|
+
datasets = _this$props.datasets,
|
|
515
|
+
updateLayerConfig = _this$props.updateLayerConfig,
|
|
516
|
+
layerTypeOptions = _this$props.layerTypeOptions,
|
|
517
|
+
updateLayerType = _this$props.updateLayerType;
|
|
518
|
+
var _ref11 = layer.config.dataId ? datasets[layer.config.dataId] : {},
|
|
519
|
+
_ref11$fields = _ref11.fields,
|
|
520
|
+
fields = _ref11$fields === void 0 ? [] : _ref11$fields,
|
|
521
|
+
_ref11$fieldPairs = _ref11.fieldPairs,
|
|
522
|
+
fieldPairs = _ref11$fieldPairs === void 0 ? undefined : _ref11$fieldPairs;
|
|
523
|
+
var config = layer.config;
|
|
524
|
+
var visConfiguratorProps = getVisConfiguratorProps(this.props);
|
|
525
|
+
var layerConfiguratorProps = getLayerConfiguratorProps(this.props);
|
|
526
|
+
var layerChannelConfigProps = getLayerChannelConfigProps(this.props);
|
|
527
|
+
var dataset = getLayerDataset(datasets, layer);
|
|
528
|
+
var renderTemplate = layer.type && "_render".concat((0, _utils.capitalizeFirstLetter)(layer.type), "LayerConfig");
|
|
529
|
+
return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, layer.layerInfoModal ?
|
|
530
|
+
/*#__PURE__*/
|
|
531
|
+
// @ts-expect-error
|
|
532
|
+
_react["default"].createElement(HowToButton, {
|
|
533
|
+
onClick: function onClick() {
|
|
534
|
+
return _this.props.openModal(layer.layerInfoModal);
|
|
535
|
+
}
|
|
536
|
+
}) : null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
|
|
537
|
+
label: 'layer.basic',
|
|
538
|
+
collapsible: Object.keys(layer.config.columns).length > 0,
|
|
539
|
+
expanded: !layer.hasAllColumns()
|
|
540
|
+
}, /*#__PURE__*/_react["default"].createElement(LayerTypeSelector, {
|
|
541
|
+
datasets: datasets,
|
|
542
|
+
layer: layer,
|
|
543
|
+
layerTypeOptions: layerTypeOptions,
|
|
544
|
+
onSelect: updateLayerType
|
|
545
|
+
}), /*#__PURE__*/_react["default"].createElement(LayerVisibilityByZoom
|
|
546
|
+
// @ts-expect-error
|
|
547
|
+
, {
|
|
548
|
+
updateLayerConfig: this.props.updateLayerConfig,
|
|
549
|
+
layer: layer,
|
|
550
|
+
disabled: layerConfiguratorProps.disabled
|
|
551
|
+
}), /*#__PURE__*/_react["default"].createElement(LayerAggregationResolution, {
|
|
552
|
+
layer: layer,
|
|
553
|
+
disabled: layerConfiguratorProps.disabled
|
|
554
|
+
}), Object.keys(datasets).length > 1 && /*#__PURE__*/_react["default"].createElement(SourceDataSelector, {
|
|
555
|
+
datasets: datasets,
|
|
556
|
+
id: layer.id,
|
|
557
|
+
dataId: config.dataId,
|
|
558
|
+
onSelect: function onSelect(value) {
|
|
559
|
+
return updateLayerConfig({
|
|
560
|
+
dataId: value
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
}), Object.keys(layer.config.columns).length > 0 && /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, /*#__PURE__*/_react["default"].createElement(LayerColumnConfig, {
|
|
564
|
+
columnPairs: layer.columnPairs,
|
|
565
|
+
columns: layer.config.columns,
|
|
566
|
+
assignColumnPairs: layer.assignColumnPairs.bind(layer),
|
|
567
|
+
assignColumn: layer.assignColumn.bind(layer),
|
|
568
|
+
columnLabels: layer.columnLabels,
|
|
569
|
+
fields: fields,
|
|
570
|
+
fieldPairs: fieldPairs,
|
|
571
|
+
updateLayerConfig: updateLayerConfig
|
|
572
|
+
// @ts-expect-error
|
|
573
|
+
,
|
|
574
|
+
updateLayerType: this.props.updateLayerType
|
|
575
|
+
}))), this[renderTemplate] && this[renderTemplate]({
|
|
576
|
+
layer: layer,
|
|
577
|
+
dataset: dataset,
|
|
578
|
+
visConfiguratorProps: visConfiguratorProps,
|
|
579
|
+
layerChannelConfigProps: layerChannelConfigProps,
|
|
580
|
+
layerConfiguratorProps: layerConfiguratorProps
|
|
581
|
+
}));
|
|
582
|
+
}
|
|
583
|
+
}]);
|
|
584
|
+
}(_react.Component);
|
|
585
|
+
(0, _defineProperty2["default"])(LayerConfigurator, "propTypes", {
|
|
586
|
+
disabled: _propTypes["default"].bool,
|
|
587
|
+
layer: _propTypes["default"].object.isRequired,
|
|
588
|
+
datasets: _propTypes["default"].object.isRequired,
|
|
589
|
+
layerTypeOptions: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
|
|
590
|
+
openModal: _propTypes["default"].func.isRequired,
|
|
591
|
+
updateLayerConfig: _propTypes["default"].func.isRequired,
|
|
592
|
+
updateLayerType: _propTypes["default"].func.isRequired,
|
|
593
|
+
updateLayerTextLabel: _propTypes["default"].func.isRequired,
|
|
594
|
+
updateLayerVisConfig: _propTypes["default"].func.isRequired,
|
|
595
|
+
updateLayerVisualChannelConfig: _propTypes["default"].func.isRequired,
|
|
596
|
+
updateLayerColorUI: _propTypes["default"].func.isRequired
|
|
597
|
+
});
|
|
598
|
+
return LayerConfigurator;
|
|
599
|
+
}
|
|
600
|
+
/*
|
|
601
|
+
* Componentize config component into pure functional components
|
|
602
|
+
*/
|
|
603
|
+
|
|
604
|
+
var StyledHowToButton = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n right: 12px;\n top: -4px;\n"])));
|
|
605
|
+
var HowToButton = exports.HowToButton = function HowToButton(_ref12) {
|
|
606
|
+
var onClick = _ref12.onClick;
|
|
607
|
+
return /*#__PURE__*/_react["default"].createElement(StyledHowToButton, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, {
|
|
608
|
+
link: true,
|
|
609
|
+
small: true,
|
|
610
|
+
onClick: onClick
|
|
611
|
+
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
612
|
+
id: 'layerConfiguration.howTo'
|
|
613
|
+
})));
|
|
614
|
+
};
|
|
615
|
+
LayerColorSelectorFactory.deps = [_colorSelector["default"]];
|
|
616
|
+
function LayerColorSelectorFactory(ColorSelector) {
|
|
617
|
+
var LayerColorSelector = /*#__PURE__*/function (_Component2) {
|
|
618
|
+
function LayerColorSelector() {
|
|
619
|
+
(0, _classCallCheck2["default"])(this, LayerColorSelector);
|
|
620
|
+
return _callSuper(this, LayerColorSelector, arguments);
|
|
621
|
+
}
|
|
622
|
+
(0, _inherits2["default"])(LayerColorSelector, _Component2);
|
|
623
|
+
return (0, _createClass2["default"])(LayerColorSelector, [{
|
|
624
|
+
key: "render",
|
|
625
|
+
value: function render() {
|
|
626
|
+
// @ts-expect-error
|
|
627
|
+
var _this$props2 = this.props,
|
|
628
|
+
layer = _this$props2.layer,
|
|
629
|
+
onChange = _this$props2.onChange,
|
|
630
|
+
selectedColor = _this$props2.selectedColor,
|
|
631
|
+
_this$props2$property = _this$props2.property,
|
|
632
|
+
property = _this$props2$property === void 0 ? 'color' : _this$props2$property,
|
|
633
|
+
_setColorUI = _this$props2.setColorUI,
|
|
634
|
+
fields = _this$props2.fields;
|
|
635
|
+
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
636
|
+
id: "layer.color"
|
|
637
|
+
})), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
|
|
638
|
+
fields: fields,
|
|
639
|
+
colorSets: [{
|
|
640
|
+
selectedColor: selectedColor || layer.config.color,
|
|
641
|
+
setColor: function setColor(rgbValue) {
|
|
642
|
+
return onChange((0, _defineProperty2["default"])({}, property, rgbValue));
|
|
643
|
+
}
|
|
644
|
+
}],
|
|
645
|
+
colorUI: layer.config.colorUI[property],
|
|
646
|
+
setColorUI: function setColorUI(newConfig) {
|
|
647
|
+
return _setColorUI(property, newConfig);
|
|
648
|
+
}
|
|
649
|
+
}));
|
|
650
|
+
}
|
|
651
|
+
}]);
|
|
652
|
+
}(_react.Component);
|
|
653
|
+
return LayerColorSelector;
|
|
654
|
+
}
|
|
655
|
+
ArcLayerColorSelectorFactory.deps = [_colorSelector["default"]];
|
|
656
|
+
function ArcLayerColorSelectorFactory(ColorSelector) {
|
|
657
|
+
var ArcLayerColorSelector = /*#__PURE__*/function (_Component3) {
|
|
658
|
+
function ArcLayerColorSelector() {
|
|
659
|
+
(0, _classCallCheck2["default"])(this, ArcLayerColorSelector);
|
|
660
|
+
return _callSuper(this, ArcLayerColorSelector, arguments);
|
|
661
|
+
}
|
|
662
|
+
(0, _inherits2["default"])(ArcLayerColorSelector, _Component3);
|
|
663
|
+
return (0, _createClass2["default"])(ArcLayerColorSelector, [{
|
|
664
|
+
key: "render",
|
|
665
|
+
value: function render() {
|
|
666
|
+
var _ref13 = this.props,
|
|
667
|
+
layer = _ref13.layer,
|
|
668
|
+
onChangeConfig = _ref13.onChangeConfig,
|
|
669
|
+
onChangeVisConfig = _ref13.onChangeVisConfig,
|
|
670
|
+
_ref13$property = _ref13.property,
|
|
671
|
+
property = _ref13$property === void 0 ? 'color' : _ref13$property,
|
|
672
|
+
_setColorUI2 = _ref13.setColorUI,
|
|
673
|
+
fields = _ref13.fields;
|
|
674
|
+
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
675
|
+
id: "layer.colorRange"
|
|
676
|
+
})), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
|
|
677
|
+
fields: fields,
|
|
678
|
+
colorSets: [{
|
|
679
|
+
selectedColor: layer.config.color,
|
|
680
|
+
setColor: function setColor(rgbValue) {
|
|
681
|
+
return onChangeConfig({
|
|
682
|
+
color: rgbValue
|
|
683
|
+
});
|
|
684
|
+
},
|
|
685
|
+
label: 'Source'
|
|
686
|
+
}, {
|
|
687
|
+
selectedColor: layer.config.visConfig.targetColor || layer.config.color,
|
|
688
|
+
setColor: function setColor(rgbValue) {
|
|
689
|
+
return onChangeVisConfig({
|
|
690
|
+
targetColor: rgbValue
|
|
691
|
+
});
|
|
692
|
+
},
|
|
693
|
+
label: 'Target'
|
|
694
|
+
}],
|
|
695
|
+
colorUI: layer.config.colorUI[property],
|
|
696
|
+
setColorUI: function setColorUI(newConfig) {
|
|
697
|
+
return _setColorUI2(property, newConfig);
|
|
698
|
+
}
|
|
699
|
+
}));
|
|
700
|
+
}
|
|
701
|
+
}]);
|
|
702
|
+
}(_react.Component);
|
|
703
|
+
return ArcLayerColorSelector;
|
|
704
|
+
}
|
|
705
|
+
LayerColorRangeSelectorFactory.deps = [_colorSelector["default"]];
|
|
706
|
+
function LayerColorRangeSelectorFactory(ColorSelector) {
|
|
707
|
+
var LayerColorRangeSelector = /*#__PURE__*/function (_Component4) {
|
|
708
|
+
function LayerColorRangeSelector() {
|
|
709
|
+
(0, _classCallCheck2["default"])(this, LayerColorRangeSelector);
|
|
710
|
+
return _callSuper(this, LayerColorRangeSelector, arguments);
|
|
711
|
+
}
|
|
712
|
+
(0, _inherits2["default"])(LayerColorRangeSelector, _Component4);
|
|
713
|
+
return (0, _createClass2["default"])(LayerColorRangeSelector, [{
|
|
714
|
+
key: "__renderHeatmapColorSelectorComponent",
|
|
715
|
+
value: function __renderHeatmapColorSelectorComponent() {
|
|
716
|
+
var property = 'colorRange';
|
|
717
|
+
var _ref14 = this.props,
|
|
718
|
+
layer = _ref14.layer,
|
|
719
|
+
onChange = _ref14.onChange,
|
|
720
|
+
_setColorUI3 = _ref14.setColorUI;
|
|
721
|
+
return /*#__PURE__*/_react["default"].createElement(ColorSelector, {
|
|
722
|
+
colorSets: [{
|
|
723
|
+
selectedColor: layer.config.visConfig[property],
|
|
724
|
+
isRange: true,
|
|
725
|
+
setColor: function setColor(colorRange) {
|
|
726
|
+
var colorMap = layer.config.visConfig[property].colorMap;
|
|
727
|
+
var colorRangeUpdated = colorMap ? layer.updateColorMap(property, colorMap, colorRange) : colorRange;
|
|
728
|
+
onChange((0, _defineProperty2["default"])({}, property, colorRangeUpdated));
|
|
729
|
+
}
|
|
730
|
+
}],
|
|
731
|
+
colorUI: layer.config.colorUI[property],
|
|
732
|
+
setColorUI: function setColorUI(newConfig) {
|
|
733
|
+
return _setColorUI3(property, newConfig);
|
|
734
|
+
}
|
|
735
|
+
});
|
|
736
|
+
}
|
|
737
|
+
}, {
|
|
738
|
+
key: "__renderDefaultColorSelectorComponent",
|
|
739
|
+
value: function __renderDefaultColorSelectorComponent() {
|
|
740
|
+
var _ref15 = this.props,
|
|
741
|
+
layer = _ref15.layer,
|
|
742
|
+
onChange = _ref15.onChange,
|
|
743
|
+
_ref15$channel = _ref15.channel,
|
|
744
|
+
channel = _ref15$channel === void 0 ? 'color' : _ref15$channel,
|
|
745
|
+
_setColorUI4 = _ref15.setColorUI,
|
|
746
|
+
fields = _ref15.fields,
|
|
747
|
+
_ref15$handleCustomOn = _ref15.handleCustomOnSelectHexColumn,
|
|
748
|
+
handleCustomOnSelectHexColumn = _ref15$handleCustomOn === void 0 ? function () {
|
|
749
|
+
return null;
|
|
750
|
+
} : _ref15$handleCustomOn;
|
|
751
|
+
var _layer$visualChannels = layer.visualChannels[channel],
|
|
752
|
+
property = _layer$visualChannels.range,
|
|
753
|
+
field = _layer$visualChannels.field,
|
|
754
|
+
scale = _layer$visualChannels.scale;
|
|
755
|
+
return /*#__PURE__*/_react["default"].createElement(ColorSelector, {
|
|
756
|
+
fields: fields,
|
|
757
|
+
colorSets: [{
|
|
758
|
+
selectedColor: layer.config.visConfig[property],
|
|
759
|
+
isRange: true,
|
|
760
|
+
setColor: function setColor(colorRange) {
|
|
761
|
+
var colorMap = layer.config.visConfig[property].colorMap;
|
|
762
|
+
var colorRangeUpdated = colorMap ? layer.updateColorMap(property, colorMap, colorRange) : colorRange;
|
|
763
|
+
// Ensure that scale changes from identity to ordinal
|
|
764
|
+
// Validate scale to ensure that it changes from `identity` to the correct one.
|
|
765
|
+
if (layer.isColoredByColorColumn(property)) {
|
|
766
|
+
layer.updateLayerConfig((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, layer.config[field]), {}, {
|
|
767
|
+
colorColumn: null,
|
|
768
|
+
colorColumnIdx: null
|
|
769
|
+
})), scale, _defaultSettings.SCALE_TYPES.ordinal));
|
|
770
|
+
layer.validateScale(channel);
|
|
771
|
+
}
|
|
772
|
+
// ---------------------------------------
|
|
773
|
+
onChange((0, _defineProperty2["default"])({}, property, colorRangeUpdated));
|
|
774
|
+
}
|
|
775
|
+
}],
|
|
776
|
+
colorUI: layer.config.colorUI[property],
|
|
777
|
+
setColorUI: function setColorUI(newConfig) {
|
|
778
|
+
return _setColorUI4(property, newConfig);
|
|
779
|
+
},
|
|
780
|
+
onSelectHexColorColumn: function onSelectHexColorColumn(colorColumn) {
|
|
781
|
+
// It's defined in CN: see workspace-www/src/features/builder/ui/KeplerGl/SidePanel/LayerPanel/LayerColorRangeSelector.tsx
|
|
782
|
+
handleCustomOnSelectHexColumn(layer, colorColumn);
|
|
783
|
+
layer.updateLayerConfig((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, layer.config[field]), {}, {
|
|
784
|
+
colorColumn: colorColumn === null || colorColumn === void 0 ? void 0 : colorColumn.name,
|
|
785
|
+
colorColumnIdx: colorColumn === null || colorColumn === void 0 ? void 0 : colorColumn.fieldIdx
|
|
786
|
+
})), scale, _defaultSettings.SCALE_TYPES.identity));
|
|
787
|
+
onChange((0, _defineProperty2["default"])({}, property, _colorRanges.hexColorCustomPalette));
|
|
788
|
+
}
|
|
789
|
+
});
|
|
790
|
+
}
|
|
791
|
+
}, {
|
|
792
|
+
key: "render",
|
|
793
|
+
value: function render() {
|
|
794
|
+
var _ref16 = this.props,
|
|
795
|
+
layer = _ref16.layer;
|
|
796
|
+
var renderColorSelectorComponent = this.__renderDefaultColorSelectorComponent.bind(this);
|
|
797
|
+
if (layer.type === _types.LAYER_TYPES.heatmap) {
|
|
798
|
+
renderColorSelectorComponent = this.__renderHeatmapColorSelectorComponent.bind(this);
|
|
799
|
+
}
|
|
800
|
+
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
801
|
+
id: "layer.colorRange"
|
|
802
|
+
})), renderColorSelectorComponent());
|
|
803
|
+
}
|
|
804
|
+
}]);
|
|
805
|
+
}(_react.Component);
|
|
806
|
+
return LayerColorRangeSelector;
|
|
807
|
+
}
|
|
808
|
+
ChannelByValueSelectorFactory.deps = [_visConfigByFieldSelector["default"]];
|
|
809
|
+
function ChannelByValueSelectorFactory(VisConfigByFieldSelector) {
|
|
810
|
+
var ChannelByValueSelector = function ChannelByValueSelector(_ref17) {
|
|
811
|
+
var layer = _ref17.layer,
|
|
812
|
+
channel = _ref17.channel,
|
|
813
|
+
onChange = _ref17.onChange,
|
|
814
|
+
onChangeVisConfig = _ref17.onChangeVisConfig,
|
|
815
|
+
fields = _ref17.fields,
|
|
816
|
+
fieldsAggregated = _ref17.fieldsAggregated,
|
|
817
|
+
description = _ref17.description,
|
|
818
|
+
isLoading = _ref17.isLoading;
|
|
819
|
+
var channelScaleType = channel.channelScaleType,
|
|
820
|
+
domain = channel.domain,
|
|
821
|
+
field = channel.field,
|
|
822
|
+
aggregation = channel.aggregation,
|
|
823
|
+
key = channel.key,
|
|
824
|
+
property = channel.property,
|
|
825
|
+
range = channel.range,
|
|
826
|
+
scale = channel.scale,
|
|
827
|
+
defaultMeasure = channel.defaultMeasure,
|
|
828
|
+
supportedFieldTypes = channel.supportedFieldTypes;
|
|
829
|
+
var channelSupportedFieldTypes = supportedFieldTypes || _defaultSettings.CHANNEL_SCALE_SUPPORTED_FIELDS[channelScaleType];
|
|
830
|
+
var supportedFields = fields.filter(function (_ref18) {
|
|
831
|
+
var type = _ref18.type;
|
|
832
|
+
return channelSupportedFieldTypes.includes(type);
|
|
833
|
+
});
|
|
834
|
+
var scaleOptions = layer.getScaleOptions(channel.key);
|
|
835
|
+
var showScaleCustomizable = channelScaleType === _defaultSettings.CHANNEL_SCALES.color && scale && layer.config[scale] && Boolean(layer.config[field]) && (scaleOptions === null || scaleOptions === void 0 ? void 0 : scaleOptions.length) > 0;
|
|
836
|
+
var showScale = Boolean(!showScaleCustomizable && scale && !layer.isAggregated && layer.config[scale] && (scaleOptions === null || scaleOptions === void 0 ? void 0 : scaleOptions.length) > 1);
|
|
837
|
+
var defaultDescription = 'layerConfiguration.defaultDescription';
|
|
838
|
+
var visRange = layer.config.visConfig[range];
|
|
839
|
+
var aggregator = layer.config.visConfig[aggregation];
|
|
840
|
+
return /*#__PURE__*/_react["default"].createElement(VisConfigByFieldSelector, {
|
|
841
|
+
channel: channel.key,
|
|
842
|
+
description: description || defaultDescription,
|
|
843
|
+
domain: layer.config[domain],
|
|
844
|
+
fields: supportedFields,
|
|
845
|
+
aggregator: aggregator,
|
|
846
|
+
fieldsAggregated: fieldsAggregated,
|
|
847
|
+
id: layer.id,
|
|
848
|
+
key: "".concat(key, "-channel-selector"),
|
|
849
|
+
property: property,
|
|
850
|
+
placeholder: defaultMeasure || 'placeholder.selectField',
|
|
851
|
+
range: visRange,
|
|
852
|
+
scaleOptions: scaleOptions,
|
|
853
|
+
scaleType: scale ? layer.config[scale] : null,
|
|
854
|
+
selectedField: layer.config[field],
|
|
855
|
+
showScale: showScale,
|
|
856
|
+
showScaleCustomizable: showScaleCustomizable,
|
|
857
|
+
updateField: function updateField(val) {
|
|
858
|
+
if (visRange !== null && visRange !== void 0 && visRange.colorMap) {
|
|
859
|
+
onChangeVisConfig((0, _defineProperty2["default"])({}, range, _objectSpread(_objectSpread({}, visRange), {}, {
|
|
860
|
+
colorMap: undefined
|
|
861
|
+
})));
|
|
862
|
+
}
|
|
863
|
+
if (!val) {
|
|
864
|
+
// Clean everything and comeback to default behaviour
|
|
865
|
+
onChange((0, _defineProperty2["default"])({}, field, null), key);
|
|
866
|
+
onChangeVisConfig((0, _defineProperty2["default"])({}, range, _colorRanges.DEFAULT_COLOR_RANGE));
|
|
867
|
+
}
|
|
868
|
+
onChange(_objectSpread((0, _defineProperty2["default"])({}, field, val), fieldsAggregated && {
|
|
869
|
+
visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, val === null || val === void 0 ? void 0 : val.selectedAggregator))
|
|
870
|
+
}), key);
|
|
871
|
+
layer.validateScale(key);
|
|
872
|
+
},
|
|
873
|
+
updateScale: function updateScale(val) {
|
|
874
|
+
return onChange((0, _defineProperty2["default"])({}, scale, val), key);
|
|
875
|
+
},
|
|
876
|
+
updateCustomPalette: function updateCustomPalette(colorMap, uiCustomScaleType) {
|
|
877
|
+
onChangeVisConfig((0, _defineProperty2["default"])({}, range, _objectSpread(_objectSpread({}, visRange), {}, {
|
|
878
|
+
colorMap: colorMap,
|
|
879
|
+
uiCustomScaleType: uiCustomScaleType
|
|
880
|
+
})));
|
|
881
|
+
},
|
|
882
|
+
isLoading: isLoading
|
|
883
|
+
});
|
|
884
|
+
};
|
|
885
|
+
return ChannelByValueSelector;
|
|
886
|
+
}
|
|
887
|
+
AggrScaleSelectorFactory.deps = [_colorDimensionScaleSelector["default"]];
|
|
888
|
+
function AggrScaleSelectorFactory(ColorDimensionScaleSelector) {
|
|
889
|
+
var AggrScaleSelector = /*#__PURE__*/function (_Component5) {
|
|
890
|
+
function AggrScaleSelector() {
|
|
891
|
+
(0, _classCallCheck2["default"])(this, AggrScaleSelector);
|
|
892
|
+
return _callSuper(this, AggrScaleSelector, arguments);
|
|
893
|
+
}
|
|
894
|
+
(0, _inherits2["default"])(AggrScaleSelector, _Component5);
|
|
895
|
+
return (0, _createClass2["default"])(AggrScaleSelector, [{
|
|
896
|
+
key: "render",
|
|
897
|
+
value: function render() {
|
|
898
|
+
var _ref19 = this.props,
|
|
899
|
+
channel = _ref19.channel,
|
|
900
|
+
layer = _ref19.layer,
|
|
901
|
+
onChange = _ref19.onChange,
|
|
902
|
+
onChangeVisConfig = _ref19.onChangeVisConfig;
|
|
903
|
+
var scale = channel.scale,
|
|
904
|
+
key = channel.key,
|
|
905
|
+
channelScaleType = channel.channelScaleType,
|
|
906
|
+
domain = channel.domain,
|
|
907
|
+
range = channel.range;
|
|
908
|
+
var scaleOptions = layer.getScaleOptions(key);
|
|
909
|
+
var visRange = layer.config.visConfig[range];
|
|
910
|
+
var showScaleCustomizable = channelScaleType === _defaultSettings.CHANNEL_SCALES.colorAggr && Array.isArray(scaleOptions) && scaleOptions.length > 0;
|
|
911
|
+
var showScale = Array.isArray(scaleOptions) && scaleOptions.length > 1;
|
|
912
|
+
if (showScaleCustomizable) {
|
|
913
|
+
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(ColorDimensionScaleSelector, {
|
|
914
|
+
label: "".concat(key, " Scale"),
|
|
915
|
+
scaleType: layer.config[scale],
|
|
916
|
+
options: scaleOptions,
|
|
917
|
+
domain: layer.config[domain],
|
|
918
|
+
range: visRange,
|
|
919
|
+
onSelect: function onSelect(val) {
|
|
920
|
+
return onChange((0, _defineProperty2["default"])({}, scale, val), key);
|
|
921
|
+
},
|
|
922
|
+
onSetCustomPalette: function onSetCustomPalette(colorMap, uiCustomScaleType) {
|
|
923
|
+
onChangeVisConfig((0, _defineProperty2["default"])({}, range, _objectSpread(_objectSpread({}, visRange), {}, {
|
|
924
|
+
colorMap: colorMap,
|
|
925
|
+
uiCustomScaleType: uiCustomScaleType
|
|
926
|
+
})));
|
|
927
|
+
}
|
|
928
|
+
}));
|
|
929
|
+
}
|
|
930
|
+
if (showScale) {
|
|
931
|
+
return /*#__PURE__*/_react["default"].createElement(_dimensionScaleSelector["default"], {
|
|
932
|
+
label: "".concat(key, " Scale"),
|
|
933
|
+
options: scaleOptions,
|
|
934
|
+
scaleType: layer.config[scale],
|
|
935
|
+
onSelect: function onSelect(val) {
|
|
936
|
+
return onChange((0, _defineProperty2["default"])({}, scale, val), key);
|
|
937
|
+
}
|
|
938
|
+
});
|
|
939
|
+
}
|
|
940
|
+
return null;
|
|
941
|
+
}
|
|
942
|
+
}]);
|
|
943
|
+
}(_react.Component);
|
|
944
|
+
return (0, _reactIntl.injectIntl)(AggrScaleSelector);
|
|
945
|
+
}
|
|
946
|
+
var AggregationTypeSelector = exports.AggregationTypeSelector = function AggregationTypeSelector(_ref20) {
|
|
947
|
+
var layer = _ref20.layer,
|
|
948
|
+
channel = _ref20.channel,
|
|
949
|
+
_onChange9 = _ref20.onChange;
|
|
950
|
+
var field = channel.field,
|
|
951
|
+
aggregation = channel.aggregation,
|
|
952
|
+
key = channel.key;
|
|
953
|
+
var selectedField = layer.config[field];
|
|
954
|
+
var visConfig = layer.config.visConfig;
|
|
955
|
+
|
|
956
|
+
// aggregation should only be selectable when field is selected
|
|
957
|
+
var aggregationOptions = layer.getAggregationOptions(key);
|
|
958
|
+
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
|
|
959
|
+
id: 'layer.aggregateBy',
|
|
960
|
+
values: {
|
|
961
|
+
field: selectedField.name
|
|
962
|
+
}
|
|
963
|
+
})), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
|
|
964
|
+
selectedItems: visConfig[aggregation],
|
|
965
|
+
options: aggregationOptions,
|
|
966
|
+
multiSelect: false,
|
|
967
|
+
searchable: false,
|
|
968
|
+
onChange: function onChange(value) {
|
|
969
|
+
return _onChange9({
|
|
970
|
+
visConfig: _objectSpread(_objectSpread({}, layer.config.visConfig), {}, (0, _defineProperty2["default"])({}, aggregation, value))
|
|
971
|
+
}, channel.key);
|
|
972
|
+
}
|
|
973
|
+
}));
|
|
974
|
+
};
|
|
975
|
+
|
|
976
|
+
/* eslint-enable max-params */
|
|
977
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2xvY2FsaXphdGlvbiIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9pdGVtU2VsZWN0b3IiLCJfdmlzQ29uZmlnQnlGaWVsZFNlbGVjdG9yIiwiX2xheWVyQ29sdW1uQ29uZmlnIiwiX2xheWVyVHlwZVNlbGVjdG9yIiwiX2xheWVyVmlzaWJpbGl0eUJ5Wm9vbSIsIl9kaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiX3NvdXJjZURhdGFTZWxlY3RvciIsIl92aXNDb25maWdTd2l0Y2giLCJfdmlzQ29uZmlnU2xpZGVyIiwiX2xheWVyQ29uZmlnR3JvdXAiLCJfY3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwIiwiX3RleHRMYWJlbFBhbmVsIiwiX3V0aWxzIiwiX2RlZmF1bHRTZXR0aW5ncyIsIl90eXBlcyIsIl9yZWFjdEludGwiLCJfY29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiX2NvbG9yU2VsZWN0b3IiLCJfbGF5ZXJBZ2dyZWdhdGlvblJlc29sdXRpb24iLCJfY29sb3JSYW5nZXMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImxheWVyQ29uZmlndXJhdG9yTWFyZ2luIiwibGF5ZXJDb25maWd1cmF0b3JQYWRkaW5nIiwibGF5ZXJDb25maWd1cmF0b3JCb3JkZXIiLCJsYXllckNvbmZpZ3VyYXRvckJvcmRlckNvbG9yIiwiU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3IiLCJnZXRMYXllckZpZWxkcyIsImV4cG9ydHMiLCJkYXRhc2V0cyIsImxheWVyIiwiY29uZmlnIiwiZGF0YUlkIiwiZmllbGRzIiwiZ2V0TGF5ZXJEYXRhc2V0IiwiZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsImRpc2FibGVkIiwib25DaGFuZ2UiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNldENvbG9yVUkiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJnZXRWaXNDb25maWd1cmF0b3JQcm9wcyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJvbkNoYW5nZVZpc0NvbmZpZyIsIkxheWVyQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5IiwiVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSIsIlRleHRMYWJlbFBhbmVsRmFjdG9yeSIsIkxheWVyQ29uZmlnR3JvdXBGYWN0b3J5IiwiQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnkiLCJMYXllclR5cGVTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdTd2l0Y2hGYWN0b3J5IiwiQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5IiwiTGF5ZXJWaXNpYmlsaXR5Qnlab29tRmFjdG9yeSIsIkxheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uRmFjdG9yeSIsIkxheWVyQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJMYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkiLCJBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwRmFjdG9yeSIsIlNvdXJjZURhdGFTZWxlY3RvciIsIlZpc0NvbmZpZ1NsaWRlciIsIlRleHRMYWJlbFBhbmVsIiwiTGF5ZXJDb25maWdHcm91cCIsIkNoYW5uZWxCeVZhbHVlU2VsZWN0b3IiLCJMYXllckNvbHVtbkNvbmZpZyIsIkxheWVyVHlwZVNlbGVjdG9yIiwiVmlzQ29uZmlnU3dpdGNoIiwiQWdnclNjYWxlU2VsZWN0b3IiLCJMYXllclZpc2liaWxpdHlCeVpvb20iLCJMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbiIsIkxheWVyQ29sb3JTZWxlY3RvciIsIkxheWVyQ29sb3JSYW5nZVNlbGVjdG9yIiwiQXJjTGF5ZXJDb2xvclNlbGVjdG9yIiwiQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwIiwiTGF5ZXJDb25maWd1cmF0b3IiLCJfQ29tcG9uZW50IiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJfcmVuZGVyUG9pbnRMYXllckNvbmZpZyIsIl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnIiwiX3JlbmRlckljb25MYXllckNvbmZpZyIsIl9yZWYiLCJ2aXNDb25maWd1cmF0b3JQcm9wcyIsImxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzIiwibGF5ZXJDb25maWd1cmF0b3JQcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImZpbGxlZCIsImxhYmVsIiwiY29sbGFwc2libGUiLCJjb2xvckZpZWxkIiwiQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQiLCJjaGFubmVsIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsIm9wYWNpdHkiLCJ0eXBlIiwiTEFZRVJfVFlQRVMiLCJwb2ludCIsIm91dGxpbmUiLCJ2aXNDb25maWciLCJjdXN0b21NYXJrZXJzIiwic3Ryb2tlQ29sb3JGaWVsZCIsInNlbGVjdGVkQ29sb3IiLCJzdHJva2VDb2xvciIsInByb3BlcnR5IiwidGhpY2tuZXNzIiwic2l6ZUZpZWxkIiwicmFkaXVzIiwicmFkaXVzUmFuZ2UiLCJzaXplIiwidXBkYXRlTGF5ZXJUZXh0TGFiZWwiLCJ0ZXh0TGFiZWwiLCJjb2xvclBhbGV0dGUiLCJzZXRDb2xvclBhbGV0dGVVSSIsIl9yZW5kZXJDbHVzdGVyTGF5ZXJDb25maWciLCJfcmVmMiIsImNvbG9yQWdncmVnYXRpb24iLCJjb25kaXRpb24iLCJBZ2dyZWdhdGlvblR5cGVTZWxlY3RvciIsImNsdXN0ZXJSYWRpdXMiLCJfcmVuZGVySGVhdG1hcExheWVyQ29uZmlnIiwiX3JlZjMiLCJ3ZWlnaHQiLCJfcmVuZGVyR3JpZExheWVyQ29uZmlnIiwiX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWciLCJfcmVuZGVySGV4YWdvbkxheWVyQ29uZmlnIiwiX3JlZjQiLCJlbmFibGUzZCIsImVsZXZhdGlvbkJ5RGVzY3JpcHRpb24iLCJjb2xvckJ5RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInBlcmNlbnRpbGUiLCJ3b3JsZFVuaXRTaXplIiwiY292ZXJhZ2UiLCJlbGV2YXRpb25TY2FsZSIsInNpemVSYW5nZSIsInNpemVBZ2dyZWdhdGlvbiIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJfcmVuZGVySGV4YWdvbklkTGF5ZXJDb25maWciLCJfcmVmNSIsImNvdmVyYWdlRmllbGQiLCJjb3ZlcmFnZVJhbmdlIiwiX3JlbmRlckFyY0xheWVyQ29uZmlnIiwiYXJncyIsIl9yZW5kZXJMaW5lTGF5ZXJDb25maWciLCJfcmVmNiIsIm9uQ2hhbmdlQ29uZmlnIiwic291cmNlQ29sb3IiLCJfcmVuZGVyVHJpcExheWVyQ29uZmlnIiwiX3JlZjciLCJfbGF5ZXIkbWV0YSRmZWF0dXJlVHkiLCJtZXRhIiwiZmVhdHVyZVR5cGVzIiwicG9seWdvbiIsInN0cm9rZWQiLCJ0cmFpbExlbmd0aCIsIl9yZW5kZXJHZW9qc29uTGF5ZXJDb25maWciLCJfcmVmOCIsIl9sYXllciRtZXRhJGZlYXR1cmVUeTIiLCJzdHJva2VPcGFjaXR5IiwiaGVpZ2h0Iiwid2lyZWZyYW1lIiwicmFkaXVzRmllbGQiLCJfcmVuZGVyM0RMYXllckNvbmZpZyIsIl9yZWY5IiwiRnJhZ21lbnQiLCJJbnB1dCIsImFjY2VwdCIsInRhcmdldCIsImZpbGVzIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwic2NlbmVncmFwaCIsInNpemVTY2FsZSIsImFuZ2xlWCIsImFuZ2xlWSIsImFuZ2xlWiIsIl9yZW5kZXJTMkxheWVyQ29uZmlnIiwiX3JlZjEwIiwiaGVpZ2h0UmFuZ2UiLCJyZW5kZXIiLCJfdGhpcyIsIl90aGlzJHByb3BzIiwibGF5ZXJUeXBlT3B0aW9ucyIsInVwZGF0ZUxheWVyVHlwZSIsIl9yZWYxMSIsIl9yZWYxMSRmaWVsZHMiLCJfcmVmMTEkZmllbGRQYWlycyIsImZpZWxkUGFpcnMiLCJ1bmRlZmluZWQiLCJkYXRhc2V0IiwicmVuZGVyVGVtcGxhdGUiLCJjb25jYXQiLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJsYXllckluZm9Nb2RhbCIsIkhvd1RvQnV0dG9uIiwib25DbGljayIsIm9wZW5Nb2RhbCIsImNvbHVtbnMiLCJleHBhbmRlZCIsImhhc0FsbENvbHVtbnMiLCJvblNlbGVjdCIsImlkIiwiY29sdW1uUGFpcnMiLCJhc3NpZ25Db2x1bW5QYWlycyIsImJpbmQiLCJhc3NpZ25Db2x1bW4iLCJjb2x1bW5MYWJlbHMiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJib29sIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsImFycmF5T2YiLCJhbnkiLCJmdW5jIiwiU3R5bGVkSG93VG9CdXR0b24iLCJfcmVmMTIiLCJCdXR0b24iLCJsaW5rIiwic21hbGwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiQ29sb3JTZWxlY3RvckZhY3RvcnkiLCJDb2xvclNlbGVjdG9yIiwiX0NvbXBvbmVudDIiLCJfdGhpcyRwcm9wczIiLCJfdGhpcyRwcm9wczIkcHJvcGVydHkiLCJTaWRlUGFuZWxTZWN0aW9uIiwiUGFuZWxMYWJlbCIsImNvbG9yU2V0cyIsInNldENvbG9yIiwicmdiVmFsdWUiLCJjb2xvclVJIiwibmV3Q29uZmlnIiwiX0NvbXBvbmVudDMiLCJfcmVmMTMiLCJfcmVmMTMkcHJvcGVydHkiLCJ0YXJnZXRDb2xvciIsIl9Db21wb25lbnQ0IiwiX19yZW5kZXJIZWF0bWFwQ29sb3JTZWxlY3RvckNvbXBvbmVudCIsIl9yZWYxNCIsImlzUmFuZ2UiLCJjb2xvclJhbmdlIiwiY29sb3JNYXAiLCJjb2xvclJhbmdlVXBkYXRlZCIsInVwZGF0ZUNvbG9yTWFwIiwiX19yZW5kZXJEZWZhdWx0Q29sb3JTZWxlY3RvckNvbXBvbmVudCIsIl9yZWYxNSIsIl9yZWYxNSRjaGFubmVsIiwiX3JlZjE1JGhhbmRsZUN1c3RvbU9uIiwiaGFuZGxlQ3VzdG9tT25TZWxlY3RIZXhDb2x1bW4iLCJfbGF5ZXIkdmlzdWFsQ2hhbm5lbHMiLCJyYW5nZSIsImZpZWxkIiwic2NhbGUiLCJpc0NvbG9yZWRCeUNvbG9yQ29sdW1uIiwiY29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbklkeCIsIlNDQUxFX1RZUEVTIiwib3JkaW5hbCIsInZhbGlkYXRlU2NhbGUiLCJvblNlbGVjdEhleENvbG9yQ29sdW1uIiwibmFtZSIsImZpZWxkSWR4IiwiaWRlbnRpdHkiLCJoZXhDb2xvckN1c3RvbVBhbGV0dGUiLCJfcmVmMTYiLCJyZW5kZXJDb2xvclNlbGVjdG9yQ29tcG9uZW50IiwiaGVhdG1hcCIsIlZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvckZhY3RvcnkiLCJWaXNDb25maWdCeUZpZWxkU2VsZWN0b3IiLCJfcmVmMTciLCJmaWVsZHNBZ2dyZWdhdGVkIiwiaXNMb2FkaW5nIiwiY2hhbm5lbFNjYWxlVHlwZSIsImRvbWFpbiIsImFnZ3JlZ2F0aW9uIiwiZGVmYXVsdE1lYXN1cmUiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzdXBwb3J0ZWRGaWVsZHMiLCJfcmVmMTgiLCJpbmNsdWRlcyIsInNjYWxlT3B0aW9ucyIsImdldFNjYWxlT3B0aW9ucyIsInNob3dTY2FsZUN1c3RvbWl6YWJsZSIsIkNIQU5ORUxfU0NBTEVTIiwic2hvd1NjYWxlIiwiaXNBZ2dyZWdhdGVkIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwidmlzUmFuZ2UiLCJhZ2dyZWdhdG9yIiwicGxhY2Vob2xkZXIiLCJzY2FsZVR5cGUiLCJzZWxlY3RlZEZpZWxkIiwidXBkYXRlRmllbGQiLCJ2YWwiLCJERUZBVUxUX0NPTE9SX1JBTkdFIiwic2VsZWN0ZWRBZ2dyZWdhdG9yIiwidXBkYXRlU2NhbGUiLCJ1cGRhdGVDdXN0b21QYWxldHRlIiwidWlDdXN0b21TY2FsZVR5cGUiLCJDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JGYWN0b3J5IiwiQ29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yIiwiX0NvbXBvbmVudDUiLCJfcmVmMTkiLCJjb2xvckFnZ3IiLCJBcnJheSIsImlzQXJyYXkiLCJvcHRpb25zIiwib25TZXRDdXN0b21QYWxldHRlIiwiaW5qZWN0SW50bCIsIl9yZWYyMCIsImFnZ3JlZ2F0aW9uT3B0aW9ucyIsImdldEFnZ3JlZ2F0aW9uT3B0aW9ucyIsInZhbHVlcyIsInNlbGVjdGVkSXRlbXMiLCJtdWx0aVNlbGVjdCIsInNlYXJjaGFibGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLWNvbmZpZ3VyYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBGcmFnbWVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdsb2NhbGl6YXRpb24nO1xuXG5pbXBvcnQge0J1dHRvbiwgSW5wdXQsIFBhbmVsTGFiZWwsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBJdGVtU2VsZWN0b3IgZnJvbSAnY29tcG9uZW50cy9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcblxuaW1wb3J0IFZpc0NvbmZpZ0J5RmllbGRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLWJ5LWZpZWxkLXNlbGVjdG9yJztcbmltcG9ydCBMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnkgZnJvbSAnLi9sYXllci1jb2x1bW4tY29uZmlnJztcbmltcG9ydCBMYXllclR5cGVTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9sYXllci10eXBlLXNlbGVjdG9yJztcbmltcG9ydCBMYXllclZpc2liaWxpdHlCeVpvb21GYWN0b3J5IGZyb20gJy4vbGF5ZXItdmlzaWJpbGl0eS1ieS16b29tJztcbmltcG9ydCBEaW1lbnNpb25TY2FsZVNlbGVjdG9yIGZyb20gJy4vZGltZW5zaW9uLXNjYWxlLXNlbGVjdG9yJztcbmltcG9ydCBTb3VyY2VEYXRhU2VsZWN0b3JGYWN0b3J5IGZyb20gJ2NvbXBvbmVudHMvc2lkZS1wYW5lbC9jb21tb24vc291cmNlLWRhdGEtc2VsZWN0b3InO1xuaW1wb3J0IFZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkgZnJvbSAnLi92aXMtY29uZmlnLXN3aXRjaCc7XG5pbXBvcnQgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSBmcm9tICcuL3Zpcy1jb25maWctc2xpZGVyJztcbmltcG9ydCBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSwge0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50fSBmcm9tICcuL2xheWVyLWNvbmZpZy1ncm91cCc7XG5pbXBvcnQgQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwRmFjdG9yeSBmcm9tICcuL2N1c3RvbS1tYXJrZXJzLWNvbmZpZy1ncm91cCc7XG5pbXBvcnQgVGV4dExhYmVsUGFuZWxGYWN0b3J5IGZyb20gJy4vdGV4dC1sYWJlbC1wYW5lbCc7XG5cbmltcG9ydCB7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyfSBmcm9tICd1dGlscy91dGlscyc7XG5cbmltcG9ydCB7XG4gIENIQU5ORUxfU0NBTEVTLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIFNDQUxFX1RZUEVTXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7TEFZRVJfVFlQRVN9IGZyb20gJ2xheWVycy90eXBlcyc7XG5pbXBvcnQge2luamVjdEludGx9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IENvbG9yRGltZW5zaW9uU2NhbGVTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9jb2xvci1kaW1lbnNpb24tc2NhbGUtc2VsZWN0b3InO1xuaW1wb3J0IENvbG9yU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY29sb3Itc2VsZWN0b3InO1xuaW1wb3J0IExheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uRmFjdG9yeSBmcm9tICcuL2xheWVyLWFnZ3JlZ2F0aW9uLXJlc29sdXRpb24nO1xuaW1wb3J0IHtERUZBVUxUX0NPTE9SX1JBTkdFLCBoZXhDb2xvckN1c3RvbVBhbGV0dGV9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuXG5jb25zdCBTdHlsZWRMYXllckNvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdsYXllci1wYW5lbF9fY29uZmlnJ1xufSlgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllckNvbmZpZ3VyYXRvck1hcmdpbn07XG4gIHBhZGRpbmc6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JQYWRkaW5nfTtcbiAgYm9yZGVyLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JCb3JkZXJ9IGRhc2hlZFxuICAgICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWd1cmF0b3JCb3JkZXJDb2xvcn07XG5gO1xuXG5jb25zdCBTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdsYXllci1wYW5lbF9fY29uZmlnX192aXN1YWxDLWNvbmZpZydcbn0pYFxuICBtYXJnaW4tdG9wOiAxMnB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IGdldExheWVyRmllbGRzID0gKGRhdGFzZXRzLCBsYXllcikgPT5cbiAgbGF5ZXIuY29uZmlnICYmIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0uZmllbGRzIDogW107XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckRhdGFzZXQgPSAoZGF0YXNldHMsIGxheWVyKSA9PlxuICBsYXllci5jb25maWcgJiYgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0gPyBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSA6IG51bGw7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXllckNvbmZpZ3VyYXRvclByb3BzID0gcHJvcHMgPT4gKHtcbiAgbGF5ZXI6IHByb3BzLmxheWVyLFxuICBkaXNhYmxlZDogQm9vbGVhbihwcm9wcy5kaXNhYmxlZCksXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHMgPSBwcm9wcyA9PiAoe1xuICBsYXllcjogcHJvcHMubGF5ZXIsXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyVmlzQ29uZmlnLFxuICBzZXRDb2xvclVJOiBwcm9wcy51cGRhdGVMYXllckNvbG9yVUlcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMgPSBwcm9wcyA9PiAoe1xuICBsYXllcjogcHJvcHMubGF5ZXIsXG4gIGZpZWxkczogZ2V0TGF5ZXJGaWVsZHMocHJvcHMuZGF0YXNldHMsIHByb3BzLmxheWVyKSxcbiAgb25DaGFuZ2U6IHByb3BzLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZyxcbiAgb25DaGFuZ2VWaXNDb25maWc6IHByb3BzLnVwZGF0ZUxheWVyVmlzQ29uZmlnXG59KTtcblxuTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIFNvdXJjZURhdGFTZWxlY3RvckZhY3RvcnksXG4gIFZpc0NvbmZpZ1NsaWRlckZhY3RvcnksXG4gIFRleHRMYWJlbFBhbmVsRmFjdG9yeSxcbiAgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllckNvbHVtbkNvbmZpZ0ZhY3RvcnksXG4gIExheWVyVHlwZVNlbGVjdG9yRmFjdG9yeSxcbiAgVmlzQ29uZmlnU3dpdGNoRmFjdG9yeSxcbiAgQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5LFxuICBMYXllclZpc2liaWxpdHlCeVpvb21GYWN0b3J5LFxuICBMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbkZhY3RvcnksXG4gIExheWVyQ29sb3JTZWxlY3RvckZhY3RvcnksXG4gIExheWVyQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSxcbiAgQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeSxcbiAgQ3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwRmFjdG9yeVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5KFxuICBTb3VyY2VEYXRhU2VsZWN0b3IsXG4gIFZpc0NvbmZpZ1NsaWRlcixcbiAgVGV4dExhYmVsUGFuZWwsXG4gIExheWVyQ29uZmlnR3JvdXAsXG4gIENoYW5uZWxCeVZhbHVlU2VsZWN0b3IsXG4gIExheWVyQ29sdW1uQ29uZmlnLFxuICBMYXllclR5cGVTZWxlY3RvcixcbiAgVmlzQ29uZmlnU3dpdGNoLFxuICBBZ2dyU2NhbGVTZWxlY3RvcixcbiAgTGF5ZXJWaXNpYmlsaXR5Qnlab29tLFxuICBMYXllckFnZ3JlZ2F0aW9uUmVzb2x1dGlvbixcbiAgTGF5ZXJDb2xvclNlbGVjdG9yLFxuICBMYXllckNvbG9yUmFuZ2VTZWxlY3RvcixcbiAgQXJjTGF5ZXJDb2xvclNlbGVjdG9yLFxuICBDdXN0b21NYXJrZXJzQ29uZmlnR3JvdXBcbikge1xuICBjbGFzcyBMYXllckNvbmZpZ3VyYXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxheWVyOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgICAgbGF5ZXJUeXBlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIG9wZW5Nb2RhbDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyQ29uZmlnOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdXBkYXRlTGF5ZXJUeXBlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdXBkYXRlTGF5ZXJUZXh0TGFiZWw6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB1cGRhdGVMYXllclZpc0NvbmZpZzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZUxheWVyQ29sb3JVSTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH07XG5cbiAgICBfcmVuZGVyUG9pbnRMYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNjYXR0ZXJwbG90TGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJJY29uTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJTY2F0dGVycGxvdExheWVyQ29uZmlnKHByb3BzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyU2NhdHRlcnBsb3RMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4uKGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmZpbGxlZCB8fCB7bGFiZWw6ICdsYXllci5jb2xvcid9KX1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBvdXRsaW5lIGNvbG9yICovfVxuICAgICAgICAgIHtsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5wb2ludCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vdXRsaW5lfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGxheWVyLmNvbmZpZy52aXNDb25maWcuY3VzdG9tTWFya2Vycyl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBjaGFubmVsPVwic3Ryb2tlQ29sb3JcIiAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I9e2xheWVyLmNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnN0cm9rZUNvbG9yfVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5vdXRsaW5lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7bGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMucG9pbnQgPyAoXG4gICAgICAgICAgICA8Q3VzdG9tTWFya2Vyc0NvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wcz17bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgey8qIFJhZGl1cyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgbGFiZWw9e2xheWVyLmNvbmZpZy52aXNDb25maWcuY3VzdG9tTWFya2VycyA/ICdsYXllci5zaXplJyA6ICdsYXllci5yYWRpdXMnfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7IWxheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MucmFkaXVzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4obGF5ZXIuY29uZmlnLnNpemVGaWVsZCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcuc2l6ZUZpZWxkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRleHQgbGFiZWwgKi99XG4gICAgICAgICAgPFRleHRMYWJlbFBhbmVsXG4gICAgICAgICAgICBmaWVsZHM9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLmZpZWxkc31cbiAgICAgICAgICAgIHVwZGF0ZUxheWVyVGV4dExhYmVsPXsodGhpcy5wcm9wcyBhcyBhbnkpLnVwZGF0ZUxheWVyVGV4dExhYmVsfVxuICAgICAgICAgICAgdGV4dExhYmVsPXtsYXllci5jb25maWcudGV4dExhYmVsfVxuICAgICAgICAgICAgY29sb3JQYWxldHRlPXt2aXNDb25maWd1cmF0b3JQcm9wcy5jb2xvclBhbGV0dGV9XG4gICAgICAgICAgICBzZXRDb2xvclBhbGV0dGVVST17dmlzQ29uZmlndXJhdG9yUHJvcHMuc2V0Q29sb3JQYWxldHRlVUl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckNsdXN0ZXJMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8QWdnclNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZz17bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMub25DaGFuZ2VWaXNDb25maWd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7bGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JBZ2dyZWdhdGlvbi5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICA8QWdncmVnYXRpb25UeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIENsdXN0ZXIgUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jbHVzdGVyUmFkaXVzfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckhlYXRtYXBMYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvbG9yJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICB7LyogUmFkaXVzICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgey8qIFdlaWdodCAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLndlaWdodCd9PlxuICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMud2VpZ2h0fVxuICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlckdyaWRMYXllckNvbmZpZyhwcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckFnZ3JlZ2F0aW9uTGF5ZXJDb25maWcocHJvcHMpO1xuICAgIH1cblxuICAgIF9yZW5kZXJIZXhhZ29uTGF5ZXJDb25maWcocHJvcHMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJBZ2dyZWdhdGlvbkxheWVyQ29uZmlnKHByb3BzKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyQWdncmVnYXRpb25MYXllckNvbmZpZyh7XG4gICAgICBsYXllcixcbiAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzXG4gICAgfSkge1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmlzQ29uZmlnOiB7ZW5hYmxlM2R9XG4gICAgICB9ID0gY29uZmlnO1xuICAgICAgY29uc3QgZWxldmF0aW9uQnlEZXNjcmlwdGlvbiA9ICdsYXllci5lbGV2YXRpb25CeURlc2NyaXB0aW9uJztcbiAgICAgIGNvbnN0IGNvbG9yQnlEZXNjcmlwdGlvbiA9ICdsYXllci5jb2xvckJ5RGVzY3JpcHRpb24nO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxBZ2dyU2NhbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnPXtsYXllckNoYW5uZWxDb25maWdQcm9wcy5vbkNoYW5nZVZpc0NvbmZpZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5jb2xvckFnZ3JlZ2F0aW9uLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvbG9yQWdncmVnYXRpb259XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17Y29sb3JCeURlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5wZXJjZW50aWxlICYmXG4gICAgICAgICAgICAgIGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnBlcmNlbnRpbGUuY29uZGl0aW9uKGxheWVyLmNvbmZpZykgPyAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnBlcmNlbnRpbGV9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIENlbGwgc2l6ZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnJhZGl1cyd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud29ybGRVbml0U2l6ZX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5jb3ZlcmFnZX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGUzZCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGUzZH1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRNdWx0aXBsaWVyXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2VsZXZhdGlvbkJ5RGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWVuYWJsZTNkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEFnZ3JTY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZz17bGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMub25DaGFuZ2VWaXNDb25maWd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuaGVpZ2h0UmFuZ2VcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVBZ2dyZWdhdGlvbi5jb25kaXRpb24obGF5ZXIuY29uZmlnKSA/IChcbiAgICAgICAgICAgICAgICAgIDxBZ2dyZWdhdGlvblR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZUFnZ3JlZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtsYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25QZXJjZW50aWxlLmNvbmRpdGlvbihsYXllci5jb25maWcpID8gKFxuICAgICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uUGVyY2VudGlsZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogU2hhbiBtb3ZlIHRoZXNlIGludG8gbGF5ZXIgY2xhc3NcbiAgICBfcmVuZGVySGV4YWdvbklkTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBDb3ZlcmFnZSAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLmNvdmVyYWdlJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICB7IWxheWVyLmNvbmZpZy5jb3ZlcmFnZUZpZWxkID8gKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmNvdmVyYWdlUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY292ZXJhZ2V9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogaGVpZ2h0ICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZW5hYmxlM2R9XG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnNpemVSYW5nZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuaGVpZ2h0UmFuZ2VcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJBcmNMYXllckNvbmZpZyhhcmdzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGluZUxheWVyQ29uZmlnKGFyZ3MpO1xuICAgIH1cblxuICAgIF9yZW5kZXJMaW5lTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7LyogQ29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydsYXllci5jb2xvcid9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEFyY0xheWVyQ29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgICBzZXRDb2xvclVJPXtsYXllckNvbmZpZ3VyYXRvclByb3BzLnNldENvbG9yVUl9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VDb25maWc9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWc9e3Zpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zb3VyY2VDb2xvcn1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIHRoaWNrbmVzcyAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLnN0cm9rZSd9IGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWxheWVyLmNvbmZpZy5zaXplRmllbGR9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy50aGlja25lc3N9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZX1cbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBlbGV2YXRpb24gc2NhbGUgKi99XG4gICAgICAgICAge2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVsZXZhdGlvblNjYWxlID8gKFxuICAgICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9XCJsYXllclZpc0NvbmZpZ3MuZWxldmF0aW9uU2NhbGVcIiBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJUcmlwTGF5ZXJDb25maWcoe1xuICAgICAgbGF5ZXIsXG4gICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNoYW5uZWxDb25maWdQcm9wc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWV0YToge2ZlYXR1cmVUeXBlcyA9IHt9fVxuICAgICAgfSA9IGxheWVyO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICAgICAgey8qIENvbG9yICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIuY29sb3InfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuY29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3Igey4uLmxheWVyQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLmNvbG9yfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogVHJhaWwgTGVuZ3RoKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIHsuLi4oZmVhdHVyZVR5cGVzLnBvbHlnb24gPyBsYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkIDoge30pfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci50cmFpbExlbmd0aFwiXG4gICAgICAgICAgICBkZXNjcmlwdGlvbj1cImxheWVyLnRyYWlsTGVuZ3RoRGVzY3JpcHRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRyYWlsTGVuZ3RofVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICA8L1N0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfcmVuZGVyR2VvanNvbkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1ldGE6IHtmZWF0dXJlVHlwZXMgPSB7fX0sXG4gICAgICAgIGNvbmZpZzoge3Zpc0NvbmZpZ31cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBGaWxsIENvbG9yICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiB8fCBmZWF0dXJlVHlwZXMucG9pbnQgPyAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZmlsbGVkfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCJcbiAgICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxMYXllckNvbG9yUmFuZ2VTZWxlY3RvciB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXIgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLm9wYWNpdHl9IHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBzdHJva2UgY29sb3IgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gY2hhbm5lbD1cInN0cm9rZUNvbG9yXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnN0cm9rZU9wYWNpdHl9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICB7Li4uKGZlYXR1cmVUeXBlcy5wb2x5Z29uID8gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3Ryb2tlZCA6IHt9KX1cbiAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuc3Ryb2tlV2lkdGhcIlxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bGF5ZXIuY29uZmlnLnNpemVGaWVsZCA/IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplUmFuZ2V9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MudGhpY2tuZXNzfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICAgIGNoYW5uZWw9e2xheWVyLnZpc3VhbENoYW5uZWxzLnNpemV9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogRWxldmF0aW9uICovfVxuICAgICAgICAgIHtmZWF0dXJlVHlwZXMucG9seWdvbiA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IXZpc0NvbmZpZy5maWxsZWR9XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZWxldmF0aW9uU2NhbGV9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtmYWxzZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLndpcmVmcmFtZX0gLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHsvKiBSYWRpdXMgKi99XG4gICAgICAgICAge2ZlYXR1cmVUeXBlcy5wb2ludCA/IChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIGxhYmVsPXsnbGF5ZXIucmFkaXVzJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICAgIHshbGF5ZXIuY29uZmlnLnJhZGl1c0ZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5yYWRpdXN9XG4gICAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Qm9vbGVhbihsYXllci5jb25maWcucmFkaXVzRmllbGQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnJhZGl1c1JhbmdlfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYXllci5jb25maWcucmFkaXVzRmllbGR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5yYWRpdXN9XG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXJDaGFubmVsQ29uZmlnUHJvcHN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TdHlsZWRMYXllclZpc3VhbENvbmZpZ3VyYXRvcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3JlbmRlcjNETGF5ZXJDb25maWcoe2xheWVyLCB2aXNDb25maWd1cmF0b3JQcm9wc30pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLjNETW9kZWwnfSBjb2xsYXBzaWJsZT5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIGFjY2VwdD1cIi5nbGIsLmdsdGZcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmZpbGVzICYmIGUudGFyZ2V0LmZpbGVzWzBdKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGUudGFyZ2V0LmZpbGVzWzBdKTtcbiAgICAgICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtzY2VuZWdyYXBoOiB1cmx9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCBsYWJlbD17J2xheWVyLjNETW9kZWxPcHRpb25zJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaXplU2NhbGV9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmFuZ2xlWH1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuYW5nbGVZfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5hbmdsZVp9XG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIF9yZW5kZXJTMkxheWVyQ29uZmlnKHtcbiAgICAgIGxheWVyLFxuICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMsXG4gICAgICBsYXllckNvbmZpZ3VyYXRvclByb3BzLFxuICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHNcbiAgICB9KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbmZpZzoge3Zpc0NvbmZpZ31cbiAgICAgIH0gPSBsYXllcjtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZExheWVyVmlzdWFsQ29uZmlndXJhdG9yPlxuICAgICAgICAgIHsvKiBDb2xvciAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmZpbGxlZH1cbiAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgIGxhYmVsPVwibGF5ZXIuZmlsbENvbG9yXCJcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5jb2xvckZpZWxkID8gKFxuICAgICAgICAgICAgICA8TGF5ZXJDb2xvclJhbmdlU2VsZWN0b3Igey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JTZWxlY3RvciB7Li4ubGF5ZXJDb25maWd1cmF0b3JQcm9wc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuY29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cblxuICAgICAgICAgIHsvKiBTdHJva2UgKi99XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zdHJva2VkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgbGFiZWw9XCJsYXllci5zdHJva2VDb2xvclwiXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtsYXllci5jb25maWcuc3Ryb2tlQ29sb3JGaWVsZCA/IChcbiAgICAgICAgICAgICAgPExheWVyQ29sb3JSYW5nZVNlbGVjdG9yIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gY2hhbm5lbD1cInN0cm9rZUNvbG9yXCIgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYXllckNvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvcj17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvcn1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eT1cInN0cm9rZUNvbG9yXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Q29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDaGFubmVsQnlWYWx1ZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgY2hhbm5lbD17bGF5ZXIudmlzdWFsQ2hhbm5lbHMuc3Ryb2tlQ29sb3J9XG4gICAgICAgICAgICAgICAgey4uLmxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG5cbiAgICAgICAgICB7LyogU3Ryb2tlIFdpZHRoICovfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc30gbGFiZWw9XCJsYXllci5zdHJva2VXaWR0aFwiIGNvbGxhcHNpYmxlPlxuICAgICAgICAgICAge2xheWVyLmNvbmZpZy5zaXplRmllbGQgPyAoXG4gICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2l6ZVJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD17ZmFsc2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnRoaWNrbmVzc31cbiAgICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgICAgbGFiZWw9e2ZhbHNlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPENoYW5uZWxCeVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5zaXplfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgICAgey8qIEVsZXZhdGlvbiAqL31cbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cFxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmVuYWJsZTNkfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF2aXNDb25maWcuZmlsbGVkfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hhbm5lbEJ5VmFsdWVTZWxlY3RvclxuICAgICAgICAgICAgICBjaGFubmVsPXtsYXllci52aXN1YWxDaGFubmVscy5oZWlnaHR9XG4gICAgICAgICAgICAgIHsuLi5sYXllckNoYW5uZWxDb25maWdQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbGV2YXRpb25TY2FsZX1cbiAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5lbGV2YXRpb25TY2FsZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmhlaWdodFJhbmdlfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICBsYWJlbD1cImxheWVyVmlzQ29uZmlncy5oZWlnaHRSYW5nZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2ggey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mud2lyZWZyYW1lfSAvPlxuICAgICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJWaXN1YWxDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGNvbnN0IHtsYXllciwgZGF0YXNldHMsIHVwZGF0ZUxheWVyQ29uZmlnLCBsYXllclR5cGVPcHRpb25zLCB1cGRhdGVMYXllclR5cGV9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHtmaWVsZHMgPSBbXSwgZmllbGRQYWlycyA9IHVuZGVmaW5lZH0gPSBsYXllci5jb25maWcuZGF0YUlkXG4gICAgICAgID8gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF1cbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IHtjb25maWd9ID0gbGF5ZXI7XG5cbiAgICAgIGNvbnN0IHZpc0NvbmZpZ3VyYXRvclByb3BzID0gZ2V0VmlzQ29uZmlndXJhdG9yUHJvcHModGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsYXllckNvbmZpZ3VyYXRvclByb3BzID0gZ2V0TGF5ZXJDb25maWd1cmF0b3JQcm9wcyh0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyQ2hhbm5lbENvbmZpZ1Byb3BzID0gZ2V0TGF5ZXJDaGFubmVsQ29uZmlnUHJvcHModGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gZ2V0TGF5ZXJEYXRhc2V0KGRhdGFzZXRzLCBsYXllcik7XG4gICAgICBjb25zdCByZW5kZXJUZW1wbGF0ZSA9IGxheWVyLnR5cGUgJiYgYF9yZW5kZXIke2NhcGl0YWxpemVGaXJzdExldHRlcihsYXllci50eXBlKX1MYXllckNvbmZpZ2A7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRMYXllckNvbmZpZ3VyYXRvcj5cbiAgICAgICAgICB7bGF5ZXIubGF5ZXJJbmZvTW9kYWwgPyAoXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICA8SG93VG9CdXR0b24gb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vcGVuTW9kYWwobGF5ZXIubGF5ZXJJbmZvTW9kYWwpfSAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwXG4gICAgICAgICAgICBsYWJlbD17J2xheWVyLmJhc2ljJ31cbiAgICAgICAgICAgIGNvbGxhcHNpYmxlPXtPYmplY3Qua2V5cyhsYXllci5jb25maWcuY29sdW1ucykubGVuZ3RoID4gMH1cbiAgICAgICAgICAgIGV4cGFuZGVkPXshbGF5ZXIuaGFzQWxsQ29sdW1ucygpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxMYXllclR5cGVTZWxlY3RvclxuICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgbGF5ZXJUeXBlT3B0aW9ucz17bGF5ZXJUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3VwZGF0ZUxheWVyVHlwZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8TGF5ZXJWaXNpYmlsaXR5Qnlab29tXG4gICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3RoaXMucHJvcHMudXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICAgIGxheWVyPXtsYXllcn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPExheWVyQWdncmVnYXRpb25SZXNvbHV0aW9uIGxheWVyPXtsYXllcn0gZGlzYWJsZWQ9e2xheWVyQ29uZmlndXJhdG9yUHJvcHMuZGlzYWJsZWR9IC8+XG4gICAgICAgICAgICB7T2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgICAgICA8U291cmNlRGF0YVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgICAgIGlkPXtsYXllci5pZH1cbiAgICAgICAgICAgICAgICBkYXRhSWQ9e2NvbmZpZy5kYXRhSWR9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e3ZhbHVlID0+IHVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IHZhbHVlfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge09iamVjdC5rZXlzKGxheWVyLmNvbmZpZy5jb2x1bW5zKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICAgIDxMYXllckNvbHVtbkNvbmZpZ1xuICAgICAgICAgICAgICAgICAgY29sdW1uUGFpcnM9e2xheWVyLmNvbHVtblBhaXJzfVxuICAgICAgICAgICAgICAgICAgY29sdW1ucz17bGF5ZXIuY29uZmlnLmNvbHVtbnN9XG4gICAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW5QYWlycz17bGF5ZXIuYXNzaWduQ29sdW1uUGFpcnMuYmluZChsYXllcil9XG4gICAgICAgICAgICAgICAgICBhc3NpZ25Db2x1bW49e2xheWVyLmFzc2lnbkNvbHVtbi5iaW5kKGxheWVyKX1cbiAgICAgICAgICAgICAgICAgIGNvbHVtbkxhYmVscz17bGF5ZXIuY29sdW1uTGFiZWxzfVxuICAgICAgICAgICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgICAgICAgICBmaWVsZFBhaXJzPXtmaWVsZFBhaXJzfVxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3VwZGF0ZUxheWVyQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUeXBlPXt0aGlzLnByb3BzLnVwZGF0ZUxheWVyVHlwZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICAge3RoaXNbcmVuZGVyVGVtcGxhdGVdICYmXG4gICAgICAgICAgICB0aGlzW3JlbmRlclRlbXBsYXRlXSh7XG4gICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICAgICAgICAgICAgbGF5ZXJDaGFubmVsQ29uZmlnUHJvcHMsXG4gICAgICAgICAgICAgIGxheWVyQ29uZmlndXJhdG9yUHJvcHNcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGF5ZXJDb25maWd1cmF0b3I7XG59XG4vKlxuICogQ29tcG9uZW50aXplIGNvbmZpZyBjb21wb25lbnQgaW50byBwdXJlIGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICovXG5cbmNvbnN0IFN0eWxlZEhvd1RvQnV0dG9uID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTJweDtcbiAgdG9wOiAtNHB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IEhvd1RvQnV0dG9uID0gKHtvbkNsaWNrfSkgPT4gKFxuICA8U3R5bGVkSG93VG9CdXR0b24+XG4gICAgPEJ1dHRvbiBsaW5rIHNtYWxsIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydsYXllckNvbmZpZ3VyYXRpb24uaG93VG8nfSAvPlxuICAgIDwvQnV0dG9uPlxuICA8L1N0eWxlZEhvd1RvQnV0dG9uPlxuKTtcblxuTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgTGF5ZXJDb2xvclNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBjb25zdCB7bGF5ZXIsIG9uQ2hhbmdlLCBzZWxlY3RlZENvbG9yLCBwcm9wZXJ0eSA9ICdjb2xvcicsIHNldENvbG9yVUksIGZpZWxkc30gPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImxheWVyLmNvbG9yXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgPENvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBzZWxlY3RlZENvbG9yIHx8IGxheWVyLmNvbmZpZy5jb2xvcixcbiAgICAgICAgICAgICAgICBzZXRDb2xvcjogcmdiVmFsdWUgPT4gb25DaGFuZ2Uoe1twcm9wZXJ0eV06IHJnYlZhbHVlfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGNvbG9yVUk9e2xheWVyLmNvbmZpZy5jb2xvclVJW3Byb3BlcnR5XX1cbiAgICAgICAgICAgIHNldENvbG9yVUk9e25ld0NvbmZpZyA9PiBzZXRDb2xvclVJKHByb3BlcnR5LCBuZXdDb25maWcpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIExheWVyQ29sb3JTZWxlY3Rvcjtcbn1cblxuQXJjTGF5ZXJDb2xvclNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0NvbG9yU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBBcmNMYXllckNvbG9yU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgQXJjTGF5ZXJDb2xvclNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGxheWVyLFxuICAgICAgICBvbkNoYW5nZUNvbmZpZyxcbiAgICAgICAgb25DaGFuZ2VWaXNDb25maWcsXG4gICAgICAgIHByb3BlcnR5ID0gJ2NvbG9yJyxcbiAgICAgICAgc2V0Q29sb3JVSSxcbiAgICAgICAgZmllbGRzXG4gICAgICB9ID0gdGhpcy5wcm9wcyBhcyBhbnk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJsYXllci5jb2xvclJhbmdlXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgPENvbG9yU2VsZWN0b3JcbiAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBsYXllci5jb25maWcuY29sb3IsXG4gICAgICAgICAgICAgICAgc2V0Q29sb3I6IHJnYlZhbHVlID0+IG9uQ2hhbmdlQ29uZmlnKHtjb2xvcjogcmdiVmFsdWV9KSxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1NvdXJjZSdcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IGxheWVyLmNvbmZpZy52aXNDb25maWcudGFyZ2V0Q29sb3IgfHwgbGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgICAgICAgICAgICAgIHNldENvbG9yOiByZ2JWYWx1ZSA9PiBvbkNoYW5nZVZpc0NvbmZpZyh7dGFyZ2V0Q29sb3I6IHJnYlZhbHVlfSksXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUYXJnZXQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBjb2xvclVJPXtsYXllci5jb25maWcuY29sb3JVSVtwcm9wZXJ0eV19XG4gICAgICAgICAgICBzZXRDb2xvclVJPXtuZXdDb25maWcgPT4gc2V0Q29sb3JVSShwcm9wZXJ0eSwgbmV3Q29uZmlnKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQXJjTGF5ZXJDb2xvclNlbGVjdG9yO1xufVxuXG5MYXllckNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkuZGVwcyA9IFtDb2xvclNlbGVjdG9yRmFjdG9yeV07XG5leHBvcnQgZnVuY3Rpb24gTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5KENvbG9yU2VsZWN0b3IpIHtcbiAgY2xhc3MgTGF5ZXJDb2xvclJhbmdlU2VsZWN0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIF9fcmVuZGVySGVhdG1hcENvbG9yU2VsZWN0b3JDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9ICdjb2xvclJhbmdlJztcbiAgICAgIGNvbnN0IHtsYXllciwgb25DaGFuZ2UsIHNldENvbG9yVUl9ID0gdGhpcy5wcm9wcyBhcyBhbnk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q29sb3JTZWxlY3RvclxuICAgICAgICAgIGNvbG9yU2V0cz17W1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgaXNSYW5nZTogdHJ1ZSxcbiAgICAgICAgICAgICAgc2V0Q29sb3I6IGNvbG9yUmFuZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtjb2xvck1hcH0gPSBsYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvclJhbmdlVXBkYXRlZCA9IGNvbG9yTWFwXG4gICAgICAgICAgICAgICAgICA/IGxheWVyLnVwZGF0ZUNvbG9yTWFwKHByb3BlcnR5LCBjb2xvck1hcCwgY29sb3JSYW5nZSlcbiAgICAgICAgICAgICAgICAgIDogY29sb3JSYW5nZTtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZSh7W3Byb3BlcnR5XTogY29sb3JSYW5nZVVwZGF0ZWR9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF19XG4gICAgICAgICAgY29sb3JVST17bGF5ZXIuY29uZmlnLmNvbG9yVUlbcHJvcGVydHldfVxuICAgICAgICAgIHNldENvbG9yVUk9e25ld0NvbmZpZyA9PiBzZXRDb2xvclVJKHByb3BlcnR5LCBuZXdDb25maWcpfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgX19yZW5kZXJEZWZhdWx0Q29sb3JTZWxlY3RvckNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICBjaGFubmVsID0gJ2NvbG9yJyxcbiAgICAgICAgc2V0Q29sb3JVSSxcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBoYW5kbGVDdXN0b21PblNlbGVjdEhleENvbHVtbiA9ICgpID0+IG51bGxcbiAgICAgIH0gPSB0aGlzLnByb3BzIGFzIGFueTtcbiAgICAgIGNvbnN0IHtyYW5nZTogcHJvcGVydHksIGZpZWxkLCBzY2FsZX0gPSBsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xvclNlbGVjdG9yXG4gICAgICAgICAgZmllbGRzPXtmaWVsZHN9XG4gICAgICAgICAgY29sb3JTZXRzPXtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldLFxuICAgICAgICAgICAgICBpc1JhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICBzZXRDb2xvcjogY29sb3JSYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge2NvbG9yTWFwfSA9IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yUmFuZ2VVcGRhdGVkID0gY29sb3JNYXBcbiAgICAgICAgICAgICAgICAgID8gbGF5ZXIudXBkYXRlQ29sb3JNYXAocHJvcGVydHksIGNvbG9yTWFwLCBjb2xvclJhbmdlKVxuICAgICAgICAgICAgICAgICAgOiBjb2xvclJhbmdlO1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHNjYWxlIGNoYW5nZXMgZnJvbSBpZGVudGl0eSB0byBvcmRpbmFsXG4gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgc2NhbGUgdG8gZW5zdXJlIHRoYXQgaXQgY2hhbmdlcyBmcm9tIGBpZGVudGl0eWAgdG8gdGhlIGNvcnJlY3Qgb25lLlxuICAgICAgICAgICAgICAgIGlmIChsYXllci5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgICAgICAgICBbZmllbGRdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvckNvbHVtbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvckNvbHVtbklkeDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbc2NhbGVdOiBTQ0FMRV9UWVBFUy5vcmRpbmFsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGxheWVyLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHtbcHJvcGVydHldOiBjb2xvclJhbmdlVXBkYXRlZH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXX1cbiAgICAgICAgICBjb2xvclVJPXtsYXllci5jb25maWcuY29sb3JVSVtwcm9wZXJ0eV19XG4gICAgICAgICAgc2V0Q29sb3JVST17bmV3Q29uZmlnID0+IHNldENvbG9yVUkocHJvcGVydHksIG5ld0NvbmZpZyl9XG4gICAgICAgICAgb25TZWxlY3RIZXhDb2xvckNvbHVtbj17Y29sb3JDb2x1bW4gPT4ge1xuICAgICAgICAgICAgLy8gSXQncyBkZWZpbmVkIGluIENOOiBzZWUgd29ya3NwYWNlLXd3dy9zcmMvZmVhdHVyZXMvYnVpbGRlci91aS9LZXBsZXJHbC9TaWRlUGFuZWwvTGF5ZXJQYW5lbC9MYXllckNvbG9yUmFuZ2VTZWxlY3Rvci50c3hcbiAgICAgICAgICAgIGhhbmRsZUN1c3RvbU9uU2VsZWN0SGV4Q29sdW1uKGxheWVyLCBjb2xvckNvbHVtbik7XG5cbiAgICAgICAgICAgIGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgICAgW2ZpZWxkXToge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgICAgICAgICAgY29sb3JDb2x1bW46IGNvbG9yQ29sdW1uPy5uYW1lLFxuICAgICAgICAgICAgICAgIGNvbG9yQ29sdW1uSWR4OiBjb2xvckNvbHVtbj8uZmllbGRJZHhcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW3NjYWxlXTogU0NBTEVfVFlQRVMuaWRlbnRpdHlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBvbkNoYW5nZSh7W3Byb3BlcnR5XTogaGV4Q29sb3JDdXN0b21QYWxldHRlfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2xheWVyfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuICAgICAgbGV0IHJlbmRlckNvbG9yU2VsZWN0b3JDb21wb25lbnQgPSB0aGlzLl9fcmVuZGVyRGVmYXVsdENvbG9yU2VsZWN0b3JDb21wb25lbnQuYmluZCh0aGlzKTtcblxuICAgICAgaWYgKGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmhlYXRtYXApIHtcbiAgICAgICAgcmVuZGVyQ29sb3JTZWxlY3RvckNvbXBvbmVudCA9IHRoaXMuX19yZW5kZXJIZWF0bWFwQ29sb3JTZWxlY3RvckNvbXBvbmVudC5iaW5kKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwibGF5ZXIuY29sb3JSYW5nZVwiIC8+XG4gICAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICAgIHtyZW5kZXJDb2xvclNlbGVjdG9yQ29tcG9uZW50KCl9XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBMYXllckNvbG9yUmFuZ2VTZWxlY3Rvcjtcbn1cblxuQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvckZhY3RvcnkuZGVwcyA9IFtWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JGYWN0b3J5XTtcbmV4cG9ydCBmdW5jdGlvbiBDaGFubmVsQnlWYWx1ZVNlbGVjdG9yRmFjdG9yeShWaXNDb25maWdCeUZpZWxkU2VsZWN0b3IpIHtcbiAgY29uc3QgQ2hhbm5lbEJ5VmFsdWVTZWxlY3RvciA9ICh7XG4gICAgbGF5ZXIsXG4gICAgY2hhbm5lbCxcbiAgICBvbkNoYW5nZSxcbiAgICBvbkNoYW5nZVZpc0NvbmZpZyxcbiAgICBmaWVsZHMsXG4gICAgZmllbGRzQWdncmVnYXRlZCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpc0xvYWRpbmdcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYW5uZWxTY2FsZVR5cGUsXG4gICAgICBkb21haW4sXG4gICAgICBmaWVsZCxcbiAgICAgIGFnZ3JlZ2F0aW9uLFxuICAgICAga2V5LFxuICAgICAgcHJvcGVydHksXG4gICAgICByYW5nZSxcbiAgICAgIHNjYWxlLFxuICAgICAgZGVmYXVsdE1lYXN1cmUsXG4gICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzXG4gICAgfSA9IGNoYW5uZWw7XG4gICAgY29uc3QgY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMgPVxuICAgICAgc3VwcG9ydGVkRmllbGRUeXBlcyB8fCBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFNbY2hhbm5lbFNjYWxlVHlwZV07XG4gICAgY29uc3Qgc3VwcG9ydGVkRmllbGRzID0gZmllbGRzLmZpbHRlcigoe3R5cGV9KSA9PiBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcy5pbmNsdWRlcyh0eXBlKSk7XG4gICAgY29uc3Qgc2NhbGVPcHRpb25zID0gbGF5ZXIuZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwua2V5KTtcbiAgICBjb25zdCBzaG93U2NhbGVDdXN0b21pemFibGUgPVxuICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICAgIHNjYWxlICYmXG4gICAgICBsYXllci5jb25maWdbc2NhbGVdICYmXG4gICAgICBCb29sZWFuKGxheWVyLmNvbmZpZ1tmaWVsZF0pICYmXG4gICAgICBzY2FsZU9wdGlvbnM/Lmxlbmd0aCA+IDA7XG4gICAgY29uc3Qgc2hvd1NjYWxlID0gQm9vbGVhbihcbiAgICAgICFzaG93U2NhbGVDdXN0b21pemFibGUgJiZcbiAgICAgICAgc2NhbGUgJiZcbiAgICAgICAgIWxheWVyLmlzQWdncmVnYXRlZCAmJlxuICAgICAgICBsYXllci5jb25maWdbc2NhbGVdICYmXG4gICAgICAgIHNjYWxlT3B0aW9ucz8ubGVuZ3RoID4gMVxuICAgICk7XG4gICAgY29uc3QgZGVmYXVsdERlc2NyaXB0aW9uID0gJ2xheWVyQ29uZmlndXJhdGlvbi5kZWZhdWx0RGVzY3JpcHRpb24nO1xuICAgIGNvbnN0IHZpc1JhbmdlID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV07XG4gICAgY29uc3QgYWdncmVnYXRvciA9IGxheWVyLmNvbmZpZy52aXNDb25maWdbYWdncmVnYXRpb25dO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaXNDb25maWdCeUZpZWxkU2VsZWN0b3JcbiAgICAgICAgY2hhbm5lbD17Y2hhbm5lbC5rZXl9XG4gICAgICAgIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbiB8fCBkZWZhdWx0RGVzY3JpcHRpb259XG4gICAgICAgIGRvbWFpbj17bGF5ZXIuY29uZmlnW2RvbWFpbl19XG4gICAgICAgIGZpZWxkcz17c3VwcG9ydGVkRmllbGRzfVxuICAgICAgICBhZ2dyZWdhdG9yPXthZ2dyZWdhdG9yfVxuICAgICAgICBmaWVsZHNBZ2dyZWdhdGVkPXtmaWVsZHNBZ2dyZWdhdGVkfVxuICAgICAgICBpZD17bGF5ZXIuaWR9XG4gICAgICAgIGtleT17YCR7a2V5fS1jaGFubmVsLXNlbGVjdG9yYH1cbiAgICAgICAgcHJvcGVydHk9e3Byb3BlcnR5fVxuICAgICAgICBwbGFjZWhvbGRlcj17ZGVmYXVsdE1lYXN1cmUgfHwgJ3BsYWNlaG9sZGVyLnNlbGVjdEZpZWxkJ31cbiAgICAgICAgcmFuZ2U9e3Zpc1JhbmdlfVxuICAgICAgICBzY2FsZU9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgICAgc2NhbGVUeXBlPXtzY2FsZSA/IGxheWVyLmNvbmZpZ1tzY2FsZV0gOiBudWxsfVxuICAgICAgICBzZWxlY3RlZEZpZWxkPXtsYXllci5jb25maWdbZmllbGRdfVxuICAgICAgICBzaG93U2NhbGU9e3Nob3dTY2FsZX1cbiAgICAgICAgc2hvd1NjYWxlQ3VzdG9taXphYmxlPXtzaG93U2NhbGVDdXN0b21pemFibGV9XG4gICAgICAgIHVwZGF0ZUZpZWxkPXt2YWwgPT4ge1xuICAgICAgICAgIGlmICh2aXNSYW5nZT8uY29sb3JNYXApIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlVmlzQ29uZmlnKHtbcmFuZ2VdOiB7Li4udmlzUmFuZ2UsIGNvbG9yTWFwOiB1bmRlZmluZWR9fSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICAvLyBDbGVhbiBldmVyeXRoaW5nIGFuZCBjb21lYmFjayB0byBkZWZhdWx0IGJlaGF2aW91clxuICAgICAgICAgICAgb25DaGFuZ2Uoe1tmaWVsZF06IG51bGx9LCBrZXkpO1xuICAgICAgICAgICAgb25DaGFuZ2VWaXNDb25maWcoe1tyYW5nZV06IERFRkFVTFRfQ09MT1JfUkFOR0V9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb25DaGFuZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtmaWVsZF06IHZhbCxcbiAgICAgICAgICAgICAgLi4uKGZpZWxkc0FnZ3JlZ2F0ZWQgJiYge1xuICAgICAgICAgICAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAgICAgICAgICAgICAgIFthZ2dyZWdhdGlvbl06IHZhbD8uc2VsZWN0ZWRBZ2dyZWdhdG9yXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgbGF5ZXIudmFsaWRhdGVTY2FsZShrZXkpO1xuICAgICAgICB9fVxuICAgICAgICB1cGRhdGVTY2FsZT17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgICB1cGRhdGVDdXN0b21QYWxldHRlPXsoY29sb3JNYXAsIHVpQ3VzdG9tU2NhbGVUeXBlKSA9PiB7XG4gICAgICAgICAgb25DaGFuZ2VWaXNDb25maWcoe1tyYW5nZV06IHsuLi52aXNSYW5nZSwgY29sb3JNYXAsIHVpQ3VzdG9tU2NhbGVUeXBlfX0pO1xuICAgICAgICB9fVxuICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gQ2hhbm5lbEJ5VmFsdWVTZWxlY3Rvcjtcbn1cblxuQWdnclNjYWxlU2VsZWN0b3JGYWN0b3J5LmRlcHMgPSBbQ29sb3JEaW1lbnNpb25TY2FsZVNlbGVjdG9yRmFjdG9yeV07XG5cbmZ1bmN0aW9uIEFnZ3JTY2FsZVNlbGVjdG9yRmFjdG9yeShDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3IpIHtcbiAgY2xhc3MgQWdnclNjYWxlU2VsZWN0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtjaGFubmVsLCBsYXllciwgb25DaGFuZ2UsIG9uQ2hhbmdlVmlzQ29uZmlnfSA9IHRoaXMucHJvcHMgYXMgYW55O1xuICAgICAgY29uc3Qge3NjYWxlLCBrZXksIGNoYW5uZWxTY2FsZVR5cGUsIGRvbWFpbiwgcmFuZ2V9ID0gY2hhbm5lbDtcbiAgICAgIGNvbnN0IHNjYWxlT3B0aW9ucyA9IGxheWVyLmdldFNjYWxlT3B0aW9ucyhrZXkpO1xuICAgICAgY29uc3QgdmlzUmFuZ2UgPSBsYXllci5jb25maWcudmlzQ29uZmlnW3JhbmdlXTtcbiAgICAgIGNvbnN0IHNob3dTY2FsZUN1c3RvbWl6YWJsZSA9XG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yQWdnciAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHNjYWxlT3B0aW9ucykgJiZcbiAgICAgICAgc2NhbGVPcHRpb25zLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBzaG93U2NhbGUgPSBBcnJheS5pc0FycmF5KHNjYWxlT3B0aW9ucykgJiYgc2NhbGVPcHRpb25zLmxlbmd0aCA+IDE7XG5cbiAgICAgIGlmIChzaG93U2NhbGVDdXN0b21pemFibGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgIDxDb2xvckRpbWVuc2lvblNjYWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgbGFiZWw9e2Ake2tleX0gU2NhbGVgfVxuICAgICAgICAgICAgICBzY2FsZVR5cGU9e2xheWVyLmNvbmZpZ1tzY2FsZV19XG4gICAgICAgICAgICAgIG9wdGlvbnM9e3NjYWxlT3B0aW9uc31cbiAgICAgICAgICAgICAgZG9tYWluPXtsYXllci5jb25maWdbZG9tYWluXX1cbiAgICAgICAgICAgICAgcmFuZ2U9e3Zpc1JhbmdlfVxuICAgICAgICAgICAgICBvblNlbGVjdD17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgICAgICAgICBvblNldEN1c3RvbVBhbGV0dGU9eyhjb2xvck1hcCwgdWlDdXN0b21TY2FsZVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZVZpc0NvbmZpZyh7W3JhbmdlXTogey4uLnZpc1JhbmdlLCBjb2xvck1hcCwgdWlDdXN0b21TY2FsZVR5cGV9fSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3dTY2FsZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxEaW1lbnNpb25TY2FsZVNlbGVjdG9yXG4gICAgICAgICAgICBsYWJlbD17YCR7a2V5fSBTY2FsZWB9XG4gICAgICAgICAgICBvcHRpb25zPXtzY2FsZU9wdGlvbnN9XG4gICAgICAgICAgICBzY2FsZVR5cGU9e2xheWVyLmNvbmZpZ1tzY2FsZV19XG4gICAgICAgICAgICBvblNlbGVjdD17dmFsID0+IG9uQ2hhbmdlKHtbc2NhbGVdOiB2YWx9LCBrZXkpfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluamVjdEludGwoQWdnclNjYWxlU2VsZWN0b3IpO1xufVxuXG5leHBvcnQgY29uc3QgQWdncmVnYXRpb25UeXBlU2VsZWN0b3IgPSAoe2xheWVyLCBjaGFubmVsLCBvbkNoYW5nZX0pID0+IHtcbiAgY29uc3Qge2ZpZWxkLCBhZ2dyZWdhdGlvbiwga2V5fSA9IGNoYW5uZWw7XG4gIGNvbnN0IHNlbGVjdGVkRmllbGQgPSBsYXllci5jb25maWdbZmllbGRdO1xuICBjb25zdCB7dmlzQ29uZmlnfSA9IGxheWVyLmNvbmZpZztcblxuICAvLyBhZ2dyZWdhdGlvbiBzaG91bGQgb25seSBiZSBzZWxlY3RhYmxlIHdoZW4gZmllbGQgaXMgc2VsZWN0ZWRcbiAgY29uc3QgYWdncmVnYXRpb25PcHRpb25zID0gbGF5ZXIuZ2V0QWdncmVnYXRpb25PcHRpb25zKGtleSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2xheWVyLmFnZ3JlZ2F0ZUJ5J30gdmFsdWVzPXt7ZmllbGQ6IHNlbGVjdGVkRmllbGQubmFtZX19IC8+XG4gICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgIHNlbGVjdGVkSXRlbXM9e3Zpc0NvbmZpZ1thZ2dyZWdhdGlvbl19XG4gICAgICAgIG9wdGlvbnM9e2FnZ3JlZ2F0aW9uT3B0aW9uc31cbiAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgb25DaGFuZ2U9e3ZhbHVlID0+XG4gICAgICAgICAgb25DaGFuZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgICAgICAgICAgICAgW2FnZ3JlZ2F0aW9uXTogdmFsdWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoYW5uZWwua2V5XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgKTtcbn07XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXBhcmFtcyAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssa0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGFBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFPLHlCQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxrQkFBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsa0JBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLHNCQUFBLEdBQUFSLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVyx1QkFBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVksbUJBQUEsR0FBQVYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFhLGdCQUFBLEdBQUFYLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBYyxnQkFBQSxHQUFBWixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWUsaUJBQUEsR0FBQWhCLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBZ0IseUJBQUEsR0FBQWQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFpQixlQUFBLEdBQUFmLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFB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
|