bbj-screen-widget 2.4.62 → 2.4.64
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/bbj-screen-widget.d.ts +120 -0
- package/bbj-screen-widget.metadata.json +1 -0
- package/bundles/bbj-screen-widget-core.umd.js +614 -0
- package/bundles/bbj-screen-widget-core.umd.js.map +1 -0
- package/bundles/bbj-screen-widget-core.umd.min.js +2 -0
- package/bundles/bbj-screen-widget-core.umd.min.js.map +1 -0
- package/bundles/bbj-screen-widget.umd.js +22107 -0
- package/bundles/bbj-screen-widget.umd.js.map +1 -0
- package/bundles/bbj-screen-widget.umd.min.js +2 -0
- package/bundles/bbj-screen-widget.umd.min.js.map +1 -0
- package/core/bbj-screen-widget-core.d.ts +4 -0
- package/core/bbj-screen-widget-core.metadata.json +1 -0
- package/core/model/screen-widget.config.d.ts +7 -0
- package/core/package.json +10 -2
- package/core/public_api.d.ts +2 -0
- package/core/service/baidu-map.service.d.ts +18 -0
- package/esm2015/bbj-screen-widget.js +121 -0
- package/esm2015/core/bbj-screen-widget-core.js +5 -0
- package/esm2015/core/model/screen-widget.config.js +3 -0
- package/esm2015/core/public_api.js +3 -0
- package/esm2015/core/service/baidu-map.service.js +108 -0
- package/esm2015/lib/announcement/announcement.component.js +80 -0
- package/esm2015/lib/announcement/announcement.module.js +25 -0
- package/esm2015/lib/audio/audio.component.js +167 -0
- package/esm2015/lib/audio/audio.module.js +20 -0
- package/esm2015/lib/background/background.component.js +52 -0
- package/esm2015/lib/background/background.module.js +19 -0
- package/esm2015/lib/bar-chart-three-d/bar-chart-three-d.component.js +323 -0
- package/esm2015/lib/bar-chart-three-d/bar-chart-three-d.module.js +20 -0
- package/esm2015/lib/basic-bar-chart/basic-bar-chart.component.js +604 -0
- package/esm2015/lib/basic-bar-chart/basic-bar-chart.module.js +27 -0
- package/esm2015/lib/basic-line-chart/basic-line-chart.component.js +782 -0
- package/esm2015/lib/basic-line-chart/basic-line-chart.module.js +20 -0
- package/esm2015/lib/basic-pie-chart/basic-pie-chart.component.js +471 -0
- package/esm2015/lib/basic-pie-chart/basic-pie-chart.module.js +20 -0
- package/esm2015/lib/basic-planimetric-map/basic-planimetric-map.component.js +233 -0
- package/esm2015/lib/basic-planimetric-map/basic-planimetric-map.module.js +21 -0
- package/esm2015/lib/breathing-bubble-layer/breathing-bubble-layer.component.js +503 -0
- package/esm2015/lib/breathing-bubble-layer/breathing-bubble-layer.module.js +19 -0
- package/esm2015/lib/bubble-chart/bubble-chart.component.js +348 -0
- package/esm2015/lib/bubble-chart/bubble-chart.module.js +20 -0
- package/esm2015/lib/bulletin-board/bulletin-board.component.js +160 -0
- package/esm2015/lib/bulletin-board/bulletin-board.module.js +23 -0
- package/esm2015/lib/button/button.component.js +186 -0
- package/esm2015/lib/button/button.module.js +21 -0
- package/esm2015/lib/calendar/background-events/background-events.component.js +65 -0
- package/esm2015/lib/calendar/calendar-events-child.js +28 -0
- package/esm2015/lib/calendar/calendar.component.js +168 -0
- package/esm2015/lib/calendar/calendar.module.js +32 -0
- package/esm2015/lib/calendar/calendar.util.js +12 -0
- package/esm2015/lib/calendar/events/events.component.js +75 -0
- package/esm2015/lib/checkbox/checkbox.component.js +333 -0
- package/esm2015/lib/checkbox/checkbox.module.js +21 -0
- package/esm2015/lib/cross-table/cross-table.component.js +291 -0
- package/esm2015/lib/cross-table/cross-table.module.js +20 -0
- package/esm2015/lib/custom-baidu-map/baidu-fence/baidu-fence.component.js +400 -0
- package/esm2015/lib/custom-baidu-map/baidu-marker-layer/baidu-marker-layer.component.js +721 -0
- package/esm2015/lib/custom-baidu-map/baidu-polyline-layer/baidu-polyline-layer.component.js +278 -0
- package/esm2015/lib/custom-baidu-map/base-layer.js +79 -0
- package/esm2015/lib/custom-baidu-map/custom-baidu-map.component.js +682 -0
- package/esm2015/lib/custom-baidu-map/custom-baidu-map.module.js +51 -0
- package/esm2015/lib/custom-baidu-map/typhoon-area-layer/typhoon-area-layer.component.js +116 -0
- package/esm2015/lib/custom-baidu-map/wind-layer/wind-layer.component.js +331 -0
- package/esm2015/lib/date-picker/date-picker.component.js +447 -0
- package/esm2015/lib/date-picker/date-picker.module.js +22 -0
- package/esm2015/lib/funnel-chart/funnel-chart.component.js +241 -0
- package/esm2015/lib/funnel-chart/funnel-chart.module.js +20 -0
- package/esm2015/lib/gantt/gantt.component.js +222 -0
- package/esm2015/lib/gantt/gantt.module.js +39 -0
- package/esm2015/lib/gauge/gauge.component.js +324 -0
- package/esm2015/lib/gauge/gauge.module.js +20 -0
- package/esm2015/lib/gauge-progress/gauge-progress.component.js +356 -0
- package/esm2015/lib/gauge-progress/gauge.module.js +22 -0
- package/esm2015/lib/general-text/general-text.component.js +144 -0
- package/esm2015/lib/general-text/general-text.module.js +20 -0
- package/esm2015/lib/iconfont/icon.js +199 -0
- package/esm2015/lib/iconfont/iconfont.component.js +56 -0
- package/esm2015/lib/iconfont/iconfont.module.js +20 -0
- package/esm2015/lib/iframe/iframe.component.js +46 -0
- package/esm2015/lib/iframe/iframe.module.js +20 -0
- package/esm2015/lib/image/image.component.js +98 -0
- package/esm2015/lib/image/image.module.js +19 -0
- package/esm2015/lib/item-swiper/item-swiper.component.js +343 -0
- package/esm2015/lib/item-swiper/item-swiper.module.js +22 -0
- package/esm2015/lib/line-bar-chart/line-bar-chart.component.js +398 -0
- package/esm2015/lib/line-bar-chart/line-bar-chart.module.js +20 -0
- package/esm2015/lib/line-light-flow/line-light-flow.component.js +241 -0
- package/esm2015/lib/line-light-flow/line-light-flow.module.js +24 -0
- package/esm2015/lib/liquid-fill/liquid-fill.component.js +158 -0
- package/esm2015/lib/liquid-fill/liquid-fill.module.js +20 -0
- package/esm2015/lib/marquee/marquee.component.js +110 -0
- package/esm2015/lib/marquee/marquee.module.js +19 -0
- package/esm2015/lib/mip-anim/mip-anim.component.js +26 -0
- package/esm2015/lib/mip-anim/mip-anim.module.js +19 -0
- package/esm2015/lib/multi-title-gauge/multi-title-gauge.component.js +277 -0
- package/esm2015/lib/multi-title-gauge/multi-title-gauge.module.js +22 -0
- package/esm2015/lib/number-flop/number-flop.component.js +124 -0
- package/esm2015/lib/number-flop/number-flop.module.js +19 -0
- package/esm2015/lib/parent-container/parent-container.component.js +21 -0
- package/esm2015/lib/parent-container/parent-container.module.js +19 -0
- package/esm2015/lib/percent-pie-chart/percent-pie-chart.component.js +248 -0
- package/esm2015/lib/percent-pie-chart/percent-pie-chart.module.js +20 -0
- package/esm2015/lib/pie3d-chart/pie3d-chart.component.js +303 -0
- package/esm2015/lib/pie3d-chart/pie3d-chart.module.js +19 -0
- package/esm2015/lib/planimetric-map2d/fly-line-layer/fly-line-layer.component.js +431 -0
- package/esm2015/lib/planimetric-map2d/fly-line-layer/fly-line-layer.module.js +19 -0
- package/esm2015/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.component.js +252 -0
- package/esm2015/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.module.js +19 -0
- package/esm2015/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.component.js +124 -0
- package/esm2015/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.module.js +19 -0
- package/esm2015/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.component.js +359 -0
- package/esm2015/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.module.js +21 -0
- package/esm2015/lib/planimetric-map2d/planimetric-map2d.component.js +753 -0
- package/esm2015/lib/planimetric-map2d/planimetric-map2d.module.js +34 -0
- package/esm2015/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.component.js +128 -0
- package/esm2015/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.module.js +19 -0
- package/esm2015/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.component.js +242 -0
- package/esm2015/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.module.js +19 -0
- package/esm2015/lib/planimetric-map3d/planimetric-map3d.component.js +265 -0
- package/esm2015/lib/planimetric-map3d/planimetric-map3d.module.js +22 -0
- package/esm2015/lib/radar-chart/radar-chart.component.js +255 -0
- package/esm2015/lib/radar-chart/radar-chart.module.js +20 -0
- package/esm2015/lib/radio/radio.component.js +148 -0
- package/esm2015/lib/radio/radio.module.js +21 -0
- package/esm2015/lib/rate/rate.component.js +57 -0
- package/esm2015/lib/rate/rate.module.js +23 -0
- package/esm2015/lib/scatter3d/scatter3d.component.js +166 -0
- package/esm2015/lib/scatter3d/scatter3d.module.js +20 -0
- package/esm2015/lib/screen-widget.module.js +536 -0
- package/esm2015/lib/search/search.component.js +130 -0
- package/esm2015/lib/search/search.module.js +29 -0
- package/esm2015/lib/select/select.component.js +359 -0
- package/esm2015/lib/select/select.module.js +22 -0
- package/esm2015/lib/shape/shape.component.js +248 -0
- package/esm2015/lib/shape/shape.module.js +19 -0
- package/esm2015/lib/shared/component/video-player/video-player.component.js +114 -0
- package/esm2015/lib/shared/component/video-player/video-player.module.js +14 -0
- package/esm2015/lib/shared/service/common.service.js +39 -0
- package/esm2015/lib/shared/service/file-url.service.js +12 -0
- package/esm2015/lib/shared/service/gaode-map.service.js +36 -0
- package/esm2015/lib/shared/service/highcharts.service.js +36 -0
- package/esm2015/lib/shared/service/http.service.js +20 -0
- package/esm2015/lib/shared/util/base.util.js +5 -0
- package/esm2015/lib/shared/util/echarts.util.js +12 -0
- package/esm2015/lib/shared/util/style.util.js +19 -0
- package/esm2015/lib/shuffling-list/color.pipe.js +23 -0
- package/esm2015/lib/shuffling-list/shuffling-list.component.js +601 -0
- package/esm2015/lib/shuffling-list/shuffling-list.module.js +22 -0
- package/esm2015/lib/table/table.component.js +657 -0
- package/esm2015/lib/table/table.module.js +38 -0
- package/esm2015/lib/tabs/tab/tab.component.js +27 -0
- package/esm2015/lib/tabs/tabs.component.js +85 -0
- package/esm2015/lib/tabs/tabs.module.js +22 -0
- package/esm2015/lib/temporary-data/temporary-data.component.js +49 -0
- package/esm2015/lib/temporary-data/temporary-data.module.js +20 -0
- package/esm2015/lib/time-picker/time-picker.component.js +112 -0
- package/esm2015/lib/time-picker/time-picker.module.js +21 -0
- package/esm2015/lib/timer/timer.component.js +108 -0
- package/esm2015/lib/timer/timer.module.js +20 -0
- package/esm2015/lib/tree-control/tree-control.component.js +435 -0
- package/esm2015/lib/tree-control/tree-control.module.js +24 -0
- package/esm2015/lib/tree-ring-chart/tree-ring-chart.component.js +215 -0
- package/esm2015/lib/tree-ring-chart/tree-ring-chart.module.js +20 -0
- package/esm2015/lib/upload/upload.component.js +127 -0
- package/esm2015/lib/upload/upload.module.js +22 -0
- package/esm2015/lib/video-grid/video-grid.component.js +140 -0
- package/esm2015/lib/video-grid/video-grid.module.js +22 -0
- package/esm2015/lib/visual-map-chart/visual-map-chart.component.js +395 -0
- package/esm2015/lib/visual-map-chart/visual-map-chart.module.js +20 -0
- package/esm2015/lib/vote/vote.component.js +100 -0
- package/esm2015/lib/vote/vote.module.js +21 -0
- package/esm2015/lib/weather/weather.component.js +92 -0
- package/esm2015/lib/weather/weather.module.js +21 -0
- package/esm2015/lib/wordart/wordart.component.js +84 -0
- package/esm2015/lib/wordart/wordart.module.js +19 -0
- package/esm2015/lib/workbench-widget.module.js +620 -0
- package/esm2015/public-api.js +40 -0
- package/fesm2015/bbj-screen-widget-core.js +114 -0
- package/fesm2015/bbj-screen-widget-core.js.map +1 -0
- package/fesm2015/bbj-screen-widget.js +21036 -0
- package/fesm2015/bbj-screen-widget.js.map +1 -0
- package/lib/announcement/announcement.component.d.ts +13 -0
- package/lib/announcement/announcement.module.d.ts +5 -0
- package/lib/audio/audio.component.d.ts +22 -0
- package/lib/audio/audio.module.d.ts +4 -0
- package/lib/background/background.component.d.ts +12 -0
- package/lib/background/background.module.d.ts +4 -0
- package/lib/bar-chart-three-d/bar-chart-three-d.component.d.ts +30 -0
- package/lib/bar-chart-three-d/bar-chart-three-d.module.d.ts +4 -0
- package/lib/basic-bar-chart/basic-bar-chart.component.d.ts +105 -0
- package/lib/basic-bar-chart/basic-bar-chart.module.d.ts +5 -0
- package/lib/basic-line-chart/basic-line-chart.component.d.ts +102 -0
- package/lib/basic-line-chart/basic-line-chart.module.d.ts +4 -0
- package/lib/basic-pie-chart/basic-pie-chart.component.d.ts +56 -0
- package/lib/basic-pie-chart/basic-pie-chart.module.d.ts +4 -0
- package/lib/basic-planimetric-map/basic-planimetric-map.component.d.ts +18 -0
- package/lib/basic-planimetric-map/basic-planimetric-map.module.d.ts +4 -0
- package/lib/breathing-bubble-layer/breathing-bubble-layer.component.d.ts +210 -0
- package/lib/breathing-bubble-layer/breathing-bubble-layer.module.d.ts +4 -0
- package/lib/bubble-chart/bubble-chart.component.d.ts +75 -0
- package/lib/bubble-chart/bubble-chart.module.d.ts +4 -0
- package/lib/bulletin-board/bulletin-board.component.d.ts +25 -0
- package/lib/bulletin-board/bulletin-board.module.d.ts +4 -0
- package/lib/button/button.component.d.ts +25 -0
- package/lib/button/button.module.d.ts +4 -0
- package/lib/calendar/background-events/background-events.component.d.ts +10 -0
- package/lib/calendar/calendar-events-child.d.ts +12 -0
- package/lib/calendar/calendar.component.d.ts +27 -0
- package/lib/calendar/calendar.module.d.ts +4 -0
- package/lib/calendar/calendar.util.d.ts +6 -0
- package/lib/calendar/events/events.component.d.ts +13 -0
- package/lib/checkbox/checkbox.component.d.ts +45 -0
- package/lib/checkbox/checkbox.module.d.ts +4 -0
- package/lib/cross-table/cross-table.component.d.ts +30 -0
- package/lib/cross-table/cross-table.module.d.ts +4 -0
- package/lib/custom-baidu-map/baidu-fence/baidu-fence.component.d.ts +29 -0
- package/lib/custom-baidu-map/baidu-marker-layer/baidu-marker-layer.component.d.ts +71 -0
- package/lib/custom-baidu-map/baidu-polyline-layer/baidu-polyline-layer.component.d.ts +23 -0
- package/lib/custom-baidu-map/base-layer.d.ts +17 -0
- package/lib/custom-baidu-map/custom-baidu-map.component.d.ts +93 -0
- package/lib/custom-baidu-map/custom-baidu-map.module.d.ts +4 -0
- package/lib/custom-baidu-map/typhoon-area-layer/typhoon-area-layer.component.d.ts +16 -0
- package/lib/custom-baidu-map/wind-layer/wind-layer.component.d.ts +28 -0
- package/lib/date-picker/date-picker.component.d.ts +63 -0
- package/lib/date-picker/date-picker.module.d.ts +4 -0
- package/lib/funnel-chart/funnel-chart.component.d.ts +24 -0
- package/lib/funnel-chart/funnel-chart.module.d.ts +4 -0
- package/lib/gantt/gantt.component.d.ts +25 -0
- package/lib/gantt/gantt.module.d.ts +4 -0
- package/lib/gauge/gauge.component.d.ts +37 -0
- package/lib/gauge/gauge.module.d.ts +4 -0
- package/lib/gauge-progress/gauge-progress.component.d.ts +46 -0
- package/lib/gauge-progress/gauge.module.d.ts +5 -0
- package/lib/general-text/general-text.component.d.ts +21 -0
- package/lib/general-text/general-text.module.d.ts +4 -0
- package/lib/iconfont/icon.d.ts +1 -0
- package/lib/iconfont/iconfont.component.d.ts +11 -0
- package/lib/iconfont/iconfont.module.d.ts +4 -0
- package/lib/iframe/iframe.component.d.ts +10 -0
- package/lib/iframe/iframe.module.d.ts +4 -0
- package/lib/image/image.component.d.ts +21 -0
- package/lib/image/image.module.d.ts +4 -0
- package/lib/item-swiper/item-swiper.component.d.ts +41 -0
- package/lib/item-swiper/item-swiper.module.d.ts +5 -0
- package/lib/line-bar-chart/line-bar-chart.component.d.ts +63 -0
- package/lib/line-bar-chart/line-bar-chart.module.d.ts +4 -0
- package/lib/line-light-flow/line-light-flow.component.d.ts +26 -0
- package/lib/line-light-flow/line-light-flow.module.d.ts +4 -0
- package/lib/liquid-fill/liquid-fill.component.d.ts +18 -0
- package/lib/liquid-fill/liquid-fill.module.d.ts +4 -0
- package/lib/marquee/marquee.component.d.ts +20 -0
- package/lib/marquee/marquee.module.d.ts +4 -0
- package/lib/mip-anim/mip-anim.component.d.ts +6 -0
- package/lib/mip-anim/mip-anim.module.d.ts +4 -0
- package/lib/multi-title-gauge/multi-title-gauge.component.d.ts +26 -0
- package/lib/multi-title-gauge/multi-title-gauge.module.d.ts +4 -0
- package/lib/number-flop/number-flop.component.d.ts +22 -0
- package/lib/number-flop/number-flop.module.d.ts +4 -0
- package/lib/parent-container/parent-container.component.d.ts +9 -0
- package/lib/parent-container/parent-container.module.d.ts +4 -0
- package/lib/percent-pie-chart/percent-pie-chart.component.d.ts +24 -0
- package/lib/percent-pie-chart/percent-pie-chart.module.d.ts +4 -0
- package/lib/pie3d-chart/pie3d-chart.component.d.ts +30 -0
- package/lib/pie3d-chart/pie3d-chart.module.d.ts +4 -0
- package/lib/planimetric-map2d/fly-line-layer/fly-line-layer.component.d.ts +206 -0
- package/lib/planimetric-map2d/fly-line-layer/fly-line-layer.module.d.ts +4 -0
- package/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.component.d.ts +15 -0
- package/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.module.d.ts +4 -0
- package/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.component.d.ts +15 -0
- package/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.module.d.ts +4 -0
- package/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.component.d.ts +49 -0
- package/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.module.d.ts +4 -0
- package/lib/planimetric-map2d/planimetric-map2d.component.d.ts +49 -0
- package/lib/planimetric-map2d/planimetric-map2d.module.d.ts +4 -0
- package/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.component.d.ts +14 -0
- package/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.module.d.ts +4 -0
- package/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.component.d.ts +41 -0
- package/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.module.d.ts +4 -0
- package/lib/planimetric-map3d/planimetric-map3d.component.d.ts +29 -0
- package/lib/planimetric-map3d/planimetric-map3d.module.d.ts +4 -0
- package/lib/radar-chart/radar-chart.component.d.ts +24 -0
- package/lib/radar-chart/radar-chart.module.d.ts +4 -0
- package/lib/radio/radio.component.d.ts +21 -0
- package/lib/radio/radio.module.d.ts +4 -0
- package/lib/rate/rate.component.d.ts +13 -0
- package/lib/rate/rate.module.d.ts +4 -0
- package/lib/scatter3d/scatter3d.component.d.ts +25 -0
- package/lib/scatter3d/scatter3d.module.d.ts +4 -0
- package/lib/screen-widget.module.d.ts +4 -0
- package/lib/search/search.component.d.ts +21 -0
- package/lib/search/search.module.d.ts +6 -0
- package/lib/select/select.component.d.ts +37 -0
- package/lib/select/select.module.d.ts +4 -0
- package/lib/shape/shape.component.d.ts +50 -0
- package/lib/shape/shape.module.d.ts +4 -0
- package/lib/shared/component/video-player/video-player.component.d.ts +28 -0
- package/lib/shared/component/video-player/video-player.module.d.ts +2 -0
- package/lib/shared/service/common.service.d.ts +21 -0
- package/lib/shared/service/file-url.service.d.ts +3 -0
- package/lib/shared/service/gaode-map.service.d.ts +10 -0
- package/lib/shared/service/highcharts.service.d.ts +9 -0
- package/lib/shared/service/http.service.d.ts +7 -0
- package/lib/shared/util/base.util.d.ts +1 -0
- package/lib/shared/util/echarts.util.d.ts +1 -0
- package/lib/shared/util/style.util.d.ts +1 -0
- package/lib/shuffling-list/color.pipe.d.ts +4 -0
- package/lib/shuffling-list/shuffling-list.component.d.ts +76 -0
- package/lib/shuffling-list/shuffling-list.module.d.ts +4 -0
- package/lib/table/table.component.d.ts +65 -0
- package/lib/table/table.module.d.ts +4 -0
- package/lib/tabs/tab/tab.component.d.ts +7 -0
- package/lib/tabs/tabs.component.d.ts +13 -0
- package/lib/tabs/tabs.module.d.ts +4 -0
- package/lib/temporary-data/temporary-data.component.d.ts +13 -0
- package/lib/temporary-data/temporary-data.module.d.ts +4 -0
- package/lib/time-picker/time-picker.component.d.ts +17 -0
- package/lib/time-picker/time-picker.module.d.ts +4 -0
- package/lib/timer/timer.component.d.ts +21 -0
- package/lib/timer/timer.module.d.ts +4 -0
- package/lib/tree-control/tree-control.component.d.ts +62 -0
- package/lib/tree-control/tree-control.module.d.ts +4 -0
- package/lib/tree-ring-chart/tree-ring-chart.component.d.ts +24 -0
- package/lib/tree-ring-chart/tree-ring-chart.module.d.ts +4 -0
- package/lib/upload/upload.component.d.ts +21 -0
- package/lib/upload/upload.module.d.ts +4 -0
- package/lib/video-grid/video-grid.component.d.ts +23 -0
- package/lib/video-grid/video-grid.module.d.ts +4 -0
- package/lib/visual-map-chart/visual-map-chart.component.d.ts +49 -0
- package/lib/visual-map-chart/visual-map-chart.module.d.ts +4 -0
- package/lib/vote/vote.component.d.ts +15 -0
- package/lib/vote/vote.module.d.ts +4 -0
- package/lib/weather/weather.component.d.ts +26 -0
- package/lib/weather/weather.module.d.ts +4 -0
- package/lib/wordart/wordart.component.d.ts +14 -0
- package/lib/wordart/wordart.module.d.ts +4 -0
- package/lib/workbench-widget.module.d.ts +4 -0
- package/package.json +14 -4
- package/{src/public-api.ts → public-api.d.ts} +35 -46
- package/core/src/public_api.ts +0 -1
- package/core/src/service/baidu-map.service.ts +0 -107
- package/karma.conf.js +0 -32
- package/ng-package.json +0 -59
- package/src/lib/announcement/announcement.component.html +0 -3
- package/src/lib/announcement/announcement.component.less +0 -5
- package/src/lib/announcement/announcement.component.spec.ts +0 -25
- package/src/lib/announcement/announcement.component.ts +0 -55
- package/src/lib/announcement/announcement.module.ts +0 -19
- package/src/lib/audio/audio.component.html +0 -6
- package/src/lib/audio/audio.component.less +0 -12
- package/src/lib/audio/audio.component.spec.ts +0 -25
- package/src/lib/audio/audio.component.ts +0 -167
- package/src/lib/audio/audio.module.ts +0 -15
- package/src/lib/background/background.component.html +0 -1
- package/src/lib/background/background.component.less +0 -6
- package/src/lib/background/background.component.spec.ts +0 -25
- package/src/lib/background/background.component.ts +0 -33
- package/src/lib/background/background.module.ts +0 -14
- package/src/lib/bar-chart-three-d/bar-chart-three-d.component.html +0 -1
- package/src/lib/bar-chart-three-d/bar-chart-three-d.component.less +0 -8
- package/src/lib/bar-chart-three-d/bar-chart-three-d.component.spec.ts +0 -25
- package/src/lib/bar-chart-three-d/bar-chart-three-d.component.ts +0 -271
- package/src/lib/bar-chart-three-d/bar-chart-three-d.module.ts +0 -15
- package/src/lib/basic-bar-chart/basic-bar-chart.component.html +0 -7
- package/src/lib/basic-bar-chart/basic-bar-chart.component.less +0 -5
- package/src/lib/basic-bar-chart/basic-bar-chart.component.spec.ts +0 -25
- package/src/lib/basic-bar-chart/basic-bar-chart.component.ts +0 -493
- package/src/lib/basic-bar-chart/basic-bar-chart.module.ts +0 -21
- package/src/lib/basic-line-chart/basic-line-chart.component.html +0 -7
- package/src/lib/basic-line-chart/basic-line-chart.component.less +0 -8
- package/src/lib/basic-line-chart/basic-line-chart.component.spec.ts +0 -25
- package/src/lib/basic-line-chart/basic-line-chart.component.ts +0 -654
- package/src/lib/basic-line-chart/basic-line-chart.module.ts +0 -15
- package/src/lib/basic-pie-chart/basic-pie-chart.component.html +0 -7
- package/src/lib/basic-pie-chart/basic-pie-chart.component.less +0 -8
- package/src/lib/basic-pie-chart/basic-pie-chart.component.spec.ts +0 -25
- package/src/lib/basic-pie-chart/basic-pie-chart.component.ts +0 -439
- package/src/lib/basic-pie-chart/basic-pie-chart.module.ts +0 -15
- package/src/lib/basic-planimetric-map/basic-planimetric-map.component.html +0 -2
- package/src/lib/basic-planimetric-map/basic-planimetric-map.component.less +0 -9
- package/src/lib/basic-planimetric-map/basic-planimetric-map.component.spec.ts +0 -25
- package/src/lib/basic-planimetric-map/basic-planimetric-map.component.ts +0 -211
- package/src/lib/basic-planimetric-map/basic-planimetric-map.module.ts +0 -16
- package/src/lib/breathing-bubble-layer/breathing-bubble-layer.component.css +0 -0
- package/src/lib/breathing-bubble-layer/breathing-bubble-layer.component.html +0 -1
- package/src/lib/breathing-bubble-layer/breathing-bubble-layer.component.spec.ts +0 -25
- package/src/lib/breathing-bubble-layer/breathing-bubble-layer.component.ts +0 -487
- package/src/lib/breathing-bubble-layer/breathing-bubble-layer.module.ts +0 -14
- package/src/lib/bubble-chart/bubble-chart.component.html +0 -7
- package/src/lib/bubble-chart/bubble-chart.component.less +0 -8
- package/src/lib/bubble-chart/bubble-chart.component.spec.ts +0 -25
- package/src/lib/bubble-chart/bubble-chart.component.ts +0 -307
- package/src/lib/bubble-chart/bubble-chart.module.ts +0 -15
- package/src/lib/bulletin-board/bulletin-board.component.html +0 -15
- package/src/lib/bulletin-board/bulletin-board.component.less +0 -27
- package/src/lib/bulletin-board/bulletin-board.component.spec.ts +0 -25
- package/src/lib/bulletin-board/bulletin-board.component.ts +0 -127
- package/src/lib/bulletin-board/bulletin-board.module.ts +0 -20
- package/src/lib/button/button.component.html +0 -1
- package/src/lib/button/button.component.less +0 -17
- package/src/lib/button/button.component.spec.ts +0 -25
- package/src/lib/button/button.component.ts +0 -137
- package/src/lib/button/button.module.ts +0 -16
- package/src/lib/calendar/background-events/background-events.component.html +0 -0
- package/src/lib/calendar/background-events/background-events.component.less +0 -0
- package/src/lib/calendar/background-events/background-events.component.spec.ts +0 -25
- package/src/lib/calendar/background-events/background-events.component.ts +0 -51
- package/src/lib/calendar/calendar-events-child.ts +0 -27
- package/src/lib/calendar/calendar.component.html +0 -2
- package/src/lib/calendar/calendar.component.less +0 -14
- package/src/lib/calendar/calendar.component.spec.ts +0 -25
- package/src/lib/calendar/calendar.component.ts +0 -151
- package/src/lib/calendar/calendar.module.ts +0 -27
- package/src/lib/calendar/calendar.util.ts +0 -14
- package/src/lib/calendar/events/events.component.html +0 -0
- package/src/lib/calendar/events/events.component.less +0 -0
- package/src/lib/calendar/events/events.component.spec.ts +0 -25
- package/src/lib/calendar/events/events.component.ts +0 -61
- package/src/lib/checkbox/checkbox.component.html +0 -61
- package/src/lib/checkbox/checkbox.component.less +0 -104
- package/src/lib/checkbox/checkbox.component.spec.ts +0 -25
- package/src/lib/checkbox/checkbox.component.ts +0 -292
- package/src/lib/checkbox/checkbox.module.ts +0 -16
- package/src/lib/cross-table/cross-table.component.html +0 -16
- package/src/lib/cross-table/cross-table.component.less +0 -75
- package/src/lib/cross-table/cross-table.component.spec.ts +0 -25
- package/src/lib/cross-table/cross-table.component.ts +0 -257
- package/src/lib/cross-table/cross-table.module.ts +0 -18
- package/src/lib/custom-baidu-map/baidu-marker-layer/baidu-marker-layer.component.html +0 -32
- package/src/lib/custom-baidu-map/baidu-marker-layer/baidu-marker-layer.component.less +0 -11
- package/src/lib/custom-baidu-map/baidu-marker-layer/baidu-marker-layer.component.spec.ts +0 -25
- package/src/lib/custom-baidu-map/baidu-marker-layer/baidu-marker-layer.component.ts +0 -689
- package/src/lib/custom-baidu-map/baidu-polyline-layer/baidu-polyline-layer.component.html +0 -0
- package/src/lib/custom-baidu-map/baidu-polyline-layer/baidu-polyline-layer.component.less +0 -0
- package/src/lib/custom-baidu-map/baidu-polyline-layer/baidu-polyline-layer.component.spec.ts +0 -25
- package/src/lib/custom-baidu-map/baidu-polyline-layer/baidu-polyline-layer.component.ts +0 -248
- package/src/lib/custom-baidu-map/base-layer.ts +0 -50
- package/src/lib/custom-baidu-map/custom-baidu-map.component.html +0 -15
- package/src/lib/custom-baidu-map/custom-baidu-map.component.less +0 -69
- package/src/lib/custom-baidu-map/custom-baidu-map.component.spec.ts +0 -25
- package/src/lib/custom-baidu-map/custom-baidu-map.component.ts +0 -652
- package/src/lib/custom-baidu-map/custom-baidu-map.module.ts +0 -41
- package/src/lib/custom-baidu-map/typhoon-area-layer/typhoon-area-layer.component.html +0 -0
- package/src/lib/custom-baidu-map/typhoon-area-layer/typhoon-area-layer.component.less +0 -0
- package/src/lib/custom-baidu-map/typhoon-area-layer/typhoon-area-layer.component.spec.ts +0 -25
- package/src/lib/custom-baidu-map/typhoon-area-layer/typhoon-area-layer.component.ts +0 -99
- package/src/lib/custom-baidu-map/wind-layer/wind-layer.component.html +0 -0
- package/src/lib/custom-baidu-map/wind-layer/wind-layer.component.less +0 -0
- package/src/lib/custom-baidu-map/wind-layer/wind-layer.component.spec.ts +0 -25
- package/src/lib/custom-baidu-map/wind-layer/wind-layer.component.ts +0 -404
- package/src/lib/data-map/data-map.component.html +0 -9
- package/src/lib/data-map/data-map.component.less +0 -0
- package/src/lib/data-map/data-map.component.spec.ts +0 -25
- package/src/lib/data-map/data-map.component.ts +0 -105
- package/src/lib/data-map/data-map.module.ts +0 -15
- package/src/lib/date-picker/date-picker.component.html +0 -32
- package/src/lib/date-picker/date-picker.component.less +0 -20
- package/src/lib/date-picker/date-picker.component.spec.ts +0 -25
- package/src/lib/date-picker/date-picker.component.ts +0 -389
- package/src/lib/date-picker/date-picker.module.ts +0 -18
- package/src/lib/drop-down-detail-list/drop-down-detail-list.component.html +0 -25
- package/src/lib/drop-down-detail-list/drop-down-detail-list.component.less +0 -35
- package/src/lib/drop-down-detail-list/drop-down-detail-list.component.spec.ts +0 -25
- package/src/lib/drop-down-detail-list/drop-down-detail-list.component.ts +0 -117
- package/src/lib/drop-down-detail-list/drop-down-detail-list.module.ts +0 -15
- package/src/lib/dynamic-list/dynamic-list.component.html +0 -15
- package/src/lib/dynamic-list/dynamic-list.component.less +0 -31
- package/src/lib/dynamic-list/dynamic-list.component.spec.ts +0 -25
- package/src/lib/dynamic-list/dynamic-list.component.ts +0 -57
- package/src/lib/dynamic-list/dynamic-list.module.ts +0 -15
- package/src/lib/funnel-chart/funnel-chart.component.html +0 -7
- package/src/lib/funnel-chart/funnel-chart.component.less +0 -8
- package/src/lib/funnel-chart/funnel-chart.component.spec.ts +0 -25
- package/src/lib/funnel-chart/funnel-chart.component.ts +0 -198
- package/src/lib/funnel-chart/funnel-chart.module.ts +0 -15
- package/src/lib/gantt/gantt.component.html +0 -10
- package/src/lib/gantt/gantt.component.less +0 -76
- package/src/lib/gantt/gantt.component.spec.ts +0 -25
- package/src/lib/gantt/gantt.component.ts +0 -213
- package/src/lib/gantt/gantt.module.ts +0 -37
- package/src/lib/gauge/gauge.component.html +0 -1
- package/src/lib/gauge/gauge.component.less +0 -8
- package/src/lib/gauge/gauge.component.spec.ts +0 -25
- package/src/lib/gauge/gauge.component.ts +0 -268
- package/src/lib/gauge/gauge.module.ts +0 -15
- package/src/lib/gauge-progress/gauge-progress.component.html +0 -29
- package/src/lib/gauge-progress/gauge-progress.component.less +0 -51
- package/src/lib/gauge-progress/gauge-progress.component.ts +0 -293
- package/src/lib/gauge-progress/gauge.module.ts +0 -17
- package/src/lib/general-text/general-text.component.html +0 -7
- package/src/lib/general-text/general-text.component.less +0 -8
- package/src/lib/general-text/general-text.component.spec.ts +0 -25
- package/src/lib/general-text/general-text.component.ts +0 -114
- package/src/lib/general-text/general-text.module.ts +0 -15
- package/src/lib/iconfont/icon.ts +0 -198
- package/src/lib/iconfont/iconfont.component.html +0 -4
- package/src/lib/iconfont/iconfont.component.less +0 -5
- package/src/lib/iconfont/iconfont.component.spec.ts +0 -25
- package/src/lib/iconfont/iconfont.component.ts +0 -42
- package/src/lib/iconfont/iconfont.module.ts +0 -15
- package/src/lib/iframe/iframe.component.html +0 -1
- package/src/lib/iframe/iframe.component.less +0 -13
- package/src/lib/iframe/iframe.component.spec.ts +0 -25
- package/src/lib/iframe/iframe.component.ts +0 -34
- package/src/lib/iframe/iframe.module.ts +0 -15
- package/src/lib/image/image.component.html +0 -2
- package/src/lib/image/image.component.less +0 -13
- package/src/lib/image/image.component.spec.ts +0 -25
- package/src/lib/image/image.component.ts +0 -79
- package/src/lib/image/image.module.ts +0 -14
- package/src/lib/item-swiper/item-swiper.component.html +0 -48
- package/src/lib/item-swiper/item-swiper.component.less +0 -75
- package/src/lib/item-swiper/item-swiper.component.spec.ts +0 -25
- package/src/lib/item-swiper/item-swiper.component.ts +0 -277
- package/src/lib/item-swiper/item-swiper.module.ts +0 -17
- package/src/lib/line-bar-chart/line-bar-chart.component.html +0 -7
- package/src/lib/line-bar-chart/line-bar-chart.component.less +0 -3
- package/src/lib/line-bar-chart/line-bar-chart.component.spec.ts +0 -25
- package/src/lib/line-bar-chart/line-bar-chart.component.ts +0 -346
- package/src/lib/line-bar-chart/line-bar-chart.module.ts +0 -15
- package/src/lib/line-light-flow/line-light-flow.component.css +0 -0
- package/src/lib/line-light-flow/line-light-flow.component.html +0 -3
- package/src/lib/line-light-flow/line-light-flow.component.spec.ts +0 -25
- package/src/lib/line-light-flow/line-light-flow.component.ts +0 -274
- package/src/lib/line-light-flow/line-light-flow.module.ts +0 -21
- package/src/lib/liquid-fill/liquid-fill.component.html +0 -1
- package/src/lib/liquid-fill/liquid-fill.component.less +0 -8
- package/src/lib/liquid-fill/liquid-fill.component.spec.ts +0 -25
- package/src/lib/liquid-fill/liquid-fill.component.ts +0 -127
- package/src/lib/liquid-fill/liquid-fill.module.ts +0 -15
- package/src/lib/marquee/marquee.component.html +0 -5
- package/src/lib/marquee/marquee.component.less +0 -9
- package/src/lib/marquee/marquee.component.spec.ts +0 -25
- package/src/lib/marquee/marquee.component.ts +0 -84
- package/src/lib/marquee/marquee.module.ts +0 -14
- package/src/lib/mip-anim/mip-anim.component.html +0 -1
- package/src/lib/mip-anim/mip-anim.component.less +0 -7
- package/src/lib/mip-anim/mip-anim.component.spec.ts +0 -25
- package/src/lib/mip-anim/mip-anim.component.ts +0 -18
- package/src/lib/mip-anim/mip-anim.module.ts +0 -14
- package/src/lib/multi-title-gauge/multi-title-gauge.component.html +0 -1
- package/src/lib/multi-title-gauge/multi-title-gauge.component.less +0 -9
- package/src/lib/multi-title-gauge/multi-title-gauge.component.spec.ts +0 -25
- package/src/lib/multi-title-gauge/multi-title-gauge.component.ts +0 -231
- package/src/lib/multi-title-gauge/multi-title-gauge.module.ts +0 -19
- package/src/lib/number-flop/number-flop.component.html +0 -31
- package/src/lib/number-flop/number-flop.component.less +0 -155
- package/src/lib/number-flop/number-flop.component.spec.ts +0 -25
- package/src/lib/number-flop/number-flop.component.ts +0 -96
- package/src/lib/number-flop/number-flop.module.ts +0 -14
- package/src/lib/parent-container/parent-container.component.html +0 -0
- package/src/lib/parent-container/parent-container.component.less +0 -0
- package/src/lib/parent-container/parent-container.component.spec.ts +0 -25
- package/src/lib/parent-container/parent-container.component.ts +0 -21
- package/src/lib/parent-container/parent-container.module.ts +0 -14
- package/src/lib/percent-pie-chart/percent-pie-chart.component.html +0 -8
- package/src/lib/percent-pie-chart/percent-pie-chart.component.less +0 -8
- package/src/lib/percent-pie-chart/percent-pie-chart.component.spec.ts +0 -25
- package/src/lib/percent-pie-chart/percent-pie-chart.component.ts +0 -213
- package/src/lib/percent-pie-chart/percent-pie-chart.module.ts +0 -15
- package/src/lib/pie3d-chart/pie3d-chart.component.html +0 -1
- package/src/lib/pie3d-chart/pie3d-chart.component.less +0 -9
- package/src/lib/pie3d-chart/pie3d-chart.component.spec.ts +0 -25
- package/src/lib/pie3d-chart/pie3d-chart.component.ts +0 -278
- package/src/lib/pie3d-chart/pie3d-chart.module.ts +0 -16
- package/src/lib/planimetric-map2d/fly-line-layer/fly-line-layer.component.html +0 -0
- package/src/lib/planimetric-map2d/fly-line-layer/fly-line-layer.component.less +0 -0
- package/src/lib/planimetric-map2d/fly-line-layer/fly-line-layer.component.spec.ts +0 -25
- package/src/lib/planimetric-map2d/fly-line-layer/fly-line-layer.component.ts +0 -411
- package/src/lib/planimetric-map2d/fly-line-layer/fly-line-layer.module.ts +0 -13
- package/src/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.component.html +0 -1
- package/src/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.component.less +0 -0
- package/src/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.component.spec.ts +0 -25
- package/src/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.component.ts +0 -235
- package/src/lib/planimetric-map2d/map2d-mark-layer/map2d-mark-layer.module.ts +0 -16
- package/src/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.component.html +0 -0
- package/src/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.component.less +0 -0
- package/src/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.component.spec.ts +0 -25
- package/src/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.component.ts +0 -107
- package/src/lib/planimetric-map2d/map2d-polyline-layer/map2d-polyline-layer.module.ts +0 -17
- package/src/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.component.html +0 -0
- package/src/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.component.less +0 -0
- package/src/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.component.spec.ts +0 -25
- package/src/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.component.ts +0 -337
- package/src/lib/planimetric-map2d/map2d-visual-layer/map2d-visual-layer.module.ts +0 -18
- package/src/lib/planimetric-map2d/planimetric-map2d.component.html +0 -11
- package/src/lib/planimetric-map2d/planimetric-map2d.component.less +0 -9
- package/src/lib/planimetric-map2d/planimetric-map2d.component.spec.ts +0 -25
- package/src/lib/planimetric-map2d/planimetric-map2d.component.ts +0 -690
- package/src/lib/planimetric-map2d/planimetric-map2d.module.ts +0 -29
- package/src/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.component.html +0 -0
- package/src/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.component.less +0 -0
- package/src/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.component.spec.ts +0 -25
- package/src/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.component.ts +0 -123
- package/src/lib/planimetric-map3d/map3d-line-layer/map3d-line-layer.module.ts +0 -14
- package/src/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.component.html +0 -0
- package/src/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.component.less +0 -0
- package/src/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.component.spec.ts +0 -25
- package/src/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.component.ts +0 -229
- package/src/lib/planimetric-map3d/map3d-mark-layer/map3d-mark-layer.module.ts +0 -14
- package/src/lib/planimetric-map3d/planimetric-map3d.component.html +0 -2
- package/src/lib/planimetric-map3d/planimetric-map3d.component.less +0 -10
- package/src/lib/planimetric-map3d/planimetric-map3d.component.spec.ts +0 -25
- package/src/lib/planimetric-map3d/planimetric-map3d.component.ts +0 -227
- package/src/lib/planimetric-map3d/planimetric-map3d.module.ts +0 -17
- package/src/lib/radar-chart/radar-chart.component.html +0 -7
- package/src/lib/radar-chart/radar-chart.component.less +0 -8
- package/src/lib/radar-chart/radar-chart.component.spec.ts +0 -25
- package/src/lib/radar-chart/radar-chart.component.ts +0 -219
- package/src/lib/radar-chart/radar-chart.module.ts +0 -15
- package/src/lib/radio/radio.component.html +0 -18
- package/src/lib/radio/radio.component.less +0 -61
- package/src/lib/radio/radio.component.spec.ts +0 -25
- package/src/lib/radio/radio.component.ts +0 -116
- package/src/lib/radio/radio.module.ts +0 -16
- package/src/lib/rate/rate.component.html +0 -16
- package/src/lib/rate/rate.component.less +0 -39
- package/src/lib/rate/rate.component.spec.ts +0 -25
- package/src/lib/rate/rate.component.ts +0 -40
- package/src/lib/rate/rate.module.ts +0 -18
- package/src/lib/scatter3d/scatter3d.component.html +0 -1
- package/src/lib/scatter3d/scatter3d.component.less +0 -8
- package/src/lib/scatter3d/scatter3d.component.spec.ts +0 -25
- package/src/lib/scatter3d/scatter3d.component.ts +0 -129
- package/src/lib/scatter3d/scatter3d.module.ts +0 -15
- package/src/lib/screen-widget.module.ts +0 -592
- package/src/lib/search/search.component.html +0 -30
- package/src/lib/search/search.component.less +0 -30
- package/src/lib/search/search.component.spec.ts +0 -25
- package/src/lib/search/search.component.ts +0 -103
- package/src/lib/search/search.module.ts +0 -22
- package/src/lib/select/select.component.html +0 -30
- package/src/lib/select/select.component.less +0 -117
- package/src/lib/select/select.component.spec.ts +0 -25
- package/src/lib/select/select.component.ts +0 -297
- package/src/lib/select/select.module.ts +0 -18
- package/src/lib/shape/shape.component.html +0 -39
- package/src/lib/shape/shape.component.less +0 -8
- package/src/lib/shape/shape.component.spec.ts +0 -25
- package/src/lib/shape/shape.component.ts +0 -207
- package/src/lib/shape/shape.module.ts +0 -14
- package/src/lib/shared/component/video-player/video-player.component.html +0 -2
- package/src/lib/shared/component/video-player/video-player.component.less +0 -15
- package/src/lib/shared/component/video-player/video-player.component.spec.ts +0 -25
- package/src/lib/shared/component/video-player/video-player.component.ts +0 -132
- package/src/lib/shared/component/video-player/video-player.module.ts +0 -11
- package/src/lib/shared/model/scale.token.ts +0 -8
- package/src/lib/shared/service/common.service.ts +0 -28
- package/src/lib/shared/service/file-url.service.ts +0 -8
- package/src/lib/shared/service/gaode-map.service.ts +0 -37
- package/src/lib/shared/service/highcharts.service.ts +0 -29
- package/src/lib/shared/service/http.service.ts +0 -15
- package/src/lib/shared/util/base.util.ts +0 -4
- package/src/lib/shared/util/echarts.util.ts +0 -11
- package/src/lib/shared/util/style.util.ts +0 -12
- package/src/lib/shuffling-list/color.pipe.ts +0 -21
- package/src/lib/shuffling-list/shuffling-list.component.html +0 -37
- package/src/lib/shuffling-list/shuffling-list.component.less +0 -55
- package/src/lib/shuffling-list/shuffling-list.component.spec.ts +0 -25
- package/src/lib/shuffling-list/shuffling-list.component.ts +0 -534
- package/src/lib/shuffling-list/shuffling-list.module.ts +0 -17
- package/src/lib/table/table.component.html +0 -123
- package/src/lib/table/table.component.less +0 -76
- package/src/lib/table/table.component.spec.ts +0 -25
- package/src/lib/table/table.component.ts +0 -608
- package/src/lib/table/table.module.ts +0 -33
- package/src/lib/tabs/tab/tab.component.html +0 -1
- package/src/lib/tabs/tab/tab.component.less +0 -5
- package/src/lib/tabs/tab/tab.component.spec.ts +0 -25
- package/src/lib/tabs/tab/tab.component.ts +0 -18
- package/src/lib/tabs/tabs.component.html +0 -13
- package/src/lib/tabs/tabs.component.less +0 -40
- package/src/lib/tabs/tabs.component.spec.ts +0 -25
- package/src/lib/tabs/tabs.component.ts +0 -68
- package/src/lib/tabs/tabs.module.ts +0 -17
- package/src/lib/temporary-data/temporary-data.component.html +0 -1
- package/src/lib/temporary-data/temporary-data.component.less +0 -4
- package/src/lib/temporary-data/temporary-data.component.spec.ts +0 -25
- package/src/lib/temporary-data/temporary-data.component.ts +0 -46
- package/src/lib/temporary-data/temporary-data.module.ts +0 -15
- package/src/lib/text/text.component.css +0 -0
- package/src/lib/text/text.component.html +0 -3
- package/src/lib/text/text.component.spec.ts +0 -25
- package/src/lib/text/text.component.ts +0 -22
- package/src/lib/text/text.module.ts +0 -14
- package/src/lib/time-picker/time-picker.component.html +0 -1
- package/src/lib/time-picker/time-picker.component.less +0 -14
- package/src/lib/time-picker/time-picker.component.spec.ts +0 -25
- package/src/lib/time-picker/time-picker.component.ts +0 -86
- package/src/lib/time-picker/time-picker.module.ts +0 -19
- package/src/lib/timer/timer.component.html +0 -7
- package/src/lib/timer/timer.component.less +0 -24
- package/src/lib/timer/timer.component.spec.ts +0 -25
- package/src/lib/timer/timer.component.ts +0 -74
- package/src/lib/timer/timer.module.ts +0 -15
- package/src/lib/tree-control/tree-control.component.html +0 -97
- package/src/lib/tree-control/tree-control.component.less +0 -111
- package/src/lib/tree-control/tree-control.component.spec.ts +0 -25
- package/src/lib/tree-control/tree-control.component.ts +0 -363
- package/src/lib/tree-control/tree-control.module.ts +0 -18
- package/src/lib/tree-ring-chart/tree-ring-chart.component.html +0 -7
- package/src/lib/tree-ring-chart/tree-ring-chart.component.less +0 -8
- package/src/lib/tree-ring-chart/tree-ring-chart.component.spec.ts +0 -25
- package/src/lib/tree-ring-chart/tree-ring-chart.component.ts +0 -192
- package/src/lib/tree-ring-chart/tree-ring-chart.module.ts +0 -15
- package/src/lib/upload/upload.component.html +0 -32
- package/src/lib/upload/upload.component.less +0 -14
- package/src/lib/upload/upload.component.spec.ts +0 -25
- package/src/lib/upload/upload.component.ts +0 -109
- package/src/lib/upload/upload.module.ts +0 -19
- package/src/lib/video-grid/video-grid.component.html +0 -33
- package/src/lib/video-grid/video-grid.component.less +0 -68
- package/src/lib/video-grid/video-grid.component.spec.ts +0 -25
- package/src/lib/video-grid/video-grid.component.ts +0 -115
- package/src/lib/video-grid/video-grid.module.ts +0 -17
- package/src/lib/visual-map-chart/visual-map-chart.component.html +0 -8
- package/src/lib/visual-map-chart/visual-map-chart.component.less +0 -21
- package/src/lib/visual-map-chart/visual-map-chart.component.spec.ts +0 -25
- package/src/lib/visual-map-chart/visual-map-chart.component.ts +0 -365
- package/src/lib/visual-map-chart/visual-map-chart.module.ts +0 -18
- package/src/lib/vote/vote.component.html +0 -6
- package/src/lib/vote/vote.component.less +0 -41
- package/src/lib/vote/vote.component.spec.ts +0 -25
- package/src/lib/vote/vote.component.ts +0 -71
- package/src/lib/vote/vote.module.ts +0 -16
- package/src/lib/weather/weather.component.html +0 -27
- package/src/lib/weather/weather.component.less +0 -67
- package/src/lib/weather/weather.component.spec.ts +0 -25
- package/src/lib/weather/weather.component.ts +0 -78
- package/src/lib/weather/weather.module.ts +0 -16
- package/src/lib/wordart/wordart.component.html +0 -2
- package/src/lib/wordart/wordart.component.less +0 -12
- package/src/lib/wordart/wordart.component.spec.ts +0 -25
- package/src/lib/wordart/wordart.component.ts +0 -56
- package/src/lib/wordart/wordart.module.ts +0 -14
- package/src/lib/workbench-widget.module.ts +0 -675
- package/src/test.ts +0 -22
- package/tsconfig.lib.json +0 -37
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -17
- package/tslint.json +0 -17
|
@@ -0,0 +1,682 @@
|
|
|
1
|
+
import { __awaiter, __decorate, __metadata } from "tslib";
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
|
+
import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, NgZone, Optional, ViewChild, } from '@angular/core';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { take, takeUntil } from 'rxjs/operators';
|
|
6
|
+
import { ScaleSubject, TemplateUtil, WidgetRef } from 'bbj-widget-base';
|
|
7
|
+
import { Data, DataOutput, Property, Widget, Event } from 'bbj-widget-base';
|
|
8
|
+
import { BaiduMapService } from 'bbj-screen-widget/core';
|
|
9
|
+
const MapTypeEnum = [
|
|
10
|
+
{ label: '普通', value: 'normal' },
|
|
11
|
+
{ label: '深色', value: 'dark' },
|
|
12
|
+
{ label: '卫星', value: 'satellite' },
|
|
13
|
+
{ label: '自定义', value: 'custom' },
|
|
14
|
+
];
|
|
15
|
+
let CustomBaiduMapComponent = class CustomBaiduMapComponent {
|
|
16
|
+
constructor(baiduMapService, http, elementRef, zone, scale$, cd, widgetRef) {
|
|
17
|
+
this.baiduMapService = baiduMapService;
|
|
18
|
+
this.http = http;
|
|
19
|
+
this.elementRef = elementRef;
|
|
20
|
+
this.zone = zone;
|
|
21
|
+
this.scale$ = scale$;
|
|
22
|
+
this.cd = cd;
|
|
23
|
+
this.widgetRef = widgetRef;
|
|
24
|
+
// @Property('字体', { ui: { widget: 'myFont' } })
|
|
25
|
+
// font: any = {
|
|
26
|
+
// family: '',
|
|
27
|
+
// color: '#000000',
|
|
28
|
+
// weight: 'normal',
|
|
29
|
+
// size: 16,
|
|
30
|
+
// space: 0,
|
|
31
|
+
// lineHeight: 0,
|
|
32
|
+
// };
|
|
33
|
+
this.mapType = 'normal';
|
|
34
|
+
this.minMapShow = false;
|
|
35
|
+
this.showType = 'click';
|
|
36
|
+
this.dragging = true;
|
|
37
|
+
this.shadeColor = '#004395';
|
|
38
|
+
this.mapCityColor = '#41b7ff';
|
|
39
|
+
this.zoom = 12;
|
|
40
|
+
// @Property('放大比例', { type: 'number' })
|
|
41
|
+
// scale = 1;
|
|
42
|
+
this.fillOpacity = 0;
|
|
43
|
+
this.strokesize = 2;
|
|
44
|
+
this.nightMode = false;
|
|
45
|
+
this.tilt = 73;
|
|
46
|
+
// @Property('中心经度', {
|
|
47
|
+
// ui: {widget: 'myRange', min: -180, max: 180, step: 1},
|
|
48
|
+
// })
|
|
49
|
+
this.centerLng = 120.7;
|
|
50
|
+
// @Property('中心纬度', {
|
|
51
|
+
// ui: {widget: 'myRange', min: -90, max: 90, step: 1},
|
|
52
|
+
// })
|
|
53
|
+
this.centerLat = 28;
|
|
54
|
+
this.cityName = null;
|
|
55
|
+
// markerTierClick: any;
|
|
56
|
+
// pingyang = '';
|
|
57
|
+
// ruian = '';
|
|
58
|
+
this._data = [{ lng: 120.7, lat: 28 }];
|
|
59
|
+
this.dataChange = new EventEmitter();
|
|
60
|
+
this.zoomChange = new EventEmitter();
|
|
61
|
+
this.mapClick = new EventEmitter();
|
|
62
|
+
this.destroy$ = new Subject();
|
|
63
|
+
// containerStyle: any = {};
|
|
64
|
+
// unloadedChildren = {};
|
|
65
|
+
this.overlaysMap = {};
|
|
66
|
+
this.init$ = new Promise((resolve) => {
|
|
67
|
+
this.inited = resolve;
|
|
68
|
+
});
|
|
69
|
+
this.mapTypeEnum = MapTypeEnum.slice(0, 3);
|
|
70
|
+
}
|
|
71
|
+
get element() {
|
|
72
|
+
return this.elementRef.nativeElement;
|
|
73
|
+
}
|
|
74
|
+
addLayer(layer) {
|
|
75
|
+
if (this.view) {
|
|
76
|
+
this.view.addLayer(layer);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
removeLayer(layer) {
|
|
80
|
+
if (this.view) {
|
|
81
|
+
this.view.removeLayer(layer);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
ngOnChanges(changes) {
|
|
85
|
+
if (changes._data && this._data[0]) {
|
|
86
|
+
this.centerLng = +this._data[0].lng;
|
|
87
|
+
this.centerLat = +this._data[0].lat;
|
|
88
|
+
this.setCenter(this.centerLng, this.centerLat);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
ngOnInit() {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
if (this.scale$) {
|
|
94
|
+
// 这是为了解决地图缩放中心不在鼠标所在位置的问题
|
|
95
|
+
this.scale$.pipe(takeUntil(this.destroy$)).subscribe((scale) => {
|
|
96
|
+
const { x: sx, y: sy, scaleContent } = scale;
|
|
97
|
+
const style = this.element.style;
|
|
98
|
+
if (scaleContent === false) {
|
|
99
|
+
this.zone.onStable.pipe(take(1)).subscribe(() => {
|
|
100
|
+
const parent = this.element.parentNode;
|
|
101
|
+
if (parent) {
|
|
102
|
+
const match = /translate\(([-\d.]+)px, ([-\d.]+)px\)/.exec(parent.style.transform);
|
|
103
|
+
if (match) {
|
|
104
|
+
const offsetX = parseFloat(match[1]);
|
|
105
|
+
const offsetY = parseFloat(match[2]);
|
|
106
|
+
style.transform = `translate(${-offsetX}px,${-offsetY}px)`;
|
|
107
|
+
style.height = parent.clientHeight + offsetY + 'px';
|
|
108
|
+
style.width = parent.clientWidth + offsetX + 'px';
|
|
109
|
+
style.padding = `${offsetY}px 0 0 ${offsetX}px`;
|
|
110
|
+
// this.containerStyle = {
|
|
111
|
+
// transformOrigin: `0 0`,
|
|
112
|
+
// transform: `translate(${-offsetX}px,${-offsetY}px)`,
|
|
113
|
+
// height: parent.clientHeight + offsetY + 'px',
|
|
114
|
+
// width: parent.clientWidth + offsetX + 'px',
|
|
115
|
+
// padding: `${offsetY}px 0 0 ${offsetX}px`,
|
|
116
|
+
// };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// this.cd.markForCheck();
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const { position, size } = this.widgetRef.widget;
|
|
124
|
+
const { x, y } = position;
|
|
125
|
+
const { width, height } = size;
|
|
126
|
+
style.transform = `translate(${-x}px,${-y}px) scale(${1 / sx},${1 / sy})`;
|
|
127
|
+
style.height = (y + height) * sy + 'px';
|
|
128
|
+
style.width = (x + width) * sx + 'px';
|
|
129
|
+
style.padding = `${y * sy}px 0 0 ${x * sx}px`;
|
|
130
|
+
}
|
|
131
|
+
// this.cd.markForCheck();
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
yield this.initMap();
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
initMap() {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
yield this.baiduMapService.loadMapGL();
|
|
140
|
+
yield this.baiduMapService.loadMapVGL();
|
|
141
|
+
this.mapTypeValue = this.mapType;
|
|
142
|
+
// 兼容老的配置
|
|
143
|
+
if (this.mapType == null) {
|
|
144
|
+
if (this.uploadStyle) {
|
|
145
|
+
this.mapTypeValue = 'custom';
|
|
146
|
+
}
|
|
147
|
+
else if (this.nightMode) {
|
|
148
|
+
this.mapTypeValue = 'dark';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (!this.destroyed) {
|
|
152
|
+
this.zone.runOutsideAngular(() => {
|
|
153
|
+
this.map = new BMapGL.Map(this.container.nativeElement, { restrictCenter: false });
|
|
154
|
+
this.map.centerAndZoom(new BMapGL.Point(this.centerLng, this.centerLat), this.zoom); // 设置中心点和缩放级别
|
|
155
|
+
this.map.enableScrollWheelZoom(); // 启用滚轮进行缩放功能
|
|
156
|
+
// var dist = new BMapGL.DistrictLayer({
|
|
157
|
+
// name: '(温州市)',
|
|
158
|
+
// kind: 1,
|
|
159
|
+
// fillColor: '#fff',
|
|
160
|
+
// fillOpacity: 0.1,
|
|
161
|
+
// strokeColor: '#daeafa',
|
|
162
|
+
// viewport: true,
|
|
163
|
+
// });
|
|
164
|
+
// this.map.addDistrictLayer(dist);
|
|
165
|
+
this.mapTypeChange(this.mapTypeValue);
|
|
166
|
+
if (this.edit || this.dragging === false) {
|
|
167
|
+
this.map.disableDragging();
|
|
168
|
+
}
|
|
169
|
+
if (this.enable3D) {
|
|
170
|
+
this.map.setTilt(this.tilt == null ? 73 : this.tilt, { noAnimation: true });
|
|
171
|
+
this.map.setDisplayOptions({ skyColors: ['rgba(0, 0, 0, 0)'] }); // 隐藏天空
|
|
172
|
+
// const navi3DCtrl = new BMapGL.NavigationControl3D(); // 添加3D控件
|
|
173
|
+
// this.map.addControl(navi3DCtrl);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
this.map.disableTilt();
|
|
177
|
+
this.map.disableRotate();
|
|
178
|
+
}
|
|
179
|
+
if (this.showLocationControl) {
|
|
180
|
+
const options = {
|
|
181
|
+
// 控件的停靠位置(可选,默认左上角)
|
|
182
|
+
anchor: BMAP_ANCHOR_TOP_LEFT,
|
|
183
|
+
// 控件基于停靠位置的偏移量(可选)
|
|
184
|
+
offset: new BMapGL.Size(20, 20),
|
|
185
|
+
};
|
|
186
|
+
let locationControl = new BMapGL.LocationControl(options);
|
|
187
|
+
// 将控件添加到地图上
|
|
188
|
+
this.map.addControl(locationControl);
|
|
189
|
+
}
|
|
190
|
+
if (this.minMapShow) {
|
|
191
|
+
const stCtrl = new BMapGL.PanoramaControl();
|
|
192
|
+
stCtrl.setOffset(new BMapGL.Size(20, 20));
|
|
193
|
+
this.map.addControl(stCtrl);
|
|
194
|
+
}
|
|
195
|
+
if (this.infoWindowBackground) {
|
|
196
|
+
this.element.style.setProperty('--info-window-background', this.infoWindowBackground);
|
|
197
|
+
}
|
|
198
|
+
if (this.infoWindowColor) {
|
|
199
|
+
this.element.style.setProperty('--info-window-color', this.infoWindowColor);
|
|
200
|
+
}
|
|
201
|
+
if (this.infoWindowBorderColor) {
|
|
202
|
+
this.element.style.setProperty('--info-window-border-color', this.infoWindowBorderColor);
|
|
203
|
+
}
|
|
204
|
+
this.map.addEventListener('moveend', (event) => {
|
|
205
|
+
const center = this.map.getCenter();
|
|
206
|
+
this.dataChange.emit(center);
|
|
207
|
+
});
|
|
208
|
+
this.map.addEventListener('click', (event) => {
|
|
209
|
+
console.log(event);
|
|
210
|
+
this.mapClick.emit(event.latlng);
|
|
211
|
+
});
|
|
212
|
+
this.map.addEventListener('zoomend', (event) => {
|
|
213
|
+
this.zoomChange.emit(this.map.getZoom());
|
|
214
|
+
this.dataChange.emit(this.map.getCenter());
|
|
215
|
+
});
|
|
216
|
+
this.view = new mapvgl.View({
|
|
217
|
+
map: this.map,
|
|
218
|
+
});
|
|
219
|
+
this.mapLoaded(this.map);
|
|
220
|
+
});
|
|
221
|
+
this.inited(this.map);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
setCenter(lng, lat) {
|
|
226
|
+
if (this.map && lng && lat) {
|
|
227
|
+
const center = this.map.getCenter();
|
|
228
|
+
if (center.lng != lng || center.lat != lat) {
|
|
229
|
+
this.setCenterAndZoom(lng, lat, this.map.getZoom());
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
setCenterAndZoom(lng, lat, zoom) {
|
|
234
|
+
const center = this.map.getCenter();
|
|
235
|
+
const currentZoom = this.map.getZoom();
|
|
236
|
+
// 误差范围内不移动,防止背景抖动
|
|
237
|
+
if (zoom != currentZoom || Math.abs(lng - center.lng) > 1e-13 || Math.abs(lat - center.lat) > 1e-7) {
|
|
238
|
+
const point = new BMapGL.Point(lng, lat);
|
|
239
|
+
this.map.centerAndZoom(point, zoom, { tilt: this.map.getTilt() });
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* 根据经纬度范围设置中心和缩放等级
|
|
244
|
+
* @param minLng
|
|
245
|
+
* @param maxLng
|
|
246
|
+
* @param minLat
|
|
247
|
+
* @param maxLat
|
|
248
|
+
*/
|
|
249
|
+
setRectCenterAndZoom(minLng, maxLng, minLat, maxLat) {
|
|
250
|
+
this.setCenterAndZoom((maxLng + minLng) / 2, (maxLat + minLat) / 2, this.getZoom(maxLng, minLng, maxLat, minLat));
|
|
251
|
+
}
|
|
252
|
+
getZoom(maxLng, minLng, maxLat, minLat) {
|
|
253
|
+
const zooms = [
|
|
254
|
+
50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 25000, 50000, 100000, 200000, 500000, 1000000, 2000000,
|
|
255
|
+
]; //级别18到3。
|
|
256
|
+
const pointA = new BMapGL.Point(maxLng, maxLat); // 创建点坐标A
|
|
257
|
+
const pointB = new BMapGL.Point(minLng, minLat); // 创建点坐标B
|
|
258
|
+
const distance = +this.map.getDistance(pointA, pointB).toFixed(1); //获取两点距离,保留小数点后两位
|
|
259
|
+
const i = zooms.findIndex((zoom) => zoom - distance > 0);
|
|
260
|
+
if (i === -1) {
|
|
261
|
+
return 5;
|
|
262
|
+
}
|
|
263
|
+
//之所以会多3,是因为地图范围常常是比例尺距离的10倍以上。所以级别会增加3。
|
|
264
|
+
return 18 - i + 3;
|
|
265
|
+
}
|
|
266
|
+
openInfoWindow(data, lng, lat) {
|
|
267
|
+
if (data.information || this.infoWindowTemplate) {
|
|
268
|
+
const point = new BMapGL.Point(+lng, +lat);
|
|
269
|
+
// let offsetY = -25;
|
|
270
|
+
// if (this.hideInfoWindowTail) {
|
|
271
|
+
// offsetY = 0;
|
|
272
|
+
// }
|
|
273
|
+
let information = data.information;
|
|
274
|
+
if (this.infoWindowTemplate) {
|
|
275
|
+
information = TemplateUtil.parse(this.infoWindowTemplate, data);
|
|
276
|
+
}
|
|
277
|
+
const options = {
|
|
278
|
+
offset: new BMapGL.Size(0, 0),
|
|
279
|
+
width: this.infoWindowWidth || 0,
|
|
280
|
+
height: this.infoWindowHeight || 0,
|
|
281
|
+
};
|
|
282
|
+
const infoWindow = new BMapGL.InfoWindow(information, options);
|
|
283
|
+
// 第一次打开信息窗口后在短时间关闭或重新打开会导致click事件失效,临时解决方案是第一次打开后0.5秒内不关闭
|
|
284
|
+
if (!this.firstOpen) {
|
|
285
|
+
if (this.firstOpenPromise) {
|
|
286
|
+
this.firstOpenPromise.then(() => {
|
|
287
|
+
this.map.openInfoWindow(infoWindow, point);
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
this.firstOpenPromise = new Promise((resolve) => {
|
|
292
|
+
setTimeout(() => {
|
|
293
|
+
this.firstOpen = true;
|
|
294
|
+
this.firstOpenPromise = null;
|
|
295
|
+
resolve();
|
|
296
|
+
}, 500);
|
|
297
|
+
});
|
|
298
|
+
this.map.openInfoWindow(infoWindow, point);
|
|
299
|
+
}
|
|
300
|
+
const rawClose = infoWindow.close;
|
|
301
|
+
infoWindow.close = () => {
|
|
302
|
+
if (this.firstOpenPromise) {
|
|
303
|
+
this.firstOpenPromise.then(() => rawClose.call(infoWindow));
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
rawClose.call(infoWindow);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
this.map.openInfoWindow(infoWindow, point);
|
|
312
|
+
}
|
|
313
|
+
return infoWindow;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
getCanvasOverlay(child) {
|
|
317
|
+
let canvasOverlay;
|
|
318
|
+
if (this.enable3D) {
|
|
319
|
+
const item = child.item;
|
|
320
|
+
if (item) {
|
|
321
|
+
var pStart = new BMapGL.Point(item.start.lng, item.start.lat);
|
|
322
|
+
var pEnd = new BMapGL.Point(item.end.lng, item.end.lat);
|
|
323
|
+
var bounds = new BMapGL.Bounds(new BMapGL.Point(pStart.lng, pEnd.lat), new BMapGL.Point(pEnd.lng, pStart.lat));
|
|
324
|
+
canvasOverlay = new BMapGL.GroundOverlay(bounds, {
|
|
325
|
+
type: 'canvas',
|
|
326
|
+
url: item.canvas,
|
|
327
|
+
opacity: 1,
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
const pointToPixel = (data) => {
|
|
333
|
+
const point = new BMapGL.Point(data.lng, data.lat);
|
|
334
|
+
return this.map.pointToPixel(point);
|
|
335
|
+
};
|
|
336
|
+
canvasOverlay = new BMapGL.CanvasLayer({
|
|
337
|
+
paneName: 'markerShadow',
|
|
338
|
+
update: function () {
|
|
339
|
+
var ctx = this.canvas.getContext('2d');
|
|
340
|
+
if (!ctx) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
|
344
|
+
child.update(ctx, pointToPixel);
|
|
345
|
+
},
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
return canvasOverlay;
|
|
349
|
+
}
|
|
350
|
+
ngOnDestroy() {
|
|
351
|
+
this.destroy$.next();
|
|
352
|
+
this.destroy$.complete();
|
|
353
|
+
this.destroyed = true;
|
|
354
|
+
if (this.view) {
|
|
355
|
+
try {
|
|
356
|
+
this.view.destroy();
|
|
357
|
+
}
|
|
358
|
+
catch (e) {
|
|
359
|
+
console.error(e);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
if (this.map) {
|
|
363
|
+
try {
|
|
364
|
+
this.map.destroy();
|
|
365
|
+
}
|
|
366
|
+
catch (e) {
|
|
367
|
+
console.error(e);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
mapLoaded(map) {
|
|
372
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
373
|
+
if (this.cityName) {
|
|
374
|
+
if (this.cityName === '温州') {
|
|
375
|
+
this.cityName = 'wenzhou';
|
|
376
|
+
}
|
|
377
|
+
const json = yield this.http.get('assets/echarts/map/json/' + this.cityName + '.json').toPromise();
|
|
378
|
+
const polygonData = [];
|
|
379
|
+
let encodeScale = json.UTF8Scale || 1024;
|
|
380
|
+
json.features.forEach(({ geometry }) => {
|
|
381
|
+
geometry.coordinates = geometry.coordinates.forEach((coordinate, i) => {
|
|
382
|
+
if (geometry.type === 'MultiPolygon') {
|
|
383
|
+
const coordinates = coordinate.map((points, j) => {
|
|
384
|
+
if (json.UTF8Encoding) {
|
|
385
|
+
points = this.decodePolygon(points, geometry.encodeOffsets[i][j], encodeScale);
|
|
386
|
+
}
|
|
387
|
+
return points;
|
|
388
|
+
});
|
|
389
|
+
polygonData.push(coordinates);
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
if (json.UTF8Encoding) {
|
|
393
|
+
coordinate = this.decodePolygon(coordinate, geometry.encodeOffsets[i], encodeScale);
|
|
394
|
+
}
|
|
395
|
+
polygonData.push([coordinate]);
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
const data = [
|
|
400
|
+
{
|
|
401
|
+
geometry: {
|
|
402
|
+
type: 'MultiPolygon',
|
|
403
|
+
coordinates: polygonData,
|
|
404
|
+
},
|
|
405
|
+
},
|
|
406
|
+
];
|
|
407
|
+
var layer = new mapvgl.PolygonLayer({
|
|
408
|
+
lineColor: this.mapCityColor,
|
|
409
|
+
lineWidth: this.strokesize || 2,
|
|
410
|
+
fillColor: this.shadeColor,
|
|
411
|
+
data,
|
|
412
|
+
renderOrder: -2,
|
|
413
|
+
});
|
|
414
|
+
this.view.addLayer(layer);
|
|
415
|
+
if (this.mapBackColor && !this.mapBackColor.match(/rgba\(\d+,\d+,\d+,0\)/)) {
|
|
416
|
+
var maskLayer = new mapvgl.MaskLayer({
|
|
417
|
+
color: this.mapBackColor,
|
|
418
|
+
data,
|
|
419
|
+
renderOrder: -3,
|
|
420
|
+
});
|
|
421
|
+
this.view.addLayer(maskLayer);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
decodePolygon(coordinate, encodeOffsets, encodeScale) {
|
|
427
|
+
const result = [];
|
|
428
|
+
let prevX = encodeOffsets[0];
|
|
429
|
+
let prevY = encodeOffsets[1];
|
|
430
|
+
for (let i = 0; i < coordinate.length; i += 2) {
|
|
431
|
+
var x = coordinate.charCodeAt(i) - 64;
|
|
432
|
+
var y = coordinate.charCodeAt(i + 1) - 64;
|
|
433
|
+
// ZigZag decoding
|
|
434
|
+
x = (x >> 1) ^ -(x & 1);
|
|
435
|
+
y = (y >> 1) ^ -(y & 1);
|
|
436
|
+
// Delta deocding
|
|
437
|
+
x += prevX;
|
|
438
|
+
y += prevY;
|
|
439
|
+
prevX = x;
|
|
440
|
+
prevY = y;
|
|
441
|
+
// Dequantize
|
|
442
|
+
result.push([x / encodeScale, y / encodeScale]);
|
|
443
|
+
}
|
|
444
|
+
return result;
|
|
445
|
+
}
|
|
446
|
+
mapTypeChange(mapType) {
|
|
447
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
448
|
+
switch (mapType) {
|
|
449
|
+
case 'dark':
|
|
450
|
+
if (!this.darkStyle) {
|
|
451
|
+
this.darkStyle = yield this.http.get('assets/echarts/map/json/custom_map.json').toPromise();
|
|
452
|
+
}
|
|
453
|
+
this.map.setMapType(BMAP_NORMAL_MAP);
|
|
454
|
+
this.map.setMapStyleV2({ styleJson: this.darkStyle });
|
|
455
|
+
break;
|
|
456
|
+
case 'satellite':
|
|
457
|
+
this.map.setMapType(BMAP_SATELLITE_MAP);
|
|
458
|
+
break;
|
|
459
|
+
case 'custom':
|
|
460
|
+
if (this.uploadStyle) {
|
|
461
|
+
const styleJson = yield this.http.get(this.uploadStyle).toPromise();
|
|
462
|
+
this.map.setMapType(BMAP_NORMAL_MAP);
|
|
463
|
+
this.map.setMapStyleV2({ styleJson });
|
|
464
|
+
}
|
|
465
|
+
break;
|
|
466
|
+
default:
|
|
467
|
+
this.map.setMapType(BMAP_NORMAL_MAP);
|
|
468
|
+
this.map.setMapStyleV2({ styleJson: null });
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
CustomBaiduMapComponent.decorators = [
|
|
474
|
+
{ type: Component, args: [{
|
|
475
|
+
selector: 'sc-custom-baidu-map',
|
|
476
|
+
template: "<ng-template *ngFor=\"let child of children\" widget-host [widget]=\"child\"></ng-template>\n\n<!-- {{children|json}} -->\n<!-- <div class=\"map-container\" [ngStyle]=\"containerStyle\"> -->\n<div #container class=\"map\"></div>\n<nz-radio-group\n *ngIf=\"showMapTypeRadio\"\n class=\"map-type-radio\"\n [(ngModel)]=\"mapTypeValue\"\n (ngModelChange)=\"mapTypeChange($event)\"\n nzButtonStyle=\"solid\"\n>\n <label *ngFor=\"let item of mapTypeEnum\" nz-radio-button [nzValue]=\"item.value\">{{ item.label }}</label>\n</nz-radio-group>\n<!-- </div> -->\n",
|
|
477
|
+
styles: [":host{display:block;height:100%;width:100%;overflow:hidden;transform-origin:0 0;z-index:0;pointer-events:none}:host>*{pointer-events:auto}.map{height:100%;width:100%}:host::ng-deep .BMap_bubble_pop{background-color:var(--info-window-background,#fff)!important;border-color:var(--info-window-border-color,#ddd)!important}:host::ng-deep .BMap_bubble_content{color:var(--info-window-color,\"#555555\")!important}:host::ng-deep .BMap_pop div{background-color:var(--info-window-background,#fff)!important}:host::ng-deep .BMap_pop>div:nth-child(8){background-color:transparent!important}:host.hideInfoWindowTail::ng-deep .BMap_bubble_pop>img,:host.hideInfoWindowTail::ng-deep .BMap_pop>div:nth-child(8),:host::ng-deep .BMap_noprint.anchorTR,:host::ng-deep img[src$=\"/image/api/iws3.png\"]{display:none}:host.hideInfoWindowTop::ng-deep .BMap_bubble_pop{transform:translateY(31px)}:host.hideInfoWindowTop::ng-deep .BMap_bubble_pop>img{transform:translateY(-31px)}:host.hideInfoWindowTop::ng-deep .BMap_bubble_top,:host::ng-deep .anchorBL{display:none}.map-type-radio{position:absolute;bottom:20px;right:20px;z-index:10}"]
|
|
478
|
+
},] }
|
|
479
|
+
];
|
|
480
|
+
CustomBaiduMapComponent.ctorParameters = () => [
|
|
481
|
+
{ type: BaiduMapService },
|
|
482
|
+
{ type: HttpClient },
|
|
483
|
+
{ type: ElementRef },
|
|
484
|
+
{ type: NgZone },
|
|
485
|
+
{ type: ScaleSubject, decorators: [{ type: Optional }] },
|
|
486
|
+
{ type: ChangeDetectorRef },
|
|
487
|
+
{ type: WidgetRef }
|
|
488
|
+
];
|
|
489
|
+
CustomBaiduMapComponent.propDecorators = {
|
|
490
|
+
hideInfoWindowTail: [{ type: HostBinding, args: ['class.hideInfoWindowTail',] }],
|
|
491
|
+
hideInfoWindowTop: [{ type: HostBinding, args: ['class.hideInfoWindowTop',] }],
|
|
492
|
+
container: [{ type: ViewChild, args: ['container', { static: true },] }]
|
|
493
|
+
};
|
|
494
|
+
__decorate([
|
|
495
|
+
Property('地图类型', {
|
|
496
|
+
enum: MapTypeEnum,
|
|
497
|
+
}),
|
|
498
|
+
__metadata("design:type", Object)
|
|
499
|
+
], CustomBaiduMapComponent.prototype, "mapType", void 0);
|
|
500
|
+
__decorate([
|
|
501
|
+
Property('上传样式', { type: 'string', ui: { widget: 'myUploadAudio', visibleIf: { mapType: ['custom'] } } }),
|
|
502
|
+
__metadata("design:type", String)
|
|
503
|
+
], CustomBaiduMapComponent.prototype, "uploadStyle", void 0);
|
|
504
|
+
__decorate([
|
|
505
|
+
Property('切换按钮'),
|
|
506
|
+
__metadata("design:type", Boolean)
|
|
507
|
+
], CustomBaiduMapComponent.prototype, "showMapTypeRadio", void 0);
|
|
508
|
+
__decorate([
|
|
509
|
+
Property('全景地图', { type: 'boolean' }),
|
|
510
|
+
__metadata("design:type", Object)
|
|
511
|
+
], CustomBaiduMapComponent.prototype, "minMapShow", void 0);
|
|
512
|
+
__decorate([
|
|
513
|
+
Property('显示信息', {
|
|
514
|
+
ui: { widget: 'select' },
|
|
515
|
+
enum: [
|
|
516
|
+
{ label: '点击', value: 'click' },
|
|
517
|
+
{ label: '悬停', value: 'mouseover' },
|
|
518
|
+
],
|
|
519
|
+
}),
|
|
520
|
+
__metadata("design:type", Object)
|
|
521
|
+
], CustomBaiduMapComponent.prototype, "showType", void 0);
|
|
522
|
+
__decorate([
|
|
523
|
+
Property('信息窗背景', { ui: { widget: 'myColor' } }),
|
|
524
|
+
__metadata("design:type", String)
|
|
525
|
+
], CustomBaiduMapComponent.prototype, "infoWindowBackground", void 0);
|
|
526
|
+
__decorate([
|
|
527
|
+
Property('信息窗字体', { ui: { widget: 'myColor' } }),
|
|
528
|
+
__metadata("design:type", String)
|
|
529
|
+
], CustomBaiduMapComponent.prototype, "infoWindowColor", void 0);
|
|
530
|
+
__decorate([
|
|
531
|
+
Property('信息窗宽度'),
|
|
532
|
+
__metadata("design:type", Number)
|
|
533
|
+
], CustomBaiduMapComponent.prototype, "infoWindowWidth", void 0);
|
|
534
|
+
__decorate([
|
|
535
|
+
Property('信息窗高度'),
|
|
536
|
+
__metadata("design:type", Number)
|
|
537
|
+
], CustomBaiduMapComponent.prototype, "infoWindowHeight", void 0);
|
|
538
|
+
__decorate([
|
|
539
|
+
Property('信息窗模板', { ui: { widget: 'textarea' } }),
|
|
540
|
+
__metadata("design:type", String)
|
|
541
|
+
], CustomBaiduMapComponent.prototype, "infoWindowTemplate", void 0);
|
|
542
|
+
__decorate([
|
|
543
|
+
Property('信息窗边框', {
|
|
544
|
+
ui: { widget: 'myColor' },
|
|
545
|
+
example: ['#ffffff', '#F5A623', '#F8E71C', '#50E3C2', '#3285FF', '#B45FFF', '#9B9B9B', null],
|
|
546
|
+
}),
|
|
547
|
+
__metadata("design:type", String)
|
|
548
|
+
], CustomBaiduMapComponent.prototype, "infoWindowBorderColor", void 0);
|
|
549
|
+
__decorate([
|
|
550
|
+
Property('隐藏尖角'),
|
|
551
|
+
__metadata("design:type", Boolean)
|
|
552
|
+
], CustomBaiduMapComponent.prototype, "hideInfoWindowTail", void 0);
|
|
553
|
+
__decorate([
|
|
554
|
+
Property('隐藏关闭按钮'),
|
|
555
|
+
__metadata("design:type", Boolean)
|
|
556
|
+
], CustomBaiduMapComponent.prototype, "hideInfoWindowTop", void 0);
|
|
557
|
+
__decorate([
|
|
558
|
+
Property('地图拖动', { type: 'boolean' }),
|
|
559
|
+
__metadata("design:type", Object)
|
|
560
|
+
], CustomBaiduMapComponent.prototype, "dragging", void 0);
|
|
561
|
+
__decorate([
|
|
562
|
+
Property('遮罩颜色', {
|
|
563
|
+
ui: { widget: 'myColor' },
|
|
564
|
+
example: ['#ffffff', '#F5A623', '#F8E71C', '#50E3C2', '#3285FF', '#B45FFF', '#9B9B9B', null],
|
|
565
|
+
}),
|
|
566
|
+
__metadata("design:type", Object)
|
|
567
|
+
], CustomBaiduMapComponent.prototype, "shadeColor", void 0);
|
|
568
|
+
__decorate([
|
|
569
|
+
Property('背景颜色', {
|
|
570
|
+
ui: { widget: 'myColor' },
|
|
571
|
+
example: ['#ffffff', '#F5A623', '#F8E71C', '#50E3C2', '#3285FF', '#B45FFF', '#9B9B9B', null],
|
|
572
|
+
}),
|
|
573
|
+
__metadata("design:type", String)
|
|
574
|
+
], CustomBaiduMapComponent.prototype, "mapBackColor", void 0);
|
|
575
|
+
__decorate([
|
|
576
|
+
Property('多边线色', {
|
|
577
|
+
ui: { widget: 'myColor' },
|
|
578
|
+
example: ['#ffffff', '#F5A623', '#F8E71C', '#50E3C2', '#3285FF', '#B45FFF', '#9B9B9B', null],
|
|
579
|
+
}),
|
|
580
|
+
__metadata("design:type", Object)
|
|
581
|
+
], CustomBaiduMapComponent.prototype, "mapCityColor", void 0);
|
|
582
|
+
__decorate([
|
|
583
|
+
Property('地图缩放', {
|
|
584
|
+
ui: { widget: 'myRange', min: 1, max: 40, step: 1 },
|
|
585
|
+
}),
|
|
586
|
+
__metadata("design:type", Object)
|
|
587
|
+
], CustomBaiduMapComponent.prototype, "zoom", void 0);
|
|
588
|
+
__decorate([
|
|
589
|
+
Property('遮罩透明', { type: 'number' }),
|
|
590
|
+
__metadata("design:type", Object)
|
|
591
|
+
], CustomBaiduMapComponent.prototype, "fillOpacity", void 0);
|
|
592
|
+
__decorate([
|
|
593
|
+
Property('多边线粗', { type: 'number' }),
|
|
594
|
+
__metadata("design:type", Object)
|
|
595
|
+
], CustomBaiduMapComponent.prototype, "strokesize", void 0);
|
|
596
|
+
__decorate([
|
|
597
|
+
Property('黑夜模式', { type: 'boolean', ui: { hidden: true } }),
|
|
598
|
+
__metadata("design:type", Object)
|
|
599
|
+
], CustomBaiduMapComponent.prototype, "nightMode", void 0);
|
|
600
|
+
__decorate([
|
|
601
|
+
Property('3D视角'),
|
|
602
|
+
__metadata("design:type", Boolean)
|
|
603
|
+
], CustomBaiduMapComponent.prototype, "enable3D", void 0);
|
|
604
|
+
__decorate([
|
|
605
|
+
Property('定位控件'),
|
|
606
|
+
__metadata("design:type", Boolean)
|
|
607
|
+
], CustomBaiduMapComponent.prototype, "showLocationControl", void 0);
|
|
608
|
+
__decorate([
|
|
609
|
+
Property('初始角度', { type: 'number', ui: { visibleIf: { enable3D: [true] } } }),
|
|
610
|
+
__metadata("design:type", Object)
|
|
611
|
+
], CustomBaiduMapComponent.prototype, "tilt", void 0);
|
|
612
|
+
__decorate([
|
|
613
|
+
Property('显示省市', {
|
|
614
|
+
ui: {
|
|
615
|
+
widget: 'myUrlSelect',
|
|
616
|
+
allowClear: true,
|
|
617
|
+
url: '/assets/mapListItem.json',
|
|
618
|
+
},
|
|
619
|
+
}),
|
|
620
|
+
__metadata("design:type", Object)
|
|
621
|
+
], CustomBaiduMapComponent.prototype, "cityName", void 0);
|
|
622
|
+
__decorate([
|
|
623
|
+
Data({
|
|
624
|
+
properties: {
|
|
625
|
+
lng: { type: 'number', title: '经度' },
|
|
626
|
+
lat: { type: 'number', title: '纬度' },
|
|
627
|
+
},
|
|
628
|
+
}),
|
|
629
|
+
__metadata("design:type", Array)
|
|
630
|
+
], CustomBaiduMapComponent.prototype, "_data", void 0);
|
|
631
|
+
__decorate([
|
|
632
|
+
DataOutput(['lng', 'lat']),
|
|
633
|
+
Event('中心点改变', {
|
|
634
|
+
params: { properties: { lng: { title: '经度', type: 'number' }, lat: { title: '纬度', type: 'number' } } },
|
|
635
|
+
}),
|
|
636
|
+
__metadata("design:type", Object)
|
|
637
|
+
], CustomBaiduMapComponent.prototype, "dataChange", void 0);
|
|
638
|
+
__decorate([
|
|
639
|
+
DataOutput('缩放等级'),
|
|
640
|
+
Event('缩放', {
|
|
641
|
+
params: '缩放等级',
|
|
642
|
+
}),
|
|
643
|
+
__metadata("design:type", Object)
|
|
644
|
+
], CustomBaiduMapComponent.prototype, "zoomChange", void 0);
|
|
645
|
+
__decorate([
|
|
646
|
+
Event('地图点击', {
|
|
647
|
+
params: { properties: { lng: { title: '经度', type: 'number' }, lat: { title: '纬度', type: 'number' } } },
|
|
648
|
+
}),
|
|
649
|
+
__metadata("design:type", Object)
|
|
650
|
+
], CustomBaiduMapComponent.prototype, "mapClick", void 0);
|
|
651
|
+
CustomBaiduMapComponent = __decorate([
|
|
652
|
+
Widget('百度地图', {
|
|
653
|
+
group: 'component',
|
|
654
|
+
image: 'assets/img/screen/my-baidu-map.png',
|
|
655
|
+
children: [
|
|
656
|
+
{
|
|
657
|
+
title: '标记层',
|
|
658
|
+
type: 'sc-baidu-marker-layer',
|
|
659
|
+
option: {},
|
|
660
|
+
hidden: true,
|
|
661
|
+
hideChild: true,
|
|
662
|
+
},
|
|
663
|
+
],
|
|
664
|
+
childTypes: [
|
|
665
|
+
'sc-baidu-marker-layer',
|
|
666
|
+
'sc-baidu-polyline-layer',
|
|
667
|
+
'sc-wind-layer',
|
|
668
|
+
'sc-typhoon-area-layer',
|
|
669
|
+
'sc-baidu-fence',
|
|
670
|
+
],
|
|
671
|
+
description: 'hasChildItem',
|
|
672
|
+
}),
|
|
673
|
+
__metadata("design:paramtypes", [BaiduMapService,
|
|
674
|
+
HttpClient,
|
|
675
|
+
ElementRef,
|
|
676
|
+
NgZone,
|
|
677
|
+
ScaleSubject,
|
|
678
|
+
ChangeDetectorRef,
|
|
679
|
+
WidgetRef])
|
|
680
|
+
], CustomBaiduMapComponent);
|
|
681
|
+
export { CustomBaiduMapComponent };
|
|
682
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWJhaWR1LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY3JlZW4td2lkZ2V0L3NyYy9saWIvY3VzdG9tLWJhaWR1LW1hcC9jdXN0b20tYmFpZHUtbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBRVosV0FBVyxFQUdYLE1BQU0sRUFJTixRQUFRLEVBRVIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVd6RCxNQUFNLFdBQVcsR0FBRztJQUNsQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUNoQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUM5QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtJQUNuQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtDQUNsQyxDQUFDO0lBMkJXLHVCQUF1QixTQUF2Qix1QkFBdUI7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OzsyREFDbUM7QUFJckM7SUFIQyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2IsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtLQUN2RyxDQUFDOzt5REFDaUM7QUF6SnhCLHVCQUF1QjtJQXJCbkMsTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUNkLEtBQUssRUFBRSxXQUFXO1FBQ2xCLEtBQUssRUFBRSxvQ0FBb0M7UUFDM0MsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUk7YUFDaEI7U0FDRjtRQUNELFVBQVUsRUFBRTtZQUNWLHVCQUF1QjtZQUN2Qix5QkFBeUI7WUFDekIsZUFBZTtZQUNmLHVCQUF1QjtZQUN2QixnQkFBZ0I7U0FDakI7UUFDRCxXQUFXLEVBQUUsY0FBYztLQUNyQixDQUFDO3FDQXFMb0IsZUFBZTtRQUMxQixVQUFVO1FBQ0osVUFBVTtRQUNoQixNQUFNO1FBQ1EsWUFBWTtRQUM1QixpQkFBaUI7UUFDVixTQUFTO0dBMUxuQix1QkFBdUIsQ0FnbEJuQztTQWhsQlksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIE5nWm9uZSxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNjYWxlU3ViamVjdCwgVGVtcGxhdGVVdGlsLCBXaWRnZXRSZWYgfSBmcm9tICdiYmotd2lkZ2V0LWJhc2UnO1xyXG5pbXBvcnQgeyBEYXRhLCBEYXRhT3V0cHV0LCBQcm9wZXJ0eSwgV2lkZ2V0LCBFdmVudCB9IGZyb20gJ2Jiai13aWRnZXQtYmFzZSc7XHJcbmltcG9ydCB7IEJhaWR1TWFwU2VydmljZSB9IGZyb20gJ2Jiai1zY3JlZW4td2lkZ2V0L2NvcmUnO1xyXG5cclxuLy8gZGVjbGFyZSBjb25zdCBCTWFwO1xyXG5kZWNsYXJlIGNvbnN0IEJNYXBHTDogYW55O1xyXG4vLyBkZWNsYXJlIGNvbnN0IEJNYXBHTExpYjtcclxuLy8gZGVjbGFyZSBjb25zdCBCTWFwTGliO1xyXG4vLyBkZWNsYXJlIGNvbnN0IEJNQVBfQU5DSE9SX0JPVFRPTV9MRUZUOiBudW1iZXI7XHJcbmRlY2xhcmUgY29uc3QgQk1BUF9BTkNIT1JfVE9QX0xFRlQ6IG51bWJlcjtcclxuZGVjbGFyZSBjb25zdCBtYXB2Z2w6IGFueTtcclxuZGVjbGFyZSBjb25zdCBCTUFQX1NBVEVMTElURV9NQVA6IG51bWJlcjtcclxuZGVjbGFyZSBjb25zdCBCTUFQX05PUk1BTF9NQVA6IG51bWJlcjtcclxuY29uc3QgTWFwVHlwZUVudW0gPSBbXHJcbiAgeyBsYWJlbDogJ+aZrumAmicsIHZhbHVlOiAnbm9ybWFsJyB9LFxyXG4gIHsgbGFiZWw6ICfmt7HoibInLCB2YWx1ZTogJ2RhcmsnIH0sXHJcbiAgeyBsYWJlbDogJ+WNq+aYnycsIHZhbHVlOiAnc2F0ZWxsaXRlJyB9LFxyXG4gIHsgbGFiZWw6ICfoh6rlrprkuYknLCB2YWx1ZTogJ2N1c3RvbScgfSxcclxuXTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzYy1jdXN0b20tYmFpZHUtbWFwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLWJhaWR1LW1hcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLWJhaWR1LW1hcC5jb21wb25lbnQubGVzcyddLFxyXG59KVxyXG5AV2lkZ2V0KCfnmb7luqblnLDlm74nLCB7XHJcbiAgZ3JvdXA6ICdjb21wb25lbnQnLFxyXG4gIGltYWdlOiAnYXNzZXRzL2ltZy9zY3JlZW4vbXktYmFpZHUtbWFwLnBuZycsXHJcbiAgY2hpbGRyZW46IFtcclxuICAgIHtcclxuICAgICAgdGl0bGU6ICfmoIforrDlsYInLFxyXG4gICAgICB0eXBlOiAnc2MtYmFpZHUtbWFya2VyLWxheWVyJyxcclxuICAgICAgb3B0aW9uOiB7fSxcclxuICAgICAgaGlkZGVuOiB0cnVlLFxyXG4gICAgICBoaWRlQ2hpbGQ6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgY2hpbGRUeXBlczogW1xyXG4gICAgJ3NjLWJhaWR1LW1hcmtlci1sYXllcicsXHJcbiAgICAnc2MtYmFpZHUtcG9seWxpbmUtbGF5ZXInLFxyXG4gICAgJ3NjLXdpbmQtbGF5ZXInLFxyXG4gICAgJ3NjLXR5cGhvb24tYXJlYS1sYXllcicsXHJcbiAgICAnc2MtYmFpZHUtZmVuY2UnLFxyXG4gIF0sXHJcbiAgZGVzY3JpcHRpb246ICdoYXNDaGlsZEl0ZW0nLFxyXG59IGFzIGFueSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbUJhaWR1TWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgLy8gQFByb3BlcnR5KCflrZfkvZMnLCB7IHVpOiB7IHdpZGdldDogJ215Rm9udCcgfSB9KVxyXG4gIC8vIGZvbnQ6IGFueSA9IHtcclxuICAvLyAgIGZhbWlseTogJycsXHJcbiAgLy8gICBjb2xvcjogJyMwMDAwMDAnLFxyXG4gIC8vICAgd2VpZ2h0OiAnbm9ybWFsJyxcclxuICAvLyAgIHNpemU6IDE2LFxyXG4gIC8vICAgc3BhY2U6IDAsXHJcbiAgLy8gICBsaW5lSGVpZ2h0OiAwLFxyXG4gIC8vIH07XHJcbiAgQFByb3BlcnR5KCflnLDlm77nsbvlnosnLCB7XHJcbiAgICBlbnVtOiBNYXBUeXBlRW51bSxcclxuICB9KVxyXG4gIG1hcFR5cGUgPSAnbm9ybWFsJztcclxuICBtYXBUeXBlVmFsdWU6IHN0cmluZztcclxuICBAUHJvcGVydHkoJ+S4iuS8oOagt+W8jycsIHsgdHlwZTogJ3N0cmluZycsIHVpOiB7IHdpZGdldDogJ215VXBsb2FkQXVkaW8nLCB2aXNpYmxlSWY6IHsgbWFwVHlwZTogWydjdXN0b20nXSB9IH0gfSlcclxuICB1cGxvYWRTdHlsZTogc3RyaW5nO1xyXG4gIEBQcm9wZXJ0eSgn5YiH5o2i5oyJ6ZKuJylcclxuICBzaG93TWFwVHlwZVJhZGlvOiBib29sZWFuO1xyXG4gIEBQcm9wZXJ0eSgn5YWo5pmv5Zyw5Zu+JywgeyB0eXBlOiAnYm9vbGVhbicgfSlcclxuICBtaW5NYXBTaG93ID0gZmFsc2U7XHJcbiAgQFByb3BlcnR5KCfmmL7npLrkv6Hmga8nLCB7XHJcbiAgICB1aTogeyB3aWRnZXQ6ICdzZWxlY3QnIH0sXHJcbiAgICBlbnVtOiBbXHJcbiAgICAgIHsgbGFiZWw6ICfngrnlh7snLCB2YWx1ZTogJ2NsaWNrJyB9LFxyXG4gICAgICB7IGxhYmVsOiAn5oKs5YGcJywgdmFsdWU6ICdtb3VzZW92ZXInIH0sXHJcbiAgICBdLFxyXG4gIH0pXHJcbiAgc2hvd1R5cGUgPSAnY2xpY2snO1xyXG4gIEBQcm9wZXJ0eSgn5L+h5oGv56qX6IOM5pmvJywgeyB1aTogeyB3aWRnZXQ6ICdteUNvbG9yJyB9IH0pXHJcbiAgaW5mb1dpbmRvd0JhY2tncm91bmQ6IHN0cmluZztcclxuICBAUHJvcGVydHkoJ+S/oeaBr+eql+Wtl+S9kycsIHsgdWk6IHsgd2lkZ2V0OiAnbXlDb2xvcicgfSB9KVxyXG4gIGluZm9XaW5kb3dDb2xvcjogc3RyaW5nO1xyXG4gIEBQcm9wZXJ0eSgn5L+h5oGv56qX5a695bqmJylcclxuICBpbmZvV2luZG93V2lkdGg6IG51bWJlcjtcclxuICBAUHJvcGVydHkoJ+S/oeaBr+eql+mrmOW6picpXHJcbiAgaW5mb1dpbmRvd0hlaWdodDogbnVtYmVyO1xyXG4gIEBQcm9wZXJ0eSgn5L+h5oGv56qX5qih5p2/JywgeyB1aTogeyB3aWRnZXQ6ICd0ZXh0YXJlYScgfSB9KVxyXG4gIGluZm9XaW5kb3dUZW1wbGF0ZTogc3RyaW5nO1xyXG4gIEBQcm9wZXJ0eSgn5L+h5oGv56qX6L655qGGJywge1xyXG4gICAgdWk6IHsgd2lkZ2V0OiAnbXlDb2xvcicgfSxcclxuICAgIGV4YW1wbGU6IFsnI2ZmZmZmZicsICcjRjVBNjIzJywgJyNGOEU3MUMnLCAnIzUwRTNDMicsICcjMzI4NUZGJywgJyNCNDVGRkYnLCAnIzlCOUI5QicsIG51bGxdLFxyXG4gIH0pXHJcbiAgaW5mb1dpbmRvd0JvcmRlckNvbG9yOiBzdHJpbmc7XHJcbiAgQFByb3BlcnR5KCfpmpDol4/lsJbop5InKVxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGlkZUluZm9XaW5kb3dUYWlsJylcclxuICBoaWRlSW5mb1dpbmRvd1RhaWw6IGJvb2xlYW47XHJcbiAgQFByb3BlcnR5KCfpmpDol4/lhbPpl63mjInpkq4nKVxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGlkZUluZm9XaW5kb3dUb3AnKVxyXG4gIGhpZGVJbmZvV2luZG93VG9wOiBib29sZWFuO1xyXG4gIEBQcm9wZXJ0eSgn5Zyw5Zu+5ouW5YqoJywgeyB0eXBlOiAnYm9vbGVhbicgfSlcclxuICBkcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gIEBQcm9wZXJ0eSgn6YGu572p6aKc6ImyJywge1xyXG4gICAgdWk6IHsgd2lkZ2V0OiAnbXlDb2xvcicgfSxcclxuICAgIGV4YW1wbGU6IFsnI2ZmZmZmZicsICcjRjVBNjIzJywgJyNGOEU3MUMnLCAnIzUwRTNDMicsICcjMzI4NUZGJywgJyNCNDVGRkYnLCAnIzlCOUI5QicsIG51bGxdLFxyXG4gIH0pXHJcbiAgc2hhZGVDb2xvciA9ICcjMDA0Mzk1JztcclxuICBAUHJvcGVydHkoJ+iDjOaZr+minOiJsicsIHtcclxuICAgIHVpOiB7IHdpZGdldDogJ215Q29sb3InIH0sXHJcbiAgICBleGFtcGxlOiBbJyNmZmZmZmYnLCAnI0Y1QTYyMycsICcjRjhFNzFDJywgJyM1MEUzQzInLCAnIzMyODVGRicsICcjQjQ1RkZGJywgJyM5QjlCOUInLCBudWxsXSxcclxuICB9KVxyXG4gIG1hcEJhY2tDb2xvcjogc3RyaW5nO1xyXG5cclxuICBAUHJvcGVydHkoJ+Wkmui+uee6v+iJsicsIHtcclxuICAgIHVpOiB7IHdpZGdldDogJ215Q29sb3InIH0sXHJcbiAgICBleGFtcGxlOiBbJyNmZmZmZmYnLCAnI0Y1QTYyMycsICcjRjhFNzFDJywgJyM1MEUzQzInLCAnIzMyODVGRicsICcjQjQ1RkZGJywgJyM5QjlCOUInLCBudWxsXSxcclxuICB9KVxyXG4gIG1hcENpdHlDb2xvciA9ICcjNDFiN2ZmJztcclxuICBAUHJvcGVydHkoJ+WcsOWbvue8qeaUvicsIHtcclxuICAgIHVpOiB7IHdpZGdldDogJ215UmFuZ2UnLCBtaW46IDEsIG1heDogNDAsIHN0ZXA6IDEgfSxcclxuICB9KVxyXG4gIHpvb20gPSAxMjtcclxuICAvLyBAUHJvcGVydHkoJ+aUvuWkp+avlOS+iycsIHsgdHlwZTogJ251bWJlcicgfSlcclxuICAvLyBzY2FsZSA9IDE7XHJcbiAgQFByb3BlcnR5KCfpga7nvanpgI/mmI4nLCB7IHR5cGU6ICdudW1iZXInIH0pXHJcbiAgZmlsbE9wYWNpdHkgPSAwO1xyXG4gIEBQcm9wZXJ0eSgn5aSa6L6557q/57KXJywgeyB0eXBlOiAnbnVtYmVyJyB9KVxyXG4gIHN0cm9rZXNpemUgPSAyO1xyXG4gIEBQcm9wZXJ0eSgn6buR5aSc5qih5byPJywgeyB0eXBlOiAnYm9vbGVhbicsIHVpOiB7IGhpZGRlbjogdHJ1ZSB9IH0pXHJcbiAgbmlnaHRNb2RlID0gZmFsc2U7XHJcbiAgQFByb3BlcnR5KCczROinhuinkicpXHJcbiAgZW5hYmxlM0Q6IGJvb2xlYW47XHJcbiAgQFByb3BlcnR5KCflrprkvY3mjqfku7YnKVxyXG4gIHNob3dMb2NhdGlvbkNvbnRyb2w6IGJvb2xlYW47XHJcbiAgQFByb3BlcnR5KCfliJ3lp4vop5LluqYnLCB7IHR5cGU6ICdudW1iZXInLCB1aTogeyB2aXNpYmxlSWY6IHsgZW5hYmxlM0Q6IFt0cnVlXSB9IH0gfSlcclxuICB0aWx0ID0gNzM7XHJcbiAgLy8gQFByb3BlcnR5KCfkuK3lv4Pnu4/luqYnLCB7XHJcbiAgLy8gICB1aToge3dpZGdldDogJ215UmFuZ2UnLCBtaW46IC0xODAsIG1heDogMTgwLCBzdGVwOiAxfSxcclxuICAvLyB9KVxyXG4gIGNlbnRlckxuZyA9IDEyMC43O1xyXG4gIC8vIEBQcm9wZXJ0eSgn5Lit5b+D57qs5bqmJywge1xyXG4gIC8vICAgdWk6IHt3aWRnZXQ6ICdteVJhbmdlJywgbWluOiAtOTAsIG1heDogOTAsIHN0ZXA6IDF9LFxyXG4gIC8vIH0pXHJcbiAgY2VudGVyTGF0ID0gMjg7XHJcbiAgQFByb3BlcnR5KCfmmL7npLrnnIHluIInLCB7XHJcbiAgICB1aToge1xyXG4gICAgICB3aWRnZXQ6ICdteVVybFNlbGVjdCcsXHJcbiAgICAgIGFsbG93Q2xlYXI6IHRydWUsXHJcbiAgICAgIHVybDogJy9hc3NldHMvbWFwTGlzdEl0ZW0uanNvbicsXHJcbiAgICB9LFxyXG4gIH0pXHJcbiAgY2l0eU5hbWUgPSBudWxsO1xyXG4gIHBvaW50OiBhbnk7XHJcblxyXG4gIC8vIF9kYXRhID0gW1xyXG4gIC8vICAge1xyXG4gIC8vICAgICBvcHRpb25zOiB7XHJcbiAgLy8gICAgICAgaWNvbjoge1xyXG4gIC8vICAgICAgICAgaW1hZ2VVcmw6ICdhc3NldHMvaW1nL3NjcmVlbi9udW1iZXItZmxvcC5wbmcnLFxyXG4gIC8vICAgICAgICAgc2l6ZToge1xyXG4gIC8vICAgICAgICAgICBoZWlnaHQ6IDI2MCxcclxuICAvLyAgICAgICAgICAgd2lkdGg6IDI1MFxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgcG9pbnQ6IHtcclxuICAvLyAgICAgICBsbmc6IDEyMC43LCAgIC8vIOe7j+W6plxyXG4gIC8vICAgICAgIGxhdDogMjgsICAgIC8vIOe6rOW6plxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9LFxyXG4gIC8vIF07XHJcbiAgLy8g5paH5a2X5qCH5rOoXHJcblxyXG4gIHB1YmxpYyB0ZXh0OiBzdHJpbmc7XHJcbiAgLy8gX2NoaWxkcmVuID0gW107XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG1hcDogYW55O1xyXG4gIGVkaXQ6IGJvb2xlYW47XHJcbiAgLy8gbWFya2VyVGllckNsaWNrOiBhbnk7XHJcbiAgLy8gcGluZ3lhbmcgPSAnJztcclxuICAvLyBydWlhbiA9ICcnO1xyXG4gIEBEYXRhKHtcclxuICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgbG5nOiB7IHR5cGU6ICdudW1iZXInLCB0aXRsZTogJ+e7j+W6picgfSxcclxuICAgICAgbGF0OiB7IHR5cGU6ICdudW1iZXInLCB0aXRsZTogJ+e6rOW6picgfSxcclxuICAgIH0sXHJcbiAgfSlcclxuICBfZGF0YTogYW55W10gPSBbeyBsbmc6IDEyMC43LCBsYXQ6IDI4IH1dO1xyXG4gIEBEYXRhT3V0cHV0KFsnbG5nJywgJ2xhdCddKVxyXG4gIEBFdmVudCgn5Lit5b+D54K55pS55Y+YJywge1xyXG4gICAgcGFyYW1zOiB7IHByb3BlcnRpZXM6IHsgbG5nOiB7IHRpdGxlOiAn57uP5bqmJywgdHlwZTogJ251bWJlcicgfSwgbGF0OiB7IHRpdGxlOiAn57qs5bqmJywgdHlwZTogJ251bWJlcicgfSB9IH0sXHJcbiAgfSlcclxuICBkYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBEYXRhT3V0cHV0KCfnvKnmlL7nrYnnuqcnKVxyXG4gIEBFdmVudCgn57yp5pS+Jywge1xyXG4gICAgcGFyYW1zOiAn57yp5pS+562J57qnJyxcclxuICB9KVxyXG4gIHpvb21DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBARXZlbnQoJ+WcsOWbvueCueWHuycsIHtcclxuICAgIHBhcmFtczogeyBwcm9wZXJ0aWVzOiB7IGxuZzogeyB0aXRsZTogJ+e7j+W6picsIHR5cGU6ICdudW1iZXInIH0sIGxhdDogeyB0aXRsZTogJ+e6rOW6picsIHR5cGU6ICdudW1iZXInIH0gfSB9LFxyXG4gIH0pXHJcbiAgbWFwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjb250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgY2hpbGRyZW46IGFueVtdO1xyXG4gIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBkZXN0cm95ZWQ6IGJvb2xlYW47XHJcbiAgLy8gY29udGFpbmVyU3R5bGU6IGFueSA9IHt9O1xyXG4gIC8vIHVubG9hZGVkQ2hpbGRyZW4gPSB7fTtcclxuICBvdmVybGF5c01hcCA9IHt9O1xyXG5cclxuICAvLyBASG9zdEJpbmRpbmcoJ2NsYXNzLmhpZGVJbmZvV2luZG93VGFpbCcpXHJcbiAgLy8gaGlkZUluZm9XaW5kb3dUYWlsOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIGluaXRlZDogKG1hcDogYW55KSA9PiB2b2lkO1xyXG4gIGluaXQkID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgIHRoaXMuaW5pdGVkID0gcmVzb2x2ZTtcclxuICB9KTtcclxuICB2aWV3OiBhbnk7XHJcbiAgcGlja2VyRXZlbnQ6IGFueTtcclxuICBwaWNrZXJJdGVtOiBhbnk7XHJcbiAgcGlja2VyVGltZW91dDogYW55O1xyXG4gIG1hcFR5cGVFbnVtID0gTWFwVHlwZUVudW0uc2xpY2UoMCwgMyk7XHJcbiAgZGFya1N0eWxlOiBhbnk7XHJcbiAgZmlyc3RPcGVuOiBib29sZWFuO1xyXG4gIGZpcnN0T3BlblByb21pc2U6IFByb21pc2U8dm9pZD47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGJhaWR1TWFwU2VydmljZTogQmFpZHVNYXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNjYWxlJDogU2NhbGVTdWJqZWN0LFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHdpZGdldFJlZjogV2lkZ2V0UmVmLFxyXG4gICkge31cclxuXHJcbiAgZ2V0IGVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgYWRkTGF5ZXIobGF5ZXI6IGFueSkge1xyXG4gICAgaWYgKHRoaXMudmlldykge1xyXG4gICAgICB0aGlzLnZpZXcuYWRkTGF5ZXIobGF5ZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTGF5ZXIobGF5ZXI6IGFueSkge1xyXG4gICAgaWYgKHRoaXMudmlldykge1xyXG4gICAgICB0aGlzLnZpZXcucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMuX2RhdGEgJiYgdGhpcy5fZGF0YVswXSkge1xyXG4gICAgICB0aGlzLmNlbnRlckxuZyA9ICt0aGlzLl9kYXRhWzBdLmxuZztcclxuICAgICAgdGhpcy5jZW50ZXJMYXQgPSArdGhpcy5fZGF0YVswXS5sYXQ7XHJcbiAgICAgIHRoaXMuc2V0Q2VudGVyKHRoaXMuY2VudGVyTG5nLCB0aGlzLmNlbnRlckxhdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnNjYWxlJCkge1xyXG4gICAgICAvLyDov5nmmK/kuLrkuobop6PlhrPlnLDlm77nvKnmlL7kuK3lv4PkuI3lnKjpvKDmoIfmiYDlnKjkvY3nva7nmoTpl67pophcclxuICAgICAgdGhpcy5zY2FsZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoc2NhbGUpID0+IHtcclxuICAgICAgICBjb25zdCB7IHg6IHN4LCB5OiBzeSwgc2NhbGVDb250ZW50IH0gPSBzY2FsZSBhcyBhbnk7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmVsZW1lbnQuc3R5bGU7XHJcbiAgICAgICAgaWYgKHNjYWxlQ29udGVudCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHRoaXMuem9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnROb2RlIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSAvdHJhbnNsYXRlXFwoKFstXFxkLl0rKXB4LCAoWy1cXGQuXSspcHhcXCkvLmV4ZWMocGFyZW50LnN0eWxlLnRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRYID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRZID0gcGFyc2VGbG9hdChtYXRjaFsyXSk7XHJcbiAgICAgICAgICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7LW9mZnNldFh9cHgsJHstb2Zmc2V0WX1weClgO1xyXG4gICAgICAgICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gcGFyZW50LmNsaWVudEhlaWdodCArIG9mZnNldFkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgc3R5bGUud2lkdGggPSBwYXJlbnQuY2xpZW50V2lkdGggKyBvZmZzZXRYICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBgJHtvZmZzZXRZfXB4IDAgMCAke29mZnNldFh9cHhgO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5jb250YWluZXJTdHlsZSA9IHtcclxuICAgICAgICAgICAgICAgIC8vICAgdHJhbnNmb3JtT3JpZ2luOiBgMCAwYCxcclxuICAgICAgICAgICAgICAgIC8vICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlKCR7LW9mZnNldFh9cHgsJHstb2Zmc2V0WX1weClgLFxyXG4gICAgICAgICAgICAgICAgLy8gICBoZWlnaHQ6IHBhcmVudC5jbGllbnRIZWlnaHQgKyBvZmZzZXRZICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIC8vICAgd2lkdGg6IHBhcmVudC5jbGllbnRXaWR0aCArIG9mZnNldFggKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgLy8gICBwYWRkaW5nOiBgJHtvZmZzZXRZfXB4IDAgMCAke29mZnNldFh9cHhgLFxyXG4gICAgICAgICAgICAgICAgLy8gfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgeyBwb3NpdGlvbiwgc2l6ZSB9ID0gdGhpcy53aWRnZXRSZWYud2lkZ2V0IGFzIGFueTtcclxuICAgICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gcG9zaXRpb247XHJcbiAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHNpemU7XHJcbiAgICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7LXh9cHgsJHsteX1weCkgc2NhbGUoJHsxIC8gc3h9LCR7MSAvIHN5fSlgO1xyXG4gICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gKHkgKyBoZWlnaHQpICogc3kgKyAncHgnO1xyXG4gICAgICAgICAgc3R5bGUud2lkdGggPSAoeCArIHdpZHRoKSAqIHN4ICsgJ3B4JztcclxuICAgICAgICAgIHN0eWxlLnBhZGRpbmcgPSBgJHt5ICogc3l9cHggMCAwICR7eCAqIHN4fXB4YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5pbml0TWFwKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0TWFwKCkge1xyXG4gICAgYXdhaXQgdGhpcy5iYWlkdU1hcFNlcnZpY2UubG9hZE1hcEdMKCk7XHJcbiAgICBhd2FpdCB0aGlzLmJhaWR1TWFwU2VydmljZS5sb2FkTWFwVkdMKCk7XHJcbiAgICB0aGlzLm1hcFR5cGVWYWx1ZSA9IHRoaXMubWFwVHlwZTtcclxuICAgIC8vIOWFvOWuueiAgeeahOmFjee9rlxyXG4gICAgaWYgKHRoaXMubWFwVHlwZSA9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLnVwbG9hZFN0eWxlKSB7XHJcbiAgICAgICAgdGhpcy5tYXBUeXBlVmFsdWUgPSAnY3VzdG9tJztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm5pZ2h0TW9kZSkge1xyXG4gICAgICAgIHRoaXMubWFwVHlwZVZhbHVlID0gJ2RhcmsnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tYXAgPSBuZXcgQk1hcEdMLk1hcCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCB7IHJlc3RyaWN0Q2VudGVyOiBmYWxzZSB9KTtcclxuICAgICAgICB0aGlzLm1hcC5jZW50ZXJBbmRab29tKG5ldyBCTWFwR0wuUG9pbnQodGhpcy5jZW50ZXJMbmcsIHRoaXMuY2VudGVyTGF0KSwgdGhpcy56b29tKTsgLy8g6K6+572u5Lit5b+D54K55ZKM57yp5pS+57qn5YirXHJcbiAgICAgICAgdGhpcy5tYXAuZW5hYmxlU2Nyb2xsV2hlZWxab29tKCk7IC8vIOWQr+eUqOa7mui9rui/m+ihjOe8qeaUvuWKn+iDvVxyXG4gICAgICAgIC8vIHZhciBkaXN0ID0gbmV3IEJNYXBHTC5EaXN0cmljdExheWVyKHtcclxuICAgICAgICAvLyAgIG5hbWU6ICco5rip5bee5biCKScsXHJcbiAgICAgICAgLy8gICBraW5kOiAxLFxyXG4gICAgICAgIC8vICAgIGZpbGxDb2xvcjogJyNmZmYnLFxyXG4gICAgICAgIC8vICAgZmlsbE9wYWNpdHk6IDAuMSxcclxuICAgICAgICAvLyAgIHN0cm9rZUNvbG9yOiAnI2RhZWFmYScsXHJcbiAgICAgICAgLy8gICB2aWV3cG9ydDogdHJ1ZSxcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyB0aGlzLm1hcC5hZGREaXN0cmljdExheWVyKGRpc3QpO1xyXG4gICAgICAgIHRoaXMubWFwVHlwZUNoYW5nZSh0aGlzLm1hcFR5cGVWYWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdCB8fCB0aGlzLmRyYWdnaW5nID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5tYXAuZGlzYWJsZURyYWdnaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZTNEKSB7XHJcbiAgICAgICAgICB0aGlzLm1hcC5zZXRUaWx0KHRoaXMudGlsdCA9PSBudWxsID8gNzMgOiB0aGlzLnRpbHQsIHsgbm9BbmltYXRpb246IHRydWUgfSk7XHJcbiAgICAgICAgICB0aGlzLm1hcC5zZXREaXNwbGF5T3B0aW9ucyh7IHNreUNvbG9yczogWydyZ2JhKDAsIDAsIDAsIDApJ10gfSk7IC8vIOmakOiXj+WkqeepulxyXG4gICAgICAgICAgLy8gY29uc3QgbmF2aTNEQ3RybCA9IG5ldyBCTWFwR0wuTmF2aWdhdGlvbkNvbnRyb2wzRCgpOyAvLyDmt7vliqAzROaOp+S7tlxyXG4gICAgICAgICAgLy8gdGhpcy5tYXAuYWRkQ29udHJvbChuYXZpM0RDdHJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tYXAuZGlzYWJsZVRpbHQoKTtcclxuICAgICAgICAgIHRoaXMubWFwLmRpc2FibGVSb3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0xvY2F0aW9uQ29udHJvbCkge1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgLy8g5o6n5Lu255qE5YGc6Z2g5L2N572u77yI5Y+v6YCJ77yM6buY6K6k5bem5LiK6KeS77yJXHJcbiAgICAgICAgICAgIGFuY2hvcjogQk1BUF9BTkNIT1JfVE9QX0xFRlQsXHJcbiAgICAgICAgICAgIC8vIOaOp+S7tuWfuuS6juWBnOmdoOS9jee9rueahOWBj+enu+mHj++8iOWPr+mAie+8iVxyXG4gICAgICAgICAgICBvZmZzZXQ6IG5ldyBCTWFwR0wuU2l6ZSgyMCwgMjApLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGxldCBsb2NhdGlvbkNvbnRyb2wgPSBuZXcgQk1hcEdMLkxvY2F0aW9uQ29udHJvbChvcHRpb25zKTtcclxuICAgICAgICAgIC8vIOWwhuaOp+S7tua3u+WKoOWIsOWcsOWbvuS4ilxyXG4gICAgICAgICAgdGhpcy5tYXAuYWRkQ29udHJvbChsb2NhdGlvbkNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5taW5NYXBTaG93KSB7XHJcbiAgICAgICAgICBjb25zdCBzdEN0cmwgPSBuZXcgQk1hcEdMLlBhbm9yYW1hQ29udHJvbCgpO1xyXG4gICAgICAgICAgc3RDdHJsLnNldE9mZnNldChuZXcgQk1hcEdMLlNpemUoMjAsIDIwKSk7XHJcbiAgICAgICAgICB0aGlzLm1hcC5hZGRDb250cm9sKHN0Q3RybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmluZm9XaW5kb3dCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby13aW5kb3ctYmFja2dyb3VuZCcsIHRoaXMuaW5mb1dpbmRvd0JhY2tncm91bmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pbmZvV2luZG93Q29sb3IpIHtcclxuICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLXdpbmRvdy1jb2xvcicsIHRoaXMuaW5mb1dpbmRvd0NvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaW5mb1dpbmRvd0JvcmRlckNvbG9yKSB7XHJcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby13aW5kb3ctYm9yZGVyLWNvbG9yJywgdGhpcy5pbmZvV2luZG93Qm9yZGVyQ29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1hcC5hZGRFdmVudExpc3RlbmVyKCdtb3ZlZW5kJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjZW50ZXIgPSB0aGlzLm1hcC5nZXRDZW50ZXIoKTtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KGNlbnRlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYXAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgICAgICAgIHRoaXMubWFwQ2xpY2suZW1pdChldmVudC5sYXRsbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubWFwLmFkZEV2ZW50TGlzdGVuZXIoJ3pvb21lbmQnLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuem9vbUNoYW5nZS5lbWl0KHRoaXMubWFwLmdldFpvb20oKSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLm1hcC5nZXRDZW50ZXIoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IG1hcHZnbC5WaWV3KHtcclxuICAgICAgICAgIG1hcDogdGhpcy5tYXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5tYXBMb2FkZWQodGhpcy5tYXApO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pbml0ZWQodGhpcy5tYXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Q2VudGVyKGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubWFwICYmIGxuZyAmJiBsYXQpIHtcclxuICAgICAgY29uc3QgY2VudGVyID0gdGhpcy5tYXAuZ2V0Q2VudGVyKCk7XHJcbiAgICAgIGlmIChjZW50ZXIubG5nICE9IGxuZyB8fCBjZW50ZXIubGF0ICE9IGxhdCkge1xyXG4gICAgICAgIHRoaXMuc2V0Q2VudGVyQW5kWm9vbShsbmcsIGxhdCwgdGhpcy5tYXAuZ2V0Wm9vbSgpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Q2VudGVyQW5kWm9vbShsbmc6IG51bWJlciwgbGF0OiBudW1iZXIsIHpvb206IG51bWJlcikge1xyXG4gICAgY29uc3QgY2VudGVyID0gdGhpcy5tYXAuZ2V0Q2VudGVyKCk7XHJcbiAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMubWFwLmdldFpvb20oKTtcclxuICAgIC8vIOivr+W3ruiMg+WbtOWGheS4jeenu+WKqCzpmLLmraLog4zmma/mipbliqhcclxuICAgIGlmICh6b29tICE9IGN1cnJlbnRab29tIHx8IE1hdGguYWJzKGxuZyAtIGNlbnRlci5sbmcpID4gMWUtMTMgfHwgTWF0aC5hYnMobGF0IC0gY2VudGVyLmxhdCkgPiAxZS03KSB7XHJcbiAgICAgIGNvbnN0IHBvaW50ID0gbmV3IEJNYXBHTC5Qb2ludChsbmcsIGxhdCk7XHJcbiAgICAgIHRoaXMubWFwLmNlbnRlckFuZFpvb20ocG9pbnQsIHpvb20sIHsgdGlsdDogdGhpcy5tYXAuZ2V0VGlsdCgpIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5qC55o2u57uP57qs5bqm6IyD5Zu06K6+572u5Lit5b+D5ZKM57yp5pS+562J57qnXHJcbiAgICogQHBhcmFtIG1pbkxuZ1xyXG4gICAqIEBwYXJhbSBtYXhMbmdcclxuICAgKiBAcGFyYW0gbWluTGF0XHJcbiAgICogQHBhcmFtIG1heExhdFxyXG4gICAqL1xyXG4gIHNldFJlY3RDZW50ZXJBbmRab29tKG1pbkxuZzogbnVtYmVyLCBtYXhMbmc6IG51bWJlciwgbWluTGF0OiBudW1iZXIsIG1heExhdDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNldENlbnRlckFuZFpvb20oKG1heExuZyArIG1pbkxuZykgLyAyLCAobWF4TGF0ICsgbWluTGF0KSAvIDIsIHRoaXMuZ2V0Wm9vbShtYXhMbmcsIG1pbkxuZywgbWF4TGF0LCBtaW5MYXQpKTtcclxuICB9XHJcblxyXG4gIGdldFpvb20obWF4TG5nOiBudW1iZXIsIG1pbkxuZzogbnVtYmVyLCBtYXhMYXQ6IG51bWJlciwgbWluTGF0OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHpvb21zID0gW1xyXG4gICAgICA1MCwgMTAwLCAyMDAsIDUwMCwgMTAwMCwgMjAwMCwgNTAwMCwgMTAwMDAsIDIwMDAwLCAyNTAwMCwgNTAwMDAsIDEwMDAwMCwgMjAwMDAwLCA1MDAwMDAsIDEwMDAwMDAsIDIwMDAwMDAsXHJcbiAgICBdOyAvL+e6p+WIqzE45YiwM+OAglxyXG4gICAgY29uc3QgcG9pbnRBID0gbmV3IEJNYXBHTC5Qb2ludChtYXhMbmcsIG1heExhdCk7IC8vIOWIm+W7uueCueWdkOagh0FcclxuICAgIGNvbnN0IHBvaW50QiA9IG5ldyBCTWFwR0wuUG9pbnQobWluTG5nLCBtaW5MYXQpOyAvLyDliJvlu7rngrnlnZDmoIdCXHJcbiAgICBjb25zdCBkaXN0YW5jZSA9ICt0aGlzLm1hcC5nZXREaXN0YW5jZShwb2ludEEsIHBvaW50QikudG9GaXhlZCgxKTsgLy/ojrflj5bkuKTngrnot53nprss5L+d55WZ5bCP5pWw54K55ZCO5Lik5L2NXHJcbiAgICBjb25zdCBpID0gem9vbXMuZmluZEluZGV4KCh6b29tKSA9PiB6b29tIC0gZGlzdGFuY2UgPiAwKTtcclxuICAgIGlmIChpID09PSAtMSkge1xyXG4gICAgICByZXR1cm4gNTtcclxuICAgIH1cclxuICAgIC8v5LmL5omA5Lul5Lya5aSaM++8jOaYr+WboOS4uuWcsOWbvuiMg+WbtOW4uOW4uOaYr+avlOS+i+Wwuui3neemu+eahDEw5YCN5Lul5LiK44CC5omA5Lul57qn5Yir5Lya5aKe5YqgM+OAglxyXG4gICAgcmV0dXJuIDE4IC0gaSArIDM7XHJcbiAgfVxyXG5cclxuICBvcGVuSW5mb1dpbmRvdyhkYXRhOiBhbnksIGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlcikge1xyXG4gICAgaWYgKGRhdGEuaW5mb3JtYXRpb24gfHwgdGhpcy5pbmZvV2luZG93VGVtcGxhdGUpIHtcclxuICAgICAgY29uc3QgcG9pbnQgPSBuZXcgQk1hcEdMLlBvaW50KCtsbmcsICtsYXQpO1xyXG4gICAgICAvLyBsZXQgb2Zmc2V0WSA9IC0yNTtcclxuICAgICAgLy8gaWYgKHRoaXMuaGlkZUluZm9XaW5kb3dUYWlsKSB7XHJcbiAgICAgIC8vICAgb2Zmc2V0WSA9IDA7XHJcbiAgICAgIC8vIH1cclxuICAgICAgbGV0IGluZm9ybWF0aW9uID0gZGF0YS5pbmZvcm1hdGlvbjtcclxuICAgICAgaWYgKHRoaXMuaW5mb1dpbmRvd1RlbXBsYXRlKSB7XHJcbiAgICAgICAgaW5mb3JtYXRpb24gPSBUZW1wbGF0ZVV0aWwucGFyc2UodGhpcy5pbmZvV2luZG93VGVtcGxhdGUsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgb2Zmc2V0OiBuZXcgQk1hcEdMLlNpemUoMCwgMCksXHJcbiAgICAgICAgd2lkdGg6IHRoaXMuaW5mb1dpbmRvd1dpZHRoIHx8IDAsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmluZm9XaW5kb3dIZWlnaHQgfHwgMCxcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBCTWFwR0wuSW5mb1dpbmRvdyhpbmZvcm1hdGlvbiwgb3B0aW9ucyk7XHJcbiAgICAgIC8vIOesrOS4gOasoeaJk+W8gOS/oeaBr+eql+WPo+WQjuWcqOefreaXtumXtOWFs+mXreaIlumHjeaWsOaJk+W8gOS8muWvvOiHtGNsaWNr5LqL5Lu25aSx5pWI77yM5Li05pe26Kej5Yaz5pa55qGI5piv56ys5LiA5qyh5omT5byA5ZCOMC4156eS5YaF5LiN5YWz6ZetXHJcbiAgICAgIGlmICghdGhpcy5maXJzdE9wZW4pIHtcclxuICAgICAgICBpZiAodGhpcy5maXJzdE9wZW5Qcm9taXNlKSB7XHJcbiAgICAgICAgICB0aGlzLmZpcnN0T3BlblByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwLm9wZW5JbmZvV2luZG93KGluZm9XaW5kb3csIHBvaW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpcnN0T3BlblByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmZpcnN0T3BlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5maXJzdE9wZW5Qcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMubWFwLm9wZW5JbmZvV2luZG93KGluZm9XaW5kb3csIHBvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmF3Q2xvc2UgPSBpbmZvV2luZG93LmNsb3NlO1xyXG4gICAgICAgIGluZm9XaW5kb3cuY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maXJzdE9wZW5Qcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RPcGVuUHJvbWlzZS50aGVuKCgpID0+IHJhd0Nsb3NlLmNhbGwoaW5mb1dpbmRvdykpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmF3Q2xvc2UuY2FsbChpbmZvV2luZG93KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWFwLm9wZW5JbmZvV2luZG93KGluZm9XaW5kb3csIHBvaW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaW5mb1dpbmRvdztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENhbnZhc092ZXJsYXkoY2hpbGQ6IGFueSkge1xyXG4gICAgbGV0IGNhbnZhc092ZXJsYXk7XHJcbiAgICBpZiAodGhpcy5lbmFibGUzRCkge1xyXG4gICAgICBjb25zdCBpdGVtID0gY2hpbGQuaXRlbTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICB2YXIgcFN0YXJ0ID0gbmV3IEJNYXBHTC5Qb2ludChpdGVtLnN0YXJ0LmxuZywgaXRlbS5zdGFydC5sYXQpO1xyXG4gICAgICAgIHZhciBwRW5kID0gbmV3IEJNYXBHTC5Qb2ludChpdGVtLmVuZC5sbmcsIGl0ZW0uZW5kLmxhdCk7XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IG5ldyBCTWFwR0wuQm91bmRzKG5ldyBCTWFwR0wuUG9pbnQocFN0YXJ0LmxuZywgcEVuZC5sYXQpLCBuZXcgQk1hcEdMLlBvaW50KHBFbmQubG5nLCBwU3RhcnQubGF0KSk7XHJcbiAgICAgICAgY2FudmFzT3ZlcmxheSA9IG5ldyBCTWFwR0wuR3JvdW5kT3ZlcmxheShib3VuZHMsIHtcclxuICAgICAgICAgIHR5cGU6ICdjYW52YXMnLFxyXG4gICAgICAgICAgdXJsOiBpdGVtLmNhbnZhcyxcclxuICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBvaW50VG9QaXhlbCA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcG9pbnQgPSBuZXcgQk1hcEdMLlBvaW50KGRhdGEubG5nLCBkYXRhLmxhdCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLnBvaW50VG9QaXhlbChwb2ludCk7XHJcbiAgICAgIH07XHJcbiAgICAgIGNhbnZhc092ZXJsYXkgPSBuZXcgQk1hcEdMLkNhbnZhc0xheWVyKHtcclxuICAgICAgICBwYW5lTmFtZTogJ21hcmtlclNoYWRvdycsXHJcbiAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgIGlmICghY3R4KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgY2hpbGQudXBkYXRlKGN0eCwgcG9pbnRUb1BpeGVsKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjYW52YXNPdmVybGF5O1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnZpZXcpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLnZpZXcuZGVzdHJveSgpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubWFwKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5tYXAuZGVzdHJveSgpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbWFwTG9hZGVkKG1hcDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jaXR5TmFtZSkge1xyXG4gICAgICBpZiAodGhpcy5jaXR5TmFtZSA9PT0gJ+a4qeW3nicpIHtcclxuICAgICAgICB0aGlzLmNpdHlOYW1lID0gJ3dlbnpob3UnO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGpzb246IGFueSA9IGF3YWl0IHRoaXMuaHR0cC5nZXQoJ2Fzc2V0cy9lY2hhcnRzL21hcC9qc29uLycgKyB0aGlzLmNpdHlOYW1lICsgJy5qc29uJykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IHBvbHlnb25EYXRhID0gW107XHJcbiAgICAgIGxldCBlbmNvZGVTY2FsZSA9IGpzb24uVVRGOFNjYWxlIHx8IDEwMjQ7XHJcbiAgICAgIGpzb24uZmVhdHVyZXMuZm9yRWFjaCgoeyBnZW9tZXRyeSB9KSA9PiB7XHJcbiAgICAgICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMgPSAoZ2VvbWV0cnkuY29vcmRpbmF0ZXMgYXMgYW55W10pLmZvckVhY2goKGNvb3JkaW5hdGUsIGkpID0+IHtcclxuICAgICAgICAgIGlmIChnZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IChjb29yZGluYXRlIGFzIGFueVtdKS5tYXAoKHBvaW50cywgaikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChqc29uLlVURjhFbmNvZGluZykge1xyXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gdGhpcy5kZWNvZGVQb2x5Z29uKHBvaW50cywgZ2VvbWV0cnkuZW5jb2RlT2Zmc2V0c1tpXVtqXSwgZW5jb2RlU2NhbGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gcG9pbnRzO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcG9seWdvbkRhdGEucHVzaChjb29yZGluYXRlcyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoanNvbi5VVEY4RW5jb2RpbmcpIHtcclxuICAgICAgICAgICAgICBjb29yZGluYXRlID0gdGhpcy5kZWNvZGVQb2x5Z29uKGNvb3JkaW5hdGUsIGdlb21ldHJ5LmVuY29kZU9mZnNldHNbaV0sIGVuY29kZVNjYWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwb2x5Z29uRGF0YS5wdXNoKFtjb29yZGluYXRlXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBkYXRhID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGdlb21ldHJ5OiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdNdWx0aVBvbHlnb24nLFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczogcG9seWdvbkRhdGEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIHZhciBsYXllciA9IG5ldyBtYXB2Z2wuUG9seWdvbkxheWVyKHtcclxuICAgICAgICBsaW5lQ29sb3I6IHRoaXMubWFwQ2l0eUNvbG9yLFxyXG4gICAgICAgIGxpbmVXaWR0aDogdGhpcy5zdHJva2VzaXplIHx8IDIsXHJcbiAgICAgICAgZmlsbENvbG9yOiB0aGlzLnNoYWRlQ29sb3IsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICByZW5kZXJPcmRlcjogLTIsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXcuYWRkTGF5ZXIobGF5ZXIpO1xyXG4gICAgICBpZiAodGhpcy5tYXBCYWNrQ29sb3IgJiYgIXRoaXMubWFwQmFja0NvbG9yLm1hdGNoKC9yZ2JhXFwoXFxkKyxcXGQrLFxcZCssMFxcKS8pKSB7XHJcbiAgICAgICAgdmFyIG1hc2tMYXllciA9IG5ldyBtYXB2Z2wuTWFza0xheWVyKHtcclxuICAgICAgICAgIGNvbG9yOiB0aGlzLm1hcEJhY2tDb2xvcixcclxuICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICByZW5kZXJPcmRlcjogLTMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy52aWV3LmFkZExheWVyKG1hc2tMYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlY29kZVBvbHlnb24oY29vcmRpbmF0ZTogc3RyaW5nLCBlbmNvZGVPZmZzZXRzOiBudW1iZXJbXSwgZW5jb2RlU2NhbGU6IG51bWJlcikge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICBsZXQgcHJldlggPSBlbmNvZGVPZmZzZXRzWzBdO1xyXG4gICAgbGV0IHByZXZZID0gZW5jb2RlT2Zmc2V0c1sxXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3JkaW5hdGUubGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgdmFyIHggPSBjb29yZGluYXRlLmNoYXJDb2RlQXQoaSkgLSA2NDtcclxuICAgICAgdmFyIHkgPSBjb29yZGluYXRlLmNoYXJDb2RlQXQoaSArIDEpIC0gNjQ7XHJcbiAgICAgIC8vIFppZ1phZyBkZWNvZGluZ1xyXG4gICAgICB4ID0gKHggPj4gMSkgXiAtKHggJiAxKTtcclxuICAgICAgeSA9ICh5ID4+IDEpIF4gLSh5ICYgMSk7XHJcbiAgICAgIC8vIERlbHRhIGRlb2NkaW5nXHJcbiAgICAgIHggKz0gcHJldlg7XHJcbiAgICAgIHkgKz0gcHJldlk7XHJcblxyXG4gICAgICBwcmV2WCA9IHg7XHJcbiAgICAgIHByZXZZID0geTtcclxuICAgICAgLy8gRGVxdWFudGl6ZVxyXG4gICAgICByZXN1bHQucHVzaChbeCAvIGVuY29kZVNjYWxlLCB5IC8gZW5jb2RlU2NhbGVdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbWFwVHlwZUNoYW5nZShtYXBUeXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAobWFwVHlwZSkge1xyXG4gICAgICBjYXNlICdkYXJrJzpcclxuICAgICAgICBpZiAoIXRoaXMuZGFya1N0eWxlKSB7XHJcbiAgICAgICAgICB0aGlzLmRhcmtTdHlsZSA9IGF3YWl0IHRoaXMuaHR0cC5nZXQoJ2Fzc2V0cy9lY2hhcnRzL21hcC9qc29uL2N1c3RvbV9tYXAuanNvbicpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1hcC5zZXRNYXBUeXBlKEJNQVBfTk9STUFMX01BUCk7XHJcbiAgICAgICAgdGhpcy5tYXAuc2V0TWFwU3R5bGVWMih7IHN0eWxlSnNvbjogdGhpcy5kYXJrU3R5bGUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3NhdGVsbGl0ZSc6XHJcbiAgICAgICAgdGhpcy5tYXAuc2V0TWFwVHlwZShCTUFQX1NBVEVMTElURV9NQVApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjdXN0b20nOlxyXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZFN0eWxlKSB7XHJcbiAgICAgICAgICBjb25zdCBzdHlsZUpzb24gPSBhd2FpdCB0aGlzLmh0dHAuZ2V0KHRoaXMudXBsb2FkU3R5bGUpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgdGhpcy5tYXAuc2V0TWFwVHlwZShCTUFQX05PUk1BTF9NQVApO1xyXG4gICAgICAgICAgdGhpcy5tYXAuc2V0TWFwU3R5bGVWMih7IHN0eWxlSnNvbiB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5tYXAuc2V0TWFwVHlwZShCTUFQX05PUk1BTF9NQVApO1xyXG4gICAgICAgIHRoaXMubWFwLnNldE1hcFN0eWxlVjIoeyBzdHlsZUpzb246IG51bGwgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|